From b585c57b4858565790fde6a542e70e13f082155a Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Thu, 14 May 2026 13:39:04 +0200 Subject: [PATCH 01/14] hard restore all cameras --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index 00d720577..fcb9bc63c 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1110,19 +1110,13 @@ NAMESPACE AXOpen.Components.Cognex.Vision WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= BYTE#0); Outputs.Control.JobLoadID := WORD#0; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= FALSE); - + retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#1, value:= FALSE); retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= FALSE); WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= WORD#0); - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#1, value:= FALSE); - + IF Inputs.Status.CurentJobID > WORD#0 THEN THIS.CallTimers(FALSE); _progress := 301; @@ -1137,11 +1131,16 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#501; END_IF; + retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + _Clock_1Hz.Blink(THIS,TIME#500MS,TIME#500MS); + + Outputs.Control.InitiateJobLoad := _Clock_1Hz.output; WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= _Clock_1Hz.output); IF Inputs.Status.CurentJobID = WORD#0 THEN WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= FALSE); + Outputs.Control.InitiateJobLoad := FALSE; THIS.CallTimers(FALSE); _progress := 302; END_IF; @@ -2276,7 +2275,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision outputsAddress := outputsAddress + UDINT#7; BitOffset := 0; ELSIF CameraNo = BYTE#8 THEN - outputsAddress := outputsAddress + UDINT#8; + outputsAddress := outputsAddress + UDINT#7; BitOffset := 4; END_IF; From f89764bf24210f14b01522a735a71b843a62a351 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Thu, 14 May 2026 13:43:38 +0200 Subject: [PATCH 02/14] fix --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index fcb9bc63c..ff047fed3 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1109,6 +1109,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#1,value:= BYTE#0); WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= BYTE#0); Outputs.Control.JobLoadID := WORD#0; + Outputs.Control.WriteDataId := BYTE#0; retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#1, value:= FALSE); From aa3318b68fd10b08138aef0e8a00511e0af97200 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Fri, 15 May 2026 08:21:35 +0200 Subject: [PATCH 03/14] blinker --- src/timers/ctrl/src/AxoBlinker.st | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/timers/ctrl/src/AxoBlinker.st b/src/timers/ctrl/src/AxoBlinker.st index efa84f366..f53886750 100644 --- a/src/timers/ctrl/src/AxoBlinker.st +++ b/src/timers/ctrl/src/AxoBlinker.st @@ -87,6 +87,7 @@ NAMESPACE AXOpen.Timers output := TRUE; IF(_onTimer.OnDelay(Context := Context ,inSignal := TRUE, TimeDelay:=inOnTime)) THEN _state := 2; + Execute := output; RETURN; END_IF; END_IF; @@ -97,6 +98,8 @@ NAMESPACE AXOpen.Timers _state := 0; END_IF; END_IF; + + Execute := output; END_METHOD METHOD PRIVATE Execute : BOOL @@ -122,6 +125,7 @@ NAMESPACE AXOpen.Timers output := TRUE; IF(_onTimer.OnDelay(Parent:= Parent ,inSignal := TRUE, TimeDelay:=inOnTime)) THEN _state := 2; + Execute := output; RETURN; END_IF; END_IF; @@ -132,6 +136,8 @@ NAMESPACE AXOpen.Timers _state := 0; END_IF; END_IF; + + Execute := output; END_METHOD From 1820098d2397998c65f66b1eda46780bb130307c Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Fri, 15 May 2026 09:28:47 +0200 Subject: [PATCH 04/14] Enhance AxoVisionProHWIDs structure with additional submodule attributes for UserData and Results --- .../AxoVisionProHWIDs.st | 70 ++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st index ad4619c12..6ac225591 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st @@ -6,38 +6,106 @@ NAMESPACE AXOpen.Components.Cognex.Vision HW_Device : UINT; {#ix-set:AttributeName = "<#Hardware ID 'SystemControl' submodule#>"} HW_SystemControl : UINT; + {#ix-set:AttributeName = "<#'SystemControl' submodule's address#>"} + SystemControl_Address : UINT; + {#ix-set:AttributeName = "<#'SystemControl' submodule's length#>"} + SystemControl_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_1' submodule#>"} HW_EngineControl_1 : UINT; + {#ix-set:AttributeName = "<#'EngineControl_1' submodule's address#>"} + EngineControl_1_Address : UINT; + {#ix-set:AttributeName = "<#'EngineControl_1' submodule's length#>"} + EngineControl_1_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_2' submodule#>"} HW_EngineControl_2 : UINT; + {#ix-set:AttributeName = "<#'EngineControl_2' submodule's address#>"} + EngineControl_2_Address : UINT; + {#ix-set:AttributeName = "<#'EngineControl_2' submodule's length#>"} + EngineControl_2_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_3' submodule#>"} HW_EngineControl_3 : UINT; + {#ix-set:AttributeName = "<#'EngineControl_3' submodule's address#>"} + EngineControl_3_Address : UINT; + {#ix-set:AttributeName = "<#'EngineControl_3' submodule's length#>"} + EngineControl_3_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_4' submodule#>"} HW_EngineControl_4 : UINT; + {#ix-set:AttributeName = "<#'EngineControl_4' submodule's address#>"} + EngineControl_4_Address : UINT; + {#ix-set:AttributeName = "<#'EngineControl_4' submodule's length#>"} + EngineControl_4_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_1' submodule#>"} HW_UserData_240B_1 : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_1' submodule's address#>"} + UserData_240B_1_Address : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_1' submodule's length#>"} + UserData_240B_1_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_2' submodule#>"} HW_UserData_240B_2 : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_2' submodule's address#>"} + UserData_240B_2_Address : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_2' submodule's length#>"} + UserData_240B_2_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_3' submodule#>"} HW_UserData_240B_3 : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_3' submodule's address#>"} + UserData_240B_3_Address : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_3' submodule's length#>"} + UserData_240B_3_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_4' submodule#>"} HW_UserData_240B_4 : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_4' submodule's address#>"} + UserData_240B_4_Address : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_4' submodule's length#>"} + UserData_240B_4_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_5' submodule#>"} HW_UserData_240B_5 : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_5' submodule's address#>"} + UserData_240B_5_Address : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_5' submodule's length#>"} + UserData_240B_5_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_64B_1' submodule#>"} HW_UserData_64B_1 : UINT; + {#ix-set:AttributeName = "<#'UserData_64B_1' submodule's address#>"} + UserData_64B_1_Address : UINT; + {#ix-set:AttributeName = "<#'UserData_64B_1' submodule's length#>"} + UserData_64B_1_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_1' submodule#>"} HW_Results_240B_1 : UINT; + {#ix-set:AttributeName = "<#'Results_240B_1' submodule's address#>"} + Results_240B_1_Address : UINT; + {#ix-set:AttributeName = "<#'Results_240B_1' submodule's length#>"} + Results_240B_1_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_2' submodule#>"} HW_Results_240B_2 : UINT; + {#ix-set:AttributeName = "<#'Results_240B_2' submodule's address#>"} + Results_240B_2_Address : UINT; + {#ix-set:AttributeName = "<#'Results_240B_2' submodule's length#>"} + Results_240B_2_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_3' submodule#>"} HW_Results_240B_3 : UINT; + {#ix-set:AttributeName = "<#'Results_240B_3' submodule's address#>"} + Results_240B_3_Address : UINT; + {#ix-set:AttributeName = "<#'Results_240B_3' submodule's length#>"} + Results_240B_3_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_4' submodule#>"} HW_Results_240B_4 : UINT; + {#ix-set:AttributeName = "<#'Results_240B_4' submodule's address#>"} + Results_240B_4_Address : UINT; + {#ix-set:AttributeName = "<#'Results_240B_4' submodule's length#>"} + Results_240B_4_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_5' submodule#>"} HW_Results_240B_5 : UINT; + {#ix-set:AttributeName = "<#'Results_240B_5' submodule's address#>"} + Results_240B_5_Address : UINT; + {#ix-set:AttributeName = "<#'Results_240B_5' submodule's length#>"} + Results_240B_5_Length : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_64B_1' submodule#>"} - HW_Results_64B_1 : UINT; + HW_Results_64B_1 : UINT; + {#ix-set:AttributeName = "<#'Results_64B_1' submodule's address#>"} + Results_64B_1_Address : UINT; + {#ix-set:AttributeName = "<#'Results_64B_1' submodule's length#>"} + Results_64B_1_Length : UINT; END_VAR END_CLASS END_NAMESPACE From 95cdd18d01220bf5a06d065246ea8e10b94bb2f5 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Fri, 15 May 2026 09:43:40 +0200 Subject: [PATCH 05/14] addresses definitions added --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 2 + .../AxoVisionProHWIDs.st | 156 ++++++++++-------- src/showcase/app/AXSharp.config.json | 2 +- .../plc_line.SecurityConfiguration.json | 6 +- 4 files changed, 94 insertions(+), 72 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index ff047fed3..b8ff694c8 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -228,6 +228,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#716; RETURN; END_IF; + Config.HWIDs.SystemControl_Address := _outputsAddress; + Config.HWIDs.SystemControl_Length := _outputsCount; //******************Slot 2*****************// _geoAddr.Slot := UINT#2; _geoAddr.HardwareType := UINT#4; // (4-Module) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st index 6ac225591..8909e559d 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/TypesStructuresAndEnums/AxoVisionProHWIDs.st @@ -6,106 +6,126 @@ NAMESPACE AXOpen.Components.Cognex.Vision HW_Device : UINT; {#ix-set:AttributeName = "<#Hardware ID 'SystemControl' submodule#>"} HW_SystemControl : UINT; - {#ix-set:AttributeName = "<#'SystemControl' submodule's address#>"} - SystemControl_Address : UINT; - {#ix-set:AttributeName = "<#'SystemControl' submodule's length#>"} - SystemControl_Length : UINT; + {#ix-set:AttributeName = "<#'SystemControl' submodule's input area start address#>"} + SystemControl_InAddress : UDINT; + {#ix-set:AttributeName = "<#'SystemControl' submodule's input area length#>"} + SystemControl_InLength : UINT; + {#ix-set:AttributeName = "<#'SystemControl' submodule's output area start address#>"} + SystemControl_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'SystemControl' submodule's output area length#>"} + SystemControl_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_1' submodule#>"} HW_EngineControl_1 : UINT; - {#ix-set:AttributeName = "<#'EngineControl_1' submodule's address#>"} - EngineControl_1_Address : UINT; - {#ix-set:AttributeName = "<#'EngineControl_1' submodule's length#>"} - EngineControl_1_Length : UINT; + {#ix-set:AttributeName = "<#'EngineControl_1' submodule's input area start address#>"} + EngineControl_1_InAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_1' submodule's input area length#>"} + EngineControl_1_InLength : UINT; + {#ix-set:AttributeName = "<#'EngineControl_1' submodule's output area start address#>"} + EngineControl_1_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_1' submodule's output area length#>"} + EngineControl_1_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_2' submodule#>"} HW_EngineControl_2 : UINT; - {#ix-set:AttributeName = "<#'EngineControl_2' submodule's address#>"} - EngineControl_2_Address : UINT; - {#ix-set:AttributeName = "<#'EngineControl_2' submodule's length#>"} - EngineControl_2_Length : UINT; + {#ix-set:AttributeName = "<#'EngineControl_2' submodule's input area start address#>"} + EngineControl_2_InAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_2' submodule's input area length#>"} + EngineControl_2_InLength : UINT; + {#ix-set:AttributeName = "<#'EngineControl_2' submodule's output area start address#>"} + EngineControl_2_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_2' submodule's output area length#>"} + EngineControl_2_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_3' submodule#>"} HW_EngineControl_3 : UINT; - {#ix-set:AttributeName = "<#'EngineControl_3' submodule's address#>"} - EngineControl_3_Address : UINT; - {#ix-set:AttributeName = "<#'EngineControl_3' submodule's length#>"} - EngineControl_3_Length : UINT; + {#ix-set:AttributeName = "<#'EngineControl_3' submodule's input area start address#>"} + EngineControl_3_InAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_3' submodule's input area length#>"} + EngineControl_3_InLength : UINT; + {#ix-set:AttributeName = "<#'EngineControl_3' submodule's output area start address#>"} + EngineControl_3_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_3' submodule's output area length#>"} + EngineControl_3_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'EngineControl_4' submodule#>"} HW_EngineControl_4 : UINT; - {#ix-set:AttributeName = "<#'EngineControl_4' submodule's address#>"} - EngineControl_4_Address : UINT; - {#ix-set:AttributeName = "<#'EngineControl_4' submodule's length#>"} - EngineControl_4_Length : UINT; + {#ix-set:AttributeName = "<#'EngineControl_4' submodule's input area start address#>"} + EngineControl_4_InAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_4' submodule's input area length#>"} + EngineControl_4_InLength : UINT; + {#ix-set:AttributeName = "<#'EngineControl_4' submodule's output area start address#>"} + EngineControl_4_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'EngineControl_4' submodule's output area length#>"} + EngineControl_4_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_1' submodule#>"} HW_UserData_240B_1 : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_1' submodule's address#>"} - UserData_240B_1_Address : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_1' submodule's length#>"} - UserData_240B_1_Length : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_1' submodule's output area start address#>"} + UserData_240B_1_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'UserData_240B_1' submodule's output area length#>"} + UserData_240B_1_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_2' submodule#>"} HW_UserData_240B_2 : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_2' submodule's address#>"} - UserData_240B_2_Address : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_2' submodule's length#>"} - UserData_240B_2_Length : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_2' submodule's output area start address#>"} + UserData_240B_2_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'UserData_240B_2' submodule's output area length#>"} + UserData_240B_2_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_3' submodule#>"} HW_UserData_240B_3 : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_3' submodule's address#>"} - UserData_240B_3_Address : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_3' submodule's length#>"} - UserData_240B_3_Length : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_3' submodule's output area start address#>"} + UserData_240B_3_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'UserData_240B_3' submodule's output area length#>"} + UserData_240B_3_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_4' submodule#>"} HW_UserData_240B_4 : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_4' submodule's address#>"} - UserData_240B_4_Address : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_4' submodule's length#>"} - UserData_240B_4_Length : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_4' submodule's output area start address#>"} + UserData_240B_4_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'UserData_240B_4' submodule's output area length#>"} + UserData_240B_4_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_240B_5' submodule#>"} HW_UserData_240B_5 : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_5' submodule's address#>"} - UserData_240B_5_Address : UINT; - {#ix-set:AttributeName = "<#'UserData_240B_5' submodule's length#>"} - UserData_240B_5_Length : UINT; + {#ix-set:AttributeName = "<#'UserData_240B_5' submodule's output area start address#>"} + UserData_240B_5_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'UserData_240B_5' submodule's output area length#>"} + UserData_240B_5_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'UserData_64B_1' submodule#>"} HW_UserData_64B_1 : UINT; - {#ix-set:AttributeName = "<#'UserData_64B_1' submodule's address#>"} - UserData_64B_1_Address : UINT; - {#ix-set:AttributeName = "<#'UserData_64B_1' submodule's length#>"} - UserData_64B_1_Length : UINT; + {#ix-set:AttributeName = "<#'UserData_64B_1' submodule's output area start address#>"} + UserData_64B_1_OutAddress : UDINT; + {#ix-set:AttributeName = "<#'UserData_64B_1' submodule's output area length#>"} + UserData_64B_1_OutLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_1' submodule#>"} HW_Results_240B_1 : UINT; - {#ix-set:AttributeName = "<#'Results_240B_1' submodule's address#>"} - Results_240B_1_Address : UINT; - {#ix-set:AttributeName = "<#'Results_240B_1' submodule's length#>"} - Results_240B_1_Length : UINT; + {#ix-set:AttributeName = "<#'Results_240B_1' submodule's input area start address#>"} + Results_240B_1_InAddress : UDINT; + {#ix-set:AttributeName = "<#'Results_240B_1' submodule's input area length#>"} + Results_240B_1_InLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_2' submodule#>"} HW_Results_240B_2 : UINT; - {#ix-set:AttributeName = "<#'Results_240B_2' submodule's address#>"} - Results_240B_2_Address : UINT; - {#ix-set:AttributeName = "<#'Results_240B_2' submodule's length#>"} - Results_240B_2_Length : UINT; + {#ix-set:AttributeName = "<#'Results_240B_2' submodule's input area start address#>"} + Results_240B_2_InAddress : UDINT; + {#ix-set:AttributeName = "<#'Results_240B_2' submodule's input area length#>"} + Results_240B_2_InLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_3' submodule#>"} HW_Results_240B_3 : UINT; - {#ix-set:AttributeName = "<#'Results_240B_3' submodule's address#>"} - Results_240B_3_Address : UINT; - {#ix-set:AttributeName = "<#'Results_240B_3' submodule's length#>"} - Results_240B_3_Length : UINT; + {#ix-set:AttributeName = "<#'Results_240B_3' submodule's input area start address#>"} + Results_240B_3_InAddress : UDINT; + {#ix-set:AttributeName = "<#'Results_240B_3' submodule's input area length#>"} + Results_240B_3_InLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_4' submodule#>"} HW_Results_240B_4 : UINT; - {#ix-set:AttributeName = "<#'Results_240B_4' submodule's address#>"} - Results_240B_4_Address : UINT; - {#ix-set:AttributeName = "<#'Results_240B_4' submodule's length#>"} - Results_240B_4_Length : UINT; + {#ix-set:AttributeName = "<#'Results_240B_4' submodule's input area start address#>"} + Results_240B_4_InAddress : UDINT; + {#ix-set:AttributeName = "<#'Results_240B_4' submodule's input area length#>"} + Results_240B_4_InLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_240B_5' submodule#>"} HW_Results_240B_5 : UINT; - {#ix-set:AttributeName = "<#'Results_240B_5' submodule's address#>"} - Results_240B_5_Address : UINT; - {#ix-set:AttributeName = "<#'Results_240B_5' submodule's length#>"} - Results_240B_5_Length : UINT; + {#ix-set:AttributeName = "<#'Results_240B_5' submodule's input area start address#>"} + Results_240B_5_InAddress : UDINT; + {#ix-set:AttributeName = "<#'Results_240B_5' submodule's input area length#>"} + Results_240B_5_InLength : UINT; {#ix-set:AttributeName = "<#Hardware ID 'Results_64B_1' submodule#>"} HW_Results_64B_1 : UINT; - {#ix-set:AttributeName = "<#'Results_64B_1' submodule's address#>"} - Results_64B_1_Address : UINT; - {#ix-set:AttributeName = "<#'Results_64B_1' submodule's length#>"} - Results_64B_1_Length : UINT; + {#ix-set:AttributeName = "<#'Results_64B_1' submodule's input area start address#>"} + Results_64B_1_InAddress : UDINT; + {#ix-set:AttributeName = "<#'Results_64B_1' submodule's input area length#>"} + Results_64B_1_InLength : UINT; END_VAR END_CLASS END_NAMESPACE diff --git a/src/showcase/app/AXSharp.config.json b/src/showcase/app/AXSharp.config.json index db0bd4c10..e6888ce9e 100644 --- a/src/showcase/app/AXSharp.config.json +++ b/src/showcase/app/AXSharp.config.json @@ -1 +1 @@ -{"OutputProjectFolder":"ix","UseBase":false,"NoDependencyUpdate":false,"IgnoreS7Pragmas":false,"SkipDependencyCompilation":true,"TargetPlatfromMoniker":"ax","ProjectFile":"showcase.csproj","UiHostProject":null} \ No newline at end of file +{"OutputProjectFolder":"ix","UseBase":false,"NoDependencyUpdate":false,"IgnoreS7Pragmas":false,"SkipDependencyCompilation":false,"TargetPlatfromMoniker":"ax","ProjectFile":"showcase.csproj","UiHostProject":null} \ No newline at end of file diff --git a/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json b/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json index a30b7efd4..e23eca2d9 100644 --- a/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json +++ b/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json @@ -1,9 +1,9 @@ { - "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAb4gAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkFMQXMwdHByNUxOK0l0clBrREtCUlNqdlJHVQp0L1pmR0paQ2NtVENJbmxJYXRjOS9zYXNRRE5XVExqYlkyTmZhQzhOSERCZForK2pkK0szc0ppUXBsY2ZMSGVzCmJLdFVlN1pra3ZpeHJKS3pubTNxUkNZQWVIbVl4SDhsWk9tMVF3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgqxMhqpsqdAFinL40z5+3mu7DSOpCCXbleIUW3jLQWFsBACAADAAQoXIq2qe7vNC7VguVo31DsAEAAAE2BZvUzIyLnM6KPvNDWEPdOT8tQLG+YXw95LIU0FrCi07G66JE4mAhSA3jEH1U3ecO4kMdJ2vSvN/NcefCjoZdLndjJxiMkWKR+BKFGhTk4V8pr89w0gbqLSBtVzWoovSqh51hPyiWi89KX2qflgOBYtZzGQPmsumqkHZIf97gXKZEx5jz3Ys5RDMNjirdFPbqzreYiWnImrNKG0lo86L9kvZj68TDWJTBLrYTh7qxMcOjrB+8g8twzJs8XNYoDuIusgWrlxlAauUMhE8J+yxg5lNY9wPpaQ5B9VPtpraFgZdu/BrYe3M0CO9Ia92Xztu5jPtdPZRBGG6EhvDuB9X84GpoPFJnytBwIfGP9mg8m6NgVwZYVwPv1B+RrjmhnBzTZKoplRqpCo2rX7W1F3cacpuJjMFtwgIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFACPBUPNPx9HkH0ZxYZeBiTDSRAxxrQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVZQ21jV05lL1pGMDNZeG9EYjQ1M2JxbnJLdEl3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBMU1USXhNREEyTlRGYUZ3MHpOakExTURreE1EQTJOVEZhTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ2RwV1pZYjZQWDBTRS9mQzY0REhMNjl4c1BNOEp3WldLUXJqOXhjVzBEWXZDTg0KNm10eUpFZnNGVXlnRzM5YXJHcTcvS3hXZTkwbW0raURKdEZRNWFKSW9WdjlLYTNDVTdxUlgxSVo5SU42UWFXeHIxTFVtY1p4WlpSUQ0KblFXMWp0LzIvSjlXMEtXUjB1b2R2OFZDUVNvZEovOGx6b1R0SitNdHdiWlgvRVI4V3E1VzNVVGh3NnFYUEZ5YWtPdHhHajFUZnFsdQ0KRUdPMXZaRzdMQ1JVejJKL1Z2SCtwMG5EOXNENFdzZDdvTFVwM05hcWRGbHVXdE83OFJoQW5vRld4eG55RnBKc09tNXptYThIZmVHbQ0KMW1PNGFvU3UyeU5iV0wwNEtOemIvcnFxNHZoSkhUeVd2Vno2TFovSWVQM211RWs3TFdJZHpOOVdOeVNXNG11QmEyVFZBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1FCaGdBd0hRWURWUjBPQkJZRUZOaXFTN2cyWGc4WTdYbWZtaWV3RHNNWQ0KQ0x5ak1JRzRCZ05WSFNNRWdiQXdnYTJBRk5pcVM3ZzJYZzhZN1htZm1pZXdEc01ZQ0x5am9YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hSZw0KS1p4WTE3OWtYVGRqR2dOdmpuZHVxZXNxMGpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVk0WWpGWkFQeVh1My8xWGF4YWdZVmpRQw0KK3pnSllOUGZ1ZU1ML3hVeTUvdEZFWDgvRmZheDhJUmp3Z05CUlRIb3hJcGdpYnlWRkdRU21UdlFkd1NFTVlMRndsOEhsQUdhUWd3eg0KY3dtS2x4TmM2Y3BzNkRXYmFQbTExSFFKRHZVRGh0ZVVnOGNEUjR0RGUvek5oQk9wbTJiNVZrc0VWWmNES1M4bGh3YW1CSzV5eWxSRg0KV3g0YW5GUFl2RlZ6MGhFdjcrbzI5b2xTMy83L0JNRXJtaVFqWlBoZlpqRTlPckw1S284WlpuWWtlc1NxbTRRcFoxOEtBSjlOT2gxVQ0KVllRQjIvZUhLN0NkcmRnOUNxS1ppeENTYW0wT1M3UVZVQ0M0YTN5RHh3UlVvTmI2Y1dXK0ovK1lrd1lGcjRSMGc2bnlydHJyeldvRA0KL0IzdjNkKzczeEpJdWc9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAEF3V4dBOe3K7xRjbvm2jykteh81PJ4EyLoHyQUcgP71f+GC1fxKEL/k+a6NOqYiEHfhtRdCw5qL2BVYG8xDxlcEWrTr4cI8eM+yzTzs9LKWMbOQUp837AKck+oHq9Rp5DHE8FVLqIkSSbRsmrMBUABgAgoqii/JDU3Ocn8cuyiMFT1wmYr4chnNHglChf1yCsrwIHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRZVMwako1OUxMdG5TVnVWawpyUzBBV1FJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFUEpRejd5c1pweTBqWHFVCm9VcmFaaVlFZ2dUUUZ5d080WlBuajN6bUM2ZmtmZHhYRWhwMGQrb0lLaXA5VUNHb3BjekhCSzJjNDBhVTNsS3UKaDBhR1M3bVBjb2hzeE9yckRGV1M1T2V3T1VaMDhFNHhseDBpWGJzYTBXckw2ejJaa1lWK0ttcURCVWx5bHZxagpYWHBtTkJ3MDdaMmpzKzczdmJhM21obE1oSUdVTEtIb0VHTm1vYi9oUU40Q1pSNktjSHZsaVQwdVVYbUk0MG11CmdNMm5WbDNCeTBXWmQvaFg2b3JZVm1zcVVpR1BFMFFkeENwM0lYTTl0N0gxeXJXRXQrVkJpRDlsemsyWjFDdU4KUFhhUDk4T2pDOWovdkRiVWNqRGhFNjRQdEZiVEordnozQ093R01sSW90T2hkemgyaldYM1N5VHhObk9EdVdOeApWSHk0SmFIWUl5YURQSjZ3b1FlamZLcHovbDJGMnNBenZOZjVieHRnREpPMEtqbTYybzR3MFR4Yk82emZTQ1IwCjIzU1Jid0RObWk4bzBhWGdjSlV3ZElpSDZYSk5lUDE3UElDc092bVNLLzduKzJNVERrN280QWFOMStRUlJ5QkgKYUU1R2lPZUJsMU1ueStsN0FsY0lJVHZIaXFldDJhSmpWL3lsN2NFUGJINnhpaHBGMWNqcDJ2NFp4c1B4bHY0cwo3eWZ2aEhFaEV4SDBPRWlRdFlFSkVPeXFIMVU4b3BPRmhRMkFFKytMQXEyWDlJSVg4Y1lLTnM0RkdmMlBST1dHCmdjajBUakRpRktLL25LSEpxYkgwMkdXcWRXb1hrRUYwV0R1WlhoYnpmTlEwZzJVeDd4dXhJQWVlenFTWmFCK2sKMWpNOXpRdEh5aDUwU0lMcUxaUHdldm85eHBoSW9qMlNEc2ZjY3V4QVJTYzRZZ2tCSldrOEh2VmhkblRyakZYOQpKU3dqV25Va2JzN1VZSzdEWFJIZ3NyQzFjaG01NFFtSVliQVlIaXVQYjc1UWEyVkxmWjlQNS93ZTAxc2RFUTdTCm5hek5DaDBFT1BrdHo3Mlh0N0EzTXR3dGNiOGF2WHNJNGdWMjd5NktCZUxkM0dLbWRPQzc1SnR4UWsrdGMzOEoKMWVMVFFjVXk4S2RXRWhFU1JWQnN5aUx4SWtwTU1paGQzR0lRK1VEUittWno4azIxUElBTnhja013dlJLcWRzawptc1NlaUw1ZVNJckZqRWtkWFc5RkRVYkg3c09BNGQvWlIxR05yeU1qZlZheHU0K0VSZzd4alVFZmJ2NE9rM0x4CkphdEhhOVFUU3krYUwrUWVycXd5MTVqeENzYzkvQ3FLcmNTWWlHa2tTV29ObG5VQy9uWHEvWnNEK0lqTXYzZ0YKc2VDVHA0Mnp5Y29qd25weGNhYXo2Y2c0RjZrSG1LR3BoVVNpcStQa1VFUy9UV1lKYWZCQUdPOFlrNHZTOS9veApFaU52OWNZLytVSWcxanF6MTZnMFREODJuUkc1TmhrZmNUeWVOR0UzRnJPaFQ3WlYyWC9MK01KKzl6SGE4Ty9rCkhLQ0h2b1hZcWIwV0ticFllcUF5YVhiUUpCWlZGUFZDSy8zaCtrR2FNdlJJeFFKNXNEeUgweU5GTmdVTUlGNlkKR0YrNzZNVkFTYWMzSHNpL0pzUjh0UTVhZlhtbmhLN0tMZEQ3b3FvS25peXZrMTJ1VlRvWGluTnFZenhBbkJpRApoSWEzT3MyS1d1QS95VWRxTVFoaTdEYmJTZHZaOGpxazNSRlBwVXBmUGtUSmV4Q2NTVzRaT21VYmpRMml0TTNhCm5jbnFBa21RV3RMWkFaTndOVXYwUzBnQU9wdXdwNlg0YjFVU1o1M2RnSDZ5bjlQemh2d1NxemtPTDE4ZTArV1cKTFRINHdBSWNrYXJXdHAwUHp2L0hQRUFUMlpMTTVvenk3QXc1b2FlRng1REJKTzFCcXdrNjhPUnNDTTV6YW12YgpnTGtoZE5xZGJRaWVRNWNPNG9tYk9TR2FuYnRxbzhHNFppMDNaY2lKOHhtT2xoN05wODhGd3RMUXpxSXZBVDIvCldyY3N3NjZ1R3laa1dLSExNM2g5MTNXTC9EUmJtdDkvejlmSjhXN2tSNnd1RHRzdnNNaTFtSEhvMzJ0MkFUcXMKa2dhb0ROLzN4VUdUNmNVWDh3Y05ZS21HSXRUdHUzL2RTMzE0VFdBejZZa2tTaVEvOGhWWlBUcz0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJEROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMSwgVVJJOglsb2NhbGhvc3QCAAAAAAAAAAEAAAACAAAAAAAAABQAjwVDzT8fR5B9GcWGXgYkw0kQMca0BgEABrAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0NCk1JSUVzekNDQTV1Z0F3SUJBZ0lVWUNtY1dOZS9aRjAzWXhvRGI0NTNicW5yS3RJd0RRWUpLb1pJaHZjTkFRRUxCUUF3ZXpFTE1Ba0cNCkExVUVCaE1DV0ZneEVqQVFCZ05WQkFnTUNWTjBZWFJsVG1GdFpURVJNQThHQTFVRUJ3d0lRMmwwZVU1aGJXVXhGREFTQmdOVkJBb00NCkMwTnZiWEJoYm5sT1lXMWxNUnN3R1FZRFZRUUxEQkpEYjIxd1lXNTVVMlZqZEdsdmJrNWhiV1V4RWpBUUJnTlZCQU1NQ1d4dlkyRnMNCmFHOXpkREFlRncweU5qQTFNVEl4TURBMk5URmFGdzB6TmpBMU1Ea3hNREEyTlRGYU1Ic3hDekFKQmdOVkJBWVRBbGhZTVJJd0VBWUQNClZRUUlEQWxUZEdGMFpVNWhiV1V4RVRBUEJnTlZCQWNNQ0VOcGRIbE9ZVzFsTVJRd0VnWURWUVFLREF0RGIyMXdZVzU1VG1GdFpURWINCk1Ca0dBMVVFQ3d3U1EyOXRjR0Z1ZVZObFkzUnBiMjVPWVcxbE1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdnZ0VpTUEwR0NTcUcNClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNkcFdaWWI2UFgwU0UvZkM2NERITDY5eHNQTThKd1pXS1Fyajl4Y1cwRFl2Q04NCjZtdHlKRWZzRlV5Z0czOWFyR3E3L0t4V2U5MG1tK2lESnRGUTVhSklvVnY5S2EzQ1U3cVJYMUlaOUlONlFhV3hyMUxVbWNaeFpaUlENCm5RVzFqdC8yL0o5VzBLV1IwdW9kdjhWQ1FTb2RKLzhsem9UdEorTXR3YlpYL0VSOFdxNVczVVRodzZxWFBGeWFrT3R4R2oxVGZxbHUNCkVHTzF2Wkc3TENSVXoySi9WdkgrcDBuRDlzRDRXc2Q3b0xVcDNOYXFkRmx1V3RPNzhSaEFub0ZXeHhueUZwSnNPbTV6bWE4SGZlR20NCjFtTzRhb1N1MnlOYldMMDRLTnpiL3JxcTR2aEpIVHlXdlZ6NkxaL0llUDNtdUVrN0xXSWR6TjlXTnlTVzRtdUJhMlRWQWdNQkFBR2oNCmdnRXRNSUlCS1RBSkJnTlZIUk1FQWpBQU1BNEdBMVVkRHdFQi93UUVBd0lDOURBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkNCkt3WUJCUVVIQXdJd0V3WURWUjBSQkF3d0NvSUFod1RBcUdRQmhnQXdIUVlEVlIwT0JCWUVGTmlxUzdnMlhnOFk3WG1mbWlld0RzTVkNCkNMeWpNSUc0QmdOVkhTTUVnYkF3Z2EyQUZOaXFTN2cyWGc4WTdYbWZtaWV3RHNNWUNMeWpvWCtrZlRCN01Rc3dDUVlEVlFRR0V3SlkNCldERVNNQkFHQTFVRUNBd0pVM1JoZEdWT1lXMWxNUkV3RHdZRFZRUUhEQWhEYVhSNVRtRnRaVEVVTUJJR0ExVUVDZ3dMUTI5dGNHRnUNCmVVNWhiV1V4R3pBWkJnTlZCQXNNRWtOdmJYQmhibmxUWldOMGFXOXVUbUZ0WlRFU01CQUdBMVVFQXd3SmJHOWpZV3hvYjNOMGdoUmcNCktaeFkxNzlrWFRkakdnTnZqbmR1cWVzcTBqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFZNFlqRlpBUHlYdTMvMVhheGFnWVZqUUMNCit6Z0pZTlBmdWVNTC94VXk1L3RGRVg4L0ZmYXg4SVJqd2dOQlJUSG94SXBnaWJ5VkZHUVNtVHZRZHdTRU1ZTEZ3bDhIbEFHYVFnd3oNCmN3bUtseE5jNmNwczZEV2JhUG0xMUhRSkR2VURodGVVZzhjRFI0dERlL3pOaEJPcG0yYjVWa3NFVlpjREtTOGxod2FtQks1eXlsUkYNCld4NGFuRlBZdkZWejBoRXY3K28yOW9sUzMvNy9CTUVybWlRalpQaGZaakU5T3JMNUtvOFpabllrZXNTcW00UXBaMThLQUo5Tk9oMVUNClZZUUIyL2VISzdDZHJkZzlDcUtaaXhDU2FtME9TN1FWVUNDNGEzeUR4d1JVb05iNmNXVytKLytZa3dZRnI0UjBnNm55cnRycnpXb0QNCi9CM3YzZCs3M3hKSXVnPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0NChcIAQAAswEAAgB8MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABDEpYfwJqrNjipvRBg1qafyL32SksQ6tPwL2Om+eD6nKRmvG4Ze5jHw7CiFyZGJFaTfiaQ4Db4tYAbONVd62c/NBKbS49zpP0/h41Z21dkEgPWdr3V5PBvV5FCcatQq4nRxdAzZ7CKec84eeKYA8OucAIPKIMK25fCRfBHkVFuMieEqMGnCow/YiV9ZFrPIJcGewB14tLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCk1JSUZOVEJmQmdrcWhraUc5dzBCQlEwd1VqQXhCZ2txaGtpRzl3MEJCUXd3SkFRUTVXdXZ2WlU1ZHh1cTNLOXUKK09vYSt3SUNDQUF3REFZSUtvWklodmNOQWdrRkFEQWRCZ2xnaGtnQlpRTUVBU29FRUgyOUlIemowUGFLRFFYZQo4cXdFWTZJRWdnVFE3U2JoNGVjbjlETDExV2NVeTdEelpZM2JvWUVwMTB0ZVJDcDFSb0E4S0xiNVQvYVRBUDFnCmVSZ0UxZ1RqbkVsZHBjZ2xNMHFtclhvRENsaHJablpNcTdHaUUzMThzcHRnaHFIelZvbWx0ZTdJQjNZdXNQbWQKa2J2WlpReHUveHdGS1R5S29zWnZmUDVBN1pLKzVRTjNnQ2lSZTRpZExxQ1d2dmc1K2JFMzg4VjlobEk3OERydAprQnNndFU5c1N1WFMyZEpvL1AyTVRoa2NCbmp0MW1GUFBFMklLTXR3Zklvd3o4NUUvODloMXJ1MGM1REQ2OU9oCjViMWpzRk05SHZhOFkzTWY5Q0ovNUM0VC84Um51ZkFiWHFSZ21CaVd5MThWVkk0MlVUb01scG92eDFQTnZCdXoKRU44ZDFhUzFYaE4xL29IaFhLK2JiK3huK1QrL1VnbmRydVoyckgzNThmc1RrSGFiYStDVi9jbDVhcWdwcUhtZAprZzlrc2hzZmVhK1pLWVFCZTI5QWxiNzU1U2pBL0hTS1JDckJOanFCMlV0TlBXSDlNMTUzd3JsaWxhK0c3YXo0ClZlcmNBb0hSY1IwbUt4dWVuaG9oZ2lHdDVEOUxwR3BvZjdIT1VrQTV2R0hoRkkyMk1QUHFoY0ZTL1o3b3JuSGIKelZXN0g2cXFQTVFqOTlaVU10d2RCYXVHcTFtaUV0RE1FVUJuTGdFNE55RkpsTlYrOUVHNjhzb0tOYTdnaDNacQpJSG5HRkpEWkQwUHJHZjNjbkRSb3cvaHR3ZldtUlRhVElZeUluTVdHOTRRN1BlVTNEcXRtTGVFRWxmcTJTQkF3CnA4emVCREhmUnRIQjhZVGpRMlNkd3hzaytBcGZEZGtGbEJjcGtzN1ZHQ0J6eFY0QUFMMElzV0p2OVF6c1cyYVUKeHBTcXZia1lTU2MyQWlXQ2VZSG9JNnBCM2t3YkNFTkwxOVFlY3M0QmVIcVQvU3NSMU5IaytCZUNRRU8xaXVOdgp2T1FLSWZaZU1UUENHeEMzUXFkNzQzODNaZ1hsRVJSREZXaktzMDhhcU9tblpLRTVxaS9jTkRXemowaDZQZ2ZWCnJ5OUpWV2lMTDRPdXpGZUI0ellPS0lJaGlwRkNhN0pyQXJKMkt0aWZHUVRnK01VOWovSjBmd1Nhc2E2MlBvRkwKNklzRkJDQ0REQlpVeGxHeEplN1hTVVBSZVZSM1ZBUEp6ZGtocjNuaENkSVRtVWN3Z2xwTkRPekIyTGJySThkNQpES1ZOQ3JJU0pVQ2t6K09vYmJabnNIMjNtS0lESkdDQTJFaCtaci9zRUJzQm4vYndRQm8rR25EcmNRZGE4cHBJCjNmSUlpYlcyZThzR2FEUWVSbzY2VGJpTDl4T0w3bmFsaHd3UjNiSDdiK0FjcGVVRXhzd1JQczNEVEo5V3R0T2QKUzU4QzJJRWRrZjMrdFVqUEd3VG1SOGVMRVNiUmV3d1hQMTVUQXlqc0daczJKeWU2WmlQRWl1dXh2R1NtM09mUQpRcGR6TjZyYnpFV3FoVFE3cEU5djdTMDNLalZVcnVvQUlpNjBpb3Z1Z2hLVHYvbUd1N2s3TzlaZWxtM2lyZk1kCnV4N0VPY0dxbVRpVndPVWpXbDlsN0xJV0prV2hGMjJ3Q1MrTENBMExDUE5FUkJBb29NUVVZSGdaSXVuUGMyVFcKalVSalRFTUpXWGxTRjVNd2NOTGNaNVl6cWh3K2ZOOWJuU0RVL1BDbFp6MlcrRk5seDIyRUJDZUdhUlhQTXdUWAp6U21CSUFSMW5wamhvYTdpRlFrOTJkSWo3NmN4UFN1eStUa1ExbFdTL0pSZitITWMyYlJGSFA1TnAvOTFXdnRQCjc1UnJYYmpISGpQem80ZnJLZDA3RUJUUUcxMVgrR05BUU5Cb2x1L3JWNWsrcFhIUTFzQTU4S0FxUjI4NndQTUQKWUk0RWFaMlNBTEYzcWtXNEpUT3RuTmNhdTgxVThPb0ZXK0tzSGJvRzEraStEeGpuWFZxSW1GWkpoREdPVkV5WApNK3ZhL3VhUWtpUGR3Mkx3a1pLUkc5c2MvclhORU0yQ2VEL1Nld1ppdGtDakNYRkRzSDNrWVJvZHZCaVhYNldkCmlJS1VjL21RQS94ZVZVTG9ITDgzWmFsZlpQeXA0QjlNQUNENk0vd1p1UC9UNktVZE9VSGVEVFk9Ci0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCiRETlM6LCBJUCBBZGRyZXNzOjE5Mi4xNjguMTAwLjEsIFVSSTo=", - "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACANKnrH83PvSJ4g3h8EX81PFMx1pK0SzHc5CK26yJz3GQAAAECqAWU7aXkJ7FOR6IZPaZ9sq1kog5Ik0lRD4nbZaxec/iXOWmklcAmK4MvTsXGRa2g4AMIeCBQqABTfeiGRURX9AA==", + "PKIData": "AQAAAAAAAAAAAAAAAAAAAAEBAb4gAAACAAAAAAAAAAAAAwAAAN8ALS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkM2U1gxdU5kQkM2QStpbDlueGI5UHlBT2pXZgpSNUtvRUJKYld6UGJWc0lpVTBaMTVoWWduWmgwNDViWnhqcWJ4UTNreW1KWUlNMVJIMlVWQ3hDemM4L01NVWhPCm1xeEN0eFhjUjJoUlI1QUZTNkxJSVZ3c3RMekhmVzlkQ3Y5cG5nPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCnsBAQACAAAnEAAgJVeKioTj6WeHcnk1IQE8kmOl/oBeXJWG9pc1pDGKSg4BACAADAAQi7fhxrK6Vj5G9qyayj7ZQwEAAAE2seSSsb49AUeL+cWg3j5lZzcIwRNKpoPRUQW06vrzWXRDBuxzxzrQAKkJwZF0aPrXy0uB2ZnFRhiyweq80Hw0Gbfl6zTFY4w23JMaUWilnpu33Dd21tzQ05/1uhVOax4wKRsvhna7ly8OBHN75DKra0m0tNAAy+mgl5bviHaj56UmxakrbeyR0GYa108kO34xYNADk7GwQ4S2v6gEbHbRy/Z8gMbTBYH1SEK+mWz/LDRI7K0JYdqp62+7/G4sCrBVFRwOWPu0FqzqqvoEdhpeKgmdkrDEppiOltuC1mxCHMBIuz0EDapCtgaFqRb5zc1+uAYy5Clr9ew7VAN7Gg5LtTX+Uy2awUJjLnBLzci83nS9y8iEvELlfi50LZxiiO84jcMhKfCXcx+4o89rd3UY8cPu0VoTrAIACWxvY2FsaG9zdAEAAAAAAAAAAQAAAAIAAAAAAAAAFABjHTP1kKDoXGJ7tTwcSfhaeqVyALQGAQAGsC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KTUlJRXN6Q0NBNXVnQXdJQkFnSVVGd2JjYUVKRDBZSmp3ckhQVCtNcW1RWXBxWWN3RFFZSktvWklodmNOQVFFTEJRQXdlekVMTUFrRw0KQTFVRUJoTUNXRmd4RWpBUUJnTlZCQWdNQ1ZOMFlYUmxUbUZ0WlRFUk1BOEdBMVVFQnd3SVEybDBlVTVoYldVeEZEQVNCZ05WQkFvTQ0KQzBOdmJYQmhibmxPWVcxbE1Sc3dHUVlEVlFRTERCSkRiMjF3WVc1NVUyVmpkR2x2Yms1aGJXVXhFakFRQmdOVkJBTU1DV3h2WTJGcw0KYUc5emREQWVGdzB5TmpBMU1UVXdOekl4TlROYUZ3MHpOakExTVRJd056SXhOVE5hTUhzeEN6QUpCZ05WQkFZVEFsaFlNUkl3RUFZRA0KVlFRSURBbFRkR0YwWlU1aGJXVXhFVEFQQmdOVkJBY01DRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYg0KTUJrR0ExVUVDd3dTUTI5dGNHRnVlVk5sWTNScGIyNU9ZVzFsTVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxRw0KU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQzkyb041akhDR2hpOENEcnUvOWZlaHR5ZEs4U2hUODA1cU1pSGdCVFdyTU11Uw0KUFJpbWY3dngvMzNNaXRQZi96ejd2eDNncGJKc1F2eXNXeWp5SFBFeXZXQk04cGlTbjl0RUNaS2NwK0xXdzZFbS9YWHl2bW1GZXRvRg0Kam9LanBWNXlBOUJOQ2lGK0JCUFZORW9qNC8zb3VWbjRtbHVodjZiKzVURzByMXU3ZDZyVEJsUEdIbUQ4OW1vbVptYUhXRUMrUkZkSw0KVm5wZ21ZU2hNRnhRbG5iQi9SSmRqTy9xd1Y1aEZCaktET1FJbTFYQklqNy90Z0dmZUljNWxKczRsSkdjNzFrU2pUci9Sd2VLQjBsQw0KbGxvSWNiWDJXQ1Axb0ZDRDJ0OTVsbU9lVmd1V3RlY0dESHBZZ2oxUkxmMDBCSVNJT0t1bkM0cUVpdTRjYlBUMjNFVXBBZ01CQUFHag0KZ2dFdE1JSUJLVEFKQmdOVkhSTUVBakFBTUE0R0ExVWREd0VCL3dRRUF3SUM5REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSQ0KS3dZQkJRVUhBd0l3RXdZRFZSMFJCQXd3Q29JQWh3VEFxR1FCaGdBd0hRWURWUjBPQkJZRUZHaHdSdXh2cVI5MHNOS0xUTkRnMC8raw0KUC9PWU1JRzRCZ05WSFNNRWdiQXdnYTJBRkdod1J1eHZxUjkwc05LTFRORGcwLytrUC9PWW9YK2tmVEI3TVFzd0NRWURWUVFHRXdKWQ0KV0RFU01CQUdBMVVFQ0F3SlUzUmhkR1ZPWVcxbE1SRXdEd1lEVlFRSERBaERhWFI1VG1GdFpURVVNQklHQTFVRUNnd0xRMjl0Y0dGdQ0KZVU1aGJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wZ2hRWA0KQnR4b1FrUFJnbVBDc2M5UDR5cVpCaW1waHpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVpTVXZ6VFA1TERIL1luVTI2a0hDV3puWA0KYjJYOEtHR1BvaDJxdDh0YmMwOHJzaDJ3dVZFMGpkVU1rVHpKbU84YTNYZVdCcjhWWTU1ZEVUQ21KTm03RFRDM3ZIeVdsMkZtbEVqYQ0KQWlpakJYS3QrRTZpRjNFamVHZ3lJUUpLTWdkK3pYdFN5Vm9jRmdIRmVzVlF1UHZ5ejBTR1lXZ0crQ040NU5PV2tjT1dOUmJla3Q3VQ0Kbm9aRmV6VWJ6cHlWTXAzOHE0T0RSakdwTVpaZUNLZDgwUHhpMkplM25jTmo5RVR5azVCU3hEU3VnOFJlZytiZmN5K3FSdXdpQWdsMA0KU1p6cmRpTEVzVXgzQnVVN24zbjgvaFROeU5mYi9CQnE5S084M0lPMmxnbGpxR2dmdjVOS1MrRGtXSkMxdjhjNURqZmxuelZhY3FGTg0KR0JCcGxvSWhmTGczTkE9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KFwgBAACzAQACAHwwejAUBgcqhkjOPQIBBgkrJAMDAggBAQsDYgAELvz9Pztp3RNA3DIGsgWF0O4PBIBRk874fJxccQ8QP60oJs3TepCsSm47TVW23nN4d79yPlElIIdL8qkLhl6Lo2VYW5KRwLJiG+hbyfUIVl55jfqNLEguMo4hFSnGlDfdR9q+SL9FswnO94kbfCSj9AAgxNblc4UISRfEy1c0jzYH0dECnwJTtBwN1NmIrZ234jcHXi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KTUlJRk5UQmZCZ2txaGtpRzl3MEJCUTB3VWpBeEJna3Foa2lHOXcwQkJRd3dKQVFRU202VEEvMmxmaVpwamhUMApoVndNWlFJQ0NBQXdEQVlJS29aSWh2Y05BZ2tGQURBZEJnbGdoa2dCWlFNRUFTb0VFSWgxU1NVTzBwNW5nK3pxCjUxNnFneVFFZ2dUUU44YlNZWFAwQmJ4aDRaNWcraFREejFPS2hoSDUzWE1XS1VDQkJHWi9rU3FWUDIvcitvd3EKZkZMd0xYdGhkM3lMTFhuR2NmVFJPNlZxTmFtT05TSE5WdlM0ZC9WQmE3MVBzL3dESXpYUWZLaExHekt2WXlnUApmOUpRQi9xWVlUbG52TWNkd2FYM25hck9hUi9YYTRmZUE5TlNrUU9Wd1hVVWdtNmhSaEV0TkhRMmh2Z0xOdi81Ck1wUDRuUGVzdVpVM1ZnbXRNYzBVblg3Y0k4MzVrWERza1Z4b0Q1bFJEMFhrL3lJaWNRWk9ndTMwelphVk5tbDEKVjZTc0lEcG8wNEtaSS9WOXhUNldka2tEYjJhUCt6dUVuNGY0OW9rY2xMRStOTVZTWmdNOWtVOWdjZXJxYjAvOApVNldHZm85MHJEUFNTUXFUZWdKTWUzVnA4UkFXVkVXSktRMGJqWTJ2Y3lnM2ovSzYyWTRUUHRIWTFaNW5wMlZSCnhGQW04K2s5TTlpWXA1TlNNcGhvdXF4TTdkMCtoeUhLSnF3NmlVejBQTG1IZ09GemVpTWgxRmcyOUVMbVkyVVUKdkV2emp3L2Z4WUFRanJMZUdENzhXbExra2M3R0VzUS9aem50WEZjUkpBN0tEM0FxQmNqKzZqZEk3dW5aV1JFMwpQY1ZJWXhqbXVBRkZUZm5sNVN3QzdQYTZmbEFyNmt4V0krVEtLWU9RUm52Y3lNcy9jdDIveTZ5TzNvd1dGL3pzCmc4dklJT3hrVFlZRWwyWGhIMW50Mlo4OWZROEhZUXFwYi9pQjcrZ3pLdUxUTkdmRFlLUGh2UkZZeHAwNTNCWnIKb085Mk5XR0JWakM2ODFUZWRwRzI2Rk1nUXZuRlAyV2JWRU9wRlZQd2xkYXloWnkxTUZxc1hnSU1MTjJVTFpWSwpzWXZmNXNJVVh6ZkhsNUo2ZTRMOHovVmxxRlZmTmtEb3hZT2QrSUNjYlFnZmtNdmpjRExuRzd1NGQ5MFMxUngvCnp1RjNjbEFMbnRUcGJneFNMcnplcmpZbHllMUlWMlJEajVodGJGM1pqQWhNVUJBcGRIcDJtR25uUllRaVNtVVUKTFFQUUpnamM3WVJQSm5xVGoxVWtkWDBUd3Zpalo5OE1hY0pNQzBhbGlRVkVjTzEvMzdUY2l2UUpTRFZoOUdtVApVT210WUd4K3Z5OFJZWXYyTVpIVFM2SW1jbXpxWU8yYndFQU05UTFzWE5TZjZDV25lcjFldFBuT1VFVVdtVnd1CmpzMmM1MHp0MXhZTFlnKzVmUEliZDJmTWZ0anZvN0VERlg0N2QrZU5rK3kwMFQxZCtWVUdYb3RMUytkeXNleW8KQi9JdVh0M09zTFp4VUliTlI5NXFsWG92dGpKUE00Y0hGdXYwcVY5eG1QczRhZW9WbXZyd1gvV2IvM2FhaE9TUwpVaXhYU3d2UC90bFF3YlU2d3VoUUNVMlBsemRXa2szMzVFYWVvWUQzWk02ZFBiaktOSmpxYk81dU5FcXZSN0lXCjYzQkFKT3JPMTFEK1c1bmRMc2J0c3lVTnd2a2dmeVMrL1dCVkhRSDJBaTQzZFo1c3dicjBzS2R3NGhyVWNsVy8KS2hIaytUU0V1RWNEZEhBNnRmNk9jL25qRWZIeGhUaEhIODVaQmt1K0FiVWovNGFSeDRPNTJtckxIWDRmRWJjSwpMSUp5UlpzaExqU1JTTGdkWnQxR1JrM2srL05SY2l6Qm1XODdSaXYzdE82Y0tLQU42WFh3QmcxbHlOTG1GRlpqCnl0Y0tYZGkxaThGUU9Sbm05VHdQSzJRNVFybnNWbitqSk5xYUMxREtXRC80TDQrWG1Qa3ZHODROSXJmT2s5K2sKNStJVFJ4ellnR2p5T1VIUWRmK1pNUDl0VHBBNlRZQ3ZGVFB5UlQveVRRK3lBeTFmM1ZZc09MRWRQWU40MW5ZdApBL0l1Ukpmc2V6N0RCazN3UDZkcXVTWGUxSVcvY1hFTWdWOFpxcEJ5NFJuRUhneStDYUtncGZMRFJKZFpucWlECjdKQXpEOXpNMksrVkRLRE9SdU45akRyME9QV3h2WWVsa0xqNEhzT0pka1V5OE5DeVNtVGJDNlRQdFF1ZzR5ajAKQmJPSzVCWHdud3ZKRFltaGlUdWd2TkYvOEZNN2E1VUtJenFuMjd5RGtUakNsYXFlTFE3Q3lhST0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KJEROUzosIElQIEFkZHJlc3M6MTkyLjE2OC4xMDAuMSwgVVJJOglsb2NhbGhvc3QCAAAAAAAAAAEAAAACAAAAAAAAABQAYx0z9ZCg6Fxie7U8HEn4WnqlcgC0BgEABrAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0NCk1JSUVzekNDQTV1Z0F3SUJBZ0lVRndiY2FFSkQwWUpqd3JIUFQrTXFtUVlwcVljd0RRWUpLb1pJaHZjTkFRRUxCUUF3ZXpFTE1Ba0cNCkExVUVCaE1DV0ZneEVqQVFCZ05WQkFnTUNWTjBZWFJsVG1GdFpURVJNQThHQTFVRUJ3d0lRMmwwZVU1aGJXVXhGREFTQmdOVkJBb00NCkMwTnZiWEJoYm5sT1lXMWxNUnN3R1FZRFZRUUxEQkpEYjIxd1lXNTVVMlZqZEdsdmJrNWhiV1V4RWpBUUJnTlZCQU1NQ1d4dlkyRnMNCmFHOXpkREFlRncweU5qQTFNVFV3TnpJeE5UTmFGdzB6TmpBMU1USXdOekl4TlROYU1Ic3hDekFKQmdOVkJBWVRBbGhZTVJJd0VBWUQNClZRUUlEQWxUZEdGMFpVNWhiV1V4RVRBUEJnTlZCQWNNQ0VOcGRIbE9ZVzFsTVJRd0VnWURWUVFLREF0RGIyMXdZVzU1VG1GdFpURWINCk1Ca0dBMVVFQ3d3U1EyOXRjR0Z1ZVZObFkzUnBiMjVPWVcxbE1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdnZ0VpTUEwR0NTcUcNClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUM5Mm9ONWpIQ0doaThDRHJ1LzlmZWh0eWRLOFNoVDgwNXFNaUhnQlRXck1NdVMNClBSaW1mN3Z4LzMzTWl0UGYveno3dngzZ3BiSnNRdnlzV3lqeUhQRXl2V0JNOHBpU245dEVDWktjcCtMV3c2RW0vWFh5dm1tRmV0b0YNCmpvS2pwVjV5QTlCTkNpRitCQlBWTkVvajQvM291Vm40bWx1aHY2Yis1VEcwcjF1N2Q2clRCbFBHSG1EODltb21abWFIV0VDK1JGZEsNClZucGdtWVNoTUZ4UWxuYkIvUkpkak8vcXdWNWhGQmpLRE9RSW0xWEJJajcvdGdHZmVJYzVsSnM0bEpHYzcxa1NqVHIvUndlS0IwbEMNCmxsb0ljYlgyV0NQMW9GQ0QydDk1bG1PZVZndVd0ZWNHREhwWWdqMVJMZjAwQklTSU9LdW5DNHFFaXU0Y2JQVDIzRVVwQWdNQkFBR2oNCmdnRXRNSUlCS1RBSkJnTlZIUk1FQWpBQU1BNEdBMVVkRHdFQi93UUVBd0lDOURBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkNCkt3WUJCUVVIQXdJd0V3WURWUjBSQkF3d0NvSUFod1RBcUdRQmhnQXdIUVlEVlIwT0JCWUVGR2h3UnV4dnFSOTBzTktMVE5EZzAvK2sNClAvT1lNSUc0QmdOVkhTTUVnYkF3Z2EyQUZHaHdSdXh2cVI5MHNOS0xUTkRnMC8ra1AvT1lvWCtrZlRCN01Rc3dDUVlEVlFRR0V3SlkNCldERVNNQkFHQTFVRUNBd0pVM1JoZEdWT1lXMWxNUkV3RHdZRFZRUUhEQWhEYVhSNVRtRnRaVEVVTUJJR0ExVUVDZ3dMUTI5dGNHRnUNCmVVNWhiV1V4R3pBWkJnTlZCQXNNRWtOdmJYQmhibmxUWldOMGFXOXVUbUZ0WlRFU01CQUdBMVVFQXd3SmJHOWpZV3hvYjNOMGdoUVgNCkJ0eG9Ra1BSZ21QQ3NjOVA0eXFaQmltcGh6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFaU1V2elRQNUxESC9ZblUyNmtIQ1d6blgNCmIyWDhLR0dQb2gycXQ4dGJjMDhyc2gyd3VWRTBqZFVNa1R6Sm1POGEzWGVXQnI4Vlk1NWRFVENtSk5tN0RUQzN2SHlXbDJGbWxFamENCkFpaWpCWEt0K0U2aUYzRWplR2d5SVFKS01nZCt6WHRTeVZvY0ZnSEZlc1ZRdVB2eXowU0dZV2dHK0NONDVOT1drY09XTlJiZWt0N1UNCm5vWkZlelVienB5Vk1wMzhxNE9EUmpHcE1aWmVDS2Q4MFB4aTJKZTNuY05qOUVUeWs1QlN4RFN1ZzhSZWcrYmZjeStxUnV3aUFnbDANClNaenJkaUxFc1V4M0J1VTduM244L2hUTnlOZmIvQkJxOUtPODNJTzJsZ2xqcUdnZnY1TktTK0RrV0pDMXY4YzVEamZsbnpWYWNxRk4NCkdCQnBsb0loZkxnM05BPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0NChcIAQAAswEAAgB8MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBH2Ns1iAsGLe1tc4AEEzYW9NPOejDkRrdaYv2WmxsrVVfyE2x54gxf+fT/ZogpPqG5SLisG5dzRS2jYB1LxfvxRh1OL9ch7916bKcSYNfZn/+dtEDUBpA+0+MJylOvaX6JPhWO9bGkCvjHhkDXyO9wAII8Zxm0ew9IP3zi1A0+NttHDQttesg6/WeP6BjlR1UH8B14tLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCk1JSUZOVEJmQmdrcWhraUc5dzBCQlEwd1VqQXhCZ2txaGtpRzl3MEJCUXd3SkFRUVNBei9rWER3SzF1UEtvUkEKeG9mdXRnSUNDQUF3REFZSUtvWklodmNOQWdrRkFEQWRCZ2xnaGtnQlpRTUVBU29FRUZBNHZ6OTdJZ0xuUUZaVgpvNWRNS3BZRWdnVFF3ZDh2NlF0ZGU1amFtdzNJTVJNUFowVWpFTTN6TGpMN3JINi91a1dXbzBIMFp3c3BKaHBtCjNvRzR2am5xSHRkRGN5Wmg1b0JreXBlQWlaMUhOZWRzZUdsQWxZZFZSRUJES1N6Q1hUMStmbkFWRmZxVjd1cEIKdyt2UmRIQ0Q1WDBpNjBrVnppZlNaY2tJUkpwYm51V25pczZMOGp1RDhFdHNSNHlEbnNERUJsaGpTbWxtWHl1NwpHRFliOVBDWlE2bWdVQlRLQTRDeVdveHpwM0tIakVPRERXUG4wdG5pYzdDUVFKdjRNNEJxMFdBQWx0UlA2OTlRClVtLzUyQ3BjeE1XQXhHSndDY09jRENFelBvZ21DUllnUHM4RElyNEtxb3l4Wm95QU9VWkFjLzRIRGFFMkdkUncKRldqcnQ0Z2FYeEZRTDFPb3UvRWcxNUF0K2tnVkxGTktJcFY1OHl4empHYUVpVnpPQWQ1V3FYYURGRmpMSTErcAp1R2twUzE0cFVoK3IwUGZYRU4vR3R3bkJRNzdSZHVRbHk4a3Y3MnA0WUVmUzd3K0JhQnorc3JTYXo0U3JwOFpoClVlQXVMcXMzaG04Q0xwMnlxcUxxMS9PWUJtWUZMSlRXdTZwZlBkL0lGMEF6cG9mNVVtWFdiN1VGT1NGWkVoK0IKR21iS2JHYlFzcW1QWlNzMm16eUVPS2R3M2ZxSjBkdEQrYkhYYzBDdXd1MU51STh2TWNadlhnbnpsb1R5UkJFNgpPblh3dUdTNlhWUFgxeVRGeW93S2JIUy9TWXl0RkU0VFRUV012QjlzNEl6R0lsTHNuNDNUSThQS2hnUEtWUkJECmZHMzF0WU1NQS95WWRnb3dxZ01vMFJhMnlnRnRwM2hCOWsyNHQ0bW9WR21ibU5manZrZDJ3cnBqcmo5YnAxYTcKcFBtaXFubWNLYmtINVhrbGpab2pqTENUaHlNbStFdUd0c1VseGNEKzNqaW5tb0Q4YjZEdTlDUjBtU2VOS2dkQgpZQVFEN1RyM0VlSGh1UWVKWFU5RkFFUVp5S3FJaDdrc0R2VUtzRUxaeFRhcWF4aHlwZFhVV3l3L3dJd0Y2bHlyCjZPODF1bHRNMTQvQXpQdXVGRXBFbjYzRzM1TEN5ZWU4MXVod3NHR01TSXZPaUxxa2FsZStZNEZocHJiMG5sMmIKaVJwTnQzalp1U0w3UG5DUmQ0RGUvZWhKZzNZSitvdEM0Qld6aEI2MkxvdlRNZWpYazY3a1RNQU03Y0lHMVlBYgp1T3E4OG9hRXJ3L29xY0hrYkJ5allOanBldDZxSko5MVM0bStycmc0ZFJheXVNNDNLYmhUbWphTzBQQ0luNEFECmdHOFB1Nm16OEFKRWhQU2diV0ZmNnJOcy94Tzcwck9Hc2dUbWJzVEUxL09OR3hkU3BaZUZ6LzNIeVpVNTkzQzUKV0NmOXlvL0VWUk05cUdQRm1PREpYcUFGYUwwc0lBWGlYTzRBRzNNL1c3VGtHekFlSXkzOXFNOHh6VTFnOHZ0VApwanVONk1FR2Q1cG1MY3pzRmpXeUxTbWVrbjI3K0xSSGNJRnErQmFsNzVYb2NER1dudlFZWjNuVjBOVE9lK0l4CjFScE55RzVDcko4cjgvOEhjN085cHBRTFh3ZURVSGVDLzIvbkdXSERtNXZxMmdlbHlxS2pJa1ZkeHI4QnZrS08KaUFQQWVsckF2dUF4UWs4MmhDZ3VmanNsZ2pnWFVDeXlXaWdLc09vN1lRTTVHaXZySlRFc3p6dVdCMmJyYUlsTwozdkZHaXNaQ2ZJbXVKUEdYeTlRZmhEandJbnJ0WEVCbnE2cDNnalJlSDU5Y3ZiVHFtN29Sb0VYOUtpZndEc3JQCkRLR3AvakU4dnJkeXlLZ2MxU3BldDVFYURyclNieFZCQWZOM2RyMTNGUytVeG1qQ244dFhNcnI2OVdRN1pINDEKRUZpdVZESm1XYjJaOCt5ckhXdHFOTStjN2w4dUh4cmlsNVl6QTI1SG5HU2kwSkFzWGZsaVU0TUtoSkg1WmE0RgpPUFJTNGZqVjRXN3lhbC9Hb0Jxcy9xL0toN2NxeEFLanlFZ1Bua2llc3B4KzVxZVl4MFllZXpnejYwYzI2c3Z2CkJqamRMRnBIcXV5T3ZGQlZxMHRISzZnUUhQeXZPbHNPdmZ5cmYvVE45SGo5QTdSSkMyQUtHTjg9Ci0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCiRETlM6LCBJUCBBZGRyZXNzOjE5Mi4xNjguMTAwLjEsIFVSSTo=", + "UserData": "AgAAAAAAAAAAAAAAAAAAAAEAAAAFAGFkbWludAAAAAEAAAEBAAEFAAAnEAAAACCHJEBvHYviYWzeHAudFtirIfVLXmnbZtii4VVgO0rFWgAAAEBKRZwnxY4Bfxy++GiPhGSNcx9l60iPzvj+w2xVkNu3Y4I32/zuoscB7R54D7uESlcQ0zqsWedZdOfe1fZmvt03AA==", "CertificateAssignments": { "TLS": 1, "WebServer": 2 }, - "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIAD4TwVw4BGHeicAmfiEpIkr2CXsr07nzppvPsG8K1pmSSAAhZU6NYsmC72Ir7DKlVvmQpdp8DRqr88jX2MwAMJUCA1QAAAAAAEBAAAAAgDQBwAAIAD4TwVw4BGHeicAmfiEpIkr2CXsr07nzppvPsG8K1pmSSAA2OBNTqmeUNk/OVoaxiLy0vji5kg1glRYM0IRnIZhx0ZQAAAAAAEBAAAAAgDQBwAAIAD4TwVw4BGHeicAmfiEpIkr2CXsr07nzppvPsG8K1pmSSAAhZU6NYsmC72Ir7DKlVvmQpdp8DRqr88jX2MwAMJUCA1QAAAAAAEBAAAAAgDQBwAAIAD4TwVw4BGHeicAmfiEpIkr2CXsr07nzppvPsG8K1pmSSAAhZU6NYsmC72Ir7DKlVvmQpdp8DRqr88jX2MwAMJUCA0gAAAA+E8FcOARh3onAJn4hKSJK9gl7K9O586abz7BvCtaZkk=" + "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAk8sLUPu9xFk3Qdse0j9rzoWMkmPkatYswDi7QmJ6VPVQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAEcSJWeZMDmrZvkYFOygiehG/01uxiCv5LVhHYzwo3ZVQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAk8sLUPu9xFk3Qdse0j9rzoWMkmPkatYswDi7QmJ6VPVQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAk8sLUPu9xFk3Qdse0j9rzoWMkmPkatYswDi7QmJ6VPUgAAAAg5nKVvZdimynpTehb3MGiwJ3VLow/kYq0XwuZ94cgAc=" } \ No newline at end of file From ae33e36ddcd7b83405ae72d2ebed5f99a2f007e7 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Fri, 15 May 2026 09:51:35 +0200 Subject: [PATCH 06/14] addresses read-out added --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index b8ff694c8..f14602d25 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -228,8 +228,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#716; RETURN; END_IF; - Config.HWIDs.SystemControl_Address := _outputsAddress; - Config.HWIDs.SystemControl_Length := _outputsCount; + Config.HWIDs.SystemControl_InAddress := _inputsAddress; + Config.HWIDs.SystemControl_InLength := _inputsCount; + Config.HWIDs.SystemControl_OutAddress := _outputsAddress; + Config.HWIDs.SystemControl_OutLength := _outputsCount; //******************Slot 2*****************// _geoAddr.Slot := UINT#2; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -270,6 +272,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#726; RETURN; END_IF; + Config.HWIDs.EngineControl_1_InAddress := _inputsAddress; + Config.HWIDs.EngineControl_1_InLength := _inputsCount; + Config.HWIDs.EngineControl_1_OutAddress := _outputsAddress; + Config.HWIDs.EngineControl_1_OutLength := _outputsCount; //******************Slot 3*****************// _geoAddr.Slot := UINT#3; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -310,6 +316,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#736; RETURN; END_IF; + Config.HWIDs.EngineControl_2_InAddress := _inputsAddress; + Config.HWIDs.EngineControl_2_InLength := _inputsCount; + Config.HWIDs.EngineControl_2_OutAddress := _outputsAddress; + Config.HWIDs.EngineControl_2_OutLength := _outputsCount; //******************Slot 4*****************// _geoAddr.Slot := UINT#4; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -350,6 +360,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#746; RETURN; END_IF; + Config.HWIDs.EngineControl_3_InAddress := _inputsAddress; + Config.HWIDs.EngineControl_3_InLength := _inputsCount; + Config.HWIDs.EngineControl_3_OutAddress := _outputsAddress; + Config.HWIDs.EngineControl_3_OutLength := _outputsCount; //******************Slot 5*****************// _geoAddr.Slot := UINT#5; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -390,6 +404,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#756; RETURN; END_IF; + Config.HWIDs.EngineControl_4_InAddress := _inputsAddress; + Config.HWIDs.EngineControl_4_InLength := _inputsCount; + Config.HWIDs.EngineControl_4_OutAddress := _outputsAddress; + Config.HWIDs.EngineControl_4_OutLength := _outputsCount; //******************Slot 6*****************// _geoAddr.Slot := UINT#6; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -430,6 +448,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#766; RETURN; END_IF; + Config.HWIDs.UserData_240B_1_OutAddress := _outputsAddress; + Config.HWIDs.UserData_240B_1_OutLength := _outputsCount; //******************Slot 7*****************// _geoAddr.Slot := UINT#7; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -470,6 +490,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#776; RETURN; END_IF; + Config.HWIDs.UserData_240B_2_OutAddress := _outputsAddress; + Config.HWIDs.UserData_240B_2_OutLength := _outputsCount; //******************Slot 8*****************// _geoAddr.Slot := UINT#8; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -510,6 +532,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#786; RETURN; END_IF; + Config.HWIDs.UserData_240B_3_OutAddress := _outputsAddress; + Config.HWIDs.UserData_240B_3_OutLength := _outputsCount; //******************Slot 9*****************// _geoAddr.Slot := UINT#9; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -550,6 +574,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#796; RETURN; END_IF; + Config.HWIDs.UserData_240B_4_OutAddress := _outputsAddress; + Config.HWIDs.UserData_240B_4_OutLength := _outputsCount; //******************Slot 10*****************// _geoAddr.Slot := UINT#10; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -590,6 +616,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#806; RETURN; END_IF; + Config.HWIDs.UserData_240B_5_OutAddress := _outputsAddress; + Config.HWIDs.UserData_240B_5_OutLength := _outputsCount; //******************Slot 11*****************// _geoAddr.Slot := UINT#11; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -630,6 +658,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#816; RETURN; END_IF; + Config.HWIDs.UserData_64B_1_OutAddress := _outputsAddress; + Config.HWIDs.UserData_64B_1_OutLength := _outputsCount; //******************Slot 12*****************// _geoAddr.Slot := UINT#12; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -670,6 +700,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#826; RETURN; END_IF; + Config.HWIDs.Results_240B_1_InAddress := _inputsAddress; + Config.HWIDs.Results_240B_1_InLength := _inputsCount; //******************Slot 13*****************// _geoAddr.Slot := UINT#13; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -710,6 +742,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#836; RETURN; END_IF; + Config.HWIDs.Results_240B_2_InAddress := _inputsAddress; + Config.HWIDs.Results_240B_2_InLength := _inputsCount; //******************Slot 14*****************// _geoAddr.Slot := UINT#14; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -750,6 +784,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#846; RETURN; END_IF; + Config.HWIDs.Results_240B_3_InAddress := _inputsAddress; + Config.HWIDs.Results_240B_3_InLength := _inputsCount; //******************Slot 15*****************// _geoAddr.Slot := UINT#15; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -790,6 +826,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#856; RETURN; END_IF; + Config.HWIDs.Results_240B_4_InAddress := _inputsAddress; + Config.HWIDs.Results_240B_4_InLength := _inputsCount; //******************Slot 16*****************// _geoAddr.Slot := UINT#16; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -830,6 +868,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#866; RETURN; END_IF; + Config.HWIDs.Results_240B_5_InAddress := _inputsAddress; + Config.HWIDs.Results_240B_5_InLength := _inputsCount; //******************Slot 17*****************// _geoAddr.Slot := UINT#17; _geoAddr.HardwareType := UINT#4; // (4-Module) @@ -870,6 +910,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#876; RETURN; END_IF; + Config.HWIDs.Results_64B_1_InAddress := _inputsAddress; + Config.HWIDs.Results_64B_1_InLength := _inputsCount; + //******************************************// + IF inParent = NULL THEN Messenger.Activate(UINT#1130,eAxoMessageCategory#Error); From 171f91e184e0eead70426a6dd8080cc817243487 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Fri, 15 May 2026 11:14:03 +0200 Subject: [PATCH 07/14] read results data copying completelly rewritten --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 437 ++++++++++-------- 1 file changed, 240 insertions(+), 197 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index f14602d25..d2f32cc8e 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -130,10 +130,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision _sendDataBufferID : BYTE; _sendDataJobID : BYTE; _sendDataLength : UINT; - _inputsAddress : UDINT; - _inputsCount : UINT; - _outputsAddress : UDINT; - _outputsCount : UINT; + // _inputsAddress : UDINT; + // _inputsCount : UINT; + // _outputsAddress : UDINT; + // _outputsCount : UINT; END_VAR /// @@ -148,10 +148,14 @@ NAMESPACE AXOpen.Components.Cognex.Vision END_VAR VAR_TEMP SeparatorPos : INT; - inputsAddress : UDINT; - inputsCount : UINT; - outputsAddress : UDINT; - outputsCount : UINT; + // inputsAddress : UDINT; + // inputsCount : UINT; + // outputsAddress : UDINT; + // outputsCount : UINT; + _inputsAddress : UDINT; + _inputsCount : UINT; + _outputsAddress : UDINT; + _outputsCount : UINT; retValRdAddr : WORD; i : Int; BitOffset : Int; @@ -159,6 +163,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision _tmpWord : WORD; index : UINT; + _maxindex : UINT; END_VAR @@ -1048,58 +1053,53 @@ NAMESPACE AXOpen.Components.Cognex.Vision RETURN; END_IF; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount);//(LADDR := Component.HW.HW_SystemControl, PIADDR => inputsAddress, PICount => inputsCount, PQADDR => outputsAddress, PQCount => outputsCount); - IF CameraNo = BYTE#1 THEN - inputsAddress := inputsAddress + UDINT#8; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#8; BitOffset := 0; ELSIF CameraNo = BYTE#2 THEN - inputsAddress := inputsAddress + UDINT#8; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#8; BitOffset := 4; ELSIF CameraNo = BYTE#3 THEN - inputsAddress := inputsAddress + UDINT#9; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#9; BitOffset := 0; ELSIF CameraNo = BYTE#4 THEN - inputsAddress := inputsAddress + UDINT#9; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#9; BitOffset := 4; ELSIF CameraNo = BYTE#5 THEN - inputsAddress := inputsAddress + UDINT#10; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#10; BitOffset := 0; ELSIF CameraNo = BYTE#6 THEN - inputsAddress := inputsAddress + UDINT#10; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#10; BitOffset := 4; ELSIF CameraNo = BYTE#7 THEN - inputsAddress := inputsAddress + UDINT#11; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#11; BitOffset := 0; ELSIF CameraNo = BYTE#8 THEN - inputsAddress := inputsAddress + UDINT#11; + _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#11; BitOffset := 4; END_IF; - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := BitOffset, value => Inputs.Status.SoftEvent.ResetAck ); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := (BitOffset + INT#1),value => Inputs.Status.SoftEvent.DataHandlerDone); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := (BitOffset + INT#2),value => Inputs.Status.SoftEvent.TriggerAck); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := (BitOffset + INT#3),value => Inputs.Status.SoftEvent.Reserve); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := BitOffset, value => Inputs.Status.SoftEvent.ResetAck ); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (BitOffset + INT#1),value => Inputs.Status.SoftEvent.DataHandlerDone); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (BitOffset + INT#2),value => Inputs.Status.SoftEvent.TriggerAck); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (BitOffset + INT#3),value => Inputs.Status.SoftEvent.Reserve); - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := INT#0, value => Inputs.Status.SystemReady); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := INT#1, value => Inputs.Status.SystemBusy); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := INT#7, value => Inputs.Status.Online); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress + UDINT#1), bitOffset := INT#5, value => Inputs.Status.JobLoadComplete); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress), bitOffset := INT#0, value => Inputs.Status.SystemReady); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress), bitOffset := INT#1, value => Inputs.Status.SystemBusy); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress), bitOffset := INT#7, value => Inputs.Status.Online); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress + UDINT#1), bitOffset := INT#5, value => Inputs.Status.JobLoadComplete); //nacitanie user dat pre kontrolu.. ci a ako to nastavili ine kamery. - ReadMemory(area := ReadArea#Input, byteOffset := TO_DINT(inputsAddress) + DINT#4, value => Inputs.Status.CurentJobID ); + ReadMemory(area := ReadArea#Input, byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress) + DINT#4, value => Inputs.Status.CurentJobID ); Inputs.Status.ReadDataLockerJobID := TO_BYTE(TO_INT(Inputs.Status.CurentJobID) / INT#10); - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress), bitOffset := INT#5, value => Inputs.Status.ResultValid); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + DINT#4, value => Inputs.Status.ID_Inspection); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + DINT#1, bitOffset := INT#0, value => Inputs.Status.SetUserDataAck); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_InAddress), bitOffset := INT#5, value => Inputs.Status.ResultValid); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_InAddress) + DINT#4, value => Inputs.Status.ID_Inspection); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_InAddress) + DINT#1, bitOffset := INT#0, value => Inputs.Status.SetUserDataAck); //nacitanie user dat pre kontrolu.. ci a ako to nastavili ine kamery. - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - ReadMemory(area := ReadArea#Output,byteOffset := TO_DINT(outputsAddress), value => Inputs.Status.UserDataJobID); + ReadMemory(area := ReadArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress), value => Inputs.Status.UserDataJobID); Inputs.Status.UserDataLockerJobID := TO_BYTE(TO_UINT(Inputs.Status.UserDataJobID) / UINT#10); - ReadMemory(area := ReadArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#1, value => Inputs.Status.UserDataLockerIdOperation); + ReadMemory(area := ReadArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1, value => Inputs.Status.UserDataLockerIdOperation); //*************INITIALIZATION************* RestoreTask.Run(THIS); @@ -1149,20 +1149,16 @@ NAMESPACE AXOpen.Components.Cognex.Vision Outputs.Control.InitiateJobLoad := FALSE; Outputs.Control.InspectionResultsAck := FALSE; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress),value:= BYTE#0); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#1,value:= BYTE#0); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress),value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1,value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#2,value:= BYTE#0); Outputs.Control.JobLoadID := WORD#0; Outputs.Control.WriteDataId := BYTE#0; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#1, value:= FALSE); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_OutAddress), bitOffset := INT#1, value:= FALSE); - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= FALSE); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= WORD#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := INT#4, value:= FALSE); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress) + DINT#2,value:= WORD#0); IF Inputs.Status.CurentJobID > WORD#0 THEN THIS.CallTimers(FALSE); @@ -1178,15 +1174,13 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#501; END_IF; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - _Clock_1Hz.Blink(THIS,TIME#500MS,TIME#500MS); Outputs.Control.InitiateJobLoad := _Clock_1Hz.output; - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= _Clock_1Hz.output); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := INT#4, value:= _Clock_1Hz.output); IF Inputs.Status.CurentJobID = WORD#0 THEN - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= FALSE); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := INT#4, value:= FALSE); Outputs.Control.InitiateJobLoad := FALSE; THIS.CallTimers(FALSE); _progress := 302; @@ -1267,12 +1261,11 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#511; END_IF; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress),value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress),value:= BYTE#0); //zapisovanie dat pre kameru, ]: typ spracovania dat (0 = Undefined, 1 = Zmena jobu/referencie, 2=Nacitanie parametrov0, 3=Nacitanie paramterov1,…) - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#1,value:= BYTE#0); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1,value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#2,value:= BYTE#0); IF TRUE THEN THIS.CallTimers(FALSE); @@ -1304,12 +1297,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision Inputs.Status.ReadDataLockerJobID := BYTE#0; Outputs.Control.JobLoadID := WORD#0; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress),bitOffset := INT#4,value:= FALSE); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= WORD#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress),bitOffset := INT#4,value:= FALSE); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress) + DINT#2,value:= WORD#0); - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress),bitOffset := INT#1,value:= FALSE); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_OutAddress),bitOffset := INT#1,value:= FALSE); IF TRUE THEN THIS.CallTimers(FALSE); @@ -1538,8 +1529,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision AND (NOT Inputs.Status.JobLoadComplete) THEN Outputs.Control.JobLoadID := TO_BYTE(TO_UINT(_readResultsJobID) + (TO_UINT(Config.CameraNo) * UINT#10)); //nastavenie ID podla jobuID 50-59 pre kameru 5 - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2,value:= Outputs.Control.JobLoadID); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress) + DINT#2,value:= Outputs.Control.JobLoadID); _progress := 364; END_IF; END_IF; @@ -1564,11 +1554,11 @@ NAMESPACE AXOpen.Components.Cognex.Vision Outputs.Control.InitiateJobLoad := TRUE; _Clock_1Hz.Blink(THIS,TIME#500MS,TIME#500MS); - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress),bitOffset := INT#4,value:= _Clock_1Hz.output); + + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress),bitOffset := INT#4,value:= _Clock_1Hz.output); IF (Inputs.Status.CurentJobID = Outputs.Control.JobLoadID) AND Outputs.Control.JobLoadID > WORD#0 AND Inputs.Status.CurentJobID > BYTE#0 AND Inputs.Status.JobLoadComplete THEN - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress),bitOffset := INT#4,value:= FALSE); // ??? not in original code, but probably it should be reseted here + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress),bitOffset := INT#4,value:= FALSE); // ??? not in original code, but probably it should be reseted here THIS.CallTimers(FALSE); _progress := 366; END_IF; @@ -1609,147 +1599,200 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id:= UINT#1303; RETURN; END_IF; - - CASE THIS._readResultsLength OF - UINT#1..UINT#240: // Statement section case 1 - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - END_FOR; - - FOR index := _readResultsLength TO UINT#1300 DO - _data_in_1301[index] := BYTE#0; - END_FOR; + //TODO implement error message on the .NET side + IF _readResultsLength >= UINT#1264 THEN + TaskMessenger.Activate( UINT#1307, eAxoMessageCategory#Error); + Status.Error.Id:= UINT#1307; + RETURN; + END_IF; + // Clear the rest of the buffer after the valid data to avoid sending old data in case of smaller size of results in the next inspections. + FOR index := _readResultsLength TO UINT#1300 DO + _data_in_1301[index] := BYTE#0; + END_FOR; + // Read the results from the hardware from the Results_64B_1 'item' and store them to the buffer from index 1200. + IF _readResultsLength >= UINT#1201 THEN + _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#1263); + FOR index := UINT#1200 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_64B_1_InAddress) + TO_DINT(index)-DINT#1200, value => _data_in_1301[index]); + END_FOR; + END_IF; + // Read the results from the hardware from the Results_240B_5 'item' and store them to the buffer from index 960, max up to 1199. + IF _readResultsLength >= UINT#961 THEN + _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#1199); + FOR index := UINT#960 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_5_InAddress) + TO_DINT(index)-DINT#960, value => _data_in_1301[index]); + END_FOR; + END_IF; + // Read the results from the hardware from the Results_240B_4 'item' and store them to the buffer from index 720, max up to 959. + IF _readResultsLength >= UINT#721 THEN + _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#959); + FOR index := UINT#720 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_4_InAddress) + TO_DINT(index)-DINT#720, value => _data_in_1301[index]); + END_FOR; + END_IF; + // Read the results from the hardware from the Results_240B_3 'item' and store them to the buffer from index 480, max up to 719. + IF _readResultsLength >= UINT#481 THEN + _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#719); + FOR index := UINT#480 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_3_InAddress) + TO_DINT(index)-DINT#480, value => _data_in_1301[index]); + END_FOR; + END_IF; + // Read the results from the hardware from the Results_240B_2 'item' and store them to the buffer from index 240, max up to 479. + IF _readResultsLength >= UINT#241 THEN + _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#479); + FOR index := UINT#240 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_2_InAddress) + TO_DINT(index)-DINT#240, value => _data_in_1301[index]); + END_FOR; + END_IF; + // Read the results from the hardware from the Results_240B_1 'item' and store them to the buffer from index 0, max up to 239. + IF _readResultsLength >= UINT#1 THEN + _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#239); + FOR index := UINT#0 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_1_InAddress) + TO_DINT(index), value => _data_in_1301[index]); + END_FOR; + END_IF; + + // CASE THIS._readResultsLength OF + // UINT#1..UINT#240: // Statement section case 1 + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#0 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); + // END_FOR; + + // FOR index := _readResultsLength TO UINT#1300 DO + // _data_in_1301[index] := BYTE#0; + // END_FOR; - UINT#241..UINT#480: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := 240 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - END_FOR; - - FOR index := _readResultsLength TO UINT#1300 DO - _data_in_1301[index] := BYTE#0; - END_FOR; + // UINT#241..UINT#480: + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := 240 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); + // END_FOR; + + // FOR index := _readResultsLength TO UINT#1300 DO + // _data_in_1301[index] := BYTE#0; + // END_FOR; - UINT#481..UINT#720: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#480 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - FOR index := _readResultsLength TO UINT#1300 DO - _data_in_1301[index] := BYTE#0; - END_FOR; + // UINT#481..UINT#720: + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#480 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // FOR index := _readResultsLength TO UINT#1300 DO + // _data_in_1301[index] := BYTE#0; + // END_FOR; - UINT#721..UINT#960: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#720 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - FOR index := _readResultsLength TO UINT#1300 DO - _data_in_1301[index] := BYTE#0; - END_FOR; - - UINT#961..UINT#1200: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#720 TO UINT#960 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; + // UINT#721..UINT#960: + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#720 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // FOR index := _readResultsLength TO UINT#1300 DO + // _data_in_1301[index] := BYTE#0; + // END_FOR; + + // UINT#961..UINT#1200: + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#720 TO UINT#960 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#961 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - FOR index := _readResultsLength TO UINT#1300 DO - _data_in_1301[index] := BYTE#0; - END_FOR; + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#961 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // FOR index := _readResultsLength TO UINT#1300 DO + // _data_in_1301[index] := BYTE#0; + // END_FOR; - UINT#1201..UINT#1264: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#720 TO UINT#960 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; + // UINT#1201..UINT#1264: + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#720 TO UINT#960 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#961 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1201 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - END_FOR; - - FOR index := _readResultsLength TO UINT#1300 DO - _data_in_1301[index] := BYTE#0; - END_FOR; + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#961 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); + // FOR index := UINT#1201 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. + // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); + // END_FOR; + + // FOR index := _readResultsLength TO UINT#1300 DO + // _data_in_1301[index] := BYTE#0; + // END_FOR; - ELSE - TaskMessenger.Activate( UINT#1304, eAxoMessageCategory#Error); - Status.Error.Id:= UINT#1304; - END_CASE; + // ELSE + // TaskMessenger.Activate( UINT#1304, eAxoMessageCategory#Error); + // Status.Error.Id:= UINT#1304; + // END_CASE; + THIS.ResultData.Data := _data_in_1301; THIS.ResultData.ToggleDataChangedFlag(); IF TRUE THEN From adc02f28b3c5c11c6586c438f28ca50ca520e8e9 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Fri, 15 May 2026 12:07:48 +0200 Subject: [PATCH 08/14] write user data copying completelly rewritten --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 493 +++++------------- 1 file changed, 121 insertions(+), 372 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index d2f32cc8e..ccbf57ee0 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1600,7 +1600,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision RETURN; END_IF; //TODO implement error message on the .NET side - IF _readResultsLength >= UINT#1264 THEN + IF _readResultsLength > UINT#1264 THEN TaskMessenger.Activate( UINT#1307, eAxoMessageCategory#Error); Status.Error.Id:= UINT#1307; RETURN; @@ -1610,189 +1610,48 @@ NAMESPACE AXOpen.Components.Cognex.Vision _data_in_1301[index] := BYTE#0; END_FOR; // Read the results from the hardware from the Results_64B_1 'item' and store them to the buffer from index 1200. - IF _readResultsLength >= UINT#1201 THEN + IF _readResultsLength > UINT#1200 THEN _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#1263); FOR index := UINT#1200 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_64B_1_InAddress) + TO_DINT(index)-DINT#1200, value => _data_in_1301[index]); END_FOR; END_IF; // Read the results from the hardware from the Results_240B_5 'item' and store them to the buffer from index 960, max up to 1199. - IF _readResultsLength >= UINT#961 THEN + IF _readResultsLength > UINT#960 THEN _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#1199); FOR index := UINT#960 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_5_InAddress) + TO_DINT(index)-DINT#960, value => _data_in_1301[index]); END_FOR; END_IF; // Read the results from the hardware from the Results_240B_4 'item' and store them to the buffer from index 720, max up to 959. - IF _readResultsLength >= UINT#721 THEN + IF _readResultsLength > UINT#720 THEN _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#959); FOR index := UINT#720 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_4_InAddress) + TO_DINT(index)-DINT#720, value => _data_in_1301[index]); END_FOR; END_IF; // Read the results from the hardware from the Results_240B_3 'item' and store them to the buffer from index 480, max up to 719. - IF _readResultsLength >= UINT#481 THEN + IF _readResultsLength > UINT#480 THEN _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#719); FOR index := UINT#480 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_3_InAddress) + TO_DINT(index)-DINT#480, value => _data_in_1301[index]); END_FOR; END_IF; // Read the results from the hardware from the Results_240B_2 'item' and store them to the buffer from index 240, max up to 479. - IF _readResultsLength >= UINT#241 THEN + IF _readResultsLength > UINT#240 THEN _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#479); FOR index := UINT#240 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_2_InAddress) + TO_DINT(index)-DINT#240, value => _data_in_1301[index]); END_FOR; END_IF; // Read the results from the hardware from the Results_240B_1 'item' and store them to the buffer from index 0, max up to 239. - IF _readResultsLength >= UINT#1 THEN + IF _readResultsLength > UINT#0 THEN _maxindex := System.Math.Min(_readResultsLength - UINT#1, UINT#239); FOR index := UINT#0 TO _maxindex DO //nacitavanie tolko dat kolko treba do buffra. ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.Results_240B_1_InAddress) + TO_DINT(index), value => _data_in_1301[index]); END_FOR; END_IF; - // CASE THIS._readResultsLength OF - // UINT#1..UINT#240: // Statement section case 1 - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#0 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - // END_FOR; - - // FOR index := _readResultsLength TO UINT#1300 DO - // _data_in_1301[index] := BYTE#0; - // END_FOR; - - // UINT#241..UINT#480: - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := 240 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - // END_FOR; - - // FOR index := _readResultsLength TO UINT#1300 DO - // _data_in_1301[index] := BYTE#0; - // END_FOR; - - // UINT#481..UINT#720: - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#480 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // FOR index := _readResultsLength TO UINT#1300 DO - // _data_in_1301[index] := BYTE#0; - // END_FOR; - - // UINT#721..UINT#960: - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#720 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // FOR index := _readResultsLength TO UINT#1300 DO - // _data_in_1301[index] := BYTE#0; - // END_FOR; - - // UINT#961..UINT#1200: - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#720 TO UINT#960 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#961 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // FOR index := _readResultsLength TO UINT#1300 DO - // _data_in_1301[index] := BYTE#0; - // END_FOR; - - // UINT#1201..UINT#1264: - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#0 TO UINT#239 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#240 TO UINT#479 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#240]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#480 TO UINT#719 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#720 TO UINT#960 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#961 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_Results_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - // FOR index := UINT#1201 TO _readResultsLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - // ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(inputsAddress) + TO_DINT(index), value => _data_in_1301[index - UINT#480]); - // END_FOR; - - // FOR index := _readResultsLength TO UINT#1300 DO - // _data_in_1301[index] := BYTE#0; - // END_FOR; - - // ELSE - // TaskMessenger.Activate( UINT#1304, eAxoMessageCategory#Error); - // Status.Error.Id:= UINT#1304; - // END_CASE; - THIS.ResultData.Data := _data_in_1301; THIS.ResultData.ToggleDataChangedFlag(); IF TRUE THEN @@ -1838,8 +1697,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision END_IF; Outputs.Control.JobLoadID := BYTE#0; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2, value:= Outputs.Control.JobLoadID); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress) + DINT#2, value:= Outputs.Control.JobLoadID); IF TRUE THEN THIS.CallTimers(FALSE); @@ -1854,13 +1712,11 @@ NAMESPACE AXOpen.Components.Cognex.Vision END_IF; Outputs.Control.InitiateJobLoad := TRUE; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := 4, value:= Outputs.Control.InitiateJobLoad); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := 4, value:= Outputs.Control.InitiateJobLoad); IF (Inputs.Status.CurentJobID = WORD#0) AND Inputs.Status.JobLoadComplete THEN Outputs.Control.InitiateJobLoad := FALSE; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := 4, value:= Outputs.Control.InitiateJobLoad); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := 4, value:= Outputs.Control.InitiateJobLoad); THIS.CallTimers(FALSE); _progress := 374; END_IF; @@ -1961,10 +1817,9 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#583; END_IF; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress + UDINT#0), value:= Outputs.Control.WriteDataID); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress + UDINT#1),value:= _sendDataInspectionType); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress + UDINT#2),value:= _sendDataJobID); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress + UDINT#0), value:= Outputs.Control.WriteDataID); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress + UDINT#1),value:= _sendDataInspectionType); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress + UDINT#2),value:= _sendDataJobID); IF (Inputs.Status.UserDataLockerJobID = Config.CameraNo) THEN // IF (Inputs.Status.UserDataLockerJobID = Config.CameraNo) THEN THIS.CallTimers(FALSE); @@ -1995,221 +1850,115 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id:= UINT#1305; RETURN; END_IF; + //TODO implement error message on the .NET side + IF _sendDataLength > UINT#1260 THEN + TaskMessenger.Activate( UINT#1308, eAxoMessageCategory#Error); + Status.Error.Id:= UINT#1308; + RETURN; + END_IF; - CASE _sendDataLength OF - UINT#1..UINT#235: // Statement section case 1 - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO _sendDataLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - FOR index := _sendDataLength TO UINT#235 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#236 TO UINT#475 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#476 TO UINT#715 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#716 TO UINT#955 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#956 TO UINT#1195 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1196 TO UINT#1263 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - UINT#236..UINT#475: // Statement section case 1 - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#235 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#236 TO _sendDataLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - FOR index := _sendDataLength TO UINT#475 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#476 TO UINT#715 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#716 TO UINT#955 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#956 TO UINT#1195 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1196 TO UINT#1263 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - UINT#476..UINT#715: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#235 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#236 TO UINT#475 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#476 TO _sendDataLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - FOR index := _sendDataLength TO UINT#715 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#716 TO UINT#955 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#956 TO UINT#1195 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1196 TO UINT#1263 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - UINT#716..UINT#955: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#235 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#236 TO UINT#475 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#476 TO UINT#715 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#716 TO _sendDataLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - FOR index := _sendDataLength TO UINT#955 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#956 TO UINT#1195 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1196 TO UINT#1263 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - UINT#956..UINT#1195: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#235 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#236 TO UINT#475 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#476 TO UINT#715 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#716 TO UINT#955 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#956 TO _sendDataLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - FOR index := _sendDataLength TO UINT#1195 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1196 TO UINT#1259 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - UINT#1196..UINT#1260: - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#0 TO UINT#235 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#4 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_2),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#236 TO UINT#475 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#236 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_3),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#476 TO UINT#715 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#476 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_4),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#716 TO UINT#955 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#716 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_5),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#956 TO UINT#1195 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#956 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_64B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - FOR index := UINT#1196 TO _sendDataLength - UINT#1 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= _data_out_1301[index]); - END_FOR; - - FOR index := _sendDataLength TO UINT#1263 DO //nacitavanie tolko dat kolko treba do buffra. - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) - DINT#1196 + TO_DINT(index),value:= BYTE#0); - END_FOR; - - - ELSE - TaskMessenger.Activate( UINT#1306, eAxoMessageCategory#Error); - Status.Error.Id:= UINT#1306; - END_CASE; + // Write the user data to the hardware to the UserData_64B_1 'item' from the buffer starting from index 1196. + IF _sendDataLength > UINT#1196 THEN + _maxindex := System.Math.Min(_sendDataLength - UINT#1, UINT#1263); + // Write relevant data from the buffer to the hardware starting from index 1196 in the buffer to index 0 in the hardware. + FOR index := UINT#1196 TO _maxindex DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_64B_1_OutAddress) + TO_DINT(index) - DINT#1196 ,value:= _data_out_1301[index]); + END_FOR; + // Clear the rest of the hardware buffer after the valid data to avoid sending old data in case of smaller size of data in the next inspections. + FOR index := _sendDataLength TO UINT#1263 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_64B_1_OutAddress) + TO_DINT(index) - DINT#1196 ,value:= BYTE#0); + END_FOR; + ELSE + // If the data to send is smaller than 1196, clear completelly the hardware buffer. + FOR index := UINT#0 TO UINT#63 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_64B_1_OutAddress) + TO_DINT(index),value:= BYTE#0); + END_FOR; + END_IF; + // Write the user data to the hardware to the UserData_240B_5 'item' from the buffer starting from index 956. + IF _sendDataLength > UINT#956 THEN + _maxindex := System.Math.Min(_sendDataLength - UINT#1, UINT#1195); + // Write relevant data from the buffer to the hardware starting from index 956 in the buffer to index 0 in the hardware. + FOR index := UINT#956 TO _maxindex DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_5_OutAddress) + TO_DINT(index) - DINT#956 ,value:= _data_out_1301[index]); + END_FOR; + // Clear the rest of the hardware buffer after the valid data to avoid sending old data in case of smaller size of data in the next inspections. + FOR index := _sendDataLength TO UINT#1195 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_5_OutAddress) + TO_DINT(index) - DINT#956 ,value:= BYTE#0); + END_FOR; + ELSE + // If the data to send is smaller than 956, clear completelly the hardware buffer. + FOR index := UINT#0 TO UINT#239 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_5_OutAddress) + TO_DINT(index),value:= BYTE#0); + END_FOR; + END_IF; + // Write the user data to the hardware to the UserData_240B_4 'item' from the buffer starting from index 716. + IF _sendDataLength > UINT#716 THEN + _maxindex := System.Math.Min(_sendDataLength - UINT#1, UINT#955); + // Write relevant data from the buffer to the hardware starting from index 716 in the buffer to index 0 in the hardware. + FOR index := UINT#716 TO _maxindex DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_4_OutAddress) + TO_DINT(index) - DINT#716 ,value:= _data_out_1301[index]); + END_FOR; + // Clear the rest of the hardware buffer after the valid data to avoid sending old data in case of smaller size of data in the next inspections. + FOR index := _sendDataLength TO UINT#955 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_4_OutAddress) + TO_DINT(index) - DINT#716 ,value:= BYTE#0); + END_FOR; + ELSE + // If the data to send is smaller than 716, clear completelly the hardware buffer. + FOR index := UINT#0 TO UINT#239 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_4_OutAddress) + TO_DINT(index),value:= BYTE#0); + END_FOR; + END_IF; + // Write the user data to the hardware to the UserData_240B_3 'item' from the buffer starting from index 476. + IF _sendDataLength > UINT#476 THEN + _maxindex := System.Math.Min(_sendDataLength - UINT#1, UINT#715); + // Write relevant data from the buffer to the hardware starting from index 476 in the buffer to index 0 in the hardware. + FOR index := UINT#476 TO _maxindex DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_3_OutAddress) + TO_DINT(index) - DINT#476 ,value:= _data_out_1301[index]); + END_FOR; + // Clear the rest of the hardware buffer after the valid data to avoid sending old data in case of smaller size of data in the next inspections. + FOR index := _sendDataLength TO UINT#715 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_3_OutAddress) + TO_DINT(index) - DINT#476 ,value:= BYTE#0); + END_FOR; + ELSE + // If the data to send is smaller than 476, clear completelly the hardware buffer. + FOR index := UINT#0 TO UINT#239 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_3_OutAddress) + TO_DINT(index),value:= BYTE#0); + END_FOR; + END_IF; + // Write the user data to the hardware to the UserData_240B_2 'item' from the buffer starting from index 236. + IF _sendDataLength > UINT#236 THEN + _maxindex := System.Math.Min(_sendDataLength - UINT#1, UINT#475); + // Write relevant data from the buffer to the hardware starting from index 236 in the buffer to index 0 in the hardware. + FOR index := UINT#236 TO _maxindex DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_2_OutAddress) + TO_DINT(index) - DINT#236 ,value:= _data_out_1301[index]); + END_FOR; + // Clear the rest of the hardware buffer after the valid data to avoid sending old data in case of smaller size of data in the next inspections. + FOR index := _sendDataLength TO UINT#475 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_2_OutAddress) + TO_DINT(index) - DINT#236 ,value:= BYTE#0); + END_FOR; + ELSE + // If the data to send is smaller than 236, clear completelly the hardware buffer. + FOR index := UINT#0 TO UINT#239 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_2_OutAddress) + TO_DINT(index),value:= BYTE#0); + END_FOR; + END_IF; + // Write the user data to the hardware to the UserData_240B_1 'item' from the buffer starting from index 4. + IF _sendDataLength > UINT#0 THEN + _maxindex := System.Math.Min(_sendDataLength - UINT#1, UINT#235); + // Write relevant data from the buffer to the hardware starting from index 0 in the buffer to index 4 in the hardware. + FOR index := UINT#0 TO _maxindex DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + TO_DINT(index) + DINT#4 ,value:= _data_out_1301[index]); + END_FOR; + // Clear the rest of the hardware buffer after the valid data to avoid sending old data in case of smaller size of data in the next inspections. + FOR index := _sendDataLength TO UINT#235 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + TO_DINT(index) + DINT#4 ,value:= BYTE#0); + END_FOR; + ELSE + // If the data to send is smaller than 0, clear completelly the hardware buffer. + FOR index := UINT#0 TO UINT#235 DO + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + TO_DINT(index) + DINT#4 ,value:= BYTE#0); + END_FOR; + END_IF; IF TRUE THEN THIS.CallTimers(FALSE); From 73a4048451cad8a7827d697610a1d2ca0fea11ab Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Fri, 15 May 2026 12:20:13 +0200 Subject: [PATCH 09/14] rdy2tst --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 105 +++++++----------- 1 file changed, 40 insertions(+), 65 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index ccbf57ee0..f520d6972 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -119,21 +119,13 @@ NAMESPACE AXOpen.Components.Cognex.Vision _initHwCheckDone : BOOL; _retval : WORD; _geoAddr : GeoAddr; - _startAddress : UDINT; - _bytesCount : UINT; _Clock_1Hz : AxoBlinker; _readResultsJobID : BYTE; _readResultsLength : UINT; - _data_ : ARRAY[0..1300] OF BYTE; - _data_out : ARRAY[0..1300] OF BYTE; _sendDataInspectionType : BYTE; _sendDataBufferID : BYTE; _sendDataJobID : BYTE; _sendDataLength : UINT; - // _inputsAddress : UDINT; - // _inputsCount : UINT; - // _outputsAddress : UDINT; - // _outputsCount : UINT; END_VAR /// @@ -147,24 +139,13 @@ NAMESPACE AXOpen.Components.Cognex.Vision CameraNo : BYTE; END_VAR VAR_TEMP - SeparatorPos : INT; - // inputsAddress : UDINT; - // inputsCount : UINT; - // outputsAddress : UDINT; - // outputsCount : UINT; _inputsAddress : UDINT; _inputsCount : UINT; _outputsAddress : UDINT; _outputsCount : UINT; - retValRdAddr : WORD; - i : Int; - BitOffset : Int; - LogGeoData_retval : WORD; - _tmpWord : WORD; - - index : UINT; + _bitOffset : Int; _maxindex : UINT; - + index : UINT; END_VAR Progress := _progress; @@ -1055,34 +1036,34 @@ NAMESPACE AXOpen.Components.Cognex.Vision IF CameraNo = BYTE#1 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#8; - BitOffset := 0; + _bitOffset := 0; ELSIF CameraNo = BYTE#2 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#8; - BitOffset := 4; + _bitOffset := 4; ELSIF CameraNo = BYTE#3 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#9; - BitOffset := 0; + _bitOffset := 0; ELSIF CameraNo = BYTE#4 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#9; - BitOffset := 4; + _bitOffset := 4; ELSIF CameraNo = BYTE#5 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#10; - BitOffset := 0; + _bitOffset := 0; ELSIF CameraNo = BYTE#6 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#10; - BitOffset := 4; + _bitOffset := 4; ELSIF CameraNo = BYTE#7 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#11; - BitOffset := 0; + _bitOffset := 0; ELSIF CameraNo = BYTE#8 THEN _inputsAddress := Config.HWIDs.SystemControl_InAddress + UDINT#11; - BitOffset := 4; + _bitOffset := 4; END_IF; - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := BitOffset, value => Inputs.Status.SoftEvent.ResetAck ); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (BitOffset + INT#1),value => Inputs.Status.SoftEvent.DataHandlerDone); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (BitOffset + INT#2),value => Inputs.Status.SoftEvent.TriggerAck); - ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (BitOffset + INT#3),value => Inputs.Status.SoftEvent.Reserve); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := _bitOffset, value => Inputs.Status.SoftEvent.ResetAck ); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (_bitOffset + INT#1),value => Inputs.Status.SoftEvent.DataHandlerDone); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (_bitOffset + INT#2),value => Inputs.Status.SoftEvent.TriggerAck); + ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(_inputsAddress), bitOffset := (_bitOffset + INT#3),value => Inputs.Status.SoftEvent.Reserve); ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress), bitOffset := INT#0, value => Inputs.Status.SystemReady); ReadMemory(area := ReadArea#Input,byteOffset := TO_DINT(Config.HWIDs.SystemControl_InAddress), bitOffset := INT#1, value => Inputs.Status.SystemBusy); @@ -2010,9 +1991,8 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#590; END_IF; - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_UserData_240B_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#0,value:= BYTE#0); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#1,value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#0,value:= BYTE#0); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1,value:= BYTE#0); IF TRUE THEN THIS.CallTimers(FALSE); @@ -2090,53 +2070,48 @@ NAMESPACE AXOpen.Components.Cognex.Vision //***********Update outputs **************** - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - IF CameraNo = BYTE#1 THEN - outputsAddress := outputsAddress + UDINT#4; - BitOffset := 0; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#4; + _bitOffset := 0; ELSIF CameraNo = BYTE#2 THEN - outputsAddress := outputsAddress + UDINT#4; - BitOffset := 4; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#4; + _bitOffset := 4; ELSIF CameraNo = BYTE#3 THEN - outputsAddress := outputsAddress + UDINT#5; - BitOffset := 0; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#5; + _bitOffset := 0; ELSIF CameraNo = BYTE#4 THEN - outputsAddress := outputsAddress + UDINT#5; - BitOffset := 4; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#5; + _bitOffset := 4; ELSIF CameraNo = BYTE#5 THEN - outputsAddress := outputsAddress + UDINT#6; - BitOffset := 0; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#6; + _bitOffset := 0; ELSIF CameraNo = BYTE#6 THEN - outputsAddress := outputsAddress + UDINT#6; - BitOffset := 4; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#6; + _bitOffset := 4; ELSIF CameraNo = BYTE#7 THEN - outputsAddress := outputsAddress + UDINT#7; - BitOffset := 0; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#7; + _bitOffset := 0; ELSIF CameraNo = BYTE#8 THEN - outputsAddress := outputsAddress + UDINT#7; - BitOffset := 4; + _outputsAddress := Config.HWIDs.SystemControl_OutAddress + UDINT#7; + _bitOffset := 4; END_IF; - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := BitOffset, value:= Outputs.Control.SoftEvent.Reset); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := BitOffset + INT#1, value:= Outputs.Control.SoftEvent.DataHandlerAck); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := BitOffset + INT#2, value:= Outputs.Control.SoftEvent.Trigger); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := BitOffset + INT#3, value:= Outputs.Control.SoftEvent.Reserve); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset, value:= Outputs.Control.SoftEvent.Reset); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset + INT#1, value:= Outputs.Control.SoftEvent.DataHandlerAck); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset + INT#2, value:= Outputs.Control.SoftEvent.Trigger); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset + INT#3, value:= Outputs.Control.SoftEvent.Reserve); IF (Inputs.Status.ReadDataLockerJobID = Config.CameraNo) THEN - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_SystemControl),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#4, value:= Outputs.Control.InitiateJobLoad ); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := INT#4, value:= Outputs.Control.InitiateJobLoad ); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress) + DINT#2, value:= Outputs.Control.JobLoadID); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress) + DINT#2, value:= Outputs.Control.JobLoadID); - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#1, value:= Outputs.Control.InspectionResultsAck); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_OutAddress), bitOffset := INT#1, value:= Outputs.Control.InspectionResultsAck); END_IF; IF (Inputs.Status.UserDataLockerJobID = Config.CameraNo) THEN - retValRdAddr := ReadHardwareIOAddress(hardwareID := (Config.HWIDs.HW_EngineControl_1),inputStartAddress=> inputsAddress,inputCount => inputsCount,outputStartAddress => outputsAddress,outputCount=> outputsCount); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(outputsAddress), bitOffset := INT#3, value:= Outputs.Control.SetUserdata); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.EngineControl_1_OutAddress), bitOffset := INT#3, value:= Outputs.Control.SetUserdata); END_IF; // - User Data [20-1400]: Spolocny buffer pre user data. Vyuziva sa vzdy cely buffer (v jednom CASE moze pristupovat len jedna inspekcia). From a0ed322d5bd9dc3b134cb6725cc93f9a3510ef38 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Fri, 15 May 2026 12:48:08 +0200 Subject: [PATCH 10/14] WIP 1 --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index f520d6972..38ce6a998 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1533,13 +1533,14 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#565; END_IF; - Outputs.Control.InitiateJobLoad := TRUE; _Clock_1Hz.Blink(THIS,TIME#500MS,TIME#500MS); + Outputs.Control.InitiateJobLoad := _Clock_1Hz.output; WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress),bitOffset := INT#4,value:= _Clock_1Hz.output); IF (Inputs.Status.CurentJobID = Outputs.Control.JobLoadID) AND Outputs.Control.JobLoadID > WORD#0 AND Inputs.Status.CurentJobID > BYTE#0 AND Inputs.Status.JobLoadComplete THEN WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress),bitOffset := INT#4,value:= FALSE); // ??? not in original code, but probably it should be reseted here + Outputs.Control.InitiateJobLoad := FALSE; THIS.CallTimers(FALSE); _progress := 366; END_IF; From 0991a3cdcf2a82c4c06be969583b7e25044ae5f6 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Fri, 15 May 2026 12:52:37 +0200 Subject: [PATCH 11/14] ready to test on hw --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index 38ce6a998..d7850bc9d 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1684,6 +1684,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision IF TRUE THEN THIS.CallTimers(FALSE); _progress := 373; + _Clock_1Hz.Restore(); END_IF; END_IF; // ReadResultsTask running: loading the job. @@ -1693,10 +1694,12 @@ NAMESPACE AXOpen.Components.Cognex.Vision Status.Error.Id := UINT#573; END_IF; - Outputs.Control.InitiateJobLoad := TRUE; + _Clock_1Hz.Blink(THIS,TIME#300MS,TIME#50S); // generate pulse + Outputs.Control.InitiateJobLoad := _Clock_1Hz.output; + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := 4, value:= Outputs.Control.InitiateJobLoad); - IF (Inputs.Status.CurentJobID = WORD#0) AND Inputs.Status.JobLoadComplete THEN + IF (Inputs.Status.CurentJobID = WORD#0) AND NOT Inputs.Status.JobLoadComplete THEN Outputs.Control.InitiateJobLoad := FALSE; WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := 4, value:= Outputs.Control.InitiateJobLoad); THIS.CallTimers(FALSE); @@ -1994,7 +1997,9 @@ NAMESPACE AXOpen.Components.Cognex.Vision WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#0,value:= BYTE#0); WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1,value:= BYTE#0); - + Outputs.Control.JobLoadID := WORD#0; + Outputs.Control.WriteDataId := BYTE#0; + IF TRUE THEN THIS.CallTimers(FALSE); _progress := 391; @@ -2148,7 +2153,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision END_VAR _readResultsJobID := JobID; _readResultsLength := Length; - _data_in_1301 := Data; + Data := _data_in_1301; // copy data to target array ReadResults := ReadResultsTask.Invoke(THIS); END_METHOD From 1dc46333bce3141636e3cc9c64bcd63a92a221e8 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Fri, 15 May 2026 13:36:23 +0200 Subject: [PATCH 12/14] wip --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index d7850bc9d..a4af7dda9 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1997,7 +1997,6 @@ NAMESPACE AXOpen.Components.Cognex.Vision WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#0,value:= BYTE#0); WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1,value:= BYTE#0); - Outputs.Control.JobLoadID := WORD#0; Outputs.Control.WriteDataId := BYTE#0; IF TRUE THEN From 262587c5b4416aca418c960847b864dfdfbd4d26 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Fri, 15 May 2026 13:54:08 +0200 Subject: [PATCH 13/14] wip --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index a4af7dda9..d7850bc9d 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -1997,6 +1997,7 @@ NAMESPACE AXOpen.Components.Cognex.Vision WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#0,value:= BYTE#0); WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.UserData_240B_1_OutAddress) + DINT#1,value:= BYTE#0); + Outputs.Control.JobLoadID := WORD#0; Outputs.Control.WriteDataId := BYTE#0; IF TRUE THEN From 4abc311f00cb19795355118f0890bdc34e139bdc Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Fri, 15 May 2026 14:20:35 +0200 Subject: [PATCH 14/14] fix out adress --- .../ctrl/src/AxoVisionPro/AxoVisionPro.st | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st index d7850bc9d..2d6680696 100644 --- a/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st +++ b/src/components.cognex.vision/ctrl/src/AxoVisionPro/AxoVisionPro.st @@ -2102,10 +2102,10 @@ NAMESPACE AXOpen.Components.Cognex.Vision _bitOffset := 4; END_IF; - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset, value:= Outputs.Control.SoftEvent.Reset); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset + INT#1, value:= Outputs.Control.SoftEvent.DataHandlerAck); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset + INT#2, value:= Outputs.Control.SoftEvent.Trigger); - WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := _bitOffset + INT#3, value:= Outputs.Control.SoftEvent.Reserve); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(_outputsAddress), bitOffset := _bitOffset, value:= Outputs.Control.SoftEvent.Reset); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(_outputsAddress), bitOffset := _bitOffset + INT#1, value:= Outputs.Control.SoftEvent.DataHandlerAck); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(_outputsAddress), bitOffset := _bitOffset + INT#2, value:= Outputs.Control.SoftEvent.Trigger); + WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(_outputsAddress), bitOffset := _bitOffset + INT#3, value:= Outputs.Control.SoftEvent.Reserve); IF (Inputs.Status.ReadDataLockerJobID = Config.CameraNo) THEN WriteMemory(area := WriteArea#Output,byteOffset := TO_DINT(Config.HWIDs.SystemControl_OutAddress), bitOffset := INT#4, value:= Outputs.Control.InitiateJobLoad );