more memory RW method conversion
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user