diff --git a/COMPONENTS_BLACKLIST.md b/COMPONENTS_BLACKLIST.md new file mode 100644 index 000000000..5e25673d7 --- /dev/null +++ b/COMPONENTS_BLACKLIST.md @@ -0,0 +1,21 @@ +# COMPONENTS BLACKLIST + +**LIST OF COMPONENTS THAT MUST NOT BE USED** + +| **SUPPLIER** | **TYPE** | **DESCRIPTION** | **REASON** | **ALTERNATIVE** | +|--------------|----------|-----------------|------------|------------------| +| Siemens | PLC series 12xx, 1510 to 1515 | PLC | Cannot use our sequencer, our components, or technology objects for Siemens frequency converters. Small memory, only one network card. | Siemens 1516, 1517, 1518 V4.0+ | +| Siemens | PLC with firmware lower then 4.0 | PLC | Not suitable for high communication load | Siemens 1516, 1517, 1518 V4.0+ | +| ANY | IOlink device | IOlink master or slave | No support for IOlink in Simatic AX | Siemens ET200AL boxes DI/AI boxes | +| Siemens | any old HMI Panels except Unified with firmware 20.2+ | HMI Panel | Has to be capable to open browser that supports .NET8, I guess | Unified with firmware 20.2+ at least 20inch at least 1920*1080 resolution | +| Festo with Siemens PLC | Pneumatic manifolds with EtherCAT | Pneumatic manifolds with EtherCAT | Siemens does not support EtherCAT bus | Festo manifolds with PROFINET | +| Aventics with Siemens PLC | Pneumatic manifolds with EtherCAT | Pneumatic manifolds with EtherCAT | Siemens does not support EtherCAT bus | Aventics manifolds with PROFINET | +| Cognex | Insight with firmware lower then 24.0.0 | Insight family | Communication structure does not fit the somponent structure | Insight with firmware higher then 24.0.0 or Keyence :-) | +| ANY | GW INSTEK - PSP-2010 | LABORATORY POWER SUPPLY | UNRELIABLE COMMUNICATION. REQUIRES ADDITIONAL 12V SUPPLY TO USE RS232 INTERFACE | TTi QL355 | +| ANY | WD My Cloud EX2 | Network Drive, NAS | Cannot schedule shutdown via UPS | Synology DiskStation DS216j 2x 1 TB RED | +| IAI | ALL | (!) Intelligent Actuators | Each type is different, very poor support, each has different parameterization, inconsistent software for control, inconsistent connection cables, inconsistent parameters... | Rexroth, Festo, Schneider | +| ANY | Fujitsu | Network Drive, NAS | Slow service startup, ping issues after standby and startup. Could not be pinged after link activation | Synology DiskStation DS218+, 2x HDD | +| Ateq | Ateq with RS232 | Leak Tester | Our component is not adapted for it(1), requires additional serial card | Ateq with PROFINET, or Ateq without results (OK/NOK only) | +|| + +(1) Development would take up our precious time, hence it is inefficient for us. diff --git a/COMPONENTS_WHITELIST.md b/COMPONENTS_WHITELIST.md new file mode 100644 index 000000000..0eff1fbc9 --- /dev/null +++ b/COMPONENTS_WHITELIST.md @@ -0,0 +1,24 @@ +# COMPONENTS WHITELIST + +**List of components that could be used.** + +| **SUPPLIER** | **TYPE** | **DESCRIPTION** | **REASON** | **NOTE** | +|--------------|----------|------------------|------------|----------| +| Siemens | PLC series 1516 to 1518 with FW4.0 and higher, excluding failsafe | PLC | | | +| Siemens | ET200SP excluding IOLINK | IO | | | +| Siemens | ET200AL excluding IOLINK | IO | | | +| ABB | IRB series robots with Omnicore controller | 6 axis robots | | | +| ABB | IRB series robots with IRC5 controller | 6 axis robots | | Already written, not yet tested with real hardware | +| Cognex | Dataman series with FW6.0 | Barcode scanner | | | +| Cognex | Insight series with FW24.0 | Camera | | | +| Cognex | Insight series with FW6.0 | Camera | | Already written, not yet tested with real hardware | +| Desoutter | CVIC_II | Tightening system | | Already written, not yet tested with real hardware | +| Festo | CmmtAs | Servodrive | | Torque mode not yet tested with real hardware | +| Keyence | SR750, SR1000 | Barcode scanner | | Already written, not yet tested with real hardware | +| KUKA | Robots with Krc4 controller with FW5.0 | 6 axis robots | | Already written, not yet tested with real hardware | +| Mitsubishi | Robots with Cr800 controller with FW1.0 | 6 axis robots | | Already written, not yet tested with real hardware | +| Rexroth | Indradrive | Servodrive | | Already written, not yet tested with real hardware | +| Rexroth | SmartFunctionKit | Servopress | | Already written, not yet tested with real hardware | +| Rexroth | CS351 | Tightening system | | | +| UR | Robots with Cb3 controller with FW3.0 | 6 axis robots | | Already written, not yet tested with real hardware | +| Synology | Synology DiskStation DS216j 2x 1 TB RED | Network drive, NAS | Wide range of settings (UPS, protocols, etc.) | | diff --git a/src/components.abb.robotics/ctrl/src/AxoIrc5_v_1_x_x.st b/src/components.abb.robotics/ctrl/src/AxoIrc5_v_1_x_x.st index 1bdd82631..268c87225 100644 --- a/src/components.abb.robotics/ctrl/src/AxoIrc5_v_1_x_x.st +++ b/src/components.abb.robotics/ctrl/src/AxoIrc5_v_1_x_x.st @@ -125,24 +125,6 @@ NAMESPACE AXOpen.Components.Abb.Robotics HardwareDiagnosticsTask : AXOpen.Io.AxoHardwareDiagnostics; END_VAR - // // Temporary workaround due to hwc station number issue - // {attribute 'obsolete' := 'This method is(will be) deprecated after releasing hwc3.1.0. Use Run(parent,hwID) instead.'} - // METHOD PUBLIC Run - // VAR_INPUT - // parent : IAxoObject; - // hwID : WORD; - // hwIdDI_64_bytes : WORD; // Hardware Id of the input data of the robot - // hwIdDO_64_bytes : WORD; // Hardware Id of the output data of the robot - // END_VAR - // // _hwID := hwID; - // _hwIdDI_64_bytes := hwIdDI_64_bytes; - // _hwIdDO_64_bytes := hwIdDO_64_bytes; - - // _initHwCheckDone := TRUE; - // THIS.Run(parent,hwID); - // END_METHOD - - /// /// Runs tasks and logic of this component. /// >[!IMPORTANT] This method must or one of its overloads be called cyclically. @@ -366,58 +348,58 @@ NAMESPACE AXOpen.Components.Abb.Robotics Inputs.WorkobjectNo := _data[10]; Inputs.PointNo := _data[11]; - _dword.%B3 := _data[12]; - _dword.%B2 := _data[13]; - _dword.%B1 := _data[14]; - _dword.%B0 := _data[15]; + _dword.%B0 := _data[12]; + _dword.%B1 := _data[13]; + _dword.%B2 := _data[14]; + _dword.%B3 := _data[15]; Inputs.UserSpecSpeed1 := TO_DINT(_dword); - _dword.%B3 := _data[16]; - _dword.%B2 := _data[17]; - _dword.%B1 := _data[18]; - _dword.%B0 := _data[19]; + _dword.%B0 := _data[16]; + _dword.%B1 := _data[17]; + _dword.%B2 := _data[18]; + _dword.%B3 := _data[19]; Inputs.UserSpecSpeed2 := TO_DINT(_dword); - _dword.%B3 := _data[20]; - _dword.%B2 := _data[21]; - _dword.%B1 := _data[22]; - _dword.%B0 := _data[23]; - Inputs.Coordinates.X:= TO_REAL(_dword)/REAL#10000.0-REAL#10000.0; - - _dword.%B3 := _data[24]; - _dword.%B2 := _data[25]; - _dword.%B1 := _data[26]; - _dword.%B0 := _data[27]; - Inputs.Coordinates.Y:= TO_REAL(_dword)/REAL#10000.0-REAL#10000.0; - - _dword.%B3 := _data[28]; - _dword.%B2 := _data[29]; - _dword.%B1 := _data[30]; - _dword.%B0 := _data[31]; - Inputs.Coordinates.Z:= TO_REAL(_dword)/REAL#10000.0-REAL#10000.0; - - _dword.%B3 := _data[32]; - _dword.%B2 := _data[33]; - _dword.%B1 := _data[34]; - _dword.%B0 := _data[35]; - Inputs.Coordinates.Rx:= TO_REAL(_dword)/REAL#10000.0-REAL#360.0; - - _dword.%B3 := _data[36]; - _dword.%B2 := _data[37]; - _dword.%B1 := _data[39]; - _dword.%B0 := _data[39]; - Inputs.Coordinates.Ry:= TO_REAL(_dword)/REAL#10000.0-REAL#360.0; - - _dword.%B3 := _data[40]; - _dword.%B2 := _data[41]; - _dword.%B1 := _data[42]; - _dword.%B0 := _data[43]; - Inputs.Coordinates.Rz:= TO_REAL(_dword)/REAL#10000.0-REAL#360.0; - - _dword.%B3 := _data[44]; - _dword.%B2 := _data[45]; - _dword.%B1 := _data[46]; - _dword.%B0 := _data[47]; + _dword.%B0 := _data[20]; + _dword.%B1 := _data[21]; + _dword.%B2 := _data[22]; + _dword.%B3 := _data[23]; + Inputs.Coordinates.X:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#10000.0; + + _dword.%B0 := _data[24]; + _dword.%B1 := _data[25]; + _dword.%B2 := _data[26]; + _dword.%B3 := _data[27]; + Inputs.Coordinates.Y:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#10000.0; + + _dword.%B0 := _data[28]; + _dword.%B1 := _data[29]; + _dword.%B2 := _data[30]; + _dword.%B3 := _data[31]; + Inputs.Coordinates.Z:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#10000.0; + + _dword.%B0 := _data[32]; + _dword.%B1 := _data[33]; + _dword.%B2 := _data[34]; + _dword.%B3 := _data[35]; + Inputs.Coordinates.Rx:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#360.0; + + _dword.%B0 := _data[36]; + _dword.%B1 := _data[37]; + _dword.%B2 := _data[38]; + _dword.%B3 := _data[39]; + Inputs.Coordinates.Ry:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#360.0; + + _dword.%B0 := _data[40]; + _dword.%B1 := _data[41]; + _dword.%B2 := _data[42]; + _dword.%B3 := _data[43]; + Inputs.Coordinates.Rz:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#360.0; + + _dword.%B0 := _data[44]; + _dword.%B1 := _data[45]; + _dword.%B2 := _data[46]; + _dword.%B3 := _data[47]; Inputs.EventId := TO_UDINT(_dword); //******************************************* _context := THIS.GetContext(); @@ -857,7 +839,9 @@ NAMESPACE AXOpen.Components.Abb.Robotics TaskMessenger.Activate(UINT#534, eAxoMessageCategory#Warning); Status.Error.Id := UINT#534; END_IF; - + IF Status.CurrentMovementParameters.GlobalSpeed > BYTE#0 THEN + _errorTime := Config.ErrorTime * 100.0/TO_REAL(TO_INT(Status.CurrentMovementParameters.GlobalSpeed)); + END_IF; Outputs.ActionNo := Status.CurrentMovementParameters.ActionNo; IF Outputs.ActionNo = Inputs.ActionNo THEN @@ -891,11 +875,11 @@ NAMESPACE AXOpen.Components.Abb.Robotics Status.Action.Id := UINT#121; Status.Error.Id := UINT#0; ELSIF StartMotorsProgramAndMovementsTask.ErrorOccured() THEN - Status.Action.Id := UINT#920; - Status.Error.Id := UINT#920; + Status.Action.Id := UINT#10020; + Status.Error.Id := UINT#10020; ELSIF StartMotorsProgramAndMovementsTask.AbortTriggered() THEN - Status.Action.Id := UINT#921; - Status.Error.Id := UINT#921; + Status.Action.Id := UINT#10021; + Status.Error.Id := UINT#10021; END_IF; Messenger.ActivateOnCondition(ULINT#10020,StartMotorsProgramAndMovementsTask.HasError(), eAxoMessageCategory#Error); Messenger.ActivateOnCondition(ULINT#10021,StartMotorsProgramAndMovementsTask.IsAborted(), eAxoMessageCategory#Error); @@ -1165,16 +1149,18 @@ NAMESPACE AXOpen.Components.Abb.Robotics TaskMessenger.Activate(UINT#561, eAxoMessageCategory#Warning); Status.Error.Id := UINT#561; END_IF; - + IF Status.CurrentMovementParameters.GlobalSpeed > BYTE#0 THEN + _errorTime := Config.ErrorTime * 100.0/TO_REAL(TO_INT(Status.CurrentMovementParameters.GlobalSpeed)); + END_IF; Outputs.ActionNo := Status.CurrentMovementParameters.ActionNo; IF Outputs.ActionNo = Inputs.ActionNo THEN THIS.CallTimers(FALSE); - _progress:=662; + _progress:=362; END_IF; END_IF; - IF _progress = 662 THEN + IF _progress = 362 THEN IF _infoTimer.output THEN TaskMessenger.Activate(UINT#562, eAxoMessageCategory#Warning); Status.Error.Id := UINT#562; @@ -1183,11 +1169,11 @@ NAMESPACE AXOpen.Components.Abb.Robotics Outputs.ActionNo := BYTE#255; IF Outputs.ActionNo = Inputs.ActionNo THEN - _progress := 663; + _progress := 363; END_IF; END_IF; - IF _progress = 663 THEN + IF _progress = 363 THEN _progress := 0; StartMovementsTask.DoneWhen(TRUE); END_IF; @@ -1648,54 +1634,54 @@ NAMESPACE AXOpen.Components.Abb.Robotics _data[10] := Outputs.WorkobjectNo; _data[11] := Outputs.PointNo; - _dword := TO_DWORD(Outputs.UserSpecSpeed1); - _data[12] := _dword.%B3; - _data[13] := _dword.%B2; - _data[14] := _dword.%B1; - _data[15] := _dword.%B0; + _dword := TO_DWORD(TO_DINT(Outputs.UserSpecSpeed1)); + _data[12] := _dword.%B0; + _data[13] := _dword.%B1; + _data[14] := _dword.%B2; + _data[15] := _dword.%B3; - _dword := TO_DWORD(Outputs.UserSpecSpeed2); - _data[16] := _dword.%B3; - _data[17] := _dword.%B2; - _data[18] := _dword.%B1; - _data[19] := _dword.%B0; + _dword := TO_DWORD(TO_DINT(Outputs.UserSpecSpeed2)); + _data[16] := _dword.%B0; + _data[17] := _dword.%B1; + _data[18] := _dword.%B2; + _data[19] := _dword.%B3; ////Coordinates - _dword := TO_DWORD((Outputs.Coordinates.X +REAL#10000.0)*REAL#10000.0); - _data[20] := _dword.%B3; - _data[21] := _dword.%B2; - _data[22] := _dword.%B1; - _data[23] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Y +REAL#10000.0)*REAL#10000.0); - _data[24] := _dword.%B3; - _data[25] := _dword.%B2; - _data[26] := _dword.%B1; - _data[27] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Z +REAL#10000.0)*REAL#10000.0); - _data[28] := _dword.%B3; - _data[29] := _dword.%B2; - _data[30] := _dword.%B1; - _data[31] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Rx +REAL#360.0)*REAL#10000.0); - _data[32] := _dword.%B3; - _data[33] := _dword.%B2; - _data[34] := _dword.%B1; - _data[35] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Ry +REAL#360.0)*REAL#10000.0); - _data[36] := _dword.%B3; - _data[37] := _dword.%B2; - _data[38] := _dword.%B1; - _data[39] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Rz +REAL#360.0)*REAL#10000.0); - _data[40] := _dword.%B3; - _data[41] := _dword.%B2; - _data[42] := _dword.%B1; - _data[43] := _dword.%B0; + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.X + REAL#10000.0)*REAL#10000.0)); + _data[20] := _dword.%B0; + _data[21] := _dword.%B1; + _data[22] := _dword.%B2; + _data[23] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Y +REAL#10000.0)*REAL#10000.0)); + _data[24] := _dword.%B0; + _data[25] := _dword.%B1; + _data[26] := _dword.%B2; + _data[27] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Z +REAL#10000.0)*REAL#10000.0)); + _data[28] := _dword.%B0; + _data[29] := _dword.%B1; + _data[30] := _dword.%B2; + _data[31] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Rx +REAL#360.0)*REAL#10000.0)); + _data[32] := _dword.%B0; + _data[33] := _dword.%B1; + _data[34] := _dword.%B2; + _data[35] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Ry +REAL#360.0)*REAL#10000.0)); + _data[36] := _dword.%B0; + _data[37] := _dword.%B1; + _data[38] := _dword.%B2; + _data[39] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Rz +REAL#360.0)*REAL#10000.0)); + _data[40] := _dword.%B0; + _data[41] := _dword.%B1; + _data[42] := _dword.%B2; + _data[43] := _dword.%B3; _retval := Siemens.Simatic.S71500.DistributedIO.WriteData(_hwIdDO_64_bytes,_data); IF _retval > WORD#0 THEN diff --git a/src/components.abb.robotics/ctrl/src/AxoOmnicore_v_1_x_x.st b/src/components.abb.robotics/ctrl/src/AxoOmnicore_v_1_x_x.st index 7c8b02fd3..e1e47f80a 100644 --- a/src/components.abb.robotics/ctrl/src/AxoOmnicore_v_1_x_x.st +++ b/src/components.abb.robotics/ctrl/src/AxoOmnicore_v_1_x_x.st @@ -27,11 +27,19 @@ NAMESPACE AXOpen.Components.Abb.Robotics _inputsAddress : UDINT; _inputsCount : UINT; _outputsAddress : UDINT; - _outputsCount : UINT; + _outputsCount : UINT; + + _real: REAL; + _dint: DINT; + _dword2: DWORD; + END_VAR VAR PUBLIC //HEADER - + {#ix-attr:[Container(Layout.Wrap)]} + {#ix-attr:[ComponentHeader()]} + {#ix-set:AttributeName = "<#Progress#>"} + Progress : INT; END_VAR VAR PUBLIC //Tasks @@ -114,7 +122,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics {#ix-attr:[Container(Layout.Wrap)]} {#ix-attr:[Group(GroupLayout.GroupBox)]} {#ix-set:AttributeName = "<#Outputs#>"} - {#ix-attr:[ReadOnly()]} + {#ix-attr:[ReadOnly()]} Outputs : AxoAbbRobotics_Control_v_1_x_x; END_VAR @@ -125,24 +133,6 @@ NAMESPACE AXOpen.Components.Abb.Robotics HardwareDiagnosticsTask : AXOpen.Io.AxoHardwareDiagnostics; END_VAR - // // Temporary workaround due to hwc station number issue - // {attribute 'obsolete' := 'This method is(will be) deprecated after releasing hwc3.1.0. Use Run(parent,hwID) instead.'} - // METHOD PUBLIC Run - // VAR_INPUT - // parent : IAxoObject; - // hwID : WORD; - // hwIdDI_64_bytes : WORD; // Hardware Id of the input data of the robot - // hwIdDO_64_bytes : WORD; // Hardware Id of the output data of the robot - // END_VAR - // _hwID := hwID; - // _hwIdDI_64_bytes := hwIdDI_64_bytes; - // _hwIdDO_64_bytes := hwIdDO_64_bytes; - - // _initHwCheckDone := TRUE; - // THIS.Run(parent,hwID); - // END_METHOD - - /// /// Runs tasks and logic of this component. /// >[!IMPORTANT] This method must or one of its overloads be called cyclically. @@ -161,6 +151,8 @@ NAMESPACE AXOpen.Components.Abb.Robotics _outHwid : UINT; END_VAR + Progress := _progress; + SUPER.Run(parent); Messenger.Serve(THIS); @@ -365,58 +357,58 @@ NAMESPACE AXOpen.Components.Abb.Robotics Inputs.WorkobjectNo := _data[10]; Inputs.PointNo := _data[11]; - _dword.%B3 := _data[12]; - _dword.%B2 := _data[13]; - _dword.%B1 := _data[14]; - _dword.%B0 := _data[15]; + _dword.%B0 := _data[12]; + _dword.%B1 := _data[13]; + _dword.%B2 := _data[14]; + _dword.%B3 := _data[15]; Inputs.UserSpecSpeed1 := TO_DINT(_dword); - _dword.%B3 := _data[16]; - _dword.%B2 := _data[17]; - _dword.%B1 := _data[18]; - _dword.%B0 := _data[19]; + _dword.%B0 := _data[16]; + _dword.%B1 := _data[17]; + _dword.%B2 := _data[18]; + _dword.%B3 := _data[19]; Inputs.UserSpecSpeed2 := TO_DINT(_dword); - _dword.%B3 := _data[20]; - _dword.%B2 := _data[21]; - _dword.%B1 := _data[22]; - _dword.%B0 := _data[23]; - Inputs.Coordinates.X:= TO_REAL(_dword)/REAL#10000.0-REAL#10000.0; - - _dword.%B3 := _data[24]; - _dword.%B2 := _data[25]; - _dword.%B1 := _data[26]; - _dword.%B0 := _data[27]; - Inputs.Coordinates.Y:= TO_REAL(_dword)/REAL#10000.0-REAL#10000.0; - - _dword.%B3 := _data[28]; - _dword.%B2 := _data[29]; - _dword.%B1 := _data[30]; - _dword.%B0 := _data[31]; - Inputs.Coordinates.Z:= TO_REAL(_dword)/REAL#10000.0-REAL#10000.0; - - _dword.%B3 := _data[32]; - _dword.%B2 := _data[33]; - _dword.%B1 := _data[34]; - _dword.%B0 := _data[35]; - Inputs.Coordinates.Rx:= TO_REAL(_dword)/REAL#10000.0-REAL#360.0; - - _dword.%B3 := _data[36]; - _dword.%B2 := _data[37]; - _dword.%B1 := _data[39]; - _dword.%B0 := _data[39]; - Inputs.Coordinates.Ry:= TO_REAL(_dword)/REAL#10000.0-REAL#360.0; - - _dword.%B3 := _data[40]; - _dword.%B2 := _data[41]; - _dword.%B1 := _data[42]; - _dword.%B0 := _data[43]; - Inputs.Coordinates.Rz:= TO_REAL(_dword)/REAL#10000.0-REAL#360.0; - - _dword.%B3 := _data[44]; - _dword.%B2 := _data[45]; - _dword.%B1 := _data[46]; - _dword.%B0 := _data[47]; + _dword.%B0 := _data[20]; + _dword.%B1 := _data[21]; + _dword.%B2 := _data[22]; + _dword.%B3 := _data[23]; + Inputs.Coordinates.X:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#10000.0; + + _dword.%B0 := _data[24]; + _dword.%B1 := _data[25]; + _dword.%B2 := _data[26]; + _dword.%B3 := _data[27]; + Inputs.Coordinates.Y:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#10000.0; + + _dword.%B0 := _data[28]; + _dword.%B1 := _data[29]; + _dword.%B2 := _data[30]; + _dword.%B3 := _data[31]; + Inputs.Coordinates.Z:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#10000.0; + + _dword.%B0 := _data[32]; + _dword.%B1 := _data[33]; + _dword.%B2 := _data[34]; + _dword.%B3 := _data[35]; + Inputs.Coordinates.Rx:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#360.0; + + _dword.%B0 := _data[36]; + _dword.%B1 := _data[37]; + _dword.%B2 := _data[38]; + _dword.%B3 := _data[39]; + Inputs.Coordinates.Ry:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#360.0; + + _dword.%B0 := _data[40]; + _dword.%B1 := _data[41]; + _dword.%B2 := _data[42]; + _dword.%B3 := _data[43]; + Inputs.Coordinates.Rz:= TO_REAL(TO_DINT(_dword))/REAL#10000.0-REAL#360.0; + + _dword.%B0 := _data[44]; + _dword.%B1 := _data[45]; + _dword.%B2 := _data[46]; + _dword.%B3 := _data[47]; Inputs.EventId := TO_UDINT(_dword); //******************************************* _context := THIS.GetContext(); @@ -467,16 +459,19 @@ NAMESPACE AXOpen.Components.Abb.Robotics _progress := 300; END_IF; + IF _progress = 300 THEN IF _infoTimer.output THEN TaskMessenger.Activate(UINT#500, eAxoMessageCategory#Warning); Status.Error.Id := UINT#500; END_IF; + Outputs.ActionNo := BYTE#255; Outputs.StartAtMain := _blink.output; IF Inputs.PpMoved THEN THIS.CallTimers(FALSE); + Outputs.ActionNo := BYTE#0; Outputs.StartAtMain :=FALSE; _progress:=301; END_IF; @@ -716,7 +711,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 323 THEN + IF _progress = 323 THEN //Switching on the motors IF _infoTimer.output THEN TaskMessenger.Activate(UINT#523, eAxoMessageCategory#Warning); Status.Error.Id := UINT#523; @@ -735,7 +730,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 324 THEN + IF _progress = 324 THEN //Switching on the motors IF _infoTimer.output THEN TaskMessenger.Activate(UINT#524, eAxoMessageCategory#Warning); Status.Error.Id := UINT#524; @@ -754,7 +749,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 325 THEN + IF _progress = 325 THEN //Switching on the motors IF _infoTimer.output THEN TaskMessenger.Activate(UINT#525, eAxoMessageCategory#Warning); Status.Error.Id := UINT#525; @@ -774,7 +769,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 326 THEN + IF _progress = 326 THEN //Setting the movement parameters IF _infoTimer.output THEN TaskMessenger.Activate(UINT#526, eAxoMessageCategory#Warning); Status.Error.Id := UINT#526; @@ -796,7 +791,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 327 THEN + IF _progress = 327 THEN //Waiting for confirmation of the movement parameters IF _infoTimer.output THEN IF Inputs.GlobalSpeed <> Status.CurrentMovementParameters.GlobalSpeed THEN TaskMessenger.Activate( UINT#527, eAxoMessageCategory#Warning); @@ -836,7 +831,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 333 THEN + IF _progress = 333 THEN //Acknowledging that the mirrored data are valid IF _infoTimer.output THEN TaskMessenger.Activate(UINT#533, eAxoMessageCategory#Warning); Status.Error.Id := UINT#533; @@ -850,11 +845,14 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 334 THEN + IF _progress = 334 THEN //Waiting for the movement finished IF _infoTimer.output THEN TaskMessenger.Activate(UINT#534, eAxoMessageCategory#Warning); Status.Error.Id := UINT#534; END_IF; + IF Status.CurrentMovementParameters.GlobalSpeed > BYTE#0 THEN + _errorTime := Config.ErrorTime * 100.0/TO_REAL(TO_INT(Status.CurrentMovementParameters.GlobalSpeed)); + END_IF; Outputs.ActionNo := Status.CurrentMovementParameters.ActionNo; @@ -864,7 +862,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 335 THEN + IF _progress = 335 THEN //Movement finished acknoledgement IF _infoTimer.output THEN TaskMessenger.Activate(UINT#535, eAxoMessageCategory#Warning); Status.Error.Id := UINT#535; @@ -889,11 +887,11 @@ NAMESPACE AXOpen.Components.Abb.Robotics Status.Action.Id := UINT#121; Status.Error.Id := UINT#0; ELSIF StartMotorsProgramAndMovementsTask.ErrorOccured() THEN - Status.Action.Id := UINT#920; - Status.Error.Id := UINT#920; + Status.Action.Id := UINT#10020; + Status.Error.Id := UINT#10020; ELSIF StartMotorsProgramAndMovementsTask.AbortTriggered() THEN - Status.Action.Id := UINT#921; - Status.Error.Id := UINT#921; + Status.Action.Id := UINT#10021; + Status.Error.Id := UINT#10021; END_IF; Messenger.ActivateOnCondition(ULINT#10020,StartMotorsProgramAndMovementsTask.HasError(), eAxoMessageCategory#Error); Messenger.ActivateOnCondition(ULINT#10021,StartMotorsProgramAndMovementsTask.IsAborted(), eAxoMessageCategory#Error); @@ -963,7 +961,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 343 THEN + IF _progress = 343 THEN //Switching on the motors IF _infoTimer.output THEN TaskMessenger.Activate(UINT#543, eAxoMessageCategory#Warning); Status.Error.Id := UINT#543; @@ -982,7 +980,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 344 THEN + IF _progress = 344 THEN //Switching on the motors IF _infoTimer.output THEN TaskMessenger.Activate(UINT#544, eAxoMessageCategory#Warning); Status.Error.Id := UINT#544; @@ -1002,7 +1000,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 345 THEN + IF _progress = 345 THEN //Switching on the motors StartMotorsTask.DoneWhen(TRUE); THIS.CallTimers(FALSE); _progress := 0; @@ -1046,19 +1044,19 @@ NAMESPACE AXOpen.Components.Abb.Robotics _progress := 350; END_IF; - IF _progress = 350 THEN + IF _progress = 350 THEN IF _infoTimer.output THEN TaskMessenger.Activate(UINT#550, eAxoMessageCategory#Warning); Status.Error.Id := UINT#550; END_IF; - IF Inputs.CycleOn THEN + IF Inputs.CycleOn THEN //Waiting for the automatic mode THIS.CallTimers(FALSE); _progress := 351; END_IF; END_IF; - IF _progress = 351 THEN + IF _progress = 351 THEN //Wating for the motors to be switched on IF _infoTimer.output THEN TaskMessenger.Activate(UINT#551, eAxoMessageCategory#Warning); Status.Error.Id := UINT#551; @@ -1070,7 +1068,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 352 THEN + IF _progress = 352 THEN //Waiting for the error reset IF _infoTimer.output THEN TaskMessenger.Activate(UINT#552, eAxoMessageCategory#Warning); Status.Error.Id := UINT#552; @@ -1082,7 +1080,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 353 THEN + IF _progress = 353 THEN //Setting the movement parameters IF _infoTimer.output THEN TaskMessenger.Activate(UINT#553, eAxoMessageCategory#Warning); Status.Error.Id := UINT#553; @@ -1104,7 +1102,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 354 THEN + IF _progress = 354 THEN //Waiting for confirmation of the movement parameters IF _infoTimer.output THEN IF Inputs.GlobalSpeed <> Status.CurrentMovementParameters.GlobalSpeed THEN TaskMessenger.Activate( UINT#554, eAxoMessageCategory#Warning); @@ -1144,7 +1142,7 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 360 THEN + IF _progress = 360 THEN //Acknowledging that the mirrored data are valid IF _infoTimer.output THEN TaskMessenger.Activate(UINT#560, eAxoMessageCategory#Warning); Status.Error.Id := UINT#560; @@ -1158,21 +1156,24 @@ NAMESPACE AXOpen.Components.Abb.Robotics END_IF; END_IF; - IF _progress = 361 THEN + IF _progress = 361 THEN //Waiting for the movement finished IF _infoTimer.output THEN TaskMessenger.Activate(UINT#561, eAxoMessageCategory#Warning); Status.Error.Id := UINT#561; END_IF; - + IF Status.CurrentMovementParameters.GlobalSpeed > BYTE#0 THEN + _errorTime := Config.ErrorTime * 100.0/TO_REAL(TO_INT(Status.CurrentMovementParameters.GlobalSpeed)); + END_IF; + Outputs.ActionNo := Status.CurrentMovementParameters.ActionNo; IF Outputs.ActionNo = Inputs.ActionNo THEN THIS.CallTimers(FALSE); - _progress:=662; + _progress:=362; END_IF; END_IF; - IF _progress = 662 THEN + IF _progress = 362 THEN IF _infoTimer.output THEN TaskMessenger.Activate(UINT#562, eAxoMessageCategory#Warning); Status.Error.Id := UINT#562; @@ -1181,11 +1182,11 @@ NAMESPACE AXOpen.Components.Abb.Robotics Outputs.ActionNo := BYTE#255; IF Outputs.ActionNo = Inputs.ActionNo THEN - _progress := 663; + _progress := 363; END_IF; END_IF; - IF _progress = 663 THEN + IF _progress = 363 THEN _progress := 0; StartMovementsTask.DoneWhen(TRUE); END_IF; @@ -1645,54 +1646,54 @@ NAMESPACE AXOpen.Components.Abb.Robotics _data[10] := Outputs.WorkobjectNo; _data[11] := Outputs.PointNo; - _dword := TO_DWORD(Outputs.UserSpecSpeed1); - _data[12] := _dword.%B3; - _data[13] := _dword.%B2; - _data[14] := _dword.%B1; - _data[15] := _dword.%B0; + _dword := TO_DWORD(TO_DINT(Outputs.UserSpecSpeed1)); + _data[12] := _dword.%B0; + _data[13] := _dword.%B1; + _data[14] := _dword.%B2; + _data[15] := _dword.%B3; - _dword := TO_DWORD(Outputs.UserSpecSpeed2); - _data[16] := _dword.%B3; - _data[17] := _dword.%B2; - _data[18] := _dword.%B1; - _data[19] := _dword.%B0; + _dword := TO_DWORD(TO_DINT(Outputs.UserSpecSpeed2)); + _data[16] := _dword.%B0; + _data[17] := _dword.%B1; + _data[18] := _dword.%B2; + _data[19] := _dword.%B3; ////Coordinates - _dword := TO_DWORD((Outputs.Coordinates.X +REAL#10000.0)*REAL#10000.0); - _data[20] := _dword.%B3; - _data[21] := _dword.%B2; - _data[22] := _dword.%B1; - _data[23] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Y +REAL#10000.0)*REAL#10000.0); - _data[24] := _dword.%B3; - _data[25] := _dword.%B2; - _data[26] := _dword.%B1; - _data[27] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Z +REAL#10000.0)*REAL#10000.0); - _data[28] := _dword.%B3; - _data[29] := _dword.%B2; - _data[30] := _dword.%B1; - _data[31] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Rx +REAL#360.0)*REAL#10000.0); - _data[32] := _dword.%B3; - _data[33] := _dword.%B2; - _data[34] := _dword.%B1; - _data[35] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Ry +REAL#360.0)*REAL#10000.0); - _data[36] := _dword.%B3; - _data[37] := _dword.%B2; - _data[38] := _dword.%B1; - _data[39] := _dword.%B0; - - _dword := TO_DWORD((Outputs.Coordinates.Rz +REAL#360.0)*REAL#10000.0); - _data[40] := _dword.%B3; - _data[41] := _dword.%B2; - _data[42] := _dword.%B1; - _data[43] := _dword.%B0; + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.X + REAL#10000.0)*REAL#10000.0)); + _data[20] := _dword.%B0; + _data[21] := _dword.%B1; + _data[22] := _dword.%B2; + _data[23] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Y +REAL#10000.0)*REAL#10000.0)); + _data[24] := _dword.%B0; + _data[25] := _dword.%B1; + _data[26] := _dword.%B2; + _data[27] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Z +REAL#10000.0)*REAL#10000.0)); + _data[28] := _dword.%B0; + _data[29] := _dword.%B1; + _data[30] := _dword.%B2; + _data[31] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Rx +REAL#360.0)*REAL#10000.0)); + _data[32] := _dword.%B0; + _data[33] := _dword.%B1; + _data[34] := _dword.%B2; + _data[35] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Ry +REAL#360.0)*REAL#10000.0)); + _data[36] := _dword.%B0; + _data[37] := _dword.%B1; + _data[38] := _dword.%B2; + _data[39] := _dword.%B3; + + _dword := TO_DWORD(TO_DINT((Outputs.Coordinates.Rz +REAL#360.0)*REAL#10000.0)); + _data[40] := _dword.%B0; + _data[41] := _dword.%B1; + _data[42] := _dword.%B2; + _data[43] := _dword.%B3; _retval := Siemens.Simatic.S71500.DistributedIO.WriteData(_hwIdDO_64_bytes,_data); IF _retval > WORD#0 THEN diff --git a/src/traversals/apax/apax.yml b/src/traversals/apax/apax.yml index 0d8e6d7d5..87041e2ac 100644 --- a/src/traversals/apax/apax.yml +++ b/src/traversals/apax/apax.yml @@ -44,7 +44,6 @@ dependencies: "app_axopen.components.rexroth.press": "0.0.0-dev.0" "@inxton/axopen.components.rexroth.press": "0.0.0-dev.0" "app_axopen.components.rexroth.tightening": "0.0.0-dev.0" - "@inxton/axopen.components.rexroth.tightening-symbolinfogeneration-testingstep": "0.0.0-dev.0" "@inxton/axopen.components.rexroth.tightening": "0.0.0-dev.0" "app_axopen.components.robotics": "0.0.0-dev.0" "@inxton/axopen.components.robotics": "0.0.0-dev.0"