Итак, сегодня снова добрался до агрегата и почти победил: в терминале отвечает всё как положено. А вот в самом СПК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