From aebb2a812f97b3f955620afffda83d9ddd4929df Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Wed, 8 Mar 2017 15:59:04 +0100 Subject: [PATCH] ok byte (quasi tutti), NON riporta le WORD... --- MTC_Adapter/MTC_Adapter/AdapterESA.cs | 390 ++++++++++++++++++-------- 1 file changed, 273 insertions(+), 117 deletions(-) diff --git a/MTC_Adapter/MTC_Adapter/AdapterESA.cs b/MTC_Adapter/MTC_Adapter/AdapterESA.cs index 0008e00..33d157a 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterESA.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterESA.cs @@ -132,11 +132,12 @@ namespace MTC_Adapter byteNum = 0; bitNum = 0; } - vettoreConf[numRiga] = decodeBitData(linea, utils.CRC("testCharSep"), "0", byteNum, 1, bitNum); + vettoreConf[numRiga] = decodeBitData(linea, utils.CRC("testCharSep"), "", byteNum, 1, bitNum); } else { - vettoreConf[numRiga] = decodeOtherData(linea, utils.CRC("testCharSep"), "", 0, memSize); + //int.TryParse(linea.Split(utils.CRC("testCharSep"))[0], out byteNum); + vettoreConf[numRiga] = decodeOtherData(linea, utils.CRC("testCharSep"), "", 1, memSize); } numRiga++; } @@ -230,14 +231,6 @@ namespace MTC_Adapter } } - /// - /// Effettuo lettura memorie strobe/status - /// - public override void getStrobeAndAckStatus() - { - base.getStrobeAndAckStatus(); - } - public override void getGlobalData() { base.getGlobalData(); @@ -246,112 +239,276 @@ namespace MTC_Adapter StringBuilder sb = new StringBuilder(); //2017.03.07 RIVEDERE DA QUI x lettura globale - - if (connectionOk) + // 2017.03.07 IN BLOCCO processo TUTTI i valori della memoria WORD/DWORD... + if (useIotMem) { - // leggo TUTTO il blocco di memoria - inizio = DateTime.Now; - ncDevice.ReadBuffer(); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R-PLC_FullMemoryRead", ncDevice.PLC_MemoryRead.Length), DateTime.Now.Subtract(inizio).Ticks); + if (connectionOk) + { + // leggo TUTTO il blocco di memoria + inizio = DateTime.Now; + ncDevice.ReadBufferWord(); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PLC_IOT-Word", ncDevice.PLC_MemoryAreaIOT_Word.Length), DateTime.Now.Subtract(inizio).Ticks); + inizio = DateTime.Now; + ncDevice.ReadBufferDWord(); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PLC_IOT-DWord", ncDevice.PLC_MemoryAreaIOT_DWord.Length), DateTime.Now.Subtract(inizio).Ticks); + } + else + { + lg.Error("Errore connessione mancante in getGlobalData"); + } + + int numero = 0; + int byteNum = 0; + // Processing area WORD + for (int i = 0; i < mapIOT_Word.Length; i++) + { + int.TryParse(mapIOT_Word[i].memAddr, out byteNum); + if (mapIOT_Word[i].varName.StartsWith("IOT_S_MD_")) + { + // recupero NUMERO + try + { + numero = Convert.ToInt32(mapIOT_Word[i].varName.Replace("IOT_S_MD_", "")); + vettUnOp[numero - 1].mUnOpSpeed.Value = ncDevice.PLC_MemoryAreaIOT_Word[i]; + } + catch + { + // se non trovo --> 1! + numero = 1; + } + } + else if (mapIOT_Word[i].varName.StartsWith("IOT_T_MD_")) + { + // recupero NUMERO + try + { + numero = Convert.ToInt32(mapIOT_Word[i].varName.Replace("IOT_T_MD_", "")); + vettUnOp[numero - 1].mUnOpToolId.Value = ncDevice.PLC_MemoryAreaIOT_Word[i]; + } + catch + { + // se non trovo --> 1! + numero = 1; + } + } + else if (mapIOT_Word[i].varName.StartsWith("IOT_C_H_MD_")) + { + // recupero NUMERO + try + { + numero = Convert.ToInt32(mapIOT_Word[i].varName.Replace("IOT_C_H_MD_", "")); + vettUnOp[numero - 1].mUnOpAccTime.Value = ncDevice.PLC_MemoryAreaIOT_Word[i]; + } + catch + { + // se non trovo --> 1! + numero = 1; + } + } + } +#if false + // dati override feed/speed... + Byte v82 = ncDevice.PLC_MemoryAreaV[14]; + Byte v83 = ncDevice.PLC_MemoryAreaV[15]; + // 2 byte x speed da copiare... + byte[] tmpByte = new byte[2]; + Buffer.BlockCopy(ncDevice.PLC_MemoryAreaV, 16, tmpByte, 0, 2); + short v84 = BitConverter.ToInt16(tmpByte, 0); + // lista allarmi PLC/CNC + Byte v87 = ncDevice.PLC_MemoryAreaV[19]; // Allarme CN (almeno 1?!?) + + // ------------------------------------------- + // recupero dati Feed/Speed/override + // FeedOver: 100% = 213 (il pannello è 0-120 --> 0-255, quindi 100% è 100/120*255=213) + FeedRateOver = Convert.ToInt16((decimal)(v82 * 100) / 213); + sb.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver)); + // SpeedOver: 50% = 128 + SpeedRateOver = Convert.ToInt16((decimal)(v83 * 100) / 255); + sb.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver)); + // Speed S5000 OK!!! + SpeedRate = v84; + sb.AppendLine(string.Format("SpeedRate: {0} rpm", SpeedRate)); + // ------------------------------------------- + + // da recuperare da qualche parte?!? + UnOpLoad = 0; + sb.AppendLine(string.Format("Load: {0}", UnOpLoad)); + + // ------------------------------------------- + // recupero dati dai contatori EOK + bool needSave = false; + + // ore totali accensione + int MinMaccOn = (int)ncDevice.PLC_MemoryAreaEOK[0]; + int OreMaccOn = (int)ncDevice.PLC_MemoryAreaEOK[1]; + istOreMaccOn = OreMaccOn + (double)MinMaccOn / 60; + needSave = procOreMaccOn(needSave); + + // ore totali lavoro + int MinMaccLav = (int)ncDevice.PLC_MemoryAreaEOK[2]; + int OreMaccLav = (int)ncDevice.PLC_MemoryAreaEOK[3]; + istOreMaccLav = OreMaccLav + (double)MinMaccLav / 60; + needSave = procOreMaccLav(needSave); + + // giri totali degli elettromandrini! + for (int i = 0; i < currAdpConf.nUnOp; i++) + { + istGiriElettrom[i] = (uint)ncDevice.PLC_MemoryAreaEOK[4 + i]; + } + needSave = procGiriTotUnOp(needSave); + needSave = procNumCU(needSave); + + // per ESA calcolo a mano se ci sia stato impiego assi... salvo le istantanee mov precedenti... + double precVal = 0; + DateTime adesso = DateTime.Now; + TimeSpan accumTime = adesso.Subtract(lastChekAccumTimeAxis); + + // spostamento totale assi! + for (int i = 0; i < 3; i++) + { + precVal = istDistMovAssi[i]; + // primo è metri, secondo km (moltiplico x 1000) + istDistMovAssi[i] = ncDevice.PLC_MemoryAreaEOK[8 + 2 * i] + ncDevice.PLC_MemoryAreaEOK[9 + 2 * i] * 1000; + // verifico SE devo aggiungere tempo lavoro sui singoli assi (se si sono spostati...) -- è a maglie LARGHE poiché leggiamo lo "scatto ogni metro" x cui se campiono velocemente ma assi muovono lenti prendo MENO tempo di movimento del reale... + if (precVal != istDistMovAssi[i]) + { + istAccTimeAssi[i] += accumTime.TotalHours; + } + } + // salvo valore lastChekAccumTimeAxis + lastChekAccumTimeAxis = adesso; + + needSave = procMovTotAssi(needSave); + needSave = procAccTimeAssi(needSave); + needSave = procProgrName(needSave); + needSave = procPartId(needSave); + needSave = procPzProd(needSave); + needSave = procNumInvAssi(needSave); + needSave = procVacPump(needSave); + needSave = procVacAct(needSave); + needSave = procLubro(needSave); + + // salvo se necessario! + if (needSave) parentForm.persistData(); + // ------------------------------------------- + + + // copio allarmi in vettore generale AlarFlags (dove lo gestisce)... + Buffer.BlockCopy(ncDevice.PLC_MemoryAreaAllarmi, 0, AlarmFlags, 0, ncDevice.PLC_MemoryAreaAllarmi.Length); + //Buffer.BlockCopy(ncDevice.PLC_MemAreaAlarm_tmp, 0, AlarmFlags, 0, ncDevice.PLC_MemAreaAlarm_tmp.Length); + + parentForm.dataMonitor = sb.ToString(); +#endif + } else { - lg.Error("Errore connessione mancante in getStrobeAndAckStatus"); - } - - // dati override feed/speed... - Byte v82 = ncDevice.PLC_MemoryAreaV[14]; - Byte v83 = ncDevice.PLC_MemoryAreaV[15]; - // 2 byte x speed da copiare... - byte[] tmpByte = new byte[2]; - Buffer.BlockCopy(ncDevice.PLC_MemoryAreaV, 16, tmpByte, 0, 2); - short v84 = BitConverter.ToInt16(tmpByte, 0); - // lista allarmi PLC/CNC - Byte v87 = ncDevice.PLC_MemoryAreaV[19]; // Allarme CN (almeno 1?!?) - - // ------------------------------------------- - // recupero dati Feed/Speed/override - // FeedOver: 100% = 213 (il pannello è 0-120 --> 0-255, quindi 100% è 100/120*255=213) - FeedRateOver = Convert.ToInt16((decimal)(v82 * 100) / 213); - sb.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver)); - // SpeedOver: 50% = 128 - SpeedRateOver = Convert.ToInt16((decimal)(v83 * 100) / 255); - sb.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver)); - // Speed S5000 OK!!! - SpeedRate = v84; - sb.AppendLine(string.Format("SpeedRate: {0} rpm", SpeedRate)); - // ------------------------------------------- - - // da recuperare da qualche parte?!? - UnOpLoad = 0; - sb.AppendLine(string.Format("Load: {0}", UnOpLoad)); - - // ------------------------------------------- - // recupero dati dai contatori EOK - bool needSave = false; - - // ore totali accensione - int MinMaccOn = (int)ncDevice.PLC_MemoryAreaEOK[0]; - int OreMaccOn = (int)ncDevice.PLC_MemoryAreaEOK[1]; - istOreMaccOn = OreMaccOn + (double)MinMaccOn / 60; - needSave = procOreMaccOn(needSave); - - // ore totali lavoro - int MinMaccLav = (int)ncDevice.PLC_MemoryAreaEOK[2]; - int OreMaccLav = (int)ncDevice.PLC_MemoryAreaEOK[3]; - istOreMaccLav = OreMaccLav + (double)MinMaccLav / 60; - needSave = procOreMaccLav(needSave); - - // giri totali degli elettromandrini! - for (int i = 0; i < currAdpConf.nUnOp; i++) - { - istGiriElettrom[i] = (uint)ncDevice.PLC_MemoryAreaEOK[4 + i]; - } - needSave = procGiriTotUnOp(needSave); - needSave = procNumCU(needSave); - - // per ESA calcolo a mano se ci sia stato impiego assi... salvo le istantanee mov precedenti... - double precVal = 0; - DateTime adesso = DateTime.Now; - TimeSpan accumTime = adesso.Subtract(lastChekAccumTimeAxis); - - // spostamento totale assi! - for (int i = 0; i < 3; i++) - { - precVal = istDistMovAssi[i]; - // primo è metri, secondo km (moltiplico x 1000) - istDistMovAssi[i] = ncDevice.PLC_MemoryAreaEOK[8 + 2 * i] + ncDevice.PLC_MemoryAreaEOK[9 + 2 * i] * 1000; - // verifico SE devo aggiungere tempo lavoro sui singoli assi (se si sono spostati...) -- è a maglie LARGHE poiché leggiamo lo "scatto ogni metro" x cui se campiono velocemente ma assi muovono lenti prendo MENO tempo di movimento del reale... - if (precVal != istDistMovAssi[i]) + if (connectionOk) { - istAccTimeAssi[i] += accumTime.TotalHours; + // leggo TUTTO il blocco di memoria + inizio = DateTime.Now; + ncDevice.ReadBuffer(); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R-PLC_FullMemoryRead", ncDevice.PLC_MemoryRead.Length), DateTime.Now.Subtract(inizio).Ticks); } + else + { + lg.Error("Errore connessione mancante in getGlobalData"); + } + + // dati override feed/speed... + Byte v82 = ncDevice.PLC_MemoryAreaV[14]; + Byte v83 = ncDevice.PLC_MemoryAreaV[15]; + // 2 byte x speed da copiare... + byte[] tmpByte = new byte[2]; + Buffer.BlockCopy(ncDevice.PLC_MemoryAreaV, 16, tmpByte, 0, 2); + short v84 = BitConverter.ToInt16(tmpByte, 0); + // lista allarmi PLC/CNC + Byte v87 = ncDevice.PLC_MemoryAreaV[19]; // Allarme CN (almeno 1?!?) + + // ------------------------------------------- + // recupero dati Feed/Speed/override + // FeedOver: 100% = 213 (il pannello è 0-120 --> 0-255, quindi 100% è 100/120*255=213) + FeedRateOver = Convert.ToInt16((decimal)(v82 * 100) / 213); + sb.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver)); + // SpeedOver: 50% = 128 + SpeedRateOver = Convert.ToInt16((decimal)(v83 * 100) / 255); + sb.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver)); + // Speed S5000 OK!!! + SpeedRate = v84; + sb.AppendLine(string.Format("SpeedRate: {0} rpm", SpeedRate)); + // ------------------------------------------- + + // da recuperare da qualche parte?!? + UnOpLoad = 0; + sb.AppendLine(string.Format("Load: {0}", UnOpLoad)); + + // ------------------------------------------- + // recupero dati dai contatori EOK + bool needSave = false; + + // ore totali accensione + int MinMaccOn = (int)ncDevice.PLC_MemoryAreaEOK[0]; + int OreMaccOn = (int)ncDevice.PLC_MemoryAreaEOK[1]; + istOreMaccOn = OreMaccOn + (double)MinMaccOn / 60; + needSave = procOreMaccOn(needSave); + + // ore totali lavoro + int MinMaccLav = (int)ncDevice.PLC_MemoryAreaEOK[2]; + int OreMaccLav = (int)ncDevice.PLC_MemoryAreaEOK[3]; + istOreMaccLav = OreMaccLav + (double)MinMaccLav / 60; + needSave = procOreMaccLav(needSave); + + // giri totali degli elettromandrini! + for (int i = 0; i < currAdpConf.nUnOp; i++) + { + istGiriElettrom[i] = (uint)ncDevice.PLC_MemoryAreaEOK[4 + i]; + } + needSave = procGiriTotUnOp(needSave); + needSave = procNumCU(needSave); + + // per ESA calcolo a mano se ci sia stato impiego assi... salvo le istantanee mov precedenti... + double precVal = 0; + DateTime adesso = DateTime.Now; + TimeSpan accumTime = adesso.Subtract(lastChekAccumTimeAxis); + + // spostamento totale assi! + for (int i = 0; i < 3; i++) + { + precVal = istDistMovAssi[i]; + // primo è metri, secondo km (moltiplico x 1000) + istDistMovAssi[i] = ncDevice.PLC_MemoryAreaEOK[8 + 2 * i] + ncDevice.PLC_MemoryAreaEOK[9 + 2 * i] * 1000; + // verifico SE devo aggiungere tempo lavoro sui singoli assi (se si sono spostati...) -- è a maglie LARGHE poiché leggiamo lo "scatto ogni metro" x cui se campiono velocemente ma assi muovono lenti prendo MENO tempo di movimento del reale... + if (precVal != istDistMovAssi[i]) + { + istAccTimeAssi[i] += accumTime.TotalHours; + } + } + // salvo valore lastChekAccumTimeAxis + lastChekAccumTimeAxis = adesso; + + needSave = procMovTotAssi(needSave); + needSave = procAccTimeAssi(needSave); + needSave = procProgrName(needSave); + needSave = procPartId(needSave); + needSave = procPzProd(needSave); + needSave = procNumInvAssi(needSave); + needSave = procVacPump(needSave); + needSave = procVacAct(needSave); + needSave = procLubro(needSave); + + + + // salvo se necessario! + if (needSave) parentForm.persistData(); + // ------------------------------------------- + + + // copio allarmi in vettore generale AlarFlags (dove lo gestisce)... + Buffer.BlockCopy(ncDevice.PLC_MemoryAreaAllarmi, 0, AlarmFlags, 0, ncDevice.PLC_MemoryAreaAllarmi.Length); + //Buffer.BlockCopy(ncDevice.PLC_MemAreaAlarm_tmp, 0, AlarmFlags, 0, ncDevice.PLC_MemAreaAlarm_tmp.Length); + + parentForm.dataMonitor = sb.ToString(); } - // salvo valore lastChekAccumTimeAxis - lastChekAccumTimeAxis = adesso; - - needSave = procMovTotAssi(needSave); - needSave = procAccTimeAssi(needSave); - needSave = procProgrName(needSave); - needSave = procPartId(needSave); - needSave = procPzProd(needSave); - needSave = procNumInvAssi(needSave); - needSave = procVacPump(needSave); - needSave = procVacAct(needSave); - needSave = procLubro(needSave); - - - - // salvo se necessario! - if (needSave) parentForm.persistData(); - // ------------------------------------------- - - - // copio allarmi in vettore generale AlarFlags (dove lo gestisce)... - Buffer.BlockCopy(ncDevice.PLC_MemoryAreaAllarmi, 0, AlarmFlags, 0, ncDevice.PLC_MemoryAreaAllarmi.Length); - //Buffer.BlockCopy(ncDevice.PLC_MemAreaAlarm_tmp, 0, AlarmFlags, 0, ncDevice.PLC_MemAreaAlarm_tmp.Length); - - parentForm.dataMonitor = sb.ToString(); } /// /// Path percorso file prod @@ -510,8 +667,9 @@ namespace MTC_Adapter // 2017.03.07 IN BLOCCO processo TUTTI i valori della memoria BYTE... if (useIotMem) { - + inizio = DateTime.Now; ncDevice.ReadBufferByte(); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PLC_IOT-Byte", ncDevice.PLC_MemoryAreaIOT_Byte.Length), DateTime.Now.Subtract(inizio).Ticks); // accodo dati path in DataMonitor...... StringBuilder sb = new StringBuilder(); // uno ad uno vado a inserirli nella mappa dei dati dell'adapter... @@ -580,13 +738,13 @@ namespace MTC_Adapter // vado poi a gestire le variabili BYTE else if (mapIOT_Byte[i].dataType == "BYTE") { - int.TryParse(mapIOT_Byte[i].memAddr, out bitNum); + int.TryParse(mapIOT_Byte[i].memAddr, out byteNum); if (mapIOT_Byte[i].varName == "IOT_OVRF") { // ------------------------------------------- // recupero dati FeedOverride // FeedOver: 100% = 213 (il pannello è 0-120 --> 0-255, quindi 100% è 100/120*255=213) - FeedRateOver = Convert.ToInt16((decimal)(ncDevice.PLC_MemoryAreaIOT_Byte[bitNum] * 100) / 213); + FeedRateOver = Convert.ToInt16((decimal)(ncDevice.PLC_MemoryAreaIOT_Byte[byteNum] * 100) / 213); sb.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver)); } else if (mapIOT_Byte[i].varName == "IOT_OVRS") @@ -594,7 +752,7 @@ namespace MTC_Adapter // ------------------------------------------- // recupero dati SpeedOverride // SpeedOver: 50% = 128 - SpeedRateOver = Convert.ToInt16((decimal)(ncDevice.PLC_MemoryAreaIOT_Byte[bitNum] * 100) / 255); + SpeedRateOver = Convert.ToInt16((decimal)(ncDevice.PLC_MemoryAreaIOT_Byte[byteNum] * 100) / 255); sb.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver)); } else if (mapIOT_Byte[i].varName.StartsWith("IOT_LUB_")) @@ -611,7 +769,7 @@ namespace MTC_Adapter } if (mapIOT_Byte[i].varName.EndsWith("_STA")) { - if (ncDevice.PLC_MemoryAreaIOT_Byte[bitNum] != 0) + if (ncDevice.PLC_MemoryAreaIOT_Byte[byteNum] != 0) { status = "EMPTY"; } @@ -760,12 +918,10 @@ namespace MTC_Adapter public override void getUnOp() { - base.getUnOp(); - // cicl su UnOp for (int i = 0; i < currAdpConf.nUnOp; i++) { - vettUnOp[i].mUnOpToolId.Value = (int)ncDevice.PLC_MemoryAreaEOK[31]; + vettUnOp[i].mUnOpSpeedOverr.Value = SpeedRateOver; } }