From 968484af90916012d5c7cbbba8d6a365006243a2 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 26 Feb 2021 19:17:08 +0100 Subject: [PATCH] add axes cmd (target pos and strobe/ack) --- CMS_CORE_Library/NcThermo.cs | 11 ++++++++ CMS_CORE_Library/S7Net/Nc_S7Net.cs | 45 ++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) 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