Простой как плинтус пример:
Код:
VAR_GLOBAL
comsvc: COM_SERVICE;
cs: COMSETTINGS;
END_VAR
Код:
PROGRAM PLC_PRG
VAR
c: INT;
rxbuf: ARRAY[0..511] OF BYTE;
END_VAR
IF XferCheck() THEN
REPEAT
c := DWORD_TO_INT(SysComRead(cs.Port, ADR(rxbuf), SIZEOF(rxbuf), 0));
IF c > 0 THEN BYTESREAD := BYTESREAD + c; END_IF
UNTIL c = 0
END_REPEAT
END_IF
функция проверки порта:
Код:
IF NOT comsvc.ready THEN
cs.Port := 1;
cs.dwBaudRate := 115200;
cs.byParity := 0;
cs.dwTimeout := 0;
cs.byStopBits := 0;
cs.dwBufferSize := 0;
cs.dwScan := 0;
comsvc(Enable:=TRUE, Settings:=cs, Task:=OPEN_TSK);
ELSE
comsvc.Enable := FALSE;
END_IF
XferCheck := comsvc.ready;
Запускаем пример, стартуем передачу в порт, ждем, тормозим передачу, получаем:
передано байт: 27060
BYTESREAD: 26981
В порт каждые 30 мсек шлется посылка длиной 16 байт, цикл ПЛК 1мс. Кто-то может объяснить, какого лешего теряются данные?