Update aree Generic x getOptPar rimosse da test OPC-UA

This commit is contained in:
Samuele Locatelli
2025-04-07 14:50:45 +02:00
parent 7429f864b1
commit c2e55e6c17
8 changed files with 152 additions and 79 deletions
+25 -5
View File
@@ -27,11 +27,6 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public bool IsMulti { get; set; } = false;
/// <summary>
/// Indica se si voglia recuperare il PROG NAME dal CNC
/// </summary>
public bool EnabProgName { get; set; } = false;
/// <summary>
/// Dati configurazione CNC
/// </summary>
@@ -47,6 +42,11 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public bool DisabPing { get; set; } = false;
/// <summary>
/// Disabilitazione SignalIn dal Device
/// </summary>
public bool DisabSigIn { get; set; } = false;
/// <summary>
/// Indica che sono disabilitate le fasi controllo stato/semafori (tipicamente x impianti
/// con PLC "suddivisi", PLC + HMI)
@@ -68,6 +68,11 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public bool EnabPzCount { get; set; } = true;
/// <summary>
/// Indica se si voglia recuperare il PROG NAME dal CNC
/// </summary>
public bool EnabProgName { get; set; } = false;
/// <summary>
/// Tempo minimo ammissibile di risposta (es x errori ModBus che risponde troppo in fretta) in millisec
/// </summary>
@@ -78,6 +83,21 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public bool NumArtCharTrim { get; set; } = false;
/// <summary>
/// Conf x scritttura NumArticolo
/// </summary>
public string NumArtMode { get; set; } = "";
/// <summary>
/// Conf x scritttura NumOdl
/// </summary>
public string NumOdlMode { get; set; } = "";
/// <summary>
/// Modalità gestione lettura cadenza
/// </summary>
public string PzCadMode { get; set; } = "";
/// <summary>
/// Delay prima di iniziare a gestire il contapezzi, per evitare falsi zeri in inizializzazione sw
/// </summary>
+38 -2
View File
@@ -11,10 +11,16 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public class FluxLogDto
{
/// <summary>
/// Abilitazione al filtraggio dati FluxLog generale
/// Abilitazione gestione Dossier quotidiani automatici
/// </summary>
public bool EnableFilt { get; set; } = true;
public bool AutoSnapshotDossier { get; set; } = false;
/// <summary>
/// Abilitazione all'operazione di copia dei valori DynData in area MemMap.Write
/// </summary>
public bool CopyDyn2MemWrite { get; set; } = false;
/// <summary>
/// DeadBand generale segnali
@@ -26,16 +32,41 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public int DemFactDynData { get; set; } = 1;
/// <summary>
/// Disabilita DynData globalmente range valori
/// </summary>
public bool DisDynData { get; set; } = false;
/// <summary>
/// Disabilita controllo range valori
/// </summary>
public bool DisDynDataRangeCheck { get; set; } = false;
/// <summary>
/// Abilitazione generale FluxLog / DynData
/// </summary>
public bool EnableDynData { get; set; } = true;
/// <summary>
/// Abilitazione al filtraggio dati FluxLog generale
/// </summary>
public bool EnableFilt { get; set; } = true;
/// <summary>
/// Abilitazione gestione overrides
/// </summary>
public bool EnableOverrides { get; set; } = true;
/// <summary>
/// Abilitazione gestione slow data (invio periodico anche in caso di mancata modifica, secondo SamplePeriod)
/// </summary>
public bool EnableSlowData { get; set; } = true;
/// <summary>
/// Forza DynData senza controllo variazione da precedente valore
/// </summary>
public bool ForceDynData { get; set; } = false;
/// <summary>
/// DeadBand globale x gestione filtraggio valori per sole variazioni sopra soglia
/// </summary>
@@ -51,6 +82,11 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public int SamplePeriod { get; set; } = 1800;
/// <summary>
/// Indica se inviare nei flux log il record DYNDATA|xxxx con variazioni
/// </summary>
public bool SendDynDataRec { get; set; } = false;
/// <summary>
/// Indica se inviare all'avvio applicazione tutti i valori
/// </summary>
+5
View File
@@ -45,6 +45,11 @@ namespace IOB_UT_NEXT.Config.Base
/// </summary>
public string CodIOB { get; set; } = "ND";
/// <summary>
/// Codice dei vari IOB multi x funzioni slave (es autoOdl)
/// </summary>
public string MultiIobList { get; set; } = "";
/// <summary>
/// Tempo di attesa (in minuti) x lettura contapezzi standard
/// </summary>
+40 -29
View File
@@ -123,6 +123,7 @@ namespace IOB_UT_NEXT.Config
MaxErroriCheck = fIni.ReadInteger("OPTPAR", "MAX_ERR_CHECK", maxErrCheck),
MaxPingRetry = fIni.ReadInteger("OPTPAR", "MAX_PING_RETRY", 5),
MinDeltaSec = fIni.ReadInteger("IOB", "MinDeltaSec", 6),
MultiIobList= fIni.ReadString("OPTPAR", "IOB_MULTI_CNAME", ""),
RelVers = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Version}",
ResetAlarmOnStart = bool.Parse(fIni.ReadString("OPTPAR", "SEND_ALARM_RESET", "false")),
SenMachineConf = bool.Parse(fIni.ReadString("OPTPAR", "SEND_MACHINE_CONF", "true")),
@@ -130,8 +131,18 @@ namespace IOB_UT_NEXT.Config
WatchDogPeriod = Convert.ToInt32(fIni.ReadString("OPTPAR", "WATCHDOG_PERIOD", "2")),
DisabWDST = bool.Parse(fIni.ReadString("OPTPAR", "DISABLE_SEND_WDST", "true"))
};
bool doExclOptPar = bool.Parse(fIni.ReadString("OPTPAR", "DO_EXCLUDE_OPT_PAR", "true"));
exclOptPar.Add("CodGruppoIob");
exclOptPar.Add("DELAY_READ_PZ_COUNT");
exclOptPar.Add("DISABLE_SEND_WDST");
exclOptPar.Add("EnabelPodlManFull");
exclOptPar.Add("IOB_MULTI_CNAME");
exclOptPar.Add("MAX_ERR_CHECK");
exclOptPar.Add("MAX_PING_RETRY");
exclOptPar.Add("SEND_ALARM_RESET");
exclOptPar.Add("SEND_MACHINE_CONF");
exclOptPar.Add("timerIntMs");
exclOptPar.Add("WAIT_REC_MSEC");
exclOptPar.Add("WATCHDOG_PERIOD");
// da togliere da conf app...
int uiTimer = utils.CRI("timerIntMs");
@@ -155,17 +166,6 @@ namespace IOB_UT_NEXT.Config
MsSample = uiTimer * utils.CRI("sampleMemCount") < 300000 ? uiTimer * utils.CRI("sampleMemCount") : 300000,
};
exclOptPar.Add("CodGruppoIob");
exclOptPar.Add("DELAY_READ_PZ_COUNT");
exclOptPar.Add("DISABLE_SEND_WDST");
exclOptPar.Add("EnabelPodlManFull");
exclOptPar.Add("MAX_ERR_CHECK");
exclOptPar.Add("MAX_PING_RETRY");
exclOptPar.Add("SEND_ALARM_RESET");
exclOptPar.Add("SEND_MACHINE_CONF");
exclOptPar.Add("timerIntMs");
exclOptPar.Add("WAIT_REC_MSEC");
exclOptPar.Add("WATCHDOG_PERIOD");
// tipo adapter// verifico tipo adapter
try
@@ -212,22 +212,36 @@ namespace IOB_UT_NEXT.Config
}
newConfObj.FluxLog = new FluxLogDto()
{
AutoSnapshotDossier = bool.Parse(fIni.ReadString("OPTPAR", "AUTO_SNAPSHOT_DOSSIER", "false")),
CopyDyn2MemWrite = bool.Parse(fIni.ReadString("OPTPAR", "COPY_DYN2PROD_DATA", "false")),
DemFactDynData = fIni.ReadInteger("OPTPAR", "DEM_FACT_DYN_DATA", 1),
DisDynData = bool.Parse(fIni.ReadString("OPTPAR", "DISABLE_DYN_DATA", "false")),
DisDynDataRangeCheck = bool.Parse(fIni.ReadString("OPTPAR", "disDynDataRangeCheck", "false")),
EnableDynData = bool.Parse(fIni.ReadString("OPTPAR", "ENABLE_DYN_DATA", "true")),
EnableFilt = bool.Parse(fIni.ReadString("OPTPAR", "ENABLE_DATA_FILTER", "false")),
EnableOverrides = bool.Parse(fIni.ReadString("OPTPAR", "ENABLE_OVERRIDES", "false")),
EnableSlowData = bool.Parse(fIni.ReadString("OPTPAR", "ENABLE_SLOW_DATA", "false")),
ForceDynData = bool.Parse(fIni.ReadString("OPTPAR", "FORCE_DYN_DATA", "false")),
GlobalDeadBand = globDBand,
MaxSecReload = fIni.ReadInteger("OPTPAR", "MAX_ELAPSED_TIME_SEC", 3600),
SamplePeriod = fIni.ReadInteger("OPTPAR", "BASE_SAMPLE_PERIOD", 3600),
SendDynDataRec = bool.Parse(fIni.ReadString("OPTPAR", "SEND_DYN_DATA_FLOG", "false")),
VetoSendSnapshotSec = fIni.ReadInteger("OPTPAR", "VETO_SEND_SNAPSHOT", 6)
};
exclOptPar.Add("AUTO_SNAPSHOT_DOSSIER");
exclOptPar.Add("COPY_DYN2PROD_DATA");
exclOptPar.Add("BASE_SAMPLE_PERIOD");
exclOptPar.Add("DEM_FACT_DYN_DATA");
exclOptPar.Add("DISABLE_DYN_DATA");
exclOptPar.Add("disDynDataRangeCheck");
exclOptPar.Add("ENABLE_DATA_FILTER");
exclOptPar.Add("ENABLE_OVERRIDES");
exclOptPar.Add("ENABLE_DYN_DATA");
exclOptPar.Add("ENABLE_SLOW_DATA");
exclOptPar.Add("FORCE_DYN_DATA");
exclOptPar.Add("GLOBAL_DBAND");
exclOptPar.Add("MAX_ELAPSED_TIME_SEC");
exclOptPar.Add("SEND_DYN_DATA_FLOG");
exclOptPar.Add("VETO_SEND_SNAPSHOT");
newConfObj.Device = new DeviceDto()
@@ -235,12 +249,16 @@ namespace IOB_UT_NEXT.Config
DisabExeTask = bool.Parse(fIni.ReadString("IOB", "DIS_EXE_TASK", "false")),
DisabPing = bool.Parse(fIni.ReadString("OPTPAR", "NO_PING", "false")),
DisabStateCh = bool.Parse(fIni.ReadString("IOB", "DIS_STATE_CH", "false")),
DisabSigIn = bool.Parse(fIni.ReadString("OPTPAR", "VETO_SIG_IN", "true")),
EnabMemRewrite = bool.Parse(fIni.ReadString("OPTPAR", "ENABLE_MEM_REWRITE", "true")),
EnabProgName = bool.Parse(fIni.ReadString("CNC", "GETPRGNAME", "true")),
EnabPzCount = utils.CRB("enableContapezzi"),
ExeModeCheckBypass = bool.Parse(fIni.ReadString("OPTPAR", "EXEMODE_CHECK_BYPASS", "false")),
Model = fIni.ReadString("MACHINE", "MODEL", "ND"),
MinRespTimeMs = fIni.ReadInteger("OPTPAR", "MIN_RESP_TIME_MS", 5),
NumArtMode = fIni.ReadString("OPTPAR", "SET_NUM_ART", ""),
NumOdlMode = fIni.ReadString("OPTPAR", "SET_NUM_COM", ""),
PzCadMode = fIni.ReadString("OPTPAR", "PZCAD_MODE", ""),
PzCountDelay = utils.CRI("pzCountDelay"),
PzCountMode = fIni.ReadString("OPTPAR", "PZCOUNT_MODE", ""),
PzReqMode = fIni.ReadString("OPTPAR", "PZREQ_MODE", ""),
@@ -265,12 +283,16 @@ namespace IOB_UT_NEXT.Config
exclOptPar.Add("MAX_TRY_PING");
exclOptPar.Add("MIN_RESP_TIME_MS");
exclOptPar.Add("NO_PING");
exclOptPar.Add("PZCAD_MODE");
exclOptPar.Add("PZCOUNT_MODE");
exclOptPar.Add("PZREQ_MODE");
exclOptPar.Add("PZGTOT_MODE");
exclOptPar.Add("READ_ERROR_MAX");
exclOptPar.Add("READ_ERROR_SLEEP_TIME");
exclOptPar.Add("SET_NUM_ART");
exclOptPar.Add("SET_NUM_COM");
exclOptPar.Add("VETO_QUEUE_IN");
exclOptPar.Add("VETO_SIG_IN");
// multi...
if (!string.IsNullOrEmpty(fIni.ReadString("OPTPAR", "IS_MULTI", "false")))
@@ -353,22 +375,6 @@ namespace IOB_UT_NEXT.Config
newConfObj.lgInfo("loadMemConf | Inizio setup allarmi");
newConfObj.Alarms = new AlarmDto();
newConfObj.Alarms.AlarmMaps = JsonConvert.DeserializeObject<List<BaseAlarmConf>>(jsonData);
#if false
setupAlarmMap();
// leggo il tipo gestione allarmi..
string sAlarmType = getOptJsonKVP("alarmType");
if (!string.IsNullOrEmpty(sAlarmType))
{
alarmType = (AlarmBlockType)Enum.Parse(typeof(AlarmBlockType), sAlarmType);
}
string sAlarmLMin = getOptJsonKVP("alarmLevelMin");
if (!string.IsNullOrEmpty(sAlarmLMin))
{
alarmLevelMin = (AlarmLevel)Enum.Parse(typeof(AlarmLevel), sAlarmLMin);
}
#endif
newConfObj.lgInfo("loadMemConf | Fine setup allarmi");
}
catch (Exception exc)
@@ -434,6 +440,11 @@ namespace IOB_UT_NEXT.Config
exclOptPar.Add("DISABLE_PZCOUNT");
exclOptPar.Add("NUM_ART_CHR_TRIM");
bool doExclOptPar = bool.Parse(fIni.ReadString("OPTPAR", "DO_EXCLUDE_OPT_PAR", "true"));
exclOptPar.Add("DO_EXCLUDE_OPT_PAR");
// caricamento finale OptPar
Dictionary<string, string> optParRead = new Dictionary<string, string>();
string[] optParRows = fIni.ReadSection("OPTPAR");
+2
View File
@@ -195,6 +195,8 @@
<None Include="DATA\CONF\EV102.json" />
<None Include="DATA\CONF\EV103.ini" />
<None Include="DATA\CONF\EV103.json" />
<None Include="DATA\CONF\EV104.ini" />
<None Include="DATA\CONF\EV104.json" />
<None Include="DATA\CONF\EV105.ini" />
<None Include="DATA\CONF\EV105.json" />
<None Include="DATA\CONF\EV106.ini" />
+3 -9
View File
@@ -1856,7 +1856,7 @@ namespace IOB_WIN_FANUC.Iob
// se non trovato... leggo da OPT_PAR
if (string.IsNullOrEmpty(memAddr))
{
memAddr = getOptPar("SET_NUM_ART");
memAddr = IOBConfFull.Device.NumArtMode;
}
// bonifica variabile da definizione STD iniziale...
if (memAddr.StartsWith("STD"))
@@ -1886,7 +1886,7 @@ namespace IOB_WIN_FANUC.Iob
// se non trovato... leggo da OPT_PAR
if (string.IsNullOrEmpty(memAddr))
{
memAddr = getOptPar("PZCAD_MODE");
memAddr = IOBConfFull.Device.PzCadMode;
}
// bonifica variabile da definizione STD iniziale...
if (memAddr.StartsWith("STD"))
@@ -1921,7 +1921,7 @@ namespace IOB_WIN_FANUC.Iob
// se non trovato... leggo da OPT_PAR
if (string.IsNullOrEmpty(memAddr))
{
memAddr = getOptPar("SET_NUM_COM");
memAddr = IOBConfFull.Device.NumOdlMode;
}
// bonifica variabile da definizione STD iniziale...
if (memAddr.StartsWith("STD"))
@@ -2007,9 +2007,6 @@ namespace IOB_WIN_FANUC.Iob
if (string.IsNullOrEmpty(memAddr))
{
memAddr = IOBConfFull.Device.PzTotMode;
#if false
memAddr = getOptPar("PZGTOT_MODE");
#endif
}
// bonifica variabile da definizione STD iniziale...
if (memAddr.StartsWith("STD"))
@@ -2040,9 +2037,6 @@ namespace IOB_WIN_FANUC.Iob
if (string.IsNullOrEmpty(memAddr))
{
memAddr = IOBConfFull.Device.PzReqMode;
#if false
memAddr = getOptPar("PZREQ_MODE");
#endif
}
// bonifica variabile da definizione STD iniziale...
if (memAddr.StartsWith("STD"))
+38 -33
View File
@@ -655,10 +655,13 @@ namespace IOB_WIN_FORM.Iob
// mostro dati variati letti...
displayInData(ref currDispData);
// verifico veto a invio status macchina
#if false
string keyName = "VETO_SIG_IN";
if (getOptPar(keyName).ToUpper() == "TRUE")
if (getOptPar(keyName).ToUpper() == "TRUE")
#endif
if(IOBConfFull.Device.DisabSigIn)
{
lgTrace($"Filtrato accodamento valore da conf IOB | {keyName} | [QUEUE-IN] {qEncodeIN}");
lgTrace($"Filtrato accodamento valore da conf IOB | DisabSigIn | [QUEUE-IN] {qEncodeIN}");
}
else
{
@@ -1889,36 +1892,34 @@ namespace IOB_WIN_FORM.Iob
{
bool fatto = false;
string callResp = "";
if (!string.IsNullOrEmpty(getOptPar("AUTO_SNAPSHOT_DOSSIER")))
if (IOBConfFull.FluxLog.AutoSnapshotDossier)
{
if (DateTime.Now > dtVetoAutoDossier)
DateTime adesso = DateTime.Now;
if (adesso > dtVetoAutoDossier)
{
dtVetoAutoDossier = DateTime.Now.AddMinutes(30);
dtVetoAutoDossier = adesso.AddMinutes(30);
lgTrace("Richiesta processAutoDossier");
string IOB_MULTI_CNAME = "";
string[] elencoMulti = null;
if (isMulti)
{
// devo chiamare cambio ODL x OGNI tavola: mi servono i parametri opzionali...
#if false
string IOB_MULTI_CNAME = "";
IOB_MULTI_CNAME = getOptPar("IOB_MULTI_CNAME");
elencoMulti = IOB_MULTI_CNAME.Split(',');
}
// controllo SIA abilitato...
bool doProc = false;
DateTime adesso = DateTime.Now;
bool.TryParse(getOptPar("AUTO_SNAPSHOT_DOSSIER"), out doProc);
if (doProc)
{
lgTrace("AUTO_SNAPSHOT_DOSSIER abilitato");
// chiamo stored x creare Snapshot Dossier giornalieri fino alla data...
callResp = utils.callUrl(urlFixDailyDossier);
fatto = callResp == "OK";
lgTrace($"Esecuzione processAutoDossier completata --> esito: {callResp}");
}
else
{
lgTrace("AUTO_SNAPSHOT_DOSSIER DISABILITATO");
elencoMulti = IOB_MULTI_CNAME.Split(',');
#endif
elencoMulti = IOBConfFull.General.MultiIobList.Split(',');
}
lgTrace("AutoSnapshotDossier abilitato");
// chiamo stored x creare Snapshot Dossier giornalieri fino alla data...
callResp = utils.callUrl(urlFixDailyDossier);
fatto = callResp == "OK";
lgDebug($"Esecuzione processAutoDossier completata --> esito: {callResp}");
}
else
{
lgTrace("AutoSnapshotDossier DISABILITATO");
}
}
// loggo se fatto
@@ -2340,14 +2341,16 @@ namespace IOB_WIN_FORM.Iob
{
// FixMe Todo: generalizzare parametri nell'obj?
bool enableByApp = utils.CRB("enableDynData");
bool enableByIob = (getOptPar("ENABLE_DYN_DATA") == "TRUE");
#if false
bool enableByIob = (getOptPar("ENABLE_DYN_DATA") == "TRUE");
bool sendDynDataRec = (getOptPar("SEND_DYN_DATA_FLOG") == "TRUE");
bool forceSendByIob = (getOptPar("FORCE_DYN_DATA") == "TRUE");
bool disableDynData = (getOptPar("DISABLE_DYN_DATA") == "TRUE");
bool forceSendByIob = (getOptPar("FORCE_DYN_DATA") == "TRUE");
bool copyDynToProd = (getOptPar("COPY_DYN2PROD_DATA") == "TRUE");
#endif
Dictionary<string, string> currDynData = new Dictionary<string, string>();
if (enableByApp || enableByIob)
if (enableByApp || IOBConfFull.FluxLog.EnableDynData)
{
// verifico se ho fattore demoltiplica...
if (demFactDynData > 1)
@@ -2387,19 +2390,19 @@ namespace IOB_WIN_FORM.Iob
currDynData.Add("DYNDATA", $"{currDynData.Count}xVal");
}
// verifico se DynData sia abilitato IN GENERALE
if (!disableDynData)
if (!IOBConfFull.FluxLog.DisDynData)
{
try
{
string sVal = "";
// se richiesto send diretto...
if (forceSendByIob)
if (IOBConfFull.FluxLog.ForceDynData)
{
// per ogni valore del dizionario mostro ed accodo!
foreach (var item in currDynData)
{
// controllo se vietato dynData
if (sendDynDataRec || item.Key != "DYNDATA")
if (IOBConfFull.FluxLog.SendDynDataRec || item.Key != "DYNDATA")
{
// verifico NON sia un ND...
if (item.Key == "ND" || string.IsNullOrEmpty(item.Key))
@@ -2425,7 +2428,7 @@ namespace IOB_WIN_FORM.Iob
foreach (var item in currDynData)
{
// controllo se vietato dynData
if (sendDynDataRec || item.Key != "DYNDATA")
if (IOBConfFull.FluxLog.SendDynDataRec || item.Key != "DYNDATA")
{
// verifico NON sia un ND...
if (item.Key == "ND" || string.IsNullOrEmpty(item.Key))
@@ -2454,7 +2457,7 @@ namespace IOB_WIN_FORM.Iob
foreach (var item in currDynData)
{
// se configurato x scrivere valori in WRITE PROD
if (copyDynToProd)
if (IOBConfFull.FluxLog.CopyDyn2MemWrite)
{
// se presente nelle memorie write/read --> metto in curr data...
if (memMap != null && memMap.mMapWrite.ContainsKey(item.Key) && !string.IsNullOrEmpty(item.Value))
@@ -2516,9 +2519,11 @@ namespace IOB_WIN_FORM.Iob
public virtual void processOverride()
{
bool enableByApp = utils.CRB("enableOverrides");
bool enableByIob = (getOptPar("ENABLE_OVERRIDES") == "TRUE");
#if false
bool enableByIob = (getOptPar("ENABLE_OVERRIDES") == "TRUE");
#endif
Dictionary<string, string> currOverride = new Dictionary<string, string>();
if (enableByApp || enableByIob)
if (enableByApp || IOBConfFull.FluxLog.EnableOverrides)
{
lgInfo("Inizio processOverride");
if (connectionOk)
+1 -1
View File
@@ -30,7 +30,7 @@ namespace IOB_WIN_OPC_UA.IobOpc
/// <param name="IobConfFull">Configurazione (v 4.x)</param>
public OpcUa(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull)
{
lgInfo("Init OpcUa base");
lgInfo("Init OpcUa...");
// inizializzo...
subscribedItems = new List<Opc.Ua.Client.MonitoredItem>();
VetoSlowDataRead = DateTime.Now.AddSeconds(IOBConfFull.FluxLog.SamplePeriod);