Advertisement
Guest User

ExampleMachine_1 (modified)

a guest
Jul 30th, 2021
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.32 KB | None | 0 0
  1. (*
  2. TYPE
  3.  
  4.     MB1_STATE : (
  5.         WAITING_FOR_START := 0,
  6.         CLIENT_INITIALISATION := 10,
  7.         CLIENT_START := 100,
  8.         WAITING_FOR_ACTIVE_OR_ERROR := 150,
  9.         ACTIVATE_F3_FIRST := 1000,
  10.         WAITING_FOR_ACTIVE_FISRT := 1005,
  11.         CHECK_FIRST_VALUE := 1010,
  12.         DEACTIVATE_F3_FIRST := 2000,
  13.         WAITING_FOR_INACTIVE_FISRT := 2005,
  14.         ACTIVATE_F3_SECOND := 2010,
  15.         WAITING_FOR_ACTIVE_SECOND := 2015,
  16.         CHECK_SECOND_VALUES_READ := 2020,
  17.         DEACTIVATE_F3_SECOND := 2100,
  18.         WAITING_FOR_INACTIVE_SECOND := 2150,
  19.         FINISH_OR_RESTART := 2200,
  20.         FINISH_DEACTIVATE_CLIENT := 2500,
  21.         FINISH_WAITING_FOR_INACTIVE := 3000
  22.     ) := WAITING_FOR_START;
  23.  
  24. END_TYPE
  25. *)
  26.  
  27. CASE iState OF
  28.  
  29.     MB1_STATE#WAITING_FOR_START:
  30.         IF xStart = TRUE THEN
  31.             iState := MB1_STATE#CLIENT_INITIALISATION;
  32.         END_IF;
  33.  
  34.     MB1_STATE#CLIENT_INITIALISATION:
  35.         (* Client *)
  36.         udtExample.udtClient.xActivate := FALSE;
  37.         udtExample.udtClient.xAutoAck := FALSE;
  38.         udtExample.udtClient.strServer_IP := '192.168.1.166';
  39.         udtExample.udtClient.iPort := 5020;
  40.         udtExample.udtClient.xUDP_Mode := FALSE;
  41.         udtExample.udtClient.tTimeout := TIME#50s;
  42.         udtExample.udtClient.tReconnectDelay := TIME#1s;
  43.  
  44.         (* FC3 function block *)
  45.         udtExample.udtMB_TCP_FC3.xActivate := FALSE;
  46.         udtExample.udtMB_TCP_FC3.iMT_ID := 1;
  47.  
  48.         iState := MB1_STATE#CLIENT_START;
  49.  
  50.     MB1_STATE#CLIENT_START:
  51.         udtExample.udtClient.xActivate := TRUE;
  52.         iState := MB1_STATE#WAITING_FOR_ACTIVE_OR_ERROR;
  53.        
  54.     MB1_STATE#WAITING_FOR_ACTIVE_OR_ERROR:
  55.         IF (udtExample.udtClient.xActive = TRUE) THEN
  56.             iState := MB1_STATE#ACTIVATE_F3_FIRST;
  57.         END_IF;
  58.         IF(
  59.             udtExample.udtClient.xError = TRUE
  60.             AND xRestartIfError = TRUE
  61.         ) THEN
  62.             udtExample.uiRestartIfError := udtExample.uiRestartIfError + UINT#1;
  63.             iState := MB1_STATE#CLIENT_INITIALISATION;
  64.         END_IF;
  65.  
  66.     MB1_STATE#ACTIVATE_F3_FIRST:
  67.         udtExample.udtMB_TCP_FC3.xActivate := TRUE;
  68.         udtExample.udtMB_TCP_FC3.uiQuantityOfRegisters := UINT#1;
  69.         (* udtFC3.arrRegisterValues = ARRAY [1..125] OF WORD *)
  70.         udtExample.udtMB_TCP_FC3.wStartRegister := WORD#0;
  71.         iState := MB1_STATE#WAITING_FOR_ACTIVE_FISRT;
  72.        
  73.     MB1_STATE#WAITING_FOR_ACTIVE_FISRT:
  74.         IF (udtExample.udtMB_TCP_FC3.xActive = TRUE) THEN
  75.             iState := MB1_STATE#CHECK_FIRST_VALUE;
  76.         END_IF;
  77.         IF(
  78.             udtExample.udtMB_TCP_FC3.xError = TRUE
  79.             AND xRestartIfError = TRUE
  80.         ) THEN
  81.             udtExample.uiRestartIfError := udtExample.uiRestartIfError + UINT#1;
  82.             iState := MB1_STATE#CLIENT_INITIALISATION;
  83.         END_IF;
  84.  
  85.     MB1_STATE#CHECK_FIRST_VALUE:
  86.         (* Modbus server has to deliver these values! *)
  87.         IF (udtExample.udtMB_TCP_FC3.xError = FALSE)
  88.             AND (udtExample.udtMB_TCP_FC3.arrRegisterValue[1] = WORD#16#07D0)
  89.         THEN
  90.             iState := MB1_STATE#DEACTIVATE_F3_FIRST;
  91.         END_IF;
  92.  
  93.     MB1_STATE#DEACTIVATE_F3_FIRST:
  94.         udtExample.udtMB_TCP_FC3.xActivate := FALSE;
  95.         iState := MB1_STATE#WAITING_FOR_INACTIVE_FISRT;
  96.        
  97.     MB1_STATE#WAITING_FOR_INACTIVE_FISRT:
  98.         IF (udtExample.udtMB_TCP_FC3.xActive = FALSE) THEN
  99.             iState := MB1_STATE#ACTIVATE_F3_SECOND;
  100.         END_IF;
  101.  
  102.     MB1_STATE#ACTIVATE_F3_SECOND:
  103.         udtExample.udtMB_TCP_FC3.xActivate := TRUE;
  104.         udtExample.udtMB_TCP_FC3.uiQuantityOfRegisters := UINT#5;
  105.         udtExample.udtMB_TCP_FC3.wStartRegister := WORD#0;
  106.         iState := MB1_STATE#WAITING_FOR_ACTIVE_SECOND;
  107.    
  108.     MB1_STATE#WAITING_FOR_ACTIVE_SECOND:
  109.         IF
  110.             udtExample.udtMB_TCP_FC3.xActive = TRUE AND
  111.             udtExample.udtMB_TCP_FC3.xError = FALSE
  112.         THEN
  113.             iState := MB1_STATE#CHECK_SECOND_VALUES_READ;
  114.         END_IF;
  115.  
  116.     MB1_STATE#CHECK_SECOND_VALUES_READ:
  117.         (* Modbus server has to deliver these values! *)
  118.         IF
  119.             udtExample.udtMB_TCP_FC3.xError = FALSE AND
  120.             udtExample.udtMB_TCP_FC3.uiByteCount = UINT#10
  121.         THEN
  122.             iState := MB1_STATE#DEACTIVATE_F3_SECOND;
  123.         END_IF;
  124.  
  125.     MB1_STATE#DEACTIVATE_F3_SECOND:
  126.         udtExample.udtMB_TCP_FC3.xActivate := FALSE;
  127.         iState := MB1_STATE#WAITING_FOR_INACTIVE_SECOND;
  128.        
  129.     MB1_STATE#WAITING_FOR_INACTIVE_SECOND:
  130.         IF udtExample.udtMB_TCP_FC3.xActive = FALSE THEN
  131.             iState :=  MB1_STATE#FINISH_OR_RESTART;
  132.         END_IF;
  133.  
  134.     MB1_STATE#FINISH_OR_RESTART:
  135.         IF (xRestartIfFinished = TRUE) THEN
  136.             udtExample.uiRestartIfFinished := udtExample.uiRestartIfFinished + UINT#1;
  137.             iState := MB1_STATE#CLIENT_INITIALISATION;
  138.         END_IF;
  139.         IF (xStart = FALSE) THEN
  140.             iState := MB1_STATE#FINISH_WAITING_FOR_INACTIVE;
  141.         END_IF;
  142.  
  143.     MB1_STATE#FINISH_DEACTIVATE_CLIENT:
  144.         udtExample.udtClient.xActivate := FALSE;
  145.         iState := MB1_STATE#FINISH_WAITING_FOR_INACTIVE;
  146.        
  147.     MB1_STATE#FINISH_WAITING_FOR_INACTIVE:
  148.         IF (
  149.             udtExample.udtMB_TCP_FC3.xActive = FALSE
  150.         ) THEN
  151.             iState := MB1_STATE#WAITING_FOR_START;
  152.         END_IF;
  153. END_CASE;
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement