Пожалуйста
Вот пример (не полный) работы с ЧРП
Код:PROGRAM InitComPort VAR COM_SERVICE1: COM_SERVICE; END_VAR IF ComPortState = 0 THEN Settings.Port:= 0; (*номер COM-порта*) Settings.dwBaudRate:=9600; (*скорость*) Settings.byParity:=0; Settings.dwTimeout:=0; Settings.byStopBits:=0; Settings.dwBufferSize:=0; Settings.dwScan:=0; END_IF IF ComPortState <> 2 THEN (*Открываем COM-порт*) COM_SERVICE1(Enable:=(ComPortState=0) , Settings:=Settings , Task:=OPEN_TSK ); (*Если COM-порт открыт, то переходим к приему и передачи данных *) IF COM_SERVICE1.ready THEN ComPortState:= 2; END_IF END_IFКод:PROGRAM ExModbus VAR SendModbus1: MB_RD_COILS; SendModbus2: MB_WR_SNG_REG; SendModbus3: MB_WR_SNG_COIL; SendModbus4: MB_RD_HOLD_REGS; SendModbus5: MB_WR_REGS; ES: BOOL:= TRUE; TimeOut: TIME:= T#150ms; Buffer: ARRAY[0..255] OF BYTE; ErrorSend1: ARRAY[1..4] OF BYTE; ErrorSend2: ARRAY[1..4] OF BYTE; ErrorSend3: ARRAY[1..4] OF BYTE; ErrorSend4: BYTE; ErrorSend5: BYTE; Stage: BYTE:= 1; EndSendStored: BOOL; EndSendError: BOOL:= FALSE; HavePause:TON; SpeedTmp: DWORD; Speed: WORD; END_VAR IF ComPortState = 2 THEN IF NOT EndSendStored THEN CASE Stage OF 1: SendModbus1( Enable:= ES, Mode:= MB_RTU, DevAddr:= 1, FirstAddr:= 40, Quantity:= 8, ComHandle:= Settings.Port, TimeOut:= Timeout, Buffer:= Buffer); IF SendModbus1.Complete THEN EndSendStored:=TRUE; ErrorSend1[1]:= SendModbus1.Exception; IF ErrorSend1[1] = 0 THEN AHU_CONT:= BYTE_TO_BOOL(Buffer[0] AND 8); ELSE AHU_CONT:= FALSE; EndSendError:= TRUE; Stage:= 4; END_IF; END_IF; 2: CASE FanSpeed OF 0: SpeedTmp:= (AHU_Speed1 - 25)*16#4000; 1: SpeedTmp:= (AHU_Speed2 - 25)*16#4000; 2: SpeedTmp:= (AHU_Speed3 - 25)*16#4000; END_CASE; Speed:= DWORD_TO_WORD(SpeedTmp / 75); SendModbus2( Enable:= ES, Mode:= MB_RTU, DevAddr:= 1, RegAddr:= 50009, Value:= Speed, ComHandle:= Settings.Port, TimeOut:= Timeout); IF SendModbus2.Complete THEN EndSendStored:=TRUE; ErrorSend2[1]:= SendModbus2.Exception; END_IF; 3: SendModbus3( Enable:= ES, Mode:= MB_RTU, DevAddr:= 1, CoilAddr:= 6, Value:= AHU_START, ComHandle:= Settings.Port, TimeOut:= Timeout); IF SendModbus3.Complete THEN EndSendStored:=TRUE; ErrorSend3[1]:= SendModbus3.Exception; END_IF; 4: SendModbus1( Enable:= ES, Mode:= MB_RTU, DevAddr:= 2, END_CASE; ES:= FALSE; ELSE IF EndSendError THEN EndSendError:= FALSE; ES:= TRUE; EndSendStored:= FALSE; ELSE HavePause(IN:= EndSendStored,PT:=T#100ms); IF HavePause.Q THEN ES:= TRUE; EndSendStored:= FALSE; IF Stage >= 14 THEN Stage:= 1; ELSE Stage:= Stage+1; END_IF; END_IF; END_IF; END_IF; HavePause(IN:= EndSendStored,PT:=T#100ms); END_IF;




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