diff --git a/CMS_CORE_Library/NcThermo.cs b/CMS_CORE_Library/NcThermo.cs
index 163b3a5..e3e75fb 100644
--- a/CMS_CORE_Library/NcThermo.cs
+++ b/CMS_CORE_Library/NcThermo.cs
@@ -676,6 +676,17 @@ namespace CMS_CORE_Library
/// true: HMI --> PLC, false: PLC --> HMI
///
public abstract CmsError PLC_WRecipeEdit(bool confirmUpdate);
+
+ ///
+ /// Send axis command
+ ///
+ /// ID asse
+ /// Comando (0..15)
+ /// Indica se scrivere la TargetPos
+ /// Posizione target
+ ///
+ public abstract CmsError PLC_WAxisCommand(int AxisNum, uint CommandBit, bool WritePos, double TargetPos);
+
///
/// Confirm FLIR image acquired and copied to PLC
///
diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs
index 9280f43..1dd52e5 100644
--- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs
+++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs
@@ -40,11 +40,13 @@ namespace CMS_CORE_Library.S7Net
internal static MEMORY_CELL ALARMS_STATUS = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 14, 128);
+ // assi
internal static MEMORY_CELL AXES_BUTTON_VISIBLE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3044, 16);
- internal static MEMORY_CELL AXES_INFO = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 616, 0, 896);
+ internal static MEMORY_CELL AXES_COMMAND = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 616, 512, 512);
+
+ internal static MEMORY_CELL AXES_INFO = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 616, 0, 512);
- // assi
internal static MEMORY_CELL AXES_RTDATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 615, 0, 768);
internal static MEMORY_CELL AXIS_RESET_PROCEDURE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2608, 1);
@@ -3320,7 +3322,7 @@ namespace CMS_CORE_Library.S7Net
}
}
return libraryError;
- }
+ }
///
/// Get current Axis RT data
@@ -4624,6 +4626,43 @@ namespace CMS_CORE_Library.S7Net
return NO_ERROR;
}
+ ///
+ /// Send axis command
+ ///
+ /// ID asse
+ /// Comando (0..15)
+ /// Indica se scrivere la TargetPos
+ /// Posizione target
+ ///
+ public override CmsError PLC_WAxisCommand(int AxisNum, uint CommandBit, bool WritePos, double TargetPos)
+ {
+ CmsError libraryError = NO_ERROR;
+
+ if (WritePos)
+ {
+ MEMORY_CELL caTgtPos = new MEMORY_CELL(AXES_COMMAND.MemType, AXES_COMMAND.Address, AXES_COMMAND.SubAddress + ((AxisNum - 1) * 8), 2);
+ // in primis scrivo la TargetPos nei 4 byte DWord...
+ libraryError = MEM_RWDouble(W, 0, caTgtPos.MemType, caTgtPos.Address, caTgtPos.SubAddress, ref TargetPos);
+ if (libraryError.IsError())
+ return libraryError;
+ }
+
+ // ...è permesso solo 0..7
+ if (CommandBit >= 0 && CommandBit < 7)
+ {
+ // posizione: è da array assi 0..n-1, 8byte ogni asse
+ MEMORY_CELL currAxAck = new MEMORY_CELL(AXES_COMMAND.MemType, AXES_COMMAND.Address, AXES_COMMAND.SubAddress + ((AxisNum - 1) * 8), 2);
+ MEMORY_CELL currAxStr = new MEMORY_CELL(AXES_COMMAND.MemType, AXES_COMMAND.Address, AXES_COMMAND.SubAddress + ((AxisNum - 1) * 8 + 2), 2);
+
+ // Call confirm update
+ libraryError = PLC_WStrobe(true, currAxAck, currAxStr, CommandBit);
+ if (libraryError.IsError())
+ return libraryError;
+ }
+
+ return libraryError;
+ }
+
public override CmsError PLC_WRefreshAllMessages()
{
// imposto come UserSoftKey