Advertisement
Guest User

Untitled

a guest
Aug 8th, 2021
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.68 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#5s;
  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.         (* Deactivate FB after first data received *)
  110.         IF udtExample.udtMB_TCP_FC3.xNDR = TRUE THEN
  111.             udtExample.udtMB_TCP_FC3.xActivate := FALSE;
  112.         END_IF;
  113.         IF
  114.             udtExample.udtMB_TCP_FC3.xActive = TRUE AND
  115.             udtExample.udtMB_TCP_FC3.xError = FALSE
  116.         THEN
  117.             iState := MB1_STATE#CHECK_SECOND_VALUES_READ;
  118.         END_IF;
  119.  
  120.     MB1_STATE#CHECK_SECOND_VALUES_READ:
  121.         (* Deactivate FB after first data received *)
  122.         IF udtExample.udtMB_TCP_FC3.xNDR = TRUE THEN
  123.             udtExample.udtMB_TCP_FC3.xActivate := FALSE;
  124.         END_IF;
  125.         (* Modbus server has to deliver these values! *)
  126.         IF
  127.             udtExample.udtMB_TCP_FC3.xError = FALSE AND
  128.             udtExample.udtMB_TCP_FC3.uiByteCount = UINT#10
  129.         THEN
  130.             iState := MB1_STATE#DEACTIVATE_F3_SECOND;
  131.         END_IF;
  132.  
  133.     MB1_STATE#DEACTIVATE_F3_SECOND:
  134.         udtExample.udtMB_TCP_FC3.xActivate := FALSE;
  135.         iState := MB1_STATE#WAITING_FOR_INACTIVE_SECOND;
  136.        
  137.     MB1_STATE#WAITING_FOR_INACTIVE_SECOND:
  138.         IF udtExample.udtMB_TCP_FC3.xActive = FALSE THEN
  139.             iState := MB1_STATE#FINISH_OR_RESTART;
  140.         END_IF;
  141.  
  142.     MB1_STATE#FINISH_OR_RESTART:
  143.         IF (xRestartIfFinished = TRUE) THEN
  144.             udtExample.uiRestartIfFinished := udtExample.uiRestartIfFinished + UINT#1;
  145.             iState := MB1_STATE#CLIENT_INITIALISATION;
  146.         END_IF;
  147.         IF (xStart = FALSE) THEN
  148.             iState := MB1_STATE#FINISH_WAITING_FOR_INACTIVE;
  149.         END_IF;
  150.  
  151.     MB1_STATE#FINISH_DEACTIVATE_CLIENT:
  152.         udtExample.udtClient.xActivate := FALSE;
  153.         iState := MB1_STATE#FINISH_WAITING_FOR_INACTIVE;
  154.        
  155.     MB1_STATE#FINISH_WAITING_FOR_INACTIVE:
  156.         IF (
  157.             udtExample.udtMB_TCP_FC3.xActive = FALSE
  158.         ) THEN
  159.             iState := MB1_STATE#WAITING_FOR_START;
  160.         END_IF;
  161. END_CASE;
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement