Modifica siemens torri x intercettare banchi allarmi (hard coded!!!)
This commit is contained in:
@@ -75,6 +75,12 @@ namespace IOB_WIN_NEXT
|
||||
// salvo infine variabile bit x invio
|
||||
B_input = byteSem;
|
||||
|
||||
// se ho il bit di allarme
|
||||
if ((RawInput[0] & (1 << 3)) != 0)
|
||||
{
|
||||
checkAlarms();
|
||||
}
|
||||
|
||||
// procedo SOLO SE è enabled IOB
|
||||
if (IobOnline)
|
||||
{
|
||||
@@ -202,6 +208,48 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
}
|
||||
|
||||
private void checkAlarms()
|
||||
{
|
||||
// leggo i banchi allarmi : cablato D700.DBDW2 --> D700 DBDW14, sono 4 banchi a 32 bit da verificare
|
||||
|
||||
int trovati = 0;
|
||||
// ciclo nei 4 banchi...
|
||||
trovati += checkAlarmBank("DB700.DBDW2");
|
||||
trovati += checkAlarmBank("DB700.DBDW6");
|
||||
trovati += checkAlarmBank("DB700.DBDW10");
|
||||
trovati += checkAlarmBank("DB700.DBDW14");
|
||||
}
|
||||
|
||||
private int checkAlarmBank(string memAddrAlarms)
|
||||
{
|
||||
int trovato = 0;
|
||||
uint valDW = 0;
|
||||
var MemBlockPZ = new byte[4];
|
||||
bool fatto = S7ReadBB(ref MemBlockPZ, memAddrAlarms, 4);
|
||||
if (fatto)
|
||||
{
|
||||
valDW = S7.Net.Types.DWord.FromByteArray(MemBlockPZ.ToArray());
|
||||
// se <> 0 --> log e accodo a dynData
|
||||
if (valDW != 0)
|
||||
{
|
||||
string key = $"MTH_ALARM_{memAddrAlarms}_{valDW}";
|
||||
var biteVal = baseUtils.binaryForm(valDW);
|
||||
lgInfo($"Stato allarmi rilevati: {key} | {valDW} | {biteVal}");
|
||||
// accodo a dictionary
|
||||
string almMsg = $"{DateTime.Now} | val {valDW} | {biteVal}";
|
||||
// se non ci fosse aggiungo
|
||||
if (!lastReadAlarms.ContainsKey(key))
|
||||
{
|
||||
lastReadAlarms.Add(key, almMsg);
|
||||
}
|
||||
trovato++;
|
||||
}
|
||||
}
|
||||
return trovato;
|
||||
}
|
||||
|
||||
protected Dictionary<string, string> lastReadAlarms = new Dictionary<string, string>();
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Public Methods
|
||||
@@ -277,7 +325,9 @@ namespace IOB_WIN_NEXT
|
||||
/// <returns></returns>
|
||||
public override Dictionary<string, string> getCncAlarms()
|
||||
{
|
||||
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||
// parto da ultimo vettore allarmi rilevato
|
||||
Dictionary<string, string> outVal = lastReadAlarms;
|
||||
// se ho altro --> accodo
|
||||
try
|
||||
{
|
||||
string almMsg = string.Format("{0} | {1}", currPLC.LastErrorCode.ToString(), currPLC.LastErrorString);
|
||||
@@ -287,6 +337,8 @@ namespace IOB_WIN_NEXT
|
||||
{
|
||||
lgError(exc, "Errore in getCncAlarms");
|
||||
}
|
||||
// resetto vettore allarmi
|
||||
lastReadAlarms = new Dictionary<string, string>();
|
||||
return outVal;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user