Separately, it is worth mentioning the UPS, they are polled directly by SCADA, bypassing the PLC, via the SNMP protocol.
(* PLC_A2 *) %QX256.0 := A2_1QF1; // 256 %QX256.1 := A2_1QF2; // %QX256.2 := A2_QS1; %QX256.3 := A2_QS2; %QX256.4 := A2_3QF1; %QX256.5 := A2_3QF2; %QX256.6 := A2_3QF3; %QX256.7 := A2_3QF4; %QX256.8 := A2_3QF5; %QX256.9 := A2_3QF6; %QX256.10 := A2_3QF7; %QX256.11 := A2_3QF8; %QX256.12 := A2_3QF9; %QX256.13 := A2_3QF10; %QX256.14 := A2_KM1; %QX256.15 := A2_KM2; (* QF1 *) // â„– 1 %QW332 := QF1_I_L1; // %QW333 := QF1_I_L2; %QW334 := QF1_I_L3; %QW335 := QF1_U_L12; // () %QW336 := QF1_U_L23; %QW337 := QF1_U_L31; %QW338 := QF1_U_L1; // (-) %QW339 := QF1_U_L2; %QW340 := QF1_U_L3; %QW341 := QF1_P_L1; // %QW342 := QF1_P_L2; %QW343 := QF1_P_L3; %QW344 := QF1_P_Sum; // () %QW345 := QF1_Q_L1; // %QW346 := QF1_Q_L2; %QW347 := QF1_Q_L3; %QW348 := QF1_Q_Sum; // () %QW349 := QF1_S_Sum; // () %QW350 := QF1_CosF; //
// CODESYS, // Modbus TCP/IP. , , // 110-220.3 // - PROGRAM MBCFG_subCMS_1(* generated by config one prg for each slave *) VAR_OUTPUT U_L1 : WORD; (**) U_L2 : WORD; (**) U_L3 : WORD; (**) /*--- system variables (read only) ----------------------------------------*/ MBCFG_IpAddress : STRING(12) := 'XXX.XXX.XXX.XXX';//IP- Slave- MBCFG_Port : UINT := 502; //, MBCFG_UnitID : BYTE := 2; //ID Slave- MBCFG_TimeOut : TIME := t#300ms; // MBCFG_RequestDelay : TIME := t#1000ms; // MBCFG_Error : MBCFG_eERROR := MBCFG_START_UP; MBCFG_LastJob : MBCFG_typCOM_JOB; /*-------------------------------------------------------------------------*/ END_VAR VAR CONSTANT zz_VARIABLECOUNT: INT := 3; (* number of variables *) zz_JOBCOUNT : INT := 1; (* number of jobs *) END_VAR VAR /*=== VARIABLE LIST =============*/ zz_VariableList : ARRAY[1..zz_VARIABLECOUNT] OF MBCFG_typVARIABLE := ( DataType := MBCFG_TYPE_WORD, ByteOrder := MBCFG_BYTE_ORDER_0, BitSize := 16, ptVar := 0, ReadJobIndex := 1, ReadStartBitNo := 0, WriteJobIndex := 0, WriteStartBitNo := 0 ), ( DataType := MBCFG_TYPE_WORD, ByteOrder := MBCFG_BYTE_ORDER_0, BitSize := 16, ptVar := 0, ReadJobIndex := 1, ReadStartBitNo := 32, WriteJobIndex := 0, WriteStartBitNo := 0 ), ( DataType := MBCFG_TYPE_WORD, ByteOrder := MBCFG_BYTE_ORDER_0, BitSize := 16, ptVar := 0, ReadJobIndex := 1, ReadStartBitNo := 64, WriteJobIndex := 0, WriteStartBitNo := 0 ); /*=== JOB LIST ==================*/ zz_JobList : ARRAY[1..zz_JOBCOUNT] OF MBCFG_typCOM_JOB := ( Functioncode := 3, // , 0x03, Read Holding Registers ReadStartAddress := 26,// ReadQuantity := 5, //- , WriteStartAddress := 0, WriteQuantity := 0, ptReadData := 0, ptWriteData := 0 ); zz_DataField_1_Read : ARRAY[1..5] OF WORD; /*=== MODBUS MASTER ==============*/ zz_MBCFG_MASTER_ETH : MBCFG_MASTER_TCP; END_VAR /*--- for each variable -------------------------*/ zz_VariableList[1].ptVar := ADR(U_L1); zz_VariableList[2].ptVar := ADR(U_L2); zz_VariableList[3].ptVar := ADR(U_L3); /*-----------------------------------------------*/ /*--- for each job -----------------------------------*/ zz_JobList[1].ptReadData := ADR(zz_DataField_1_Read); /*----------------------------------------------------*/ /*#### START OF FIXED CODE #####################################*/ zz_MBCFG_MASTER_ETH( strIpAddress := MBCFG_IpAddress, uiPort := MBCFG_Port, bUnitID := MBCFG_UnitID, tTimeOut := MBCFG_TimeOut, iVariableCount := zz_VARIABLECOUNT, ptVariableList := ADR(zz_VariableList), iJobCount := zz_JOBCOUNT, ptJobList := ADR(zz_JobList), tRequestDelay := MBCFG_RequestDelay, eError => MBCFG_Error, LastJob => MBCFG_LastJob ); %QW377 := U_L1; %QW378 := U_L2; %QW379 := U_L3;
Source: https://habr.com/ru/post/336134/
All Articles