Il PLC Sirius-ES dispone di una porta seriale che può essere utilizzata come 232 o 485.
Dispone inoltre di 1 o 2 porte USB (a seconda del modello). La porta USB può essere utilizzata come porta seriale con un cavo FDTI.
Dal codice è possibile utilizzare queste porte per comunicare con dispositivi esterni.
Per utilizzare la connessione seriale, creare un POU utilizzato solo dalla porta seriale, in modo da non bloccare o rallentare altre parti del codice. QUINDI usarlo in un task a parte.
VAR
serial_handle : REF_TO ANY;
valid : BOOL;
serialPortOpen : COMPORT_OPEN;
END_VAR
serialPortOpen.COMPORTNAME :=(*Serial port name*)'COM1';
serialPortOpen.BAUDRATE := 9600;
serialPortOpen.PARITY := 'N';(* None, Even, Odd*)
serialPortOpen.DATABIT := 8;
serialPortOpen.STOPBIT := 1;
serialPortOpen.USE485 := false;
serialPortOpen.TIMEOUT := 100;
serialPortOpen.EXECUTE := false;
serialPortOpen.EXECUTE := true;
serialPortOpen();
serialPortOpen.EXECUTE := false;
serial_handle := serialPortOpen.COMPORT;
valid := serialPortOpen.VALID;
IF (NOT valid) THEN
(* Manage error *)
END_IF;
VAR
serial_handle : REF_TO ANY;
serialPortClose : COMPORT_CLOSE;
END_VAR
serialPortClose.COMPORT := `serial_handle`;
serialPortClose.EXECUTE := false;
serialPortClose.EXECUTE := true;
serialPortClose();
serialPortClose.EXECUTE := false;
serial_handle = -1;
VAR
serial_handle : REF_TO ANY;
serialPort_read : COMPORT_READ;
ch : BYTE;
END_VAR
REPEAT
serialPort_read.COMPORT := serial_handle;
serialPort_read.DATA := REF(ch);
serialPort_read.LENGTH := 1;
serialPort_read.EXECUTE := true;
serialPort_read();
IF (not serialPort_read.BUSY) THEN
IF serialPort_read.DONE THEN
(* Do something with received byte *)
END_IF;
serialPort_read.EXECUTE := false;
serialPort_read();
END_IF;
UNTIL(not serialPort_read.ERROR)
END_REPEAT;
VAR
serial_handle : REF_TO ANY;
serialPortWrite : COMPORT_WRITE;
txChar : BYTE;
END_VAR
txChar := 16#AA;
serialPortWrite.COMPORT := serial_handle ;
serialPortWrite.DATA := ref(txChar);
serialPortWrite.LENGTH := 1;
serialPortWrite.EXECUTE := true;
serialPortWrite();
serialPortWrite.EXECUTE := false;