diff --git a/CMS_CORE_Library/NcThermo.cs b/CMS_CORE_Library/NcThermo.cs
index 515864d..52124f4 100644
--- a/CMS_CORE_Library/NcThermo.cs
+++ b/CMS_CORE_Library/NcThermo.cs
@@ -797,14 +797,17 @@ namespace CMS_CORE_Library
///
public abstract CmsError PLC_WModeSel(int mode);
///
- /// Read PLC current IO hannels data
+ /// Read PLC current IO Channels visibility (conf)
///
- /// updates only VALUE readout
/// Visibility status for all channels
+ public abstract CmsError PLC_RIOChannelsConf(ref ThermoModels.ChanIOVis currThermoIOVis);
+ ///
+ /// Read PLC current IO Channels VALUES (actual + forced)
+ ///
/// Values for channels
/// Indicates if values are forced by UI
/// Values forced by UI
- public abstract CmsError PLC_RIOChannels(bool onlyVal, ref ThermoModels.ChanIOVis currThermoIOVis, ref ThermoModels.ChanIOVal currThermoIOVal, ref ThermoModels.ChanIOFor currThermoIOFor, ref ThermoModels.ChanIOValFor currThermoIOValFor);
+ public abstract CmsError PLC_RIOChannelsVal(ref ThermoModels.ChanIOVal currThermoIOVal, ref ThermoModels.ChanIOFor currThermoIOFor, ref ThermoModels.ChanIOValFor currThermoIOValFor);
#endregion THERMO high level data
diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs
index d167384..45203ab 100644
--- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs
+++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs
@@ -2601,7 +2601,7 @@ namespace CMS_CORE_Library.S7Net
return NO_ERROR;
}
-
+
///
/// Refresh recipE parameters RT
@@ -3736,30 +3736,39 @@ namespace CMS_CORE_Library.S7Net
return NO_ERROR;
}
- ///
- /// Read PLC current IO hannels data
+ ///
+ /// Read PLC current IO Channels visibility (conf)
///
- /// updates only RT parameters (false = update all)
/// Visibility status for all channels
+ ///
+ public override CmsError PLC_RIOChannelsConf(ref ThermoModels.ChanIOVis currThermoIOVis)
+ {
+ CmsError currError = NO_ERROR;
+ // refresh dati
+ refreshChIOVisib();
+
+ // copio liste in output...
+ currThermoIOVis = ThermoIOVis;
+
+ // esco
+ return currError;
+ }
+ ///
+ /// Read PLC current IO Channels VALUES (actual + forced)
+ ///
/// Values for channels
/// Indicates if values are forced by UI
/// Values forced by UI
///
- public override CmsError PLC_RIOChannels(bool onlyVal, ref ThermoModels.ChanIOVis currThermoIOVis, ref ThermoModels.ChanIOVal currThermoIOVal, ref ThermoModels.ChanIOFor currThermoIOFor, ref ThermoModels.ChanIOValFor currThermoIOValFor)
+ public override CmsError PLC_RIOChannelsVal(ref ThermoModels.ChanIOVal currThermoIOVal, ref ThermoModels.ChanIOFor currThermoIOFor, ref ThermoModels.ChanIOValFor currThermoIOValFor)
{
CmsError currError = NO_ERROR;
// refresh dati veloci (valori)
refreshChIOVal();
- // se richiesto NON SOLO RT faccio refresh anche dati "lenti"
- if (!onlyVal)
- {
- refreshChIOVisib();
- refreshChIOForced();
- refreshChIOForcedVal();
- }
+ refreshChIOForced();
+ refreshChIOForcedVal();
// copio liste in output...
- currThermoIOVis = ThermoIOVis;
currThermoIOVal = ThermoIOVal;
currThermoIOFor = ThermoIOFor;
currThermoIOValFor = ThermoIOValFor;
@@ -3775,52 +3784,32 @@ namespace CMS_CORE_Library.S7Net
protected CmsError refreshChIOVal()
{
CmsError libraryError = NO_ERROR;
-#if false
- List currMem = new List();
- int packSize = 8;
+ List readValuesDI = new List();
+ List readValuesDO = new List();
+ List readValuesAI = new List();
+ List readValuesAO = new List();
- // leggo da PLC a array di byte di appoggio...
- libraryError = MEM_RWByteList(R, 0, PARAMETER_RT_DATA.MemType, PARAMETER_RT_DATA.Address, PARAMETER_RT_DATA.SubAddress, 0, PARAMETER_RT_DATA.Size, ref currMem);
+ // leggo da PLC a array di byte di appoggio x visibilità DI...
+ libraryError = MEM_RWWordList(R, 0, IO_DI_VAL_ACT.MemType, IO_DI_VAL_ACT.Address, IO_DI_VAL_ACT.SubAddress, IO_DI_VAL_ACT.Size, ref readValuesDI);
+ if (libraryError.IsError())
+ return libraryError;
+ // leggo da PLC a array di byte di appoggio x visibilità DO...
+ libraryError = MEM_RWWordList(R, 0, IO_DO_VAL_ACT.MemType, IO_DO_VAL_ACT.Address, IO_DO_VAL_ACT.SubAddress, IO_DO_VAL_ACT.Size, ref readValuesDO);
+ if (libraryError.IsError())
+ return libraryError;
+ // leggo da PLC a array di byte di appoggio x visibilità AI...
+ libraryError = MEM_RWShortList(R, 0, IO_AI_VAL_ACT.MemType, IO_AI_VAL_ACT.Address, IO_AI_VAL_ACT.SubAddress, IO_AI_VAL_ACT.Size, ref readValuesAI);
+ if (libraryError.IsError())
+ return libraryError;
+ // leggo da PLC a array di byte di appoggio x visibilità AO...
+ libraryError = MEM_RWShortList(R, 0, IO_AO_VAL_ACT.MemType, IO_AO_VAL_ACT.Address, IO_AO_VAL_ACT.SubAddress, IO_AO_VAL_ACT.Size, ref readValuesAO);
if (libraryError.IsError())
return libraryError;
- // controllo SE ho dati...
- if (currMem.Count > 0)
- {
- // converto a blocchi di 8 byte...
- byte[] memArray = currMem.ToArray();
- for (int i = 0; i < PARAMETER_RT_DATA.Size / packSize; i++)
- {
- PlcParamRT currParam = new PlcParamRT(memArray.Skip(i * packSize).Take(packSize).ToArray());
- // solo se ID > 0...
- if (currParam.Id > 0)
- {
- // update oggetto thermoParamList...
- if (ThermoParamList.ContainsKey(currParam.Id))
- {
- try
- {
- ThermoParamList[currParam.Id].Enabled = currParam.Enabled;
- ThermoParamList[currParam.Id].HasError = currParam.HasError;
- ThermoParamList[currParam.Id].Visible = currParam.Visible;
- ThermoParamList[currParam.Id].ValueAct = currParam.ValueAct;
- }
- catch
- { }
- }
- else
- {
- try
- {
- ThermoParamList.Add(currParam.Id, new ThermoModels.RecipeParam() { Id = currParam.Id, Enabled = currParam.Enabled, HasError = currParam.HasError, Visible = currParam.Visible, ValueAct = currParam.ValueAct });
- }
- catch
- { }
- }
- }
- }
- }
-#endif
+ ThermoIOVal.DI = convToDictIntBol(readValuesDI);
+ ThermoIOVal.DO = convToDictIntBol(readValuesDO);
+ ThermoIOVal.AI = convToDictIntInt(readValuesAI);
+ ThermoIOVal.AO = convToDictIntInt(readValuesAO);
return libraryError;
}
@@ -3831,7 +3820,6 @@ namespace CMS_CORE_Library.S7Net
protected CmsError refreshChIOVisib()
{
CmsError libraryError = NO_ERROR;
- Byte[] byteArray = null;
List readValuesDI = new List();
List readValuesDO = new List();
List readValuesAI = new List();
@@ -3854,28 +3842,15 @@ namespace CMS_CORE_Library.S7Net
if (libraryError.IsError())
return libraryError;
- ThermoIOVis.DI = convShortToDict(readValuesDI);
- ThermoIOVis.DO = convShortToDict(readValuesDO);
- ThermoIOVis.AI = convShortToDict(readValuesAI);
- ThermoIOVis.AO = convShortToDict(readValuesAO);
+ ThermoIOVis.DI = convToDictIntBol(readValuesDI);
+ ThermoIOVis.DO = convToDictIntBol(readValuesDO);
+ ThermoIOVis.AI = convToDictIntBol(readValuesAI);
+ ThermoIOVis.AO = convToDictIntBol(readValuesAO);
return libraryError;
}
- internal static Dictionary convShortToDict(List origVal)
- {
- Byte[] byteArray = null;
- // Convert List into Byte Array
- byteArray = origVal.SelectMany(j => BitConverter.GetBytes(j)).ToArray();
- // converto a bit
- BitArray bitArr = new BitArray(byteArray);
- Dictionary answ = new Dictionary();
- for (int i = 0; i < bitArr.Count; i++)
- {
- answ.Add(i, bitArr[i]);
- }
- return answ;
- }
+
///
/// Refresh recipe parameters
@@ -3883,65 +3858,20 @@ namespace CMS_CORE_Library.S7Net
protected CmsError refreshChIOForcedVal()
{
CmsError libraryError = NO_ERROR;
-#if false
- List currMem = new List();
- int packSize = 20;
+ List readValuesDO = new List();
+ List readValuesAO = new List();
- // leggo da PLC a array di byte di appoggio...
- libraryError = MEM_RWByteList(R, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, PARAMETER_DATA.SubAddress, 0, PARAMETER_DATA.Size, ref currMem);
+ // leggo da PLC a array di byte di appoggio x visibilità DO...
+ libraryError = MEM_RWWordList(R, 0, IO_DO_VAL_FOR.MemType, IO_DO_VAL_FOR.Address, IO_DO_VAL_FOR.SubAddress, IO_DO_VAL_FOR.Size, ref readValuesDO);
+ if (libraryError.IsError())
+ return libraryError;
+ // leggo da PLC a array di byte di appoggio x visibilità AO...
+ libraryError = MEM_RWShortList(R, 0, IO_AO_VAL_FOR.MemType, IO_AO_VAL_FOR.Address, IO_AO_VAL_FOR.SubAddress, IO_AO_VAL_FOR.Size, ref readValuesAO);
if (libraryError.IsError())
return libraryError;
-
-
- // controllo SE ho dati...
- if (currMem.Count > 0)
- {
- // converto a blocchi di 8 byte...
- byte[] memArray = currMem.ToArray();
-
- for (int i = 0; i < PARAMETER_DATA.Size / packSize; i++)
- {
- PlcParam currParam = new PlcParam(memArray.Skip(i * packSize).Take(packSize).ToArray());
- // solo se ID > 0...
- if (currParam.Id > 0)
- {
- // update oggetto thermoParamList...
- if (ThermoParamList.ContainsKey(currParam.Id))
- {
- try
- {
- ThermoParamList[currParam.Id].SetpointHMI = currParam.SetpointHMI;
- ThermoParamList[currParam.Id].SetpointPLC = currParam.SetpointPLC;
- ThermoParamList[currParam.Id].ValMax = currParam.ValMax;
- ThermoParamList[currParam.Id].ValMin = currParam.ValMin;
- ThermoParamList[currParam.Id].UnitMeasure = currParam.UnitMeasure;
- }
- catch
- { }
- }
- else
- {
- try
- {
- ThermoParamList.Add(currParam.Id, new ThermoModels.RecipeParam() { Id = currParam.Id, SetpointHMI = currParam.SetpointHMI, SetpointPLC = currParam.SetpointPLC, ValMax = currParam.ValMax, ValMin = currParam.ValMin, UnitMeasure = currParam.UnitMeasure });
- }
- catch
- { }
- }
- }
- else
- {
- libraryError = S7_PLC_WRONG_DATA;
- }
- }
- }
- else
- {
- libraryError = S7_PLC_EMPTY_READ;
- }
-#endif
-
+ ThermoIOValFor.DO = convToDictIntBol(readValuesDO);
+ ThermoIOValFor.AO = convToDictIntInt(readValuesAO);
return libraryError;
}
@@ -3951,65 +3881,20 @@ namespace CMS_CORE_Library.S7Net
protected CmsError refreshChIOForced()
{
CmsError libraryError = NO_ERROR;
-#if false
- List currMem = new List();
- int packSize = 20;
+ List readValuesDO = new List();
+ List readValuesAO = new List();
- // leggo da PLC a array di byte di appoggio...
- libraryError = MEM_RWByteList(R, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, PARAMETER_DATA.SubAddress, 0, PARAMETER_DATA.Size, ref currMem);
+ // leggo da PLC a array di byte di appoggio x visibilità DO...
+ libraryError = MEM_RWWordList(R, 0, IO_DO_FORCE.MemType, IO_DO_FORCE.Address, IO_DO_FORCE.SubAddress, IO_DO_FORCE.Size, ref readValuesDO);
+ if (libraryError.IsError())
+ return libraryError;
+ // leggo da PLC a array di byte di appoggio x visibilità AO...
+ libraryError = MEM_RWWordList(R, 0, IO_AO_FORCE.MemType, IO_AO_FORCE.Address, IO_AO_FORCE.SubAddress, IO_AO_FORCE.Size, ref readValuesAO);
if (libraryError.IsError())
return libraryError;
-
-
- // controllo SE ho dati...
- if (currMem.Count > 0)
- {
- // converto a blocchi di 8 byte...
- byte[] memArray = currMem.ToArray();
-
- for (int i = 0; i < PARAMETER_DATA.Size / packSize; i++)
- {
- PlcParam currParam = new PlcParam(memArray.Skip(i * packSize).Take(packSize).ToArray());
- // solo se ID > 0...
- if (currParam.Id > 0)
- {
- // update oggetto thermoParamList...
- if (ThermoParamList.ContainsKey(currParam.Id))
- {
- try
- {
- ThermoParamList[currParam.Id].SetpointHMI = currParam.SetpointHMI;
- ThermoParamList[currParam.Id].SetpointPLC = currParam.SetpointPLC;
- ThermoParamList[currParam.Id].ValMax = currParam.ValMax;
- ThermoParamList[currParam.Id].ValMin = currParam.ValMin;
- ThermoParamList[currParam.Id].UnitMeasure = currParam.UnitMeasure;
- }
- catch
- { }
- }
- else
- {
- try
- {
- ThermoParamList.Add(currParam.Id, new ThermoModels.RecipeParam() { Id = currParam.Id, SetpointHMI = currParam.SetpointHMI, SetpointPLC = currParam.SetpointPLC, ValMax = currParam.ValMax, ValMin = currParam.ValMin, UnitMeasure = currParam.UnitMeasure });
- }
- catch
- { }
- }
- }
- else
- {
- libraryError = S7_PLC_WRONG_DATA;
- }
- }
- }
- else
- {
- libraryError = S7_PLC_EMPTY_READ;
- }
-#endif
-
+ ThermoIOFor.DO = convToDictIntBol(readValuesDO);
+ ThermoIOFor.AO = convToDictIntBol(readValuesAO);
return libraryError;
}
diff --git a/CMS_CORE_Library/Utils/Nc_Utils.cs b/CMS_CORE_Library/Utils/Nc_Utils.cs
index c12d8ff..5bf8de1 100644
--- a/CMS_CORE_Library/Utils/Nc_Utils.cs
+++ b/CMS_CORE_Library/Utils/Nc_Utils.cs
@@ -166,6 +166,30 @@ namespace CMS_CORE_Library.Utils
return String.Empty;
}
+ internal static Dictionary convToDictIntBol(List origVal)
+ {
+ Byte[] byteArray = null;
+ // Convert List into Byte Array
+ byteArray = origVal.SelectMany(j => BitConverter.GetBytes(j)).ToArray();
+ // converto a bit
+ BitArray bitArr = new BitArray(byteArray);
+ Dictionary answ = new Dictionary();
+ for (int i = 0; i < bitArr.Count; i++)
+ {
+ answ.Add(i, bitArr[i]);
+ }
+ return answ;
+ }
+ internal static Dictionary convToDictIntInt(List origVal)
+ {
+ Dictionary answ = new Dictionary();
+ for (int i = 0; i < origVal.Count; i++)
+ {
+ answ.Add(i, origVal[i]);
+ }
+ return answ;
+ }
+
// Convert one integer in array of bools
internal static bool[] IntToBits(int val)
{