Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions COMPONENTS_BLACKLIST.md
Original file line number Diff line number Diff line change
@@ -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.
24 changes: 24 additions & 0 deletions COMPONENTS_WHITELIST.md
Original file line number Diff line number Diff line change
@@ -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.) | |
228 changes: 107 additions & 121 deletions src/components.abb.robotics/ctrl/src/AxoIrc5_v_1_x_x.st
Original file line number Diff line number Diff line change
Expand Up @@ -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


///<summary>
/// Runs tasks and logic of this component.
/// >[!IMPORTANT] This method must or one of its overloads be called cyclically.
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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
Expand Down
Loading
Loading