diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs
index d9d5607..ad38b3e 100644
--- a/CMS_CORE_Library/Models/DataStructures.cs
+++ b/CMS_CORE_Library/Models/DataStructures.cs
@@ -215,7 +215,10 @@ namespace CMS_CORE_Library.Models
{
public readonly MEMORY_TYPE MemType;
public readonly int Address;
- public readonly int SubAddress; // Only for Siemens
+ public readonly int SubAddress;
+ ///
+ /// Memory size (in byte)
+ ///
public readonly int Size;
public MEMORY_CELL(MEMORY_TYPE MType, int Addr, int SubAddr, int Sz)
diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs
index 6b06c42..5c7937b 100644
--- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs
+++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs
@@ -484,11 +484,14 @@ namespace CMS_CORE_Library.S7Net
catch (Exception ex)
{
return ManageException(ex);
- }
-
- return NO_ERROR;
+ }
#endif
- return FUNCTION_NOT_ALLOWED_ERROR;
+
+ var lang = GetCultureFromThreeLetter("eng");
+ if (lang != null)
+ languages.Add(lang);
+
+ return NO_ERROR;
}
#endregion Contructor & global methods
@@ -917,7 +920,7 @@ namespace CMS_CORE_Library.S7Net
softKeyStatusMemory.MemType,
softKeyStatusMemory.Address,
softKeyStatusMemory.SubAddress,
- memorySizeToRead / 1, // 4,
+ memorySizeToRead / 4,
ref readValues);
if (cmsError.IsError())
@@ -2126,16 +2129,16 @@ namespace CMS_CORE_Library.S7Net
public override CmsError PLC_RGaugeData(ref GaugeModel gaugeData)
{
List Values = new List();
- // TODO FIXME quando disponibile memoria...
- gaugeData = new GaugeModel()
- {
- TimeAdv = 1,
- Power = 2,
- Vacuum = 3,
- Air = 4,
- };
-#if false
- CmsError cmsError = MEM_RWIntegerList(R, 1, MACHINE_GAUGE_DATA.MemType, MACHINE_GAUGE_DATA.Address, MACHINE_GAUGE_DATA.SubAddress, MACHINE_GAUGE_DATA.Size, ref Values);
+ //// TODO FIXME quando disponibile memoria...
+ //gaugeData = new GaugeModel()
+ //{
+ // TimeAdv = 1,
+ // Power = 2,
+ // Vacuum = 3,
+ // Air = 4,
+ //};
+#if true
+ CmsError cmsError = MEM_RWIntegerList(R, 1, MACHINE_GAUGE_DATA.MemType, MACHINE_GAUGE_DATA.Address, MACHINE_GAUGE_DATA.SubAddress, MACHINE_GAUGE_DATA.Size / 4, ref Values);
if (cmsError.IsError())
return cmsError;
@@ -2146,7 +2149,7 @@ namespace CMS_CORE_Library.S7Net
Power = Values[1],
Vacuum = Values[2],
Air = Values[3],
- };
+ };
#endif
return NO_ERROR;
@@ -2671,8 +2674,10 @@ namespace CMS_CORE_Library.S7Net
CmsError cmsError = MEM_RWByteList(bWrite, Process, MemType, MemTable, MemIndex, MemByte, 1, ref ListValue);
if (cmsError.IsError())
return cmsError;
-
- Value = ListValue.First();
+ if (ListValue.Count > 0)
+ {
+ Value = ListValue.First();
+ }
return NO_ERROR;
}
@@ -2740,7 +2745,7 @@ namespace CMS_CORE_Library.S7Net
{
List ListValue = new List() { Value };
- //uses the List method with one-element list
+ // uses the List method with one-element list, reading int32 (4byte) data...
CmsError cmsError = MEM_RWIntegerList(bWrite, Process, MemType, MemTable, MemIndex, 1, ref ListValue);
if (cmsError.IsError())
return cmsError;
@@ -2959,6 +2964,18 @@ namespace CMS_CORE_Library.S7Net
return NO_ERROR;
}
+
+ ///
+ /// Lettura lista di interi
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// numero di INT 32 da leggere (byte/4)
+ ///
+ ///
public override CmsError MEM_RWIntegerList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List Values)
{
//Check if the NC is Connected
@@ -3000,18 +3017,18 @@ namespace CMS_CORE_Library.S7Net
byte[] memByteRead = null;
try
{
- memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
+ memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number * 4);
}
catch
{
return PLC_MEM_CONF_ERROR;
}
// converto a word!
- int shortVal = 0;
+ int intVal = 0;
for (int i = 0; i < memByteRead.Length / 4; i++)
{
- shortVal = S7.Net.Types.DInt.FromByteArray(memByteRead.Skip(4 * i).Take(4).ToArray());
- Values.Add(shortVal);
+ intVal = S7.Net.Types.DInt.FromByteArray(memByteRead.Skip(4 * i).Take(4).ToArray());
+ Values.Add(intVal);
}
}
@@ -4243,7 +4260,7 @@ namespace CMS_CORE_Library.S7Net
internal static MEMORY_CELL NEW_MATR_MACC = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 604, 6720, 4);
// generic machine gauge data
- internal static MEMORY_CELL MACHINE_GAUGE_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 605, 6, 8);
+ internal static MEMORY_CELL MACHINE_GAUGE_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 605, 6, 16);
internal static MEMORY_CELL NC_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 0, 1);
@@ -4253,8 +4270,8 @@ namespace CMS_CORE_Library.S7Net
internal static MEMORY_CELL FUNCTION_ACCESS = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6, 8);
- internal static MEMORY_CELL PRE_POST_POWER_ON = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6542, 1);
- internal static MEMORY_CELL PRE_POST_POWER_ON_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2576, 2);
+ internal static MEMORY_CELL PRE_POST_POWER_ON = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6542, 4);
+ //internal static MEMORY_CELL PRE_POST_POWER_ON_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2576, 2);
internal static MEMORY_CELL PRE_POST_POWER_ON_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2578, 2);
internal static MEMORY_CELL PRE_POST_POWER_ON_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2580, 2);