Merge branch 'MTC'
This commit is contained in:
@@ -58,6 +58,7 @@ PZCOUNT_MODE=STD.DM20.2
|
||||
DISABLE_PZCOUNT=TRUE
|
||||
ENABLE_DYN_DATA=FALSE
|
||||
FORCE_DYN_DATA=TRUE
|
||||
ENABLE_DATA_FILTER=FALSE
|
||||
|
||||
; conf parametri memoria READ/WRITE
|
||||
PARAM_CONF=IMI_50.json
|
||||
|
||||
+212
-76
@@ -26,6 +26,10 @@ namespace IOB_WIN
|
||||
/// </summary>
|
||||
protected MTConnectClient MTC_ref;
|
||||
/// <summary>
|
||||
/// Gestione filtraggio dati
|
||||
/// </summary>
|
||||
protected bool enableDataFilter = false;
|
||||
/// <summary>
|
||||
/// URL x salvataggio elenco dataItems MTC
|
||||
/// </summary>
|
||||
protected string urlSaveDataItems
|
||||
@@ -56,6 +60,11 @@ namespace IOB_WIN
|
||||
{
|
||||
// gestione invio ritardato contapezzi
|
||||
pzCountDelay = utils.CRI("pzCountDelay");
|
||||
// gestione data filtering...
|
||||
if (!string.IsNullOrEmpty(getOptPar("ENABLE_DATA_FILTER")))
|
||||
{
|
||||
bool.TryParse(getOptPar("ENABLE_DATA_FILTER"), out enableDataFilter);
|
||||
}
|
||||
lastPzCountSend = DateTime.Now;
|
||||
lastWarnODL = DateTime.Now;
|
||||
}
|
||||
@@ -199,6 +208,7 @@ namespace IOB_WIN
|
||||
}
|
||||
protected void DevicesSuccessful(MTConnectDevices.Document document)
|
||||
{
|
||||
lgInfo("STEP DevicesSuccessful reached!");
|
||||
MtcDataItemExt currDataItem = null;
|
||||
machDataItem currMapoDataItem = null;
|
||||
List<machDataItem> elencoDataItems = new List<machDataItem>();
|
||||
@@ -218,55 +228,7 @@ namespace IOB_WIN
|
||||
lgInfo(sVal);
|
||||
try
|
||||
{
|
||||
// uuid e parametri secondo categoria...
|
||||
switch (dataItem.Category)
|
||||
{
|
||||
case MTConnect.DataItemCategory.CONDITION:
|
||||
uuid = $"C_{dataItem.Id}";
|
||||
threshDBand = 0;
|
||||
dSamplePeriod = 0;
|
||||
break;
|
||||
case MTConnect.DataItemCategory.EVENT:
|
||||
uuid = $"E_{dataItem.Id}";
|
||||
threshDBand = 0;
|
||||
dSamplePeriod = 0;
|
||||
break;
|
||||
case MTConnect.DataItemCategory.SAMPLE:
|
||||
uuid = $"S_{dataItem.Id}";
|
||||
threshDBand = 1;
|
||||
if (dataItem.Id.EndsWith("PosAct") || dataItem.Id.EndsWith("PosTgt"))
|
||||
{
|
||||
threshDBand = 5;
|
||||
}
|
||||
dSamplePeriod = 60;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// salvo oggetto x "uso interno"
|
||||
currDataItem = new MtcDataItemExt()
|
||||
{
|
||||
Id = dataItem.Id,
|
||||
Category = dataItem.Category,
|
||||
Constraints = dataItem.Constraints,
|
||||
CoordinateSystem = dataItem.CoordinateSystem,
|
||||
Name = dataItem.Name,
|
||||
NativeScale = dataItem.NativeScale,
|
||||
NativeUnits = dataItem.NativeUnits,
|
||||
SampleRate = dataItem.SampleRate,
|
||||
Representation = dataItem.Representation,
|
||||
SignificantDigits = dataItem.SignificantDigits,
|
||||
Source = dataItem.Source,
|
||||
Statistic = dataItem.Statistic,
|
||||
SubType = dataItem.SubType,
|
||||
Type = dataItem.Type,
|
||||
TypePath = dataItem.TypePath,
|
||||
Units = dataItem.Units,
|
||||
XPath = dataItem.XPath,
|
||||
uid = uuid,
|
||||
thresholdDeadBand = threshDBand,
|
||||
samplePeriod = dSamplePeriod
|
||||
};
|
||||
currDataItem = formatDataItem(ref dSamplePeriod, ref threshDBand, ref uuid, dataItem);
|
||||
// aggiungo
|
||||
dataItemMem.Add(dataItem.Id, currDataItem);
|
||||
// salvo oggetto x registrazione su server MP-IO
|
||||
@@ -282,8 +244,10 @@ namespace IOB_WIN
|
||||
// aggiungo
|
||||
elencoDataItems.Add(currMapoDataItem);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError($"Eccezione in DevicesSuccessful / DataItem:{Environment.NewLine}{exc}");
|
||||
}
|
||||
}
|
||||
// invio IN BLOCCO il dataItem serializzati...
|
||||
sendDataItemsList(elencoDataItems);
|
||||
@@ -291,6 +255,76 @@ namespace IOB_WIN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MtcDataItemExt formatDataItem(ref int dSamplePeriod, ref int threshDBand, ref string uuid, MTConnectDevices.DataItem dataItem)
|
||||
{
|
||||
MtcDataItemExt currDataItem;
|
||||
// uuid e parametri secondo categoria...
|
||||
switch (dataItem.Category)
|
||||
{
|
||||
case MTConnect.DataItemCategory.CONDITION:
|
||||
uuid = $"C_{dataItem.Id}";
|
||||
threshDBand = 0;
|
||||
dSamplePeriod = 0;
|
||||
break;
|
||||
case MTConnect.DataItemCategory.EVENT:
|
||||
uuid = $"E_{dataItem.Id}";
|
||||
threshDBand = 0;
|
||||
dSamplePeriod = 0;
|
||||
break;
|
||||
case MTConnect.DataItemCategory.SAMPLE:
|
||||
uuid = $"S_{dataItem.Id}";
|
||||
// SOLOS E è abilitato il datafiltering...
|
||||
if (enableDataFilter)
|
||||
{
|
||||
threshDBand = 1;
|
||||
if (dataItem.Id.EndsWith("PosAct") || dataItem.Id.EndsWith("PosTgt"))
|
||||
{
|
||||
threshDBand = 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
threshDBand = 0;
|
||||
}
|
||||
dSamplePeriod = 60;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// salvo oggetto x "uso interno"
|
||||
currDataItem = new MtcDataItemExt()
|
||||
{
|
||||
Id = dataItem.Id,
|
||||
Category = dataItem.Category,
|
||||
Constraints = dataItem.Constraints,
|
||||
CoordinateSystem = dataItem.CoordinateSystem,
|
||||
Name = dataItem.Name,
|
||||
NativeScale = dataItem.NativeScale,
|
||||
NativeUnits = dataItem.NativeUnits,
|
||||
SampleRate = dataItem.SampleRate,
|
||||
Representation = dataItem.Representation,
|
||||
SignificantDigits = dataItem.SignificantDigits,
|
||||
Source = dataItem.Source,
|
||||
Statistic = dataItem.Statistic,
|
||||
SubType = dataItem.SubType,
|
||||
Type = dataItem.Type,
|
||||
TypePath = dataItem.TypePath,
|
||||
Units = dataItem.Units,
|
||||
XPath = dataItem.XPath,
|
||||
uid = uuid,
|
||||
thresholdDeadBand = threshDBand,
|
||||
samplePeriod = dSamplePeriod
|
||||
};
|
||||
// lo g x capire COME ho chiamato alcune cosette...
|
||||
if (dataItem.Id.Contains("EXE_MODE") || dataItem.Id.Contains("RUN_MODE") || dataItem.Id.Contains("POWER") || dataItem.Id.EndsWith("_Status"))
|
||||
{
|
||||
lgInfo($"DEBUG DATA | dataItem.Id : {dataItem.Id}");
|
||||
}
|
||||
|
||||
return currDataItem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua invio a MP/IO dell'elenco serializzato dei dataItems
|
||||
/// </summary>
|
||||
@@ -321,9 +355,14 @@ namespace IOB_WIN
|
||||
/// <returns></returns>
|
||||
protected bool checkSaveItem(MTConnectStreams.DataItem newValue)
|
||||
{
|
||||
bool answ = false;
|
||||
bool answ = !enableDataFilter;
|
||||
|
||||
if (newValue != null)
|
||||
{
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo($"Richiesta checkSaveItem per {newValue} | id: {newValue.DataItemId} | CDATA: {newValue.CDATA}");
|
||||
}
|
||||
// verifico in memoria se ho l'oggetto condition ed il suo valore..
|
||||
if (dataItemMem.ContainsKey(newValue.DataItemId))
|
||||
{
|
||||
@@ -332,6 +371,38 @@ namespace IOB_WIN
|
||||
dataItemMem[newValue.DataItemId].valueTimestamp = newValue.Timestamp;
|
||||
answ = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// registro non trovato da aggiungere...
|
||||
lgInfo($"DataItem non trovato in checkSaveItem: {newValue.DataItemId}");
|
||||
#if false
|
||||
List<machDataItem> elencoDataItems = new List<machDataItem>();
|
||||
int dSamplePeriod = 0;
|
||||
int threshDBand = 0;
|
||||
string uuid = "";
|
||||
var currDataItem = formatDataItem(ref dSamplePeriod, ref threshDBand, ref uuid, (MTConnectDevices.DataItem)newValue);
|
||||
// aggiungo
|
||||
dataItemMem.Add(newValue.DataItemId, currDataItem);
|
||||
// salvo oggetto x registrazione su server MP-IO
|
||||
var currMapoDataItem = new machDataItem()
|
||||
{
|
||||
uuid = newValue.DataItemId,
|
||||
Category = (DataItemCategory)newValue.Category,
|
||||
Name = newValue.Name,
|
||||
Type = newValue.Type,
|
||||
SubType = newValue.SubType,
|
||||
//Units = newValue.Units
|
||||
};
|
||||
// aggiungo
|
||||
elencoDataItems.Add(currMapoDataItem);
|
||||
// invio IN BLOCCO il dataItem serializzati...
|
||||
sendDataItemsList(elencoDataItems);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lgError("Attenzione: checkSaveItem con newValue null!");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
@@ -342,11 +413,15 @@ namespace IOB_WIN
|
||||
/// <returns></returns>
|
||||
protected bool checkSaveSample(MTConnectStreams.Sample newValue)
|
||||
{
|
||||
bool answ = false;
|
||||
bool answ = !enableDataFilter;
|
||||
double oldVal = 0;
|
||||
double newVal = 0;
|
||||
if (newValue != null)
|
||||
{
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo($"Richiesta checkSaveSample per {newValue} | id: {newValue.DataItemId} | CDATA: {newValue.CDATA}");
|
||||
}
|
||||
// verifico in memoria se ho l'oggetto condition ed il suo valore..
|
||||
if (dataItemMem.ContainsKey(newValue.DataItemId))
|
||||
{
|
||||
@@ -365,6 +440,10 @@ namespace IOB_WIN
|
||||
// controllo SE ho DeadBand...
|
||||
if (dataItemMem[newValue.DataItemId].thresholdDeadBand > 0)
|
||||
{
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo($"Test deadband: oldVal: {oldVal} | newVal: {newVal}");
|
||||
}
|
||||
// recupero i valori e testo DeadBand...
|
||||
double.TryParse(dataItemMem[newValue.DataItemId].value.Replace(".", ","), out oldVal);
|
||||
double.TryParse(newValue.CDATA.Replace(".", ","), out newVal);
|
||||
@@ -384,6 +463,15 @@ namespace IOB_WIN
|
||||
dataItemMem[newValue.DataItemId].valueTimestamp = newValue.Timestamp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// registro non trovato da aggiungere...
|
||||
lgInfo($"DataItem non trovato in checkSaveSample: {newValue.DataItemId}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lgError("Attenzione: checkSaveItem con newValue null!");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
@@ -405,14 +493,17 @@ namespace IOB_WIN
|
||||
{
|
||||
descr = itemTranslation("C", dataItem.DataItemId);
|
||||
locTStamp = dataItem.Timestamp.ToLocalTime();
|
||||
sVal = $"CONDITION: {locTStamp.ToString()} | descr: {descr} | Name: {dataItem.Name} | Val: {dataItem.CDATA}";
|
||||
sVal = $"CONDITION: {locTStamp.ToString()} | descr: {descr} | Id: {dataItem.DataItemId} | | Name: {dataItem.Name} | Val: {dataItem.CDATA}";
|
||||
lgInfo(sVal);
|
||||
DateTime tStamp = dataItem.Timestamp;
|
||||
var time2 = tStamp.ToLocalTime();
|
||||
// verifico se salvare
|
||||
bool changed = checkSaveItem(dataItem);
|
||||
if (changed)
|
||||
{
|
||||
// accodare ed invia nella coda ALARMS (che POI salva in document MongoDB anche ultimi x minuti di FluxLog...)
|
||||
accodaAlarmLog(sVal, qEncodeFLog(locTStamp, descr, dataItem.CDATA));
|
||||
accodaAlarmLog(sVal, qEncodeFLog(time2, descr, dataItem.CDATA));
|
||||
//accodaAlarmLog(sVal, qEncodeFLog(locTStamp, descr, dataItem.CDATA));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -426,7 +517,7 @@ namespace IOB_WIN
|
||||
{
|
||||
descr = itemTranslation("E", dataItem.DataItemId);
|
||||
locTStamp = dataItem.Timestamp.ToLocalTime();
|
||||
sVal = $"EVENT: {locTStamp.ToString()} | descr: {descr} | Name: {dataItem.Name} | Val: {dataItem.CDATA}";
|
||||
sVal = $"EVENT: {locTStamp.ToString()} | descr: {descr} | Id: {dataItem.DataItemId} | Name: {dataItem.Name} | Val: {dataItem.CDATA}";
|
||||
lgInfo(sVal);
|
||||
DateTime tStamp = dataItem.Timestamp;
|
||||
var time2 = tStamp.ToLocalTime();
|
||||
@@ -434,7 +525,8 @@ namespace IOB_WIN
|
||||
bool changed = checkSaveItem(dataItem);
|
||||
if (changed)
|
||||
{
|
||||
accodaFLog(sVal, qEncodeFLog(locTStamp, descr, dataItem.CDATA));
|
||||
accodaFLog(sVal, qEncodeFLog(time2, descr, dataItem.CDATA));
|
||||
//accodaFLog(sVal, qEncodeFLog(locTStamp, descr, dataItem.CDATA));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -449,7 +541,7 @@ namespace IOB_WIN
|
||||
{
|
||||
descr = itemTranslation("S", dataItem.DataItemId);
|
||||
locTStamp = dataItem.Timestamp.ToLocalTime();
|
||||
sVal = $"SAMPLE: {locTStamp.ToString()} | descr: {descr} | Name: {dataItem.Name} | Val: {dataItem.CDATA}";
|
||||
sVal = $"SAMPLE: {locTStamp.ToString()} | descr: {descr} | Id: {dataItem.DataItemId} | | Name: {dataItem.Name} | Val: {dataItem.CDATA}";
|
||||
lgInfo(sVal);
|
||||
// verifico se salvare
|
||||
bool changed = checkSaveSample(dataItem);
|
||||
@@ -457,6 +549,13 @@ namespace IOB_WIN
|
||||
{
|
||||
accodaFLog(sVal, qEncodeFLog(locTStamp, descr, dataItem.CDATA));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo($"NON ACCODATO sample poiché verifica variazioen ha dato esito negativo");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
@@ -735,16 +834,20 @@ namespace IOB_WIN
|
||||
// Controllo booleano PING e POWERON...
|
||||
bool checkPing = (testPingMachine == IPStatus.Success);
|
||||
string currPowerOn = "";
|
||||
MtcDataItemExt currMTC_DI = null;
|
||||
try
|
||||
{
|
||||
var exeMode = dataItemMem["POWER"];
|
||||
currPowerOn = exeMode.value;
|
||||
currMTC_DI = dataItemMem["POWER"];
|
||||
currPowerOn = currMTC_DI.value;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
catch (Exception exc)
|
||||
{
|
||||
//lgError($"Eccezione in decodifica currPowerOn: {Environment.NewLine}{exc}");
|
||||
}
|
||||
|
||||
bool checkPowerOn = (currPowerOn == "ON");
|
||||
|
||||
// bit 0 (poweron) imposto a 1 SE pingo o ho PowerOn...
|
||||
// bit 0 (poweron) imposto a 1 SE pingo o PowerOn=="ON"...
|
||||
B_input = (checkPing || checkPowerOn) ? 1 : 0;
|
||||
|
||||
|
||||
@@ -754,25 +857,31 @@ namespace IOB_WIN
|
||||
string currUnOpStatus = "";
|
||||
try
|
||||
{
|
||||
var exeMode = dataItemMem["Path_01_EXE_MODE"];
|
||||
currExe = exeMode.value;
|
||||
currMTC_DI = dataItemMem["Path_01_EXE_MODE"];
|
||||
currExe = currMTC_DI.value;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
//lgError($"Eccezione in decodifica exeMode: {Environment.NewLine}{exc}");
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
try
|
||||
{
|
||||
var runMode = dataItemMem["Path_01_RUN_MODE"];
|
||||
currRun = runMode.value;
|
||||
currMTC_DI = dataItemMem["Path_01_RUN_MODE"];
|
||||
currRun = currMTC_DI.value;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
//lgError($"Eccezione in decodifica runMode: {Environment.NewLine}{exc}");
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
try
|
||||
{
|
||||
var UnOp_Status = dataItemMem["ST_UnOp_01_Status"];
|
||||
currUnOpStatus = UnOp_Status.value;
|
||||
currMTC_DI = dataItemMem["ST_UnOp_01_Status"];
|
||||
currUnOpStatus = currMTC_DI.value;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
//lgError($"Eccezione in decodifica UnOp_Status: {Environment.NewLine}{exc}");
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
|
||||
// controllo lavora...
|
||||
if (currRun == "AUTOMATIC" || currRun == "SEMI_AUTO")
|
||||
@@ -795,6 +904,11 @@ namespace IOB_WIN
|
||||
{
|
||||
// se ho run mode != auto --> manual
|
||||
B_input += (1 << 4);
|
||||
// loggo cosa sia curr run!
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo($"Indicato manuale | currRun = {currRun}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -837,9 +951,31 @@ namespace IOB_WIN
|
||||
// log opzionale!
|
||||
if (verboseLog)
|
||||
{
|
||||
lgInfo(string.Format("Trasformazione B_input: {0}", B_input));
|
||||
lgInfo($"Trasformazione B_input: {B_input} | currRun = {currRun} | currExe = {currExe} | currUnOpStatus {currUnOpStatus}");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Verifica un DataItem e se il valore corrisponde a quello indicato come "true value" restituisce true
|
||||
/// </summary>
|
||||
/// <param name="itemName"></param>
|
||||
/// <param name="trueVal"></param>
|
||||
/// <returns></returns>
|
||||
protected bool checkDataItem(string itemName, string trueVal)
|
||||
{
|
||||
bool answ = false;
|
||||
MtcDataItemExt currValue = null;
|
||||
try
|
||||
{
|
||||
currValue = dataItemMem[itemName];
|
||||
answ = (currValue.value.Equals(trueVal));
|
||||
}
|
||||
catch
|
||||
{
|
||||
lgError($"Errore in decodifica valore per {itemName} rispetto a {trueVal} | recuperato {currValue} / {currValue.value}");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero dati dinamici...
|
||||
/// </summary>
|
||||
|
||||
Vendored
+1
-1
@@ -16,7 +16,7 @@ pipeline {
|
||||
|
||||
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
|
||||
script {
|
||||
withEnv(['NEXT_BUILD_NUMBER=550']) {
|
||||
withEnv(['NEXT_BUILD_NUMBER=557']) {
|
||||
// env.versionNumber = VersionNumber(versionNumberString : '2.6.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
|
||||
env.versionNumber = VersionNumber(versionNumberString : '2.6.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
|
||||
env.APP_NAME = 'MAPO-IOB-WIN'
|
||||
|
||||
Reference in New Issue
Block a user