Update x decodifica traduzione valori FIMAT...
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
CNCTYPE=MODBUS_TCP_FIMAT
|
||||
PING_MS_TIMEOUT=1000
|
||||
MinDeltaSec=5
|
||||
IOB_NAME=Tend_Fimat
|
||||
;IOB_NAME=Tend_Fimat
|
||||
DIS_EXE_TASK=FALSE
|
||||
DIS_STATE_CH=FALSE
|
||||
|
||||
@@ -33,6 +33,7 @@ SIZE_READ=10
|
||||
SIZE_WRITE=0
|
||||
HR_BASE_ADDR=40000
|
||||
DELTA_BASE=0
|
||||
INDEX_LUT_CORR=-1
|
||||
MODBUS_EXT_REG=0
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,5 @@
|
||||
{
|
||||
"mMapWrite": {
|
||||
"setProg": {
|
||||
"name": "setProg",
|
||||
"description": "Qty",
|
||||
"memAddr": "406202",
|
||||
"tipoMem": "Int",
|
||||
"index": 6202,
|
||||
"size": 1
|
||||
}
|
||||
},
|
||||
"mMapWrite": { },
|
||||
"mMapRead": {
|
||||
"StatoMacchina": {
|
||||
"name": "StatoMacchina",
|
||||
@@ -309,6 +300,25 @@
|
||||
"AlarmIntCond": "40002|0=2",
|
||||
"ManualBitCond": "40003.1=1",
|
||||
"EStopBitCond": "40003.0=1",
|
||||
"WorkIntCond": "40002|0=3"
|
||||
"WorkIntCond": "40002|0=3",
|
||||
"VarInt2Translate": "40002,40008",
|
||||
"VarBit2Translate": "40004"
|
||||
},
|
||||
"itemTranslation": {
|
||||
"40002_0": "Stato non aggiornato per mancanza comunicazione da computer",
|
||||
"40002_1": "Stato non aggiornato per mancanza comunicazione da PLC",
|
||||
"40002_2": "Presenza di anomalie od attivit� che limitano il funzionamento",
|
||||
"40002_3": "Macchina impegnata per attivit� normale in corso",
|
||||
"40002_4": "Macchina libera e pronta al funzionamento",
|
||||
"40004.0": "Posizione di dosaggio impegnata",
|
||||
"40004.1": "Bidone con ricetta terminata od annullata da rimuovere da posizione di dosaggio",
|
||||
"40004.2": "Ricetta in preparazione",
|
||||
"40004.3": "Lavaggio valvole in corso",
|
||||
"40004.4": "Avvio caricamento nuova ricetta in corso",
|
||||
"40008_0": "Nessuno",
|
||||
"40008_1": "Singola ricetta",
|
||||
"40008_2": "Coda (modo non ancora avviato)",
|
||||
"40008_3": "Coda (modo avviato)",
|
||||
"40008_4": "Correzione"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,324 @@
|
||||
{
|
||||
"mMapWrite": { },
|
||||
"mMapRead": {
|
||||
"StatoMacchina": {
|
||||
"name": "StatoMacchina",
|
||||
"description": "Stato della Macchina",
|
||||
"memAddr": "40001",
|
||||
"tipoMem": "Int",
|
||||
"index": 1,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 10,
|
||||
"unit": "#"
|
||||
},
|
||||
"ElencoAnomalie": {
|
||||
"name": "ElencoAnomalie",
|
||||
"description": "Elenco Anomalie",
|
||||
"memAddr": "40002",
|
||||
"tipoMem": "Int",
|
||||
"index": 2,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 10,
|
||||
"unit": "#"
|
||||
},
|
||||
"ElencoAttivita": {
|
||||
"name": "ElencoAttivita",
|
||||
"description": "Elenco Attivita",
|
||||
"memAddr": "40003",
|
||||
"tipoMem": "Int",
|
||||
"index": 3,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 10,
|
||||
"unit": "#"
|
||||
},
|
||||
"StatoRicircolo": {
|
||||
"name": "StatoRicircolo",
|
||||
"description": "Stato Ricircolo Serbatoi",
|
||||
"memAddr": "40004",
|
||||
"tipoMem": "Int",
|
||||
"index": 4,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 10,
|
||||
"unit": "#"
|
||||
},
|
||||
"NumAllarmi": {
|
||||
"name": "NumAllarmi",
|
||||
"description": "NUmero Allarmi Presenti",
|
||||
"memAddr": "40005",
|
||||
"tipoMem": "Int",
|
||||
"index": 5,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"NumAllarmiNR": {
|
||||
"name": "NumAllarmiNR",
|
||||
"description": "NUmero Allarmi Non Riconosciuti",
|
||||
"memAddr": "40006",
|
||||
"tipoMem": "Int",
|
||||
"index": 6,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"ModoPreparazione": {
|
||||
"name": "ModoPreparazione",
|
||||
"description": "Modo Preparazione Ricetta",
|
||||
"memAddr": "40007",
|
||||
"tipoMem": "Int",
|
||||
"index": 7,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 10,
|
||||
"unit": "#"
|
||||
},
|
||||
"NumRicette": {
|
||||
"name": "NumRicette",
|
||||
"description": "Numero Ricette in coda",
|
||||
"memAddr": "40008",
|
||||
"tipoMem": "Int",
|
||||
"index": 8,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"StatoImport": {
|
||||
"name": "StatoImport",
|
||||
"description": "Stato Importazione file ricette XML da esterno",
|
||||
"memAddr": "40009",
|
||||
"tipoMem": "Int",
|
||||
"index": 9,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 10,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb01": {
|
||||
"name": "LivSerb01",
|
||||
"description": "Livello Servatoio 01",
|
||||
"memAddr": "40020",
|
||||
"tipoMem": "Int",
|
||||
"index": 20,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb02": {
|
||||
"name": "LivSerb02",
|
||||
"description": "Livello Servatoio 02",
|
||||
"memAddr": "40021",
|
||||
"tipoMem": "Int",
|
||||
"index": 21,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb03": {
|
||||
"name": "LivSerb03",
|
||||
"description": "Livello Servatoio 03",
|
||||
"memAddr": "40022",
|
||||
"tipoMem": "Int",
|
||||
"index": 22,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb04": {
|
||||
"name": "LivSerb04",
|
||||
"description": "Livello Servatoio 04",
|
||||
"memAddr": "40023",
|
||||
"tipoMem": "Int",
|
||||
"index": 23,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb05": {
|
||||
"name": "LivSerb05",
|
||||
"description": "Livello Servatoio 05",
|
||||
"memAddr": "40024",
|
||||
"tipoMem": "Int",
|
||||
"index": 24,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb06": {
|
||||
"name": "LivSerb06",
|
||||
"description": "Livello Servatoio 06",
|
||||
"memAddr": "40025",
|
||||
"tipoMem": "Int",
|
||||
"index": 25,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb07": {
|
||||
"name": "LivSerb07",
|
||||
"description": "Livello Servatoio 07",
|
||||
"memAddr": "40026",
|
||||
"tipoMem": "Int",
|
||||
"index": 26,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb08": {
|
||||
"name": "LivSerb08",
|
||||
"description": "Livello Servatoio 08",
|
||||
"memAddr": "40027",
|
||||
"tipoMem": "Int",
|
||||
"index": 27,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb09": {
|
||||
"name": "LivSerb09",
|
||||
"description": "Livello Servatoio 09",
|
||||
"memAddr": "40028",
|
||||
"tipoMem": "Int",
|
||||
"index": 28,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb10": {
|
||||
"name": "LivSerb10",
|
||||
"description": "Livello Servatoio 10",
|
||||
"memAddr": "40029",
|
||||
"tipoMem": "Int",
|
||||
"index": 29,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb11": {
|
||||
"name": "LivSerb11",
|
||||
"description": "Livello Servatoio 11",
|
||||
"memAddr": "40030",
|
||||
"tipoMem": "Int",
|
||||
"index": 30,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
},
|
||||
"LivSerb12": {
|
||||
"name": "LivSerb12",
|
||||
"description": "Livello Servatoio 12",
|
||||
"memAddr": "40031",
|
||||
"tipoMem": "Int",
|
||||
"index": 31,
|
||||
"size": 1,
|
||||
"func": "MAX",
|
||||
"period": 90,
|
||||
"factor": 1,
|
||||
"minVal": 0,
|
||||
"maxVal": 1000,
|
||||
"unit": "#"
|
||||
}
|
||||
},
|
||||
"optMemPar": {
|
||||
"AlarmIntCond": "40000|1=2",
|
||||
"ManualBitCond": "40002.1=1",
|
||||
"EStopBitCond": "40002.0=1",
|
||||
"WorkIntCond": "40000|1=3",
|
||||
"VarInt2Translate": "40001,40007",
|
||||
"VarBit2Translate": "40003"
|
||||
},
|
||||
"itemTranslation": {
|
||||
"40001_0": "Stato non aggiornato per mancanza comunicazione da computer",
|
||||
"40001_1": "Stato non aggiornato per mancanza comunicazione da PLC",
|
||||
"40001_2": "Presenza di anomalie od attività che limitano il funzionamento",
|
||||
"40001_3": "Macchina impegnata per attività normale in corso",
|
||||
"40001_4": "Macchina libera e pronta al funzionamento",
|
||||
"40003.0": "Posizione di dosaggio impegnata",
|
||||
"40003.1": "Bidone con ricetta terminata od annullata da rimuovere da posizione di dosaggio",
|
||||
"40003.2": "Ricetta in preparazione",
|
||||
"40003.3": "Lavaggio valvole in corso",
|
||||
"40003.4": "Avvio caricamento nuova ricetta in corso",
|
||||
"40007_0": "Nessuno",
|
||||
"40007_1": "Singola ricetta",
|
||||
"40007_2": "Coda (modo non ancora avviato)",
|
||||
"40007_3": "Coda (modo avviato)",
|
||||
"40007_4": "Correzione"
|
||||
}
|
||||
}
|
||||
@@ -1,51 +1,18 @@
|
||||
[
|
||||
{
|
||||
"description": "Allarmi Impianto",
|
||||
"tipoMem": "DInt",
|
||||
"memAddr": "40000",
|
||||
"index": 0,
|
||||
"size": 2,
|
||||
"description": "Anomalie Macchina",
|
||||
"tipoMem": "Int",
|
||||
"memAddr": "40003",
|
||||
"index": 3,
|
||||
"size": 1,
|
||||
"messages": [
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"##EMERGENZA GENERALE",
|
||||
"##TERMICO SCATTATO",
|
||||
"##FAULT INVERTER",
|
||||
"##FAULT STEPPER",
|
||||
"##CARTER APERTI",
|
||||
"##PORTA SX APERTA",
|
||||
"##PORTA DX APERTA",
|
||||
"##CARTER APERTI"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Allarmi Impianto",
|
||||
"tipoMem": "DInt",
|
||||
"memAddr": "40002",
|
||||
"index": 2,
|
||||
"size": 2,
|
||||
"messages": [
|
||||
"##TOUT BF NASTRO 1",
|
||||
"##TOUT BF NASTRO 2",
|
||||
"##TOUT BF NASTRO 3",
|
||||
"##TOUT BF NASTRO 4",
|
||||
"##TOUT BF NASTRO 5",
|
||||
"##TOUT BF NASTRO 6",
|
||||
"##ALL MOTORULLO 1",
|
||||
"##ALL MOTORULLO 2",
|
||||
"##ALL MOTORULLO 3",
|
||||
"##ALL MOTORULLO 4",
|
||||
"##ALL MOTORULLO 5",
|
||||
"##ALL MOTORULLO 6",
|
||||
"##",
|
||||
"##",
|
||||
"##",
|
||||
"Emergenza Premuta",
|
||||
"##Macchina in Manuale",
|
||||
"Azzeramento asse non ancora eseguito o anomalia al posizionamento valvole",
|
||||
"Anomalia alla bilancia (errore, mancanza comunicazione o fuori scala)",
|
||||
"Anomalia ad elemento di dosaggio",
|
||||
"##Richiesta Sospensione attività",
|
||||
"##Azzeramento peso in corso",
|
||||
"##"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -327,6 +327,9 @@
|
||||
<None Include="DATA\CONF\IMI_PAMA_392.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="DATA\CONF\Tend_FIMAT_01__bck.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="DATA\CONF\Tend_FIMAT_01.ini">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
||||
@@ -70,6 +70,11 @@ namespace IOB_WIN_NEXT
|
||||
/// </summary>
|
||||
public string iniFileName { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Array degli elementi di traduzione item
|
||||
/// </summary>
|
||||
public Dictionary<string, string> itemTranslation { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Valore MAX per countdown segnali blinking
|
||||
/// </summary>
|
||||
|
||||
+158
-36
@@ -270,7 +270,6 @@ namespace IOB_WIN_NEXT
|
||||
/// </summary>
|
||||
public DateTime vetoDataSync = DateTime.Now;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Imposta veto chiamata split (durante chiamata, per 60 sec)
|
||||
/// </summary>
|
||||
@@ -1138,26 +1137,6 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// URL per chiusura PODL --> ODL corrente (metodo GET)...
|
||||
/// </summary>
|
||||
public string urlPODLClose
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
try
|
||||
{
|
||||
answ = $@"{cIobConf.serverData.TRANSP}://{cIobConf.serverData.MPIP}{cIobConf.serverData.MPURL}{cIobConf.serverData.CMDALIVE}/closePODL/{cIobConf.codIOB}?idxPOdl=";
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError(exc, "Errore in composizione urlPODLClose");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// URL per AVVIO PODL corrente (metodo GET)...
|
||||
/// </summary>
|
||||
@@ -1178,6 +1157,26 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// URL per chiusura PODL --> ODL corrente (metodo GET)...
|
||||
/// </summary>
|
||||
public string urlPODLClose
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
try
|
||||
{
|
||||
answ = $@"{cIobConf.serverData.TRANSP}://{cIobConf.serverData.MPIP}{cIobConf.serverData.MPURL}{cIobConf.serverData.CMDALIVE}/closePODL/{cIobConf.codIOB}?idxPOdl=";
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError(exc, "Errore in composizione urlPODLClose");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// URL per segnalazione reboot...
|
||||
/// </summary>
|
||||
@@ -4544,6 +4543,17 @@ namespace IOB_WIN_NEXT
|
||||
/// </summary>
|
||||
protected Dictionary<string, IntConditionCheck> OptCheckCondInt { get; set; } = new Dictionary<string, IntConditionCheck>();
|
||||
|
||||
/// <summary>
|
||||
/// Elenco di valori da tradurre da valori BIT (es ModBus TCP FIMAT)
|
||||
/// NB: potrebbero essere contemporaneamente attivi + valori e + traduzioni
|
||||
/// </summary>
|
||||
protected Dictionary<string,string> OptVar2TranslBit { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Elenco di valori da tradurre da valori INT esclusivi (es ModBus TCP FIMAT)
|
||||
/// </summary>
|
||||
protected Dictionary<string, string> OptVar2TranslInt { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Indica se sia stato resettato un contapezzi
|
||||
/// </summary>
|
||||
@@ -4566,20 +4576,6 @@ namespace IOB_WIN_NEXT
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Fornisce formato valido x messa in coda nel formato dtEve#value#cont
|
||||
/// </summary>
|
||||
protected string getEncodSigLog(DateTime DtEvent, int val2log, int counter)
|
||||
{
|
||||
string answ = "";
|
||||
try
|
||||
{
|
||||
answ = $"{DtEvent:yyyyMMddHHmmssfff}#{val2log:X2}#{counter}";
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indica se vada inviata la key richiesta con lo split/autoODL
|
||||
@@ -4733,6 +4729,27 @@ namespace IOB_WIN_NEXT
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe di base implementazione traduzione di una LUT da memoria come valore BIT a valore
|
||||
/// esplicito x FLog
|
||||
/// </summary>
|
||||
protected virtual void checkTranslateBit()
|
||||
{
|
||||
// verifico se devo processare decodifica di qualche valore...
|
||||
if (OptVar2TranslBit != null && OptVar2TranslBit.Count > 0)
|
||||
{ }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe di base implementazione traduzione di una LUT da memoria come valore INT a valore
|
||||
/// esplicito x FLog
|
||||
/// </summary>
|
||||
protected virtual void checkTranslateInt()
|
||||
{
|
||||
if (OptVar2TranslInt != null && OptVar2TranslInt.Count > 0)
|
||||
{ }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce stato allarmi in formato byte[]
|
||||
/// </summary>
|
||||
@@ -4820,6 +4837,21 @@ namespace IOB_WIN_NEXT
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fornisce formato valido x messa in coda nel formato dtEve#value#cont
|
||||
/// </summary>
|
||||
protected string getEncodSigLog(DateTime DtEvent, int val2log, int counter)
|
||||
{
|
||||
string answ = "";
|
||||
try
|
||||
{
|
||||
answ = $"{DtEvent:yyyyMMddHHmmssfff}#{val2log:X2}#{counter}";
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero dati da FluxLog
|
||||
/// </summary>
|
||||
@@ -5134,6 +5166,37 @@ namespace IOB_WIN_NEXT
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua traduzione ITEM da LUT parametrica (key: tipo+id) del file di conf, se non
|
||||
/// trovo uso key
|
||||
/// </summary>
|
||||
/// <param name="tipo"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
protected virtual string itemTranslation(string tipo, string id)
|
||||
{
|
||||
string answ = "";
|
||||
if (cIobConf.itemTranslation != null)
|
||||
{
|
||||
string lemma = id;
|
||||
if (!string.IsNullOrEmpty(tipo))
|
||||
{
|
||||
lemma = $"{tipo}_{id}";
|
||||
}
|
||||
// cerco nel dizionario delle traduzioni SE esiste un valore e prendo quello,
|
||||
// altrimenti uso il lemma...
|
||||
if (cIobConf.itemTranslation.ContainsKey(lemma))
|
||||
{
|
||||
answ = cIobConf.itemTranslation[lemma];
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = lemma;
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua logging DEBUG corretto impostanto anche la variabile IOB prima di scrivere...
|
||||
/// </summary>
|
||||
@@ -6114,6 +6177,29 @@ namespace IOB_WIN_NEXT
|
||||
addCheckConditionInt(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
// cerco valori *2Translate
|
||||
var listVal2Translate = memMap.optMemPar.Where(x => x.Key.Contains("2Translate")).ToList();
|
||||
if (listVal2Translate != null && listVal2Translate.Count > 0)
|
||||
{
|
||||
// cerco solo valori BIT...
|
||||
var listValBit = listVal2Translate.Where(x => x.Key.StartsWith("VarBit2Translate")).ToList();
|
||||
if (listValBit != null && listValBit.Count > 0)
|
||||
{
|
||||
foreach (var item in listValBit)
|
||||
{
|
||||
addVal2TranslBit(item.Value);
|
||||
}
|
||||
}
|
||||
// ...e poi valori INT...
|
||||
var listValInt = listVal2Translate.Where(x => x.Key.StartsWith("VarInt2Translate")).ToList();
|
||||
if (listValInt != null && listValInt.Count > 0)
|
||||
{
|
||||
foreach (var item in listValInt)
|
||||
{
|
||||
addVal2TranslInt(item.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6190,7 +6276,7 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua chiamata MP-IO per tentare chiusura PODL --> ODL specifico
|
||||
/// Effettua chiamata MP-IO per tentare chiusura PODL --> ODL specifico
|
||||
/// </summary>
|
||||
/// <param name="IdxODL"></param>
|
||||
/// <returns></returns>
|
||||
@@ -6554,6 +6640,42 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aggiunge in setup memoria l'oggetto tipo valore BIT (NON mutuamente esclusivo) da tradurre
|
||||
/// </summary>
|
||||
/// <param name="csvList">Elenco valori da aggiungere formato csv (es "a,b,c")</param>
|
||||
private void addVal2TranslBit(string csvList)
|
||||
{
|
||||
var list2add = csvList.Split(',');
|
||||
foreach (var memKey in list2add)
|
||||
{
|
||||
// cerco x aggiungere...
|
||||
if (!OptVar2TranslBit.ContainsKey(memKey))
|
||||
{
|
||||
// init traduzione vuota
|
||||
OptVar2TranslBit.Add(memKey,"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aggiunge in setup memoria l'oggetto tipo valore INT (mutuamente esclusivo) da tradurre
|
||||
/// </summary>
|
||||
/// <param name="csvList">Elenco valori da aggiungere formato csv (es "a,b,c")</param>
|
||||
private void addVal2TranslInt(string csvList)
|
||||
{
|
||||
var list2add = csvList.Split(',');
|
||||
foreach (var memKey in list2add)
|
||||
{
|
||||
// cerco x aggiungere...
|
||||
if (!OptVar2TranslInt.ContainsKey(memKey))
|
||||
{
|
||||
// init traduzione vuota
|
||||
OptVar2TranslInt.Add(memKey,"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se ci sia veto log attivo e gestisce casistiche
|
||||
/// </summary>
|
||||
|
||||
@@ -659,7 +659,7 @@ namespace IOB_WIN_NEXT
|
||||
/// <param name="tipo"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
protected string itemTranslation(string tipo, string id)
|
||||
protected override string itemTranslation(string tipo, string id)
|
||||
{
|
||||
string answ = "";
|
||||
string lemma = $"{tipo}_{id}";
|
||||
|
||||
@@ -696,6 +696,79 @@ namespace IOB_WIN_NEXT
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// Classe di base implementazione traduzione di una LUT da memoria come valore BIT (multipli) a valore
|
||||
/// esplicito x FLog
|
||||
/// </summary>
|
||||
protected override void checkTranslateBit()
|
||||
{
|
||||
// verifico se devo processare decodifica di qualche valore...
|
||||
if (OptVar2TranslBit != null && OptVar2TranslBit.Count > 0)
|
||||
{
|
||||
// ciclo x ogni valore da tradurre
|
||||
|
||||
// cerco valore nella LUT... se è pari cerco "direttamente" altrimenti dal pari inferiore e 2° INT[]
|
||||
|
||||
// eseguo trduzione da conf
|
||||
|
||||
// se è variato rispetto precedente --> accodo in FLog e salvo...
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe di base implementazione traduzione di una LUT da memoria come valore INT a valore
|
||||
/// esplicito x FLog
|
||||
/// </summary>
|
||||
protected override void checkTranslateInt()
|
||||
{
|
||||
if (OptVar2TranslInt != null && OptVar2TranslInt.Count > 0)
|
||||
{
|
||||
// ciclo x ogni valore da tradurre
|
||||
foreach (var item in OptVar2TranslInt)
|
||||
{
|
||||
int reqAddr = 0;
|
||||
// traduco in int...
|
||||
int.TryParse(item.Key, out reqAddr);
|
||||
int lutAddr = reqAddr + indexLutCorr;
|
||||
int valInt = 0;
|
||||
// cerco valore nella LUT... se è pari cerco "direttamente" altrimenti dal pari inferiore e 2° INT[]
|
||||
if (lutAddr % 2 == 0)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
lutAddr--;
|
||||
}
|
||||
#if false
|
||||
listInt = HoldingRegisterLUT[OptCheckCondInt[cKey].BaseAddr];
|
||||
|
||||
int lutAddress = parametri.holdRegBaseAddr + item.Value.index + deltaBase + indexLutCorr;
|
||||
// se size = 1 --> devo cambiare modo recupero
|
||||
if (item.Value.size == 1)
|
||||
{
|
||||
//if (item.Value.index % 2 == 0)
|
||||
if (lutAddress % 2 == 0)
|
||||
{
|
||||
Array.Copy(HoldingRegisterLUT[lutAddress], 0, listInt, 0, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
lutAddress--;
|
||||
Array.Copy(HoldingRegisterLUT[lutAddress], 1, listInt, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// eseguo trduzione da conf
|
||||
|
||||
// se è variato rispetto precedente --> accodo in FLog e salvo...
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decodifica il resto dell'area x i dati accessori (allarmi, ...)
|
||||
/// </summary>
|
||||
@@ -1173,6 +1246,7 @@ namespace IOB_WIN_NEXT
|
||||
// provo anche come stringa intera
|
||||
lgTrace($"{currMemType} | {baseAddr:000} | Val string: {ModbusClient.ConvertRegistersToString(readTestInt, 0, readTestInt.Length)}");
|
||||
break;
|
||||
|
||||
case modbusMemType.NotDefined:
|
||||
default:
|
||||
lgTrace($"Errore: tipo memoria non definitito per {baseAddr} / {numVals}");
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace IOB_WIN_NEXT
|
||||
{
|
||||
get
|
||||
{
|
||||
return testDisInBitCondition("EStopBitCond");
|
||||
return testBitCondition("EStopBitCond");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,8 +140,7 @@ namespace IOB_WIN_NEXT
|
||||
if (HoldingRegisterLUT != null && HoldingRegisterLUT.Count > 0)
|
||||
{
|
||||
// se emergenza NON premuta (triggered) indico OK (armata...) FARE !!! togliere true
|
||||
//if (!EStopTriggered)
|
||||
if (true)
|
||||
if (!EStopTriggered)
|
||||
{
|
||||
byteSignals += (1 << 7);
|
||||
}
|
||||
@@ -159,6 +158,9 @@ namespace IOB_WIN_NEXT
|
||||
{
|
||||
byteSignals += (1 << 1);
|
||||
}
|
||||
|
||||
checkTranslateBit();
|
||||
checkTranslateInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1124,7 +1124,7 @@ namespace IOB_WIN_NEXT
|
||||
/// <param name="tipo"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
protected string itemTranslation(string tipo, string id)
|
||||
protected override string itemTranslation(string tipo, string id)
|
||||
{
|
||||
string answ = "";
|
||||
string lemma = id;
|
||||
|
||||
Reference in New Issue
Block a user