more memory RW method conversion

This commit is contained in:
Samuele Locatelli
2020-05-08 09:13:32 +02:00
parent 8548eb36fc
commit aed50257d3
+118 -96
View File
@@ -1,5 +1,6 @@
using CMS_CORE_Library.Models;
using S7.Net;
using Siemens.Sinumerik.Operate.Services;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -3054,144 +3055,165 @@ namespace CMS_CORE_Library.S7Net
var memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
Values = memByteRead.ToList();
#if false
// ciclo eda ggiungo i bytes...
foreach (var item in memByteRead)
{
Values.Add(item);
}
#endif
}
return NO_ERROR;
}
public override CmsError MEM_RWWordList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List<ushort> Value)
public override CmsError MEM_RWWordList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List<ushort> Values)
{
////Check if the NC is Connected
CmsError cmsError = CheckConnection();
if (cmsError.IsError())
return cmsError;
//Try to get/set information
try
if (MemType != MEMORY_TYPE.Siemens_DB)
{
//Setup variables
DataSvc Data = HighPriorityDataSvc();
cmsError = ConvertMemToPath(MemType, MemTable, MemIndex, 0, (bWrite) ? Value.Count : Number, 'W', out string itemString);
if (cmsError.IsError())
return cmsError;
Item item = new Item(itemString);
//Read-Write Data
if (bWrite)
{
item.Value = Value.ToArray();
Data.Write(item);
}
else
{
Data.Read(item);
if (item.Value.GetType().IsArray)
Value = Array.ConvertAll(((object[])item.Value).Cast<uint>().ToArray(), input => (ushort)input).ToList();
else
{
Value.Clear();
Value.Add(Convert.ToUInt16((uint)item.Value));
}
}
return INCORRECT_PARAMETERS_ERROR;
}
catch (Exception ex)
cmsError = null;
if (bWrite)
{
return ManageException(ex);
//Prevent some exceptions
if (Values.Count == 0)
return NO_ERROR;
byte[] singleItem = new byte[2];
List<Byte> memByteList = new List<byte>();
foreach(var Item in Values)
{
singleItem = S7.Net.Types.Word.ToByteArray(Item);
memByteList.AddRange(singleItem);
}
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, memByteList.ToArray());
}
else
{
// Prevent some exceptions
if (Number == 0)
return NO_ERROR;
Values.Clear();
byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
// converto a word!
ushort shortVal = 0;
for (int i = 0; i < memByteRead.Length / 2; i++)
{
shortVal = S7.Net.Types.Word.FromByteArray(memByteRead.Skip(2 * i).Take(2).ToArray());
Values.Add(shortVal);
}
}
return NO_ERROR;
}
public override CmsError MEM_RWShortList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List<short> Value)
public override CmsError MEM_RWShortList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List<short> Values)
{
//Check if the NC is Connected
CmsError cmsError = CheckConnection();
if (cmsError.IsError())
return cmsError;
//Try to get/set information
try
if (MemType != MEMORY_TYPE.Siemens_DB)
{
//Setup variables
DataSvc Data = HighPriorityDataSvc();
cmsError = ConvertMemToPath(MemType, MemTable, MemIndex, 0, (bWrite) ? Value.Count : Number, 'W', out string itemString);
if (cmsError.IsError())
return cmsError;
Item item = new Item(itemString);
//Read-Write Data
if (bWrite)
{
item.Value = Value.ToArray();
Data.Write(item);
}
else
{
Data.Read(item);
if (item.Value.GetType().IsArray)
Value = Array.ConvertAll(((object[])item.Value).Cast<uint>().ToArray(), input => unchecked((short)input)).ToList();
else
{
Value.Clear();
Value.Add(unchecked((short)(uint)item.Value));
}
}
return INCORRECT_PARAMETERS_ERROR;
}
catch (Exception ex)
cmsError = null;
if (bWrite)
{
return ManageException(ex);
//Prevent some exceptions
if (Values.Count == 0)
return NO_ERROR;
byte[] singleItem = new byte[2];
List<Byte> memByteList = new List<byte>();
foreach (var Item in Values)
{
singleItem = S7.Net.Types.Int.ToByteArray(Item);
memByteList.AddRange(singleItem);
}
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, memByteList.ToArray());
}
else
{
// Prevent some exceptions
if (Number == 0)
return NO_ERROR;
Values.Clear();
byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
// converto a word!
short shortVal = 0;
for (int i = 0; i < memByteRead.Length / 2; i++)
{
shortVal = S7.Net.Types.Int.FromByteArray(memByteRead.Skip(2 * i).Take(2).ToArray());
Values.Add(shortVal);
}
}
return NO_ERROR;
}
public override CmsError MEM_RWDWordList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List<uint> Value)
public override CmsError MEM_RWDWordList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int Number, ref List<uint> Values)
{
//Check if the NC is Connected
CmsError cmsError = CheckConnection();
if (cmsError.IsError())
return cmsError;
//Try to get/set information
try
if (MemType != MEMORY_TYPE.Siemens_DB)
{
//Setup variables
DataSvc Data = HighPriorityDataSvc();
cmsError = ConvertMemToPath(MemType, MemTable, MemIndex, 0, (bWrite) ? Value.Count : Number, 'D', out string itemString);
if (cmsError.IsError())
return cmsError;
Item item = new Item(itemString);
//Read-Write Data
if (bWrite)
{
item.Value = Value.ToArray();
Data.Write(item);
}
else
{
Data.Read(item);
if (item.Value.GetType().IsArray)
Value = ((object[])item.Value).Cast<uint>().ToList();
else
{
Value.Clear();
Value.Add((uint)item.Value);
}
}
return INCORRECT_PARAMETERS_ERROR;
}
catch (Exception ex)
cmsError = null;
if (bWrite)
{
return ManageException(ex);
//Prevent some exceptions
if (Values.Count == 0)
return NO_ERROR;
byte[] singleItem = new byte[2];
List<Byte> memByteList = new List<byte>();
foreach (var Item in Values)
{
singleItem = S7.Net.Types.DWord.ToByteArray(Item);
memByteList.AddRange(singleItem);
}
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, memByteList.ToArray());
}
else
{
// Prevent some exceptions
if (Number == 0)
return NO_ERROR;
Values.Clear();
byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
// converto a word!
uint shortVal = 0;
for (int i = 0; i < memByteRead.Length / 2; i++)
{
shortVal = S7.Net.Types.DWord.FromByteArray(memByteRead.Skip(2 * i).Take(2).ToArray());
Values.Add(shortVal);
}
}
return NO_ERROR;