Итак, сегодня снова добрался до агрегата и почти победил: в терминале отвечает всё как положено. А вот в самом СПК110 возникла загвоздка: приходит, порой, всякая казябра. Поигравшись с таймаутами на чтение (60 мс) и запись (10 мс), а так же с интервалом выполнения цикла (200 мс), стал получать то, что можно увидеть на скрине ниже (очень похоже: должно быть ":160228-M 0x00 000010")
debug.PNG
У кого какие мысли: чем выпрямить мои многострадальные руки?)
Ну и действующий код
Код:
PROGRAM PLC_PRG
VAR
SendBuffer : STRING;
sendByte: UDINT;
readByte: UDINT;
RS : STRING:='0';
i:INT;
y:BYTE:=0;
Send_B:BOOL;
b_timerIN: BOOL;
b_timerOUT:BOOL;
SendPeriod:TON;
END_VAR
IF COM_SERVICE3.Ready=FALSE THEN
OpC3();(*Программа открытия порта с настройками*)
END_IF
IF COM_SERVICE3.Ready=TRUE THEN
IF Send_B=TRUE THEN
SendBuffer:= ':160228-m alm.status rd$R';
y:= INT_TO_BYTE(LEN(SendBuffer));
sendByte:=ComSerice.SysComWrite(COM_SERVICE3.handle,ADR(sendBuffer),y,10,0);
Send_B:=FALSE;
END_IF
readByte:=ComSerice.SysComRead(COM_SERVICE3.handle,ADR(RS[0]),30,60,0);
END_IF
SendPeriod(IN:=b_timerIN , PT:=T#500MS , Q=>b_timerOUT);(*Интервал отправки*)
IF b_timerIN=FALSE THEN
b_timerIN:=TRUE;
END_IF
IF b_timerOUT=TRUE THEN
b_timerIN:=FALSE;
Send_B:=TRUE;
END_IF