diff --git a/IOB-WIN-NEXT/DATA/CONF/VL28.ini b/IOB-WIN-NEXT/DATA/CONF/VL28.ini
index 9ad444c1..90469029 100644
--- a/IOB-WIN-NEXT/DATA/CONF/VL28.ini
+++ b/IOB-WIN-NEXT/DATA/CONF/VL28.ini
@@ -55,10 +55,7 @@ BLINK_FILT=0
[OPTPAR]
EZNC_SYS=EZNC_SYS_MELDAS700L
ENABLE_PZCOUNT=TRUE
-;PZCOUNT_MODE=STD|BIT
-;PZCOUNT_MODE=STD.PAR.6711
-;PZGTOT_MODE=STD.PAR.6712
-;;PZREQ_MODE=STD.PAR.6713
+ENABLE_DYN_DATA=TRUE
PZCOUNT_MODE=STD.PAR.8002
PZGTOT_MODE=STD.PAR.8001
PZREQ_MODE=STD.PAR.8003
diff --git a/IOB-WIN-NEXT/DATA/CONF/VL28.json b/IOB-WIN-NEXT/DATA/CONF/VL28.json
index 3991bb77..c0593268 100644
--- a/IOB-WIN-NEXT/DATA/CONF/VL28.json
+++ b/IOB-WIN-NEXT/DATA/CONF/VL28.json
@@ -3,7 +3,7 @@
"setArt": {
"name": "setArt",
"description": "Articolo",
- "memAddr": "NONE.01",
+ "memAddr": "",
"tipoMem": "String",
"index": 0,
"size": 20,
@@ -12,29 +12,29 @@
"setArtNum": {
"name": "setArtNum",
"description": "# Num Articolo",
- "memAddr": "MACRO.966",
+ "memAddr": "VAR.501",
"tipoMem": "Int",
"index": 966,
"size": 4,
- "displOrdinal": 1
+ "displOrdinal": 2
},
"setComm": {
"name": "setComm",
"description": "Commessa",
- "memAddr": "NONE.02",
+ "memAddr": "",
"tipoMem": "String",
"index": 0,
"size": 20,
- "displOrdinal": 2
+ "displOrdinal": 3
},
"setCommNum": {
"name": "setCommNum",
"description": "# NumCommessa",
- "memAddr": "MACRO.965",
+ "memAddr": "VAR.500",
"tipoMem": "Int",
"index": 965,
"size": 4,
- "displOrdinal": 2
+ "displOrdinal": 4
},
"setPzComm": {
"name": "setPzComm",
@@ -43,7 +43,16 @@
"tipoMem": "Int",
"index": 8003,
"size": 4,
- "displOrdinal": 3
+ "displOrdinal": 5
+ },
+ "setPzCommOdl": {
+ "name": "setPzCommOdl",
+ "description": "Qta ODL",
+ "memAddr": "VAR.502",
+ "tipoMem": "Int",
+ "index": 502,
+ "size": 4,
+ "displOrdinal": 6
}
},
"mMapRead": {
@@ -82,10 +91,23 @@
"period": 60,
"factor": 1,
"displOrdinal": 9
+ },
+ "DYNDATA": {
+ "name": "DYNDATA",
+ "description": "DynData check",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 20
}
},
"mMapWriteLink": {
"setArt": "setArtNum",
- "setComm": "setCommNum"
+ "setComm": "setCommNum",
+ "setPzComm": "setPzCommOdl"
}
}
\ No newline at end of file
diff --git a/IOB-WIN-NEXT/Iob/Mitsubishi.cs b/IOB-WIN-NEXT/Iob/Mitsubishi.cs
index 9b4e339d..29c9ce26 100644
--- a/IOB-WIN-NEXT/Iob/Mitsubishi.cs
+++ b/IOB-WIN-NEXT/Iob/Mitsubishi.cs
@@ -400,50 +400,75 @@ namespace IOB_WIN_NEXT.Iob
// processo SOLO SE connected...
if (connectionOk)
{
-#if false
- if (MITSUBISHI_ref.Connected)
- {
- stopwatch.Restart();
- EgwProxy.MultiCncLib.Focas1.ODBDY2_1 answ = MITSUBISHI_ref.getAllDynData();
- if (utils.CRB("recTime"))
- {
- TimingData.addResult(cIobConf.codIOB, string.Format("PROC-DYN-DATA"), stopwatch.ElapsedTicks);
- }
+ // leggo i valori Var
+ ReadMitsubVars();
- try
+ // cerco tra tutte le aree write le VARS...
+ foreach (var item in memMap.mMapWrite)
+ {
+ if(item.Value.memAddr.StartsWith("VAR"))
{
- string actf = answ.actf.ToString();
- string acts = answ.acts.ToString();
- //string numAlarm = memName.alarm.ToString();
- // preparo i singoli valori dell'array...
- //outVal.Add("DYNDATA", string.Format("{0}#{1}#{2}", actf, acts, numAlarm));
- outVal.Add("DYNDATA", string.Format("FEED {0}#SPEED_RPM {1}", actf, acts));
- if (utils.CRB("SendFeedSpeed"))
+ // certo in dict ed accodo...
+ int iVar = 0;
+ string sVar = item.Value.memAddr.Replace("VAR.", "");
+ int.TryParse(sVar, out iVar);
+ if(iVar>0)
{
- outVal.Add("FEED", actf);
- outVal.Add("SPEED_RPM", acts);
- //outVal.Add("NUM_ALARM", numAlarm);
- }
- if (utils.CRB("SendAxPos"))
- {
- // salvo le posizioni...
- EgwProxy.MultiCncLib.Focas1.FAXIS posAx = answ.pos;
- int[] currPosAbs = posAx.absolute;
- int i = 0;
- foreach (var item in currPosAbs)
+ // cerco in dizionario...
+ if(DictVar.ContainsKey(iVar))
{
- i++;
- outVal.Add(string.Format("POS_{0:00}", i), item.ToString());
+ outVal.Add(item.Key, $"{DictVar[iVar]}");
+ upsertKey(item.Key, $"{DictVar[iVar]}");
}
}
}
- catch (Exception exc)
- {
- lgError(exc, "Errore in getDynData");
- }
- stopwatch.Stop();
}
-#endif
+ // cerco tra tutte le aree read le VARS...
+ foreach (var item in memMap.mMapRead)
+ {
+ if (item.Value.memAddr.StartsWith("VAR"))
+ {
+ // certo in dict ed accodo...
+ int iVar = 0;
+ string sVar = item.Value.memAddr.Replace("VAR.", "");
+ int.TryParse(sVar, out iVar);
+ if (iVar > 0)
+ {
+ // cerco in dizionario...
+ if (DictVar.ContainsKey(iVar))
+ {
+ outVal.Add(item.Key, $"{DictVar[iVar]}");
+ upsertKey(item.Key, $"{DictVar[iVar]}");
+ }
+ }
+ }
+ }
+ // aggiungo DynData... calcolato come variazione pezzi e lampade...
+ if (outVal.ContainsKey("DYNDATA"))
+ {
+ outVal.Remove("DYNDATA");
+ }
+ StringBuilder sb = new StringBuilder();
+ // inserisco i segnali
+ sb.Append("SIGN_[");
+ foreach (var item in DictSign)
+ {
+ sb.Append($"{item.Key}:{item.Value}|");
+ }
+ // inserisco parametri
+ sb.Append("]_PAR_[");
+ foreach (var item in DictParam)
+ {
+ sb.Append($"{item.Key}:{item.Value}|");
+ }
+ // inserisco le variabili
+ sb.Append("]_VAR_[");
+ foreach (var item in outVal)
+ {
+ sb.Append($"{item.Value},");
+ }
+ sb.Append("]");
+ outVal.Add("DYNDATA", sb.ToString());
}
return outVal;
}
@@ -687,26 +712,7 @@ namespace IOB_WIN_NEXT.Iob
}
currDispData.semIn = Semaforo.SV;
- // in primis: leggo i valor in sequenza e salvo in dizionario...
- object pvRead = "bbb";
- // sezione segnali: cablata 53...
- int sec = 53;
- // Start da Y60 (Hex) --> 10000+96
- for (int i = SignStart; i < SignStart + SignSize; i++)
- {
- oEZNcAutCom.Generic_ReadData(0, sec, i, ref pvRead);
- UpsertSign(i, $"{pvRead}");
- if (verboseLog)
- {
- lgTrace($"Sign | {i} : {pvRead}");
- }
- }
- // recording tempi
- if (utils.CRB("recTime"))
- {
- TimingData.addResult(cIobConf.codIOB, $"Sign{SignSize}-R", stopwatch.ElapsedTicks);
- }
- stopwatch.Stop();
+ ReadMitsubGenData();
// salvo il solo BYTE dell'input decifrando il semaforo...
decodeToBitmap();
reportRawInput(ref currDispData);
@@ -843,41 +849,6 @@ namespace IOB_WIN_NEXT.Iob
return answ;
}
- ///
- /// Override salvataggio valori in memoria...
- ///
- /// tipo di DUMP
- public override void saveMemDump(dumpType tipo)
- {
-#if false
- // se l'area ha una size > 0...
- if (areaD.arraySize > 0)
- {
- dump_MemArea(tipo, MITSUBISHI.MemType.D, areaD.startIdx, areaD.arraySize);
- }
- // se l'area ha una size > 0...
- if (areaR.arraySize > 0)
- {
- dump_MemArea(tipo, MITSUBISHI.MemType.R, areaR.startIdx, areaR.arraySize);
- }
- // se l'area ha una size > 0...
- if (areaX.arraySize > 0)
- {
- dump_MemArea(tipo, MITSUBISHI.MemType.X, areaX.startIdx, areaX.arraySize);
- }
- // se l'area ha una size > 0...
- if (areaY.arraySize > 0)
- {
- dump_MemArea(tipo, MITSUBISHI.MemType.Y, areaY.startIdx, areaY.arraySize);
- }
- // se l'area ha una size > 0...
- if (areaPAR.arraySize > 0)
- {
- dump_ParArea(tipo, areaPAR.startIdx, areaPAR.arraySize);
- }
-#endif
- }
-
///
/// Effettua impostazione del valore numerico ARTICOLO (specifico MITSUBISHI)
///
@@ -1163,6 +1134,7 @@ namespace IOB_WIN_NEXT.Iob
// Open communication
int iRet = 0;
+ oEZNcAutCom = new EZNCAUTLib.DispEZNcCommunication();
iRet = oEZNcAutCom.SetTCPIPProtocol(ipAddr, ezPort);
iRet = oEZNcAutCom.Open3((int)sysType, 1, 10, hostName);
parentForm.commPlcActive = false;
@@ -1244,53 +1216,8 @@ namespace IOB_WIN_NEXT.Iob
#endregion Public Methods
- #region Internal Fields
-
- ///
- /// LookUpTable di decodifica da CNC a segnali tipo bitmap MAPO
- ///
- internal Dictionary signLUT = new Dictionary();
-
- #endregion Internal Fields
-
#region Internal Enums
- internal enum MemType
- {
- ///
- /// Valori generico (es Y60 )x60, hex) --> 10'000 + 96 = 10'096
- ///
- GenData,
-
- ///
- /// Parametri #
- ///
- Param,
-
- ///
- /// Var100
- ///
- Var100,
-
- ///
- /// Var500
- ///
- Var500
- }
-
- internal enum PROGRAMTYPE
- {
- ///
- /// Main Program メインプログラム
- ///
- EZNC_MAINPRG = 0,
-
- ///
- /// Sub Program サブプログラム
- ///
- EZNC_SUBPRG = 1,
- }
-
///
/// Controllo specifico da gestire
///
@@ -1381,7 +1308,9 @@ namespace IOB_WIN_NEXT.Iob
#region Private Fields
private DateTime lastParRefr = DateTime.Now;
+
private DateTime lastSigRefr = DateTime.Now;
+
private DateTime lastVarRefr = DateTime.Now;
///
@@ -1409,6 +1338,11 @@ namespace IOB_WIN_NEXT.Iob
///
private int ParamStart = 8000;
+ ///
+ /// LookUpTable di decodifica da CNC a segnali tipo bitmap MAPO
+ ///
+ private Dictionary signLUT = new Dictionary();
+
///
/// Num celle Signal da leggere
///
@@ -1426,6 +1360,26 @@ namespace IOB_WIN_NEXT.Iob
#endregion Private Fields
+ #region Private Enums
+
+ ///
+ /// Tipo program
+ ///
+ private enum PROGRAMTYPE
+ {
+ ///
+ /// Main Program メインプログラム
+ ///
+ EZNC_MAINPRG = 0,
+
+ ///
+ /// Sub Program サブプログラム
+ ///
+ EZNC_SUBPRG = 1,
+ }
+
+ #endregion Private Enums
+
#region Private Properties
///
@@ -1441,7 +1395,7 @@ namespace IOB_WIN_NEXT.Iob
///
/// Dictionary contenuto memorie Var
///
- private Dictionary DictVar { get; set; } = new Dictionary();
+ private Dictionary DictVar { get; set; } = new Dictionary();
private string memAddrArt
{
@@ -2022,6 +1976,45 @@ namespace IOB_WIN_NEXT.Iob
return answ;
}
+ ///
+ /// Lettura dati generici (es var Y)
+ ///
+ private void ReadMitsubGenData()
+ {
+ DateTime adesso = DateTime.Now;
+ int parSPeriod = samplePeriod;
+ // controllo se sia passato il samplePeriod minimo...
+ if (adesso.Subtract(lastSigRefr.AddMilliseconds(parSPeriod)).TotalSeconds > 0)
+ {
+ lastSigRefr = adesso;
+ stopwatch.Restart();
+ // in primis: leggo i valor in sequenza e salvo in dizionario...
+ object pvRead = "bbb";
+ // sezione segnali: cablata 53...
+ int sec = 53;
+ // Start da Y60 (Hex) --> 10000+96
+ for (int i = SignStart; i < SignStart + SignSize; i++)
+ {
+ oEZNcAutCom.Generic_ReadData(0, sec, i, ref pvRead);
+ UpsertSign(i, $"{pvRead}");
+ if (verboseLog)
+ {
+ lgTrace($"Sign | {i} : {pvRead}");
+ }
+ }
+ // recording tempi
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, $"Sign{SignSize}-R", stopwatch.ElapsedTicks);
+ }
+ stopwatch.Stop();
+ }
+ else
+ {
+ lgTrace($"Saltata ReadMitsubGenData x periodo minimo {parSPeriod} ms");
+ }
+ }
+
///
/// Lettura area parametri mitsubishi come configurato
///
@@ -2056,6 +2049,41 @@ namespace IOB_WIN_NEXT.Iob
}
}
+ ///
+ /// Lettura area Var100/Var500 mitsubishi come configurato
+ ///
+ private void ReadMitsubVars()
+ {
+ DateTime adesso = DateTime.Now;
+ int parSPeriod = samplePeriod * 5;
+ // controllo se sia passato il samplePeriod minimo...
+ if (adesso.Subtract(lastVarRefr.AddMilliseconds(parSPeriod)).TotalSeconds > 0)
+ {
+ lastVarRefr = adesso;
+ // per prima cosa processo la lettura Variabili e li salvo in DICT
+ double pData = 0;
+ int pType = 0;
+ stopwatch.Restart();
+ for (int i = MemVarStart; i < MemVarStart + MemVarSize; i++)
+ {
+ oEZNcAutCom.CommonVariable_Read2(i, out pData, out pType);
+ UpsertVar(i, pData);
+ if (verboseLog)
+ {
+ lgTrace($"Var | {i} : {pData}");
+ }
+ }
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, $"R{MemVarSize}-VAR", stopwatch.ElapsedTicks);
+ }
+ }
+ else
+ {
+ lgTrace($"Saltata ReadMitsubVars x periodo minimo {parSPeriod} ms");
+ }
+ }
+
///
/// Upsert info in DICT dei Params (es 8001..8003 contatori pezzi)
///
@@ -2090,6 +2118,23 @@ namespace IOB_WIN_NEXT.Iob
}
}
+ ///
+ /// Upsert info in DICT dei VAR (es Var100, Var500)
+ ///
+ ///
+ ///
+ private void UpsertVar(int key, double value)
+ {
+ if (DictVar.ContainsKey(key))
+ {
+ DictVar[key] = value;
+ }
+ else
+ {
+ DictVar.Add(key, value);
+ }
+ }
+
#endregion Private Methods
}
}
\ No newline at end of file
diff --git a/TestPrelimCli/Mitsubishi/Program.cs b/TestPrelimCli/Mitsubishi/Program.cs
index e449eae5..f3d1bcf6 100644
--- a/TestPrelimCli/Mitsubishi/Program.cs
+++ b/TestPrelimCli/Mitsubishi/Program.cs
@@ -146,9 +146,9 @@ namespace Mitsubishi
oEZNcAutCom.CommonVariable_SetName(502, "NumPz");
oEZNcAutCom.CommonVariable_SetName(503, "");
- oEZNcAutCom.CommonVariable_Write2(500, 104, 1);
- oEZNcAutCom.CommonVariable_Write2(501, 204, 1);
- oEZNcAutCom.CommonVariable_Write2(502, 304, 1);
+ oEZNcAutCom.CommonVariable_Write2(500, 105, 1);
+ oEZNcAutCom.CommonVariable_Write2(501, 205, 1);
+ oEZNcAutCom.CommonVariable_Write2(502, 305, 1);
oEZNcAutCom.CommonVariable_Write2(503, 0, 1);
DoLog("CommonVariable 500..503 Write Done!");
DoLog(sep);