Continue axis data read

This commit is contained in:
Samuele Locatelli
2020-09-23 19:23:21 +02:00
parent 92fab66462
commit 40a937b17b
2 changed files with 55 additions and 19 deletions
+42 -2
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace CMS_CORE_Library.Models
{
@@ -103,7 +104,7 @@ namespace CMS_CORE_Library.Models
/// </summary>
public class AxisRT
{
public short Id { get; set; } = 0;
public int Id { get; set; } = 0;
public double Position { get; set; } = 0;
public double Speed { get; set; } = 0;
public double Load { get; set; } = 0;
@@ -129,13 +130,52 @@ namespace CMS_CORE_Library.Models
{
return base.GetHashCode();
}
#if false
/// <summary>
/// Deserializzazione da byte ad oggetto AxisRT
/// </summary>
/// <param name="rawData"></param>
public AxisRT(int currId, double currPosition, double currSpeed, double currLoad)
{
Id = currId;
Position = currPosition;
Speed = currSpeed;
Load = currLoad;
}
#endif
/// <summary>
/// Deserializzazione da byte ad oggetto AxisRT
/// </summary>
/// <param name="rawData"></param>
public AxisRT(int currId, byte[] rawData)
{
// converto i dati da byte grezzi ai 3 componenti...
Id = currId;
//Id = S7.Net.Types.Int.FromByteArray(rawData.Skip(0).Take(2).ToArray());
Position = S7.Net.Types.Double.FromByteArray(rawData.Skip(0).Take(4).ToArray());
Speed = S7.Net.Types.Double.FromByteArray(rawData.Skip(4).Take(4).ToArray());
Load = S7.Net.Types.Double.FromByteArray(rawData.Skip(8).Take(4).ToArray());
}
/// <summary>
/// Converte un singolo item in un array di byte per scrittura su PLC S7
/// </summary>
/// <returns></returns>
public byte[] convertToByte()
{
byte[] answ = new byte[12];
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Position), 0, answ, 0, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Speed), 0, answ, 4, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Load), 0, answ, 8, 4);
return answ;
}
}
/// <summary>
/// Single AXIS Info Data
/// </summary>
public class AxisInfo
{
public short Id { get; set; } = 0;
public int Id { get; set; } = 0;
public int ErrorCode { get; set; } = 0;
public int MovPhase { get; set; } = 0;
public int StatusWord { get; set; } = 0;
+13 -17
View File
@@ -1072,7 +1072,7 @@ namespace CMS_CORE_Library.S7Net
// Read machine variable
libraryError = MEM_RWDouble(R, 0, M156_RESPONSE_MEMORY.MemType, M156_RESPONSE_MEMORY.Address, M156_RESPONSE_MEMORY.SubAddress + (int)processId - 1, ref responseVal);
if (libraryError.IsError())
return libraryError;
return libraryError;
// Parse line & get parameters
value.Add(new M156InputIsNeededModel()
{
@@ -2081,36 +2081,33 @@ namespace CMS_CORE_Library.S7Net
public override CmsError PLC_RAxisRTList(ref Dictionary<int, ThermoModels.AxisRT> currAxisRT)
{
CmsError libraryError = NO_ERROR;
#if false
CmsError libraryError = NO_ERROR;
List<byte> currMem = new List<byte>();
int packSize = 8;
int packSize = 12;
// 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);
libraryError = MEM_RWByteList(R, 0, AXES_RTDATA.MemType, AXES_RTDATA.Address, AXES_RTDATA.SubAddress, 0, AXES_RTDATA.Size, ref currMem);
if (libraryError.IsError())
return libraryError;
// controllo SE ho dati...
if (currMem.Count > 0)
{
// converto a blocchi di 8 byte...
// converto a blocchi di byte...
byte[] memArray = currMem.ToArray();
for (int i = 0; i < PARAMETER_RT_DATA.Size / packSize; i++)
for (int i = 0; i < AXES_RTDATA.Size / packSize; i++)
{
PlcParamRT currParam = new PlcParamRT(memArray.Skip(i * packSize).Take(packSize).ToArray());
ThermoModels.AxisRT currData = new ThermoModels.AxisRT(i + 1, memArray.Skip(i * packSize).Take(packSize).ToArray());
// solo se ID > 0...
if (currParam.Id > 0)
if (currData.Id > 0)
{
// update oggetto thermoParamList...
if (ThermoParamList.ContainsKey(currParam.Id))
if (currAxisRT.ContainsKey(currData.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;
currAxisRT[currData.Id].Position = currData.Position;
currAxisRT[currData.Id].Speed = currData.Speed;
currAxisRT[currData.Id].Load = currData.Load;
}
catch
{ }
@@ -2119,7 +2116,7 @@ namespace CMS_CORE_Library.S7Net
{
try
{
ThermoParamList.Add(currParam.Id, new ThermoModels.RecipeParam() { Id = currParam.Id, Enabled = currParam.Enabled, HasError = currParam.HasError, Visible = currParam.Visible, ValueAct = currParam.ValueAct });
currAxisRT.Add(currData.Id, currData);
}
catch
{ }
@@ -2127,7 +2124,6 @@ namespace CMS_CORE_Library.S7Net
}
}
}
#endif
return libraryError;
}
/// <summary>
@@ -4861,7 +4857,7 @@ namespace CMS_CORE_Library.S7Net
// assi
internal static MEMORY_CELL AXES_RTDATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 615, 0, 768);
internal static MEMORY_CELL AXES_INFO = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 616, 0, 640);
internal static MEMORY_CELL AXES_INFO = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 616, 0, 896);
// aree Parametri
internal static MEMORY_CELL PARAMETER_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 600, 20, 8000);