Простой как плинтус пример:
Код: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мс. Кто-то может объяснить, какого лешего теряются данные?


Ответить с цитированием
