diff --git a/AgentBin/simulator/CMS_DEMO.xml b/AgentBin/simulator/CMS_DEMO.xml index cbfeb13..a41695c 100644 --- a/AgentBin/simulator/CMS_DEMO.xml +++ b/AgentBin/simulator/CMS_DEMO.xml @@ -15,6 +15,7 @@ + diff --git a/AgentBin/simulator/SCM_DEMO.xml b/AgentBin/simulator/SCM_DEMO.xml index 1f5b44d..1d5d586 100644 --- a/AgentBin/simulator/SCM_DEMO.xml +++ b/AgentBin/simulator/SCM_DEMO.xml @@ -15,6 +15,7 @@ + diff --git a/MTC_Sim/MTC_Sim/AdapterFanuc.cs b/MTC_Sim/MTC_Sim/AdapterFanuc.cs index 9af2d2a..ad5270c 100644 --- a/MTC_Sim/MTC_Sim/AdapterFanuc.cs +++ b/MTC_Sim/MTC_Sim/AdapterFanuc.cs @@ -14,8 +14,14 @@ namespace MTC_Adapter { // vettore valori in file interscambio public Dictionary generalStatus; - + /// + /// Contenuto valori maintenance data da PLC + /// public otherData[] maintData; + /// + /// Contenuto valori status data da PLC + /// + public otherData[] statusData; /// /// Oggetto MAIN x connessione FANUC @@ -894,6 +900,83 @@ namespace MTC_Adapter } + /// + /// Gestione lettura dati status da PLC + /// + private void getStatusDataFromPlc() + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 14512; + int bitNum = 0; + int byteNum = 0; + byte byteVal; + int numByte = 1 + (statusData.Length / 8); + byte[] tabDatiStatus = new byte[numByte]; + inizio = DateTime.Now; + FANUC_ref.F_RW_Byte(R, FANUC.MemType.R, memIndex, ref tabDatiStatus); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks); + // uno ad uno vado a inserirli nella mappa dei dati dell'adapter... + int numero = 0; + string status = ""; + for (int i = 0; i < statusData.Length; i++) + { + numero = 0; + status = ""; + + // calcolo quale byte e quale bit devo leggere.. + byteNum = i / 8; + bitNum = i - (8 * byteNum) ; // indice zero dei bit nel byte ( da cui -1 ) + // faccio vera lettura + byteVal = tabDatiStatus[byteNum]; + // leggo bit come ON/OFF + if (((StFlag8)byteVal).HasFlag((StFlag8)Math.Pow(2, bitNum))) + { + status = "ON"; + } + else + { + status = "OFF"; + } + + if (statusData[i].varName == "PROTECTION_STATUS") + { + mProtectionStatus.Value = status; + } + else if (statusData[i].varName.StartsWith("VacPump_")) + { + if (statusData[i].varName.EndsWith("_Status")) + { + try + { + numero = Convert.ToInt32(statusData[i].varName.Replace("VacPump_", "").Replace("_Status", "")); + } + catch + { + } + if (numero > 0) + { + vettVacPump[numero - 1].mVacPumpStatus.Value = status; + } + } + } + else if (statusData[i].varName.StartsWith("Cooler_")) + { + if (statusData[i].varName.EndsWith("_Status")) + { + try + { + numero = Convert.ToInt32(statusData[i].varName.Replace("Cooler_", "").Replace("_Status", "")); + } + catch + { } + if (numero > 0) + { + vettCooler[numero - 1].mCoolStatus.Value = status; + } + } + } + } + } /// /// Leggo dati globali comuni (x path, assi...) /// @@ -945,8 +1028,11 @@ namespace MTC_Adapter parentForm.dataMonitor = sb.ToString(); - // gestisco lettura dati manutenzione... + // gestisco lettura dati manutenzione da PLC... getMtzDataFromPlc(); + + // gestisco lettura dati status da PLC... + getStatusDataFromPlc(); } /// /// Carico file conf dati CMS @@ -954,7 +1040,14 @@ namespace MTC_Adapter protected override void loadOtherFile() { base.loadOtherFile(); - + loadMaintData(); + loadStatusData(); + } + /// + /// Lettura file gestione dati manutenzione da PLC + /// + private void loadMaintData() + { // carico dati x Maintenance if (utils.CRB("verbose")) lg.Info("Inizio caricamento vettore variabili manutenzione gestite"); int totRighe = 0; @@ -966,23 +1059,57 @@ namespace MTC_Adapter // carica da file... System.IO.StreamReader file = new System.IO.StreamReader(fileName); // leggo 1 linea alla volta... - int rumRiga = 0; + int numRiga = 0; while ((linea = file.ReadLine()) != null) { // SE non è un commento... if (linea.Substring(0, 1) != "#") { //elencoAllarmi[rumRiga] = decodeAlarmLine(linea, ':'); - maintData[rumRiga] = decodeOtherData(linea, utils.CRC("testCharSep"), "R", 14000, 4); - rumRiga++; + maintData[numRiga] = decodeOtherData(linea, utils.CRC("testCharSep"), "R", 14000, 4); + numRiga++; } } // chiudo file file.Close(); - // ora trimmo vettore al solo numero VERO degli allarmi caricati... - Array.Resize(ref maintData, rumRiga); + // ora trimmo vettore al solo numero VERO dei valori caricati... + Array.Resize(ref maintData, numRiga); - if (utils.CRB("verbose")) lg.Info("Fine caricamento vettore variabili manutenzione gestite"); + if (utils.CRB("verbose")) lg.Info(string.Format("Fine caricamento vettore di {0} variabili manutenzione gestite", numRiga)); + } + /// + /// Lettura file gestione dati status da PLC + /// + private void loadStatusData() + { + // carico dati x Maintenance + if (utils.CRB("verbose")) lg.Info("Inizio caricamento vettore variabili status gestite"); + int totRighe = 0; + string fileName = string.Format(@"{0}\{1}", Application.StartupPath, utils.CRS("CmsStatusDataConfFilePath")); + string linea; + totRighe = File.ReadLines(fileName).Count(); + // creo un vettore della dimensione corretta... conta anche commenti tanto poi riduco... + statusData = new otherData[File.ReadLines(fileName).Count()]; + // carica da file... + System.IO.StreamReader file = new System.IO.StreamReader(fileName); + // leggo 1 linea alla volta... + int numRiga = 0; + while ((linea = file.ReadLine()) != null) + { + // SE non è un commento... + if (linea.Substring(0, 1) != "#") + { + //elencoAllarmi[rumRiga] = decodeAlarmLine(linea, ':'); + statusData[numRiga] = decodeBitData(linea, utils.CRC("testCharSep"), "R", 14512, 1, numRiga); + numRiga++; + } + } + // chiudo file + file.Close(); + // ora trimmo vettore al solo numero VERO dei valori caricati... + Array.Resize(ref statusData, numRiga); + + if (utils.CRB("verbose")) lg.Info(string.Format("Fine caricamento vettore di {0} variabili status gestite", numRiga)); } public override void processAlarm() diff --git a/MTC_Sim/MTC_Sim/AdapterGeneric.cs b/MTC_Sim/MTC_Sim/AdapterGeneric.cs index f969fc7..9d91863 100644 --- a/MTC_Sim/MTC_Sim/AdapterGeneric.cs +++ b/MTC_Sim/MTC_Sim/AdapterGeneric.cs @@ -873,6 +873,10 @@ namespace MTC_Adapter /// public Event mTestingData = new Event("TESTING_DATA"); /// + /// Stato protezioni (0/1, off/on) + /// + public Event mProtectionStatus = new Event("PROTECTION_STATUS"); + /// /// Strobe rilevati ma non qualificati /// public Event mUnkStrobe = new Event("UNK_STROBE"); @@ -958,6 +962,9 @@ namespace MTC_Adapter // testing e autodiagnostica mAdapter.AddDataItem(mTestingData); + // stato protezioni + mAdapter.AddDataItem(mProtectionStatus); + // strobe/status non riconosciuti mAdapter.AddDataItem(mUnkStatus); mAdapter.AddDataItem(mUnkStrobe); @@ -1221,7 +1228,31 @@ namespace MTC_Adapter string memAddr = string.Format("{0}{1}", memPre, baseAddr + shift * memSize); return new otherData(valori[0], memAddr, valori[1].Trim(), valori[2].Trim()); } - + /// + /// Decodifica file allarme + /// + /// + /// + /// tipo memoria (R/D/...) + /// indirizzo di partenza memoria + /// dimensione singolo slot in byte + /// numero riga x calcolo indice bit + /// + protected otherData decodeBitData(string linea, char separator, string memPre, int baseAddr, int memSize, int numRiga) + { + string[] valori = linea.Split(separator); + int shift = 0; + try + { + shift = Convert.ToInt32(valori[0]) - 1; + } + catch + { } + int resto = 0; + Math.DivRem(numRiga, 8, out resto); + string memAddr = string.Format("{0}{1}.{2}", memPre, baseAddr + shift * memSize, resto); + return new otherData(valori[0], memAddr, valori[1].Trim(), valori[2].Trim()); + } #region metodi adapter @@ -2134,8 +2165,6 @@ namespace MTC_Adapter } // ...aggiorno valore riferimento... contOreMaccOn = istOreMaccOn; - //// passo valore in ORE (float) all'adapter - //mAccTime.Value = currAdpConf.ContOreMaccOn.ToString("0.000", CultureInfo.InvariantCulture); return needSave; } /// @@ -2145,21 +2174,21 @@ namespace MTC_Adapter /// public bool procOreMaccLav(bool needSave) { + double delta = 0; // controllo valore riferimento... if (istOreMaccLav > contOreMaccLav) { - double delta = istOreMaccLav - contOreMaccLav; - double contatore = updateValDoubleByIncr(0, delta, "ACC_TIME_WORK"); - currAdpConf.ContOreMaccLav += delta; - // salvo valore su persistent layer - mAccTimeWork.Value = contatore.ToString("0.000", CultureInfo.InvariantCulture); + delta = istOreMaccLav - contOreMaccLav; // segnalo necessità salvataggio! needSave = true; } + double contatore = updateValDoubleByIncr(0, delta, "ACC_TIME_WORK"); + currAdpConf.ContOreMaccLav += delta; + // salvo valore su persistent layer + mAccTimeWork.Value = contatore.ToString("0.000", CultureInfo.InvariantCulture); + // ...aggiorno valore riferimento... contOreMaccLav = istOreMaccLav; - //// passo valore in ORE (float) all'adapter - //mAccTimeWork.Value = currAdpConf.ContOreMaccLav.ToString("0.000", CultureInfo.InvariantCulture); return needSave; } /// diff --git a/MTC_Sim/MTC_Sim/App.config b/MTC_Sim/MTC_Sim/App.config index 24bd477..6925548 100644 --- a/MTC_Sim/MTC_Sim/App.config +++ b/MTC_Sim/MTC_Sim/App.config @@ -54,6 +54,7 @@ + diff --git a/MTC_Sim/MTC_Sim/CmsStatusDataConf.txt b/MTC_Sim/MTC_Sim/CmsStatusDataConf.txt new file mode 100644 index 0000000..d6fc35e --- /dev/null +++ b/MTC_Sim/MTC_Sim/CmsStatusDataConf.txt @@ -0,0 +1,6 @@ +# Commenti con cancelletto, struttura un variabile per riga, tipo chiave|valore (occhio che il separatore è configurato da .cofig come "testCharSep"); spazi e tabulazioni dovrei trimmarli in acquisizione (qui inseriti per comodità di lettura) +001|PROTECTION_STATUS |BIT +002|VacPump_01_Status |BIT +003|VacPump_02_Status |BIT +004|Cooler_01_Status |BIT +005|Cooler_02_Status |BIT \ No newline at end of file diff --git a/MTC_Sim/MTC_Sim/MTC-Adapter.csproj b/MTC_Sim/MTC_Sim/MTC-Adapter.csproj index ce2827d..99e21c5 100644 --- a/MTC_Sim/MTC_Sim/MTC-Adapter.csproj +++ b/MTC_Sim/MTC_Sim/MTC-Adapter.csproj @@ -130,6 +130,9 @@ Always + + Always + Designer diff --git a/MTC_Sim/VersGen/AdapterVers.cs b/MTC_Sim/VersGen/AdapterVers.cs index de068ec..7959f28 100644 --- a/MTC_Sim/VersGen/AdapterVers.cs +++ b/MTC_Sim/VersGen/AdapterVers.cs @@ -5,7 +5,7 @@ using System.Reflection; -[assembly: AssemblyVersion("1.1.26.99")] -[assembly: AssemblyFileVersion("1.1.26.99")] +[assembly: AssemblyVersion("1.1.27.99")] +[assembly: AssemblyFileVersion("1.1.27.99")] [assembly: AssemblyCopyright("Steamware-SCM-CMS © 2015-2016")] [assembly: AssemblyCompany("Steamware-SCM-CMS")] diff --git a/MTC_Sim/VersGen/AdapterVers.tt b/MTC_Sim/VersGen/AdapterVers.tt index 9f9bf94..dc3089d 100644 --- a/MTC_Sim/VersGen/AdapterVers.tt +++ b/MTC_Sim/VersGen/AdapterVers.tt @@ -6,8 +6,8 @@ using System.Reflection; -[assembly: AssemblyVersion("1.1.26.<#= this.RevisionNumber #>")] -[assembly: AssemblyFileVersion("1.1.26.<#= this.RevisionNumber #>")] +[assembly: AssemblyVersion("1.1.27.<#= this.RevisionNumber #>")] +[assembly: AssemblyFileVersion("1.1.27.<#= this.RevisionNumber #>")] [assembly: AssemblyCopyright("Steamware-SCM-CMS © 2015-<#= DateTime.Now.Year #>")] [assembly: AssemblyCompany("Steamware-SCM-CMS")] <#+