-> Hier kostenlos registrieren
Guten Tag,
da ich leider schon einige Zeit in dieser Hinsicht festhänge möchte ich mich hier nochmal an dem Schwarmwissen erfreuen.
Ich versuche über eine Beckhoff EL6022 eine Agilent VacIon150 Iongetterpumpe anzusteuern. Mein Problem ist (denke ich) das aufbauen des Protokoll-String im geforderten Format. Ich habe bereits verschiedene Bausteine zum versenden und Empfangen der Strings gebaut, welche bei der Steuerung anderer Pumpen auch bereits funktionieren.
Für die Kommunikation mit der Pumpe is folgender Aufbau für den zu übergebenen String vorgesehen: https://www.agilent.com/cs/library/usermanuals/public/IPCMini.PDF
Meine Methode zur Erstellung sieht wie folgt aus:
Im laufenden Betrieb wird das entsprechende Telegram versandt und exakt das gleiche Telegram wieder im RXBuffer erhalten. Mich macht stutzig, das die Pumpe anscheinend antwortet, aber nur die Nachricht zurückschickt und nicht die angeforderten informationen. Ich hoffe jemand kann mir dabei weiterhelfen.
da ich leider schon einige Zeit in dieser Hinsicht festhänge möchte ich mich hier nochmal an dem Schwarmwissen erfreuen.
Ich versuche über eine Beckhoff EL6022 eine Agilent VacIon150 Iongetterpumpe anzusteuern. Mein Problem ist (denke ich) das aufbauen des Protokoll-String im geforderten Format. Ich habe bereits verschiedene Bausteine zum versenden und Empfangen der Strings gebaut, welche bei der Steuerung anderer Pumpen auch bereits funktionieren.
Für die Kommunikation mit der Pumpe is folgender Aufbau für den zu übergebenen String vorgesehen: https://www.agilent.com/cs/library/usermanuals/public/IPCMini.PDF
Meine Methode zur Erstellung sieht wie folgt aus:
METHOD BuildTelegramString : STRING
VAR_INPUT
Command : ST_AgilentTelegram;
Adress : INT;
END_VAR
VAR
ADDR : INT := 1;
STX : STRING := CHR(2); // Start of transmission
ETX : STRING := CHR(3); // End of transmission
WIN : ARRAY[1..3] OF BYTE;
WINSTRING : STRING;
CRC : ARRAY[1..2] OF STRING; //Kontroll-String
tempString : STRING;
crcValue : BYTE := 0;
i : INT;
data : STRING;
sCheckSum : BYTE;
sWIN : STRING;
END_VAR
VAR_OUTPUT
sTelegram : STRING;
END_VAR
WIN[1] := F_ToASC(str := Command.WIN);
WIN[2] := F_ToASC(DELETE(str := Command.WIN,1,1));
WIN[3] := F_ToASC(DELETE(str := Command.WIN,2,1));
WINSTRING := CONCAT(CONCAT(BYTE_TO_STRING(WIN[1]),BYTE_TO_STRING(WIN[2])),BYTE_TO_STRING(WIN[3]));
tempString := CONCAT(STX, CONCAT(INT_TO_STRING(16#80 + Adress), CONCAT(WINSTRING, CONCAT(Command.COM, ETX) )));
FOR i := 1 TO LEN(tempString)+1 DO
crcValue := crcValue XOR tempString;
END_FOR
CRC[1] := BYTE_TO_STRING(F_ToASC(BYTE_TO_STRING(crcValue)));
CRC[2] := BYTE_TO_STRING(F_ToASC(DELETE(BYTE_TO_STRING(crcValue),1,1)));
sTelegram := CONCAT(tempString, CRC[1]);
sTelegram := CONCAT(sTelegram, CRC[2]);
Im laufenden Betrieb wird das entsprechende Telegram versandt und exakt das gleiche Telegram wieder im RXBuffer erhalten. Mich macht stutzig, das die Pumpe anscheinend antwortet, aber nur die Nachricht zurückschickt und nicht die angeforderten informationen. Ich hoffe jemand kann mir dabei weiterhelfen.