From f6811a0ec284dbc3923eadc0a53478d0f6f0e8a1 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Thu, 5 Mar 2026 15:40:34 +0100 Subject: [PATCH 1/7] Create draft PR for #1062 From c3d772a71223d42ac107d83849d83c3fad2888f0 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Thu, 5 Mar 2026 18:28:55 +0100 Subject: [PATCH 2/7] bcp --- .../SystemConstants/plc_line_HwIdentifiers.st | 50 ++-- .../SystemConstants/plc_line_IoAddresses.st | 258 ++---------------- .../hwc.gen/plc_line.HardwareIdentifiers.json | 129 +++++++++ .../app/hwc/hwc.gen/plc_line.IoAddresses.json | 238 ++++++++++++++++ .../plc_line.SecurityConfiguration.json | 9 + src/io/app/hwc/plc_line.hwl.yml | 18 +- .../app/hwc/project_devices/bni00l3.hwl.yml | 96 +++---- .../app/hwc/project_devices/bni00l3_2.hwl.yml | 49 ---- src/io/app/src/IO/HwIdentifierList.st | 16 +- src/io/app/src/IO/HwIdentifiers.st | 50 ++-- src/io/app/src/IO/Inputs.st | 28 +- src/io/app/src/IO/IoStructures.st | 254 ++--------------- src/io/app/src/IO/Outputs.st | 9 +- .../balluff.iolink/io/balluff_bni00l3.hwl.yml | 78 +++--- .../io/balluff_bni00l3_bni0099.hwl.yml | 144 +++++----- .../balluff_bni00l3_bni0099_bni0099.hwl.yml | 144 +++++----- .../io/balluff_bni00l3_bni00ay.hwl.yml | 144 +++++----- .../balluff_bni00l3_bni00ay_bni00ay.hwl.yml | 144 +++++----- .../balluff_bni00l3_port_deactivated.hwl.yml | 92 +++---- src/scripts/hw_compile.sh | 6 +- 20 files changed, 898 insertions(+), 1058 deletions(-) create mode 100644 src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json create mode 100644 src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json create mode 100644 src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json delete mode 100644 src/io/app/hwc/project_devices/bni00l3_2.hwl.yml diff --git a/src/io/app/SystemConstants/plc_line_HwIdentifiers.st b/src/io/app/SystemConstants/plc_line_HwIdentifiers.st index 24ab6724f..8f97352b2 100644 --- a/src/io/app/SystemConstants/plc_line_HwIdentifiers.st +++ b/src/io/app/SystemConstants/plc_line_HwIdentifiers.st @@ -1,35 +1,24 @@ CONFIGURATION HardwareIDs VAR_GLOBAL CONSTANT - bni00l3_2_HwID : UINT := UINT#258; - bni00l3_2_16_DI_HwID : UINT := UINT#263; - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_HwID : UINT := UINT#264; - bni00l3_2_Rack_HwID : UINT := UINT#261; - bni00l3_2_X01_HwID : UINT := UINT#265; - bni00l3_2_X02_HwID : UINT := UINT#266; - bni00l3_2_X03_HwID : UINT := UINT#267; - bni00l3_2_X04_HwID : UINT := UINT#268; - bni00l3_2_X05_HwID : UINT := UINT#269; - bni00l3_2_X06_HwID : UINT := UINT#270; - bni00l3_2_X07_HwID : UINT := UINT#271; - bni00l3_2_X08_HwID : UINT := UINT#272; - bni00l3_2_bni00l3_2_HwID : UINT := UINT#262; - bni00l3_2_bni00l3_2_BNI_XG3_508_0B5_R067_HwID : UINT := UINT#273; - bni00l3_2_bni00l3_2_PN_IO_HwID : UINT := UINT#257; - bni00l3_2_bni00l3_2_PN_IO_Port_1_HwID : UINT := UINT#259; - bni00l3_2_bni00l3_2_PN_IO_Port_2_HwID : UINT := UINT#260; - et200sp_HwID : UINT := UINT#276; - et200sp_A100_Server_module_V1_1_0_bytes_HwID : UINT := UINT#281; - et200sp_A10_DI_16x24VDC_ST_V1_1_HwID : UINT := UINT#284; - et200sp_A20_DQ_16x24VDC_0_5A_ST_V1_1_HwID : UINT := UINT#283; - et200sp_A30_CM_4xIO_Link_V2_2_32I_32O_HwID : UINT := UINT#282; - et200sp_Rack_HwID : UINT := UINT#279; - et200sp_et200sp_HwID : UINT := UINT#280; - et200sp_et200sp_IM_155_6_PN_ST_V4_2_HwID : UINT := UINT#285; - et200sp_et200sp_PN_IO_HwID : UINT := UINT#275; - et200sp_et200sp_Port_1_HwID : UINT := UINT#277; - et200sp_et200sp_Port_2_HwID : UINT := UINT#278; + bni00l3_HwID : UINT := UINT#258; + bni00l3_BALLUFF_Link_module_HwID : UINT := UINT#263; + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_HwID : UINT := UINT#264; + bni00l3_Rack_HwID : UINT := UINT#261; + bni00l3_X01_HwID : UINT := UINT#265; + bni00l3_X02_HwID : UINT := UINT#266; + bni00l3_X03_HwID : UINT := UINT#267; + bni00l3_X04_HwID : UINT := UINT#268; + bni00l3_X05_HwID : UINT := UINT#269; + bni00l3_X06_HwID : UINT := UINT#270; + bni00l3_X07_HwID : UINT := UINT#271; + bni00l3_X08_HwID : UINT := UINT#272; + bni00l3_bni00l3_HwID : UINT := UINT#262; + bni00l3_bni00l3_BNI_XG3_508_0B5_R067_HwID : UINT := UINT#273; + bni00l3_bni00l3_PN_IO_HwID : UINT := UINT#257; + bni00l3_bni00l3_PN_IO_Port_1_HwID : UINT := UINT#259; + bni00l3_bni00l3_PN_IO_Port_2_HwID : UINT := UINT#260; plc_line_HwID : UINT := UINT#32; - plc_line_Rail_0_HwID : UINT := UINT#286; + plc_line_Rail_0_HwID : UINT := UINT#285; plc_line_plc_line_HwID : UINT := UINT#48; plc_line_plc_line_CPU_display_1_HwID : UINT := UINT#54; plc_line_plc_line_Card_reader_writer_1_HwID : UINT := UINT#51; @@ -41,8 +30,7 @@ CONFIGURATION HardwareIDs plc_line_plc_line_PROFINET_interface_2_HwID : UINT := UINT#72; plc_line_plc_line_PROFINET_interface_2_Port_3_HwID : UINT := UINT#73; plc_line_plc_line_Virtual_communication_interface_HwID : UINT := UINT#135; - profinet2_plc_line_HwID : UINT := UINT#256; - profinet_plc_line_HwID : UINT := UINT#274; + profinet_plc_line_HwID : UINT := UINT#256; END_VAR END_CONFIGURATION diff --git a/src/io/app/SystemConstants/plc_line_IoAddresses.st b/src/io/app/SystemConstants/plc_line_IoAddresses.st index e8c3e8dc5..f6adaed2c 100644 --- a/src/io/app/SystemConstants/plc_line_IoAddresses.st +++ b/src/io/app/SystemConstants/plc_line_IoAddresses.st @@ -1,32 +1,16 @@ CONFIGURATION IoAddresses VAR_GLOBAL - // Module bni00l3_2/16_DI - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Input AT %IB0 : bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Input_Layout; - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Output AT %QB0 : bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Output_Layout; - bni00l3_2_16_DI_X01_Input AT %IB1 : bni00l3_2_16_DI_X01_Input_Layout; - bni00l3_2_16_DI_X02_Input AT %IB2 : bni00l3_2_16_DI_X02_Input_Layout; - bni00l3_2_16_DI_X03_Input AT %IB3 : bni00l3_2_16_DI_X03_Input_Layout; - bni00l3_2_16_DI_X04_Input AT %IB4 : bni00l3_2_16_DI_X04_Input_Layout; - bni00l3_2_16_DI_X05_Input AT %IB5 : bni00l3_2_16_DI_X05_Input_Layout; - bni00l3_2_16_DI_X06_Input AT %IB6 : bni00l3_2_16_DI_X06_Input_Layout; - bni00l3_2_16_DI_X07_Input AT %IB7 : bni00l3_2_16_DI_X07_Input_Layout; - bni00l3_2_16_DI_X08_Input AT %IB8 : bni00l3_2_16_DI_X08_Input_Layout; - - // Module et200sp/A10 - et200sp_A10_Input AT %IB41 : et200sp_A10_Input_Layout; - - // Module et200sp/A20 - et200sp_A20_Output AT %QB33 : et200sp_A20_Output_Layout; - - // Module et200sp/A30 - et200sp_A30_Input AT %IB9 : et200sp_A30_Input_Layout; - et200sp_A30_Output AT %QB1 : et200sp_A30_Output_Layout; + // Module bni00l3/BALLUFF_Link_module + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input AT %IB0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input_Layout; + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output AT %QB0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout; + bni00l3_BALLUFF_Link_module_X01_Input AT %IB1 : bni00l3_BALLUFF_Link_module_X01_Input_Layout; + bni00l3_BALLUFF_Link_module_X02_Input AT %IB4 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; END_VAR END_CONFIGURATION TYPE - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Input_Layout : STRUCT + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input_Layout : STRUCT Signals_0 AT %X0.0 : BOOL; Signals_1 AT %X0.1 : BOOL; Signals_2 AT %X0.2 : BOOL; @@ -39,7 +23,7 @@ TYPE END_TYPE TYPE - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Output_Layout : STRUCT + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout : STRUCT Signals_8 AT %X0.0 : BOOL; Signals_9 AT %X0.1 : BOOL; Signals_10 AT %X0.2 : BOOL; @@ -52,221 +36,25 @@ TYPE END_TYPE TYPE - bni00l3_2_16_DI_X01_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X02_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X03_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X04_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X05_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X06_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X07_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - bni00l3_2_16_DI_X08_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - et200sp_A10_Input_Layout : STRUCT - Signals_0 AT %X0.0 : BOOL; - Signals_1 AT %X0.1 : BOOL; - Signals_2 AT %X0.2 : BOOL; - Signals_3 AT %X0.3 : BOOL; - Signals_4 AT %X0.4 : BOOL; - Signals_5 AT %X0.5 : BOOL; - Signals_6 AT %X0.6 : BOOL; - Signals_7 AT %X0.7 : BOOL; - Signals_8 AT %X1.0 : BOOL; - Signals_9 AT %X1.1 : BOOL; - Signals_10 AT %X1.2 : BOOL; - Signals_11 AT %X1.3 : BOOL; - Signals_12 AT %X1.4 : BOOL; - Signals_13 AT %X1.5 : BOOL; - Signals_14 AT %X1.6 : BOOL; - Signals_15 AT %X1.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - et200sp_A20_Output_Layout : STRUCT - Signals_0 AT %X0.0 : BOOL; - Signals_1 AT %X0.1 : BOOL; - Signals_2 AT %X0.2 : BOOL; - Signals_3 AT %X0.3 : BOOL; - Signals_4 AT %X0.4 : BOOL; - Signals_5 AT %X0.5 : BOOL; - Signals_6 AT %X0.6 : BOOL; - Signals_7 AT %X0.7 : BOOL; - Signals_8 AT %X1.0 : BOOL; - Signals_9 AT %X1.1 : BOOL; - Signals_10 AT %X1.2 : BOOL; - Signals_11 AT %X1.3 : BOOL; - Signals_12 AT %X1.4 : BOOL; - Signals_13 AT %X1.5 : BOOL; - Signals_14 AT %X1.6 : BOOL; - Signals_15 AT %X1.7 : BOOL; - END_STRUCT; -END_TYPE - -TYPE - et200sp_A30_Input_Layout : STRUCT - Signals_0 AT %B0 : BYTE; - Signals_1 AT %B1 : BYTE; - Signals_2 AT %B2 : BYTE; - Signals_3 AT %B3 : BYTE; - Signals_4 AT %B4 : BYTE; - Signals_5 AT %B5 : BYTE; - Signals_6 AT %B6 : BYTE; - Signals_7 AT %B7 : BYTE; - Signals_8 AT %B8 : BYTE; - Signals_9 AT %B9 : BYTE; - Signals_10 AT %B10 : BYTE; - Signals_11 AT %B11 : BYTE; - Signals_12 AT %B12 : BYTE; - Signals_13 AT %B13 : BYTE; - Signals_14 AT %B14 : BYTE; - Signals_15 AT %B15 : BYTE; - Signals_16 AT %B16 : BYTE; - Signals_17 AT %B17 : BYTE; - Signals_18 AT %B18 : BYTE; - Signals_19 AT %B19 : BYTE; - Signals_20 AT %B20 : BYTE; - Signals_21 AT %B21 : BYTE; - Signals_22 AT %B22 : BYTE; - Signals_23 AT %B23 : BYTE; - Signals_24 AT %B24 : BYTE; - Signals_25 AT %B25 : BYTE; - Signals_26 AT %B26 : BYTE; - Signals_27 AT %B27 : BYTE; - Signals_28 AT %B28 : BYTE; - Signals_29 AT %B29 : BYTE; - Signals_30 AT %B30 : BYTE; - Signals_31 AT %B31 : BYTE; + bni00l3_BALLUFF_Link_module_X01_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; + Signals_1 AT %X2.2 : BOOL; + Signals_2 AT %X2.3 : BOOL; + Signals_3 AT %X2.4 : BOOL; + Signals_4 AT %X2.5 : BOOL; + Signals_5 AT %X2.6 : BOOL; + Signals_6 AT %X2.7 : BOOL; END_STRUCT; END_TYPE TYPE - et200sp_A30_Output_Layout : STRUCT - Signals_32 AT %B0 : BYTE; - Signals_33 AT %B1 : BYTE; - Signals_34 AT %B2 : BYTE; - Signals_35 AT %B3 : BYTE; - Signals_36 AT %B4 : BYTE; - Signals_37 AT %B5 : BYTE; - Signals_38 AT %B6 : BYTE; - Signals_39 AT %B7 : BYTE; - Signals_40 AT %B8 : BYTE; - Signals_41 AT %B9 : BYTE; - Signals_42 AT %B10 : BYTE; - Signals_43 AT %B11 : BYTE; - Signals_44 AT %B12 : BYTE; - Signals_45 AT %B13 : BYTE; - Signals_46 AT %B14 : BYTE; - Signals_47 AT %B15 : BYTE; - Signals_48 AT %B16 : BYTE; - Signals_49 AT %B17 : BYTE; - Signals_50 AT %B18 : BYTE; - Signals_51 AT %B19 : BYTE; - Signals_52 AT %B20 : BYTE; - Signals_53 AT %B21 : BYTE; - Signals_54 AT %B22 : BYTE; - Signals_55 AT %B23 : BYTE; - Signals_56 AT %B24 : BYTE; - Signals_57 AT %B25 : BYTE; - Signals_58 AT %B26 : BYTE; - Signals_59 AT %B27 : BYTE; - Signals_60 AT %B28 : BYTE; - Signals_61 AT %B29 : BYTE; - Signals_62 AT %B30 : BYTE; - Signals_63 AT %B31 : BYTE; + bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; + Signals_1 AT %X1.2 : BOOL; + Signals_2 AT %X1.3 : BOOL; + Signals_3 AT %X1.4 : BOOL; + Signals_4 AT %X1.5 : BOOL; + Signals_5 AT %X1.6 : BOOL; + Signals_6 AT %X1.7 : BOOL; END_STRUCT; END_TYPE diff --git a/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json b/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json new file mode 100644 index 000000000..b48457f9a --- /dev/null +++ b/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json @@ -0,0 +1,129 @@ +{ + "Version": 1, + "HardwareIdentifiers": [ + { + "Name": "bni00l3", + "Value": 258 + }, + { + "Name": "bni00l3~BALLUFF_Link_module", + "Value": 263 + }, + { + "Name": "bni00l3~BALLUFF_Link_module~BALLUFF_8_Port_IO-Link_Master", + "Value": 264 + }, + { + "Name": "bni00l3~Rack", + "Value": 261 + }, + { + "Name": "bni00l3~X01", + "Value": 265 + }, + { + "Name": "bni00l3~X02", + "Value": 266 + }, + { + "Name": "bni00l3~X03", + "Value": 267 + }, + { + "Name": "bni00l3~X04", + "Value": 268 + }, + { + "Name": "bni00l3~X05", + "Value": 269 + }, + { + "Name": "bni00l3~X06", + "Value": 270 + }, + { + "Name": "bni00l3~X07", + "Value": 271 + }, + { + "Name": "bni00l3~X08", + "Value": 272 + }, + { + "Name": "bni00l3~bni00l3", + "Value": 262 + }, + { + "Name": "bni00l3~bni00l3~BNI XG3-508-0B5-R067", + "Value": 273 + }, + { + "Name": "bni00l3~bni00l3~PN-IO", + "Value": 257 + }, + { + "Name": "bni00l3~bni00l3~PN-IO~Port_1", + "Value": 259 + }, + { + "Name": "bni00l3~bni00l3~PN-IO~Port_2", + "Value": 260 + }, + { + "Name": "plc_line", + "Value": 32 + }, + { + "Name": "plc_line~Rail_0", + "Value": 285 + }, + { + "Name": "plc_line~plc_line", + "Value": 48 + }, + { + "Name": "plc_line~plc_line~CPU display_1", + "Value": 54 + }, + { + "Name": "plc_line~plc_line~Card reader/writer_1", + "Value": 51 + }, + { + "Name": "plc_line~plc_line~DP interface_1", + "Value": 60 + }, + { + "Name": "plc_line~plc_line~OPC UA_1", + "Value": 117 + }, + { + "Name": "plc_line~plc_line~PROFINET_interface_1", + "Value": 64 + }, + { + "Name": "plc_line~plc_line~PROFINET_interface_1~Port_1", + "Value": 65 + }, + { + "Name": "plc_line~plc_line~PROFINET_interface_1~Port_2", + "Value": 66 + }, + { + "Name": "plc_line~plc_line~PROFINET_interface_2", + "Value": 72 + }, + { + "Name": "plc_line~plc_line~PROFINET_interface_2~Port_3", + "Value": 73 + }, + { + "Name": "plc_line~plc_line~Virtual communication interface", + "Value": 135 + }, + { + "Name": "profinet_plc_line", + "Value": 256 + } + ] +} \ No newline at end of file diff --git a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json new file mode 100644 index 000000000..d16b7aaa7 --- /dev/null +++ b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json @@ -0,0 +1,238 @@ +{ + "Version": 2, + "IoAddresses": [ + { + "Ref": "bni00l3/BALLUFF_Link_module", + "HardwareIdentifier": 263, + "Submodules": [ + { + "Name": "BALLUFF_8_Port_IO-Link_Master", + "Ref": "bni00l3/BALLUFF_Link_module/BALLUFF_8_Port_IO-Link_Master", + "HardwareIdentifier": 264, + "Inputs": { + "StartAddress": "0.0", + "EndAddress": "0.7", + "Length": 8, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_1", + "Offset": 1, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 2, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 3, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 4, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 5, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 6, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_7", + "Offset": 7, + "Length": 1, + "DataType": "Boolean" + } + ] + }, + "Outputs": { + "StartAddress": "0.0", + "EndAddress": "0.7", + "Length": 8, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_8", + "Offset": 0, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_9", + "Offset": 1, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_10", + "Offset": 2, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_11", + "Offset": 3, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_12", + "Offset": 4, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_13", + "Offset": 5, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_14", + "Offset": 6, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_15", + "Offset": 7, + "Length": 1, + "DataType": "Boolean" + } + ] + } + }, + { + "Name": "X01", + "Ref": "bni00l3/BALLUFF_Link_module/X01", + "HardwareIdentifier": 265, + "Inputs": { + "StartAddress": "1.0", + "EndAddress": "3.7", + "Length": 24, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 16, + "DataType": "OctetString" + }, + { + "Name": "Signals_1", + "Offset": 18, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 19, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 20, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 21, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 22, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 23, + "Length": 1, + "DataType": "Boolean" + } + ] + } + }, + { + "Name": "X02", + "Ref": "bni00l3/BALLUFF_Link_module/X02", + "HardwareIdentifier": 266, + "Inputs": { + "StartAddress": "4.0", + "EndAddress": "5.7", + "Length": 16, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 8, + "DataType": "OctetString" + }, + { + "Name": "Signals_1", + "Offset": 10, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 11, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 12, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 13, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 14, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 15, + "Length": 1, + "DataType": "Boolean" + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json b/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json new file mode 100644 index 000000000..b5e1a7f98 --- /dev/null +++ b/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json @@ -0,0 +1,9 @@ +{ + "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAcIgAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkdrN1dVTUhOcUhqeWhGellqTUlSNjFtYjdWVApjbnBoTXQ5MkhYVlBtZGdIaHRWTzVrM3pidEo0cGM4djI3TmZOMUdjYmh1MzBGa1NTK2U3NXRNekhHTEZobnkvCnhScFpFSlNmYmNaYTU1STRja3E0K21MK2svK1pUcnp4MVJMMFFnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgAUVvDTNyzNHsWldsP3igOn7q2e7BDQNJJH8iYJ+U9WYBACAADAAQVOrBPqJR4I9fJwPdmWkFZAEAAAE28YouqFixCu5c4I8APs1RNgj5RIWlQqVEEi5AUUYwUZMmM7jAAuhgr7Cbb6CfhzSJ1qsLray7MLIYNxfNCTQ5kSGr7gR0Ej3SIA9kjTGosgqQuZ1RVwDJSZheS6w2WtgBq7MGySwkkfC4DpIKa7FXxFtKEYrFExImn4mdEqVkXHRr9YzNZTfco6PaN/KsFvqpgIhbcz0uIgWb+XgHuv8+CFMkdAVjsNra9X1wJFcShrgLl7qgQ9/7pc4TmvbV0HQrp1XqBykhrElALTXg3hLFT3mi14fHTeVvv/QJhuaaaAC5ETDfqMlIsCJ4/mohqN0gooGoTEaTezuz+OmFQF9wprQoLEhksVoZcenN8C/TKaCq7iIhyhTipIbn7f9NWEQq5uvYevXd/JTjRv+9gT9CDNvW41vtsgIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFADBJh5RJxkp39vHUGqDzOirBTYY/7QGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVFa0tvejU0ak5xTDZSRys1ak5YOWZVOEp5eDh3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhORFUwTUROYUZ3MHpOakF6TURJeE5EVTBNRE5hTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ281dEdrSkRPYnVnYVlMYjk5ZEVNZmpHR0xVZk91MHU3a3FDbFZkUDBMYW0zMw0KaVVFUXlRRzJCSmVpSnVBWjBWWjBrdGFyeklMajJzbmtOemFOZSs2bDFmTkJMZVVDMWV4MjNYaDZGMWpiZmFEOC9icnh4OFNmZmR0Rg0KWXZwZ3FDOWlyM2NLNHBsQXdaL1JnV1hDV1Mxa3lpdUtGTTFFYXorMDhheTFqYmpSbTdjZUtxdVRONkN0Z3FSbGlnV3grcllJSlp1Zg0KbzdWSEZhbkRoRTRkdjBLdGw0ZG9sYThxMlcwRHp1UlpyalN6Y2tKdTRtUHVMV3hlaFc1dXFuTUJQamZBUHVZVXJUTm1IR2VsU2JTWQ0KMGNVSXRRT0ZwSkE5VktWNnJQWG9UMjlHc0puOW1SZTRlODJjd29UTWxrcXJpcTVmR0d0bityMTVwTS9BVjNqeGRlbFpBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZEd0k4SmxsY0lpQWNZT2dCVThuMC9QUA0KTXIzS01JRzRCZ05WSFNNRWdiQXdnYTJBRkR3SThKbGxjSWlBY1lPZ0JVOG4wL1BQTXIzS29YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRUw0KUXFqUG5pTTJvdnBFYjdtTTFmMTlUd25MSHpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWVPRVl4RldROGxhMmRTT0g5V1BKZWRCZQ0KdzVGUm5WNm1RVkhrSERLbUxpdHhUSDBUYVE1UU9qekRITWJiRktMRHU2cFNuRkJJdm1mS3V4WWlmOFBmZ0t5YURaWjN2Z2dtUDhkMA0KZVZTcytBSUdrS1lNdDlIaEU0MjBLNlVDRWswODRCcmROemlwUndRTXEwdVhId085WFdEaEVGM0Q5RDhkc2JWM0pMczlicUtycjB3WA0KcTdRWVplZG5DNWRDcElDSWFLOERIeTJiR3FRQXpyVFpIZEs1eXNoTE5CbDBQUXF6cTRGa2w3alg4Y2NTQTc1aGk2MW9OakNGa2d4dw0KR2NKeDdmODFyZHhTaE12NjBjWnExa3FxNjJkSGlUVWhUYnVKMmhQWDVBRmdIQjhjdVJMMVlNR1FKRHNpZVRWUlhBZ3RNRm1ZVVdQbg0KbFdMUjdiMS9LbmNoaWc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEceLBzvSI+ha8qfPJIGPNcs3GrFu3ZOT5gyIS95x66dnKnSQnGchRKfATfsi3mhdDY6TQgJ4CwVBuA11SL+4Wvd0oX/fdvKhupeg+VyNNKNjaiTBj+zpmLGnsOGmoTkZTNaYqWqsae7TTtM6/sfYo7AAgOJuxClqGwdBiwByi47FTLh0YBdChP0/OcyAed0sNac4HXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRajQzSDFINkNhdktPSXI0aQpJMUNaaGdJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFR3I5Nm5QaDdQeGZjeFlkCm1mdmhLTVVFZ2dUUVFPWkluSmZFZ3B3Ri82V1ZIUkVMTTl6Z2ZKNU5GdzJUcXdvK0FZM2JJZ2RkUXNBUE9oYkkKVytCYWNlMi9ISWFUZFJGYmtnNmJqc0VEbkI2RjRSWnhSbDZRUktRNkJuNkVzUi9penpvMEJFVmJiY1BxTVMzRQp0UkRZZDJsdFF4MWlrRE5EblIwNGNnanYxWmZwVTNLN3BrMFk2N2t6YWEwbVJZQk85UEZBWmFORlRZYU1Od0dSClhmeGFVNmVhSkVWZWF2T1RBcW9VYWhxTU5QdDlnRk03QXpBeFYvNFFEOTdLYndkNm0rZEJHeFlhNU9Lc3lqWG0KRUpmRFVLQlpDRk1tallVYWVCYnZaOTFnamdiYTZCZDJaYkJDaGMrRU83VS9zVjFEaXY4NzVMLzlLaU5FZUZVaQp4M1czc01BRG5ubFhRc3pMZEh5ZExSZjJwcUxyMEdBT2hiRUdQUURVVnNNanpIRjZSOFVFamx0NEpTMzBQL3djCnhlbEJYcUhEQkRtMzRDZ1AyVU9jeU13MWNObVBScm41aGNmVkJCS0srNjBNaTB5NktBVVhEL3dyTVZSb3Z2ajUKbG9XK0VLNitsdEJ5WmRiMjQ5V0JjbG9QZTM2SDVEUmVyMW9KMHlyTDQ1NFU3d1gxTE4vRTdYNVpPQzlHWktvOApBaHpJUHJTZnhwUGhaNDZ0ck9iUUdyWTN3VjNwOERUbGNkWC9aL01CTnRPd3hPdktDM1QwVjM3UHd1aURUQUh0CmVnNmVRbnBNaWlZUlY4d3FES0xnRnRZdGV4RVZKZkxUNVlBYXZQdjRhd3loTWkrYXZsTk10b2RDdC9nbkFtTXMKZHB1RFUvSjRkYktYYjRLK3MrMWFHdDVpTWFtVWEydXVOU2xEVlV6TW9WYW93alREa1dxOUt1SzlVeXFzTmpwVAp4NWx5UUNYRGlqSEowZUhpditPQW8vMzQreGNqMDJsM2hTaTBmMzZ3ak50emFHRERlRmc2MDlNdm5YVlR0RUFUCmpjSHIzenBna1R6aTJQY0tvNUVVVlRZd25rZlJYTGVmVElSL1F6a3dxaTlsUEJKa3dJYWxFTEdQMlYzYlRqZFUKdWk2ZHJTVFhXbWZqSVp2QUF1NXlHbnJaWlc3Qm1GSkZmVWZvZHpkQ3lpemFja0FERXZ0c05vK1RnYytSak11MwpWRlAxSzFiZUg5OXFoWS9RNU9TdlFOcDFVdEVxaitxckdOZysyWjlIZ3lsbXB3M0lFdVcvVWx2SjlveXVoNUlnCjUxbU1COUUwN2wwbGpZOUI5RGRMUW5sT05iOWwzb0ZnM054a0xTanEzSWdnVlg4UG9wN3ZRc2txRFU3VnpTY2MKeTFuRldpR3h6WWRGNVN3WmlhTFlkUXJrempSSkRCUDhqdFQ5eFF3VG9Tc0ViamFsTjJVellKanhLRm4ybDc1eApndTQvQXZUdUZJYlRSNVp1QXlSa0JBY1l1dDNwQ1RySjgrVWhyQnZMRUtMRHN4bUcybkgrS0d3M0RYdXRHaEw1CmFvU1dwTm11UG1jS1BiaEMxUHZheElYMkI5Z2p2WVRxYUtmUTFtTWhhK1NDT0JaN2N6MmI0Mkx0bGJad3l4TlQKSWpLNWN0Qm5pVTJnbEpKSXFFQ3Z0TUo0cGFPTmZwMi9rUzFudjdRMVhqamVRem0wb0d4eXdtZGJaUlRKMFlPOQpnVEE5TEpmczFTR2JIWFpUNmRTcjZDU3l6ZVUxU01RYUtUVjRzTmVpdE8zVVVWZTFFV1dJWElJNE9RY2pCaS9UCmllM0w1SHlLZFAvTlJGNVlLV0cxUUxOcTFibWNWQUxEQUlRRkdCYmpYQTd6V1NrcWU0VDBQMHFYc3ltS01iUVcKUHdVdWttOVBVRUpMVlJ3ZndxRHc0d0RLMFdlTlVxSXgycFoxcnk1cTgwMnVKL2JMSHJ4dXFoY0kvaGthRmpKcgorMkNJakNZZEN3YnBrNFBSaVZCc2IrZVZBVitRdEZoREg1dFdnU09TOG9LaEVQQkpkcTFnYWpqMUZZRUsyLzBECkRuUjk0RkFZN1pWVGhVdk9rOUZvalhFNkR1OUxxRloycWlUTHJSR0t6SzdTWFhtSmdDZjdYK0tkUDUxYlh4aUcKTFZMT1pzMDQycjFINTY2RDdZTkZiRkJLdzIrVm93bitHL3U2Z2IxYzh5QTQxOG5MZkpGeW9Eaz0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6CWxvY2FsaG9zdAIAAAAAAAAAAQAAAAIAAAAAAAAAFADBJh5RJxkp39vHUGqDzOirBTYY/7QGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVFa0tvejU0ak5xTDZSRys1ak5YOWZVOEp5eDh3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhORFUwTUROYUZ3MHpOakF6TURJeE5EVTBNRE5hTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ281dEdrSkRPYnVnYVlMYjk5ZEVNZmpHR0xVZk91MHU3a3FDbFZkUDBMYW0zMw0KaVVFUXlRRzJCSmVpSnVBWjBWWjBrdGFyeklMajJzbmtOemFOZSs2bDFmTkJMZVVDMWV4MjNYaDZGMWpiZmFEOC9icnh4OFNmZmR0Rg0KWXZwZ3FDOWlyM2NLNHBsQXdaL1JnV1hDV1Mxa3lpdUtGTTFFYXorMDhheTFqYmpSbTdjZUtxdVRONkN0Z3FSbGlnV3grcllJSlp1Zg0KbzdWSEZhbkRoRTRkdjBLdGw0ZG9sYThxMlcwRHp1UlpyalN6Y2tKdTRtUHVMV3hlaFc1dXFuTUJQamZBUHVZVXJUTm1IR2VsU2JTWQ0KMGNVSXRRT0ZwSkE5VktWNnJQWG9UMjlHc0puOW1SZTRlODJjd29UTWxrcXJpcTVmR0d0bityMTVwTS9BVjNqeGRlbFpBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZEd0k4SmxsY0lpQWNZT2dCVThuMC9QUA0KTXIzS01JRzRCZ05WSFNNRWdiQXdnYTJBRkR3SThKbGxjSWlBY1lPZ0JVOG4wL1BQTXIzS29YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRUw0KUXFqUG5pTTJvdnBFYjdtTTFmMTlUd25MSHpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWVPRVl4RldROGxhMmRTT0g5V1BKZWRCZQ0KdzVGUm5WNm1RVkhrSERLbUxpdHhUSDBUYVE1UU9qekRITWJiRktMRHU2cFNuRkJJdm1mS3V4WWlmOFBmZ0t5YURaWjN2Z2dtUDhkMA0KZVZTcytBSUdrS1lNdDlIaEU0MjBLNlVDRWswODRCcmROemlwUndRTXEwdVhId085WFdEaEVGM0Q5RDhkc2JWM0pMczlicUtycjB3WA0KcTdRWVplZG5DNWRDcElDSWFLOERIeTJiR3FRQXpyVFpIZEs1eXNoTE5CbDBQUXF6cTRGa2w3alg4Y2NTQTc1aGk2MW9OakNGa2d4dw0KR2NKeDdmODFyZHhTaE12NjBjWnExa3FxNjJkSGlUVWhUYnVKMmhQWDVBRmdIQjhjdVJMMVlNR1FKRHNpZVRWUlhBZ3RNRm1ZVVdQbg0KbFdMUjdiMS9LbmNoaWc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAERQ5JkOM2JxvwcoXo0EWWRnh4H7jdcmPSQPwYUlLXg3yQVUUMYJbf9wZcdfVDkInzhMAJ/Zpdlkuzc7B/3G4d+dSfmwV5P1jbUJduDLlzET1Bq/YOBJHerJuo38nYu+FHm1bVQVboPrwaAwgH2/v1WgAgo2mdzo6kv5Af7FSmYleJT0IQLqexDi31SPQ3zweh2u8HXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRcGl4Z3dtVk5KVFhaVFlCbgpPUHZNeHdJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFTCtDbERkYk82Zi9NSFk0CmpXT1k3anNFZ2dUUU83Y1FsSmNCY1dMZjhsQTB3am84L1B0OEpNYVBoaXdIY2FVeUhBWDhFVzdYeFlRQ0lSWXgKQmt1amRsMHRYalpNTXl1Qy8rbEpka1JsQ0hLb0JjcWFLYjJ3MVJuTHZGOHFNQWVva1V6aUErYlhIeDRJbTJyNwppcUxJYVcwd1B0QVY4QnVUc0hucHJ4QlFYNUgvWlc2NGFMckYyZmV4U2w3ZnNPd1ZzRUwxOFBYUUhXZmhEbkJYClZ0UDZsRENkQTFRNUFQRU92RTN2TUIrTmZkbEZ5WWd0UkVjdVBoNXVCNzIwNHVtdVEraHA4SWw2RldDaFJib08KNkdlcjZEdGdxWVN4VUk3Qm5keURMR0NDdGNHMWlMWWtnZ0pEM1F5S0IrQWo3VVZueTNmbURtUUhJRXlUcmNBRwpQbmlPTEJNSnpZUVBmQW1qNjdIWlBXSlFDcFBGZVZwZXl6Tk5PYUV0YXBtKzRlTXk2aUlLeHdZc1NHSm93N1lDCi9VSXl3WkhoV25NU2lTTE51QzBqMnB1b1QwT3QzTDRvNHo2dVdMWFNsU0pNTEJzRkw4ODNBa1BFeVkxVG55TFMKN3NKV0dsQTFFbzVCWkhGMlhJU0RZWExwdVBpSHdhSjRmdXdIQVZTNm80WE5FSXFab0t3dzNGRW43ZkxjSm9wSQpzN2JWTVliMFVDdFFJemdGb2hyT2NEcEtjSVFkOUlNWTVncVkwTXZKZUpia1QyQTVBU3BMN3dVbzUvY25EOWZQCmY2ejMxQUJHUi9nbjdQRWFkcXJiNFg5R245SDZ6bUUyZW1wNG5BY3dqNkRGSXF4R2wxaUJzTzdEM2NuUjhBL2cKQk5QVy9PS25LTm5Sdm1GeVJLVEp1bm9RSzlKUmxzNGpWbVpzZHh0Tmd6b2lQU2R4N1pqK1NJQ3Fiei9qYlZsegoxRjg0U3JweTAwNElMWVBaT2Rrd0RoNE9iOTFESlk4NWFiOEJXRUxaZnR4TjhhbHpzb3JQMmJOM2NJS1dzRUp4ClB3STF5R04rRlRPSmdDUXF2U29XanFLbWZOZFZrSWxlVFVwTGg5S3lLRG9qUlZYSTlNV01BcEhQbmJDcllobkkKbkVmUGNrNXpqNEU4cDFxcGxXWndtVUlUbURnTVFvdEd6cnFwbXZjQ2ZEdDRUL0xkaFN3Mm5RLzY5eHhvbUMrMgpKcTZ6bFpiWHY0THRzakMvMkZUSGFNbHZEMzlBOUZuRGJBMmtwVjFKWi9hMXI4Vi9UQ09HK0paMm9hc1dEd0Q0CkZPQzdWV0FuTWs4MWVzNnNoZzBYbEl4TzJVYzR5cWUvVCs1VEhFZ2NQNjluTU9VZ1NkeTE3Y3E2VG51c3B3aVQKR3VWQ3JmTzNZcmFZTHgxZEYwTHNjMG9QcXVXQTNuS1EwdER0U3pvTDJCUUJGUzA2OTZCemkyQWJmVVZSdmJGagpIWWhCNnhaN3NhbmNNYVQ0QyszZ2JHV3FJT3B4THJGeTVybkh6a25ERzhVTnhwR2dPdlVLMlhoSlZEMTRkVkw4CmFBaVZlVjlRZkNtekVtM0ZvZFZYRklnOXZkOU1vSzBmdXZlcCt0V1hsWXM2UGJtTXA1SU9RZXNxWml0aVhaR2UKZFVyRFZQdytJOWJybHpqS0JQTWdZdklQSjB4YUlnTlVwcitGYlZWVmVQaWpUZGNLR1BuRGFOWU1zcDh6MGF6Twp2R2IvMDB4Nk9HUndXeTBsaUgyUnpTUFNyWkR6cGJXeU5ONlZzS3JxMlh6bFgxMU4zdW1XNGVXU29RRVlVYkNGCkl5YmpSNktkS01uRGF1L1JVdkF5bVRUQW81Zk1sTE9FbUIrLzBpcDFwZ2cvVmc4QURUWTEwajZaUFhsODFqZTIKTmVMT0ZVVWk5OVJROVQrV1p6bG82SW1jVXhCNVRYcEltZXQ1eFdrc1Y1VVpvR3kwd1NGNlpvNHl6eWlNcWZpQwpkaTVJdzRYVEMwa1YzdGkyUGZ6Y1ZNYlNhaXlYMzJTZ2w4ZkVXbmpoQXJ6RllSM0l0V1NXZ1l4dFkvK1pIVkNMCkpyVlVPOU9TVEdRbG9BTUh6bFRpekRZRE82emprcGZPT01jZmQ0QnZ5NnIxMkl0c3YwbGhMbTlTUFJ2b01uMXkKazZ5T3ZkZysxaXNRYkdvc0d0V2tXaUF3aEZpZ3J5MnNLUlNlYUh3TnBIc1FZTUEzL1M5Vm9GST0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6", + "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACDsoOhTM/GE6tEYSl4R8PpEX8SGp2bifXMVZ5K23BSc+wAAAEDOqMe4yJiOhEwkfbPmtS3Hc2V/LlOJddsqloZPs9TSjzheMNx7fCIJwSim03cRj6A/Nq/bXys2JdVG7xiQkCT+AA==", + "CertificateAssignments": { + "TLS": 1, + "WebServer": 2 + }, + "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAdgF0hDLdqlGu/SU7Hxolv1FFgU0MrRjX6f0xy6/kwBRQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAP9yjxum+olrnQ4i7S3TA7oMN4bRYtb1TR8Ew/LONKxlQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAdgF0hDLdqlGu/SU7Hxolv1FFgU0MrRjX6f0xy6/kwBRQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAdgF0hDLdqlGu/SU7Hxolv1FFgU0MrRjX6f0xy6/kwBQgAAAAfsdhcveMRyfbJDpHLScjkG5R5/S1iqgt5ZC+5DpdWzc=" +} \ No newline at end of file diff --git a/src/io/app/hwc/plc_line.hwl.yml b/src/io/app/hwc/plc_line.hwl.yml index d0f248258..d850dd7ae 100644 --- a/src/io/app/hwc/plc_line.hwl.yml +++ b/src/io/app/hwc/plc_line.hwl.yml @@ -10,18 +10,18 @@ Devices: PROFINET_DEVICE_NAME_X2: 'plc_line_x2' ADMIN_NAME: 'admin' CYCLE_COMMUNICATION_LOAD: 50 + - Apply: balluff_bni00l3 + Arguments: + NAME: bni00l3 + IP_ADDRESS_X1: 192.168.100.122/24 + PROFINET_DEVICE_NAME_X1: bni00l3 + X01: balluff_bni00l3_bni00ay + X02: balluff_bni00l3_bni0099 IoSystems: - Name: profinet_plc_line ControllerInterfaces: - Ref: plc_line/plc_line/PROFINET_interface_1 DeviceInterfaces: - - Ref: et200sp/et200sp/PN-IO - #- Ref: bni00l3/bni00l3/PN-IO - # - Ref: et200sp_1/et200sp_1/PN-IO -- Name: profinet2_plc_line - ControllerInterfaces: - - Ref: plc_line/plc_line/PROFINET_interface_2 - DeviceInterfaces: - #- Ref: et200sp/et200sp/PN-IO - - Ref: bni00l3_2/bni00l3_2/PN-IO + # - Ref: et200sp/et200sp/PN-IO + - Ref: bni00l3/bni00l3/PN-IO # - Ref: et200sp_1/et200sp_1/PN-IO diff --git a/src/io/app/hwc/project_devices/bni00l3.hwl.yml b/src/io/app/hwc/project_devices/bni00l3.hwl.yml index 617a2f757..b67d2e07e 100644 --- a/src/io/app/hwc/project_devices/bni00l3.hwl.yml +++ b/src/io/app/hwc/project_devices/bni00l3.hwl.yml @@ -1,49 +1,49 @@ - Devices: - - Name: 'bni00l3' - Modules: - - Name: 'bni00l3' - TypeIdentifier: - FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' - GsdId: 'BNI XG3-508-0B5-R067' - Interfaces: - - Name: 'PN-IO' - Label: 'X1' - Addresses: - Configured: - - IPv4: '192.168.100.122/24' - - ProfinetDeviceName: 'bni00l3' - Parameters: - AdditionalInformation: "" - LocationIdentifier: "" - PlantDesignation: "" - IECV22LLDPMode: False - # PrioritizedStartup (Boolean) - Ports: - - Name: 'Port_1' - Label: 'X1 P1' - Parameters: - PortActivation: True - # Possible values: 8 - Automatic | 16 - TP 100 Mbps full duplex - TransmissionRateAndDuplex: 'Automatic' - EndOfDetectionOfAccessibleDevices: False - EndOfTopologyDiscovery: False - PortMonitoring: False - # TransmissionRateAutoNegotiation: True - # CableName: 0 - # MediumAttachmentType: 'Copper' - - Name: 'Port_2' - Label: 'X1 P2' - Parameters: - PortActivation: True - # Possible values: 8 - Automatic | 16 - TP 100 Mbps full duplex - TransmissionRateAndDuplex: 'Automatic' - EndOfDetectionOfAccessibleDevices: False - EndOfTopologyDiscovery: False - PortMonitoring: False - # TransmissionRateAutoNegotiation: True - # CableName: 0 - # MediumAttachmentType: 'Copper' - - Apply: BNI00L3_IDM_LinkModule_16_DI - Arguments: - NAME: '16_DI' + # Devices: + # - Name: 'bni00l3' + # Modules: + # - Name: 'bni00l3' + # TypeIdentifier: + # FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' + # GsdId: 'BNI XG3-508-0B5-R067' + # Interfaces: + # - Name: 'PN-IO' + # Label: 'X1' + # Addresses: + # Configured: + # - IPv4: '192.168.100.122/24' + # - ProfinetDeviceName: 'bni00l3' + # Parameters: + # AdditionalInformation: "" + # LocationIdentifier: "" + # PlantDesignation: "" + # IECV22LLDPMode: False + # # PrioritizedStartup (Boolean) + # Ports: + # - Name: 'Port_1' + # Label: 'X1 P1' + # Parameters: + # PortActivation: True + # # Possible values: 8 - Automatic | 16 - TP 100 Mbps full duplex + # TransmissionRateAndDuplex: 'Automatic' + # EndOfDetectionOfAccessibleDevices: False + # EndOfTopologyDiscovery: False + # PortMonitoring: False + # # TransmissionRateAutoNegotiation: True + # # CableName: 0 + # # MediumAttachmentType: 'Copper' + # - Name: 'Port_2' + # Label: 'X1 P2' + # Parameters: + # PortActivation: True + # # Possible values: 8 - Automatic | 16 - TP 100 Mbps full duplex + # TransmissionRateAndDuplex: 'Automatic' + # EndOfDetectionOfAccessibleDevices: False + # EndOfTopologyDiscovery: False + # PortMonitoring: False + # # TransmissionRateAutoNegotiation: True + # # CableName: 0 + # # MediumAttachmentType: 'Copper' + # - Apply: BNI00L3_IDM_LinkModule_16_DI + # Arguments: + # NAME: '16_DI' \ No newline at end of file diff --git a/src/io/app/hwc/project_devices/bni00l3_2.hwl.yml b/src/io/app/hwc/project_devices/bni00l3_2.hwl.yml deleted file mode 100644 index 25dd02351..000000000 --- a/src/io/app/hwc/project_devices/bni00l3_2.hwl.yml +++ /dev/null @@ -1,49 +0,0 @@ - Devices: - - Name: 'bni00l3_2' - Modules: - - Name: 'bni00l3_2' - TypeIdentifier: - FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' - GsdId: 'BNI XG3-508-0B5-R067' - Interfaces: - - Name: 'PN-IO' - Label: 'X1' - Addresses: - Configured: - - IPv4: '192.168.101.122/24' - - ProfinetDeviceName: 'bni00l3_2' - Parameters: - AdditionalInformation: "" - LocationIdentifier: "" - PlantDesignation: "" - IECV22LLDPMode: False - # PrioritizedStartup (Boolean) - Ports: - - Name: 'Port_1' - Label: 'X1 P1' - Parameters: - PortActivation: True - # Possible values: 8 - Automatic | 16 - TP 100 Mbps full duplex - TransmissionRateAndDuplex: 'Automatic' - EndOfDetectionOfAccessibleDevices: False - EndOfTopologyDiscovery: False - PortMonitoring: False - # TransmissionRateAutoNegotiation: True - # CableName: 0 - # MediumAttachmentType: 'Copper' - - Name: 'Port_2' - Label: 'X1 P2' - Parameters: - PortActivation: True - # Possible values: 8 - Automatic | 16 - TP 100 Mbps full duplex - TransmissionRateAndDuplex: 'Automatic' - EndOfDetectionOfAccessibleDevices: False - EndOfTopologyDiscovery: False - PortMonitoring: False - # TransmissionRateAutoNegotiation: True - # CableName: 0 - # MediumAttachmentType: 'Copper' - - Apply: BNI00L3_IDM_LinkModule_16_DI - Arguments: - NAME: '16_DI' - \ No newline at end of file diff --git a/src/io/app/src/IO/HwIdentifierList.st b/src/io/app/src/IO/HwIdentifierList.st index 118cadaf3..342d19964 100644 --- a/src/io/app/src/IO/HwIdentifierList.st +++ b/src/io/app/src/IO/HwIdentifierList.st @@ -1,5 +1,5 @@ NAMESPACE AXOpen.Io - TYPE HwIdentifierList : ARRAY[0..42] OF UINT := + TYPE HwIdentifierList : ARRAY[0..30] OF UINT := [ UINT#32, UINT#48, @@ -31,19 +31,7 @@ NAMESPACE AXOpen.Io UINT#271, UINT#272, UINT#273, - UINT#274, - UINT#275, - UINT#276, - UINT#277, - UINT#278, - UINT#279, - UINT#280, - UINT#281, - UINT#282, - UINT#283, - UINT#284, - UINT#285, - UINT#286 + UINT#285 ]; END_TYPE END_NAMESPACE diff --git a/src/io/app/src/IO/HwIdentifiers.st b/src/io/app/src/IO/HwIdentifiers.st index df41e7a13..f1275ed0b 100644 --- a/src/io/app/src/IO/HwIdentifiers.st +++ b/src/io/app/src/IO/HwIdentifiers.st @@ -14,37 +14,25 @@ NAMESPACE AXOpen.Io plc_line_plc_line_PROFINET_interface_2_Port_3_HwID := UINT#73, plc_line_plc_line_OPC_UA_1_HwID := UINT#117, plc_line_plc_line_Virtual_communication_interface_HwID := UINT#135, - profinet2_plc_line_HwID := UINT#256, - bni00l3_2_bni00l3_2_PN_IO_HwID := UINT#257, - bni00l3_2_HwID := UINT#258, - bni00l3_2_bni00l3_2_PN_IO_Port_1_HwID := UINT#259, - bni00l3_2_bni00l3_2_PN_IO_Port_2_HwID := UINT#260, - bni00l3_2_Rack_HwID := UINT#261, - bni00l3_2_bni00l3_2_HwID := UINT#262, - bni00l3_2_16_DI_HwID := UINT#263, - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_HwID := UINT#264, - bni00l3_2_X01_HwID := UINT#265, - bni00l3_2_X02_HwID := UINT#266, - bni00l3_2_X03_HwID := UINT#267, - bni00l3_2_X04_HwID := UINT#268, - bni00l3_2_X05_HwID := UINT#269, - bni00l3_2_X06_HwID := UINT#270, - bni00l3_2_X07_HwID := UINT#271, - bni00l3_2_X08_HwID := UINT#272, - bni00l3_2_bni00l3_2_BNI_XG3_508_0B5_R067_HwID := UINT#273, - profinet_plc_line_HwID := UINT#274, - et200sp_et200sp_PN_IO_HwID := UINT#275, - et200sp_HwID := UINT#276, - et200sp_et200sp_Port_1_HwID := UINT#277, - et200sp_et200sp_Port_2_HwID := UINT#278, - et200sp_Rack_HwID := UINT#279, - et200sp_et200sp_HwID := UINT#280, - et200sp_A100_Server_module_V1_1_0_bytes_HwID := UINT#281, - et200sp_A30_CM_4xIO_Link_V2_2_32I_32O_HwID := UINT#282, - et200sp_A20_DQ_16x24VDC_0_5A_ST_V1_1_HwID := UINT#283, - et200sp_A10_DI_16x24VDC_ST_V1_1_HwID := UINT#284, - et200sp_et200sp_IM_155_6_PN_ST_V4_2_HwID := UINT#285, - plc_line_Rail_0_HwID := UINT#286 + profinet_plc_line_HwID := UINT#256, + bni00l3_bni00l3_PN_IO_HwID := UINT#257, + bni00l3_HwID := UINT#258, + bni00l3_bni00l3_PN_IO_Port_1_HwID := UINT#259, + bni00l3_bni00l3_PN_IO_Port_2_HwID := UINT#260, + bni00l3_Rack_HwID := UINT#261, + bni00l3_bni00l3_HwID := UINT#262, + bni00l3_BALLUFF_Link_module_HwID := UINT#263, + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_HwID := UINT#264, + bni00l3_X01_HwID := UINT#265, + bni00l3_X02_HwID := UINT#266, + bni00l3_X03_HwID := UINT#267, + bni00l3_X04_HwID := UINT#268, + bni00l3_X05_HwID := UINT#269, + bni00l3_X06_HwID := UINT#270, + bni00l3_X07_HwID := UINT#271, + bni00l3_X08_HwID := UINT#272, + bni00l3_bni00l3_BNI_XG3_508_0B5_R067_HwID := UINT#273, + plc_line_Rail_0_HwID := UINT#285 ); END_TYPE END_NAMESPACE diff --git a/src/io/app/src/IO/Inputs.st b/src/io/app/src/IO/Inputs.st index 35f1d0829..3be94aee3 100644 --- a/src/io/app/src/IO/Inputs.st +++ b/src/io/app/src/IO/Inputs.st @@ -1,32 +1,14 @@ -NAMESPACE AXOpen.Io +NAMESPACE AXOpen.Io TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} Inputs : STRUCT - // Module bni00l3_2/16_DI - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Input AT %B0 : bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Input_Layout; + // Module bni00l3/BALLUFF_Link_module + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input AT %B0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input_Layout; - bni00l3_2_16_DI_X01_Input AT %B1 : bni00l3_2_16_DI_X01_Input_Layout; + bni00l3_BALLUFF_Link_module_X01_Input AT %B1 : bni00l3_BALLUFF_Link_module_X01_Input_Layout; - bni00l3_2_16_DI_X02_Input AT %B2 : bni00l3_2_16_DI_X02_Input_Layout; - - bni00l3_2_16_DI_X03_Input AT %B3 : bni00l3_2_16_DI_X03_Input_Layout; - - bni00l3_2_16_DI_X04_Input AT %B4 : bni00l3_2_16_DI_X04_Input_Layout; - - bni00l3_2_16_DI_X05_Input AT %B5 : bni00l3_2_16_DI_X05_Input_Layout; - - bni00l3_2_16_DI_X06_Input AT %B6 : bni00l3_2_16_DI_X06_Input_Layout; - - bni00l3_2_16_DI_X07_Input AT %B7 : bni00l3_2_16_DI_X07_Input_Layout; - - bni00l3_2_16_DI_X08_Input AT %B8 : bni00l3_2_16_DI_X08_Input_Layout; - - // Module et200sp/A10 - et200sp_A10_Input AT %B41 : et200sp_A10_Input_Layout; - - // Module et200sp/A30 - et200sp_A30_Input AT %B9 : et200sp_A30_Input_Layout; + bni00l3_BALLUFF_Link_module_X02_Input AT %B4 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; END_STRUCT; END_TYPE diff --git a/src/io/app/src/IO/IoStructures.st b/src/io/app/src/IO/IoStructures.st index d4b975b3f..b09daa6e7 100644 --- a/src/io/app/src/IO/IoStructures.st +++ b/src/io/app/src/IO/IoStructures.st @@ -1,8 +1,8 @@ -NAMESPACE AXOpen.Io +NAMESPACE AXOpen.Io TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Input_Layout : STRUCT + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input_Layout : STRUCT Signals_0 AT %X0.0 : BOOL; Signals_1 AT %X0.1 : BOOL; Signals_2 AT %X0.2 : BOOL; @@ -17,7 +17,7 @@ TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Output_Layout : STRUCT + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout : STRUCT Signals_8 AT %X0.0 : BOOL; Signals_9 AT %X0.1 : BOOL; Signals_10 AT %X0.2 : BOOL; @@ -32,244 +32,28 @@ TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X01_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; + bni00l3_BALLUFF_Link_module_X01_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; + Signals_1 AT %X2.2 : BOOL; + Signals_2 AT %X2.3 : BOOL; + Signals_3 AT %X2.4 : BOOL; + Signals_4 AT %X2.5 : BOOL; + Signals_5 AT %X2.6 : BOOL; + Signals_6 AT %X2.7 : BOOL; END_STRUCT; END_TYPE TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X02_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X03_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X04_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X05_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X06_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X07_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_2_16_DI_X08_Input_Layout : STRUCT - Signals_0_0 AT %X0.0 : BOOL; - Signals_0_1 AT %X0.1 : BOOL; - Signals_0_2 AT %X0.2 : BOOL; - Signals_0_3 AT %X0.3 : BOOL; - Signals_0_4 AT %X0.4 : BOOL; - Signals_0_5 AT %X0.5 : BOOL; - Signals_0_6 AT %X0.6 : BOOL; - Signals_0_7 AT %X0.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - et200sp_A10_Input_Layout : STRUCT - Signals_0 AT %X0.0 : BOOL; - Signals_1 AT %X0.1 : BOOL; - Signals_2 AT %X0.2 : BOOL; - Signals_3 AT %X0.3 : BOOL; - Signals_4 AT %X0.4 : BOOL; - Signals_5 AT %X0.5 : BOOL; - Signals_6 AT %X0.6 : BOOL; - Signals_7 AT %X0.7 : BOOL; - Signals_8 AT %X1.0 : BOOL; - Signals_9 AT %X1.1 : BOOL; - Signals_10 AT %X1.2 : BOOL; - Signals_11 AT %X1.3 : BOOL; - Signals_12 AT %X1.4 : BOOL; - Signals_13 AT %X1.5 : BOOL; - Signals_14 AT %X1.6 : BOOL; - Signals_15 AT %X1.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - et200sp_A20_Output_Layout : STRUCT - Signals_0 AT %X0.0 : BOOL; - Signals_1 AT %X0.1 : BOOL; - Signals_2 AT %X0.2 : BOOL; - Signals_3 AT %X0.3 : BOOL; - Signals_4 AT %X0.4 : BOOL; - Signals_5 AT %X0.5 : BOOL; - Signals_6 AT %X0.6 : BOOL; - Signals_7 AT %X0.7 : BOOL; - Signals_8 AT %X1.0 : BOOL; - Signals_9 AT %X1.1 : BOOL; - Signals_10 AT %X1.2 : BOOL; - Signals_11 AT %X1.3 : BOOL; - Signals_12 AT %X1.4 : BOOL; - Signals_13 AT %X1.5 : BOOL; - Signals_14 AT %X1.6 : BOOL; - Signals_15 AT %X1.7 : BOOL; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - et200sp_A30_Input_Layout : STRUCT - Signals_0 AT %B0 : BYTE; - Signals_1 AT %B1 : BYTE; - Signals_2 AT %B2 : BYTE; - Signals_3 AT %B3 : BYTE; - Signals_4 AT %B4 : BYTE; - Signals_5 AT %B5 : BYTE; - Signals_6 AT %B6 : BYTE; - Signals_7 AT %B7 : BYTE; - Signals_8 AT %B8 : BYTE; - Signals_9 AT %B9 : BYTE; - Signals_10 AT %B10 : BYTE; - Signals_11 AT %B11 : BYTE; - Signals_12 AT %B12 : BYTE; - Signals_13 AT %B13 : BYTE; - Signals_14 AT %B14 : BYTE; - Signals_15 AT %B15 : BYTE; - Signals_16 AT %B16 : BYTE; - Signals_17 AT %B17 : BYTE; - Signals_18 AT %B18 : BYTE; - Signals_19 AT %B19 : BYTE; - Signals_20 AT %B20 : BYTE; - Signals_21 AT %B21 : BYTE; - Signals_22 AT %B22 : BYTE; - Signals_23 AT %B23 : BYTE; - Signals_24 AT %B24 : BYTE; - Signals_25 AT %B25 : BYTE; - Signals_26 AT %B26 : BYTE; - Signals_27 AT %B27 : BYTE; - Signals_28 AT %B28 : BYTE; - Signals_29 AT %B29 : BYTE; - Signals_30 AT %B30 : BYTE; - Signals_31 AT %B31 : BYTE; - END_STRUCT; - END_TYPE - - TYPE - {S7.extern=ReadWrite} - {#ix-attr:[Container(Layout.Wrap)]} - et200sp_A30_Output_Layout : STRUCT - Signals_32 AT %B0 : BYTE; - Signals_33 AT %B1 : BYTE; - Signals_34 AT %B2 : BYTE; - Signals_35 AT %B3 : BYTE; - Signals_36 AT %B4 : BYTE; - Signals_37 AT %B5 : BYTE; - Signals_38 AT %B6 : BYTE; - Signals_39 AT %B7 : BYTE; - Signals_40 AT %B8 : BYTE; - Signals_41 AT %B9 : BYTE; - Signals_42 AT %B10 : BYTE; - Signals_43 AT %B11 : BYTE; - Signals_44 AT %B12 : BYTE; - Signals_45 AT %B13 : BYTE; - Signals_46 AT %B14 : BYTE; - Signals_47 AT %B15 : BYTE; - Signals_48 AT %B16 : BYTE; - Signals_49 AT %B17 : BYTE; - Signals_50 AT %B18 : BYTE; - Signals_51 AT %B19 : BYTE; - Signals_52 AT %B20 : BYTE; - Signals_53 AT %B21 : BYTE; - Signals_54 AT %B22 : BYTE; - Signals_55 AT %B23 : BYTE; - Signals_56 AT %B24 : BYTE; - Signals_57 AT %B25 : BYTE; - Signals_58 AT %B26 : BYTE; - Signals_59 AT %B27 : BYTE; - Signals_60 AT %B28 : BYTE; - Signals_61 AT %B29 : BYTE; - Signals_62 AT %B30 : BYTE; - Signals_63 AT %B31 : BYTE; + bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; + Signals_1 AT %X1.2 : BOOL; + Signals_2 AT %X1.3 : BOOL; + Signals_3 AT %X1.4 : BOOL; + Signals_4 AT %X1.5 : BOOL; + Signals_5 AT %X1.6 : BOOL; + Signals_6 AT %X1.7 : BOOL; END_STRUCT; END_TYPE END_NAMESPACE diff --git a/src/io/app/src/IO/Outputs.st b/src/io/app/src/IO/Outputs.st index 63366ec7e..68421af3a 100644 --- a/src/io/app/src/IO/Outputs.st +++ b/src/io/app/src/IO/Outputs.st @@ -1,14 +1,9 @@ -NAMESPACE AXOpen.Io +NAMESPACE AXOpen.Io TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} Outputs : STRUCT - bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Output AT %B0 : bni00l3_2_16_DI_BALLUFF_8_Port_IO_Link_Master_Output_Layout; - - // Module et200sp/A20 - et200sp_A20_Output AT %B33 : et200sp_A20_Output_Layout; - - et200sp_A30_Output AT %B1 : et200sp_A30_Output_Layout; + bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output AT %B0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout; END_STRUCT; END_TYPE diff --git a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3.hwl.yml b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3.hwl.yml index 4526afb78..dca054c1e 100644 --- a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3.hwl.yml +++ b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3.hwl.yml @@ -127,42 +127,42 @@ Templates: FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' GsdId: 'IDS_IOLM' Slot: 1 - IoConfiguration: - Inputs: - # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). - ProcessImagePartition: 'Automatic update' - Outputs: - # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). - ProcessImagePartition: 'Automatic update' - # - Apply: ${X01} - # Arguments: - # SubmoduleName: 'X01' - # Slot: 2 - # - Apply: ${X02} - # Arguments: - # SubmoduleName: 'X02' - # Slot: 3 - # - Apply: ${X03} - # Arguments: - # SubmoduleName: 'X03' - # Slot: 4 - # - Apply: ${X04} - # Arguments: - # SubmoduleName: 'X04' - # Slot: 5 - # - Apply: ${X05} - # Arguments: - # SubmoduleName: 'X05' - # Slot: 6 - # - Apply: ${X06} - # Arguments: - # SubmoduleName: 'X06' - # Slot: 7 - # - Apply: ${X07} - # Arguments: - # SubmoduleName: 'X07' - # Slot: 8 - # - Apply: ${X08} - # Arguments: - # SubmoduleName: 'X08' - # Slot: 9 + # IoConfiguration: + # Inputs: + # # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). + # ProcessImagePartition: 'Automatic update' + # Outputs: + # # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). + # ProcessImagePartition: 'Automatic update' + - Apply: ${X01} + Arguments: + SubmoduleName: 'X01' + Slot: 2 + - Apply: ${X02} + Arguments: + SubmoduleName: 'X02' + Slot: 3 + - Apply: ${X03} + Arguments: + SubmoduleName: 'X03' + Slot: 4 + - Apply: ${X04} + Arguments: + SubmoduleName: 'X04' + Slot: 5 + - Apply: ${X05} + Arguments: + SubmoduleName: 'X05' + Slot: 6 + - Apply: ${X06} + Arguments: + SubmoduleName: 'X06' + Slot: 7 + - Apply: ${X07} + Arguments: + SubmoduleName: 'X07' + Slot: 8 + - Apply: ${X08} + Arguments: + SubmoduleName: 'X08' + Slot: 9 diff --git a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099.hwl.yml b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099.hwl.yml index 2dd5d53dc..e2c03d201 100644 --- a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099.hwl.yml +++ b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099.hwl.yml @@ -1,72 +1,72 @@ -# Templates: -# Submodules: -# - Name: 'balluff_bni00l3_bni0099' -# Placeholders: -# - Name: 'SubmoduleName' -# Value: 'X01' -# AllowedValues: -# - 'X01' -# - 'X02' -# - 'X03' -# - 'X04' -# - 'X05' -# - 'X06' -# - 'X07' -# - 'X08' -# - Name: 'Slot' -# Value: 2 -# AllowedValues: -# - 2 -# - 3 -# - 4 -# - 5 -# - 6 -# - 7 -# - 8 -# - 9 -# Content: -# Name: '${SubmoduleName}' -# Slot: '${Slot}' -# TypeIdentifier: -# FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' -# GsdId: 'IDS_IOL_1I_0O_PQI' -# Parameters: -# RecordDataList: -# - IndexName: 'Port configuration' -# Values: -# - OffsetName: 'Enable port diagnosis' -# Value: True -# - OffsetName: 'Enable process alarms (Enable Notifications)' -# Value: False -# - OffsetName: 'Enable input fraction (Disable PD size check)' -# Value: False -# - OffsetName: 'Enable Pull/Plug' -# Value: True -# # - Offset: '4' -# # # Possible value range: [0, 255] -# # Value: 2 -# # - Offset: '5' -# # # Possible value range: [0, 255] -# # Value: 0 -# - OffsetName: 'Port mode' -# # Possible ValueNames: Deactivated | Set port configuration | Autoconfig -# ValueName: 'Autoconfig' -# - OffsetName: 'Validation & Backup' -# # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore -# ValueName: 'Type compatible Device V1.1, Backup + Restore' -# - OffsetName: 'Port Class / Pin2 behavior' -# # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power -# ValueName: 'Class A / NC (Not connected)' -# - OffsetName: 'Cycle Time' -# # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms -# ValueName: 'as fast as possible' -# - OffsetName: 'Vendor ID (dez)' -# # Possible value range: [0, 65535] -# Value: 888 -# - OffsetName: 'Device ID (dez)' -# # Possible value range: [0, 16777215] -# Value: 330592 -# IoConfiguration: -# Inputs: -# # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). -# ProcessImagePartition: 'Automatic update' +Templates: + Submodules: + - Name: 'balluff_bni00l3_bni0099' + Placeholders: + - Name: 'SubmoduleName' + Value: 'X01' + AllowedValues: + - 'X01' + - 'X02' + - 'X03' + - 'X04' + - 'X05' + - 'X06' + - 'X07' + - 'X08' + - Name: 'Slot' + Value: 2 + AllowedValues: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + Content: + Name: '${SubmoduleName}' + Slot: '${Slot}' + TypeIdentifier: + FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' + GsdId: 'IDS_IOL_1I_0O_PQI' + Parameters: + RecordDataList: + - IndexName: 'Port configuration' + Values: + - OffsetName: 'Enable port diagnosis' + Value: True + - OffsetName: 'Enable process alarms (Enable Notifications)' + Value: False + - OffsetName: 'Enable input fraction (Disable PD size check)' + Value: False + - OffsetName: 'Enable Pull/Plug' + Value: True + # - Offset: '4' + # # Possible value range: [0, 255] + # Value: 2 + # - Offset: '5' + # # Possible value range: [0, 255] + # Value: 0 + - OffsetName: 'Port mode' + # Possible ValueNames: Deactivated | Set port configuration | Autoconfig + ValueName: 'Autoconfig' + - OffsetName: 'Validation & Backup' + # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore + ValueName: 'Type compatible Device V1.1, Backup + Restore' + - OffsetName: 'Port Class / Pin2 behavior' + # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power + ValueName: 'Class A / NC (Not connected)' + - OffsetName: 'Cycle Time' + # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms + ValueName: 'as fast as possible' + - OffsetName: 'Vendor ID (dez)' + # Possible value range: [0, 65535] + Value: 888 + - OffsetName: 'Device ID (dez)' + # Possible value range: [0, 16777215] + Value: 330592 + # IoConfiguration: + # Inputs: + # # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). + # ProcessImagePartition: 'Automatic update' diff --git a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099_bni0099.hwl.yml b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099_bni0099.hwl.yml index 836af81d6..a6bb12bc7 100644 --- a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099_bni0099.hwl.yml +++ b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni0099_bni0099.hwl.yml @@ -1,72 +1,72 @@ -# Templates: -# Submodules: -# - Name: 'balluff_bni00l3_bni0099_bni0099' -# Placeholders: -# - Name: 'SubmoduleName' -# Value: 'X01' -# AllowedValues: -# - 'X01' -# - 'X02' -# - 'X03' -# - 'X04' -# - 'X05' -# - 'X06' -# - 'X07' -# - 'X08' -# - Name: 'Slot' -# Value: 2 -# AllowedValues: -# - 2 -# - 3 -# - 4 -# - 5 -# - 6 -# - 7 -# - 8 -# - 9 -# Content: -# Name: '${SubmoduleName}' -# Slot: '${Slot}' -# TypeIdentifier: -# FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' -# GsdId: 'IDS_IOL_2I_0O_PQI' -# Parameters: -# RecordDataList: -# - IndexName: 'Port configuration' -# Values: -# - OffsetName: 'Enable port diagnosis' -# Value: True -# - OffsetName: 'Enable process alarms (Enable Notifications)' -# Value: False -# - OffsetName: 'Enable input fraction (Disable PD size check)' -# Value: False -# - OffsetName: 'Enable Pull/Plug' -# Value: True -# # - Offset: '4' -# # # Possible value range: [0, 255] -# # Value: 2 -# # - Offset: '5' -# # # Possible value range: [0, 255] -# # Value: 0 -# - OffsetName: 'Port mode' -# # Possible ValueNames: Deactivated | Set port configuration | Autoconfig -# ValueName: 'Autoconfig' -# - OffsetName: 'Validation & Backup' -# # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore -# ValueName: 'Type compatible Device V1.1, Backup + Restore' -# - OffsetName: 'Port Class / Pin2 behavior' -# # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power -# ValueName: 'Class A / NC (Not connected)' -# - OffsetName: 'Cycle Time' -# # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms -# ValueName: 'as fast as possible' -# - OffsetName: 'Vendor ID (dez)' -# # Possible value range: [0, 65535] -# Value: 888 -# - OffsetName: 'Device ID (dez)' -# # Possible value range: [0, 16777215] -# Value: 330593 -# IoConfiguration: -# Inputs: -# # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). -# ProcessImagePartition: 'Automatic update' +Templates: + Submodules: + - Name: 'balluff_bni00l3_bni0099_bni0099' + Placeholders: + - Name: 'SubmoduleName' + Value: 'X01' + AllowedValues: + - 'X01' + - 'X02' + - 'X03' + - 'X04' + - 'X05' + - 'X06' + - 'X07' + - 'X08' + - Name: 'Slot' + Value: 2 + AllowedValues: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + Content: + Name: '${SubmoduleName}' + Slot: '${Slot}' + TypeIdentifier: + FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' + GsdId: 'IDS_IOL_2I_0O_PQI' + Parameters: + RecordDataList: + - IndexName: 'Port configuration' + Values: + - OffsetName: 'Enable port diagnosis' + Value: True + - OffsetName: 'Enable process alarms (Enable Notifications)' + Value: False + - OffsetName: 'Enable input fraction (Disable PD size check)' + Value: False + - OffsetName: 'Enable Pull/Plug' + Value: True + # - Offset: '4' + # # Possible value range: [0, 255] + # Value: 2 + # - Offset: '5' + # # Possible value range: [0, 255] + # Value: 0 + - OffsetName: 'Port mode' + # Possible ValueNames: Deactivated | Set port configuration | Autoconfig + ValueName: 'Autoconfig' + - OffsetName: 'Validation & Backup' + # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore + ValueName: 'Type compatible Device V1.1, Backup + Restore' + - OffsetName: 'Port Class / Pin2 behavior' + # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power + ValueName: 'Class A / NC (Not connected)' + - OffsetName: 'Cycle Time' + # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms + ValueName: 'as fast as possible' + - OffsetName: 'Vendor ID (dez)' + # Possible value range: [0, 65535] + Value: 888 + - OffsetName: 'Device ID (dez)' + # Possible value range: [0, 16777215] + Value: 330593 + # IoConfiguration: + # Inputs: + # # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). + # ProcessImagePartition: 'Automatic update' diff --git a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay.hwl.yml b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay.hwl.yml index 8ce942bdc..4a56dcc8c 100644 --- a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay.hwl.yml +++ b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay.hwl.yml @@ -1,72 +1,72 @@ -# Templates: -# Submodules: -# - Name: 'balluff_bni00l3_bni00ay' -# Placeholders: -# - Name: 'SubmoduleName' -# Value: 'X01' -# AllowedValues: -# - 'X01' -# - 'X02' -# - 'X03' -# - 'X04' -# - 'X05' -# - 'X06' -# - 'X07' -# - 'X08' -# - Name: 'Slot' -# Value: 2 -# AllowedValues: -# - 2 -# - 3 -# - 4 -# - 5 -# - 6 -# - 7 -# - 8 -# - 9 -# Content: -# Name: '${SubmoduleName}' -# Slot: '${Slot}' -# TypeIdentifier: -# FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' -# GsdId: 'IDS_IOL_2I_0O_PQI' -# Parameters: -# RecordDataList: -# - IndexName: 'Port configuration' -# Values: -# - OffsetName: 'Enable port diagnosis' -# Value: True -# - OffsetName: 'Enable process alarms (Enable Notifications)' -# Value: False -# - OffsetName: 'Enable input fraction (Disable PD size check)' -# Value: False -# - OffsetName: 'Enable Pull/Plug' -# Value: True -# # - Offset: '4' -# # # Possible value range: [0, 255] -# # Value: 2 -# # - Offset: '5' -# # # Possible value range: [0, 255] -# # Value: 0 -# - OffsetName: 'Port mode' -# # Possible ValueNames: Deactivated | Set port configuration | Autoconfig -# ValueName: 'Autoconfig' -# - OffsetName: 'Validation & Backup' -# # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore -# ValueName: 'Type compatible Device V1.1, Backup + Restore' -# - OffsetName: 'Port Class / Pin2 behavior' -# # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power -# ValueName: 'Class A / NC (Not connected)' -# - OffsetName: 'Cycle Time' -# # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms -# ValueName: 'as fast as possible' -# - OffsetName: 'Vendor ID (dez)' -# # Possible value range: [0, 65535] -# Value: 888 -# - OffsetName: 'Device ID (dez)' -# # Possible value range: [0, 16777215] -# Value: 331040 -# IoConfiguration: -# Inputs: -# # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). -# ProcessImagePartition: 'Automatic update' +Templates: + Submodules: + - Name: 'balluff_bni00l3_bni00ay' + Placeholders: + - Name: 'SubmoduleName' + Value: 'X01' + AllowedValues: + - 'X01' + - 'X02' + - 'X03' + - 'X04' + - 'X05' + - 'X06' + - 'X07' + - 'X08' + - Name: 'Slot' + Value: 2 + AllowedValues: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + Content: + Name: '${SubmoduleName}' + Slot: '${Slot}' + TypeIdentifier: + FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' + GsdId: 'IDS_IOL_2I_0O_PQI' + Parameters: + RecordDataList: + - IndexName: 'Port configuration' + Values: + - OffsetName: 'Enable port diagnosis' + Value: True + - OffsetName: 'Enable process alarms (Enable Notifications)' + Value: False + - OffsetName: 'Enable input fraction (Disable PD size check)' + Value: False + - OffsetName: 'Enable Pull/Plug' + Value: True + # - Offset: '4' + # # Possible value range: [0, 255] + # Value: 2 + # - Offset: '5' + # # Possible value range: [0, 255] + # Value: 0 + - OffsetName: 'Port mode' + # Possible ValueNames: Deactivated | Set port configuration | Autoconfig + ValueName: 'Autoconfig' + - OffsetName: 'Validation & Backup' + # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore + ValueName: 'Type compatible Device V1.1, Backup + Restore' + - OffsetName: 'Port Class / Pin2 behavior' + # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power + ValueName: 'Class A / NC (Not connected)' + - OffsetName: 'Cycle Time' + # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms + ValueName: 'as fast as possible' + - OffsetName: 'Vendor ID (dez)' + # Possible value range: [0, 65535] + Value: 888 + - OffsetName: 'Device ID (dez)' + # Possible value range: [0, 16777215] + Value: 331040 + # IoConfiguration: + # Inputs: + # # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). + # ProcessImagePartition: 'Automatic update' diff --git a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay_bni00ay.hwl.yml b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay_bni00ay.hwl.yml index 169e20a58..c963aa95a 100644 --- a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay_bni00ay.hwl.yml +++ b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_bni00ay_bni00ay.hwl.yml @@ -1,72 +1,72 @@ -# Templates: -# Submodules: -# - Name: 'balluff_bni00l3_bni00ay_bni00ay' -# Placeholders: -# - Name: 'SubmoduleName' -# Value: 'X01' -# AllowedValues: -# - 'X01' -# - 'X02' -# - 'X03' -# - 'X04' -# - 'X05' -# - 'X06' -# - 'X07' -# - 'X08' -# - Name: 'Slot' -# Value: 2 -# AllowedValues: -# - 2 -# - 3 -# - 4 -# - 5 -# - 6 -# - 7 -# - 8 -# - 9 -# Content: -# Name: '${SubmoduleName}' -# Slot: '${Slot}' -# TypeIdentifier: -# FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' -# GsdId: 'IDS_IOL_4I_0O_PQI' -# Parameters: -# RecordDataList: -# - IndexName: 'Port configuration' -# Values: -# - OffsetName: 'Enable port diagnosis' -# Value: True -# - OffsetName: 'Enable process alarms (Enable Notifications)' -# Value: False -# - OffsetName: 'Enable input fraction (Disable PD size check)' -# Value: False -# - OffsetName: 'Enable Pull/Plug' -# Value: True -# # - Offset: '4' -# # # Possible value range: [0, 255] -# # Value: 2 -# # - Offset: '5' -# # # Possible value range: [0, 255] -# # Value: 0 -# - OffsetName: 'Port mode' -# # Possible ValueNames: Deactivated | Set port configuration | Autoconfig -# ValueName: 'Autoconfig' -# - OffsetName: 'Validation & Backup' -# # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore -# ValueName: 'Type compatible Device V1.1, Backup + Restore' -# - OffsetName: 'Port Class / Pin2 behavior' -# # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power -# ValueName: 'Class A / NC (Not connected)' -# - OffsetName: 'Cycle Time' -# # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms -# ValueName: 'as fast as possible' -# - OffsetName: 'Vendor ID (dez)' -# # Possible value range: [0, 65535] -# Value: 888 -# - OffsetName: 'Device ID (dez)' -# # Possible value range: [0, 16777215] -# Value: 331041 -# IoConfiguration: -# Inputs: -# # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). -# ProcessImagePartition: 'Automatic update' +Templates: + Submodules: + - Name: 'balluff_bni00l3_bni00ay_bni00ay' + Placeholders: + - Name: 'SubmoduleName' + Value: 'X01' + AllowedValues: + - 'X01' + - 'X02' + - 'X03' + - 'X04' + - 'X05' + - 'X06' + - 'X07' + - 'X08' + - Name: 'Slot' + Value: 2 + AllowedValues: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + Content: + Name: '${SubmoduleName}' + Slot: '${Slot}' + TypeIdentifier: + FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' + GsdId: 'IDS_IOL_4I_0O_PQI' + Parameters: + RecordDataList: + - IndexName: 'Port configuration' + Values: + - OffsetName: 'Enable port diagnosis' + Value: True + - OffsetName: 'Enable process alarms (Enable Notifications)' + Value: False + - OffsetName: 'Enable input fraction (Disable PD size check)' + Value: False + - OffsetName: 'Enable Pull/Plug' + Value: True + # - Offset: '4' + # # Possible value range: [0, 255] + # Value: 2 + # - Offset: '5' + # # Possible value range: [0, 255] + # Value: 0 + - OffsetName: 'Port mode' + # Possible ValueNames: Deactivated | Set port configuration | Autoconfig + ValueName: 'Autoconfig' + - OffsetName: 'Validation & Backup' + # Possible ValueNames: No Device check | Type compatible Device V1.0 | Type compatible Device V1.1 | Type compatible Device V1.1, Backup + Restore | Type compatible Device V1.1, Restore + ValueName: 'Type compatible Device V1.1, Backup + Restore' + - OffsetName: 'Port Class / Pin2 behavior' + # Possible ValueNames: Class A / NC (Not connected) | Class A / DI | Class A / DO | Class A / Power + ValueName: 'Class A / NC (Not connected)' + - OffsetName: 'Cycle Time' + # Possible ValueNames: as fast as possible | 1.6 ms | 3.2 ms | 4.8 ms | 8.0 ms | 10.0 ms | 12.0 ms | 16.0 ms | 20.0 ms | 40.0 ms | 80.0 ms | 120.0 ms + ValueName: 'as fast as possible' + - OffsetName: 'Vendor ID (dez)' + # Possible value range: [0, 65535] + Value: 888 + - OffsetName: 'Device ID (dez)' + # Possible value range: [0, 16777215] + Value: 331041 + # IoConfiguration: + # Inputs: + # # Supported Process Image Partitions depend on the specific controller type in use (e.g., S7-1500 supports PIP 0–31). + # ProcessImagePartition: 'Automatic update' diff --git a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_port_deactivated.hwl.yml b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_port_deactivated.hwl.yml index c71030fc4..cc7df388e 100644 --- a/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_port_deactivated.hwl.yml +++ b/src/io/ctrl/assets/balluff.iolink/io/balluff_bni00l3_port_deactivated.hwl.yml @@ -1,46 +1,46 @@ -# Templates: -# Submodules: -# - Name: 'balluff_bni00l3_port_deactivated' -# Placeholders: -# - Name: 'SubmoduleName' -# Value: 'X01' -# AllowedValues: -# - 'X01' -# - 'X02' -# - 'X03' -# - 'X04' -# - 'X05' -# - 'X06' -# - 'X07' -# - 'X08' -# - Name: 'Slot' -# Value: 2 -# AllowedValues: -# - 2 -# - 3 -# - 4 -# - 5 -# - 6 -# - 7 -# - 8 -# - 9 -# Content: -# Name: '${SubmoduleName}' -# Slot: '${Slot}' -# TypeIdentifier: -# FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' -# GsdId: 'IDS_IOL_INACTIVE' -# Parameters: -# RecordDataList: -# # - IndexName: 'Port configuration' -# # Values: -# # - OffsetName: 'Enable port diagnosis' -# # Value: False -# # - OffsetName: 'Enable process alarms (Enable Notifications)' -# # Value: False -# # - OffsetName: 'Enable input fraction (Disable PD size check)' -# # Value: False -# # - OffsetName: 'Enable Pull/Plug' -# # Value: False -# # - OffsetName: 'Port mode' -# # ValueName: 'Deactivated' +Templates: + Submodules: + - Name: 'balluff_bni00l3_port_deactivated' + Placeholders: + - Name: 'SubmoduleName' + Value: 'X01' + AllowedValues: + - 'X01' + - 'X02' + - 'X03' + - 'X04' + - 'X05' + - 'X06' + - 'X07' + - 'X08' + - Name: 'Slot' + Value: 2 + AllowedValues: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + Content: + Name: '${SubmoduleName}' + Slot: '${Slot}' + TypeIdentifier: + FileName: 'GSDML-V2.45-BALLUFF-BNI-XG3-X0X-XB5-X067-20250822.XML' + GsdId: 'IDS_IOL_INACTIVE' + # Parameters: + # RecordDataList: + # - IndexName: 'Port configuration' + # Values: + # - OffsetName: 'Enable port diagnosis' + # Value: False + # - OffsetName: 'Enable process alarms (Enable Notifications)' + # Value: False + # - OffsetName: 'Enable input fraction (Disable PD size check)' + # Value: False + # - OffsetName: 'Enable Pull/Plug' + # Value: False + # - OffsetName: 'Port mode' + # ValueName: 'Deactivated' diff --git a/src/scripts/hw_compile.sh b/src/scripts/hw_compile.sh index c6af1db14..257403e56 100644 --- a/src/scripts/hw_compile.sh +++ b/src/scripts/hw_compile.sh @@ -3,9 +3,6 @@ export RED='\033[0;31m' export YELLOW='\033[0;33m' export NC='\033[0m\r\n' # No Color+CRLF hwcc=$(apax hwc compile -i ".\hwc" -o bin/hwc/) -dos2unix SystemConstants/* -dos2unix -r src/IO/* -dos2unix -r hwc/hwc.gen/* if [[ $? -eq 0 ]]; then printf "${GREEN}Hardware configuration compiled succesfully.${NC}" exit 0 @@ -14,3 +11,6 @@ else printf "${RED}Please check the details above.${NC}\n" exit 1 fi +dos2unix SystemConstants/* +dos2unix -r src/IO/* +dos2unix -r hwc/hwc.gen/* From aa3d44e956b11c4acbf16e78f73f6ddc6a223b46 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Thu, 5 Mar 2026 20:15:53 +0100 Subject: [PATCH 3/7] bcp --- .../SystemConstants/plc_line_HwIdentifiers.st | 27 +- .../SystemConstants/plc_line_IoAddresses.st | 140 +++- src/io/app/apax.yml | 17 +- .../hwc.gen/plc_line.HardwareIdentifiers.json | 60 +- .../app/hwc/hwc.gen/plc_line.IoAddresses.json | 653 +++++++++++++++++- .../plc_line.SecurityConfiguration.json | 6 +- src/io/app/hwc/plc_line.hwl.yml | 4 +- .../app/hwc/project_devices/et200sp_1.hwl.yml | 122 ++-- src/io/app/src/IO/HwIdentifierList.st | 13 +- src/io/app/src/IO/HwIdentifiers.st | 27 +- src/io/app/src/IO/Inputs.st | 6 + src/io/app/src/IO/IoStructures.st | 138 +++- src/io/app/src/IO/Outputs.st | 5 + src/scripts/all.sh | 178 +++-- src/scripts/all_first.sh | 19 +- src/scripts/compare_all.sh | 68 ++ src/scripts/compile_all.sh | 180 +++++ src/scripts/compile_all_compare_all.sh | 59 ++ 18 files changed, 1558 insertions(+), 164 deletions(-) create mode 100644 src/scripts/compare_all.sh create mode 100644 src/scripts/compile_all.sh create mode 100644 src/scripts/compile_all_compare_all.sh diff --git a/src/io/app/SystemConstants/plc_line_HwIdentifiers.st b/src/io/app/SystemConstants/plc_line_HwIdentifiers.st index 8f97352b2..823b532f8 100644 --- a/src/io/app/SystemConstants/plc_line_HwIdentifiers.st +++ b/src/io/app/SystemConstants/plc_line_HwIdentifiers.st @@ -4,19 +4,30 @@ CONFIGURATION HardwareIDs bni00l3_BALLUFF_Link_module_HwID : UINT := UINT#263; bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_HwID : UINT := UINT#264; bni00l3_Rack_HwID : UINT := UINT#261; - bni00l3_X01_HwID : UINT := UINT#265; - bni00l3_X02_HwID : UINT := UINT#266; - bni00l3_X03_HwID : UINT := UINT#267; - bni00l3_X04_HwID : UINT := UINT#268; - bni00l3_X05_HwID : UINT := UINT#269; - bni00l3_X06_HwID : UINT := UINT#270; - bni00l3_X07_HwID : UINT := UINT#271; - bni00l3_X08_HwID : UINT := UINT#272; + bni00l3_X01_HwID : UINT := UINT#271; + bni00l3_X02_HwID : UINT := UINT#272; + bni00l3_X03_HwID : UINT := UINT#265; + bni00l3_X04_HwID : UINT := UINT#266; + bni00l3_X05_HwID : UINT := UINT#267; + bni00l3_X06_HwID : UINT := UINT#268; + bni00l3_X07_HwID : UINT := UINT#269; + bni00l3_X08_HwID : UINT := UINT#270; bni00l3_bni00l3_HwID : UINT := UINT#262; bni00l3_bni00l3_BNI_XG3_508_0B5_R067_HwID : UINT := UINT#273; bni00l3_bni00l3_PN_IO_HwID : UINT := UINT#257; bni00l3_bni00l3_PN_IO_Port_1_HwID : UINT := UINT#259; bni00l3_bni00l3_PN_IO_Port_2_HwID : UINT := UINT#260; + et200sp_HwID : UINT := UINT#275; + et200sp_A100_Server_module_V1_1_0_bytes_HwID : UINT := UINT#280; + et200sp_A10_DI_16x24VDC_ST_V1_1_HwID : UINT := UINT#283; + et200sp_A20_DQ_16x24VDC_0_5A_ST_V1_1_HwID : UINT := UINT#282; + et200sp_A30_CM_4xIO_Link_V2_2_32I_32O_HwID : UINT := UINT#281; + et200sp_Rack_HwID : UINT := UINT#278; + et200sp_et200sp_HwID : UINT := UINT#279; + et200sp_et200sp_IM_155_6_PN_ST_V4_2_HwID : UINT := UINT#284; + et200sp_et200sp_PN_IO_HwID : UINT := UINT#274; + et200sp_et200sp_Port_1_HwID : UINT := UINT#276; + et200sp_et200sp_Port_2_HwID : UINT := UINT#277; plc_line_HwID : UINT := UINT#32; plc_line_Rail_0_HwID : UINT := UINT#285; plc_line_plc_line_HwID : UINT := UINT#48; diff --git a/src/io/app/SystemConstants/plc_line_IoAddresses.st b/src/io/app/SystemConstants/plc_line_IoAddresses.st index f6adaed2c..f85f34b96 100644 --- a/src/io/app/SystemConstants/plc_line_IoAddresses.st +++ b/src/io/app/SystemConstants/plc_line_IoAddresses.st @@ -6,6 +6,16 @@ CONFIGURATION IoAddresses bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output AT %QB0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout; bni00l3_BALLUFF_Link_module_X01_Input AT %IB1 : bni00l3_BALLUFF_Link_module_X01_Input_Layout; bni00l3_BALLUFF_Link_module_X02_Input AT %IB4 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; + + // Module et200sp/A10 + et200sp_A10_Input AT %IB39 : et200sp_A10_Input_Layout; + + // Module et200sp/A20 + et200sp_A20_Output AT %QB33 : et200sp_A20_Output_Layout; + + // Module et200sp/A30 + et200sp_A30_Input AT %IB7 : et200sp_A30_Input_Layout; + et200sp_A30_Output AT %QB1 : et200sp_A30_Output_Layout; END_VAR END_CONFIGURATION @@ -49,12 +59,128 @@ END_TYPE TYPE bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT - Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; - Signals_1 AT %X1.2 : BOOL; - Signals_2 AT %X1.3 : BOOL; - Signals_3 AT %X1.4 : BOOL; - Signals_4 AT %X1.5 : BOOL; - Signals_5 AT %X1.6 : BOOL; - Signals_6 AT %X1.7 : BOOL; + Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; + Signals_1 AT %X2.2 : BOOL; + Signals_2 AT %X2.3 : BOOL; + Signals_3 AT %X2.4 : BOOL; + Signals_4 AT %X2.5 : BOOL; + Signals_5 AT %X2.6 : BOOL; + Signals_6 AT %X2.7 : BOOL; + END_STRUCT; +END_TYPE + +TYPE + et200sp_A10_Input_Layout : STRUCT + Signals_0 AT %X0.0 : BOOL; + Signals_1 AT %X0.1 : BOOL; + Signals_2 AT %X0.2 : BOOL; + Signals_3 AT %X0.3 : BOOL; + Signals_4 AT %X0.4 : BOOL; + Signals_5 AT %X0.5 : BOOL; + Signals_6 AT %X0.6 : BOOL; + Signals_7 AT %X0.7 : BOOL; + Signals_8 AT %X1.0 : BOOL; + Signals_9 AT %X1.1 : BOOL; + Signals_10 AT %X1.2 : BOOL; + Signals_11 AT %X1.3 : BOOL; + Signals_12 AT %X1.4 : BOOL; + Signals_13 AT %X1.5 : BOOL; + Signals_14 AT %X1.6 : BOOL; + Signals_15 AT %X1.7 : BOOL; + END_STRUCT; +END_TYPE + +TYPE + et200sp_A20_Output_Layout : STRUCT + Signals_0 AT %X0.0 : BOOL; + Signals_1 AT %X0.1 : BOOL; + Signals_2 AT %X0.2 : BOOL; + Signals_3 AT %X0.3 : BOOL; + Signals_4 AT %X0.4 : BOOL; + Signals_5 AT %X0.5 : BOOL; + Signals_6 AT %X0.6 : BOOL; + Signals_7 AT %X0.7 : BOOL; + Signals_8 AT %X1.0 : BOOL; + Signals_9 AT %X1.1 : BOOL; + Signals_10 AT %X1.2 : BOOL; + Signals_11 AT %X1.3 : BOOL; + Signals_12 AT %X1.4 : BOOL; + Signals_13 AT %X1.5 : BOOL; + Signals_14 AT %X1.6 : BOOL; + Signals_15 AT %X1.7 : BOOL; + END_STRUCT; +END_TYPE + +TYPE + et200sp_A30_Input_Layout : STRUCT + Signals_0 AT %B0 : BYTE; + Signals_1 AT %B1 : BYTE; + Signals_2 AT %B2 : BYTE; + Signals_3 AT %B3 : BYTE; + Signals_4 AT %B4 : BYTE; + Signals_5 AT %B5 : BYTE; + Signals_6 AT %B6 : BYTE; + Signals_7 AT %B7 : BYTE; + Signals_8 AT %B8 : BYTE; + Signals_9 AT %B9 : BYTE; + Signals_10 AT %B10 : BYTE; + Signals_11 AT %B11 : BYTE; + Signals_12 AT %B12 : BYTE; + Signals_13 AT %B13 : BYTE; + Signals_14 AT %B14 : BYTE; + Signals_15 AT %B15 : BYTE; + Signals_16 AT %B16 : BYTE; + Signals_17 AT %B17 : BYTE; + Signals_18 AT %B18 : BYTE; + Signals_19 AT %B19 : BYTE; + Signals_20 AT %B20 : BYTE; + Signals_21 AT %B21 : BYTE; + Signals_22 AT %B22 : BYTE; + Signals_23 AT %B23 : BYTE; + Signals_24 AT %B24 : BYTE; + Signals_25 AT %B25 : BYTE; + Signals_26 AT %B26 : BYTE; + Signals_27 AT %B27 : BYTE; + Signals_28 AT %B28 : BYTE; + Signals_29 AT %B29 : BYTE; + Signals_30 AT %B30 : BYTE; + Signals_31 AT %B31 : BYTE; + END_STRUCT; +END_TYPE + +TYPE + et200sp_A30_Output_Layout : STRUCT + Signals_32 AT %B0 : BYTE; + Signals_33 AT %B1 : BYTE; + Signals_34 AT %B2 : BYTE; + Signals_35 AT %B3 : BYTE; + Signals_36 AT %B4 : BYTE; + Signals_37 AT %B5 : BYTE; + Signals_38 AT %B6 : BYTE; + Signals_39 AT %B7 : BYTE; + Signals_40 AT %B8 : BYTE; + Signals_41 AT %B9 : BYTE; + Signals_42 AT %B10 : BYTE; + Signals_43 AT %B11 : BYTE; + Signals_44 AT %B12 : BYTE; + Signals_45 AT %B13 : BYTE; + Signals_46 AT %B14 : BYTE; + Signals_47 AT %B15 : BYTE; + Signals_48 AT %B16 : BYTE; + Signals_49 AT %B17 : BYTE; + Signals_50 AT %B18 : BYTE; + Signals_51 AT %B19 : BYTE; + Signals_52 AT %B20 : BYTE; + Signals_53 AT %B21 : BYTE; + Signals_54 AT %B22 : BYTE; + Signals_55 AT %B23 : BYTE; + Signals_56 AT %B24 : BYTE; + Signals_57 AT %B25 : BYTE; + Signals_58 AT %B26 : BYTE; + Signals_59 AT %B27 : BYTE; + Signals_60 AT %B28 : BYTE; + Signals_61 AT %B29 : BYTE; + Signals_62 AT %B30 : BYTE; + Signals_63 AT %B31 : BYTE; END_STRUCT; END_TYPE diff --git a/src/io/app/apax.yml b/src/io/app/apax.yml index 849183e80..45a3d1f2a 100644 --- a/src/io/app/apax.yml +++ b/src/io/app/apax.yml @@ -14,8 +14,7 @@ variables: AXTARGETPLATFORMINPUT: .\bin\1500\ AX_USERNAME: "admin" AX_TARGET_PWD: "Qwerty123456+" - # USE_PLC_SIM_ADVANCED: "true" - USE_PLC_SIM_ADVANCED: "true" + USE_PLC_SIM_ADVANCED: "false" # <= Do not commit any changes to the following variables. You may modify them locally, but committing the changes will mess up the nightly build. registries: "@inxton": "https://npm.pkg.github.com/" @@ -137,12 +136,20 @@ scripts: echo $(date +%D)"-"$(date +%H)":"$(date +%M)":"$(date +%S) " - 'apax swddo' Finished in :" $(expr $(date +%s) - $START) "s" alf: | #clear plc except ip and name and provide all actions for install all, build and initial download hw so as sw (apax plcsim & apax clean & apax install & apax clean_plc & apax ssc & apax hwfd & apax swfd) START=$(date +%s) - ..\\..\\scripts\\all_first.sh $DEFAULT_NAMESPACE $PLC_NAME $AXTARGET $AXTARGETPLATFORMINPUT $AX_USERNAME $AX_TARGET_PWD $USE_PLC_SIM_ADVANCED + if [ "$1" = "--force" ] || [ "$1" = "-f" ]; then + ..\\..\\scripts\\all_first.sh $DEFAULT_NAMESPACE $PLC_NAME $AXTARGET $AXTARGETPLATFORMINPUT $AX_USERNAME $AX_TARGET_PWD $USE_PLC_SIM_ADVANCED true + else + ..\\..\\scripts\\all_first.sh $DEFAULT_NAMESPACE $PLC_NAME $AXTARGET $AXTARGETPLATFORMINPUT $AX_USERNAME $AX_TARGET_PWD $USE_PLC_SIM_ADVANCED false + fi echo $(date +%D)"-"$(date +%H)":"$(date +%M)":"$(date +%S) " - 'apax alf' Finished in :" $(expr $(date +%s) - $START) "s" all: | #build and download hardware and software using cert file. If cert file does not exists or its hash is different calls apax alf (apax plcsim & apax clean & apax install & apax hwu & apax swfd) START=$(date +%s) - ..\\..\\scripts\\all.sh $DEFAULT_NAMESPACE $PLC_NAME $AXTARGET $AXTARGETPLATFORMINPUT $AX_USERNAME $AX_TARGET_PWD $USE_PLC_SIM_ADVANCED - echo $(date +%D)"-"$(date +%H)":"$(date +%M)":"$(date +%S) " - 'apax all' Finished in :" $(expr $(date +%s) - $START) "s" + if [ "$1" = "--force" ] || [ "$1" = "-f" ]; then + ..\\..\\scripts\\all.sh $DEFAULT_NAMESPACE $PLC_NAME $AXTARGET $AXTARGETPLATFORMINPUT $AX_USERNAME $AX_TARGET_PWD $USE_PLC_SIM_ADVANCED true + else + ..\\..\\scripts\\all.sh $DEFAULT_NAMESPACE $PLC_NAME $AXTARGET $AXTARGETPLATFORMINPUT $AX_USERNAME $AX_TARGET_PWD $USE_PLC_SIM_ADVANCED false + fi + echo $(date +%D)"-"$(date +%H)":"$(date +%M)":"$(date +%S) " - 'apax all' Finished in :" $(expr $(date +%s) - $START) "s" echo $(date +%D)"-"$(date +%H)":"$(date +%M)":"$(date +%S) " - 'apax all' Finished in :" $(expr $(date +%s) - $START) "s" ib: | START=$(date +%s) apax install diff --git a/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json b/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json index b48457f9a..a1ba59473 100644 --- a/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json +++ b/src/io/app/hwc/hwc.gen/plc_line.HardwareIdentifiers.json @@ -19,35 +19,35 @@ }, { "Name": "bni00l3~X01", - "Value": 265 + "Value": 271 }, { "Name": "bni00l3~X02", - "Value": 266 + "Value": 272 }, { "Name": "bni00l3~X03", - "Value": 267 + "Value": 265 }, { "Name": "bni00l3~X04", - "Value": 268 + "Value": 266 }, { "Name": "bni00l3~X05", - "Value": 269 + "Value": 267 }, { "Name": "bni00l3~X06", - "Value": 270 + "Value": 268 }, { "Name": "bni00l3~X07", - "Value": 271 + "Value": 269 }, { "Name": "bni00l3~X08", - "Value": 272 + "Value": 270 }, { "Name": "bni00l3~bni00l3", @@ -69,6 +69,50 @@ "Name": "bni00l3~bni00l3~PN-IO~Port_2", "Value": 260 }, + { + "Name": "et200sp", + "Value": 275 + }, + { + "Name": "et200sp~A100~Server module V1.1 (0 bytes)", + "Value": 280 + }, + { + "Name": "et200sp~A10~DI 16x24VDC ST V1.1", + "Value": 283 + }, + { + "Name": "et200sp~A20~DQ 16x24VDC/0.5A ST V1.1", + "Value": 282 + }, + { + "Name": "et200sp~A30~CM 4xIO-Link V2.2 32I/32O", + "Value": 281 + }, + { + "Name": "et200sp~Rack", + "Value": 278 + }, + { + "Name": "et200sp~et200sp", + "Value": 279 + }, + { + "Name": "et200sp~et200sp~IM 155-6 PN ST V4.2", + "Value": 284 + }, + { + "Name": "et200sp~et200sp~PN-IO", + "Value": 274 + }, + { + "Name": "et200sp~et200sp~Port_1", + "Value": 276 + }, + { + "Name": "et200sp~et200sp~Port_2", + "Value": 277 + }, { "Name": "plc_line", "Value": 32 diff --git a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json index d16b7aaa7..bdfc38fbf 100644 --- a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json +++ b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json @@ -125,7 +125,7 @@ { "Name": "X01", "Ref": "bni00l3/BALLUFF_Link_module/X01", - "HardwareIdentifier": 265, + "HardwareIdentifier": 271, "Inputs": { "StartAddress": "1.0", "EndAddress": "3.7", @@ -180,51 +180,277 @@ { "Name": "X02", "Ref": "bni00l3/BALLUFF_Link_module/X02", - "HardwareIdentifier": 266, + "HardwareIdentifier": 272, "Inputs": { "StartAddress": "4.0", - "EndAddress": "5.7", - "Length": 16, + "EndAddress": "6.7", + "Length": 24, "Source": "AutoAssigned", "SignalLayout": [ { "Name": "Signals_0", "Offset": 0, - "Length": 8, + "Length": 16, "DataType": "OctetString" }, { "Name": "Signals_1", - "Offset": 10, + "Offset": 18, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_2", - "Offset": 11, + "Offset": 19, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_3", - "Offset": 12, + "Offset": 20, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_4", - "Offset": 13, + "Offset": 21, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 22, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 23, + "Length": 1, + "DataType": "Boolean" + } + ] + } + } + ] + }, + { + "Ref": "et200sp/A10", + "Submodules": [ + { + "Name": "DI 16x24VDC ST V1.1", + "HardwareIdentifier": 283, + "Inputs": { + "StartAddress": "39.0", + "EndAddress": "40.7", + "Length": 16, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_1", + "Offset": 1, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 2, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 3, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 4, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_5", + "Offset": 5, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 6, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_7", + "Offset": 7, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_8", + "Offset": 8, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_9", + "Offset": 9, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_10", + "Offset": 10, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_11", + "Offset": 11, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_12", + "Offset": 12, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_13", + "Offset": 13, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_14", "Offset": 14, "Length": 1, "DataType": "Boolean" }, + { + "Name": "Signals_15", + "Offset": 15, + "Length": 1, + "DataType": "Boolean" + } + ] + } + } + ] + }, + { + "Ref": "et200sp/A20", + "Submodules": [ + { + "Name": "DQ 16x24VDC/0.5A ST V1.1", + "HardwareIdentifier": 282, + "Outputs": { + "StartAddress": "33.0", + "EndAddress": "34.7", + "Length": 16, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_1", + "Offset": 1, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 2, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 3, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 4, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 5, + "Length": 1, + "DataType": "Boolean" + }, { "Name": "Signals_6", + "Offset": 6, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_7", + "Offset": 7, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_8", + "Offset": 8, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_9", + "Offset": 9, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_10", + "Offset": 10, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_11", + "Offset": 11, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_12", + "Offset": 12, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_13", + "Offset": 13, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_14", + "Offset": 14, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_15", "Offset": 15, "Length": 1, "DataType": "Boolean" @@ -233,6 +459,415 @@ } } ] + }, + { + "Ref": "et200sp/A30", + "Submodules": [ + { + "Name": "CM 4xIO-Link V2.2 32I/32O", + "HardwareIdentifier": 281, + "Inputs": { + "StartAddress": "7.0", + "EndAddress": "38.7", + "Length": 256, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_1", + "Offset": 8, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_2", + "Offset": 16, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_3", + "Offset": 24, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_4", + "Offset": 32, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_5", + "Offset": 40, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_6", + "Offset": 48, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_7", + "Offset": 56, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_8", + "Offset": 64, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_9", + "Offset": 72, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_10", + "Offset": 80, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_11", + "Offset": 88, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_12", + "Offset": 96, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_13", + "Offset": 104, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_14", + "Offset": 112, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_15", + "Offset": 120, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_16", + "Offset": 128, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_17", + "Offset": 136, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_18", + "Offset": 144, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_19", + "Offset": 152, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_20", + "Offset": 160, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_21", + "Offset": 168, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_22", + "Offset": 176, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_23", + "Offset": 184, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_24", + "Offset": 192, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_25", + "Offset": 200, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_26", + "Offset": 208, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_27", + "Offset": 216, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_28", + "Offset": 224, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_29", + "Offset": 232, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_30", + "Offset": 240, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_31", + "Offset": 248, + "Length": 8, + "DataType": "Unsigned8" + } + ] + }, + "Outputs": { + "StartAddress": "1.0", + "EndAddress": "32.7", + "Length": 256, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_32", + "Offset": 0, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_33", + "Offset": 8, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_34", + "Offset": 16, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_35", + "Offset": 24, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_36", + "Offset": 32, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_37", + "Offset": 40, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_38", + "Offset": 48, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_39", + "Offset": 56, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_40", + "Offset": 64, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_41", + "Offset": 72, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_42", + "Offset": 80, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_43", + "Offset": 88, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_44", + "Offset": 96, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_45", + "Offset": 104, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_46", + "Offset": 112, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_47", + "Offset": 120, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_48", + "Offset": 128, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_49", + "Offset": 136, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_50", + "Offset": 144, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_51", + "Offset": 152, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_52", + "Offset": 160, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_53", + "Offset": 168, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_54", + "Offset": 176, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_55", + "Offset": 184, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_56", + "Offset": 192, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_57", + "Offset": 200, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_58", + "Offset": 208, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_59", + "Offset": 216, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_60", + "Offset": 224, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_61", + "Offset": 232, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_62", + "Offset": 240, + "Length": 8, + "DataType": "Unsigned8" + }, + { + "Name": "Signals_63", + "Offset": 248, + "Length": 8, + "DataType": "Unsigned8" + } + ] + } + } + ] } ] } \ No newline at end of file diff --git a/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json b/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json index b5e1a7f98..bc61875f2 100644 --- a/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json +++ b/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json @@ -1,9 +1,9 @@ { - "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAcIgAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkdrN1dVTUhOcUhqeWhGellqTUlSNjFtYjdWVApjbnBoTXQ5MkhYVlBtZGdIaHRWTzVrM3pidEo0cGM4djI3TmZOMUdjYmh1MzBGa1NTK2U3NXRNekhHTEZobnkvCnhScFpFSlNmYmNaYTU1STRja3E0K21MK2svK1pUcnp4MVJMMFFnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgAUVvDTNyzNHsWldsP3igOn7q2e7BDQNJJH8iYJ+U9WYBACAADAAQVOrBPqJR4I9fJwPdmWkFZAEAAAE28YouqFixCu5c4I8APs1RNgj5RIWlQqVEEi5AUUYwUZMmM7jAAuhgr7Cbb6CfhzSJ1qsLray7MLIYNxfNCTQ5kSGr7gR0Ej3SIA9kjTGosgqQuZ1RVwDJSZheS6w2WtgBq7MGySwkkfC4DpIKa7FXxFtKEYrFExImn4mdEqVkXHRr9YzNZTfco6PaN/KsFvqpgIhbcz0uIgWb+XgHuv8+CFMkdAVjsNra9X1wJFcShrgLl7qgQ9/7pc4TmvbV0HQrp1XqBykhrElALTXg3hLFT3mi14fHTeVvv/QJhuaaaAC5ETDfqMlIsCJ4/mohqN0gooGoTEaTezuz+OmFQF9wprQoLEhksVoZcenN8C/TKaCq7iIhyhTipIbn7f9NWEQq5uvYevXd/JTjRv+9gT9CDNvW41vtsgIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFADBJh5RJxkp39vHUGqDzOirBTYY/7QGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVFa0tvejU0ak5xTDZSRys1ak5YOWZVOEp5eDh3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhORFUwTUROYUZ3MHpOakF6TURJeE5EVTBNRE5hTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ281dEdrSkRPYnVnYVlMYjk5ZEVNZmpHR0xVZk91MHU3a3FDbFZkUDBMYW0zMw0KaVVFUXlRRzJCSmVpSnVBWjBWWjBrdGFyeklMajJzbmtOemFOZSs2bDFmTkJMZVVDMWV4MjNYaDZGMWpiZmFEOC9icnh4OFNmZmR0Rg0KWXZwZ3FDOWlyM2NLNHBsQXdaL1JnV1hDV1Mxa3lpdUtGTTFFYXorMDhheTFqYmpSbTdjZUtxdVRONkN0Z3FSbGlnV3grcllJSlp1Zg0KbzdWSEZhbkRoRTRkdjBLdGw0ZG9sYThxMlcwRHp1UlpyalN6Y2tKdTRtUHVMV3hlaFc1dXFuTUJQamZBUHVZVXJUTm1IR2VsU2JTWQ0KMGNVSXRRT0ZwSkE5VktWNnJQWG9UMjlHc0puOW1SZTRlODJjd29UTWxrcXJpcTVmR0d0bityMTVwTS9BVjNqeGRlbFpBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZEd0k4SmxsY0lpQWNZT2dCVThuMC9QUA0KTXIzS01JRzRCZ05WSFNNRWdiQXdnYTJBRkR3SThKbGxjSWlBY1lPZ0JVOG4wL1BQTXIzS29YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRUw0KUXFqUG5pTTJvdnBFYjdtTTFmMTlUd25MSHpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWVPRVl4RldROGxhMmRTT0g5V1BKZWRCZQ0KdzVGUm5WNm1RVkhrSERLbUxpdHhUSDBUYVE1UU9qekRITWJiRktMRHU2cFNuRkJJdm1mS3V4WWlmOFBmZ0t5YURaWjN2Z2dtUDhkMA0KZVZTcytBSUdrS1lNdDlIaEU0MjBLNlVDRWswODRCcmROemlwUndRTXEwdVhId085WFdEaEVGM0Q5RDhkc2JWM0pMczlicUtycjB3WA0KcTdRWVplZG5DNWRDcElDSWFLOERIeTJiR3FRQXpyVFpIZEs1eXNoTE5CbDBQUXF6cTRGa2w3alg4Y2NTQTc1aGk2MW9OakNGa2d4dw0KR2NKeDdmODFyZHhTaE12NjBjWnExa3FxNjJkSGlUVWhUYnVKMmhQWDVBRmdIQjhjdVJMMVlNR1FKRHNpZVRWUlhBZ3RNRm1ZVVdQbg0KbFdMUjdiMS9LbmNoaWc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEceLBzvSI+ha8qfPJIGPNcs3GrFu3ZOT5gyIS95x66dnKnSQnGchRKfATfsi3mhdDY6TQgJ4CwVBuA11SL+4Wvd0oX/fdvKhupeg+VyNNKNjaiTBj+zpmLGnsOGmoTkZTNaYqWqsae7TTtM6/sfYo7AAgOJuxClqGwdBiwByi47FTLh0YBdChP0/OcyAed0sNac4HXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRajQzSDFINkNhdktPSXI0aQpJMUNaaGdJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFR3I5Nm5QaDdQeGZjeFlkCm1mdmhLTVVFZ2dUUVFPWkluSmZFZ3B3Ri82V1ZIUkVMTTl6Z2ZKNU5GdzJUcXdvK0FZM2JJZ2RkUXNBUE9oYkkKVytCYWNlMi9ISWFUZFJGYmtnNmJqc0VEbkI2RjRSWnhSbDZRUktRNkJuNkVzUi9penpvMEJFVmJiY1BxTVMzRQp0UkRZZDJsdFF4MWlrRE5EblIwNGNnanYxWmZwVTNLN3BrMFk2N2t6YWEwbVJZQk85UEZBWmFORlRZYU1Od0dSClhmeGFVNmVhSkVWZWF2T1RBcW9VYWhxTU5QdDlnRk03QXpBeFYvNFFEOTdLYndkNm0rZEJHeFlhNU9Lc3lqWG0KRUpmRFVLQlpDRk1tallVYWVCYnZaOTFnamdiYTZCZDJaYkJDaGMrRU83VS9zVjFEaXY4NzVMLzlLaU5FZUZVaQp4M1czc01BRG5ubFhRc3pMZEh5ZExSZjJwcUxyMEdBT2hiRUdQUURVVnNNanpIRjZSOFVFamx0NEpTMzBQL3djCnhlbEJYcUhEQkRtMzRDZ1AyVU9jeU13MWNObVBScm41aGNmVkJCS0srNjBNaTB5NktBVVhEL3dyTVZSb3Z2ajUKbG9XK0VLNitsdEJ5WmRiMjQ5V0JjbG9QZTM2SDVEUmVyMW9KMHlyTDQ1NFU3d1gxTE4vRTdYNVpPQzlHWktvOApBaHpJUHJTZnhwUGhaNDZ0ck9iUUdyWTN3VjNwOERUbGNkWC9aL01CTnRPd3hPdktDM1QwVjM3UHd1aURUQUh0CmVnNmVRbnBNaWlZUlY4d3FES0xnRnRZdGV4RVZKZkxUNVlBYXZQdjRhd3loTWkrYXZsTk10b2RDdC9nbkFtTXMKZHB1RFUvSjRkYktYYjRLK3MrMWFHdDVpTWFtVWEydXVOU2xEVlV6TW9WYW93alREa1dxOUt1SzlVeXFzTmpwVAp4NWx5UUNYRGlqSEowZUhpditPQW8vMzQreGNqMDJsM2hTaTBmMzZ3ak50emFHRERlRmc2MDlNdm5YVlR0RUFUCmpjSHIzenBna1R6aTJQY0tvNUVVVlRZd25rZlJYTGVmVElSL1F6a3dxaTlsUEJKa3dJYWxFTEdQMlYzYlRqZFUKdWk2ZHJTVFhXbWZqSVp2QUF1NXlHbnJaWlc3Qm1GSkZmVWZvZHpkQ3lpemFja0FERXZ0c05vK1RnYytSak11MwpWRlAxSzFiZUg5OXFoWS9RNU9TdlFOcDFVdEVxaitxckdOZysyWjlIZ3lsbXB3M0lFdVcvVWx2SjlveXVoNUlnCjUxbU1COUUwN2wwbGpZOUI5RGRMUW5sT05iOWwzb0ZnM054a0xTanEzSWdnVlg4UG9wN3ZRc2txRFU3VnpTY2MKeTFuRldpR3h6WWRGNVN3WmlhTFlkUXJrempSSkRCUDhqdFQ5eFF3VG9Tc0ViamFsTjJVellKanhLRm4ybDc1eApndTQvQXZUdUZJYlRSNVp1QXlSa0JBY1l1dDNwQ1RySjgrVWhyQnZMRUtMRHN4bUcybkgrS0d3M0RYdXRHaEw1CmFvU1dwTm11UG1jS1BiaEMxUHZheElYMkI5Z2p2WVRxYUtmUTFtTWhhK1NDT0JaN2N6MmI0Mkx0bGJad3l4TlQKSWpLNWN0Qm5pVTJnbEpKSXFFQ3Z0TUo0cGFPTmZwMi9rUzFudjdRMVhqamVRem0wb0d4eXdtZGJaUlRKMFlPOQpnVEE5TEpmczFTR2JIWFpUNmRTcjZDU3l6ZVUxU01RYUtUVjRzTmVpdE8zVVVWZTFFV1dJWElJNE9RY2pCaS9UCmllM0w1SHlLZFAvTlJGNVlLV0cxUUxOcTFibWNWQUxEQUlRRkdCYmpYQTd6V1NrcWU0VDBQMHFYc3ltS01iUVcKUHdVdWttOVBVRUpMVlJ3ZndxRHc0d0RLMFdlTlVxSXgycFoxcnk1cTgwMnVKL2JMSHJ4dXFoY0kvaGthRmpKcgorMkNJakNZZEN3YnBrNFBSaVZCc2IrZVZBVitRdEZoREg1dFdnU09TOG9LaEVQQkpkcTFnYWpqMUZZRUsyLzBECkRuUjk0RkFZN1pWVGhVdk9rOUZvalhFNkR1OUxxRloycWlUTHJSR0t6SzdTWFhtSmdDZjdYK0tkUDUxYlh4aUcKTFZMT1pzMDQycjFINTY2RDdZTkZiRkJLdzIrVm93bitHL3U2Z2IxYzh5QTQxOG5MZkpGeW9Eaz0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6CWxvY2FsaG9zdAIAAAAAAAAAAQAAAAIAAAAAAAAAFADBJh5RJxkp39vHUGqDzOirBTYY/7QGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVFa0tvejU0ak5xTDZSRys1ak5YOWZVOEp5eDh3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhORFUwTUROYUZ3MHpOakF6TURJeE5EVTBNRE5hTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ281dEdrSkRPYnVnYVlMYjk5ZEVNZmpHR0xVZk91MHU3a3FDbFZkUDBMYW0zMw0KaVVFUXlRRzJCSmVpSnVBWjBWWjBrdGFyeklMajJzbmtOemFOZSs2bDFmTkJMZVVDMWV4MjNYaDZGMWpiZmFEOC9icnh4OFNmZmR0Rg0KWXZwZ3FDOWlyM2NLNHBsQXdaL1JnV1hDV1Mxa3lpdUtGTTFFYXorMDhheTFqYmpSbTdjZUtxdVRONkN0Z3FSbGlnV3grcllJSlp1Zg0KbzdWSEZhbkRoRTRkdjBLdGw0ZG9sYThxMlcwRHp1UlpyalN6Y2tKdTRtUHVMV3hlaFc1dXFuTUJQamZBUHVZVXJUTm1IR2VsU2JTWQ0KMGNVSXRRT0ZwSkE5VktWNnJQWG9UMjlHc0puOW1SZTRlODJjd29UTWxrcXJpcTVmR0d0bityMTVwTS9BVjNqeGRlbFpBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZEd0k4SmxsY0lpQWNZT2dCVThuMC9QUA0KTXIzS01JRzRCZ05WSFNNRWdiQXdnYTJBRkR3SThKbGxjSWlBY1lPZ0JVOG4wL1BQTXIzS29YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRUw0KUXFqUG5pTTJvdnBFYjdtTTFmMTlUd25MSHpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWVPRVl4RldROGxhMmRTT0g5V1BKZWRCZQ0KdzVGUm5WNm1RVkhrSERLbUxpdHhUSDBUYVE1UU9qekRITWJiRktMRHU2cFNuRkJJdm1mS3V4WWlmOFBmZ0t5YURaWjN2Z2dtUDhkMA0KZVZTcytBSUdrS1lNdDlIaEU0MjBLNlVDRWswODRCcmROemlwUndRTXEwdVhId085WFdEaEVGM0Q5RDhkc2JWM0pMczlicUtycjB3WA0KcTdRWVplZG5DNWRDcElDSWFLOERIeTJiR3FRQXpyVFpIZEs1eXNoTE5CbDBQUXF6cTRGa2w3alg4Y2NTQTc1aGk2MW9OakNGa2d4dw0KR2NKeDdmODFyZHhTaE12NjBjWnExa3FxNjJkSGlUVWhUYnVKMmhQWDVBRmdIQjhjdVJMMVlNR1FKRHNpZVRWUlhBZ3RNRm1ZVVdQbg0KbFdMUjdiMS9LbmNoaWc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAERQ5JkOM2JxvwcoXo0EWWRnh4H7jdcmPSQPwYUlLXg3yQVUUMYJbf9wZcdfVDkInzhMAJ/Zpdlkuzc7B/3G4d+dSfmwV5P1jbUJduDLlzET1Bq/YOBJHerJuo38nYu+FHm1bVQVboPrwaAwgH2/v1WgAgo2mdzo6kv5Af7FSmYleJT0IQLqexDi31SPQ3zweh2u8HXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRcGl4Z3dtVk5KVFhaVFlCbgpPUHZNeHdJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFTCtDbERkYk82Zi9NSFk0CmpXT1k3anNFZ2dUUU83Y1FsSmNCY1dMZjhsQTB3am84L1B0OEpNYVBoaXdIY2FVeUhBWDhFVzdYeFlRQ0lSWXgKQmt1amRsMHRYalpNTXl1Qy8rbEpka1JsQ0hLb0JjcWFLYjJ3MVJuTHZGOHFNQWVva1V6aUErYlhIeDRJbTJyNwppcUxJYVcwd1B0QVY4QnVUc0hucHJ4QlFYNUgvWlc2NGFMckYyZmV4U2w3ZnNPd1ZzRUwxOFBYUUhXZmhEbkJYClZ0UDZsRENkQTFRNUFQRU92RTN2TUIrTmZkbEZ5WWd0UkVjdVBoNXVCNzIwNHVtdVEraHA4SWw2RldDaFJib08KNkdlcjZEdGdxWVN4VUk3Qm5keURMR0NDdGNHMWlMWWtnZ0pEM1F5S0IrQWo3VVZueTNmbURtUUhJRXlUcmNBRwpQbmlPTEJNSnpZUVBmQW1qNjdIWlBXSlFDcFBGZVZwZXl6Tk5PYUV0YXBtKzRlTXk2aUlLeHdZc1NHSm93N1lDCi9VSXl3WkhoV25NU2lTTE51QzBqMnB1b1QwT3QzTDRvNHo2dVdMWFNsU0pNTEJzRkw4ODNBa1BFeVkxVG55TFMKN3NKV0dsQTFFbzVCWkhGMlhJU0RZWExwdVBpSHdhSjRmdXdIQVZTNm80WE5FSXFab0t3dzNGRW43ZkxjSm9wSQpzN2JWTVliMFVDdFFJemdGb2hyT2NEcEtjSVFkOUlNWTVncVkwTXZKZUpia1QyQTVBU3BMN3dVbzUvY25EOWZQCmY2ejMxQUJHUi9nbjdQRWFkcXJiNFg5R245SDZ6bUUyZW1wNG5BY3dqNkRGSXF4R2wxaUJzTzdEM2NuUjhBL2cKQk5QVy9PS25LTm5Sdm1GeVJLVEp1bm9RSzlKUmxzNGpWbVpzZHh0Tmd6b2lQU2R4N1pqK1NJQ3Fiei9qYlZsegoxRjg0U3JweTAwNElMWVBaT2Rrd0RoNE9iOTFESlk4NWFiOEJXRUxaZnR4TjhhbHpzb3JQMmJOM2NJS1dzRUp4ClB3STF5R04rRlRPSmdDUXF2U29XanFLbWZOZFZrSWxlVFVwTGg5S3lLRG9qUlZYSTlNV01BcEhQbmJDcllobkkKbkVmUGNrNXpqNEU4cDFxcGxXWndtVUlUbURnTVFvdEd6cnFwbXZjQ2ZEdDRUL0xkaFN3Mm5RLzY5eHhvbUMrMgpKcTZ6bFpiWHY0THRzakMvMkZUSGFNbHZEMzlBOUZuRGJBMmtwVjFKWi9hMXI4Vi9UQ09HK0paMm9hc1dEd0Q0CkZPQzdWV0FuTWs4MWVzNnNoZzBYbEl4TzJVYzR5cWUvVCs1VEhFZ2NQNjluTU9VZ1NkeTE3Y3E2VG51c3B3aVQKR3VWQ3JmTzNZcmFZTHgxZEYwTHNjMG9QcXVXQTNuS1EwdER0U3pvTDJCUUJGUzA2OTZCemkyQWJmVVZSdmJGagpIWWhCNnhaN3NhbmNNYVQ0QyszZ2JHV3FJT3B4THJGeTVybkh6a25ERzhVTnhwR2dPdlVLMlhoSlZEMTRkVkw4CmFBaVZlVjlRZkNtekVtM0ZvZFZYRklnOXZkOU1vSzBmdXZlcCt0V1hsWXM2UGJtTXA1SU9RZXNxWml0aVhaR2UKZFVyRFZQdytJOWJybHpqS0JQTWdZdklQSjB4YUlnTlVwcitGYlZWVmVQaWpUZGNLR1BuRGFOWU1zcDh6MGF6Twp2R2IvMDB4Nk9HUndXeTBsaUgyUnpTUFNyWkR6cGJXeU5ONlZzS3JxMlh6bFgxMU4zdW1XNGVXU29RRVlVYkNGCkl5YmpSNktkS01uRGF1L1JVdkF5bVRUQW81Zk1sTE9FbUIrLzBpcDFwZ2cvVmc4QURUWTEwajZaUFhsODFqZTIKTmVMT0ZVVWk5OVJROVQrV1p6bG82SW1jVXhCNVRYcEltZXQ1eFdrc1Y1VVpvR3kwd1NGNlpvNHl6eWlNcWZpQwpkaTVJdzRYVEMwa1YzdGkyUGZ6Y1ZNYlNhaXlYMzJTZ2w4ZkVXbmpoQXJ6RllSM0l0V1NXZ1l4dFkvK1pIVkNMCkpyVlVPOU9TVEdRbG9BTUh6bFRpekRZRE82emprcGZPT01jZmQ0QnZ5NnIxMkl0c3YwbGhMbTlTUFJ2b01uMXkKazZ5T3ZkZysxaXNRYkdvc0d0V2tXaUF3aEZpZ3J5MnNLUlNlYUh3TnBIc1FZTUEzL1M5Vm9GST0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6", - "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACDsoOhTM/GE6tEYSl4R8PpEX8SGp2bifXMVZ5K23BSc+wAAAEDOqMe4yJiOhEwkfbPmtS3Hc2V/LlOJddsqloZPs9TSjzheMNx7fCIJwSim03cRj6A/Nq/bXys2JdVG7xiQkCT+AA==", + "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAcIgAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkhaVW12WFNhWklsQy9HVW1jbllxVnZtMWlyMwpYOWZpaDc2Z2NHcVNBdEd6aVB0ZkdxR3hJTTVtMGd4OWlPcXpYWU8vOXNhRlBVbHl3ZVdEK2N2ZXRCSE1JOHBUClZLdkloTTIxT1BXb2wyUE9hUFZPNFo0Yk5aOUtKNE8yU3pBUW13PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgsr4e4WrUJWwh/VmmLmxKTTbtFvwOlDu3sYu214Lop2QBACAADAAQ1u/r4wJWIpiQwpGu3Ugf3wEAAAE2ECWmUCUMbskiyToX9Dx/xXBtT/RgSubXfwl1jv+5xyDbxRHtpK5pI/0AfCsebGtKBFh3qg4XQe1bal9KDOezIC8drip1PXVIXHKBFKIH3a1N/MP7QJrYEyTIN7i3CtX2s0UWD0nKfD5ODyzjk++N48MS6XJ1ykkoB31RzO+fX7w+HPIcKnvr/wmgB0JIj46aN+zkfVMXRpr/Dmm0yF4Wblxtv6TDNHLnCurrZn4lwiwPSu+Zn83E23JW6kr3c92iCelUXl14gPywADHen5e/aDIjA0pUWU29kBw0xOWk22uoFcybwoCSG3jbBfpAyiaOwEOhF2BqN8aRYiXvBotYhjiMicVx11ebnDRNzVPHiv2TlRFszgI+/urrYWoKfbt0JyX+Lc0euKdR7TENp2uk+m/BaWyWSAIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFAAVoh9Rpj8fR3ySsAx92zO96xtBObQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVhMzJKdndFWG9Pc3gvVUxjZXZaS1V5bUJCMzB3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhPVEV4TURKYUZ3MHpOakF6TURJeE9URXhNREphTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFFidWVXOFplZ3QvQjBMbGQvREFhSnhIUnF6clA0VDhZelRkRmRYM3dRblMrYQ0KMytZa3QzckNMcVNhL0FPWW5zTDZHNW5TVTFmSUhuMU5GSEtCbjd3ZDdYaTVIWjdIc0NZRHJrQkpjcmthNGoxU0ZGazlxSDFmbjNFYw0KY3NnbDRlR2FBT284WmxkL3lvcytkcDN3VWdkNkxDMkk1S054YURWcVRTQlRkWnRSOHpqd1dpTEdrSzhDZ0lIWU14b3ZVK0tGNmgydw0KSjd4T1VKaTd2S1dDMzBXU0VndkVtRitGaGhZaHN2d2FYZVowTjMvcG9JNlIwbkNVbTRZbWRLNFZ2SGxLaTVHWUk3U2hMOXVQUnl4cg0KTXVSRlFxY2J0ZlhlSEMyeFBPcGpQUGVhSGRXZXcvMnpOVys4VjRtSytoUFpBV25BTTJGUXJ4cUNuL1RKUFV1NEl6aEZBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZQQmJsYWRDam1GZk0zNHpnU0RnZTNhaA0KdTVaVk1JRzRCZ05WSFNNRWdiQXdnYTJBRlBCYmxhZENqbUZmTTM0emdTRGdlM2FodTVaVm9YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hScg0KZlltL0FSZWc2ekg5UXR4NjlrcFRLWUVIZlRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQW90OUxNeXJJZEVSNVBGaGVlSk9qMFIveA0KdGJzaG5UVGVoZVRKYTRtbWtVTCtxUHJLZ09tZWhKTXpMekZCNkVZb2k5a0MweWpFaThDL0NoRGIrUEd5QmYwdHF0ZnlOblZ3Qm9wNg0KcjNJeVhGVnN3NlVlRW9NbDVzMUZlWmdTZVQ2cTZNeC9kRTFiN092RXFRU0t3a1dXNWRUdTl2QnJZOUZiR0h5OWFzcVM4eHg3bDNEVA0KYXhMTXBsY0p5Vkc0Tnd2clFySEtaWDJuQUQyWmplcjJ6RjBwMjVrbmJxZDZVYWczN3k4N21FQnd6V3daWklIQmFockk2SS8xQ0JsSQ0KUXpRcDVMWHFBNGczMStMdmplcEJFeGYyUUQ3SG8yTEY2SnBDYTVPSU4yWE02K2lwYmMvRVBYZ3VVcVFUS2doQ3FtM2FGOWovaDU5Ng0KU3NMQVlIditqZm8wZ1E9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEVGqwrWAu3Cz+5qnNtFvh2PgYm7IoZVjSYutebP+GV0xa0dv62sqxOKoX6ps2oXZxJY2udq11sqZFgevdVnfnir1L7smsncrSTLyZQEp9mAhpSxpdgToA/uW42A5vcPBmbJuqsIJNPc+LFjZbt1/jzgAgto1q3px3F++szxa5uqCerCpyynhZQvDDIbetjGhDM6kHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRVjUvSVNDWDUvOEtrNEZTUwpRVlQ3U2dJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFRXY5dkdXWkE5MGRpQW1WCmVlRTUwbFVFZ2dUUStIRmtiRm9wTGg3bk5uYnJhUG5uOXdOTXliNFB6WE81dXA1eXZGclNXYUlhRUpKNXZNQWcKSWRuZGwvaVNQek5WRmNlbiszQSt5NXZTbHVvY1Nxa3BpcERmWHhOazhYWmRWNGtKMmNEVXBDYVJaUmdobFBaeQpuK24zaE5rNitTdGxRQ1dpSTM4clZZMGJRVGhzVHFNZTNneUdxZFpYR21qblNyeUFMbzN3dDB5c04xTStMTCs0CjVMTFVJUy9Pa1FhSTNNTGFSRE45a2J2SzJuOXNIUjVINytjQzJ1TytjNDV4ZFEvU1NYNW40YUROaHVqNDd6SUYKNjJHemtWcHpxRlAzRGR0MmVTZE5pWnJPayt3VGtsY0xKZ0s5UDRlTUlkRXZBTUMrZ2RWNmlzYVo1ZFAyZ25mKwpqLzE3MUlBaFJnNTgvc0R6WDZyalU2WmRCUzhWNUxxa01FTjE2MXRNaE03cUNTU1l2RWhWQWRKTHpFRytvMTVxCkNncm1HeU9ORVYvREliU281bTYwdUNlZVJWMXcrbmtjZUc1Y05CTkR1NXpPZ0Viay9ISmNQdGhtUSsrQUJkeGYKOG5Hdm5mdEhHdXI3ZG1GZ3JuSnZ4UVR1THZzZlNmeWo2emNJYnYzQmZOclZTZTR2cnFNa0VqQ1N2VjlQRkVKVQphdE1mS09rVFpnT1pKNVBwWXp6N2FLeHBhdk0rMmVQR1NtTkllZWpEUU1obitLV3FlV3F2S3FuZ1M2cnBwR0p5CnloSW5DTWZCSWVxVUVSNjRuT0Y1dGJJWDBSbkE0MkNsZ2dQeERhRUJjNmxIemp4Umw3Q3l6TVVlMkhkL1BHbUgKNHROa0JkRUd3UHE5cERTMjVKV2hvZm9SSmdya2NIeG14VG5Na0t1bmZCSG5oTXJiWFJuRllDZ2oxOWlsYWFhMApQYTR1K2c4aERMaXdPQUtQbjBsb0pUY1RRekorbFEwQm1ucmY0a01jOEd6cEZJMmpYSm9MRTg0VFk3c0psNjdyCnI3WkFTOGYwYWQ4bkUxcnhoTzg0bkFKZXgyeU1hQ2xEQ1dsRFJwVk4wUnNwdE90dHUzM0hFZ1NnV2p2TUttOXoKS1Bia255TWNXZXZPRExVM1VTaXpnbDExb1FOSGxEY0NadlZ3TzFwUTMvTkxXeXJJZWg1ZHBlb1N0bFZrZXFvZgpSVkNOaDdsSVl3bVR3ZmRrdTMyWGhjOFowYW14UWN2cUU1Mmp4MDRUK2NUQnprVW9iQ1Z5cEpHTmQzUWNSWHpVClFmbXMraTR2VzBKZlArQXIrLzhQczBYbWJBQk9VY0Eza0ZmZ2t2ZHJKT1RnaW5qRjllZGhrYU1kVGh4L0N3SWMKVHpsaUZrSlc3aDNIV1BUQm1jZFErS3FaZkxHM245azBZandHSEROclVjUEJ4RVBEdEtqay92OGhtRmxpMlZaOAowaERHS0JoMU5hRURSTGY1c3NLbWVRd0hBVkdXaUIrM3V3dFU4UlBOMHBoRzl2a1pRUm8xVSt6TFRIZm9GbVdTCjlyUTlldU1CaGNCSnVrZkExaC9HUFhDR0Rna0pBVEFlbWMxVFFGY2ZmanVqL2tidkw4QUlVcXJER1FSUERTQ2wKQnlxSkJndEtMWHhnakFKQ1VMbGlRbW9sTGtTeDloSGxRWmJ4a1g1WWczUGJzYTlNU3ppNVI4UVR1RFQvMFV3NApxN1UrZlBhQWFLWW5YdEJseHA5ZEJFenVOcFM2SVRFSTVpdXR0RHYrM1VjT0ZtdDg5d3I5cVI3Y0lXNmNqSzc3ClRLc0FBZGJQc3RTR1JhM0F4ZWpoa09QKzJZOVZrOHRLT01WWWswbFVlRFRjODRoZFcwSmZJWDIrbDRxNDRENXQKRThlVFpJUHBkWTFLS1Rick9EUWxtamRick03K09NNy9UaWhnRmFSWWdNNU50L0l5VXZmRjV2VXMrVGRiZE1qcwo4eEliS3FFL0U2SjZxbXl1eXA2Q3lWd0FETmsvUW9Za3cyWUxwNHZ0SHpJSTIxaWdicFowd01YdFBscXFNYVFECm9mREtwSmd2YzVkdUJ5bE9mZ2R1eklkdkNzbHU1amlQWS9uUzhFR0gvZWRrYVJMZ3R4MFREOVpHT1FKNjdpckoKOVhTTXk0SGgyaklHN242K09RbEVLMFhxUG5sVzVjWVZ1TWRwSmpRaEQreE9nREFuQ1NGalFDOD0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6CWxvY2FsaG9zdAIAAAAAAAAAAQAAAAIAAAAAAAAAFAAVoh9Rpj8fR3ySsAx92zO96xtBObQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVhMzJKdndFWG9Pc3gvVUxjZXZaS1V5bUJCMzB3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhPVEV4TURKYUZ3MHpOakF6TURJeE9URXhNREphTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFFidWVXOFplZ3QvQjBMbGQvREFhSnhIUnF6clA0VDhZelRkRmRYM3dRblMrYQ0KMytZa3QzckNMcVNhL0FPWW5zTDZHNW5TVTFmSUhuMU5GSEtCbjd3ZDdYaTVIWjdIc0NZRHJrQkpjcmthNGoxU0ZGazlxSDFmbjNFYw0KY3NnbDRlR2FBT284WmxkL3lvcytkcDN3VWdkNkxDMkk1S054YURWcVRTQlRkWnRSOHpqd1dpTEdrSzhDZ0lIWU14b3ZVK0tGNmgydw0KSjd4T1VKaTd2S1dDMzBXU0VndkVtRitGaGhZaHN2d2FYZVowTjMvcG9JNlIwbkNVbTRZbWRLNFZ2SGxLaTVHWUk3U2hMOXVQUnl4cg0KTXVSRlFxY2J0ZlhlSEMyeFBPcGpQUGVhSGRXZXcvMnpOVys4VjRtSytoUFpBV25BTTJGUXJ4cUNuL1RKUFV1NEl6aEZBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZQQmJsYWRDam1GZk0zNHpnU0RnZTNhaA0KdTVaVk1JRzRCZ05WSFNNRWdiQXdnYTJBRlBCYmxhZENqbUZmTTM0emdTRGdlM2FodTVaVm9YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hScg0KZlltL0FSZWc2ekg5UXR4NjlrcFRLWUVIZlRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQW90OUxNeXJJZEVSNVBGaGVlSk9qMFIveA0KdGJzaG5UVGVoZVRKYTRtbWtVTCtxUHJLZ09tZWhKTXpMekZCNkVZb2k5a0MweWpFaThDL0NoRGIrUEd5QmYwdHF0ZnlOblZ3Qm9wNg0KcjNJeVhGVnN3NlVlRW9NbDVzMUZlWmdTZVQ2cTZNeC9kRTFiN092RXFRU0t3a1dXNWRUdTl2QnJZOUZiR0h5OWFzcVM4eHg3bDNEVA0KYXhMTXBsY0p5Vkc0Tnd2clFySEtaWDJuQUQyWmplcjJ6RjBwMjVrbmJxZDZVYWczN3k4N21FQnd6V3daWklIQmFockk2SS8xQ0JsSQ0KUXpRcDVMWHFBNGczMStMdmplcEJFeGYyUUQ3SG8yTEY2SnBDYTVPSU4yWE02K2lwYmMvRVBYZ3VVcVFUS2doQ3FtM2FGOWovaDU5Ng0KU3NMQVlIditqZm8wZ1E9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEc//7TD5F8Gv8aDsAP5gQrOwGrzSFqvW1A4mLT/FKlYty4e+NTLK1576K8BWJ+cWdE1vBLQdLLG7IT/wwTkr13HQpA1TlxxF4rRxPgPQCxxmuQv2jL3KDqq/f/P4gc6eGQZiMfH7NU0+bzhgB3eXCdQAg7YBJR02zGpnY0GHlJo/C1AboP0y5OiJls9u9NdgDxSsHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRdHpMWTBlb3p3TmVNM0FBKwpnTDVoZFFJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFS2tlQVdpZTE4QlV6Q2lKCkduRGNDeElFZ2dUUXdSQ0lYSUhzZkpIdnl3YmdEeTlvdUROOGk4Mis5ZUtKNTl6andFS1RTdVZKdXA3RnVaY1gKSkhXcUM2bkgzaCs1SnJyYmpRcnV6Um1VLysxbE9yRXJaY1BBSHBpRjlNQWZUcUhoUSs3NDZuSnJ2a1Z6RGcwTQo3WXhZTVhNYnlqdmE4bTVncndXWi9KOE5Zb20xK3ZXaFFqN0lLY1RZaW1vNDAyMGVpbFNBaWhaMEdJOFZhKzVnCnIrVGozSVdiQWNpYVFOaFQ3YWNwcDF4SW9kckdRUjZNaVErbHRjYVRLUExIQ0VOWklDM21PMXJscW91NmFtK2YKc0E0SUN2b2I3OVFlK0N5a2JlZ1BYUEFCRVRDQVZoVjlLTUhrUnByNWI1dXd4OFIrSGJXTTNCQTRtcU00cXE5QwpkYWhZd0RkbXNEYmZVNXphZ082enVVVGZ1SG1DM3pnWlA0L05BcDFDaVRHSStuZHFTa2dmd0EvRjhiNllQUWdpCkY1TFhTcHR4aUtQVE1YNlBJSERacWFTSW9ZWmJ3NkJjZTlJTzFjamJ6M2pieDFuUm9jTEVsczVqRytpREVWQ28KUFVraWtkQ1lLRDZTQThJdEpxOEpSNTdxVzRrNmJ0Y0dIcEF3ZnZlSmpPZXJyYkRlMWs4NklxNmtxWU44T24vNgo1RkFtMWx6VTBleFNtTkRMQWt6c01MWHVSUFQrOC9MVGtHaVl1SjQvVXNuaHFMMjRkTWZoL3pkZlNHblRCa2RPCkc2ODRtdFgzOGp3RkRGTkVIMit0ejVRclBWaitXWmVPV2FRWFlJaWwvYlNlRE9NZlJtRGxlVElJbUl6UHRmRjMKWkw0ZWZTVlZveFBrV29DWVZaU2pqRDZNdEZ3b2diYmtvY2RjcWRMR09QQUNjWFk4SmpWSytjWUFzK295V2lxZwo2TGVjZHdRVFFEREcvRGZVdFk3TUp0bmFNM0xZL0haMU04NTlNUVZ0WU9jOTg4aTZQa09YckprSG54dW9xMmh4CkZOOWE5N3hMZTVGdTE4OEtINkhpVUNxc1ArSkYyMzJsNEwvME1GSTgzS0NrTUdVVTJqQ1hQdEsyeU5xRmg5SEcKb2srMzhyeC9wTmErUHhlTE11THcxVGovUFlyMFZXS0ltV1VjdFhJRHpoZFNZY0xNMFNlcjM0OVBGaEJzSnRrYQpETXZOQUxUUTVxTUkwQ3hOOFRaUkJGdzl4TTdKam1VTSt5QjFkWitsaG53a3lLZExKUFdkVXo3aG9FSmlzajNSCkVSV0M0amEycURCOWhCcGhaQlJMa2xMUE1oK29YWjVlWWlPR241U1hyOVdidXpxY0t6TWliOFRUMDdsNmNTR3cKb3g2M3YyUHdReUF4cWVmWjY2OUhPM01Oa0xObmNHVXZibnJ1YTZnb2RkSkNUSkw5RzJNV3JITTF6SFU4ejRyKwpSaFBCUUp0Z3ZHdEtaaG1QQnU0K3NJTGZXckhNdXVFbXFla2FDOHRtQThnajJHcEJPS1pGdElOZkxDbENlNHlJCjYvejBsR1pMRVc3SmZYNjRuc3pQTHF1bmZzamhucFJQNGdHcDlkd1A4TEYyMWJpalVoWm9RSjVmWndKK3FwY0gKVUgrWEdvSXhTS1ZtOVJVUDVsYjZvS2tNUnowbm5vY3lRa294NHpBUElJSVg2dWlmcDNNK0dkRjhlUVdKditTZwpLZ01vanp5STZ3bUJlNUpqNGFod3lrMDZnTGJyMVpLcTFteDRLek9LS09WNDZUWXRTWTZ2Y0xiSk11dHpLcE85ClNVdTRBMVREM3VkTzE3U1UwNTlqUmtGMkErdDlITnZ5Rm5ESlRKMUluYStQNE1ZdWJiQi9ZY2xINmlvNUNQaysKaFRCYXBCUlQ0S0xFeGo3NXBSUTBoZS93VzFkMEsrT0pwMlhLZlNURXRLY04raVl4bCtoZFBzMmVaS3RYMllpSwpjQ1BhUEhheXB2WkdBM2ZyZEpvSHlaU3JHODVZRytrM2RJTGFtNzJEbjVZT0t6cVVyS2dFYmNWRHY1SFBvR1dJCk9XNmhUTDd6L3RXNEsybGNzT3lwdFM2Rm1ZcjljSUNFYjVLNVlqdVhSRHR6bWxLV3NJc1loODc0UWhwK05teUsKNGVzNVlYTjR6dDRWVktiZWZKMGp5akpCK1RlR1pSNG5LWnNqMHY3MldYZnZvbW40SUkyVE5tbz0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6", + "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACCq2yAxLrhnRNk4GNC9obm/pkJ+wc1jGbTTXmfOwAloCAAAAEBkQprnPIMH6KSezFqHtiIb0vYtg++HYg8J567fkiyXu2wvq4MQcEfp2MInsS9Kvua+2IS4Y75KHPdGty2TS6XrAA==", "CertificateAssignments": { "TLS": 1, "WebServer": 2 }, - "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAdgF0hDLdqlGu/SU7Hxolv1FFgU0MrRjX6f0xy6/kwBRQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAP9yjxum+olrnQ4i7S3TA7oMN4bRYtb1TR8Ew/LONKxlQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAdgF0hDLdqlGu/SU7Hxolv1FFgU0MrRjX6f0xy6/kwBRQAAAAAAEBAAAAAgDQBwAAIAB+x2Fy94xHJ9skOkctJyOQblHn9LWKqC3lkL7kOl1bNyAAdgF0hDLdqlGu/SU7Hxolv1FFgU0MrRjX6f0xy6/kwBQgAAAAfsdhcveMRyfbJDpHLScjkG5R5/S1iqgt5ZC+5DpdWzc=" + "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAAbYePTpaDoIXxMSH2GHMSOEFw06fZfB0ewRaYolws3+5QAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAA3vUWDbIyoqsNSfR5fth4dLIE5eSLg6sH+x5hy8eJ4kFQAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAAbYePTpaDoIXxMSH2GHMSOEFw06fZfB0ewRaYolws3+5QAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAAbYePTpaDoIXxMSH2GHMSOEFw06fZfB0ewRaYolws3+4gAAAAH1VIMul95OEjajs61Hv8JmSlWztf78s8Qtm/zTa5DoA=" } \ No newline at end of file diff --git a/src/io/app/hwc/plc_line.hwl.yml b/src/io/app/hwc/plc_line.hwl.yml index d850dd7ae..29129c76e 100644 --- a/src/io/app/hwc/plc_line.hwl.yml +++ b/src/io/app/hwc/plc_line.hwl.yml @@ -16,12 +16,12 @@ Devices: IP_ADDRESS_X1: 192.168.100.122/24 PROFINET_DEVICE_NAME_X1: bni00l3 X01: balluff_bni00l3_bni00ay - X02: balluff_bni00l3_bni0099 + X02: balluff_bni00l3_bni0099_bni0099 IoSystems: - Name: profinet_plc_line ControllerInterfaces: - Ref: plc_line/plc_line/PROFINET_interface_1 DeviceInterfaces: - # - Ref: et200sp/et200sp/PN-IO + - Ref: et200sp/et200sp/PN-IO - Ref: bni00l3/bni00l3/PN-IO # - Ref: et200sp_1/et200sp_1/PN-IO diff --git a/src/io/app/hwc/project_devices/et200sp_1.hwl.yml b/src/io/app/hwc/project_devices/et200sp_1.hwl.yml index b76a9dac7..1aa941423 100644 --- a/src/io/app/hwc/project_devices/et200sp_1.hwl.yml +++ b/src/io/app/hwc/project_devices/et200sp_1.hwl.yml @@ -1,61 +1,61 @@ -Devices: -- Name: et200sp_1 - Modules: - - Apply: '6ES7155-6AU02-0BN0_v6_3' - Arguments: - NAME: et200sp_1 - IP_ADDRESS_X1: '192.168.100.160/24' - PROFINET_DEVICE_NAME_X1: et200sp_1 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A10 - TERMINAL: 'Enable new potential group (light BaseUnit)' # Possible values: 'Use potential group of the left module (dark BaseUnit)' - # 'Enable new potential group (light BaseUnit)' - # Default value: 'Use potential group of the left module (dark BaseUnit)' - # So this parameter need to be specified only in the case of 'Enable new potential group (light BaseUnit)' is used - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A11 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A12 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A13 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A14 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A15 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A16 - - Apply: '6ES7131-6BH01-0BA0_v0_0' - Arguments: - NAME: A17 - - Apply: '6ES7132-6BH01-0BA0_v0_0' - Arguments: - NAME: A20 - TERMINAL: 'Enable new potential group (light BaseUnit)' # Possible values: 'Use potential group of the left module (dark BaseUnit)' - # 'Enable new potential group (light BaseUnit)' - # Default value: 'Use potential group of the left module (dark BaseUnit)' - # So this parameter need to be specified only in the case of 'Enable new potential group (light BaseUnit)' is used - - Apply: '6ES7132-6BH01-0BA0_v0_0' - Arguments: - NAME: A21 - - Apply: '6ES7132-6BH01-0BA0_v0_0' - Arguments: - NAME: A22 - - Apply: '6ES7132-6BH01-0BA0_v0_0' - Arguments: - NAME: A23 - - Apply: '6ES7134-6HD01-0BA1_v2_0' - Arguments: - NAME: A30 - - Apply: '6ES7135-6HD00-0BA1_v1_0' - Arguments: - NAME: A40 - - Apply: '6ES7193-6PA00-0AA0_v1_1' - Arguments: - NAME: A100 \ No newline at end of file +# Devices: +# - Name: et200sp_1 +# Modules: +# - Apply: '6ES7155-6AU02-0BN0_v6_3' +# Arguments: +# NAME: et200sp_1 +# IP_ADDRESS_X1: '192.168.100.160/24' +# PROFINET_DEVICE_NAME_X1: et200sp_1 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A10 +# TERMINAL: 'Enable new potential group (light BaseUnit)' # Possible values: 'Use potential group of the left module (dark BaseUnit)' +# # 'Enable new potential group (light BaseUnit)' +# # Default value: 'Use potential group of the left module (dark BaseUnit)' +# # So this parameter need to be specified only in the case of 'Enable new potential group (light BaseUnit)' is used +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A11 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A12 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A13 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A14 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A15 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A16 +# - Apply: '6ES7131-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A17 +# - Apply: '6ES7132-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A20 +# TERMINAL: 'Enable new potential group (light BaseUnit)' # Possible values: 'Use potential group of the left module (dark BaseUnit)' +# # 'Enable new potential group (light BaseUnit)' +# # Default value: 'Use potential group of the left module (dark BaseUnit)' +# # So this parameter need to be specified only in the case of 'Enable new potential group (light BaseUnit)' is used +# - Apply: '6ES7132-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A21 +# - Apply: '6ES7132-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A22 +# - Apply: '6ES7132-6BH01-0BA0_v0_0' +# Arguments: +# NAME: A23 +# - Apply: '6ES7134-6HD01-0BA1_v2_0' +# Arguments: +# NAME: A30 +# - Apply: '6ES7135-6HD00-0BA1_v1_0' +# Arguments: +# NAME: A40 +# - Apply: '6ES7193-6PA00-0AA0_v1_1' +# Arguments: +# NAME: A100 \ No newline at end of file diff --git a/src/io/app/src/IO/HwIdentifierList.st b/src/io/app/src/IO/HwIdentifierList.st index 342d19964..e0cdaa69d 100644 --- a/src/io/app/src/IO/HwIdentifierList.st +++ b/src/io/app/src/IO/HwIdentifierList.st @@ -1,5 +1,5 @@ NAMESPACE AXOpen.Io - TYPE HwIdentifierList : ARRAY[0..30] OF UINT := + TYPE HwIdentifierList : ARRAY[0..41] OF UINT := [ UINT#32, UINT#48, @@ -31,6 +31,17 @@ NAMESPACE AXOpen.Io UINT#271, UINT#272, UINT#273, + UINT#274, + UINT#275, + UINT#276, + UINT#277, + UINT#278, + UINT#279, + UINT#280, + UINT#281, + UINT#282, + UINT#283, + UINT#284, UINT#285 ]; END_TYPE diff --git a/src/io/app/src/IO/HwIdentifiers.st b/src/io/app/src/IO/HwIdentifiers.st index f1275ed0b..695aa7f86 100644 --- a/src/io/app/src/IO/HwIdentifiers.st +++ b/src/io/app/src/IO/HwIdentifiers.st @@ -23,15 +23,26 @@ NAMESPACE AXOpen.Io bni00l3_bni00l3_HwID := UINT#262, bni00l3_BALLUFF_Link_module_HwID := UINT#263, bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_HwID := UINT#264, - bni00l3_X01_HwID := UINT#265, - bni00l3_X02_HwID := UINT#266, - bni00l3_X03_HwID := UINT#267, - bni00l3_X04_HwID := UINT#268, - bni00l3_X05_HwID := UINT#269, - bni00l3_X06_HwID := UINT#270, - bni00l3_X07_HwID := UINT#271, - bni00l3_X08_HwID := UINT#272, + bni00l3_X03_HwID := UINT#265, + bni00l3_X04_HwID := UINT#266, + bni00l3_X05_HwID := UINT#267, + bni00l3_X06_HwID := UINT#268, + bni00l3_X07_HwID := UINT#269, + bni00l3_X08_HwID := UINT#270, + bni00l3_X01_HwID := UINT#271, + bni00l3_X02_HwID := UINT#272, bni00l3_bni00l3_BNI_XG3_508_0B5_R067_HwID := UINT#273, + et200sp_et200sp_PN_IO_HwID := UINT#274, + et200sp_HwID := UINT#275, + et200sp_et200sp_Port_1_HwID := UINT#276, + et200sp_et200sp_Port_2_HwID := UINT#277, + et200sp_Rack_HwID := UINT#278, + et200sp_et200sp_HwID := UINT#279, + et200sp_A100_Server_module_V1_1_0_bytes_HwID := UINT#280, + et200sp_A30_CM_4xIO_Link_V2_2_32I_32O_HwID := UINT#281, + et200sp_A20_DQ_16x24VDC_0_5A_ST_V1_1_HwID := UINT#282, + et200sp_A10_DI_16x24VDC_ST_V1_1_HwID := UINT#283, + et200sp_et200sp_IM_155_6_PN_ST_V4_2_HwID := UINT#284, plc_line_Rail_0_HwID := UINT#285 ); END_TYPE diff --git a/src/io/app/src/IO/Inputs.st b/src/io/app/src/IO/Inputs.st index 3be94aee3..45f11d822 100644 --- a/src/io/app/src/IO/Inputs.st +++ b/src/io/app/src/IO/Inputs.st @@ -10,6 +10,12 @@ NAMESPACE AXOpen.Io bni00l3_BALLUFF_Link_module_X02_Input AT %B4 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; + // Module et200sp/A10 + et200sp_A10_Input AT %B39 : et200sp_A10_Input_Layout; + + // Module et200sp/A30 + et200sp_A30_Input AT %B7 : et200sp_A30_Input_Layout; + END_STRUCT; END_TYPE END_NAMESPACE diff --git a/src/io/app/src/IO/IoStructures.st b/src/io/app/src/IO/IoStructures.st index b09daa6e7..2cc2ef09b 100644 --- a/src/io/app/src/IO/IoStructures.st +++ b/src/io/app/src/IO/IoStructures.st @@ -47,13 +47,137 @@ NAMESPACE AXOpen.Io {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT - Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; - Signals_1 AT %X1.2 : BOOL; - Signals_2 AT %X1.3 : BOOL; - Signals_3 AT %X1.4 : BOOL; - Signals_4 AT %X1.5 : BOOL; - Signals_5 AT %X1.6 : BOOL; - Signals_6 AT %X1.7 : BOOL; + Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; + Signals_1 AT %X2.2 : BOOL; + Signals_2 AT %X2.3 : BOOL; + Signals_3 AT %X2.4 : BOOL; + Signals_4 AT %X2.5 : BOOL; + Signals_5 AT %X2.6 : BOOL; + Signals_6 AT %X2.7 : BOOL; + END_STRUCT; + END_TYPE + + TYPE + {S7.extern=ReadWrite} + {#ix-attr:[Container(Layout.Wrap)]} + et200sp_A10_Input_Layout : STRUCT + Signals_0 AT %X0.0 : BOOL; + Signals_1 AT %X0.1 : BOOL; + Signals_2 AT %X0.2 : BOOL; + Signals_3 AT %X0.3 : BOOL; + Signals_4 AT %X0.4 : BOOL; + Signals_5 AT %X0.5 : BOOL; + Signals_6 AT %X0.6 : BOOL; + Signals_7 AT %X0.7 : BOOL; + Signals_8 AT %X1.0 : BOOL; + Signals_9 AT %X1.1 : BOOL; + Signals_10 AT %X1.2 : BOOL; + Signals_11 AT %X1.3 : BOOL; + Signals_12 AT %X1.4 : BOOL; + Signals_13 AT %X1.5 : BOOL; + Signals_14 AT %X1.6 : BOOL; + Signals_15 AT %X1.7 : BOOL; + END_STRUCT; + END_TYPE + + TYPE + {S7.extern=ReadWrite} + {#ix-attr:[Container(Layout.Wrap)]} + et200sp_A20_Output_Layout : STRUCT + Signals_0 AT %X0.0 : BOOL; + Signals_1 AT %X0.1 : BOOL; + Signals_2 AT %X0.2 : BOOL; + Signals_3 AT %X0.3 : BOOL; + Signals_4 AT %X0.4 : BOOL; + Signals_5 AT %X0.5 : BOOL; + Signals_6 AT %X0.6 : BOOL; + Signals_7 AT %X0.7 : BOOL; + Signals_8 AT %X1.0 : BOOL; + Signals_9 AT %X1.1 : BOOL; + Signals_10 AT %X1.2 : BOOL; + Signals_11 AT %X1.3 : BOOL; + Signals_12 AT %X1.4 : BOOL; + Signals_13 AT %X1.5 : BOOL; + Signals_14 AT %X1.6 : BOOL; + Signals_15 AT %X1.7 : BOOL; + END_STRUCT; + END_TYPE + + TYPE + {S7.extern=ReadWrite} + {#ix-attr:[Container(Layout.Wrap)]} + et200sp_A30_Input_Layout : STRUCT + Signals_0 AT %B0 : BYTE; + Signals_1 AT %B1 : BYTE; + Signals_2 AT %B2 : BYTE; + Signals_3 AT %B3 : BYTE; + Signals_4 AT %B4 : BYTE; + Signals_5 AT %B5 : BYTE; + Signals_6 AT %B6 : BYTE; + Signals_7 AT %B7 : BYTE; + Signals_8 AT %B8 : BYTE; + Signals_9 AT %B9 : BYTE; + Signals_10 AT %B10 : BYTE; + Signals_11 AT %B11 : BYTE; + Signals_12 AT %B12 : BYTE; + Signals_13 AT %B13 : BYTE; + Signals_14 AT %B14 : BYTE; + Signals_15 AT %B15 : BYTE; + Signals_16 AT %B16 : BYTE; + Signals_17 AT %B17 : BYTE; + Signals_18 AT %B18 : BYTE; + Signals_19 AT %B19 : BYTE; + Signals_20 AT %B20 : BYTE; + Signals_21 AT %B21 : BYTE; + Signals_22 AT %B22 : BYTE; + Signals_23 AT %B23 : BYTE; + Signals_24 AT %B24 : BYTE; + Signals_25 AT %B25 : BYTE; + Signals_26 AT %B26 : BYTE; + Signals_27 AT %B27 : BYTE; + Signals_28 AT %B28 : BYTE; + Signals_29 AT %B29 : BYTE; + Signals_30 AT %B30 : BYTE; + Signals_31 AT %B31 : BYTE; + END_STRUCT; + END_TYPE + + TYPE + {S7.extern=ReadWrite} + {#ix-attr:[Container(Layout.Wrap)]} + et200sp_A30_Output_Layout : STRUCT + Signals_32 AT %B0 : BYTE; + Signals_33 AT %B1 : BYTE; + Signals_34 AT %B2 : BYTE; + Signals_35 AT %B3 : BYTE; + Signals_36 AT %B4 : BYTE; + Signals_37 AT %B5 : BYTE; + Signals_38 AT %B6 : BYTE; + Signals_39 AT %B7 : BYTE; + Signals_40 AT %B8 : BYTE; + Signals_41 AT %B9 : BYTE; + Signals_42 AT %B10 : BYTE; + Signals_43 AT %B11 : BYTE; + Signals_44 AT %B12 : BYTE; + Signals_45 AT %B13 : BYTE; + Signals_46 AT %B14 : BYTE; + Signals_47 AT %B15 : BYTE; + Signals_48 AT %B16 : BYTE; + Signals_49 AT %B17 : BYTE; + Signals_50 AT %B18 : BYTE; + Signals_51 AT %B19 : BYTE; + Signals_52 AT %B20 : BYTE; + Signals_53 AT %B21 : BYTE; + Signals_54 AT %B22 : BYTE; + Signals_55 AT %B23 : BYTE; + Signals_56 AT %B24 : BYTE; + Signals_57 AT %B25 : BYTE; + Signals_58 AT %B26 : BYTE; + Signals_59 AT %B27 : BYTE; + Signals_60 AT %B28 : BYTE; + Signals_61 AT %B29 : BYTE; + Signals_62 AT %B30 : BYTE; + Signals_63 AT %B31 : BYTE; END_STRUCT; END_TYPE END_NAMESPACE diff --git a/src/io/app/src/IO/Outputs.st b/src/io/app/src/IO/Outputs.st index 68421af3a..59116f14c 100644 --- a/src/io/app/src/IO/Outputs.st +++ b/src/io/app/src/IO/Outputs.st @@ -5,6 +5,11 @@ NAMESPACE AXOpen.Io Outputs : STRUCT bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output AT %B0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout; + // Module et200sp/A20 + et200sp_A20_Output AT %B33 : et200sp_A20_Output_Layout; + + et200sp_A30_Output AT %B1 : et200sp_A30_Output_Layout; + END_STRUCT; END_TYPE END_NAMESPACE diff --git a/src/scripts/all.sh b/src/scripts/all.sh index 1d72d846a..c66a61894 100644 --- a/src/scripts/all.sh +++ b/src/scripts/all.sh @@ -2,8 +2,8 @@ export RED='\033[0;31m' export YELLOW='\033[0;33m' export NC='\033[0m\r\n' # No Color+CRLF -if [ "$#" -ne 7 ]; then - printf "${RED}Usage: $0 \r\n${NC}" +if [ "$#" -ne 8 ]; then + printf "${RED}Usage: $0 \r\n${NC}" exit 1 fi @@ -50,6 +50,15 @@ if [ -z $USE_PLC_SIM_ADVANCED ]; then exit 1 fi + +if [ "$8" = "true" ]; then + echo "Project certificate is going to overwrite the online one." + FORCE=true +else + echo "Project certificate is going to be compared with online one." + FORCE=false +fi + PLCSIM=0 case "$(echo "$USE_PLC_SIM_ADVANCED" | tr '[:upper:]' '[:lower:]')" in "true") @@ -65,74 +74,157 @@ case "$(echo "$USE_PLC_SIM_ADVANCED" | tr '[:upper:]' '[:lower:]')" in ;; esac -certfile="./certs/$PLC_NAME/$PLC_NAME.cer" -if ! [[ -e "$certfile" ]]; then - printf "${RED}Certification file $certfile does not exist.\r\n${NC}" - #alf #clear plc except ip and name and provide all actions for install all, build and initial download hw so as sw - alf=$( dirname ${BASH_SOURCE[0]})"\\all_first.sh" - $alf $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD $USE_PLC_SIM_ADVANCED -else +if [ "$FORCE" = "true" ]; then + certfile="./certs/$PLC_NAME/$PLC_NAME.cer" + if [[ ! -e "$certfile" ]]; then + printf "${RED}Certification file $certfile does not exist.\r\n${NC}" + exit 1 + fi + p12container="./certs/$PLC_NAME/containerWithPublicAndPrivateKeys_x509.p12" + if [[ ! -e "$p12container" ]]; then + printf "${RED}Public private key container file $p12container does not exist.\r\n${NC}" + exit 1 + fi + refFile="./certs/$PLC_NAME/reference_x509.crt" + if [[ ! -e "$refFile" ]]; then + printf "${RED}Reference file $refFile does not exist.\r\n${NC}" + exit 1 + fi + check_requisites_apax_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_apax.sh" if ! $check_requisites_apax_script ; then exit 1 fi - + check_requisites_nuget_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_nuget.sh" if ! $check_requisites_nuget_script ; then exit 1 fi - + check_requisites_custom_registry_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_custom_registry.sh" if ! $check_requisites_custom_registry_script ; then exit 1 fi - + if [ "$PLCSIM" -eq 1 ]; then plcsim_script=$( dirname ${BASH_SOURCE[0]})"\\plcsimadvanced.sh" $plcsim_script $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS fi - #apax run ci # clean and install dependencies - apax clean - apax install --catalog - apax install + #copy_and_install_gsd # copy and install all gsdml files from library + copy_and_install_gsd=$( dirname ${BASH_SOURCE[0]})"\\copy_and_install_gsd.sh" + $copy_and_install_gsd + if [[ $? -eq 0 ]]; then + printf "${GREEN}Gsdml files installed succesfully.${NC}" + else + printf "${RED}Installation of the gsdml files finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 + fi - is_cert_hash_sha1_equal_script=$( dirname ${BASH_SOURCE[0]})"\\is_cert_hash_sha1_equal.sh" + #copy_hwl_templates # copy all templates from library + copy_hwl_templates=$( dirname ${BASH_SOURCE[0]})"\\copy_hwl_templates.sh" + $copy_hwl_templates + if [[ $? -eq 0 ]]; then + printf "${GREEN}Copying hardware templates from the libraries finished succesfully.${NC}" + else + printf "${RED}Copying hardware templates from the libraries finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 + fi - if ! $is_cert_hash_sha1_equal_script "$PLC_NAME" "$PLC_IP_ADDRESS"; then - printf "${RED}Certification file $certfile exists, but its sha1 hash is different to the PLC's one.\r\n" - printf "${RED}It has to be regenerated again.\r\n${NC}" - #alf #clear plc except ip and name and provide all actions for install all, build and initial download hw so as sw -# alf=$( dirname ${BASH_SOURCE[0]})"\\all_first.sh" -# $alf $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD $USE_PLC_SIM_ADVANCED + #hw_first_compile_and_first_download # compile, copy the HwIds, first download HW using password and upload certificate + hw_first_compile_and_first_download=$( dirname ${BASH_SOURCE[0]})"\\hw_first_compile_and_first_download.sh" + $hw_first_compile_and_first_download $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $USERNAME $PASSWORD + if [[ $? -eq 0 ]]; then + printf "${GREEN}Hardware configuration has been succesfully compiled and downloaded.${NC}" else - - printf "${GREEN}Certification file $certfile exists and its sha1 hash is equal to the PLC's one.\r\n" - printf "${GREEN}No prompt will popup during execution, so you could leave your PC and enjoy your coffee now.\r\n${NC}" + printf "${RED}Compilation of the hardware configuration or its downloaded finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 + fi + #sw_build_and_download_full # software build and full download + sw_build_and_download_full=$( dirname ${BASH_SOURCE[0]})"\\sw_build_and_download_full.sh" + $sw_build_and_download_full $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD + if [[ $? -eq 0 ]]; then + printf "${GREEN}Software has been succesfully compiled and downloaded.${NC}" + else + printf "${RED}Compilation of the software or its downloaded finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 + fi - #hw_update # copy and install gsd, copy templates, compile, copy the HwIds, download HW using certificate - hw_update=$( dirname ${BASH_SOURCE[0]})"\\hw_update.sh" - $hw_update $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $USERNAME $PASSWORD - if [[ $? -eq 0 ]]; then - printf "${GREEN}Hardware configuration has been succesfully compiled and downloaded.${NC}" - else - printf "${RED}Compilation of the hardware configuration or its downloaded finished with an error!${NC}\n" - printf "${RED}Please check the details above.${NC}\n" +else + certfile="./certs/$PLC_NAME/$PLC_NAME.cer" + if [[ ! -e "$certfile" ]]; then + printf "${RED}Certification file $certfile does not exist.\r\n${NC}" + #alf #clear plc except ip and name and provide all actions for install all, build and initial download hw so as sw + alf=$( dirname ${BASH_SOURCE[0]})"\\all_first.sh" + $alf $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD $USE_PLC_SIM_ADVANCED + else + + check_requisites_apax_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_apax.sh" + if ! $check_requisites_apax_script ; then exit 1 fi - #sw_build_and_download_full # software build and full download - sw_build_and_download_full=$( dirname ${BASH_SOURCE[0]})"\\sw_build_and_download_full.sh" - $sw_build_and_download_full $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD - if [[ $? -eq 0 ]]; then - printf "${GREEN}Software has been succesfully compiled and downloaded.${NC}" - else - printf "${RED}Compilation of the software or its downloaded finished with an error!${NC}\n" - printf "${RED}Please check the details above.${NC}\n" + check_requisites_nuget_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_nuget.sh" + if ! $check_requisites_nuget_script ; then exit 1 fi - fi + + check_requisites_custom_registry_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_custom_registry.sh" + if ! $check_requisites_custom_registry_script ; then + exit 1 + fi + + if [ "$PLCSIM" -eq 1 ]; then + plcsim_script=$( dirname ${BASH_SOURCE[0]})"\\plcsimadvanced.sh" + $plcsim_script $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS + fi + + #apax run ci # clean and install dependencies + apax clean + apax install --catalog + apax install + + is_cert_hash_sha1_equal_script=$( dirname ${BASH_SOURCE[0]})"\\is_cert_hash_sha1_equal.sh" + + if ! $is_cert_hash_sha1_equal_script "$PLC_NAME" "$PLC_IP_ADDRESS"; then + printf "${RED}Certification file $certfile exists, but its sha1 hash is different to the PLC's one.\r\n" + printf "${RED}It has to be regenerated again.\r\n${NC}" + #alf #clear plc except ip and name and provide all actions for install all, build and initial download hw so as sw + alf=$( dirname ${BASH_SOURCE[0]})"\\all_first.sh" + $alf $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD $USE_PLC_SIM_ADVANCED + else + + printf "${GREEN}Certification file $certfile exists and its sha1 hash is equal to the PLC's one.\r\n" + printf "${GREEN}No prompt will popup during execution, so you could leave your PC and enjoy your coffee now.\r\n${NC}" + + #hw_update # copy and install gsd, copy templates, compile, copy the HwIds, download HW using certificate + hw_update=$( dirname ${BASH_SOURCE[0]})"\\hw_update.sh" + $hw_update $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $USERNAME $PASSWORD + if [[ $? -eq 0 ]]; then + printf "${GREEN}Hardware configuration has been succesfully compiled and downloaded.${NC}" + else + printf "${RED}Compilation of the hardware configuration or its downloaded finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 + fi + + #sw_build_and_download_full # software build and full download + sw_build_and_download_full=$( dirname ${BASH_SOURCE[0]})"\\sw_build_and_download_full.sh" + $sw_build_and_download_full $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD + if [[ $? -eq 0 ]]; then + printf "${GREEN}Software has been succesfully compiled and downloaded.${NC}" + else + printf "${RED}Compilation of the software or its downloaded finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 + fi + fi + fi fi diff --git a/src/scripts/all_first.sh b/src/scripts/all_first.sh index f27cc945e..ef83419ea 100644 --- a/src/scripts/all_first.sh +++ b/src/scripts/all_first.sh @@ -14,8 +14,8 @@ validate_password_safe_chars() { return 0 } -if [ "$#" -ne 7 ]; then - printf "${RED}Usage: $0 \r\n${NC}" +if [ "$#" -ne 8 ]; then + printf "${RED}Usage: $0 \r\n${NC}" exit 1 fi @@ -69,6 +69,14 @@ if [ -z $USE_PLC_SIM_ADVANCED ]; then exit 1 fi +if [ "$8" = "true" ]; then + echo "Project certificate is going to be deleted and regenerated again." + FORCE=true +else + echo "Project certificate is going to be generated if it does not already exists." + FORCE=false +fi + PLCSIM=0 case "$(echo "$USE_PLC_SIM_ADVANCED" | tr '[:upper:]' '[:lower:]')" in "true") @@ -107,11 +115,18 @@ if [ "$PLCSIM" -eq 1 ]; then $plcsim_script $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS fi + #apax run ci # clean and install dependencies apax clean apax install --catalog apax install +if [ "$FORCE" = "true" ]; then + certs_folder="./certs" + rm -rf "${certs_folder:?}/"* + hwc_gen_folder="./hwc/hwc.gen" + rm -rf "${hwc_gen_folder:?}/"* +fi #clean_plc # total reset of the PLC excluding IP and name clean_plc=$( dirname ${BASH_SOURCE[0]})"\\clean_plc.sh" $clean_plc $PLC_IP_ADDRESS $USERNAME $PASSWORD diff --git a/src/scripts/compare_all.sh b/src/scripts/compare_all.sh new file mode 100644 index 000000000..cda05b952 --- /dev/null +++ b/src/scripts/compare_all.sh @@ -0,0 +1,68 @@ +export GREEN='\033[0;32m' +export RED='\033[0;31m' +export YELLOW='\033[0;33m' +export NC='\033[0m\r\n' # No Color+CRLF + +if [ "$#" -ne 5 ]; then + printf "${RED}Usage: $0 .${NC}" + exit 1 +fi + +PLC_NAME=$1 +if [ -z $PLC_NAME ]; then + printf "${RED}The PLC_NAME could not be an empty string.${NC}" + exit 1 +fi + +PLC_IP_ADDRESS=$2 +validate_script=$( dirname ${BASH_SOURCE[0]})"\\validate_ip.sh" +if ! $validate_script "$PLC_IP_ADDRESS"; then + printf "${RED}The PLC_IP_ADDRESS '$PLC_IP_ADDRESS' is not a valid IP address.${NC}" + exit 1 +fi + +PLATFORM=$3 +if [ -z $PLATFORM ]; then + printf "${RED}The PLATFORM could not be an empty string.${NC}" + exit 1 +fi + +USERNAME=$4 +if [ -z $USERNAME ]; then + printf "${RED}The USERNAME could not be an empty string.\r\n${NC}" + exit 1 +fi + +PASSWORD=$5 +if [ -z $PASSWORD ]; then + printf "${RED}The PASSWORD could not be an empty string.\r\n${NC}" + exit 1 +fi + +certfile="./certs/$PLC_NAME/$PLC_NAME.cer" +if ! [[ -e "$certfile" ]]; then + printf "${RED}Certification file $certfile does not exist!!!${NC}" + exit 1 +fi +result_file=".\online_offline_compare_result.txt" +if [ -f "$result_file" ] ; then + rm "$result_file" +fi + +apax sld compare --mode all --target $PLC_IP_ADDRESS --input $PLATFORM --username $USERNAME --password $PASSWORD --certificate $certfile --log Information | tee $result_file +exit_code=${PIPESTATUS[0]} +echo "exit_code: $exit_code" + +if [[ $exit_code -eq 0 ]]; then + printf "${GREEN}The compiled software and loaded one are identical.${NC}" +elif [[ $exit_code -eq 9 ]]; then + printf "${YELLOW}At least one code block is different between the compiled software and loaded one.${NC}" +elif [[ $exit_code -eq 10 ]]; then + printf "${YELLOW}At least one data block is different between the compiled software and loaded one.${NC}" +elif [[ $exit_code -eq 11 ]]; then + printf "${YELLOW}At least one code block and one data block are different the compiled software and loaded one.${NC}" +else + printf "${RED}Unspecified return code during comparing!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi \ No newline at end of file diff --git a/src/scripts/compile_all.sh b/src/scripts/compile_all.sh new file mode 100644 index 000000000..15ee8a87d --- /dev/null +++ b/src/scripts/compile_all.sh @@ -0,0 +1,180 @@ +export GREEN='\033[0;32m' +export RED='\033[0;31m' +export YELLOW='\033[0;33m' +export NC='\033[0m\r\n' # No Color+CRLF +if [ "$#" -ne 7 ]; then + printf "${RED}Usage: $0 \r\n${NC}" + exit 1 +fi + +NAMESPACE=$1 +if [ -z $NAMESPACE ]; then + printf "${RED}The NAMESPACE could not be an empty string.\r\n${NC}" + exit 1 +fi + +PLC_NAME=$2 +if [ -z $PLC_NAME ]; then + printf "${RED}The PLC_NAME could not be an empty string.\r\n${NC}" + exit 1 +fi + +PLC_IP_ADDRESS=$3 +validate_script=$( dirname ${BASH_SOURCE[0]})"\\validate_ip.sh" +if ! $validate_script "$PLC_IP_ADDRESS"; then + printf "${RED}The PLC_IP_ADDRESS '$PLC_IP_ADDRESS' is not a valid IP address.\r\n${NC}" + exit 1 +fi + +PLATFORM=$4 +if [ -z $PLATFORM ]; then + printf "${RED}The PLATFORM could not be an empty string.\r\n${NC}" + exit 1 +fi + +USERNAME=$5 +if [ -z $USERNAME ]; then + printf "${RED}The USERNAME could not be an empty string.\r\n${NC}" + exit 1 +fi + +PASSWORD=$6 +if [ -z $PASSWORD ]; then + printf "${RED}The PASSWORD could not be an empty string.\r\n${NC}" + exit 1 +fi + +USE_PLC_SIM_ADVANCED=$7 +if [ -z $USE_PLC_SIM_ADVANCED ]; then + printf "${RED}The USE_PLC_SIM_ADVANCED could not be an empty string.\r\n${NC}" + exit 1 +fi + +PLCSIM=0 +case "$(echo "$USE_PLC_SIM_ADVANCED" | tr '[:upper:]' '[:lower:]')" in + "true") + PLCSIM=1 + printf "${YELLOW} USE_PLC_SIM_ADVANCED is true. ${NC}" + ;; + "false") + PLCSIM=0 + printf "${YELLOW} USE_PLC_SIM_ADVANCED is false. ${NC}" + ;; + *) + printf "${RED}USE_PLC_SIM_ADVANCED has an invalid or undefined value: '$USE_PLC_SIM_ADVANCED'.${NC}" + ;; +esac + +apax install + +check_requisites_apax_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_apax.sh" +if ! $check_requisites_apax_script ; then + exit 1 +fi + +check_requisites_nuget_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_nuget.sh" +if ! $check_requisites_nuget_script ; then + exit 1 +fi + +check_requisites_custom_registry_script=$( dirname ${BASH_SOURCE[0]})"\\check_requisites_custom_registry.sh" +if ! $check_requisites_custom_registry_script ; then + exit 1 +fi + +if [ "$PLCSIM" -eq 1 ]; then + plcsim_script=$( dirname ${BASH_SOURCE[0]})"\\plcsimadvanced.sh" + $plcsim_script $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS +fi + +apax clean +apax install --catalog +apax install + + +#copy_and_install_gsd # copy and install all gsdml files from library +copy_and_install_gsd=$( dirname ${BASH_SOURCE[0]})"\\copy_and_install_gsd.sh" +$copy_and_install_gsd +if [[ $? -eq 0 ]]; then + printf "${GREEN}Gsdml files installed succesfully.${NC}" +else + printf "${RED}Installation of the gsdml files finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi + +#copy_hwl_templates # copy all templates from library +copy_hwl_templates=$( dirname ${BASH_SOURCE[0]})"\\copy_hwl_templates.sh" +$copy_hwl_templates +if [[ $? -eq 0 ]]; then + printf "${GREEN}Copying hardware templates from the libraries finished succesfully.${NC}" +else + printf "${RED}Copying hardware templates from the libraries finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi + +#setup_secure_communication # setup secure communication, create and import certificates, setup password for AX_USERNAME +setup_secure_communication=$( dirname ${BASH_SOURCE[0]})"\\setup_secure_communication.sh" +$setup_secure_communication $PLC_NAME $USERNAME $PASSWORD +if [[ $? -eq 0 ]]; then + printf "${GREEN}Configuring secure communication finished succesfully.${NC}" +else + printf "${RED}Configuring secure communication finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi + +#hw_compile # hardware compilation +if ! [[ -d "./hwc" ]]; then + printf "${RED}Directory ".\hwc" does not exist!!!${NC}" + exit 1 +fi +hwcfile=".\hwc\\${PLC_NAME}.hwl.yml" +if ! [[ -e "$hwcfile" ]]; then + printf "${RED}Hardware configuration file $hwcfile does not exist!!!${NC}" + exit 1 +fi +hw_compile_script=$( dirname ${BASH_SOURCE[0]})"\\hw_compile.sh" +if ! $hw_compile_script ; then + exit 1 +fi + +#copy_hardware_ids # copy hardware identificators +hwid=$( dirname ${BASH_SOURCE[0]})"\\copy_hardware_ids.sh" +$hwid $NAMESPACE $PLC_NAME +if [[ $? -eq 0 ]]; then + printf "${GREEN}Hardware IDs copied succesfully.${NC}" +else + printf "${RED}Copying the hardware IDs finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi + +#copy_io_addresses # copy hardware addresses +hwadr=$( dirname ${BASH_SOURCE[0]})"\\copy_io_addresses.sh" +$hwadr $NAMESPACE $PLC_NAME +if [[ $? -eq 0 ]]; then + printf "${GREEN}IO addresses copied succesfully.${NC}" +else + printf "${RED}Copying the IO addressesfinished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi + +certfile="./certs/$PLC_NAME/$PLC_NAME.cer" +apax plc-cert --target $PLC_IP_ADDRESS --output $certfile +if [[ $? -eq 0 ]]; then + if [[ ! -d ".\\certs\\$PLC_NAME" ]]; then + mkdir -p ".\\certs\\$PLC_NAME" + echo "Created directory: .\\certs\\$PLC_NAME" + fi + printf "${GREEN}Security certificate has been succesfully uploaded.${NC}" +else + printf "${RED}Uploading of the security certificate finished with an error!${NC}\n" + printf "${RED}Please check the details above.${NC}\n" + exit 1 +fi + +apax build +dotnet ixc diff --git a/src/scripts/compile_all_compare_all.sh b/src/scripts/compile_all_compare_all.sh new file mode 100644 index 000000000..cff7f51a7 --- /dev/null +++ b/src/scripts/compile_all_compare_all.sh @@ -0,0 +1,59 @@ +export GREEN='\033[0;32m' +export RED='\033[0;31m' +export YELLOW='\033[0;33m' +export NC='\033[0m\r\n' # No Color+CRLF +if [ "$#" -ne 7 ]; then + printf "${RED}Usage: $0 \r\n${NC}" + exit 1 +fi + +NAMESPACE=$1 +if [ -z $NAMESPACE ]; then + printf "${RED}The NAMESPACE could not be an empty string.\r\n${NC}" + exit 1 +fi + +PLC_NAME=$2 +if [ -z $PLC_NAME ]; then + printf "${RED}The PLC_NAME could not be an empty string.\r\n${NC}" + exit 1 +fi + +PLC_IP_ADDRESS=$3 +validate_script=$( dirname ${BASH_SOURCE[0]})"\\validate_ip.sh" +if ! $validate_script "$PLC_IP_ADDRESS"; then + printf "${RED}The PLC_IP_ADDRESS '$PLC_IP_ADDRESS' is not a valid IP address.\r\n${NC}" + exit 1 +fi + +PLATFORM=$4 +if [ -z $PLATFORM ]; then + printf "${RED}The PLATFORM could not be an empty string.\r\n${NC}" + exit 1 +fi + +USERNAME=$5 +if [ -z $USERNAME ]; then + printf "${RED}The USERNAME could not be an empty string.\r\n${NC}" + exit 1 +fi + +PASSWORD=$6 +if [ -z $PASSWORD ]; then + printf "${RED}The PASSWORD could not be an empty string.\r\n${NC}" + exit 1 +fi + +USE_PLC_SIM_ADVANCED=$7 +if [ -z $USE_PLC_SIM_ADVANCED ]; then + printf "${RED}The USE_PLC_SIM_ADVANCED could not be an empty string.\r\n${NC}" + exit 1 +fi + +#compile_all # compile hw and sw +cla=$( dirname ${BASH_SOURCE[0]})"\\compile_all.sh" +$cla $NAMESPACE $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD $USE_PLC_SIM_ADVANCED + +#compare_all # compare offline and online +cpa=$( dirname ${BASH_SOURCE[0]})"\\compare_all.sh" +$cpa $PLC_NAME $PLC_IP_ADDRESS $PLATFORM $USERNAME $PASSWORD From b54d69e98339b3b63e280a76fac348eab8953b4c Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Thu, 5 Mar 2026 20:46:36 +0100 Subject: [PATCH 4/7] wip --- src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json b/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json index bc61875f2..7cb3221c7 100644 --- a/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json +++ b/src/io/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json @@ -1,9 +1,9 @@ { - "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAcIgAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkhaVW12WFNhWklsQy9HVW1jbllxVnZtMWlyMwpYOWZpaDc2Z2NHcVNBdEd6aVB0ZkdxR3hJTTVtMGd4OWlPcXpYWU8vOXNhRlBVbHl3ZVdEK2N2ZXRCSE1JOHBUClZLdkloTTIxT1BXb2wyUE9hUFZPNFo0Yk5aOUtKNE8yU3pBUW13PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgsr4e4WrUJWwh/VmmLmxKTTbtFvwOlDu3sYu214Lop2QBACAADAAQ1u/r4wJWIpiQwpGu3Ugf3wEAAAE2ECWmUCUMbskiyToX9Dx/xXBtT/RgSubXfwl1jv+5xyDbxRHtpK5pI/0AfCsebGtKBFh3qg4XQe1bal9KDOezIC8drip1PXVIXHKBFKIH3a1N/MP7QJrYEyTIN7i3CtX2s0UWD0nKfD5ODyzjk++N48MS6XJ1ykkoB31RzO+fX7w+HPIcKnvr/wmgB0JIj46aN+zkfVMXRpr/Dmm0yF4Wblxtv6TDNHLnCurrZn4lwiwPSu+Zn83E23JW6kr3c92iCelUXl14gPywADHen5e/aDIjA0pUWU29kBw0xOWk22uoFcybwoCSG3jbBfpAyiaOwEOhF2BqN8aRYiXvBotYhjiMicVx11ebnDRNzVPHiv2TlRFszgI+/urrYWoKfbt0JyX+Lc0euKdR7TENp2uk+m/BaWyWSAIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFAAVoh9Rpj8fR3ySsAx92zO96xtBObQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVhMzJKdndFWG9Pc3gvVUxjZXZaS1V5bUJCMzB3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhPVEV4TURKYUZ3MHpOakF6TURJeE9URXhNREphTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFFidWVXOFplZ3QvQjBMbGQvREFhSnhIUnF6clA0VDhZelRkRmRYM3dRblMrYQ0KMytZa3QzckNMcVNhL0FPWW5zTDZHNW5TVTFmSUhuMU5GSEtCbjd3ZDdYaTVIWjdIc0NZRHJrQkpjcmthNGoxU0ZGazlxSDFmbjNFYw0KY3NnbDRlR2FBT284WmxkL3lvcytkcDN3VWdkNkxDMkk1S054YURWcVRTQlRkWnRSOHpqd1dpTEdrSzhDZ0lIWU14b3ZVK0tGNmgydw0KSjd4T1VKaTd2S1dDMzBXU0VndkVtRitGaGhZaHN2d2FYZVowTjMvcG9JNlIwbkNVbTRZbWRLNFZ2SGxLaTVHWUk3U2hMOXVQUnl4cg0KTXVSRlFxY2J0ZlhlSEMyeFBPcGpQUGVhSGRXZXcvMnpOVys4VjRtSytoUFpBV25BTTJGUXJ4cUNuL1RKUFV1NEl6aEZBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZQQmJsYWRDam1GZk0zNHpnU0RnZTNhaA0KdTVaVk1JRzRCZ05WSFNNRWdiQXdnYTJBRlBCYmxhZENqbUZmTTM0emdTRGdlM2FodTVaVm9YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hScg0KZlltL0FSZWc2ekg5UXR4NjlrcFRLWUVIZlRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQW90OUxNeXJJZEVSNVBGaGVlSk9qMFIveA0KdGJzaG5UVGVoZVRKYTRtbWtVTCtxUHJLZ09tZWhKTXpMekZCNkVZb2k5a0MweWpFaThDL0NoRGIrUEd5QmYwdHF0ZnlOblZ3Qm9wNg0KcjNJeVhGVnN3NlVlRW9NbDVzMUZlWmdTZVQ2cTZNeC9kRTFiN092RXFRU0t3a1dXNWRUdTl2QnJZOUZiR0h5OWFzcVM4eHg3bDNEVA0KYXhMTXBsY0p5Vkc0Tnd2clFySEtaWDJuQUQyWmplcjJ6RjBwMjVrbmJxZDZVYWczN3k4N21FQnd6V3daWklIQmFockk2SS8xQ0JsSQ0KUXpRcDVMWHFBNGczMStMdmplcEJFeGYyUUQ3SG8yTEY2SnBDYTVPSU4yWE02K2lwYmMvRVBYZ3VVcVFUS2doQ3FtM2FGOWovaDU5Ng0KU3NMQVlIditqZm8wZ1E9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEVGqwrWAu3Cz+5qnNtFvh2PgYm7IoZVjSYutebP+GV0xa0dv62sqxOKoX6ps2oXZxJY2udq11sqZFgevdVnfnir1L7smsncrSTLyZQEp9mAhpSxpdgToA/uW42A5vcPBmbJuqsIJNPc+LFjZbt1/jzgAgto1q3px3F++szxa5uqCerCpyynhZQvDDIbetjGhDM6kHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRVjUvSVNDWDUvOEtrNEZTUwpRVlQ3U2dJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFRXY5dkdXWkE5MGRpQW1WCmVlRTUwbFVFZ2dUUStIRmtiRm9wTGg3bk5uYnJhUG5uOXdOTXliNFB6WE81dXA1eXZGclNXYUlhRUpKNXZNQWcKSWRuZGwvaVNQek5WRmNlbiszQSt5NXZTbHVvY1Nxa3BpcERmWHhOazhYWmRWNGtKMmNEVXBDYVJaUmdobFBaeQpuK24zaE5rNitTdGxRQ1dpSTM4clZZMGJRVGhzVHFNZTNneUdxZFpYR21qblNyeUFMbzN3dDB5c04xTStMTCs0CjVMTFVJUy9Pa1FhSTNNTGFSRE45a2J2SzJuOXNIUjVINytjQzJ1TytjNDV4ZFEvU1NYNW40YUROaHVqNDd6SUYKNjJHemtWcHpxRlAzRGR0MmVTZE5pWnJPayt3VGtsY0xKZ0s5UDRlTUlkRXZBTUMrZ2RWNmlzYVo1ZFAyZ25mKwpqLzE3MUlBaFJnNTgvc0R6WDZyalU2WmRCUzhWNUxxa01FTjE2MXRNaE03cUNTU1l2RWhWQWRKTHpFRytvMTVxCkNncm1HeU9ORVYvREliU281bTYwdUNlZVJWMXcrbmtjZUc1Y05CTkR1NXpPZ0Viay9ISmNQdGhtUSsrQUJkeGYKOG5Hdm5mdEhHdXI3ZG1GZ3JuSnZ4UVR1THZzZlNmeWo2emNJYnYzQmZOclZTZTR2cnFNa0VqQ1N2VjlQRkVKVQphdE1mS09rVFpnT1pKNVBwWXp6N2FLeHBhdk0rMmVQR1NtTkllZWpEUU1obitLV3FlV3F2S3FuZ1M2cnBwR0p5CnloSW5DTWZCSWVxVUVSNjRuT0Y1dGJJWDBSbkE0MkNsZ2dQeERhRUJjNmxIemp4Umw3Q3l6TVVlMkhkL1BHbUgKNHROa0JkRUd3UHE5cERTMjVKV2hvZm9SSmdya2NIeG14VG5Na0t1bmZCSG5oTXJiWFJuRllDZ2oxOWlsYWFhMApQYTR1K2c4aERMaXdPQUtQbjBsb0pUY1RRekorbFEwQm1ucmY0a01jOEd6cEZJMmpYSm9MRTg0VFk3c0psNjdyCnI3WkFTOGYwYWQ4bkUxcnhoTzg0bkFKZXgyeU1hQ2xEQ1dsRFJwVk4wUnNwdE90dHUzM0hFZ1NnV2p2TUttOXoKS1Bia255TWNXZXZPRExVM1VTaXpnbDExb1FOSGxEY0NadlZ3TzFwUTMvTkxXeXJJZWg1ZHBlb1N0bFZrZXFvZgpSVkNOaDdsSVl3bVR3ZmRrdTMyWGhjOFowYW14UWN2cUU1Mmp4MDRUK2NUQnprVW9iQ1Z5cEpHTmQzUWNSWHpVClFmbXMraTR2VzBKZlArQXIrLzhQczBYbWJBQk9VY0Eza0ZmZ2t2ZHJKT1RnaW5qRjllZGhrYU1kVGh4L0N3SWMKVHpsaUZrSlc3aDNIV1BUQm1jZFErS3FaZkxHM245azBZandHSEROclVjUEJ4RVBEdEtqay92OGhtRmxpMlZaOAowaERHS0JoMU5hRURSTGY1c3NLbWVRd0hBVkdXaUIrM3V3dFU4UlBOMHBoRzl2a1pRUm8xVSt6TFRIZm9GbVdTCjlyUTlldU1CaGNCSnVrZkExaC9HUFhDR0Rna0pBVEFlbWMxVFFGY2ZmanVqL2tidkw4QUlVcXJER1FSUERTQ2wKQnlxSkJndEtMWHhnakFKQ1VMbGlRbW9sTGtTeDloSGxRWmJ4a1g1WWczUGJzYTlNU3ppNVI4UVR1RFQvMFV3NApxN1UrZlBhQWFLWW5YdEJseHA5ZEJFenVOcFM2SVRFSTVpdXR0RHYrM1VjT0ZtdDg5d3I5cVI3Y0lXNmNqSzc3ClRLc0FBZGJQc3RTR1JhM0F4ZWpoa09QKzJZOVZrOHRLT01WWWswbFVlRFRjODRoZFcwSmZJWDIrbDRxNDRENXQKRThlVFpJUHBkWTFLS1Rick9EUWxtamRick03K09NNy9UaWhnRmFSWWdNNU50L0l5VXZmRjV2VXMrVGRiZE1qcwo4eEliS3FFL0U2SjZxbXl1eXA2Q3lWd0FETmsvUW9Za3cyWUxwNHZ0SHpJSTIxaWdicFowd01YdFBscXFNYVFECm9mREtwSmd2YzVkdUJ5bE9mZ2R1eklkdkNzbHU1amlQWS9uUzhFR0gvZWRrYVJMZ3R4MFREOVpHT1FKNjdpckoKOVhTTXk0SGgyaklHN242K09RbEVLMFhxUG5sVzVjWVZ1TWRwSmpRaEQreE9nREFuQ1NGalFDOD0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6CWxvY2FsaG9zdAIAAAAAAAAAAQAAAAIAAAAAAAAAFAAVoh9Rpj8fR3ySsAx92zO96xtBObQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVhMzJKdndFWG9Pc3gvVUxjZXZaS1V5bUJCMzB3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhPVEV4TURKYUZ3MHpOakF6TURJeE9URXhNREphTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFFidWVXOFplZ3QvQjBMbGQvREFhSnhIUnF6clA0VDhZelRkRmRYM3dRblMrYQ0KMytZa3QzckNMcVNhL0FPWW5zTDZHNW5TVTFmSUhuMU5GSEtCbjd3ZDdYaTVIWjdIc0NZRHJrQkpjcmthNGoxU0ZGazlxSDFmbjNFYw0KY3NnbDRlR2FBT284WmxkL3lvcytkcDN3VWdkNkxDMkk1S054YURWcVRTQlRkWnRSOHpqd1dpTEdrSzhDZ0lIWU14b3ZVK0tGNmgydw0KSjd4T1VKaTd2S1dDMzBXU0VndkVtRitGaGhZaHN2d2FYZVowTjMvcG9JNlIwbkNVbTRZbWRLNFZ2SGxLaTVHWUk3U2hMOXVQUnl4cg0KTXVSRlFxY2J0ZlhlSEMyeFBPcGpQUGVhSGRXZXcvMnpOVys4VjRtSytoUFpBV25BTTJGUXJ4cUNuL1RKUFV1NEl6aEZBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZQQmJsYWRDam1GZk0zNHpnU0RnZTNhaA0KdTVaVk1JRzRCZ05WSFNNRWdiQXdnYTJBRlBCYmxhZENqbUZmTTM0emdTRGdlM2FodTVaVm9YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hScg0KZlltL0FSZWc2ekg5UXR4NjlrcFRLWUVIZlRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQW90OUxNeXJJZEVSNVBGaGVlSk9qMFIveA0KdGJzaG5UVGVoZVRKYTRtbWtVTCtxUHJLZ09tZWhKTXpMekZCNkVZb2k5a0MweWpFaThDL0NoRGIrUEd5QmYwdHF0ZnlOblZ3Qm9wNg0KcjNJeVhGVnN3NlVlRW9NbDVzMUZlWmdTZVQ2cTZNeC9kRTFiN092RXFRU0t3a1dXNWRUdTl2QnJZOUZiR0h5OWFzcVM4eHg3bDNEVA0KYXhMTXBsY0p5Vkc0Tnd2clFySEtaWDJuQUQyWmplcjJ6RjBwMjVrbmJxZDZVYWczN3k4N21FQnd6V3daWklIQmFockk2SS8xQ0JsSQ0KUXpRcDVMWHFBNGczMStMdmplcEJFeGYyUUQ3SG8yTEY2SnBDYTVPSU4yWE02K2lwYmMvRVBYZ3VVcVFUS2doQ3FtM2FGOWovaDU5Ng0KU3NMQVlIditqZm8wZ1E9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEc//7TD5F8Gv8aDsAP5gQrOwGrzSFqvW1A4mLT/FKlYty4e+NTLK1576K8BWJ+cWdE1vBLQdLLG7IT/wwTkr13HQpA1TlxxF4rRxPgPQCxxmuQv2jL3KDqq/f/P4gc6eGQZiMfH7NU0+bzhgB3eXCdQAg7YBJR02zGpnY0GHlJo/C1AboP0y5OiJls9u9NdgDxSsHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRdHpMWTBlb3p3TmVNM0FBKwpnTDVoZFFJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFS2tlQVdpZTE4QlV6Q2lKCkduRGNDeElFZ2dUUXdSQ0lYSUhzZkpIdnl3YmdEeTlvdUROOGk4Mis5ZUtKNTl6andFS1RTdVZKdXA3RnVaY1gKSkhXcUM2bkgzaCs1SnJyYmpRcnV6Um1VLysxbE9yRXJaY1BBSHBpRjlNQWZUcUhoUSs3NDZuSnJ2a1Z6RGcwTQo3WXhZTVhNYnlqdmE4bTVncndXWi9KOE5Zb20xK3ZXaFFqN0lLY1RZaW1vNDAyMGVpbFNBaWhaMEdJOFZhKzVnCnIrVGozSVdiQWNpYVFOaFQ3YWNwcDF4SW9kckdRUjZNaVErbHRjYVRLUExIQ0VOWklDM21PMXJscW91NmFtK2YKc0E0SUN2b2I3OVFlK0N5a2JlZ1BYUEFCRVRDQVZoVjlLTUhrUnByNWI1dXd4OFIrSGJXTTNCQTRtcU00cXE5QwpkYWhZd0RkbXNEYmZVNXphZ082enVVVGZ1SG1DM3pnWlA0L05BcDFDaVRHSStuZHFTa2dmd0EvRjhiNllQUWdpCkY1TFhTcHR4aUtQVE1YNlBJSERacWFTSW9ZWmJ3NkJjZTlJTzFjamJ6M2pieDFuUm9jTEVsczVqRytpREVWQ28KUFVraWtkQ1lLRDZTQThJdEpxOEpSNTdxVzRrNmJ0Y0dIcEF3ZnZlSmpPZXJyYkRlMWs4NklxNmtxWU44T24vNgo1RkFtMWx6VTBleFNtTkRMQWt6c01MWHVSUFQrOC9MVGtHaVl1SjQvVXNuaHFMMjRkTWZoL3pkZlNHblRCa2RPCkc2ODRtdFgzOGp3RkRGTkVIMit0ejVRclBWaitXWmVPV2FRWFlJaWwvYlNlRE9NZlJtRGxlVElJbUl6UHRmRjMKWkw0ZWZTVlZveFBrV29DWVZaU2pqRDZNdEZ3b2diYmtvY2RjcWRMR09QQUNjWFk4SmpWSytjWUFzK295V2lxZwo2TGVjZHdRVFFEREcvRGZVdFk3TUp0bmFNM0xZL0haMU04NTlNUVZ0WU9jOTg4aTZQa09YckprSG54dW9xMmh4CkZOOWE5N3hMZTVGdTE4OEtINkhpVUNxc1ArSkYyMzJsNEwvME1GSTgzS0NrTUdVVTJqQ1hQdEsyeU5xRmg5SEcKb2srMzhyeC9wTmErUHhlTE11THcxVGovUFlyMFZXS0ltV1VjdFhJRHpoZFNZY0xNMFNlcjM0OVBGaEJzSnRrYQpETXZOQUxUUTVxTUkwQ3hOOFRaUkJGdzl4TTdKam1VTSt5QjFkWitsaG53a3lLZExKUFdkVXo3aG9FSmlzajNSCkVSV0M0amEycURCOWhCcGhaQlJMa2xMUE1oK29YWjVlWWlPR241U1hyOVdidXpxY0t6TWliOFRUMDdsNmNTR3cKb3g2M3YyUHdReUF4cWVmWjY2OUhPM01Oa0xObmNHVXZibnJ1YTZnb2RkSkNUSkw5RzJNV3JITTF6SFU4ejRyKwpSaFBCUUp0Z3ZHdEtaaG1QQnU0K3NJTGZXckhNdXVFbXFla2FDOHRtQThnajJHcEJPS1pGdElOZkxDbENlNHlJCjYvejBsR1pMRVc3SmZYNjRuc3pQTHF1bmZzamhucFJQNGdHcDlkd1A4TEYyMWJpalVoWm9RSjVmWndKK3FwY0gKVUgrWEdvSXhTS1ZtOVJVUDVsYjZvS2tNUnowbm5vY3lRa294NHpBUElJSVg2dWlmcDNNK0dkRjhlUVdKditTZwpLZ01vanp5STZ3bUJlNUpqNGFod3lrMDZnTGJyMVpLcTFteDRLek9LS09WNDZUWXRTWTZ2Y0xiSk11dHpLcE85ClNVdTRBMVREM3VkTzE3U1UwNTlqUmtGMkErdDlITnZ5Rm5ESlRKMUluYStQNE1ZdWJiQi9ZY2xINmlvNUNQaysKaFRCYXBCUlQ0S0xFeGo3NXBSUTBoZS93VzFkMEsrT0pwMlhLZlNURXRLY04raVl4bCtoZFBzMmVaS3RYMllpSwpjQ1BhUEhheXB2WkdBM2ZyZEpvSHlaU3JHODVZRytrM2RJTGFtNzJEbjVZT0t6cVVyS2dFYmNWRHY1SFBvR1dJCk9XNmhUTDd6L3RXNEsybGNzT3lwdFM2Rm1ZcjljSUNFYjVLNVlqdVhSRHR6bWxLV3NJc1loODc0UWhwK05teUsKNGVzNVlYTjR6dDRWVktiZWZKMGp5akpCK1RlR1pSNG5LWnNqMHY3MldYZnZvbW40SUkyVE5tbz0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6", - "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACCq2yAxLrhnRNk4GNC9obm/pkJ+wc1jGbTTXmfOwAloCAAAAEBkQprnPIMH6KSezFqHtiIb0vYtg++HYg8J567fkiyXu2wvq4MQcEfp2MInsS9Kvua+2IS4Y75KHPdGty2TS6XrAA==", + "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAcIgAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkE5K2o5TGhzZHRSUUxQNUlPQzd6N1hIRjZNVwpUb242cjJ6SzZnaGVTMEFHZWUxdjBkOUg0WVJ4U2FIcU1tcVBYQW81Z08vZFVOUGx3UHc3LzhIbzdPZkRsbmVOClJLcVVmaFp4R0M0OS9ZSWFxSTh6eCt6dG1yeVVXcjRON1V3ZDlRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgwkS+vKYDIcDJX242EnfXoftTMapt9IfPGJPMfr7gUbUBACAADAAQsrhEcGQ/6n/I3pmUjic5+AEAAAE2w3r/vyU5JCXv0dUoTxU+BpTPagfGXjcoG+Zg+zRL33vBUT29z6v1HWM3PJmPK1lEttDE2FX3JWY7jMicuQPKDIulEyGyGzgRjDmupvOwoRJFukNCR2NhQMO/QVaK4pXIBheH8AqqBC/rgdrwODpiPJGCPArhxCsDdTDSGO9DU5aK0fAaSbqF1qHPxRQ23wVuRycCJyNHGM5cDKe4S9/8FuFWi7bhycdCQKQgGjGdTmwOLkpYGp7X5otAqWC+3TVIccaEFGIHCPAgwGklMWH0QIDJ9MjSZk7Y8jdnktFHxY42KMHheoFZaekz7Ekd410SC0GiWOiDBWYskQGbdzopt5xS8wT3KJ46TBYY17z0GmJLQANRPol6CQ7n2XI6itTH1yMYofgS+SU3kN2UvYdvFZ235ETR3wIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFAAoWLCX0+KVG3H04ms2YN95pzUxBrQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVPUUNjMEY1bFpaQUJ3S1dCamN6V0hSUHZGR3d3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhPVEk1TXpKYUZ3MHpOakF6TURJeE9USTVNekphTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFMxREVoamhLVUYzZ0NtSlRCeEZwNGEvTHBQR3VGWDhnNmJEaGRSdjY3dWJ3UA0KYUhzbWJjcllVWm1pRlB2aVluU0dCSXZvdk94RnlrNWlRVkF3RXZhOWM5Qjh6QXZpb0FWQXlJU01ORThSYUhOaGVuVEtEMUJPN3JBdw0KNWs0KzAremlGWDZWQzFFZmVOS3BhRTNTTkNGWG8vVTUxdHRwejhEanp5aWt2dGpBUVgvSmpKVXRQUmJCYjJLcmhuSjhLZk94YTJ6TQ0KZjU3Qm5yUHJYOGljdkNqdTdqYUw0ZkNkWnlmUUdXN0dRVVRIckRVcjRuSW5qU1o5blZlQy9ENXB3NkxRSU5CekZDWW85bVZHZjlqbQ0Ka1NHSkdwK0V3dmdmRVBqYkk2bVA4TXFyWTF1WnNpa0xiOEcxU01PN2ZXK0d6UExITkRXc1BwM3VnTHNQK1VaMi9iT1JBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZEMUsyN2gwRWQ5YkZ5ODRFUVpvbGtRbQ0KRERsS01JRzRCZ05WSFNNRWdiQXdnYTJBRkQxSzI3aDBFZDliRnk4NEVRWm9sa1FtRERsS29YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRNQ0KQUp6UVhtVmxrQUhBcFlHTnpOWWRFKzhVYkRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUJLK09RRVBQc3plcitYeXlvZ2R3R3BFaQ0KSkNmNUF2SDFxMEJDa0VrU0tWZEh4SGMrZmxnYXlPR1AwT015ZFJWR1JvcFBveEpMUXQ5VlR4TnBSOWYwQWF6dEhDcW5iSTZmTjNyRQ0Kc1U3NmdCeW5aQzkxbzN6NitoSXBDb2FGbUM2a1ZTUzR1WThZOEN3SXZ5ZjAzT0xRRWJDbmNBczF2S3NuU1JrNWpkSGlGYVlQblpLMQ0KTXZIMzA2ZHJpUmZsMENtZUFpZ0hjcTAvdHBKN3Uya0NKd0ZPR0dBdEVjZ3ZTMUdYRlkvMTJxQzc0eTNqTmhFVEVlNjM1cHZlc01LWA0KWXAzY296ZE9IRlRGeXFUTkVXOTJUbzBTK2IwTmdRTHIxLzZhVlU0VWNIR3ZnaFlTS294dHVyNkxHd3M5dlVEdmozaUJIU2Y1QlhOVg0KMmYwY3luQjd3Q1NoTHc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEFvtiMIaYPyw3gfkeLmtWNhH7ZKFVB6LWDfeybsbOR1PJCsGAPsRJMOsDK0HuowvlDP5ecD3TCSuYU1Fmq0KaqOwvGzBYoIanIup68TuOSxg0OERDfeytUZIvoweRCplqJtX+8iEzWZavhiK/vF/7tgAgeft6yW/y1h0lNRX81ObTp6Nq3vS5wgIgdKNu9RuBtlYHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRT1NNR1hXYjFyYktSazVIZQp3RGNSUFFJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFQUIxc0YvKy8zazNsNUFXCk8wbUtQU2NFZ2dUUWtraG1QTStuUUVzTk52cFRHY0NmTnBXK25FdVpyM0JxdXlML1lnelZnZWs1c090NTZkNXMKQUx5SXY3eVZ4MzJGSndWQk50Q0Q1Q2FoOU9mbzE4NHNwdTd1Y1lCZm96V05xQnVUTm9od3Z2aDk2OEFZYk5DaQpaMUc0T0pHajU2MGVJZ2NiYWRSOTh2eVg5WnFWYklRQ2VWWmdta3JDYStrVzh1bmFwM25uTFZuK3hmV1luL1Z0ClMvbXIwMjRmYjFwK1JjN1pwWFYxRUhIZnNZZ0doUE5MSDBaUG5pTWY4Ty9vZ2hyVWZIRWhqZTRTMGszcDdrOWoKSE9Zd1VmdlBXUWdHNG5LeDBKODd6NDYwQU5oeEx2MHhleEdOODZudlkybzk0VHZMenlzWldLNXZPNjJmbmFrMgpMdDkyWnB2RjZ5eW03OGtDZHd4T1hxQ0pOaGN2ZStqRUFNWFNnNGJpbm9meDY0R3V1cFJjRWE1RGpLa05DTERDCmo4c0FEaUNHSHVDVXhaNW1zNVBSbFpMeDk2R2pUS28xRDJkUy9HSXBzUzJXbFpSUFNwZTE2cHRRUmVUZ29Wa3YKbC9OelZnd1JGZng2a2pmQ01EQWdEOE8xRkU3MWlVWnZlejJvZUY2SW9HK3VnUlQ3eSs4RlRMckZvM2I1Rk5xbAo4QW9VR05BOXVsKzVxeDhjbGFNTm1zNHZPYW9yRzkzNUtxamlFdVVpR3VtYy9kWVU1ZnExVmlsT2FKb0xQNkgrCjZWRlJPdmFVdFgxZm5rczAzakNtVHE0dnUwNjlWNXFCZERWTSs4ZExCMDloWlZtUUY3ZFhVc1N5aTVHOGI2YlUKa01xaVpOak0zU1dxa1o1UkxZeVE1MHdHejZwQUVXZnVRMWxmb1ZEcnJrL2xvUEI0NmxjYVV1b1BXeFg0YTJkZwp4U0prT0VOb1orWUtUQ0ZRdmI5QVZveXE2WEdVdmY0bmhQck1id0tjZ21NbGpEb1c3Mng2TWJHcWhQU0xTbFk3ClA3amd5OHBwQjllbnAyZHE2OUJKVUtwdDBjek5PU0dZY1hQcWtPRXk4SkI2WWhwQ3NCZm03OFB5VkRKb2VMNGcKNVVpSEE4YndQck1EUitIS1IwWWE5RXJYZW1qUlM1WVhYK2lUT1FRVit6UjQ3N1Z6K09MZ29GVS9WL2JyUWN0VgpUTEpYajVKTUUxbzVqVVpnQ1lSSXM1aGlsQ2c2SHZXc2dZa0lEdEtiSXhqK3Jvdk5FWjRvME01T001RWE0RHNLCjZCTVI4YWljQXlqOWJvL3Jnb1NXMHE2NHVYNFdjaHlyMXRWbS9sbXJsM3czc1ZnS3MrRzZ4RnlBSndjcTJNOHkKWlkzcVZ4YjNVM1c1YnhYdXRQelNqKzNwMUJoMEJKQzZLcnRoN2RnbHN2UjMwaWlRRFpQLzNkc0dSb3pLcVFmKwp5N0VzMVNXM3NGWXhQSW12MUVSMFN3bGl4dlN1ZmJmdXZyMk04TUlpQ1V0MFBMaTVFS2E3alduTWxsd3dMRzRTCnZYT1Q1MDg5U253bDl4Z1ppMWxub3BXREhGOTlqVFJWd1E5bm53YnRrVmhKa1d6WlNMTnRKK2dkR21CeTJOUGoKdmZDWVYvZGNJMXZDMnRjclZRNlVuNm9oU2tGZ3c3STQ0aUVhUkViSENHdW11QkoxSm5ENDBkNFVIczhqRlFNRQpSTmFGa3dkdGV1MlBPK1FZL3czREhsZUtVYnR4L3R4WXh4eGVwL2Q1Qk9YaFhPZEE4ZnducTlXSmJDUk1HU1YvCkNWbnhnYjREV2Rlc2hJZFNaTlN4LzhwVGxJRUdsYlBpZDl2MWErajBGTy9wTCtzdFQya0tIczJOV2p1VGUvQlgKQ3NvM2p6Nkt1T1dzU1dENHVMcUpPa2loWkpSbTVPSUwzMHhoSFJXQmVKTEorVURUNE5UZGxHcVFJM1JuQ1dndwpFR3NBSHpaVzdTT0NrdERXYnlCTXEycnE1cXZQd2FIdGI4L1FqcEtDWVdiS0VCTVRoYXd5ZHBaMUZkSytudFJSCmo3c1hWWGNTdWJTajhGQVo3dDNycm1WSlJuMFRpbjVPL1R3R3hlMXJwc2JYdVplczF0U1REcGxrUGlhcHowY04KbGM0VlRxZmxPNzRpWXBscnFoTUtzaHRMMGZlNi8wM0pMUE1TbklSL3V0RWxhbUNRS3NCUWxtbz0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6CWxvY2FsaG9zdAIAAAAAAAAAAQAAAAIAAAAAAAAAFAAoWLCX0+KVG3H04ms2YN95pzUxBrQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVPUUNjMEY1bFpaQUJ3S1dCamN6V0hSUHZGR3d3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBek1EVXhPVEk1TXpKYUZ3MHpOakF6TURJeE9USTVNekphTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFMxREVoamhLVUYzZ0NtSlRCeEZwNGEvTHBQR3VGWDhnNmJEaGRSdjY3dWJ3UA0KYUhzbWJjcllVWm1pRlB2aVluU0dCSXZvdk94RnlrNWlRVkF3RXZhOWM5Qjh6QXZpb0FWQXlJU01ORThSYUhOaGVuVEtEMUJPN3JBdw0KNWs0KzAremlGWDZWQzFFZmVOS3BhRTNTTkNGWG8vVTUxdHRwejhEanp5aWt2dGpBUVgvSmpKVXRQUmJCYjJLcmhuSjhLZk94YTJ6TQ0KZjU3Qm5yUHJYOGljdkNqdTdqYUw0ZkNkWnlmUUdXN0dRVVRIckRVcjRuSW5qU1o5blZlQy9ENXB3NkxRSU5CekZDWW85bVZHZjlqbQ0Ka1NHSkdwK0V3dmdmRVBqYkk2bVA4TXFyWTF1WnNpa0xiOEcxU01PN2ZXK0d6UExITkRXc1BwM3VnTHNQK1VaMi9iT1JBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1I0aGdBd0hRWURWUjBPQkJZRUZEMUsyN2gwRWQ5YkZ5ODRFUVpvbGtRbQ0KRERsS01JRzRCZ05WSFNNRWdiQXdnYTJBRkQxSzI3aDBFZDliRnk4NEVRWm9sa1FtRERsS29YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRNQ0KQUp6UVhtVmxrQUhBcFlHTnpOWWRFKzhVYkRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUJLK09RRVBQc3plcitYeXlvZ2R3R3BFaQ0KSkNmNUF2SDFxMEJDa0VrU0tWZEh4SGMrZmxnYXlPR1AwT015ZFJWR1JvcFBveEpMUXQ5VlR4TnBSOWYwQWF6dEhDcW5iSTZmTjNyRQ0Kc1U3NmdCeW5aQzkxbzN6NitoSXBDb2FGbUM2a1ZTUzR1WThZOEN3SXZ5ZjAzT0xRRWJDbmNBczF2S3NuU1JrNWpkSGlGYVlQblpLMQ0KTXZIMzA2ZHJpUmZsMENtZUFpZ0hjcTAvdHBKN3Uya0NKd0ZPR0dBdEVjZ3ZTMUdYRlkvMTJxQzc0eTNqTmhFVEVlNjM1cHZlc01LWA0KWXAzY296ZE9IRlRGeXFUTkVXOTJUbzBTK2IwTmdRTHIxLzZhVlU0VWNIR3ZnaFlTS294dHVyNkxHd3M5dlVEdmozaUJIU2Y1QlhOVg0KMmYwY3luQjd3Q1NoTHc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEI5VVn84TuzhtuKbDPUybiVCI+rrtc9lNftY5pUDOrrczZ+B18Ktjd/Y3iirc3frlhmGA5o2NrkwXl9xmdujUaTu3BctvXdqb/Mc8z7JBUbMec9KtW9ufLTD9UqmNZ8YxfIuVB4PDrB0wsVYOJzhilQAgFgVk55hE0pNupG+52JXbBK0tQU9njBaZR21pnPBu94gHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRd1l5Mkx4MU5QbnNLMHVuaQpSRXFUK2dJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFRzAra1AycVlvZVpjYUFXCjFTQVhlK0VFZ2dUUWtRdkN3VjErYkNaeEdOQnhSUE9aOFJzK25oa0EzMmpPK1l0b3ZkZkRxK3VCcnZ6aDFNTDMKM2RrbUoyRGlzU1l2cTZvQVVjVFFpRVVjOVB4N1pCSU50Sk5yYVhCNFMyT1dUT3BKVHgyc1FET1FxWmdGZUZibwpFZC96L0ZWL2x4WlZVNy9xdmUxcHhLM1R4NE95QnRwbnZleXgrdWorOE16Szgza2hQV1hqT2RQcVJkbzd1SW5GCjJWd1pINlpLSkU0N2ZzTWgrNnpoamxFTDlkOWd5UXVpNGkzaEJGbS93VkZjUjVDNDJ5MGQybTJaSW9vZy9PN2EKRGoydDV2ZlpDM1l3cEhIK3JHVy81UFhPT1I4Sy9MM0czYytKUGdpamNUVW5WMkxJeHZub3Ruc3hBb3RabU5zeApsNFBNSDJwYm1KbjVhYys2QWwwdWoxTEdxQW8vc0wxSFV0UzRsdzV5bjgzM0s2cDhQMnR2eTFVeFFWWVNkRG5MCkVleFAzZlVsenNraEJsQVpUVzQ4NjFuZkpkM1k2MFFxREdBUnFocVMwNHkxRk5nczJhcW9LSkQxU1hOYmhEc08KclJNWEl1QUJwK0U0SWxKMTFiTjl4ZHh1K3lqcis4ejM4OFo3eHpoS0hTUmhiZXpGVUtHMDVLa3BhbVl2d2ZWbwptRkFrU3g5ZXFLVzB1dDJUTjdzVktPcHFQNTFmS25STkwrN2Q3cGsyRURxb3FGK0lLZVdDUnB1ZlRtQXJrQ2NsCmVjekljRWdPalZLaDdnaHlFOEJ5WjJGTk9kL1ZvdENOQjhybmJWa2RKaC8zQTExMTY4azJzdjhwbDVQcmg1VzkKbzE4c2N1NndjWWc0UmRKRm5zZ1RpeEFJaGxYL3JBSGxnb0pIRFhMZFEyazIzQXNSRWhDSjY3SUt4aEFWUk5NZApsYUF3RmNTckxLQXQ1dGJsTnJ4RjJwL00vVU5xdDRpNVd0QjBZbWZUNnFSSnZTTmZqRmtZdkhEVit4cmdDSFpNCnhEcFJ4eVMwektncHFTaytyNTVsbHByQVRxMXRYRzN0dVoxT0tMQjNMNkNnQzNzQWoza21xSkZidC9BWkZOVTgKL0Zhd1RUWVVUbjMwa1kvZG9sU2gzcnNBQ0toZThJbkR6N3FwaEFXQlFFR2duOGh2OE5WQU11aXFyaTh2Z2hhbAplZEJHYjYxcE10QjZJRkdCWDNMZnVxRENVcWlibUxyYjIya3QrWFRhOU96ajIxRUxRQWp0MlBqSzV5UWNaNEJSCjRERG5tQjkvMXlWa2JnVVpFMGtVbjZXRFg5UEFaY0V5ZWhIMjA3b216dXRWNUxjdFJtWTU1MkdYZWNEcVNCTGwKOEJXd0ZZOUFyMmFseElSRzBnRnd2UEtUaTIxNTdsYWRldnF6S2twdFlrcjlYc05xZ1lVbkloZWJ0cm00NUdQUAoxK3F0b2l5N210dlpndzZOTjY4eU9Ebk9kVVpOZUdBRkU3VDFSWmVXQktCSm9rSjYyMDRyV1RhcllOak1EZHM5CnlPQThGSlZvalFLQUJpcjJYV2x1SFBnTVVQNFpCRjB6U0N0eVR1cnRiYnFjNFZUekpYS1cxVEFXb1hOaW5yQk4KaW1Bc1pieHh0a2lseHRIYUpRS0JJTkViYUoyTExqUVZJdFZKbkQ5SW4wME9kK3Y1cUowYUlHRkdhRzgwN0ovcAprdHJmQXgrQU5rU2hZaXZUWE5yVTN3SWNQSUsyTVlNd092OU91UXliRHZPVjJoRzE0eTdEWlhteDBVUmp5SVBvCmZ5aWpzSGdvVDdaM1R3RnNKUlhxTHFPRnFHVWlVZEhXNWxsb1NUNC9WUVc2c2R5QmVXVlQ4MG1uR1ltNWpXQUQKRHQxamU3eHVVajlyOVlDOXpSRFdReWNkR2dIRkU5MjhwVHB3ZGNydFJQZVNsQ3lPeGdXdVRkNUgzL1JTOEJlMgpKQnVHYW5kQThrTWJ4b0U1bWI3aXE2Q1I0Z29BRjdNMXVlMEZTVlVIdzBaaEZZNWhaT3lqY3NwQ2ZJczVIbWZqCm9teHM3UU9CZXRGYTJURzQxN2JqaG81OVZ5WHZVbDFjMVZjbTFoT3VXVnhkR0hCYWk5ZTI0TGRCemtUcGVVU0oKZ1lwYURMYnNqNS9Ea1VmWXlZTmlTb2hrUXE3SktwODcyTTBkVVJUWE5vNUFncEQrTEZWaE9NTT0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJkROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMTIwLCBVUkk6", + "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACD28VAO7PHZUyGNf4XD4xlQkDmAnngaxHIjIzMCaWxaUgAAAEDKH/Fg4IgHJd0QO0a4aNeQdRzDNguP2LVmfqTc+UiXHnlvrE4CMNd1Oslyhk0nHcwo046C7lk0Y3Q+53KE0zX5AA==", "CertificateAssignments": { "TLS": 1, "WebServer": 2 }, - "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAAbYePTpaDoIXxMSH2GHMSOEFw06fZfB0ewRaYolws3+5QAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAA3vUWDbIyoqsNSfR5fth4dLIE5eSLg6sH+x5hy8eJ4kFQAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAAbYePTpaDoIXxMSH2GHMSOEFw06fZfB0ewRaYolws3+5QAAAAAAEBAAAAAgDQBwAAIAAfVUgy6X3k4SNqOzrUe/wmZKVbO1/vyzxC2b/NNrkOgCAAbYePTpaDoIXxMSH2GHMSOEFw06fZfB0ewRaYolws3+4gAAAAH1VIMul95OEjajs61Hv8JmSlWztf78s8Qtm/zTa5DoA=" + "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIADwjhtVgT8Cg4U5nUZ19uUmgsMx8ojqqGgyUJqe51IhwCAAGqsDc2Y2NGXo3pFTjT4NekzLAnFxFW+R7ORi6PjphCBQAAAAAAEBAAAAAgDQBwAAIADwjhtVgT8Cg4U5nUZ19uUmgsMx8ojqqGgyUJqe51IhwCAAK6xE1m2cDHgWTpW0qZr9BjhQsreQwxKWX+GC9diS6fZQAAAAAAEBAAAAAgDQBwAAIADwjhtVgT8Cg4U5nUZ19uUmgsMx8ojqqGgyUJqe51IhwCAAGqsDc2Y2NGXo3pFTjT4NekzLAnFxFW+R7ORi6PjphCBQAAAAAAEBAAAAAgDQBwAAIADwjhtVgT8Cg4U5nUZ19uUmgsMx8ojqqGgyUJqe51IhwCAAGqsDc2Y2NGXo3pFTjT4NekzLAnFxFW+R7ORi6PjphCAgAAAA8I4bVYE/AoOFOZ1GdfblJoLDMfKI6qhoMlCanudSIcA=" } \ No newline at end of file From cda71588cbb6e04e71201c297a492eec94995206 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Thu, 5 Mar 2026 21:04:44 +0100 Subject: [PATCH 5/7] still_running --- .../SystemConstants/plc_line_IoAddresses.st | 14 +++++++------- .../app/hwc/hwc.gen/plc_line.IoAddresses.json | 18 +++++++++--------- src/io/app/hwc/plc_line.hwl.yml | 2 +- src/io/app/src/IO/IoStructures.st | 14 +++++++------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/io/app/SystemConstants/plc_line_IoAddresses.st b/src/io/app/SystemConstants/plc_line_IoAddresses.st index f85f34b96..f1f056e02 100644 --- a/src/io/app/SystemConstants/plc_line_IoAddresses.st +++ b/src/io/app/SystemConstants/plc_line_IoAddresses.st @@ -59,13 +59,13 @@ END_TYPE TYPE bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT - Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; - Signals_1 AT %X2.2 : BOOL; - Signals_2 AT %X2.3 : BOOL; - Signals_3 AT %X2.4 : BOOL; - Signals_4 AT %X2.5 : BOOL; - Signals_5 AT %X2.6 : BOOL; - Signals_6 AT %X2.7 : BOOL; + Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; + Signals_1 AT %X1.2 : BOOL; + Signals_2 AT %X1.3 : BOOL; + Signals_3 AT %X1.4 : BOOL; + Signals_4 AT %X1.5 : BOOL; + Signals_5 AT %X1.6 : BOOL; + Signals_6 AT %X1.7 : BOOL; END_STRUCT; END_TYPE diff --git a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json index bdfc38fbf..7c4cf5e06 100644 --- a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json +++ b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json @@ -183,49 +183,49 @@ "HardwareIdentifier": 272, "Inputs": { "StartAddress": "4.0", - "EndAddress": "6.7", - "Length": 24, + "EndAddress": "5.7", + "Length": 16, "Source": "AutoAssigned", "SignalLayout": [ { "Name": "Signals_0", "Offset": 0, - "Length": 16, + "Length": 8, "DataType": "OctetString" }, { "Name": "Signals_1", - "Offset": 18, + "Offset": 10, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_2", - "Offset": 19, + "Offset": 11, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_3", - "Offset": 20, + "Offset": 12, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_4", - "Offset": 21, + "Offset": 13, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_5", - "Offset": 22, + "Offset": 14, "Length": 1, "DataType": "Boolean" }, { "Name": "Signals_6", - "Offset": 23, + "Offset": 15, "Length": 1, "DataType": "Boolean" } diff --git a/src/io/app/hwc/plc_line.hwl.yml b/src/io/app/hwc/plc_line.hwl.yml index 29129c76e..8fe146a29 100644 --- a/src/io/app/hwc/plc_line.hwl.yml +++ b/src/io/app/hwc/plc_line.hwl.yml @@ -16,7 +16,7 @@ Devices: IP_ADDRESS_X1: 192.168.100.122/24 PROFINET_DEVICE_NAME_X1: bni00l3 X01: balluff_bni00l3_bni00ay - X02: balluff_bni00l3_bni0099_bni0099 + X02: balluff_bni00l3_bni0099 IoSystems: - Name: profinet_plc_line ControllerInterfaces: diff --git a/src/io/app/src/IO/IoStructures.st b/src/io/app/src/IO/IoStructures.st index 2cc2ef09b..0247855ba 100644 --- a/src/io/app/src/IO/IoStructures.st +++ b/src/io/app/src/IO/IoStructures.st @@ -47,13 +47,13 @@ NAMESPACE AXOpen.Io {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT - Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; - Signals_1 AT %X2.2 : BOOL; - Signals_2 AT %X2.3 : BOOL; - Signals_3 AT %X2.4 : BOOL; - Signals_4 AT %X2.5 : BOOL; - Signals_5 AT %X2.6 : BOOL; - Signals_6 AT %X2.7 : BOOL; + Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; + Signals_1 AT %X1.2 : BOOL; + Signals_2 AT %X1.3 : BOOL; + Signals_3 AT %X1.4 : BOOL; + Signals_4 AT %X1.5 : BOOL; + Signals_5 AT %X1.6 : BOOL; + Signals_6 AT %X1.7 : BOOL; END_STRUCT; END_TYPE From bf3ccc621fb4c790e17042fd006db22c02382b61 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Mon, 9 Mar 2026 16:11:44 +0100 Subject: [PATCH 6/7] wip --- .../SystemConstants/plc_line_IoAddresses.st | 34 ++++- .../app/hwc/hwc.gen/plc_line.IoAddresses.json | 130 ++++++++++++++++-- src/io/app/hwc/plc_line.hwl.yml | 40 +++++- src/io/app/monitor.mon | 23 +--- src/io/app/src/Documentation/Component_4.st | 2 +- src/io/app/src/IO/Inputs.st | 10 +- src/io/app/src/IO/IoStructures.st | 30 +++- 7 files changed, 227 insertions(+), 42 deletions(-) diff --git a/src/io/app/SystemConstants/plc_line_IoAddresses.st b/src/io/app/SystemConstants/plc_line_IoAddresses.st index f1f056e02..a4cb9e995 100644 --- a/src/io/app/SystemConstants/plc_line_IoAddresses.st +++ b/src/io/app/SystemConstants/plc_line_IoAddresses.st @@ -5,16 +5,18 @@ CONFIGURATION IoAddresses bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input AT %IB0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Input_Layout; bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output AT %QB0 : bni00l3_BALLUFF_Link_module_BALLUFF_8_Port_IO_Link_Master_Output_Layout; bni00l3_BALLUFF_Link_module_X01_Input AT %IB1 : bni00l3_BALLUFF_Link_module_X01_Input_Layout; - bni00l3_BALLUFF_Link_module_X02_Input AT %IB4 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; + bni00l3_BALLUFF_Link_module_X02_Input AT %IB6 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; + bni00l3_BALLUFF_Link_module_X03_Input AT %IB43 : bni00l3_BALLUFF_Link_module_X03_Input_Layout; + bni00l3_BALLUFF_Link_module_X04_Input AT %IB46 : bni00l3_BALLUFF_Link_module_X04_Input_Layout; // Module et200sp/A10 - et200sp_A10_Input AT %IB39 : et200sp_A10_Input_Layout; + et200sp_A10_Input AT %IB41 : et200sp_A10_Input_Layout; // Module et200sp/A20 et200sp_A20_Output AT %QB33 : et200sp_A20_Output_Layout; // Module et200sp/A30 - et200sp_A30_Input AT %IB7 : et200sp_A30_Input_Layout; + et200sp_A30_Input AT %IB9 : et200sp_A30_Input_Layout; et200sp_A30_Output AT %QB1 : et200sp_A30_Output_Layout; END_VAR END_CONFIGURATION @@ -47,6 +49,18 @@ END_TYPE TYPE bni00l3_BALLUFF_Link_module_X01_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..3] OF BYTE; + Signals_1 AT %X4.2 : BOOL; + Signals_2 AT %X4.3 : BOOL; + Signals_3 AT %X4.4 : BOOL; + Signals_4 AT %X4.5 : BOOL; + Signals_5 AT %X4.6 : BOOL; + Signals_6 AT %X4.7 : BOOL; + END_STRUCT; +END_TYPE + +TYPE + bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; Signals_1 AT %X2.2 : BOOL; Signals_2 AT %X2.3 : BOOL; @@ -58,7 +72,19 @@ TYPE END_TYPE TYPE - bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT + bni00l3_BALLUFF_Link_module_X03_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; + Signals_1 AT %X2.2 : BOOL; + Signals_2 AT %X2.3 : BOOL; + Signals_3 AT %X2.4 : BOOL; + Signals_4 AT %X2.5 : BOOL; + Signals_5 AT %X2.6 : BOOL; + Signals_6 AT %X2.7 : BOOL; + END_STRUCT; +END_TYPE + +TYPE + bni00l3_BALLUFF_Link_module_X04_Input_Layout : STRUCT Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; Signals_1 AT %X1.2 : BOOL; Signals_2 AT %X1.3 : BOOL; diff --git a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json index 7c4cf5e06..e44f853d7 100644 --- a/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json +++ b/src/io/app/hwc/hwc.gen/plc_line.IoAddresses.json @@ -128,7 +128,62 @@ "HardwareIdentifier": 271, "Inputs": { "StartAddress": "1.0", - "EndAddress": "3.7", + "EndAddress": "5.7", + "Length": 40, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 32, + "DataType": "OctetString" + }, + { + "Name": "Signals_1", + "Offset": 34, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 35, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 36, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 37, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 38, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 39, + "Length": 1, + "DataType": "Boolean" + } + ] + } + }, + { + "Name": "X02", + "Ref": "bni00l3/BALLUFF_Link_module/X02", + "HardwareIdentifier": 272, + "Inputs": { + "StartAddress": "6.0", + "EndAddress": "8.7", "Length": 24, "Source": "AutoAssigned", "SignalLayout": [ @@ -178,12 +233,67 @@ } }, { - "Name": "X02", - "Ref": "bni00l3/BALLUFF_Link_module/X02", - "HardwareIdentifier": 272, + "Name": "X03", + "Ref": "bni00l3/BALLUFF_Link_module/X03", + "HardwareIdentifier": 265, "Inputs": { - "StartAddress": "4.0", - "EndAddress": "5.7", + "StartAddress": "43.0", + "EndAddress": "45.7", + "Length": 24, + "Source": "AutoAssigned", + "SignalLayout": [ + { + "Name": "Signals_0", + "Offset": 0, + "Length": 16, + "DataType": "OctetString" + }, + { + "Name": "Signals_1", + "Offset": 18, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_2", + "Offset": 19, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_3", + "Offset": 20, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_4", + "Offset": 21, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_5", + "Offset": 22, + "Length": 1, + "DataType": "Boolean" + }, + { + "Name": "Signals_6", + "Offset": 23, + "Length": 1, + "DataType": "Boolean" + } + ] + } + }, + { + "Name": "X04", + "Ref": "bni00l3/BALLUFF_Link_module/X04", + "HardwareIdentifier": 266, + "Inputs": { + "StartAddress": "46.0", + "EndAddress": "47.7", "Length": 16, "Source": "AutoAssigned", "SignalLayout": [ @@ -241,8 +351,8 @@ "Name": "DI 16x24VDC ST V1.1", "HardwareIdentifier": 283, "Inputs": { - "StartAddress": "39.0", - "EndAddress": "40.7", + "StartAddress": "41.0", + "EndAddress": "42.7", "Length": 16, "Source": "AutoAssigned", "SignalLayout": [ @@ -467,8 +577,8 @@ "Name": "CM 4xIO-Link V2.2 32I/32O", "HardwareIdentifier": 281, "Inputs": { - "StartAddress": "7.0", - "EndAddress": "38.7", + "StartAddress": "9.0", + "EndAddress": "40.7", "Length": 256, "Source": "AutoAssigned", "SignalLayout": [ diff --git a/src/io/app/hwc/plc_line.hwl.yml b/src/io/app/hwc/plc_line.hwl.yml index 8fe146a29..e12b28f23 100644 --- a/src/io/app/hwc/plc_line.hwl.yml +++ b/src/io/app/hwc/plc_line.hwl.yml @@ -10,13 +10,48 @@ Devices: PROFINET_DEVICE_NAME_X2: 'plc_line_x2' ADMIN_NAME: 'admin' CYCLE_COMMUNICATION_LOAD: 50 + # HIGHLY IMPORTANT NOTE: + # Due to the missing built-in configuration tool for IO-Link on the AX side (something like S7-PCT in TIA Portal), + # it is not recommended to use any IO-Link devices that need to be configured. + # If such devices are used, they must be configured using the vendor tools, matching the EXACT configuration in HWC. + # Currently supported combinations are: + # ------------------------------------------------------------------------- + # BNI0099 connected to ports X01–X08 of the BNI00L3 + # The BNI0099 itself must be configured using the Balluff configuration tool. + # Example of BNI0099 connected to port X04: + # X04: balluff_bni00l3_bni0099 + # ------------------------------------------------------------------------- + # ------------------------------------------------------------------------- + # Extended configuration: BNI0099 connected to ports X01–X08 of the BNI00L3, + # with an additional BNI0099 connected to port 7 of the first BNI0099. + # Both BNI0099 devices (the primary and the additional one) must be configured + # using the Balluff configuration tool. + # Example of an extended BNI0099 with an additional one connected to port X02: + # X02: balluff_bni00l3_bni0099_bni0099 + # ------------------------------------------------------------------------- + # ------------------------------------------------------------------------- + # BNI00AY connected to ports X01–X08 of the BNI00L3 + # The BNI00AY itself must be configured using the Balluff configuration tool. + # Example of BNI00AY connected to port X03: + # X03: balluff_bni00l3_bni00ay + # ------------------------------------------------------------------------- + # ------------------------------------------------------------------------- + # Extended configuration: BNI00AY connected to ports X01–X08 of the BNI00L3, + # with an additional BNI00AY connected to port 15 of the first BNI00AY. + # Both BNI00AY devices (the primary and the additional one) must be configured + # using the Balluff configuration tool. + # Example of an extended BNI00AY with an additional one connected to port X01: + # X01: balluff_bni00l3_bni00ay_bni00ay + # ------------------------------------------------------------------------- - Apply: balluff_bni00l3 Arguments: NAME: bni00l3 IP_ADDRESS_X1: 192.168.100.122/24 PROFINET_DEVICE_NAME_X1: bni00l3 - X01: balluff_bni00l3_bni00ay - X02: balluff_bni00l3_bni0099 + X01: balluff_bni00l3_bni00ay_bni00ay + X02: balluff_bni00l3_bni0099_bni0099 + X03: balluff_bni00l3_bni00ay + X04: balluff_bni00l3_bni0099 IoSystems: - Name: profinet_plc_line ControllerInterfaces: @@ -24,4 +59,3 @@ IoSystems: DeviceInterfaces: - Ref: et200sp/et200sp/PN-IO - Ref: bni00l3/bni00l3/PN-IO - # - Ref: et200sp_1/et200sp_1/PN-IO diff --git a/src/io/app/monitor.mon b/src/io/app/monitor.mon index b5f4de41f..97fd19d8d 100644 --- a/src/io/app/monitor.mon +++ b/src/io/app/monitor.mon @@ -1,23 +1,6 @@ -documentation.componentFive.ExampleComponent._loIndex -documentation.componentFive.ExampleComponent._hiIndex -documentation.componentFive.ExampleComponent._currentHwID -documentation.componentFive.ExampleComponent._currentIndex -documentation.componentFive.ExampleComponent._plcIndex -documentation.componentFive.ExampleComponent._plcHwId -documentation.componentFive.ExampleComponent._ioSystemIndex -documentation.componentFive.ExampleComponent._ioSystemHwId -documentation.componentFive.ExampleComponent._ioSystemNumber -documentation.componentFive.ExampleComponent._stationIndex -documentation.componentFive.ExampleComponent._stationHwId -documentation.componentFive.ExampleComponent._stationNumber -documentation.componentFive.ExampleComponent._moduleIndex -documentation.componentFive.ExampleComponent._moduleHwId -documentation.componentFive.ExampleComponent._slotNumber -documentation.componentFive.ExampleComponent._subModuleIndex -documentation.componentFive.ExampleComponent._subModuleHwId -documentation.componentFive.ExampleComponent._subSlotNumber -documentation.componentFive.ExampleComponent._retval -documentation.componentFive.ExampleComponent._progress +Inputs.bni00l3_BALLUFF_Link_module_X01_Input.Signals_0 +Inputs.bni00l3_BALLUFF_Link_module_X02_Input.Signals_0 + #documentation.componentFour.ExampleComponent.Inputs.C1.Box1.In[0] #documentation.componentFour.ExampleComponent.Inputs.C1.Box2.In[0] #documentation.componentFour.ExampleComponent.Inputs.C1.PortStatus diff --git a/src/io/app/src/Documentation/Component_4.st b/src/io/app/src/Documentation/Component_4.st index c5b9cb2b0..0e62dd825 100644 --- a/src/io/app/src/Documentation/Component_4.st +++ b/src/io/app/src/Documentation/Component_4.st @@ -40,7 +40,7 @@ CLASS Component_4 EXTENDS AXOpen.Core.AxoObject Port_3 := AXOpen.Io.eAxoIOLinkET200SP_Balluff_PortConfig#NONE, // Enter the configuration of the correctly wired boxes connected to Port 3 Port_4 := AXOpen.Io.eAxoIOLinkET200SP_Balluff_PortConfig#BNI00AY_BNI00AY);// Enter the configuration of the correctly wired boxes connected to Port 4 - // A30.Inputs.C1.Box1.In[5] + // A30.Inputs.C1.Box1.In[5] // ExampleComponent.Run(inParent := THIS, // hwID := HwIdentifiers#et200sp_A30_CM_4xIO_Link_V2_2_32I_32O_HwID, // Enter the hardware ID of your correctly wired IO-Link master module based on your error-free, already-compiled hardware configuration // Port_1 := AXOpen.Io.eAxoIOLinkET200SP_Balluff_PortConfig#BNI0099, // Enter the configuration of the correctly wired boxes connected to Port 1 diff --git a/src/io/app/src/IO/Inputs.st b/src/io/app/src/IO/Inputs.st index 45f11d822..bcdec1b88 100644 --- a/src/io/app/src/IO/Inputs.st +++ b/src/io/app/src/IO/Inputs.st @@ -8,13 +8,17 @@ NAMESPACE AXOpen.Io bni00l3_BALLUFF_Link_module_X01_Input AT %B1 : bni00l3_BALLUFF_Link_module_X01_Input_Layout; - bni00l3_BALLUFF_Link_module_X02_Input AT %B4 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; + bni00l3_BALLUFF_Link_module_X02_Input AT %B6 : bni00l3_BALLUFF_Link_module_X02_Input_Layout; + + bni00l3_BALLUFF_Link_module_X03_Input AT %B43 : bni00l3_BALLUFF_Link_module_X03_Input_Layout; + + bni00l3_BALLUFF_Link_module_X04_Input AT %B46 : bni00l3_BALLUFF_Link_module_X04_Input_Layout; // Module et200sp/A10 - et200sp_A10_Input AT %B39 : et200sp_A10_Input_Layout; + et200sp_A10_Input AT %B41 : et200sp_A10_Input_Layout; // Module et200sp/A30 - et200sp_A30_Input AT %B7 : et200sp_A30_Input_Layout; + et200sp_A30_Input AT %B9 : et200sp_A30_Input_Layout; END_STRUCT; END_TYPE diff --git a/src/io/app/src/IO/IoStructures.st b/src/io/app/src/IO/IoStructures.st index 0247855ba..2c7173a19 100644 --- a/src/io/app/src/IO/IoStructures.st +++ b/src/io/app/src/IO/IoStructures.st @@ -33,6 +33,20 @@ NAMESPACE AXOpen.Io {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} bni00l3_BALLUFF_Link_module_X01_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..3] OF BYTE; + Signals_1 AT %X4.2 : BOOL; + Signals_2 AT %X4.3 : BOOL; + Signals_3 AT %X4.4 : BOOL; + Signals_4 AT %X4.5 : BOOL; + Signals_5 AT %X4.6 : BOOL; + Signals_6 AT %X4.7 : BOOL; + END_STRUCT; + END_TYPE + + TYPE + {S7.extern=ReadWrite} + {#ix-attr:[Container(Layout.Wrap)]} + bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; Signals_1 AT %X2.2 : BOOL; Signals_2 AT %X2.3 : BOOL; @@ -46,7 +60,21 @@ NAMESPACE AXOpen.Io TYPE {S7.extern=ReadWrite} {#ix-attr:[Container(Layout.Wrap)]} - bni00l3_BALLUFF_Link_module_X02_Input_Layout : STRUCT + bni00l3_BALLUFF_Link_module_X03_Input_Layout : STRUCT + Signals_0 AT %B0 : ARRAY[0..1] OF BYTE; + Signals_1 AT %X2.2 : BOOL; + Signals_2 AT %X2.3 : BOOL; + Signals_3 AT %X2.4 : BOOL; + Signals_4 AT %X2.5 : BOOL; + Signals_5 AT %X2.6 : BOOL; + Signals_6 AT %X2.7 : BOOL; + END_STRUCT; + END_TYPE + + TYPE + {S7.extern=ReadWrite} + {#ix-attr:[Container(Layout.Wrap)]} + bni00l3_BALLUFF_Link_module_X04_Input_Layout : STRUCT Signals_0 AT %B0 : ARRAY[0..0] OF BYTE; Signals_1 AT %X1.2 : BOOL; Signals_2 AT %X1.3 : BOOL; From 32060251854579dd8017eb0d65f4ffc1bec5cb3d Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:51:17 +0100 Subject: [PATCH 7/7] balluff iolink boxes --- .../src/Documentation/DocumentationContext.st | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/io/app/src/Documentation/DocumentationContext.st b/src/io/app/src/Documentation/DocumentationContext.st index 2d61617e6..22b1667a4 100644 --- a/src/io/app/src/Documentation/DocumentationContext.st +++ b/src/io/app/src/Documentation/DocumentationContext.st @@ -11,11 +11,56 @@ CLASS DocumentationContext EXTENDS AXOpen.Core.AxoContext END_VAR METHOD PROTECTED OVERRIDE Main + VAR_EXTERNAL + Inputs : AXOpen.Io.Inputs; + Outputs : AXOpen.Io.Outputs; + END_VAR + VAR + _tmpBool : BOOL; + END_VAR + THIS.InitializeRootObject(_rootObject); componentOne.Run(_rootObject); componentTwo.Run(_rootObject); componentThree.Run(_rootObject); componentFour.Run(_rootObject); componentFive.Run(_rootObject); + + // Example of BNI0099 connected to port X04, + // accessing digital input connected to the port 7 of the BNI0099 + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X04_Input.Signals_0[0].%X7; + + // Example of an extended BNI0099 with an additional one connected to port X02, + // accessing digital input connected to the port 5 of the first BNI0099 in the chain + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X02_Input.Signals_0[0].%X5; + + // Example of an extended BNI0099 with an additional one connected to port X02, + // accessing digital input connected to the port 3 of the second BNI0099 in the chain + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X02_Input.Signals_0[1].%X3; + + // Example of BNI00AY connected to port X03, + // accessing digital input connected to the port 6 of the BNI00AY + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X03_Input.Signals_0[0].%X6; + + // Example of BNI00AY connected to port X03, + // accessing digital input connected to the port 15 of the BNI00AY + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X03_Input.Signals_0[1].%X7; + + // Example of an extended BNI00AY with an additional one connected to port X01, + // accessing digital input connected to the port 0 of the first BNI00AY in the chain + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X01_Input.Signals_0[0].%X0; + + // Example of an extended BNI00AY with an additional one connected to port X01, + // accessing digital input connected to the port 14 of the first BNI00AY in the chain + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X01_Input.Signals_0[1].%X6; + + // Example of an extended BNI00AY with an additional one connected to port X01, + // accessing digital input connected to the port 2 of the second BNI00AY in the chain + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X01_Input.Signals_0[2].%X2; + + // Example of an extended BNI00AY with an additional one connected to port X01, + // accessing digital input connected to the port 11 of the second BNI00AY in the chain + _tmpBool := Inputs.bni00l3_BALLUFF_Link_module_X01_Input.Signals_0[3].%X3; + END_METHOD END_CLASS