Вот несколько в сокращенном виде, для целых регистров и для не АС, но суть одна
Код:IF ComPortState = 2 THEN IF NOT EndSendStored THEN CASE Stage OF 1: SendModbus4( Enable:= ES, Mode:= MB_RTU, DevAddr:= 1, FirstAddr:= 1, Quantity:= 43, ComHandle:= Settings.Port, TimeOut:= Timeout, Buffer:= Buffer); IF SendModbus4.Complete THEN EndSendStored:=TRUE; ErrorSend4[1]:= SendModbus4.Exception; IF ErrorSend4[1] = 0 THEN AHU_Press:= Buffer[0]*256 + Buffer[1]; EF_Press:= Buffer[12]*256 + Buffer[13]; Water_Temp:= Buffer[24]*256 + Buffer[25]; Prom_Air_Temp:= Buffer[36]*256 + Buffer[37]; ELSE EndSendError:= TRUE; Stage:= 2; END_IF; END_IF; 2: SendModbus4( Enable:= ES, Mode:= MB_RTU, DevAddr:= 2, FirstAddr:= 1, Quantity:= 43, ComHandle:= Settings.Port, TimeOut:= Timeout, Buffer:= Buffer); IF SendModbus4.Complete THEN EndSendStored:=TRUE; ErrorSend4[2]:= SendModbus4.Exception; IF ErrorSend4[2] = 0 THEN iAHU2_Water:= Buffer[0]*256 + Buffer[1]; iAHU2_Temp:= Buffer[48]*256 + Buffer[49]; iAHU3_Water:= Buffer[12]*256 + Buffer[13]; iAHU3_Temp:= Buffer[60]*256 + Buffer[61]; iAHU4_Water:= Buffer[24]*256 + Buffer[25]; iAHU4_Temp:= Buffer[72]*256 + Buffer[73]; iAHU5_Water:= Buffer[36]*256 + Buffer[37]; iAHU5_Temp:= Buffer[84]*256 + Buffer[85]; ELSE EndSendError:= TRUE; Stage:= 4; END_IF; END_IF; ... END_CASE; ES:= FALSE; ELSE IF EndSendError THEN EndSendError:= FALSE; ES:= TRUE; EndSendStored:= FALSE; ELSE HavePause(IN:= EndSendStored,PT:=T#40ms); IF HavePause.Q THEN ES:= TRUE; EndSendStored:= FALSE; IF Stage >= 34 THEN Stage:= 1; ELSE Stage:= Stage+1; END_IF; END_IF; END_IF; END_IF; HavePause(IN:= EndSendStored,PT:=T#30ms); END_IF;




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