From 0f84f44b58b38b650bee4235c0ceb9eaa04413a5 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 22 May 2017 15:20:49 +0200 Subject: [PATCH] portato in AdapterGeneric metodi x gestione globalData (e implementato in OSAI/SIEMENS --- MTC_Adapter/MTC_Adapter/AdapterGeneric.cs | 114 +++++++++ MTC_Adapter/MTC_Adapter/AdapterOsai.cs | 288 +++++++++++---------- MTC_Adapter/MTC_Adapter/AdapterSiemens.cs | 298 +++++++++++++--------- 3 files changed, 447 insertions(+), 253 deletions(-) diff --git a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs index 4063a6a..38526c8 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs @@ -2021,6 +2021,120 @@ namespace MTC_Adapter /// public virtual void getGlobalData() { + // svuoto... + parentForm.dataMonitor_1 = ""; + parentForm.dataMonitor_2 = ""; + parentForm.dataMonitor_3 = ""; + + // accodo dati path in DataMonitor...... + StringBuilder sb1 = new StringBuilder(); + StringBuilder sb2 = new StringBuilder(); + + // dati base... + sb1.AppendLine(string.Format("POWER {0}: | EmStop:{1:N3} | ProcSel: {2}", mPower.Value, mEStop.Value, mProcSel.Value)); + + // leggo dati globali... + readGlobalData(); + + // legge overrides... + readOverrides(ref sb1); + procCncAlarm(); + + // accodo dati base! + parentForm.dataMonitor_1 += sb1.ToString(); + // accodo dati UT... + for (int i = 0; i < currAdpConf.nUnOp; i++) + { + sb2.AppendLine(string.Format("UT: ToolId {0} | VitaRes {1} | TipoVita {2} ", vettUnOp[i].mUnOpToolId.Value, vettUnOp[i].mUnOpVitaRes.Value, vettUnOp[i].mUnOpVitaResType.Value)); + } + parentForm.dataMonitor_2 = sb2.ToString(); + + // gestisco lettura dati manutenzione da PLC... + getMtzDataFromPlc(); + // gestisco lettura dati analogici da PLC... + getAnalogDataFromPlc(); + // gestisco lettura dati status da PLC... + getStatusDataFromPlc(); + } + /// + /// Legge dati globali... + /// + public virtual void readGlobalData() + { + } + /// + /// legge dati override... + /// + /// + /// + public virtual bool readOverrides(ref StringBuilder sb1) + { + bool fatto = false; + return fatto; + } + /// + /// processa allarmi CNC... + /// + public virtual bool procCncAlarm() + { + bool fatto = false; + return fatto; + } + /// + /// Gestione lettura dati manutenzione + /// + public virtual bool getMtzDataFromPlc() + { + bool fatto = false; + return fatto; + } + /// + /// Gestione lettura dati analogici + /// + public virtual bool getAnalogDataFromPlc() + { + bool fatto = false; + return fatto; + } + /// + /// Gestione lettura dati status da PLC + /// + public virtual bool getStatusDataFromPlc() + { + bool fatto = false; + return fatto; + } + + /// + /// Processa i dati di override di un path + /// + /// idx path (zero based) + /// vettore 7 valori dei dati (valori int16 jog/feed/rapid/spindle[1..4]) + /// StringBuilder da aggiornare + public bool procPathOverride(int currIdx, ushort[] dataVector, ref StringBuilder sb) + { + bool fatto = false; + try + { + // prendo quella GLOBALE... + vettPath[currIdx].mPathFeed.Value = FeedRate; + // leggo da vettore... CABLATO DIVISO PER 100!!! + vettPath[currIdx].mPathJogOver.Value = dataVector[0] / 100; + vettPath[currIdx].mPathFeedOver.Value = dataVector[1] / 100; + vettPath[currIdx].mPathRapidOver.Value = dataVector[2] / 100; + vettPath[currIdx].mPathSpindleOver_01.Value = dataVector[3] / 100; + vettPath[currIdx].mPathSpindleOver_02.Value = dataVector[4] / 100; + vettPath[currIdx].mPathSpindleOver_03.Value = dataVector[5] / 100; + vettPath[currIdx].mPathSpindleOver_04.Value = dataVector[6] / 100; + + // salvo stringa! + sb.AppendLine(string.Format("P{0} - Override % Jog | Feed | Rapid: {1} | {2} | {3}", currIdx + 1, dataVector[0] / 100, dataVector[1] / 100, dataVector[2] / 100)); + sb.AppendLine(string.Format("P{0} - Override % Spindle 1 | 2 | 3 | 4: {1} | {2} | {3} | {4}", currIdx + 1, dataVector[3] / 100, dataVector[4] / 100, dataVector[5] / 100, dataVector[6] / 100)); + fatto = true; + } + catch + { } + return fatto; } /// diff --git a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs index c366e8b..6c78309 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs @@ -466,70 +466,14 @@ namespace MTC_Adapter int memIndex = 19036; return OsaiMemRW_DWord(R, OSAI.MemTypeWord.MW_CODE, memIndex + blockIndex * 2, ref MemBlock); } - /// - /// Gestione lettura dati manutenzione - /// - private void getMtzDataFromPlc() - { - // recupero i dati di manutenzione dall'area di memoria IN BLOCCO - int memIndex = 1000; - uint[] tabDatiMtz = new uint[maintData.Length]; - inizio = DateTime.Now; - OsaiMemRW_DWord(R, OSAI.MemTypeWord.GW_CODE, memIndex, ref tabDatiMtz); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks); - // decodifico aree memoria secondo tab configurazione - processMaintData(tabDatiMtz, maintData); - // verifica se debba salvare e mostrare dati - checkSavePersDataLayer(); - } - /// - /// Gestione lettura dati analogici - /// - private void getAnalogDataFromPlc() - { - // recupero i dati di manutenzione dall'area di memoria IN BLOCCO - int memIndex = 19434; - uint[] tabDatiAnalog = new uint[analogData.Length]; - inizio = DateTime.Now; - OsaiMemRW_DWord(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref tabDatiAnalog); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks); - // decodifico aree memoria secondo tab configurazione - processAnalogData(tabDatiAnalog, analogData); - } + + #region implementazione processing GlobalData /// - /// Gestione lettura dati status da PLC + /// Legge dati globali... /// - private void getStatusDataFromPlc() + public override void readGlobalData() { - // recupero i dati di manutenzione dall'area di memoria IN BLOCCO - int memIndex = 19426; - int numByte = 1 + (statusData.Length / 8); - byte[] tabDatiStatus = new byte[numByte]; - inizio = DateTime.Now; - OsaiMemRW_Byte(R, OSAI.MemTypeWord.MW_CODE, memIndex, 0, ref tabDatiStatus); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks); - // decodifico aree memoria secondo tab configurazione - processStatusData(tabDatiStatus, statusData); - } - /// - /// Leggo dati globali comuni (x path, assi...) - /// - public override void getGlobalData() - { - base.getGlobalData(); - // svuoto... - parentForm.dataMonitor_1 = ""; - parentForm.dataMonitor_2 = ""; - parentForm.dataMonitor_3 = ""; - - // accodo dati path in DataMonitor...... - StringBuilder sb1 = new StringBuilder(); - StringBuilder sb2 = new StringBuilder(); - - // dati base... - sb1.AppendLine(string.Format("POWER {0}: | EmStop:{1:N3} | ProcSel: {2}", mPower.Value, mEStop.Value, mProcSel.Value)); - // leggo dati globali... parentForm.commPlcActive = true; inizio = DateTime.Now; @@ -540,45 +484,69 @@ namespace MTC_Adapter // recupero speed e feed... FeedRate = Convert.ToInt32(allNcData.realfeed); SpeedRate = Convert.ToInt32(allNcData.realspeed); - - // area path1/2: 7 WORD x ogni path... - int memIndex = 19151; - ushort[] PathData_mem = new ushort[14]; - inizio = DateTime.Now; - OsaiMemRW_Word(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref PathData_mem); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length * 2), DateTime.Now.Subtract(inizio).Ticks); - - // inizio indicando feed... - sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate)); - sb1.AppendLine(string.Format("SpeedRate: {0} mm/min", SpeedRate)); - - // 2017.04.20: recupero OVER per Jog/Feed/Rapid/Spindle x i path multipli (qui cablati 1-2) - ushort[] currPathData = new ushort[7]; - // processo ora i dai dei path... di sicuro il primo - Array.Copy(PathData_mem, 0, currPathData, 0, 7); - procPathOverride(0, currPathData, ref sb1); - //...e se c'è pure il secondo... - if (currAdpConf.nPath > 1) - { - Array.Copy(PathData_mem, 7, currPathData, 0, 7); - // anche il secondo! - procPathOverride(1, currPathData, ref sb1); - } - - // se ho allarmi li accodo... - if (allNcData.lastncerror != 0) + } + /// + /// legge dati override... + /// + /// + /// + public override bool readOverrides(ref StringBuilder sb1) + { + bool fatto = false; + try { - if (utils.CRI("loglevel") > 5) + // area path1/2: 7 WORD x ogni path... + int memIndex = 19151; + ushort[] PathData_mem = new ushort[14]; + inizio = DateTime.Now; + OsaiMemRW_Word(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref PathData_mem); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length * 2), DateTime.Now.Subtract(inizio).Ticks); + + // inizio indicando feed... + sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate)); + sb1.AppendLine(string.Format("SpeedRate: {0} mm/min", SpeedRate)); + + // 2017.04.20: recupero OVER per Jog/Feed/Rapid/Spindle x i path multipli (qui cablati 1-2) + ushort[] currPathData = new ushort[7]; + // processo ora i dai dei path... di sicuro il primo + Array.Copy(PathData_mem, 0, currPathData, 0, 7); + procPathOverride(0, currPathData, ref sb1); + //...e se c'è pure il secondo... + if (currAdpConf.nPath > 1) { - lg.Info(string.Format("Allarmi CNC: {0} ", allNcData.lastncerror)); + Array.Copy(PathData_mem, 7, currPathData, 0, 7); + // anche il secondo! + procPathOverride(1, currPathData, ref sb1); } - string alarmText = string.Format("CNC Alarm - Cod: {0}", allNcData.lastncerror); + fatto = true; + } + catch + { } + return fatto; + } + /// + /// processa allarmi CNC... + /// + public override bool procCncAlarm() + { + bool fatto = false; + try + { + // se ho allarmi li accodo... + if (allNcData.lastncerror != 0) + { - // tolgo eventuali allarmi CNC... - allarmiCNC.Clear(); - allarmiCNC.Add(allNcData.lastncerror.ToString(), alarmText); - // 2017.05.09 gestione allarmi commentata + if (utils.CRI("loglevel") > 5) + { + lg.Info(string.Format("Allarmi CNC: {0} ", allNcData.lastncerror)); + } + string alarmText = string.Format("CNC Alarm - Cod: {0}", allNcData.lastncerror); + + // tolgo eventuali allarmi CNC... + allarmiCNC.Clear(); + allarmiCNC.Add(allNcData.lastncerror.ToString(), alarmText); + // 2017.05.09 gestione allarmi commentata #if false mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, alarmText, allNcData.lastncerror.ToString(), "", ""); // mostro in form! @@ -586,7 +554,7 @@ namespace MTC_Adapter parentForm.dataMonitor_1 += sb1.ToString(); #endif - // 2017.05.09 gestione allarmi commentata + // 2017.05.09 gestione allarmi commentata #if false // il codice è corretto (manca prima aprte codice + traduzione), se cerco di trovare oggett completo NON c'è, verificare con Andrea... sb1.AppendLine(string.Format("Allarmi CNC: {0}", allNcData.lastncerror)); @@ -603,54 +571,100 @@ namespace MTC_Adapter CMSCncLib.OPENcontrol.MSGANOMALY anomCNC = new CMSCncLib.OPENcontrol.MSGANOMALY(); OSAI_ref.O_ReadCurrentAnomalyMsg(ref anomCNC); #endif + } + else + { + allarmiCNC.Clear(); + allarmiCNC = new Dictionary(); + // 2017.05.09 gestione allarmi commentata + //allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR(); + } + fatto = true; } - else - { - allarmiCNC.Clear(); - allarmiCNC = new Dictionary(); - // 2017.05.09 gestione allarmi commentata - //allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR(); - } - - // accodo dati base! - parentForm.dataMonitor_1 += sb1.ToString(); - // accodo dati UT... - for (int i = 0; i < currAdpConf.nUnOp; i++) - { - sb2.AppendLine(string.Format("UT: ToolId {0} | VitaRes {1} | TipoVita {2} ", vettUnOp[i].mUnOpToolId.Value, vettUnOp[i].mUnOpVitaRes.Value, vettUnOp[i].mUnOpVitaResType.Value)); - } - parentForm.dataMonitor_2 = sb2.ToString(); - - // gestisco lettura dati manutenzione da PLC... - getMtzDataFromPlc(); - // gestisco lettura dati analogici da PLC... - getAnalogDataFromPlc(); - // gestisco lettura dati status da PLC... - getStatusDataFromPlc(); + catch + { } + return fatto; } /// - /// Processa i dati di override di un path + /// Gestione lettura dati manutenzione /// - /// idx path (zero based) - /// vettore 7 valori dei dati (valori int16 jog/feed/rapid/spindle[1..4]) - /// StringBuilder da aggiornare - private void procPathOverride(int currIdx, ushort[] dataVector, ref StringBuilder sb) + public override bool getMtzDataFromPlc() { - // prendo quella GLOBALE... - vettPath[currIdx].mPathFeed.Value = FeedRate; - // leggo da vettore... CABLATO DIVISO PER 100!!! - vettPath[currIdx].mPathJogOver.Value = dataVector[0] / 100; - vettPath[currIdx].mPathFeedOver.Value = dataVector[1] / 100; - vettPath[currIdx].mPathRapidOver.Value = dataVector[2] / 100; - vettPath[currIdx].mPathSpindleOver_01.Value = dataVector[3] / 100; - vettPath[currIdx].mPathSpindleOver_02.Value = dataVector[4] / 100; - vettPath[currIdx].mPathSpindleOver_03.Value = dataVector[5] / 100; - vettPath[currIdx].mPathSpindleOver_04.Value = dataVector[6] / 100; - - // salvo stringa! - sb.AppendLine(string.Format("P{0} - Override % Jog | Feed | Rapid: {1} | {2} | {3}", currIdx + 1, dataVector[0] / 100, dataVector[1] / 100, dataVector[2] / 100)); - sb.AppendLine(string.Format("P{0} - Override % Spindle 1 | 2 | 3 | 4: {1} | {2} | {3} | {4}", currIdx + 1, dataVector[3] / 100, dataVector[4] / 100, dataVector[5] / 100, dataVector[6] / 100)); + bool fatto = false; + try + { + if (maintData.Length > 0) + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 1000; + uint[] tabDatiMtz = new uint[maintData.Length]; + inizio = DateTime.Now; + OsaiMemRW_DWord(R, OSAI.MemTypeWord.GW_CODE, memIndex, ref tabDatiMtz); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks); + // decodifico aree memoria secondo tab configurazione + processMaintData(tabDatiMtz, maintData); + // verifica se debba salvare e mostrare dati + checkSavePersDataLayer(); + } + fatto = true; + } + catch + { } + return fatto; } + /// + /// Gestione lettura dati analogici + /// + public override bool getAnalogDataFromPlc() + { + bool fatto = false; + try + { + if (analogData.Length > 0) + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 19434; + uint[] tabDatiAnalog = new uint[analogData.Length]; + inizio = DateTime.Now; + OsaiMemRW_DWord(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref tabDatiAnalog); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks); + // decodifico aree memoria secondo tab configurazione + processAnalogData(tabDatiAnalog, analogData); + } + fatto = true; + } + catch + { } + return fatto; + } + /// + /// Gestione lettura dati status da PLC + /// + public override bool getStatusDataFromPlc() + { + bool fatto = false; + try + { + if (statusData.Length > 0) + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 19426; + int numByte = 1 + (statusData.Length / 8); + byte[] tabDatiStatus = new byte[numByte]; + inizio = DateTime.Now; + OsaiMemRW_Byte(R, OSAI.MemTypeWord.MW_CODE, memIndex, 0, ref tabDatiStatus); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks); + // decodifico aree memoria secondo tab configurazione + processStatusData(tabDatiStatus, statusData); + } + fatto = true; + } + catch + { } + return fatto; + } + + #endregion /// /// Carico file conf dati CMS diff --git a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs index 3a1c634..b08203d 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs @@ -27,7 +27,7 @@ namespace MTC_Adapter /// Area di memoria base x dati TESTE (DB254) /// protected int baseMemUO = 254; - + /// /// wrapper chiamata lettura/scrittura SINGOLO BYTE... /// @@ -127,7 +127,7 @@ namespace MTC_Adapter parentForm.commPlcActive = true; answ = SIEMENS_ref.S_RW_DWord(bWrite, MemType, memIndex, ref Value); } - catch(Exception exc) + catch (Exception exc) { lg.Error(string.Format("Eccezione in SIEMENSMemRW_DWord: {0}{1}", Environment.NewLine, exc)); } @@ -331,7 +331,7 @@ namespace MTC_Adapter try { inizio = DateTime.Now; - SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref currACK_DW); + SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref currACK_DW); if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-ACK_DW0", currACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks); fatto = true; } @@ -373,7 +373,7 @@ namespace MTC_Adapter public override bool writeWatchDog(ref byte[] retACK_DW) { int memIndex = 8; - return SIEMENSMemRW_Byte(W, baseMemDb, memIndex, ref retACK_DW); + return SIEMENSMemRW_Byte(W, baseMemDb, memIndex, ref retACK_DW); } /// /// Effettua lettura dati TESTING @@ -408,7 +408,7 @@ namespace MTC_Adapter { // DB1499.DBX0.0 int memIndexAck = 0; - return SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref retACK_DW0); + return SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref retACK_DW0); } /// @@ -434,137 +434,203 @@ namespace MTC_Adapter int memIndex = 36; return SIEMENSMemRW_DWord(R, baseMemDb, memIndex + blockIndex * 4, ref MemBlock); } + + #region implementazione processing GlobalData + + /// + /// Legge dati globali... + /// + public override void readGlobalData() + { + // cercare funzione!!! +#if false + // leggo dati globali... + parentForm.commPlcActive = true; + inizio = DateTime.Now; + OSAI_ref.O_GetNcInfo1(ref allNcData); + if (utils.CRB("recTime")) TimingData.addResult("R-NcInfo", DateTime.Now.Subtract(inizio).Ticks); + parentForm.commPlcActive = false; + + // recupero speed e feed... + FeedRate = Convert.ToInt32(allNcData.realfeed); + SpeedRate = Convert.ToInt32(allNcData.realspeed); +#endif + } + /// + /// legge dati override... + /// + /// + /// + public override bool readOverrides(ref StringBuilder sb1) + { + bool fatto = false; + try + { + + // area path1/2: 7 WORD x ogni path... + int memIndex = 508; + ushort[] PathData_mem = new ushort[14]; + parentForm.commPlcActive = true; + inizio = DateTime.Now; + SIEMENSMemRW_Word(R, baseMemDb, memIndex, ref PathData_mem); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length * 2), DateTime.Now.Subtract(inizio).Ticks); + parentForm.commPlcActive = false; + + // inizio indicando feed... + sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate)); + sb1.AppendLine(string.Format("SpeedRate: {0} mm/min", SpeedRate)); + + // 2017.04.20: recupero OVER per Jog/Feed/Rapid/Spindle x i path multipli (qui cablati 1-2) + ushort[] currPathData = new ushort[7]; + // processo ora i dai dei path... di sicuro il primo + Array.Copy(PathData_mem, 0, currPathData, 0, 7); + procPathOverride(0, currPathData, ref sb1); + //...e se c'è pure il secondo... + if (currAdpConf.nPath > 1) + { + Array.Copy(PathData_mem, 7, currPathData, 0, 7); + // anche il secondo! + procPathOverride(1, currPathData, ref sb1); + } + fatto = true; + } + catch + { } + return fatto; + } + /// + /// processa allarmi CNC... + /// + public override bool procCncAlarm() + { + bool fatto = false; + try + { +#if false + // se ho allarmi li accodo... + if (allNcData.lastncerror != 0) + { + + if (utils.CRI("loglevel") > 5) + { + lg.Info(string.Format("Allarmi CNC: {0} ", allNcData.lastncerror)); + } + string alarmText = string.Format("CNC Alarm - Cod: {0}", allNcData.lastncerror); + + // tolgo eventuali allarmi CNC... + allarmiCNC.Clear(); + allarmiCNC.Add(allNcData.lastncerror.ToString(), alarmText); + + //// 2017.05.09 gestione allarmi commentata + //mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, alarmText, allNcData.lastncerror.ToString(), "", ""); + //// mostro in form! + //sb1.AppendLine(alarmText); + //parentForm.dataMonitor_1 += sb1.ToString(); + + //// 2017.05.09 gestione allarmi commentata + //// il codice è corretto (manca prima aprte codice + traduzione), se cerco di trovare oggett completo NON c'è, verificare con Andrea... + //sb1.AppendLine(string.Format("Allarmi CNC: {0}", allNcData.lastncerror)); + + //inizio = DateTime.Now; + //OSAI_ref.O_ReadCurrentErrorMsg(ref allarmiCNC); + //if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ERROR-MSG", DateTime.Now.Subtract(inizio).Ticks); + //checkCNCAlarms(); + } + else + { + allarmiCNC.Clear(); + allarmiCNC = new Dictionary(); + // 2017.05.09 gestione allarmi commentata + //allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR(); + } + fatto = true; +#endif + } + catch + { } + return fatto; + } /// /// Gestione lettura dati manutenzione /// - private void getMtzDataFromPlc() + public override bool getMtzDataFromPlc() { - if (maintData.Length > 0) + bool fatto = false; + try { - // recupero i dati di manutenzione dall'area di memoria IN BLOCCO - int memIndex = 524; - uint[] tabDatiMtz = new uint[maintData.Length]; - inizio = DateTime.Now; - SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiMtz); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks); - // decodifico aree memoria secondo tab configurazione - processMaintData(tabDatiMtz, maintData); - // verifica se debba salvare e mostrare dati - checkSavePersDataLayer(); - } - } - /// - /// Gestione lettura dati status da PLC - /// - private void getStatusDataFromPlc() - { - if (statusData.Length > 0) - { - // recupero i dati di manutenzione dall'area di memoria IN BLOCCO - int memIndex = 1036; - int numByte = 1 + (statusData.Length / 8); - byte[] tabDatiStatus = new byte[numByte]; - inizio = DateTime.Now; - SIEMENSMemRW_Byte(R, baseMemDb, memIndex, ref tabDatiStatus); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks); - // decodifico aree memoria secondo tab configurazione - processStatusData(tabDatiStatus, statusData); + if (maintData.Length > 0) + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 524; + uint[] tabDatiMtz = new uint[maintData.Length]; + inizio = DateTime.Now; + SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiMtz); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks); + // decodifico aree memoria secondo tab configurazione + processMaintData(tabDatiMtz, maintData); + // verifica se debba salvare e mostrare dati + checkSavePersDataLayer(); + } + fatto = true; } + catch + { } + return fatto; } /// /// Gestione lettura dati analogici /// - private void getAnalogDataFromPlc() + public override bool getAnalogDataFromPlc() { - if (analogData.Length > 0) + bool fatto = false; + try { - // recupero i dati di manutenzione dall'area di memoria IN BLOCCO - int memIndex = 1052; - uint[] tabDatiAnalog = new uint[analogData.Length]; - inizio = DateTime.Now; - SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiAnalog); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks); - // decodifico aree memoria secondo tab configurazione - processAnalogData(tabDatiAnalog, analogData); + if (analogData.Length > 0) + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 1052; + uint[] tabDatiAnalog = new uint[analogData.Length]; + inizio = DateTime.Now; + SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiAnalog); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks); + // decodifico aree memoria secondo tab configurazione + processAnalogData(tabDatiAnalog, analogData); + } + fatto = true; } + catch + { } + return fatto; } /// - /// Leggo dati globali comuni (x path, assi...) + /// Gestione lettura dati status da PLC /// - public override void getGlobalData() + public override bool getStatusDataFromPlc() { - base.getGlobalData(); - // svuoto... - parentForm.dataMonitor_1 = ""; - parentForm.dataMonitor_2 = ""; - parentForm.dataMonitor_3 = ""; - - // accodo dati path in DataMonitor...... - StringBuilder sb1 = new StringBuilder(); - StringBuilder sb2 = new StringBuilder(); - - // dati base... - sb1.AppendLine(string.Format("POWER {0}: | EmStop:{1:N3} | ProcSel: {2}", mPower.Value, mEStop.Value, mProcSel.Value)); - -#if false - // leggo dati globali... - inizio = DateTime.Now; - allDynData = SIEMENS_ref.getAllDynData(); - if (utils.CRB("recTime")) TimingData.addResult("R-ALL-DYN-DATA", DateTime.Now.Subtract(inizio).Ticks); - - FeedRate = allDynData.actf; - - int memIndex = 12000; - byte[] PathData_mem = new byte[4]; - inizio = DateTime.Now; - SIEMENSMemRW(R, baseMemDb, memIndex, ref PathData_mem); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length), DateTime.Now.Subtract(inizio).Ticks); - - // 2016.07.19 mod con Fabio - //JogRateOver = PathData_mem[0]; - FeedRateOver = PathData_mem[1]; - RapidOver = PathData_mem[2]; - SpeedRateOver = PathData_mem[3]; -#endif - - sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate)); - sb1.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver)); - sb1.AppendLine(string.Format("RapidOver: {0} %", RapidOver)); - sb1.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver)); - - // se ho allarmi li accodo... - if (allDynData.alarm != 0) + bool fatto = false; + try { - sb1.AppendLine(string.Format("Allarmi CNC: {0}", allDynData.alarm)); - -#if false - inizio = DateTime.Now; - allarmiCNC = SIEMENS_ref.getCncAlarm(); - if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ALARMS", DateTime.Now.Subtract(inizio).Ticks); -#endif - checkCNCAlarms(); + if (statusData.Length > 0) + { + // recupero i dati di manutenzione dall'area di memoria IN BLOCCO + int memIndex = 1036; + int numByte = 1 + (statusData.Length / 8); + byte[] tabDatiStatus = new byte[numByte]; + inizio = DateTime.Now; + SIEMENSMemRW_Byte(R, baseMemDb, memIndex, ref tabDatiStatus); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks); + // decodifico aree memoria secondo tab configurazione + processStatusData(tabDatiStatus, statusData); + } + fatto = true; } - else - { - allarmiCNC = new CMSCncLib.Focas1.ODBALMMSG2(); - } - - // accodo dati base! - parentForm.dataMonitor_1 = sb1.ToString(); - // accodo dati UT... - for (int i = 0; i < currAdpConf.nUnOp; i++) - { - sb2.AppendLine(string.Format("UT: ToolId {0} | VitaRes {1} | TipoVita {2} ", vettUnOp[i].mUnOpToolId.Value, vettUnOp[i].mUnOpVitaRes.Value, vettUnOp[i].mUnOpVitaResType.Value)); - } - parentForm.dataMonitor_2 = sb2.ToString(); - - // gestisco lettura dati manutenzione da PLC... - getMtzDataFromPlc(); - // gestisco lettura dati analogici da PLC... - getAnalogDataFromPlc(); - // gestisco lettura dati status da PLC... - getStatusDataFromPlc(); + catch + { } + return fatto; } + + #endregion + /// /// Carico file conf dati CMS ///