Пожалуйста
Вот пример (не полный) работы с ЧРП
Код:
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;