From 4746ab7271cdc8486405ab1918fec4b1708c96e0 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 23 Jul 2020 09:16:16 +0200 Subject: [PATCH] S7Net: forced process status (unmanaged) --- CMS_CORE_Library/S7Net/Nc_S7Net.cs | 77 ++++++++++++++++++------------ 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 00a7b2b..e3d2e2e 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -825,7 +825,7 @@ namespace CMS_CORE_Library.S7Net // need byte swap! List fixValues = new List(); - foreach(var item in readValues) + foreach (var item in readValues) { fixValues.Add(SwapBytes(item)); } @@ -1725,39 +1725,56 @@ namespace CMS_CORE_Library.S7Net if (libraryError.IsError()) return libraryError; - int readValue = 0; - // Read processes status from memory - libraryError = MEM_RWInteger(R, 0, PROCESS_STATUS.MemType, PROCESS_STATUS.Address, PROCESS_STATUS.SubAddress + ((procNumber - 1) * 2), ref readValue); - if (libraryError.IsError()) - return libraryError; + // FIXME TODO --> forzato tutto a true... eventualmente rivedere in futuro x processo caricatore vs processo principale + bool forceValues = true; - byte[] bytes = BitConverter.GetBytes(readValue); - - // Convert Byte into true/false array - BitArray bits = new BitArray(new byte[] { bytes[0] }); // 1st byte -> 0 : Proccess type (AUX-WORK), 1: Process in alarm status, 2: Run, 3: Hold, 4: Read, 5: PartProgramVisible - - // Get part program info visibility - processData.Visible = bits[0]; - - // Populate response structure - processData.Type = bits[1] ? "WORK" : "AUX"; - processData.IsSelected = bits[2]; - processData.IsInAlarm = bits[3]; - processData.CanLoadProgram = bits[4]; - - // Choose process status - if (bytes[1] == 1) - processData.Status = "HOLD"; + if (forceValues) + { + processData.Visible = true; + processData.Type = "WORK" ; + processData.IsSelected = true; + processData.IsInAlarm = false; + processData.CanLoadProgram = true; + processData.Status = "RUN"; + processData.Reps = 0; + } else { - if (bytes[1] == 2) - processData.Status = "RUN"; - else - processData.Status = "READY"; - } + int readValue = 0; - // Get Reps from 3nd-4th byte - processData.Reps = BitConverter.ToUInt16(bytes, 2); + // Read processes status from memory + libraryError = MEM_RWInteger(R, 0, PROCESS_STATUS.MemType, PROCESS_STATUS.Address, PROCESS_STATUS.SubAddress + ((procNumber - 1) * 2), ref readValue); + if (libraryError.IsError()) + return libraryError; + + byte[] bytes = BitConverter.GetBytes(readValue); + + // Convert Byte into true/false array + BitArray bits = new BitArray(new byte[] { bytes[0] }); // 1st byte -> 0 : Proccess type (AUX-WORK), 1: Process in alarm status, 2: Run, 3: Hold, 4: Read, 5: PartProgramVisible + + // Get part program info visibility + processData.Visible = bits[0]; + + // Populate response structure + processData.Type = bits[1] ? "WORK" : "AUX"; + processData.IsSelected = bits[2]; + processData.IsInAlarm = bits[3]; + processData.CanLoadProgram = bits[4]; + + // Choose process status + if (bytes[1] == 1) + processData.Status = "HOLD"; + else + { + if (bytes[1] == 2) + processData.Status = "RUN"; + else + processData.Status = "READY"; + } + + // Get Reps from 3nd-4th byte + processData.Reps = BitConverter.ToUInt16(bytes, 2); + } return NO_ERROR; }