From 481e4323568e2b63a90536d1ad36c9d0602ddaca Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Sat, 24 Oct 2020 16:07:43 +0200 Subject: [PATCH] Scratch write enab TCam Ch --- CMS_CORE_Library/S7Net/Nc_S7Net.cs | 32 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 2ae830f..7f4b3bc 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -2368,7 +2368,7 @@ namespace CMS_CORE_Library.S7Net if (!useCache) { // refresh abilitazione canale x thermoCam | Write - refreshRiscTermoCamAbilit(); + refreshRiscTermoCamEnab(); // refresh ultima temp canale letta da thermoCam | Write refreshRiscTermoCamTempAct(); // refresh temp canale impostata x thermoCam | Write @@ -3087,7 +3087,7 @@ namespace CMS_CORE_Library.S7Net /// /// Refresh dati ThermoCamera dal PLC x area command/status /// - private void refreshRiscTermoCamAbilit() + private void refreshRiscTermoCamEnab() { // leggo DB664 x abilitazione ch alla termocamera List currMem = new List(); @@ -3435,35 +3435,43 @@ namespace CMS_CORE_Library.S7Net /// public override CmsError PLC_WWarmerChTCamEnab(Dictionary newData) { - // FIXME TODO serve nuova area termocamera -#if false - // memory area - byte[] newMem = new byte[newData.Count]; + // leggo DB664 x abilitazione ch alla termocamera + bool[] newMem = new bool[TCAM_CH_ENAB_DATA.Size * 8]; List currMem = new List(); // read actual data on memory... - CmsError libraryError = MEM_RWByteList(R, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem); + CmsError libraryError = MEM_RWByteList(R, 0, TCAM_CH_ENAB_DATA.MemType, TCAM_CH_ENAB_DATA.Address, TCAM_CH_ENAB_DATA.SubAddress, 0, TCAM_CH_ENAB_DATA.Size, ref currMem); if (libraryError.IsError()) return libraryError; - newMem = currMem.ToArray(); + + // Convert int into to true/false array + BitArray bArray = new BitArray(currMem.ToArray()); + bArray.CopyTo(newMem, 0); // update only given data... foreach (var item in newData) { - newMem[item.Key - 1] = (byte)item.Value; + newMem[item.Key - 1] = item.Value; } // return as list... - currMem = newMem.ToList(); + currMem = boolsToByteArray(newMem).ToList(); + // scrivo sul PLC array di byte... - libraryError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem); + libraryError = MEM_RWByteList(W, 0, TCAM_CH_ENAB_DATA.MemType, TCAM_CH_ENAB_DATA.Address, TCAM_CH_ENAB_DATA.SubAddress, 0, TCAM_CH_ENAB_DATA.Size, ref currMem); if (libraryError.IsError()) return libraryError; -#endif return NO_ERROR; } + public static byte[] boolsToByteArray(bool[] bits) + { + byte[] ret = new byte[(bits.Length - 1) / 8 + 1]; + bits.CopyTo(ret, 0); + return ret; + } + /// /// Set ThermoCamera mode