Merge branch 'feature/S7Net' into develop
This commit is contained in:
@@ -655,15 +655,39 @@ namespace CMS_CORE_Library
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels setpoints
|
||||
/// </summary>
|
||||
/// <param name="currWarmerChannelList"></param>
|
||||
/// <param name="newData"></param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_WWarmerChSetpoints(Dictionary<int, int> currWarmerChannelList);
|
||||
public abstract CmsError PLC_WWarmerChSetpHmi(Dictionary<int, int> newData);
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels setup data
|
||||
/// Set current Warmers Channels setpoints
|
||||
/// </summary>
|
||||
/// <param name="currWarmerChannelList"></param>
|
||||
/// <param name="newData"></param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_WWarmerChData(Dictionary<int, ThermoModels.WarmerChannel> currWarmerChannelList);
|
||||
public abstract CmsError PLC_WWarmerChSetpTCam(Dictionary<int, int> newData);
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels reflector's data
|
||||
/// </summary>
|
||||
/// <param name="newData"></param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_WWarmerConfRefl(Dictionary<int, int> newData);
|
||||
/// <summary>
|
||||
/// Get current Warmers VU min parameter
|
||||
/// </summary>
|
||||
/// <param name="VUmin"></param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_RWarmerConfVUMin(ref ushort VUmin);
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels min current's data
|
||||
/// </summary>
|
||||
/// <param name="newData"></param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_WWarmerConfMinCurr(Dictionary<int, double> newData);
|
||||
/// <summary>
|
||||
/// Set current Warmers board enabled
|
||||
/// </summary>
|
||||
/// <param name="newData"></param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_WWarmerConfBoardEnabl(Dictionary<int, int> newData);
|
||||
/// <summary>
|
||||
/// Read power gauge data
|
||||
/// <para>
|
||||
|
||||
@@ -2200,11 +2200,16 @@ namespace CMS_CORE_Library.S7Net
|
||||
// update oggetto thermoParamList...
|
||||
if (ThermoModuleList.ContainsKey(currModBlock.Id))
|
||||
{
|
||||
ThermoModuleList[currModBlock.Id].Visible = currModBlock.Visible;
|
||||
ThermoModuleList[currModBlock.Id].Running = currModBlock.Running;
|
||||
ThermoModuleList[currModBlock.Id].HasError = currModBlock.HasError;
|
||||
ThermoModuleList[currModBlock.Id].ActualDuration = currModBlock.ActualDuration;
|
||||
ThermoModuleList[currModBlock.Id].ActualDelay = currModBlock.ActualDelay;
|
||||
try
|
||||
{
|
||||
ThermoModuleList[currModBlock.Id].Visible = currModBlock.Visible;
|
||||
ThermoModuleList[currModBlock.Id].Running = currModBlock.Running;
|
||||
ThermoModuleList[currModBlock.Id].HasError = currModBlock.HasError;
|
||||
ThermoModuleList[currModBlock.Id].ActualDuration = currModBlock.ActualDuration;
|
||||
ThermoModuleList[currModBlock.Id].ActualDelay = currModBlock.ActualDelay;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2386,6 +2391,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
double currVal = 0;
|
||||
for (int i = 0; i < RISC_CHP_DATA.Size / 4; i++)
|
||||
{
|
||||
// FIXME TODO
|
||||
#if false
|
||||
currVal = S7.Net.Types.Double.FromByteArray(memArray.Skip(4 * i).Take(4).ToArray());
|
||||
// cerco id + 1 (su memoria è base 0)
|
||||
if (ThermoWarmChannels.ContainsKey(i + 1))
|
||||
@@ -2399,25 +2406,12 @@ namespace CMS_CORE_Library.S7Net
|
||||
IdChannel = i + 1,
|
||||
SetpointPLC = currVal
|
||||
});
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Write SetPoint PLC on CHp area
|
||||
/// </summary>
|
||||
private void PLC_WRiscSetpointPLC()
|
||||
{
|
||||
List<byte> currMem = new List<byte>();
|
||||
// converto a blocchi di 2 byte...
|
||||
for (int i = 0; i < RISC_CHP_DATA.Size / 2; i++)
|
||||
{
|
||||
currMem.Add(ThermoWarmChannels[i + 1].SetpointPLC);
|
||||
currMem.Add(ThermoWarmChannels[i].SetpointPLC);
|
||||
}
|
||||
// scrivo sul PLC array di byte...
|
||||
CmsError cmsError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
|
||||
}
|
||||
|
||||
// FIXME TODO : devo farla o legge da conf il PLC?
|
||||
#if false
|
||||
/// <summary>
|
||||
@@ -2561,26 +2555,64 @@ namespace CMS_CORE_Library.S7Net
|
||||
/// <summary>
|
||||
/// Write Warmers channels load data
|
||||
/// </summary>
|
||||
/// <param name="updtCh"></param>
|
||||
/// <param name="newData"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_WWarmerChSetpoints(Dictionary<int, int> updtCh)
|
||||
public override CmsError PLC_WWarmerChSetpHmi(Dictionary<int, int> newData)
|
||||
{
|
||||
// memory area
|
||||
List<byte> newMem = new List<byte>();
|
||||
byte[] newMem = new byte[newData.Count];
|
||||
List<byte> currMem = new List<byte>();
|
||||
|
||||
// per fare swapt faccio 2 alla volta e inverto ordine...
|
||||
for (int i = 0; i < RISC_CHP_DATA.Size / 2; i++)
|
||||
// read actual data on memory...
|
||||
CmsError cmsError = MEM_RWByteList(R, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
newMem = currMem.ToArray();
|
||||
|
||||
// update only given data...
|
||||
foreach (var item in newData)
|
||||
{
|
||||
// aggiungo bit dispari
|
||||
newMem.Add((byte)updtCh[i * 2 + 1]);
|
||||
// aggiungo bit pari
|
||||
newMem.Add((byte)updtCh[i * 2]);
|
||||
newMem[item.Key - 1] = (byte)item.Value;
|
||||
}
|
||||
// return as list...
|
||||
currMem = newMem.ToList();
|
||||
// scrivo sul PLC array di byte...
|
||||
cmsError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// error in write WARM area...
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Write Warmers channels termocam data
|
||||
/// </summary>
|
||||
/// <param name="updtCh"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_WWarmerChSetpTCam(Dictionary<int, int> newData)
|
||||
{
|
||||
// FIXME TODO serve nuova area termocamera
|
||||
#if false
|
||||
// write!
|
||||
CmsError cmsError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref newMem);
|
||||
// memory area
|
||||
byte[] newMem = new byte[newData.Count];
|
||||
List<byte> currMem = new List<byte>();
|
||||
|
||||
// read actual data on memory...
|
||||
CmsError cmsError = MEM_RWByteList(R, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
newMem = currMem.ToArray();
|
||||
|
||||
// update only given data...
|
||||
foreach (var item in newData)
|
||||
{
|
||||
newMem[item.Key - 1] = (byte)item.Value;
|
||||
}
|
||||
// return as list...
|
||||
currMem = newMem.ToList();
|
||||
// scrivo sul PLC array di byte...
|
||||
cmsError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
#endif
|
||||
@@ -2588,33 +2620,115 @@ namespace CMS_CORE_Library.S7Net
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Write Warmers channels setup parameters
|
||||
/// Set current Warmers Channels reflector's data
|
||||
/// </summary>
|
||||
/// <param name="updtCh"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_WWarmerChData(Dictionary<int, ThermoModels.WarmerChannel> updtCh)
|
||||
public override CmsError PLC_WWarmerConfRefl(Dictionary<int, int> newData)
|
||||
{
|
||||
// FIXME TODO
|
||||
#if false
|
||||
// init variabili accessorie
|
||||
// memory area
|
||||
byte[] newMem = new byte[newData.Count];
|
||||
List<byte> currMem = new List<byte>();
|
||||
int packSize = 20;
|
||||
int memIndex = PARAMETER_DATA.SubAddress + (updtCh.Id - 1) * packSize;
|
||||
// leggo in primis il parametro che mi richiedono
|
||||
CmsError cmsError = MEM_RWByteList(R, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, memIndex, 0, packSize, ref currMem);
|
||||
|
||||
// read actual data on memory...
|
||||
CmsError cmsError = MEM_RWByteList(R, 0, RISC_CFI_DATA.MemType, RISC_CFI_DATA.Address, RISC_CFI_DATA.SubAddress, 0, RISC_CFI_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// converto in parametro...
|
||||
PlcParam currParam = new PlcParam(currMem.ToArray());
|
||||
// aggiorno SetpointHMI...
|
||||
currParam.SetpointHMI = (int)updtCh.SetpointHMI;
|
||||
// converto a NUOVA lista byte
|
||||
List<byte> newMem = currParam.convertToByte().ToList();
|
||||
cmsError = MEM_RWByteList(W, 0, PARAMETER_DATA.MemType, PARAMETER_DATA.Address, memIndex, 0, packSize, ref newMem);
|
||||
newMem = currMem.ToArray();
|
||||
|
||||
// update only given data...
|
||||
foreach (var item in newData)
|
||||
{
|
||||
newMem[item.Key - 1] = (byte)item.Value;
|
||||
}
|
||||
// return as list...
|
||||
currMem = newMem.ToList();
|
||||
// scrivo sul PLC array di byte...
|
||||
cmsError = MEM_RWByteList(W, 0, RISC_CFI_DATA.MemType, RISC_CFI_DATA.Address, RISC_CFI_DATA.SubAddress, 0, RISC_CFI_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
#endif
|
||||
return cmsError;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels reflector's data
|
||||
/// </summary>
|
||||
/// <param name="VUmin"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_RWarmerConfVUMin(ref ushort VUmin)
|
||||
{
|
||||
// leggo da 513.0
|
||||
VUmin = 1;
|
||||
List<byte> currMem = new List<byte>();
|
||||
|
||||
// read actual data on memory...
|
||||
CmsError cmsError = MEM_RWWord(R, 0, RISC_VU_MIN.MemType, RISC_VU_MIN.Address, RISC_VU_MIN.SubAddress, ref VUmin);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels reflector's data
|
||||
/// </summary>
|
||||
/// <param name="updtCh"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_WWarmerConfMinCurr(Dictionary<int, double> newData)
|
||||
{
|
||||
// memory area
|
||||
List<double> ListValue = new List<double>();
|
||||
|
||||
// read actual data on memory...
|
||||
CmsError cmsError = MEM_RWDoubleList(R, 0, RISC_OCC_DATA.MemType, RISC_OCC_DATA.Address, RISC_OCC_DATA.SubAddress, RISC_OCC_DATA.Size, ref ListValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
var newMem = ListValue.ToArray();
|
||||
|
||||
// update only given data...
|
||||
foreach (var item in newData)
|
||||
{
|
||||
newMem[item.Key - 1] = item.Value;
|
||||
}
|
||||
// return as list...
|
||||
ListValue = newMem.ToList();
|
||||
// scrivo sul PLC array di byte...
|
||||
cmsError = MEM_RWDoubleList(W, 0, RISC_OCC_DATA.MemType, RISC_OCC_DATA.Address, RISC_OCC_DATA.SubAddress, RISC_OCC_DATA.Size, ref ListValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Set current Warmers Channels reflector's data
|
||||
/// </summary>
|
||||
/// <param name="updtCh"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_WWarmerConfBoardEnabl(Dictionary<int, int> newData)
|
||||
{
|
||||
// memory area
|
||||
byte[] newMem = new byte[newData.Count];
|
||||
List<byte> currMem = new List<byte>();
|
||||
|
||||
// read actual data on memory...
|
||||
CmsError cmsError = MEM_RWByteList(R, 0, RISC_OCC_DATA.MemType, RISC_OCC_DATA.Address, RISC_OCC_DATA.SubAddress, 0, RISC_OCC_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
newMem = currMem.ToArray();
|
||||
|
||||
// update only given data...
|
||||
foreach (var item in newData)
|
||||
{
|
||||
newMem[item.Key - 1] = (byte)item.Value;
|
||||
}
|
||||
// return as list...
|
||||
currMem = newMem.ToList();
|
||||
// scrivo sul PLC array di byte...
|
||||
cmsError = MEM_RWByteList(W, 0, RISC_OCC_DATA.MemType, RISC_OCC_DATA.Address, RISC_OCC_DATA.SubAddress, 0, RISC_OCC_DATA.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
@@ -3150,15 +3264,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
// try/catch
|
||||
try
|
||||
{
|
||||
byte[] memByteSwap = new byte[Values.Count];
|
||||
// faccio swap a 2 byte x volta...
|
||||
for (int i = 0; i < Values.Count / 2; i++)
|
||||
{
|
||||
memByteSwap[2 * i] = Values.ElementAt(2 * i + 1);
|
||||
memByteSwap[2 * i + 1] = Values.ElementAt(2 * i);
|
||||
}
|
||||
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, memByteSwap);
|
||||
//currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, Values.ToArray());
|
||||
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, Values.ToArray());
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -3170,18 +3276,11 @@ namespace CMS_CORE_Library.S7Net
|
||||
// Prevent some exceptions
|
||||
if (Number == 0)
|
||||
return NO_ERROR;
|
||||
|
||||
Values.Clear();
|
||||
try
|
||||
{
|
||||
byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
|
||||
// faccio swap a 2 byte x volta...
|
||||
for (int i = 0; i < memByteRead.Length / 2; i++)
|
||||
{
|
||||
Values.Add(memByteRead[2 * i + 1]);
|
||||
Values.Add(memByteRead[2 * i]);
|
||||
}
|
||||
//Values = memByteRead.ToList();
|
||||
Values = memByteRead.ToList();
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -4635,8 +4734,9 @@ namespace CMS_CORE_Library.S7Net
|
||||
internal static MEMORY_CELL MODULE_RT_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 603, 12, 1536);
|
||||
|
||||
// riscaldi
|
||||
internal static MEMORY_CELL RISC_VU_MIN = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 513, 0, 1);
|
||||
internal static MEMORY_CELL RISC_OCC_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 64, 64);
|
||||
internal static MEMORY_CELL RISC_CHP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 128, 1024);
|
||||
internal static MEMORY_CELL RISC_CHP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 614, 0, 1024);
|
||||
internal static MEMORY_CELL RISC_CFI_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 2176, 1024);
|
||||
internal static MEMORY_CELL RISC_ICH_MIN_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 3200, 4096);
|
||||
internal static MEMORY_CELL RISC_OCS_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 9472, 64);
|
||||
|
||||
@@ -223,7 +223,7 @@ namespace Siemens_S7_Test
|
||||
{
|
||||
memByteRead = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte);
|
||||
}
|
||||
catch(Exception exc)
|
||||
catch (Exception exc)
|
||||
{
|
||||
lg.Error(exc);
|
||||
}
|
||||
@@ -658,15 +658,26 @@ namespace Siemens_S7_Test
|
||||
break;
|
||||
case "byte":
|
||||
default:
|
||||
// attenzione: byte sono GIRATI x cui DEVO invertire lettura pari/dispari...
|
||||
for (int i = 0; i < memByteRead.Length / 2; i++)
|
||||
if (true)
|
||||
{
|
||||
// dispari
|
||||
byteVal = Convert.ToString(memByteRead[i * 2 + 1], 2).PadLeft(8, '0');
|
||||
contenuto += string.Format("B{0:000}: {1} | {2}{3}", i * 2, byteVal, memByteRead[i * 2 + 1], Environment.NewLine);
|
||||
// pari
|
||||
byteVal = Convert.ToString(memByteRead[i * 2], 2).PadLeft(8, '0');
|
||||
contenuto += string.Format("B{0:000}: {1} | {2}{3}", i * 2 + 1, byteVal, memByteRead[i * 2], Environment.NewLine);
|
||||
for (int i = 0; i < memByteRead.Length; i++)
|
||||
{
|
||||
byteVal = Convert.ToString(memByteRead[i], 2).PadLeft(8, '0');
|
||||
contenuto += string.Format("B{0:000}: {1} | {2}{3}", i, byteVal, memByteRead[i], Environment.NewLine);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// attenzione: byte sono GIRATI x cui DEVO invertire lettura pari/dispari...
|
||||
for (int i = 0; i < memByteRead.Length / 2; i++)
|
||||
{
|
||||
// dispari
|
||||
byteVal = Convert.ToString(memByteRead[i * 2 + 1], 2).PadLeft(8, '0');
|
||||
contenuto += string.Format("B{0:000}: {1} | {2}{3}", i * 2, byteVal, memByteRead[i * 2 + 1], Environment.NewLine);
|
||||
// pari
|
||||
byteVal = Convert.ToString(memByteRead[i * 2], 2).PadLeft(8, '0');
|
||||
contenuto += string.Format("B{0:000}: {1} | {2}{3}", i * 2 + 1, byteVal, memByteRead[i * 2], Environment.NewLine);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -704,7 +715,8 @@ namespace Siemens_S7_Test
|
||||
byte[] DB_Byte = new byte[1];
|
||||
DB_Byte[0] = num2write;
|
||||
// attenzione endianness! invertire byte...
|
||||
int fixIndex = memoria.indiceMem % 2 == 0 ? memoria.indiceMem + 1 : memoria.indiceMem - 1;
|
||||
int fixIndex = memoria.indiceMem;
|
||||
//int fixIndex = memoria.indiceMem % 2 == 0 ? memoria.indiceMem + 1 : memoria.indiceMem - 1;
|
||||
currPLC.WriteBytes(DataType.DataBlock, memoria.DbNum, fixIndex, DB_Byte);
|
||||
titolo = string.Format("WRITE BLOCK MEM: {0}", txtWriteAddr1.Text);
|
||||
contenuto = "";
|
||||
|
||||
Reference in New Issue
Block a user