Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*
- TYPE
- MB1_STATE : (
- WAITING_FOR_START := 0,
- CLIENT_INITIALISATION := 10,
- CLIENT_START := 100,
- WAITING_FOR_ACTIVE_OR_ERROR := 150,
- ACTIVATE_F3_FIRST := 1000,
- WAITING_FOR_ACTIVE_FISRT := 1005,
- CHECK_FIRST_VALUE := 1010,
- DEACTIVATE_F3_FIRST := 2000,
- WAITING_FOR_INACTIVE_FISRT := 2005,
- ACTIVATE_F3_SECOND := 2010,
- WAITING_FOR_ACTIVE_SECOND := 2015,
- CHECK_SECOND_VALUES_READ := 2020,
- DEACTIVATE_F3_SECOND := 2100,
- WAITING_FOR_INACTIVE_SECOND := 2150,
- FINISH_OR_RESTART := 2200,
- FINISH_DEACTIVATE_CLIENT := 2500,
- FINISH_WAITING_FOR_INACTIVE := 3000
- ) := WAITING_FOR_START;
- END_TYPE
- *)
- CASE iState OF
- MB1_STATE#WAITING_FOR_START:
- IF xStart = TRUE THEN
- iState := MB1_STATE#CLIENT_INITIALISATION;
- END_IF;
- MB1_STATE#CLIENT_INITIALISATION:
- (* Client *)
- udtExample.udtClient.xActivate := FALSE;
- udtExample.udtClient.xAutoAck := FALSE;
- udtExample.udtClient.strServer_IP := '192.168.1.166';
- udtExample.udtClient.iPort := 5020;
- udtExample.udtClient.xUDP_Mode := FALSE;
- udtExample.udtClient.tTimeout := TIME#5s;
- udtExample.udtClient.tReconnectDelay := TIME#1s;
- (* FC3 function block *)
- udtExample.udtMB_TCP_FC3.xActivate := FALSE;
- udtExample.udtMB_TCP_FC3.iMT_ID := 1;
- iState := MB1_STATE#CLIENT_START;
- MB1_STATE#CLIENT_START:
- udtExample.udtClient.xActivate := TRUE;
- iState := MB1_STATE#WAITING_FOR_ACTIVE_OR_ERROR;
- MB1_STATE#WAITING_FOR_ACTIVE_OR_ERROR:
- IF (udtExample.udtClient.xActive = TRUE) THEN
- iState := MB1_STATE#ACTIVATE_F3_FIRST;
- END_IF;
- IF(
- udtExample.udtClient.xError = TRUE
- AND xRestartIfError = TRUE
- ) THEN
- udtExample.uiRestartIfError := udtExample.uiRestartIfError + UINT#1;
- iState := MB1_STATE#CLIENT_INITIALISATION;
- END_IF;
- MB1_STATE#ACTIVATE_F3_FIRST:
- udtExample.udtMB_TCP_FC3.xActivate := TRUE;
- udtExample.udtMB_TCP_FC3.uiQuantityOfRegisters := UINT#1;
- (* udtFC3.arrRegisterValues = ARRAY [1..125] OF WORD *)
- udtExample.udtMB_TCP_FC3.wStartRegister := WORD#0;
- iState := MB1_STATE#WAITING_FOR_ACTIVE_FISRT;
- MB1_STATE#WAITING_FOR_ACTIVE_FISRT:
- IF (udtExample.udtMB_TCP_FC3.xActive = TRUE) THEN
- iState := MB1_STATE#CHECK_FIRST_VALUE;
- END_IF;
- IF(
- udtExample.udtMB_TCP_FC3.xError = TRUE
- AND xRestartIfError = TRUE
- ) THEN
- udtExample.uiRestartIfError := udtExample.uiRestartIfError + UINT#1;
- iState := MB1_STATE#CLIENT_INITIALISATION;
- END_IF;
- MB1_STATE#CHECK_FIRST_VALUE:
- (* Modbus server has to deliver these values! *)
- IF (udtExample.udtMB_TCP_FC3.xError = FALSE)
- AND (udtExample.udtMB_TCP_FC3.arrRegisterValue[1] = WORD#16#07D0)
- THEN
- iState := MB1_STATE#DEACTIVATE_F3_FIRST;
- END_IF;
- MB1_STATE#DEACTIVATE_F3_FIRST:
- udtExample.udtMB_TCP_FC3.xActivate := FALSE;
- iState := MB1_STATE#WAITING_FOR_INACTIVE_FISRT;
- MB1_STATE#WAITING_FOR_INACTIVE_FISRT:
- IF (udtExample.udtMB_TCP_FC3.xActive = FALSE) THEN
- iState := MB1_STATE#ACTIVATE_F3_SECOND;
- END_IF;
- MB1_STATE#ACTIVATE_F3_SECOND:
- udtExample.udtMB_TCP_FC3.xActivate := TRUE;
- udtExample.udtMB_TCP_FC3.uiQuantityOfRegisters := UINT#5;
- udtExample.udtMB_TCP_FC3.wStartRegister := WORD#0;
- iState := MB1_STATE#WAITING_FOR_ACTIVE_SECOND;
- MB1_STATE#WAITING_FOR_ACTIVE_SECOND:
- (* Deactivate FB after first data received *)
- IF udtExample.udtMB_TCP_FC3.xNDR = TRUE THEN
- udtExample.udtMB_TCP_FC3.xActivate := FALSE;
- END_IF;
- IF
- udtExample.udtMB_TCP_FC3.xActive = TRUE AND
- udtExample.udtMB_TCP_FC3.xError = FALSE
- THEN
- iState := MB1_STATE#CHECK_SECOND_VALUES_READ;
- END_IF;
- MB1_STATE#CHECK_SECOND_VALUES_READ:
- (* Deactivate FB after first data received *)
- IF udtExample.udtMB_TCP_FC3.xNDR = TRUE THEN
- udtExample.udtMB_TCP_FC3.xActivate := FALSE;
- END_IF;
- (* Modbus server has to deliver these values! *)
- IF
- udtExample.udtMB_TCP_FC3.xError = FALSE AND
- udtExample.udtMB_TCP_FC3.uiByteCount = UINT#10
- THEN
- iState := MB1_STATE#DEACTIVATE_F3_SECOND;
- END_IF;
- MB1_STATE#DEACTIVATE_F3_SECOND:
- udtExample.udtMB_TCP_FC3.xActivate := FALSE;
- iState := MB1_STATE#WAITING_FOR_INACTIVE_SECOND;
- MB1_STATE#WAITING_FOR_INACTIVE_SECOND:
- IF udtExample.udtMB_TCP_FC3.xActive = FALSE THEN
- iState := MB1_STATE#FINISH_OR_RESTART;
- END_IF;
- MB1_STATE#FINISH_OR_RESTART:
- IF (xRestartIfFinished = TRUE) THEN
- udtExample.uiRestartIfFinished := udtExample.uiRestartIfFinished + UINT#1;
- iState := MB1_STATE#CLIENT_INITIALISATION;
- END_IF;
- IF (xStart = FALSE) THEN
- iState := MB1_STATE#FINISH_WAITING_FOR_INACTIVE;
- END_IF;
- MB1_STATE#FINISH_DEACTIVATE_CLIENT:
- udtExample.udtClient.xActivate := FALSE;
- iState := MB1_STATE#FINISH_WAITING_FOR_INACTIVE;
- MB1_STATE#FINISH_WAITING_FOR_INACTIVE:
- IF (
- udtExample.udtMB_TCP_FC3.xActive = FALSE
- ) THEN
- iState := MB1_STATE#WAITING_FOR_START;
- END_IF;
- END_CASE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement