Hallo,
ich habe bisher die serielle Kommunikation immer nur über einen binär geöffneten Kanal durchgeführt, so dass man sich das Öffnen und Schließen spart, wenn man Schreiben bzw. Lesen will.
Desweiteren solltest Du eine Fehlerbehandlung für die Überschreitung der Wartezeit einfügen, denn sonst wird der Timeout-Fehler als Systemfehler angezeigt.
Anbei ein kurzes Beispiel für den binären Zugriff, wobei Du die Fehlerbehandlung noch fertig programmieren musst.
Open "sio1:", com1\Bin;
ClearIOBuff com1; !Löschen des Eingangspuffers (evtl. gibt es diese Instruktion in Deiner Steuerung noch nicht)
WriteStrBin com1, "H";
Set DO10_14; ! Wird benoetigt um den String von der Kamera zu senden
stDaten:=ReadStrBin(com1,20\Time:=5); ! 123456A123456B12345C 20 Zeichen
Close com1;
Reset DO10_14;
ERROR
IF ERRNO=ERR_DEV_MAXTIME THEN
!Timeout fehler behandeln
Reset DO10_14;
...
ENDIF
IF ERRNO=ERR_FILEACC THEN
!Zugriffsgehler behandeln
...
ENDIF
ENDPROC
Prinzipiell gibt es bei der seriellen Kommunikation die folgenden möglichen Fehler:
1. Das Kabel ist nicht gekreuzt (Nullmodemkabel)
2. Die Kommunikationsparameter sind an beiden Steuerungen nicht identisch (also Baudrate, Stopbit, Parität, Anzahl der Bits)
3. Es fehlen Steuerzeichen bei der Übertragung der Daten (z.B. "\0D" für
Carriage
Return)
4. Die Anzahl der zu übertragenden Zeichen stimmt nicht mit der erwarteten Anzahl überein.
Anmerkung:Die Bezeichnung der Signale (z.B. DO10_14) solltest Du vielleicht nochmal überdenken, den die Verwendung der physikalischen Adresse im Signalnamen bedeutet, dass der gesamte Programmcode angepasst werden muss, wenn das Signal auf eine andere Karte bzw. anderen Kanal gelegt wird. Desweiteren ist für einen Aussenstehenden die Verwendung des Signals nicht klar, hier würde eher eine Signalbezeichnung helfen, die die Funktion des Signals beschreibt.
Gruß
Micky