Modifica siemens torri x intercettare banchi allarmi (hard coded!!!)

This commit is contained in:
Samuele E. Locatelli
2021-10-02 10:58:15 +02:00
parent 397198e37f
commit f1badda3b0
+53 -1
View File
@@ -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;
}