diff --git a/src/components.rexroth.drives/components.rexroth.drives.sln b/src/components.rexroth.drives/components.rexroth.drives.sln index 09ad8a235..251195ceb 100644 --- a/src/components.rexroth.drives/components.rexroth.drives.sln +++ b/src/components.rexroth.drives/components.rexroth.drives.sln @@ -1,4 +1,4 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "this", "this.proj", "{C91BAA51-7B27-48BF-BE13-DED526D007B3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "inxton_axopen_abstractions", "..\abstractions\src\AXOpen.Abstractions\inxton_axopen_abstractions.csproj", "{26B3BB63-88A9-4CDF-8F04-8E78F3284F6F}" diff --git a/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/001_FSP_DRIVE_PROFILE.png b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/001_FSP_DRIVE_PROFILE.png new file mode 100644 index 000000000..9f603be9c Binary files /dev/null and b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/001_FSP_DRIVE_PROFILE.png differ diff --git a/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/002_CONSUMER.png b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/002_CONSUMER.png new file mode 100644 index 000000000..f0a164889 Binary files /dev/null and b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/002_CONSUMER.png differ diff --git a/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/003_PRODUCER.png b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/003_PRODUCER.png new file mode 100644 index 000000000..0bd2062c2 Binary files /dev/null and b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/003_PRODUCER.png differ diff --git a/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/004_SignalControlWord.png b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/004_SignalControlWord.png new file mode 100644 index 000000000..12139284a Binary files /dev/null and b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/004_SignalControlWord.png differ diff --git a/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/005_SignalStatusWord.png b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/005_SignalStatusWord.png new file mode 100644 index 000000000..2a984dab8 Binary files /dev/null and b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/005_SignalStatusWord.png differ diff --git a/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/006_OperationMode.png b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/006_OperationMode.png new file mode 100644 index 000000000..6cb5a2d95 Binary files /dev/null and b/src/components.rexroth.drives/ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/006_OperationMode.png differ diff --git a/src/components.rexroth.drives/ctrl/src/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.st b/src/components.rexroth.drives/ctrl/src/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.st index c90717791..9c564755b 100644 --- a/src/components.rexroth.drives/ctrl/src/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.st +++ b/src/components.rexroth.drives/ctrl/src/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.st @@ -92,6 +92,11 @@ NAMESPACE AXOpen.Components.Rexroth.Drives {#ix-set:AttributeName = "<#Scaling constant actual jerk#>"} {#ix-set:AttributeToolTip = "<#Depends on the actual settings in the ctrlX DRIVE Engineering#>"} ScalingConstantActualJerk : LREAL := 0.001; + {#ix-attr:[ComponentDetails("Scaling")]} + {#ix-attr:[ReadOnly()]} + {#ix-set:AttributeName = "<#Axis type#>"} + {#ix-set:AttributeToolTip = "<#Depends on the actual settings in the ctrlX DRIVE Engineering#>"} + AxisType : eAxoDriveAxisType := eAxoDriveAxisType#Undefined; END_VAR VAR PUBLIC // Debug {#ix-attr:[Container(Layout.Stack)]} @@ -124,24 +129,25 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord : ReadRecord; _WriteRecord : WriteRecord; _ScalingRead : BOOL; - _S_0_0076 : WORD; // 2byte, binary - _S_0_0077 : INT; // 2byte, 0 decimal places - _S_0_0078 : INT; // 2byte, 0 decimal places - _S_0_0044 : WORD; // 2byte, binary - _S_0_0045 : INT; // 2byte, 0 decimal places - _S_0_0046 : INT; // 2byte, 0 decimal places - _S_0_0160 : WORD; // 2byte, binary - _S_0_0161 : INT; // 2byte, 0 decimal places - _S_0_0162 : INT; // 2byte, 0 decimal places - _S_0_0086 : WORD; // 2byte, binary - _S_0_0093 : INT; // 2byte, 0 decimal places - _S_0_0094 : INT; // 2byte, 0 decimal places - _S_0_0112 : REAL; // 4bytes, 3decimal places - _P_0_0450 : REAL; // 2bytes, 2decimal places + _S_0_0076 : WORD; // 2byte, binary - Position data scaling type + _S_0_0077 : INT; // 2byte, 0 decimal places - Linear position scaling factor + _S_0_0078 : INT; // 2byte, 0 decimal places - Linear position scaling exponent + _S_0_0079 : DINT; // 4byte, 0 decimal places - Rotational resolution + _S_0_0044 : WORD; // 2byte, binary - Velocity scaling type + _S_0_0045 : INT; // 2byte, 0 decimal places - Velocity scaling factor + _S_0_0046 : INT; // 2byte, 0 decimal places - Velocity scaling exponent + _S_0_0160 : WORD; // 2byte, binary - Acceleration scaling type + _S_0_0161 : INT; // 2byte, 0 decimal places - Acceleration scaling factor + _S_0_0162 : INT; // 2byte, 0 decimal places - Acceleration scaling exponent + _S_0_0086 : WORD; // 2byte, binary - Torque/force scaling type + _S_0_0093 : INT; // 2byte, 0 decimal places - Torque/force scaling factor + _S_0_0094 : INT; // 2byte, 0 decimal places - Torque/force scaling exponent + _S_0_0112 : REAL; // 4bytes, 3decimal places - Nominal current [A] + _P_0_0450 : REAL; // 2bytes, 2decimal places - Current constant [Nm/A] _infoTimer : AXOpen.Timers.OnDelayTimer; _errorTimer : AXOpen.Timers.OnDelayTimer; - _tmpTimer : AXOpen.Timers.OnDelayTimer; + _tmpTimer : AXOpen.Timers.OnDelayTimer; _lastMessageCodeFromMC : ULINT; END_VAR @@ -1122,357 +1128,627 @@ NAMESPACE AXOpen.Components.Rexroth.Drives //*******************SCALING***********************// IF NOT _ScalingRead THEN IF _State = UINT#0 THEN - _State := UINT#1; + AxisType := eAxoDriveAxisType#Undefined; + _State := _State + UINT#1; END_IF; //Reading Position data scaling: Type (0x2900:01 / S-0-0076 / --) 2byte, binary - IF _State = UINT#1 THEN - _ReadRecord( request := TRUE, - hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), + IF _State = UINT#1 THEN // Scaling type + _ReadRecord( request := TRUE, // 001: linear scaling: + hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), // 010: rotary scaling: index := DINT#76, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1801, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; _S_0_0076 := _word; - _State := UINT#2; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#2 THEN - _ReadRecord(request := FALSE, record := _data2); - IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#3; + IF _State = UINT#2 THEN // Scaling type + _ReadRecord(request := FALSE, record := _data2); // 001: linear scaling: + IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN // 010: rotary scaling: + _State := _State + UINT#1; END_IF; END_IF; - //Reading Position data scaling: Factor (0x2900:02 / S-0-0077 / --) 2byte, 0 decimal places - IF _State = UINT#3 THEN - _ReadRecord( request := TRUE, - hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#77, + //Checking the axis type in Position data scaling: Type (0x2900:01 / S-0-0076 / --) + IF _State = UINT#3 THEN // Scaling type + IF (_S_0_0076 AND WORD#16#0007) = WORD#16#0001 THEN // 001: linear scaling: + AxisType := eAxoDriveAxisType#Linear; // 010: rotary scaling: + _State := _State + UINT#1; + ELSIF (_S_0_0076 AND WORD#16#0007) = WORD#16#0002 THEN + AxisType := eAxoDriveAxisType#Rotary; + _State := _State + UINT#1; + ELSE + AxisType := eAxoDriveAxisType#Error; + Messenger.ActivateOnCondition(ULINT#1802, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Checking the axis unit system in Position data scaling: Type (0x2900:01 / S-0-0076 / --) + IF _State = UINT#4 THEN // Unit for linear scaling + IF NOT _S_0_0076.%X4 THEN // 0: Meter [m] + _State := _State + UINT#2; // 1: Inch [in] + ELSE // Unit for rotary Scaling + Messenger.ActivateOnCondition(ULINT#1803, TRUE, eAxoMessageCategory#Error); // 0: Angular degree + RETURN; // 1: Reserved + END_IF; + END_IF; + // Irelevant for position, skipping this control. + // //Checking the axis time base in Position data scaling: Type (0x2900:01 / S-0-0076 / --) + // IF _State = UINT#5 THEN + // IF _S_0_0076.%X5 THEN + // _State := _State + UINT#1; + // ELSE + // Messenger.ActivateOnCondition(ULINT#1804, TRUE, eAxoMessageCategory#Error); + // RETURN; + // END_IF; + // END_IF; + //Checking the axis Data reference in Position data scaling: Type (0x2900:01 / S-0-0076 / --) + IF _State = UINT#6 THEN // Data reference + IF _S_0_0076.%X6 THEN // 0: at the motor shaft + _State := _State + UINT#1; // 1: at the load + ELSE + Messenger.ActivateOnCondition(ULINT#1805, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Reading Velocity scaling type (0x2910:01 / S-0-0044 / --) 2byte, binary + IF _State = UINT#7 THEN // Scaling type + _ReadRecord( request := TRUE, // 001: linear scaling: + hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), // 010: rotary scaling: + index := DINT#44, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1806, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0077 := TO_INT(_word); - _State := UINT#4; + _S_0_0044 := _word; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#4 THEN - _ReadRecord(request := FALSE, record := _data2); - IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#5; + IF _State = UINT#8 THEN // Scaling type + _ReadRecord(request := FALSE, record := _data2); // 001: linear scaling: + IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN // 010: rotary scaling: + _State := _State + UINT#1; END_IF; END_IF; - //Reading Position data scaling: Exponent (0x2900:03 / S-0-0078 / --) 2byte, 0 decimal places - IF _State = UINT#5 THEN - _ReadRecord( request := TRUE, - hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#78, + //Checking the axis type in Velocity scaling type (0x2910:01 / S-0-0044 / --) + IF _State = UINT#9 THEN // Scaling type + IF (_S_0_0044 AND WORD#16#0007) = WORD#16#0001 AND AxisType = eAxoDriveAxisType#Linear THEN // 001: linear scaling: + _State := _State + UINT#1; // 010: rotary scaling: + ELSIF (_S_0_0044 AND WORD#16#0007) = WORD#16#0002 AND AxisType = eAxoDriveAxisType#Rotary THEN + _State := _State + UINT#1; + ELSE + AxisType := eAxoDriveAxisType#Error; + Messenger.ActivateOnCondition(ULINT#1807, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Checking the axis unit system in Velocity scaling type (0x2910:01 / S-0-0044 / --) + IF _State = UINT#10 THEN // Unit for linear scaling + IF AxisType = eAxoDriveAxisType#Linear AND NOT _S_0_0044.%X4 OR // 0: Millimeter [mm] + AxisType = eAxoDriveAxisType#Rotary AND _S_0_0044.%X4 THEN // 1: Inch [in] + _State := _State + UINT#1; // Unit for rotary scaling + ELSE // 0: Revolution + Messenger.ActivateOnCondition(ULINT#1808, TRUE, eAxoMessageCategory#Error); // 1: Degrees + RETURN; + END_IF; + END_IF; + //Checking the axis time base in Velocity scaling type (0x2910:01 / S-0-0044 / --) + IF _State = UINT#11 THEN // Unit of time + IF _S_0_0044.%X5 THEN // 0: Minute [min] + _State := _State + UINT#1; // 1: Second [s] + ELSE + Messenger.ActivateOnCondition(ULINT#1809, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Checking the axis Data reference in Velocity scaling type (0x2910:01 / S-0-0044 / --) + IF _State = UINT#12 THEN // Data reference + IF _S_0_0044.%X6 THEN // 0: at the motor shaft + _State := _State + UINT#1; // 1: at the load + ELSE + Messenger.ActivateOnCondition(ULINT#1810, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Reading Acceleration scaling type (0x2920:01 / S-0-0160 / --) 2byte, binary + IF _State = UINT#13 THEN // Scaling type + _ReadRecord( request := TRUE, // 001: linear scaling: + hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), // 010: rotary scaling: + index := DINT#160, // 011: Ramp time maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1811, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0078 := TO_INT(_word); - _State := UINT#6; + _S_0_0160 := _word; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#6 THEN - _ReadRecord(request := FALSE, record := _data2); - IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#7; + IF _State = UINT#14 THEN // Scaling type + _ReadRecord(request := FALSE, record := _data2); // 001: linear scaling: + IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN // 010: rotary scaling: + _State := _State + UINT#1; // 011: Ramp time END_IF; END_IF; - //Reading Velocity data scaling: Type (0x2902:01 / S-0-0044 / --) 2byte, binary - IF _State = UINT#7 THEN - _ReadRecord( request := TRUE, - hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#44, + //Checking the axis type in Acceleration scaling type (0x2920:01 / S-0-0160 / --) + IF _State = UINT#15 THEN // Scaling type + IF (_S_0_0160 AND WORD#16#0007) = WORD#16#0001 AND AxisType = eAxoDriveAxisType#Linear THEN // 001: linear scaling: + _State := _State + UINT#1; // 010: rotary scaling: + ELSIF (_S_0_0160 AND WORD#16#0007) = WORD#16#0002 AND AxisType = eAxoDriveAxisType#Rotary THEN // 011: Ramp time + _State := _State + UINT#1; + ELSE + AxisType := eAxoDriveAxisType#Error; + Messenger.ActivateOnCondition(ULINT#1812, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Checking the axis unit system in Acceleration scaling type (0x2920:01 / S-0-0160 / --) + IF _State = UINT#16 THEN // Unit for linear scaling + IF NOT _S_0_0160.%X4 THEN // 0: Meter [m] + _State := _State + UINT#1; // 1: Inch [in] + ELSE // Unit for rotary scaling + Messenger.ActivateOnCondition(ULINT#1813, TRUE, eAxoMessageCategory#Error); // 0: Radiant [rad] + RETURN; // 1: Reserved + END_IF; + END_IF; + //Checking the axis time base in Acceleration scaling type (0x2920:01 / S-0-0160 / --) + IF _State = UINT#17 THEN // Unit of time + IF NOT _S_0_0160.%X5 THEN // 0: Second [s²] + _State := _State + UINT#1; // 1: Reserved + ELSE + Messenger.ActivateOnCondition(ULINT#1814, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Checking the axis Data reference in Acceleration scaling type (0x2920:01 / S-0-0160 / --) + IF _State = UINT#18 THEN // Data reference + IF _S_0_0160.%X6 THEN // 0: at the motor shaft + _State := _State + UINT#1; // 1: at the load + ELSE + Messenger.ActivateOnCondition(ULINT#1815, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Reading Torque/force scaling type (0x2930:01 / S-0-0086 / --) 2byte, binary + IF _State = UINT#19 THEN // Scaling type + _ReadRecord( request := TRUE, // 000: Percentage-based scaling (% of reference value) + hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), // 001: translational scaling (force in N, lbf) + index := DINT#86, // 010: Rotary scaling (torque in Nm, inlbf) maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1816, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0044 := _word; - _State := UINT#8; + _S_0_0086 := _word; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#8 THEN - _ReadRecord(request := FALSE, record := _data2); - IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#9; + IF _State = UINT#20 THEN // Scaling type + _ReadRecord(request := FALSE, record := _data2); // 000: Percentage-based scaling (% of reference value) + IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN // 001: translational scaling (force in N, lbf) + _State := _State + UINT#1; // 010: Rotary scaling (torque in Nm, inlbf) END_IF; END_IF; - //Reading Velocity data scaling: Factor (0x2902:02 / S-0-0045 / --) 2byte, 0 decimal places - IF _State = UINT#9 THEN + //Checking the axis type in Torque/force scaling type (0x2930:01 / S-0-0086 / --) + IF _State = UINT#21 THEN // Scaling type + IF (_S_0_0086 AND WORD#16#0007) = WORD#16#0001 AND AxisType = eAxoDriveAxisType#Linear THEN // 000: Percentage-based scaling (% of reference value) + _State := _State + UINT#1; // 001: translational scaling (force in N, lbf) + ELSIF (_S_0_0086 AND WORD#16#0007) = WORD#16#0002 AND AxisType = eAxoDriveAxisType#Rotary THEN // 010: Rotary scaling (torque in Nm, inlbf) + _State := _State + UINT#1; + ELSE + AxisType := eAxoDriveAxisType#Error; + Messenger.ActivateOnCondition(ULINT#1817, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Checking the axis unit system in Torque/force scaling type (0x2930:01 / S-0-0086 / --) + IF _State = UINT#22 THEN // Unit for force + IF NOT _S_0_0086.%X4 THEN // 0: newton [N] + _State := _State + UINT#2; // 1: pound-force [lbf] + ELSE // Unit for torque + Messenger.ActivateOnCondition(ULINT#1818, TRUE, eAxoMessageCategory#Error); // 0: Newton-meter [Nm] + RETURN; // 1: inch-pound-force [inlbf] + END_IF; + END_IF; + // Irelevant for torque, skipping this control. + // //Checking the axis time base in Torque/force scaling type (0x2930:01 / S-0-0086 / --) + // IF _State = UINT#23 THEN + // IF _S_0_0086.%X5 THEN + // _State := _State + UINT#1; + // ELSE + // Messenger.ActivateOnCondition(ULINT#1819, TRUE, eAxoMessageCategory#Error); + // RETURN; + // END_IF; + // END_IF; + //Checking the axis Data reference in Torque/force scaling type (0x2930:01 / S-0-0086 / --) + IF _State = UINT#24 THEN // Data reference + IF _S_0_0086.%X6 THEN // 0: at the motor shaft + _State := _State + UINT#1; // 1: at the load + ELSE + Messenger.ActivateOnCondition(ULINT#1820, TRUE, eAxoMessageCategory#Error); + RETURN; + END_IF; + END_IF; + //Reading Position data scaling: Factor (0x2900:02 / S-0-0077 / --) 2byte, 0 decimal places + IF _State = UINT#25 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#45, + index := DINT#77, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1821, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0045 := TO_INT(_word); - _State := UINT#10; + _S_0_0077 := TO_INT(_word); + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#10 THEN + IF _State = UINT#26 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#11; + _State := _State + UINT#1; END_IF; END_IF; - //Reading Velocity data scaling: Exponent (0x2902:03 / S-0-0046 / --) 2byte, 0 decimal places - IF _State = UINT#11 THEN + //Reading Position data scaling: Exponent (0x2900:03 / S-0-0078 / --) 2byte, 0 decimal places + IF _State = UINT#27 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#46, + index := DINT#78, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1822, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0046 := TO_INT(_word); - _State := UINT#12; + _S_0_0078 := TO_INT(_word); + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#12 THEN + IF _State = UINT#28 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#13; + _State := _State + UINT#1; + END_IF; + END_IF; + //Reading Rotary position resolution (0x2900:04 / S-0-0079 / --) 4byte, 0 decimal places + IF _State = UINT#29 THEN + _ReadRecord( request := TRUE, + hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), + index := DINT#79, + maxLength := UINT#4, + record := _data4); + Messenger.ActivateOnCondition(ULINT#1823, _ReadRecord.error, eAxoMessageCategory#Error); + IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN + _dword.%B0 := _data4[0]; + _dword.%B1 := _data4[1]; + _dword.%B2 := _data4[2]; + _dword.%B3 := _data4[3]; + _S_0_0079 := TO_DINT(_dword); + _State := _State + UINT#1; + END_IF; + END_IF; + IF _State = UINT#30 THEN + _ReadRecord(request := FALSE, record := _data4); + IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN + _State := _State + UINT#1; END_IF; END_IF; - //Reading Acceleration data scaling: Type (0x2904:01 / S-0-0160 / --) 2byte, binary - IF _State = UINT#13 THEN + //Reading Velocity data scaling: Factor (0x2902:02 / S-0-0045 / --) 2byte, 0 decimal places + IF _State = UINT#31 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#160, + index := DINT#45, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1824, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0160 := _word; - _State := UINT#14; + _S_0_0045 := TO_INT(_word); + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#14 THEN + IF _State = UINT#32 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#15; + _State := _State + UINT#1; END_IF; END_IF; - //Reading Acceleration data scaling: Factor (0x2904:02 / S-0-0161 / --) 2byte, 0 decimal places - IF _State = UINT#15 THEN + //Reading Velocity data scaling: Exponent (0x2902:03 / S-0-0046 / --) 2byte, 0 decimal places + IF _State = UINT#33 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#161, + index := DINT#46, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1825, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0161 := TO_INT(_word); - _State := UINT#16; + _S_0_0046 := TO_INT(_word); + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#16 THEN + IF _State = UINT#34 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#17; + _State := _State + UINT#1; END_IF; END_IF; - //Reading Acceleration data scaling: Exponent (0x2904:03 / S-0-0162 / --) 2byte, 0 decimal places - IF _State = UINT#17 THEN + //Reading Acceleration data scaling: Factor (0x2904:02 / S-0-0161 / --) 2byte, 0 decimal places + IF _State = UINT#35 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#162, + index := DINT#161, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1826, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0162 := TO_INT(_word); - _State := UINT#18; + _S_0_0161 := TO_INT(_word); + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#18 THEN + IF _State = UINT#36 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#19; + _State := _State + UINT#1; END_IF; END_IF; - //Reading Torque/force data scaling: Type (0x2906:01 / S-0-0086 / --) 2byte, binary - IF _State = UINT#19 THEN + //Reading Acceleration data scaling: Exponent (0x2904:03 / S-0-0162 / --) 2byte, 0 decimal places + IF _State = UINT#37 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), - index := DINT#86, + index := DINT#162, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1827, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; - _S_0_0086 := _word; - _State := UINT#20; + _S_0_0162 := TO_INT(_word); + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#20 THEN + IF _State = UINT#38 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#21; + _State := _State + UINT#1; END_IF; END_IF; //Reading Torque/force data scaling: Factor (0x2906:02 / S-0-0093 / --) 2byte, 0 decimal places - IF _State = UINT#21 THEN + IF _State = UINT#39 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), index := DINT#93, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1828, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; _S_0_0093 := TO_INT(_word); - _State := UINT#22; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#22 THEN + IF _State = UINT#40 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#23; + _State := _State + UINT#1; END_IF; END_IF; //Reading Torque/force data scaling: Exponent (0x2906:03 / S-0-0094 / --) 2byte, 0 decimal places - IF _State = UINT#23 THEN + IF _State = UINT#41 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), index := DINT#94, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1829, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; _S_0_0094 := TO_INT(_word); - _State := UINT#24; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#24 THEN + IF _State = UINT#42 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#25; + _State := _State + UINT#1; END_IF; END_IF; //Reading Inverter type data: Nominal current (0x2314:01 / S-0-0112 / --) 4bytes, 3decimal places - IF _State = UINT#25 THEN + IF _State = UINT#43 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), index := DINT#112, maxLength := UINT#4, record := _data4); + Messenger.ActivateOnCondition(ULINT#1830, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _dword.%B0 := _data4[0]; _dword.%B1 := _data4[1]; _dword.%B2 := _data4[2]; _dword.%B3 := _data4[3]; _S_0_0112 := TO_REAL(TO_INT(_dword)) * REAL#0.001; - _State := UINT#26; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#26 THEN + IF _State = UINT#44 THEN _ReadRecord(request := FALSE, record := _data4); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#27; + _State := _State + UINT#1; END_IF; END_IF; //Reading Motor torque model: Current constant (0x2018:01 / P-0-0450 / --) 2bytes, 2decimal places - IF _State = UINT#27 THEN + IF _State = UINT#45 THEN _ReadRecord( request := TRUE, hardwareID := (AxisRefExt.HWIDs.HW_S_0_0134_0_0), index := DINT#4546, maxLength := UINT#2, record := _data2); + Messenger.ActivateOnCondition(ULINT#1831, _ReadRecord.error, eAxoMessageCategory#Error); IF NOT _ReadRecord.busy AND _ReadRecord.valid AND NOT _ReadRecord.error THEN _word.%B0 := _data2[0]; _word.%B1 := _data2[1]; _P_0_0450 := TO_REAL(TO_INT(_word)) * REAL#0.01; - _State := UINT#28; + _State := _State + UINT#1; END_IF; END_IF; - IF _State = UINT#28 THEN + IF _State = UINT#46 THEN _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN - _State := UINT#29; + _State := _State + UINT#1; END_IF; END_IF; //Calculating scaling constants - IF _State = UINT#29 THEN - // Position - ScalingConstantRequiredPosition := _exp[-_S_0_0078 - 3] / TO_LREAL(_S_0_0077); - ScalingConstantActualPosition := LREAL#1.0/ScalingConstantRequiredPosition; - // Velocity - ScalingConstantRequiredVelocity := LREAL#60.0 * _exp[-_S_0_0046 - 3] / TO_LREAL(_S_0_0045); - ScalingConstantActualVelocity := LREAL#1.0/ScalingConstantRequiredVelocity; - // Acceleration - ScalingConstantRequiredAcceleration := _exp[-_S_0_0162 - 3] / TO_LREAL(_S_0_0161); - ScalingConstantActualAcceleration := LREAL#1.0/ScalingConstantRequiredAcceleration; - // Deceleration - ScalingConstantRequiredDeceleration := ScalingConstantRequiredAcceleration; - ScalingConstantActualDeceleration := ScalingConstantActualAcceleration; - // Torque - ScalingConstantActualTorque := TO_LREAL(_S_0_0093) *_exp[_S_0_0094 - 2] * TO_LREAL(_P_0_0450) * TO_LREAL(_S_0_0112) ; - ScalingConstantRequiredTorque := LREAL#1.0/ScalingConstantActualTorque; - // Jerk - ScalingConstantRequiredJerk := 1000.0; - ScalingConstantActualJerk := 0.001; - - AxoStop_Deceleration := 1000.0; // mm/s2 - AxoStop_Jerk := 150000.0; // mm/s3 - AxoHalt_Deceleration := 1000.0; // mm/s2 - AxoHalt_Jerk := 150000.0; // mm/s3 - AxoHome_Position := 0.0; // mm - AxoHome_HommingMode := 551; // Negative direction, travel range limit switch, negative edge (NC contact) - AxoHome_Velocity := 2.0; // mm/s - AxoHome_Acceleration := 1000.0; // mm/s2 - AxoHome_Deceleration := 1000.0; // mm/s2 - AxoSetPosition_Position := 0.0; // mm - AxoMoveAbsolute_Position := 0.0; // mm - AxoMoveAbsolute_Velocity := 5.0; // mm/s - AxoMoveAbsolute_Acceleration := 1000.0; // mm/s2 - AxoMoveAbsolute_Deceleration := 1000.0; // mm/s2 - AxoMoveAbsolute_Jerk := 150000.0; // mm/s3 - AxoMoveRelative_Distance := 5.0; // mm - AxoMoveRelative_Velocity := 5.0; // mm/s - AxoMoveRelative_Acceleration := 1000.0; // mm/s2 - AxoMoveRelative_Deceleration := 1000.0; // mm/s2 - AxoMoveRelative_Jerk := 150000.0; // mm/s3 - AxoMoveAdditive_Distance := 5.0; // mm - AxoMoveAdditive_Velocity := 5.0; // mm/s - AxoMoveAdditive_Acceleration := 1000.0; // mm/s2 - AxoMoveAdditive_Deceleration := 1000.0; // mm/s2 - AxoMoveAdditive_Jerk := 150000.0; // mm/s3 - AxoMoveVelocity_Velocity := 5.0; // mm/s - AxoMoveVelocity_Acceleration := 1000.0; // mm/s2 - AxoMoveVelocity_Deceleration := 1000.0; // mm/s2 - AxoMoveVelocity_Jerk := 150000.0; // mm/s3 - AxoTorqueControl_Torque := 0.0; // Nm - AxoTorqueControl_TorqueRamp := 1.0; // Nm/s - AxoTorqueControl_Velocity := 5.0; // mm/s - AxoTorqueControl_Acceleration := 1000.0;// mm/s2 - AxoTorqueControl_Deceleration := 1000.0;// mm/s2 - AxoTorqueControl_Jerk := 150000.0; // mm/s3 - AxoJog_Velocity := 2.0; // mm/s - AxoJog_Acceleration := 500.0; // mm/s2 - AxoJog_Deceleration := 500.0; // mm/s2 - AxoJog_Jerk := 150000.0; // mm/s3 - AxisRefExt.Outputs.BipolarTorqueLimitation_S_0_0092_0_0 := INT#1000; // 1000~~ 100% - + IF _State = UINT#47 THEN + IF AxisType = eAxoDriveAxisType#Linear THEN + // Position + ScalingConstantRequiredPosition := _exp[-_S_0_0078 - 3] / TO_LREAL(_S_0_0077); + ScalingConstantActualPosition := LREAL#1.0/ScalingConstantRequiredPosition; + // Velocity + ScalingConstantRequiredVelocity := _exp[-_S_0_0046 - 3] / TO_LREAL(_S_0_0045); + ScalingConstantActualVelocity := LREAL#1.0/ScalingConstantRequiredVelocity; + // Acceleration + ScalingConstantRequiredAcceleration := _exp[-_S_0_0162 - 3] / TO_LREAL(_S_0_0161); + ScalingConstantActualAcceleration := LREAL#1.0/ScalingConstantRequiredAcceleration; + // Deceleration + ScalingConstantRequiredDeceleration := ScalingConstantRequiredAcceleration; + ScalingConstantActualDeceleration := ScalingConstantActualAcceleration; + // Torque + ScalingConstantActualTorque := TO_LREAL(_S_0_0093) *_exp[_S_0_0094]; + ScalingConstantRequiredTorque := LREAL#1.0/ScalingConstantActualTorque; + // Jerk + ScalingConstantRequiredJerk := ScalingConstantRequiredAcceleration; + ScalingConstantActualJerk := LREAL#1.0/ScalingConstantRequiredJerk; + + AxoStop_Deceleration := 1000.0; // mm/s2 + AxoStop_Jerk := 150000.0; // mm/s3 + AxoHalt_Deceleration := 1000.0; // mm/s2 + AxoHalt_Jerk := 150000.0; // mm/s3 + AxoHome_Position := 0.0; // mm + AxoHome_HommingMode := 551; // Negative direction, travel range limit switch, negative edge (NC contact) + AxoHome_Velocity := 2.0; // mm/s + AxoHome_Acceleration := 1000.0; // mm/s2 + AxoHome_Deceleration := 1000.0; // mm/s2 + AxoSetPosition_Position := 0.0; // mm + AxoMoveAbsolute_Position := 0.0; // mm + AxoMoveAbsolute_Velocity := 5.0; // mm/s + AxoMoveAbsolute_Acceleration := 1000.0; // mm/s2 + AxoMoveAbsolute_Deceleration := 1000.0; // mm/s2 + AxoMoveAbsolute_Jerk := 150000.0; // mm/s3 + AxoMoveRelative_Distance := 5.0; // mm + AxoMoveRelative_Velocity := 5.0; // mm/s + AxoMoveRelative_Acceleration := 1000.0; // mm/s2 + AxoMoveRelative_Deceleration := 1000.0; // mm/s2 + AxoMoveRelative_Jerk := 150000.0; // mm/s3 + AxoMoveAdditive_Distance := 5.0; // mm + AxoMoveAdditive_Velocity := 5.0; // mm/s + AxoMoveAdditive_Acceleration := 1000.0; // mm/s2 + AxoMoveAdditive_Deceleration := 1000.0; // mm/s2 + AxoMoveAdditive_Jerk := 150000.0; // mm/s3 + AxoMoveVelocity_Velocity := 5.0; // mm/s + AxoMoveVelocity_Acceleration := 1000.0; // mm/s2 + AxoMoveVelocity_Deceleration := 1000.0; // mm/s2 + AxoMoveVelocity_Jerk := 150000.0; // mm/s3 + AxoTorqueControl_Torque := 0.0; // N + AxoTorqueControl_TorqueRamp := 1.0; // N/s + AxoTorqueControl_Velocity := 5.0; // mm/s + AxoTorqueControl_Acceleration := 1000.0;// mm/s2 + AxoTorqueControl_Deceleration := 1000.0;// mm/s2 + AxoTorqueControl_Jerk := 150000.0; // mm/s3 + AxoJog_Velocity := 2.0; // mm/s + AxoJog_Acceleration := 500.0; // mm/s2 + AxoJog_Deceleration := 500.0; // mm/s2 + AxoJog_Jerk := 150000.0; // mm/s3 + AxisRefExt.Outputs.BipolarTorqueLimitation_S_0_0092_0_0 := INT#1000; // 1000~~ 100% + ELSIF AxisType = eAxoDriveAxisType#Rotary THEN + // Position + ScalingConstantRequiredPosition := TO_LREAL(_S_0_0079) / LREAL#360.0; + ScalingConstantActualPosition := LREAL#1.0/ScalingConstantRequiredPosition; + // Velocity + ScalingConstantRequiredVelocity := _exp[-_S_0_0046] / (TO_LREAL(_S_0_0045)); + ScalingConstantActualVelocity := LREAL#1.0/ScalingConstantRequiredVelocity; + // Acceleration + ScalingConstantRequiredAcceleration := _exp[-_S_0_0162] / (TO_LREAL(_S_0_0161) * LREAL#180.0 /System.Math.Constants#PI); + ScalingConstantActualAcceleration := LREAL#1.0/ScalingConstantRequiredAcceleration; + // Deceleration + ScalingConstantRequiredDeceleration := ScalingConstantRequiredAcceleration; + ScalingConstantActualDeceleration := ScalingConstantActualAcceleration; + // Torque + ScalingConstantActualTorque := TO_LREAL(_S_0_0093) *_exp[_S_0_0094]; + ScalingConstantRequiredTorque := LREAL#1.0/ScalingConstantActualTorque; + // Jerk + // ScalingConstantRequiredJerk := 1000.0; + // ScalingConstantActualJerk := 0.001; + + ScalingConstantRequiredJerk := ScalingConstantRequiredAcceleration; + ScalingConstantActualJerk := LREAL#1.0/ScalingConstantRequiredJerk; + + AxoStop_Deceleration := 36000.0; // deg/s2 + AxoStop_Jerk := 3600000.0; // deg/s3 + AxoHalt_Deceleration := 36000.0; // deg/s2 + AxoHalt_Jerk := 3600000.0; // deg/s3 + AxoHome_Position := 0.0; // deg + AxoHome_HommingMode := 551; // Negative direction, travel range limit switch, negative edge (NC contact) + AxoHome_Velocity := 45.0; // deg/s + AxoHome_Acceleration := 36000.0; // deg/s2 + AxoHome_Deceleration := 36000.0; // deg/s2 + AxoSetPosition_Position := 0.0; // deg + AxoMoveAbsolute_Position := 0.0; // deg + AxoMoveAbsolute_Velocity := 360.0; // deg/s + AxoMoveAbsolute_Acceleration := 36000.0; // deg/s2 + AxoMoveAbsolute_Deceleration := 36000.0; // deg/s2 + AxoMoveAbsolute_Jerk := 3600000.0; // deg/s3 + AxoMoveRelative_Distance := 360.0; // deg + AxoMoveRelative_Velocity := 45.0; // deg/s + AxoMoveRelative_Acceleration := 36000.0; // deg/s2 + AxoMoveRelative_Deceleration := 36000.0; // deg/s2 + AxoMoveRelative_Jerk := 3600000.0; // deg/s3 + AxoMoveAdditive_Distance := 360.0; // deg + AxoMoveAdditive_Velocity := 45.0; // deg/s + AxoMoveAdditive_Acceleration := 36000.0; // deg/s2 + AxoMoveAdditive_Deceleration := 36000.0; // deg/s2 + AxoMoveAdditive_Jerk := 3600000.0; // deg/s3 + AxoMoveVelocity_Velocity := 45.0; // deg/s + AxoMoveVelocity_Acceleration := 36000.0; // deg/s2 + AxoMoveVelocity_Deceleration := 36000.0; // deg/s2 + AxoMoveVelocity_Jerk := 3600000.0; // deg/s3 + AxoTorqueControl_Torque := 0.0; // Nm + AxoTorqueControl_TorqueRamp := 1.0; // Nm/s + AxoTorqueControl_Velocity := 90.0; // deg/s + AxoTorqueControl_Acceleration := 36000.0; // deg/s2 + AxoTorqueControl_Deceleration := 36000.0; // deg/s2 + AxoTorqueControl_Jerk := 3600000.0; // deg/s3 + AxoJog_Velocity := 45.0; // deg/s + AxoJog_Acceleration := 720.0; // deg/s2 + AxoJog_Deceleration := 720.0; // deg/s2 + AxoJog_Jerk := 1800000.0; // deg/s3 + AxisRefExt.Outputs.BipolarTorqueLimitation_S_0_0092_0_0 := INT#1000; // 1000~~ 100% + END_IF; _ScalingRead := TRUE; - _State := UINT#0; + _State := UINT#50; END_IF; RETURN; END_IF; + // Retrigger the reading of the scaling parameters in case of leaving the operation mode. + IF (*_ScalingRead AND*) NOT AxisRefExt.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 AND + (AxisRefExt.Inputs.SignalStatusWord_S_0_0144_0_0.CmPmOmBit0 OR AxisRefExt.Inputs.SignalStatusWord_S_0_0144_0_0.CmPmOmBit1 ) THEN + _ScalingRead := FALSE; + _State := UINT#0; + END_IF; + //*************************************************// Messenger.ActivateOnCondition(ULINT#300, Enable AND NOT EnablePositive, eAxoMessageCategory#Info); @@ -1524,7 +1800,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives ELSE THIS.MessageCodeFromMC := ULINT#0; END_IF; - END_IF; + END_IF; + + IF _ScalingRead AND _State = UINT#50 THEN + THIS.AxoReset_Task.RemoteInvoke := TRUE; + _State := UINT#0; + END_IF; + END_METHOD /// @@ -1956,7 +2238,6 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_HomeErrorID := DINT#0; DriveStatus.Error.Id := UINT#0; TaskMessenger.Restore(); - THIS.CallTimers(FALSE); _tmpTimer.OnDelay(THIS, FALSE , T#0s); // _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.IPOSYNC := FALSE; // _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := FALSE; @@ -1970,6 +2251,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.JogNegative := FALSE; _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.ClearError := FALSE; _State := UINT#310; + THIS.CallTimers(FALSE); END_IF; // Reseting InReference flag IF _State = UINT#310 THEN @@ -1981,6 +2263,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InReference THEN _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.CancelReferencePoint := FALSE; _State := UINT#311; + THIS.CallTimers(FALSE); RETURN; END_IF; END_IF; @@ -1992,6 +2275,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives END_IF; IF Acceleration <= 0 OR Deceleration <= 0 THEN _State := UINT#329; + THIS.CallTimers(FALSE); RETURN; END_IF; @@ -2007,11 +2291,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data4); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#312; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN Messenger.Activate( UINT#1444, eAxoMessageCategory#Error); MC_HomeErrorID := DINT#1444; _WriteRecord(request := FALSE, record := _data4); _State := UINT#329; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#312 THEN @@ -2022,6 +2308,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _WriteRecord(request := FALSE, record := _data4); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#313; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Homing function: Configuration (0x2500:02 / S-0-0147 / --) @@ -2040,11 +2327,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data2); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#314; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN Messenger.Activate( UINT#1445, eAxoMessageCategory#Error); MC_HomeErrorID := DINT#1445; _WriteRecord(request := FALSE, record := _data2); _State := UINT#329; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#314 THEN @@ -2055,6 +2344,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _WriteRecord(request := FALSE, record := _data2); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#315; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Homing speeds: Speed during search for switch (0x6099:01 / S-0-0041 / --) @@ -2076,11 +2366,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); _State := UINT#316; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN Messenger.Activate( UINT#1446, eAxoMessageCategory#Error); MC_HomeErrorID := DINT#1446; _WriteRecord(request := FALSE, record := _data4); _State := UINT#329; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Homing speeds: Speed during search for zero (0x6099:02 / S-0-0542 / --) @@ -2102,11 +2394,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); _State := UINT#317; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN Messenger.Activate( UINT#1446, eAxoMessageCategory#Error); MC_HomeErrorID := DINT#1446; _WriteRecord(request := FALSE, record := _data4); _State := UINT#329; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Homing acceleration (0x609A:00 / S-0-0042 / --) @@ -2127,11 +2421,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data4); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#318; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN Messenger.Activate( UINT#1447, eAxoMessageCategory#Error); MC_HomeErrorID := DINT#1447; _WriteRecord(request := FALSE, record := _data4); _State := UINT#329; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#318 THEN @@ -2142,6 +2438,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _WriteRecord(request := FALSE, record := _data4); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#319; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#319 THEN @@ -2156,6 +2453,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit1 AND NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit2 THEN _State := UINT#320; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#320 THEN @@ -2166,6 +2464,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 THEN _State := UINT#321; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#321 THEN @@ -2177,6 +2476,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.HomingControl := TRUE; _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue := NOT _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue; _State := UINT#322; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#322 THEN IF _infoTimer.output THEN @@ -2186,6 +2486,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InReference AND _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.DriveStandstill THEN _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.HomingControl := FALSE; _State := UINT#323; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#323 THEN @@ -2197,18 +2498,22 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.JogNegative := FALSE; _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.ClearError := FALSE; _State := UINT#324; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#324 THEN _tmpTimer.OnDelay(THIS, _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InReference AND _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.DriveStandstill , T#100ms); IF _tmpTimer.output THEN _State := UINT#325; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#325 THEN _State := UINT#326; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#326 THEN _State := UINT#327; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#327 THEN Done := TRUE; @@ -2328,14 +2633,17 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.CommandDecceleration_S_0_0359_0_0 := TO_DINT(Deceleration * ScalingConstantRequiredDeceleration ); _AxisReference^.Outputs.CommandJerk_S_0_0193_0_0 := TO_DINT(Jerk * ScalingConstantRequiredJerk ); _State := UINT#330; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#330 THEN Busy := TRUE; Active := TRUE; IF Deceleration <= 0 OR Jerk <= 0 THEN _State := UINT#339; + THIS.CallTimers(FALSE); ELSE _State := UINT#331; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#331 THEN @@ -2348,6 +2656,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := FALSE; IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InStandstill THEN _State := UINT#332; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#332 THEN @@ -2355,6 +2664,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#333; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#333 THEN @@ -2362,6 +2672,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#334; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#334 THEN @@ -2369,6 +2680,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#335; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#335 THEN @@ -2376,6 +2688,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#336; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#336 THEN @@ -2383,12 +2696,14 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#337; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#337 THEN Done := TRUE; Active := TRUE; MC_StopCycle := ULINT#0; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#338 THEN MC_StopCycle := ULINT#0; @@ -2495,6 +2810,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.CommandDecceleration_S_0_0359_0_0 := TO_DINT(Deceleration * ScalingConstantRequiredDeceleration); _AxisReference^.Outputs.CommandJerk_S_0_0193_0_0 := TO_DINT(Jerk * ScalingConstantRequiredJerk); _State := UINT#340; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#340 THEN IF _infoTimer.output THEN @@ -2505,8 +2821,10 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF Deceleration <= 0 OR Jerk <= 0 THEN _State := UINT#349; + THIS.CallTimers(FALSE); ELSE _State := UINT#341; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#341 THEN @@ -2519,6 +2837,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := FALSE; IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InStandstill THEN _State := UINT#342; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#342 THEN @@ -2526,6 +2845,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#343; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#343 THEN @@ -2533,21 +2853,25 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF TRUE THEN _State := UINT#344; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#344 THEN IF TRUE THEN _State := UINT#345; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#345 THEN IF TRUE THEN _State := UINT#346; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#346 THEN IF TRUE THEN _State := UINT#347; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#347 THEN @@ -2677,6 +3001,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AbsoluteRelative := FALSE; MC_MoveAbsoluteContinuousUpdate_SV := ContinuousUpdate; _State := UINT#350; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#350 THEN IF _infoTimer.output THEN @@ -2698,6 +3023,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_MoveAbsoluteJerk_PV := Jerk; MC_MoveAbsoluteDirection_PV := Direction; _State := UINT#351; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#351 THEN @@ -2714,6 +3040,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit1 AND NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit2 THEN _State := UINT#352; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#352 THEN @@ -2726,6 +3053,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 THEN _State := UINT#353; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#353 THEN @@ -2738,6 +3066,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := TRUE; IF TRUE THEN _State := UINT#354; + THIS.CallTimers(FALSE); END_IF; END_IF; //Executing movement @@ -2751,6 +3080,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue := NOT _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.PositionCommandAck; IF TRUE THEN _State := UINT#355; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#355 THEN @@ -2762,6 +3092,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue = _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.PositionCommandAck THEN _State := UINT#356; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#356 THEN @@ -2771,6 +3102,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives END_IF; IF _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.DriveStandstill AND _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.InTargetPosition THEN _State := UINT#357; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#357 THEN @@ -2910,6 +3242,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.ImmediateChange := TRUE; MC_MoveRelativeContinuousUpdate_SV := ContinuousUpdate; _State := UINT#360; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#360 THEN IF _infoTimer.output THEN @@ -2930,6 +3263,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_MoveRelativeDeceleration_PV := Deceleration; MC_MoveRelativeJerk_PV := Jerk; _State := UINT#361; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#361 THEN @@ -2946,6 +3280,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit1 AND NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit2 THEN _State := UINT#362; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#362 THEN @@ -2958,6 +3293,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 THEN _State := UINT#363; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#363 THEN @@ -2970,6 +3306,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := TRUE; IF TRUE THEN _State := UINT#364; + THIS.CallTimers(FALSE); END_IF; END_IF; //Executing movement @@ -2983,6 +3320,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue := NOT _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.PositionCommandAck; IF TRUE THEN _State := UINT#365; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#365 THEN @@ -2994,6 +3332,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue = _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.PositionCommandAck THEN _State := UINT#366; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#366 THEN @@ -3003,6 +3342,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives END_IF; IF _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.DriveStandstill AND _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.InTargetPosition THEN _State := UINT#367; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#367 THEN @@ -3176,10 +3516,12 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Data.Cycle := _AxisReference^.Data.Cycle + ULINT#2; MC_MoveAdditiveCycle := _AxisReference^.Data.Cycle ; _State := UINT#371; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#370 THEN _State := UINT#371; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#371 THEN IF _infoTimer.output THEN @@ -3195,6 +3537,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit1 AND NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit2 THEN _State := UINT#372; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#372 THEN @@ -3207,6 +3550,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 THEN _State := UINT#373; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#373 THEN @@ -3219,6 +3563,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := TRUE; IF TRUE THEN _State := UINT#374; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#374 THEN @@ -3231,6 +3576,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue := NOT _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.PositionCommandAck; IF TRUE THEN _State := UINT#375; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#375 THEN @@ -3242,6 +3588,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Active := TRUE; IF _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.AcceptanceOfPositioningCommandValue = _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.PositionCommandAck THEN _State := UINT#376; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#376 THEN @@ -3251,6 +3598,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives END_IF; IF _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.DriveStandstill AND _AxisReference^.Inputs.SignalStatusWord_S_0_0144_0_0.InTargetPosition THEN _State := UINT#377; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#377 THEN @@ -3437,6 +3785,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_MoveVelocityContinuousUpdate_SV := ContinuousUpdate; _State := UINT#380; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#380 THEN Busy := TRUE; @@ -3454,6 +3803,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_MoveVelocityJerk_PV := Jerk; MC_MoveVelocityDirection_PV := Direction_; _State := UINT#381; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#381 THEN @@ -3470,6 +3820,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit1 AND NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit2 THEN _State := UINT#382; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#382 THEN @@ -3482,6 +3833,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 THEN _State := UINT#383; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#383 THEN @@ -3494,6 +3846,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveHalt := TRUE; IF TRUE THEN //NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.CommandProcessingStatus THEN _State := UINT#384; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#384 THEN @@ -3511,13 +3864,15 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.JogNegative := TRUE; END_IF; - IF NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InStandstill THEN + IF NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InStandstill THEN _State := UINT#385; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#385 THEN IF TRUE THEN _State := UINT#386; + THIS.CallTimers(FALSE); END_IF; END_IF; IF Direction_ = AXOpen.Components.Abstractions.Drives.eAxoDriveDirection#PositiveDirection THEN @@ -3535,6 +3890,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives END_IF; IF InVelocity AND NOT MC_MoveVelocityContinuousUpdate_SV THEN _State := UINT#387; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#387 THEN @@ -3714,6 +4070,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives // _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.SetAbsPositionFunction := FALSE; MC_TorqueControlContinuousUpdate_SV := ContinuousUpdate; _State := UINT#390; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#390 THEN Busy := TRUE; @@ -3736,14 +4093,17 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_TorqueControlTorqueRamp_PV := TorqueRamp; IF PositiveDirection_ AND THIS.ActualPosition >= MC_TorqueControlPositionLimit_PV THEN _State := UINT#399; + THIS.CallTimers(FALSE); Messenger.Activate( UINT#1538, eAxoMessageCategory#ProgrammingError); MC_TorqueControlErrorID := DINT#1538; ELSIF NOT PositiveDirection_ AND THIS.ActualPosition <= MC_TorqueControlPositionLimit_PV THEN _State := UINT#399; + THIS.CallTimers(FALSE); Messenger.Activate( UINT#1539, eAxoMessageCategory#ProgrammingError); MC_TorqueControlErrorID := DINT#1539; ELSE _State := UINT#391; + THIS.CallTimers(FALSE); END_IF; END_IF; END_IF; @@ -3766,11 +4126,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data2); _State := UINT#392; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data2); Messenger.Activate( UINT#1540, eAxoMessageCategory#Error); MC_WriteRealParameterErrorID := WORD#1540; _State := UINT#399; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Torque/force control: Ramp time (0x2838:02 / S-0-0823 / --) @@ -3792,11 +4154,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data2); _State := UINT#393; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data2); Messenger.Activate( UINT#1541, eAxoMessageCategory#Error); MC_WriteRealParameterErrorID := WORD#1541; _State := UINT#399; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Torque/force control: High velocity limit value (0x60C9:00 / P-0-0421.0.3 / P-0-2249) @@ -3820,11 +4184,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); _State := UINT#394; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1542, eAxoMessageCategory#Error); MC_WriteRealParameterErrorID := WORD#1542; _State := UINT#399; + THIS.CallTimers(FALSE); END_IF; END_IF; //Writing Torque/force control: Low velocity limit value (0x60C8:00 / P-0-0421.0.4 / P-0-2250) @@ -3848,11 +4214,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); _State := UINT#395; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1543, eAxoMessageCategory#Error); MC_WriteRealParameterErrorID := WORD#1543; _State := UINT#399; + THIS.CallTimers(FALSE); END_IF; END_IF; //Executing movement @@ -3871,6 +4239,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit1 AND NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ActualOperatingModeBit2 THEN _State := UINT#396; + THIS.CallTimers(FALSE); END_IF; END_IF; IF PositiveDirection_ THEN @@ -3884,6 +4253,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _State = UINT#396 THEN IF InTorque AND NOT MC_TorqueControlContinuousUpdate_SV THEN _State := UINT#397; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#397 THEN @@ -4025,6 +4395,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.ClearError := FALSE; MC_SetPositionPowerStatusPV := _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0; _State := UINT#400; + THIS.CallTimers(FALSE); END_IF; // Power off IF _State = UINT#400 THEN @@ -4038,6 +4409,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.DriveControlWord_S_0_0134_0_0.DriveOn := FALSE; IF NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 THEN _State := UINT#401; + THIS.CallTimers(FALSE); RETURN; END_IF; END_IF; @@ -4052,6 +4424,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF NOT _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.InReference THEN _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.CancelReferencePoint := FALSE; _State := UINT#402; + THIS.CallTimers(FALSE); RETURN; END_IF; END_IF; @@ -4074,11 +4447,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data4); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#403; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN Messenger.Activate( UINT#1551, eAxoMessageCategory#Error); MC_HomeErrorID := DINT#1551; _WriteRecord(request := FALSE, record := _data4); - _State := UINT#609; + _State := UINT#409; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#403 THEN @@ -4090,6 +4465,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _WriteRecord(request := FALSE, record := _data4); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#404; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#404 THEN @@ -4103,8 +4479,10 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.SetAbsPositionFunction := FALSE; IF MC_SetPositionPowerStatusPV THEN _State := UINT#405; + THIS.CallTimers(FALSE); ELSE _State := UINT#407; + THIS.CallTimers(FALSE); END_IF; END_IF; END_IF; @@ -4119,6 +4497,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit0 AND _AxisReference^.Inputs.DriveStatusWord_S_0_0135_0_0.ReadyForOperationBit1 THEN _AxisReference^.Outputs.SignalControlWord_S_0_0145_0_0.SetAbsPositionFunction := FALSE; _State := UINT#407; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#407 THEN @@ -4283,6 +4662,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Busy := TRUE; MC_ReadParameterErrorID := DINT#0; _State := UINT#410; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#410 THEN IF _infoTimer.output THEN @@ -4307,12 +4687,14 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_ReadParameterValid := TRUE; MC_ReadParameterValue :=TO_LINT(_lword); _State := UINT#411; + THIS.CallTimers(FALSE); END_IF; IF _ReadRecord.error THEN _ReadRecord(request := FALSE, record := _data8); Messenger.Activate( UINT#1581, eAxoMessageCategory#Error); MC_ReadParameterErrorID := DINT#1581; _State := UINT#419; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#411 THEN @@ -4324,6 +4706,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord(request := FALSE, record := _data8); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN _State := UINT#410; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#419 THEN @@ -4399,6 +4782,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Busy := TRUE; MC_ReadRealParameterErrorID := DINT#0; _State := UINT#420; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#420 THEN IF _infoTimer.output THEN @@ -4418,13 +4802,15 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _dword.%B3 := _data4[3]; MC_ReadRealParameterValid := TRUE; MC_ReadRealParameterValue :=TO_REAL(TO_DINT(_dword)); - _State := UINT#621; + _State := UINT#421; + THIS.CallTimers(FALSE); END_IF; IF _ReadRecord.error THEN _ReadRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1591, eAxoMessageCategory#Error); MC_ReadRealParameterErrorID := DINT#1591; - _State := UINT#629; + _State := UINT#429; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#421 THEN @@ -4436,6 +4822,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord(request := FALSE, record := _data4); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN _State := UINT#420; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#429 THEN @@ -4512,6 +4899,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Busy := TRUE; MC_ReadBoolParameterErrorID := WORD#16#0000; _State := UINT#430; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#430 THEN IF _infoTimer.output THEN @@ -4528,12 +4916,14 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_ReadBoolParameterValid := TRUE; MC_ReadBoolParameterValue := _data2[0].%X0; _State := UINT#431; + THIS.CallTimers(FALSE); END_IF; IF _ReadRecord.error THEN _ReadRecord(request := FALSE, record := _data2); Messenger.Activate( UINT#1601, eAxoMessageCategory#Error); MC_ReadBoolParameterErrorID := WORD#1601; _State := UINT#439; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#431 THEN @@ -4545,6 +4935,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord(request := FALSE, record := _data2); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN _State := UINT#430; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#439 THEN @@ -4625,6 +5016,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives DriveStatus.Error.Id := UINT#0; TaskMessenger.Restore(); _State := UINT#440; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#440 THEN IF _infoTimer.output THEN @@ -4648,17 +5040,20 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data8); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#441; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data8); Messenger.Activate( UINT#1611, eAxoMessageCategory#Error); MC_WriteParameterErrorID := WORD#1611; _State := UINT#449; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#441 THEN _WriteRecord(request := FALSE, record := _data8); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#447; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#447 THEN @@ -4743,6 +5138,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _State = UINT#0 THEN Busy := TRUE; _State := UINT#450; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#450 THEN IF _infoTimer.output THEN @@ -4762,11 +5158,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data4); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#451; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1621, eAxoMessageCategory#Error); MC_WriteRealParameterErrorID := WORD#1621; _State := UINT#459; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#451 THEN @@ -4778,6 +5176,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _WriteRecord(request := FALSE, record := _data4); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#457; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#457 THEN @@ -4862,6 +5261,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _State = UINT#0 THEN Busy := TRUE; _State := UINT#460; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#460 THEN IF _infoTimer.output THEN @@ -4878,11 +5278,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data2); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#461; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data2); Messenger.Activate( UINT#1631, eAxoMessageCategory#Error); MC_WriteBoolParameterErrorID := WORD#1631; _State := UINT#469; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#461 THEN @@ -4894,6 +5296,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _WriteRecord(request := FALSE, record := _data2); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#467; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#467 THEN @@ -4984,6 +5387,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Busy := TRUE; MC_ReadDigitalInputErrorID := WORD#16#0000; _State := UINT#470; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#470 THEN IF _infoTimer.output THEN @@ -5004,12 +5408,14 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_ReadDigitalInputValid := TRUE; MC_ReadDigitalInputValue := System.BitAccess.GetBit(_dword, TO_USINT(InputNumber)); _State := UINT#471; + THIS.CallTimers(FALSE); END_IF; IF _ReadRecord.error THEN _ReadRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1642, eAxoMessageCategory#Error); MC_ReadDigitalInputErrorID := WORD#1642; _State := UINT#479; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#471 THEN @@ -5021,6 +5427,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord(request := FALSE, record := _data4); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN _State := UINT#470; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#479 THEN @@ -5103,6 +5510,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Busy := TRUE; MC_ReadDigitalOutputErrorID := WORD#16#0000; _State := UINT#480; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#480 THEN IF _infoTimer.output THEN @@ -5123,12 +5531,14 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_ReadDigitalOutputValid := TRUE; MC_ReadDigitalOutputValue := System.BitAccess.GetBit(_dword, TO_USINT(OutputNumber)); _State := UINT#481; + THIS.CallTimers(FALSE); END_IF; IF _ReadRecord.error THEN _ReadRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1652, eAxoMessageCategory#Error); MC_ReadDigitalOutputErrorID := WORD#1652; _State := UINT#489; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#481 THEN @@ -5140,6 +5550,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord(request := FALSE, record := _data4); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN _State := UINT#480; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#489 THEN @@ -5226,6 +5637,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives IF _State = UINT#0 THEN Busy := TRUE; _State := UINT#490; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#490 THEN IF _infoTimer.output THEN @@ -5244,11 +5656,13 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_WriteDigitalOutputParameterPV.%B2 := _data4[2]; MC_WriteDigitalOutputParameterPV.%B3 := _data4[3]; _State := UINT#491; + THIS.CallTimers(FALSE); END_IF; IF _ReadRecord.error THEN Messenger.Activate( UINT#1662, eAxoMessageCategory#Error); MC_WriteDigitalOutputErrorID := WORD#1662; _State := UINT#499; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#491 THEN @@ -5260,6 +5674,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives _ReadRecord(request := FALSE, record := _data8); IF NOT _ReadRecord.busy AND NOT _ReadRecord.valid AND NOT _ReadRecord.error THEN _State := UINT#492; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#492 THEN @@ -5270,6 +5685,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives Busy := TRUE; MC_WriteDigitalOutputParameterPV := System.BitAccess.SetBit(value := MC_WriteDigitalOutputParameterPV,bitValue := Value,index := TO_USINT(OutputNumber)); _State := UINT#493; + THIS.CallTimers(FALSE); END_IF; IF _State = UINT#493 THEN Busy := TRUE; @@ -5284,17 +5700,20 @@ NAMESPACE AXOpen.Components.Rexroth.Drives record := _data4); IF NOT _WriteRecord.busy AND _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#494; + THIS.CallTimers(FALSE); ElSIF _WriteRecord.error THEN _WriteRecord(request := FALSE, record := _data4); Messenger.Activate( UINT#1663, eAxoMessageCategory#Error); MC_WriteParameterErrorID := WORD#1663; _State := UINT#499; + THIS.CallTimers(FALSE); END_IF; END_IF; IF _State = UINT#494 THEN _WriteRecord(request := FALSE, record := _data4); IF NOT _WriteRecord.busy AND NOT _WriteRecord.done AND NOT _WriteRecord.error THEN _State := UINT#497; + THIS.CallTimers(FALSE); END_IF; END_IF; @@ -5338,7 +5757,7 @@ NAMESPACE AXOpen.Components.Rexroth.Drives /// This method returns the actual position. /// METHOD PUBLIC OVERRIDE MC_ReadActualPosition - VAR_INPUT + VAR_INPUT AxisRef : AXOpen.Components.Abstractions.Drives.IAxoAxisReference; Enable : BOOL; // Get the value of the parameter continuously while enabled END_VAR @@ -5640,54 +6059,6 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_ReadAxisErrorCycle := _AxisReference^.Data.Cycle ; END_IF; - // IF Enable THEN - // THIS.UpdateInputs(_AxisReference^); - // IF _State = UINT#0 THEN - // Busy := TRUE; - // MC_ReadAxisErrorErrorID := WORD#16#0000; - // Parametrization.Inputs.Enable := FALSE; - // _State := UINT#310; - // END_IF; - // IF _State = UINT#310 THEN - // Busy := TRUE; - // Parametrization.Inputs.Enable := TRUE; - // Parametrization.Inputs.ReadWrite := FALSE; - // Parametrization.Inputs.ParameterNo := 12306; - // Parametrization.Inputs.Subindex := 0; - // Parametrization.Inputs.AxisNo := BYTE#1; - // Parametrization.Inputs.HardwareId := _AxisReference^.Data.hwIdModuleAccessPoint; - // IF Parametrization.Outputs.Done AND NOT Parametrization.Outputs.Error THEN - // MC_ReadAxisErrorValid := TRUE; - // MC_ReadAxisErrorValue := Parametrization.Outputs.ValueReadLINT; - // _State := UINT#311; - // END_IF; - // IF Parametrization.Outputs.Error THEN - // Messenger.Activate( UINT#1731, eAxoMessageCategory#ProgrammingError); - // MC_ReadAxisErrorErrorID := WORD#1731; - // _State := UINT#319; - // END_IF; - // END_IF; - // IF _State = UINT#311 THEN - // Busy := TRUE; - // Parametrization.Inputs.Enable := FALSE; - // Parametrization.Inputs.ReadWrite := FALSE; - // IF NOT Parametrization.Outputs.Done THEN - // _State := UINT#310; - // END_IF; - // END_IF; - // IF _State = UINT#319 THEN - // Error := TRUE; - // END_IF; - - // IF _State>=UINT#310 AND _State MC_ReadAxisErrorCycle THEN - // _AxisReference^.Data.Cycle := _AxisReference^.Data.Cycle - ULINT#1; - // _State := UINT#319; - // END_IF; - // END_IF; - // THIS.UpdateOutputs(_AxisReference^); - // END_IF; - IF NOT Enable AND MC_ReadAxisErrorEnable_PV THEN _AxisReference^.Status.CurrentMotionTaskId := AXOpen.Components.Drives.eAxoMotionTaskId#Axo_None; MC_ReadAxisErrorErrorID := WORD#0; @@ -5702,7 +6073,6 @@ NAMESPACE AXOpen.Components.Rexroth.Drives MC_ReadAxisErrorEnable_PV := Enable; Messenger.ActivateOnCondition(LastMessageCode,Enable AND Valid AND LastMessageCode = TO_ULINT(MC_ReadAxisErrorValue), eAxoMessageCategory#Error); - // IF NOT Messenger.IsActive THEN IF Messenger.MessengerState = eAxoMessengerState#Idle THEN LastMessageCode := TO_ULINT(MC_ReadAxisErrorValue); END_IF; diff --git a/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.cs b/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.cs index 1bd3f08e1..3b2319015 100644 --- a/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.cs +++ b/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.cs @@ -1,4 +1,4 @@ -using AXOpen.Messaging.Static; +using AXOpen.Messaging.Static; using AXSharp.Connector; using System; using System.Collections.Generic; @@ -357,6 +357,42 @@ private void InitializeMessenger() new KeyValuePair(1800, new AxoMessengerTextItem("Scaling parameters not yet read out of the drive" ,"Check proper value of the device Hardware ID")), + new KeyValuePair(1801, new AxoMessengerTextItem("Error while Reading Position data scaling: Type (0x2900:01 / S-0-0076 / --)" ,"")), + new KeyValuePair(1802, new AxoMessengerTextItem("Error: Invalid axis type defined in Position data scaling: Type (0x2900:01 / S-0-0076 / --). The only permmited valueas are: 'Rotary' or 'Linear'","Bits 0-2: 001-linear, 010-rotary")), + new KeyValuePair(1803, new AxoMessengerTextItem("Error: Invalid unit system defined in Position data scaling: Type (0x2900:01 / S-0-0076 / --). The only permitted values are '0: Meter [m]' or '0: Angular degree'.","Bit 4: Unit for linear scaling: 0: Meter [m], 1: Inch [in], Unit for rotary Scaling: 0: Angular degree, 1: Reserved")), + new KeyValuePair(1804, new AxoMessengerTextItem("Error: Invalid time base defined in Position data scaling: Type (0x2900:01 / S-0-0076 / --). The only permitted value is 's'.","Bit 5:")), + new KeyValuePair(1805, new AxoMessengerTextItem("Error: Invalid Data reference defined in Position data scaling: Type (0x2900:01 / S-0-0076 / --). The only permitted value is 'at the load'.","Bit 6: Data reference: 0: at the motor shaft,1: at the load")), + new KeyValuePair(1806, new AxoMessengerTextItem("Error while Reading Velocity scaling type (0x2910:01 / S-0-0044 / --)" ,"")), + new KeyValuePair(1807, new AxoMessengerTextItem("Error: Invalid axis type defined in Velocity scaling type (0x2910:01 / S-0-0044 / --). The only permmited valueas are: 'Rotary' or 'Linear'","Bits 0-2: 001-linear, 010-rotary")), + new KeyValuePair(1808, new AxoMessengerTextItem("Error: Invalid unit system defined in Velocity scaling type (0x2910:01 / S-0-0044 / --). The only permitted values are '0: Millimeter [mm]' or '1: Degrees'.","Bit 4: Unit for linear scaling: 0: Millimeter [mm], 1: Inch [in], Unit for rotary Scaling: 0: Revolution, 1: Degrees")), + new KeyValuePair(1809, new AxoMessengerTextItem("Error: Invalid time base defined in Velocity scaling type (0x2910:01 / S-0-0044 / --). The only permitted value is 'Second [s]'.","Bit 5: Unit of time: 0: Minute [min], 1: Second [s]")), + new KeyValuePair(1810, new AxoMessengerTextItem("Error: Invalid Data reference defined in Velocity scaling type (0x2910:01 / S-0-0044 / --). The only permitted is 'load'.","Bit 6: Data reference: 0: at the motor shaft,1: at the load")), + new KeyValuePair(1811, new AxoMessengerTextItem("Error while Reading Acceleration scaling type (0x2920:01 / S-0-0160 / --)" ,"")), + new KeyValuePair(1812, new AxoMessengerTextItem("Error: Invalid axis type defined in Acceleration scaling type (0x2920:01 / S-0-0160 / --). The only permmited valueas are: 'Rotary' or 'Linear'","Bits 0-2: 001-linear, 010-rotary")), + new KeyValuePair(1813, new AxoMessengerTextItem("Error: Invalid unit system defined in Acceleration scaling type (0x2920:01 / S-0-0160 / --). The only permitted values are '0: Meter [m]' or Radiant [rad]'.","Bit 4: Unit for linear scaling: 0: Meter [m], 1: Inch [in], Unit for rotary Scaling: 0: Radiant [rad], 1: Reserved")), + new KeyValuePair(1814, new AxoMessengerTextItem("Error: Invalid time base defined in Acceleration scaling type (0x2920:01 / S-0-0160 / --). The only permitted value is 'Second [s²]'.","Bit 5: Unit of time: Second [s²], 1: Reserved")), + new KeyValuePair(1815, new AxoMessengerTextItem("Error: Invalid Data reference defined in Acceleration scaling type (0x2920:01 / S-0-0160 / --). The only permitted is 'load'.","Bit 6: Data reference: 0: at the motor shaft,1: at the load")), + new KeyValuePair(1816, new AxoMessengerTextItem("Error while Reading Torque/force scaling type (0x2930:01 / S-0-0086 / --)" ,"")), + new KeyValuePair(1817, new AxoMessengerTextItem("Error: Invalid axis type defined in Torque/force scaling type (0x2930:01 / S-0-0086 / --). The only permmited valueas are: 'translational scaling' or 'Rotary scaling'","Bits 0-2: 000: Percentage-based scaling (% of reference value), 001: translational scaling (force in N, lbf), 010: Rotary scaling (torque in Nm, inlbf)")), + new KeyValuePair(1818, new AxoMessengerTextItem("Error: Invalid unit system defined in Torque/force scaling type (0x2930:01 / S-0-0086 / --). The only permitted values are '0: newton [N]' or '0: newton meter [Nm]'.","Bit 4: Unit for force: 0: newton [N], 1: pound-force [lbf], Unit for torque: 0: newton meter [Nm], 1: inch pound-force [inlbf]")), + new KeyValuePair(1819, new AxoMessengerTextItem("Error: Invalid time base defined in Torque/force scaling type (0x2930:01 / S-0-0086 / --). The only permitted value is 's'." ,"")), + new KeyValuePair(1820, new AxoMessengerTextItem("Error: Invalid Data reference defined in Torque/force scaling type (0x2930:01 / S-0-0086 / --). The only permitted is 'load'.","Bit 6: Data reference: 0: at the motor shaft,1: at the load")), + new KeyValuePair(1821, new AxoMessengerTextItem("Error while Reading Position data scaling: Factor (0x2900:02 / S-0-0077 / --)" ,"")), + new KeyValuePair(1822, new AxoMessengerTextItem("Error while Reading Position data scaling: Exponent (0x2900:03 / S-0-0078 / --)" ,"")), + new KeyValuePair(1823, new AxoMessengerTextItem("Error while Reading Rotary position resolution (0x2900:04 / S-0-0079 / --)" ,"")), + + new KeyValuePair(1824, new AxoMessengerTextItem("Error while Reading Velocity data scaling: Factor (0x2902:02 / S-0-0045 / --)" ,"")), + new KeyValuePair(1825, new AxoMessengerTextItem("Error while Reading Velocity data scaling: Exponent (0x2902:03 / S-0-0046 / --)" ,"")), + new KeyValuePair(1826, new AxoMessengerTextItem("Error while Reading Acceleration data scaling: Factor (0x2904:02 / S-0-0161 / --)" ,"")), + new KeyValuePair(1827, new AxoMessengerTextItem("Error while Reading Acceleration data scaling: Exponent (0x2904:03 / S-0-0162 / --)" ,"")), + new KeyValuePair(1828, new AxoMessengerTextItem("Error while Reading Torque/force data scaling: Factor (0x2906:02 / S-0-0093 / --)" ,"")), + new KeyValuePair(1829, new AxoMessengerTextItem("Error while Reading Torque/force data scaling: Exponent (0x2906:03 / S-0-0094 / --)" ,"")), + new KeyValuePair(1830, new AxoMessengerTextItem("Error while Reading Inverter type data: Nominal current (0x2314:01 / S-0-0112 / --)" ,"")), + new KeyValuePair(1831, new AxoMessengerTextItem("Error while Reading Motor torque model: Current constant (0x2018:01 / P-0-0450 / --)" ,"")), + + + + // TemplateTask_10steps_1 new KeyValuePair(10000, new AxoMessengerTextItem("TemplateTask_10steps_1 finished with error!","Check the details.")), diff --git a/src/components.rexroth.drives/this.sln b/src/components.rexroth.drives/this.sln index 09ad8a235..251195ceb 100644 --- a/src/components.rexroth.drives/this.sln +++ b/src/components.rexroth.drives/this.sln @@ -1,4 +1,4 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "this", "this.proj", "{C91BAA51-7B27-48BF-BE13-DED526D007B3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "inxton_axopen_abstractions", "..\abstractions\src\AXOpen.Abstractions\inxton_axopen_abstractions.csproj", "{26B3BB63-88A9-4CDF-8F04-8E78F3284F6F}"