1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | VisuElems.g_ClientManager.BeginIteration(); IF pClient^.GlobalData.ClientType = VisuElems.Visu_ClientType.WebVisualization THEN _VisuFbClientTagDataHelper(pClientData := pClient); i := STRING_TO_UINT(_VisuFbClientTagDataHelper.stName); IF i > 0 AND i <= FR_NUM THEN u := i; VisuElems.CURRENTVISU := DEF_VIZU; END_IF END_IF END_WHILE FOR i := 1 TO Freq_Control.FR_NUM DO // check connection to server cTCP_RTU[i].xEnable := FALSE; // reconnect need in next cycle bMBFault[i] := TRUE; tonClientTCP(IN := TON_recon, PT := T_CL_RST); FOR i := 1 TO Freq_Control.FR_NUM DO cTCP_RTU[i](); cTCP_RTU[i].xEnable := FALSE; // reconnect need in next cycle bMBFault[i] := TRUE; wErrCount[i] := wErrCount[i] + 1; (*IF wErrCount[i] < MB_CRASH THEN wErrCount[i] := wErrCount[i] + 1; ELSIF wErrCount[i] >= MB_CRASH THEN bMBFault[i] := TRUE; END_IF*) END_IF ELSE //wErrCount[i] := 0; bMBFault[i] := FALSE; ELSE // not execute IF eReqState[i] = FIRST_REQ THEN eReqState[i] := INPUTS_REQ; pI^.ReadInputs(); CONTINUE; ELSIF eReqState[i] = INPUTS_REQ THEN bTemp[i] := pI^.IsRemote(); IF bTemp[i] <> bRemote[i] THEN eReqState[i] := REMOTE_SET; pI^.SetRemote(bTemp[i]); CONTINUE; ELSE eReqState[i] := STATUS_REQ; ELSIF eReqState[i] = REMOTE_SET THEN eReqState[i] := REMOTE_SETF; pI^.SetRemoteF(bTemp[i]); ELSIF eReqState[i] = REMOTE_SETF THEN eReqState[i] := STATUS_REQ; bRemote[i] := bTemp[i]; ELSIF eReqState[i] = STATUS_REQ THEN eReqState[i] := ERROR_REQ; pI^.ReadStatus(); ELSIF eReqState[i] = ERROR_REQ THEN pI^.CheckStart(); IF pI^.GetError() <> NO_ERROR THEN bFreqFault[i] := TRUE; eReqState[i] := RESET_REQ; pI^.ResetDriver(); bFreqFault[i] := FALSE; eReqState[i] := FREQ_GET_REQ; pI^.ReadFreqRef(); ELSIF eReqState[i] = RESET_REQ THEN eReqState[i] := FIRST_REQ; ELSIF eReqState[i] = FREQ_GET_REQ THEN eReqState[i] := FREQ_SET_REQ; pI^.ReadFreqAct(); ELSIF eReqState[i] = FREQ_SET_REQ THEN wFreqAct[i] := pI^.GetFreqAct(); wFreqRef[i] := pI^.GetFreqRef(); eReqState[i] := CONTROL_REQ; ELSIF eReqState[i] = CONTROL_REQ THEN IF i = u THEN // active PUMP group IF bRst[i] THEN wErrCount[i] := 0; END_IF IF pI^.StopRotation(NOT bStartKey[i]) OR pI^.StartRotation(bStartKey[i]) OR pI^.SetFreq(wFreqNew[i]) THEN wUserID := DWORD_TO_WORD(VisuElems.CurrentUserGroupId); eReqState[i] := STATUS_REQ; CONTINUE; ELSE eReqState[i] := FIRST_REQ; IF bEnable[i] AND Ifdrv[i].IsConnected() THEN {a9ed5b7e-75c5-4651-af16-d2c27e98cb94} VAR ClientName=< >.*) bRst: ARRAY [1...Freq_Control.FR_NUM] OF BOOL; tonClientTCP: TON; i: UINT; wUserID: WORD := 0; Ifdrv: ARRAY [1...Freq_Control.FR_NUM] OF IFreqDriver :=[ sHostAddr: ARRAY [1...Freq_Control.FR_NUM] OF STRING := [ '192.168.10.204', '192.168.10.206', '192.168.10.203', '192.168.10.209', '192.168.10.205', '192.168.10.202', '192.168.10.201', '192.168.10.207', '192.168.10.208', '192.168.10.200']; eReqState: ARRAY [1...Freq_Control.FR_NUM] OF REQUEST_STATE := [Freq_Control.FR_NUM(FIRST_REQ)]; wErrCount: ARRAY [1...Freq_Control.FR_NUM] OF WORD := [Freq_Control.FR_NUM(0)]; wFreqNew: ARRAY [1...Freq_Control.FR_NUM] OF WORD := [Freq_Control.FR_NUM(0)]; wFreqAct: ARRAY [1...Freq_Control.FR_NUM] OF WORD := [Freq_Control.FR_NUM(0)]; wFreqRef: ARRAY [1...Freq_Control.FR_NUM] OF WORD := [Freq_Control.FR_NUM(0)]; bStartKey: ARRAY [1...Freq_Control.FR_NUM] OF BOOL; bMBFault: ARRAY [1...Freq_Control.FR_NUM] OF BOOL := [Freq_Control.FR_NUM(FALSE)]; bFreqFault: ARRAY [1...Freq_Control.FR_NUM] OF BOOL := [Freq_Control.FR_NUM(FALSE)]; pI: POINTER TO IFreqDriver; TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE]; VAR CONSTANT MB_CRASH: UINT := 12; T_CL_RST: TIME := T#10S; // check connection time NO_ERROR: WORD := 0; (* Modbus TCP Slave Device: 192.168.10.50(60) ( 502) 04H: READ INPUT REGISTERS 7...10 ( 06d...09d, 16d...19d) | / | | | | | | RS485/Ethernet| |-----------------------------------------------------------------------------------------------| | 1 | 1 | 1 |ONI M680-33E15-18TIP20 | 192.168.10.74 | 192.168.10.94 | 192.168.10.204| | 2 | 2 | 2 |ONI M680-33E15-18TIP20 | 192.168.10.76 | 192.168.10.96 | 192.168.10.206| | 3 | 3 | 3 |ELHART EMD-MINI-110 T | 192.168.10.73 | 192.168.10.93 | 192.168.10.203| | 4 | 4 | 4 | -63-400 | 192.168.10.79 | - | - | | 5 | 5 | 5\1 |ELHART EMD-PUMP-0370 T | 192.168.10.75 | 192.168.10.95 | 192.168.10.205| | 6 | 7 | 7 |ELHART EMD-PUMP-110 T | 192.168.10.72 | 192.168.10.92 | 192.168.10.202| | 7 | 8 | 8 |ONI M680-33E15-18TIP20 | 192.168.10.71 | 192.168.10.91 | 192.168.10.201| | 8 | 10 | 5\2 |ELHART EMD-PUMP-0370 T | 192.168.10.77 | - | - | | 9 | 21 | 21\1 |ONI M680-33E15-18TIP20 | 192.168.10.78 | - | - | 00d: 1 ( 0,01 ) 02d: --||-- 3 04d: --||-- 5 |