S7Net: forced process status (unmanaged)

This commit is contained in:
Samuele Locatelli
2020-07-23 09:16:16 +02:00
parent 7e4392189a
commit 4746ab7271
+47 -30
View File
@@ -825,7 +825,7 @@ namespace CMS_CORE_Library.S7Net
// need byte swap!
List<int> fixValues = new List<int>();
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;
}