From d0564d3b6dc29f80eda0b3d1a09a5fb8c0be29ff Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 26 Nov 2018 17:24:05 +0100 Subject: [PATCH 1/3] Pulizia codice da aprti commentate x OSAI --- CVCncLib/testSam.dll | Bin 967680 -> 967680 bytes IOB-WIN/IobOSAI.cs | 465 +------------------------------------------ 2 files changed, 1 insertion(+), 464 deletions(-) diff --git a/CVCncLib/testSam.dll b/CVCncLib/testSam.dll index 80054d6bb77b8bd7faa074253c3156e42509dfd7..40235d91489832926dad2ee9873fd69e11e6c947 100644 GIT binary patch delta 182 zcmV;n07?IVh&zCYJCKM2ZXNuAi-n5;g^L1(ivxv=1ci$Qg^LD-iwA{^2!)FYg^LP> ziwm`j3^Ab)K&-@&>wfS`uQa**y%2xlhs>c2hs>c3x6Gjq{0;+c9sHNeunrkcA?5Q= z0RhiPw)FJ}nPVY|0RR91Lpoelb7gXKTytSU++Z)#;@bX-kgaBr6ku@1_&{IL!M62@Lkvj6}9 delta 149 zcmV;G0BZk$h&zCYJCKM2XD;}Gi-n5;g^L1(ivxv=1ci$Qg^LD-iwA{^2!)FYg^LP> ziwm`j3^Ab)&m8x6gFqZjoX@p8YD`a(hs>c2hs>c3x6Gjq{0;+VF8G(runrk0zFF=j zUfB;oi)S~#?FzKT0RR91S~^@-X>)a9Y*Tb~WNB|)O+ipkmol*q%9n7l4kow!u?_?h D49z_> diff --git a/IOB-WIN/IobOSAI.cs b/IOB-WIN/IobOSAI.cs index a68b2d6e..95a0e234 100644 --- a/IOB-WIN/IobOSAI.cs +++ b/IOB-WIN/IobOSAI.cs @@ -27,184 +27,10 @@ namespace IOB_WIN /// Stato corrente (da classe ENUM) /// public CNC_STATUS_OSAI currStatus; - -#if false - /// - /// wrapper chiamata lettura/scrittura OSAI x BYTE... - /// - /// - /// - /// - /// 0/1 orimo o secondo byte della word... - /// - /// - public bool OsaiMemRW_Byte(bool bWrite, OSAI.MemTypeWord MemType, Int32 memIndex, Int32 memOrderStart, ref byte[] Value) - { - bool answ = false; -#if false - if (OSAI_ref.Connected) - { - try - { - parentForm.commPlcActive = true; - answ = OSAI_ref.O_RW_Byte(bWrite, MemType, memIndex, memOrderStart, ref Value); - } - catch (Exception exc) - { - lg.Error(exc, "Eccezione in OsaiMemRW_Byte"); - } - } -#endif - parentForm.commPlcActive = false; - return answ; - } - /// - /// wrapper chiamata lettura/scrittura x WORD... - /// - /// - /// - /// - /// - /// - public bool OsaiMemRW_Word(bool bWrite, OSAI.MemTypeWord MemType, Int32 memIndex, ref ushort[] Value) - { - bool answ = false; - if (OSAI_ref.Connected) - { -#if false - try - { - parentForm.commPlcActive = true; - answ = OSAI_ref.O_RW_Word(bWrite, MemType, memIndex, ref Value); - } - catch (Exception exc) - { - lg.Error(exc, "Eccezione in OsaiMemRW_Word"); - } -#endif - } - parentForm.commPlcActive = false; - return answ; - } - /// - /// wrapper chiamata lettura/scrittura x DOUBLE-WORD... - /// - /// - /// - /// - /// - /// - public bool OsaiMemRW_DWord(bool bWrite, OSAI.MemTypeWord MemType, Int32 memIndex, ref uint[] Value) - { - bool answ = false; - if (OSAI_ref.Connected) - { -#if false - try - { - parentForm.commPlcActive = true; - answ = OSAI_ref.O_RW_DWord(bWrite, MemType, memIndex, ref Value); - } - catch (Exception exc) - { - lg.Error(exc, "Eccezione in OsaiMemRW_DWord"); - } -#endif - } - parentForm.commPlcActive = false; - return answ; - } - /// - /// wrapper chiamata lettura/scrittura x Short... - /// - /// - /// - /// - /// - /// - public bool OsaiMemRW_Short(bool bWrite, OSAI.MemTypeWord MemType, Int32 memIndex, ref short[] Value) - { - bool answ = false; - if (OSAI_ref.Connected) - { -#if false - try - { - parentForm.commPlcActive = true; - answ = OSAI_ref.O_RW_Short(bWrite, MemType, memIndex, ref Value); - } - catch (Exception exc) - { - lg.Error(exc, "Eccezione in OsaiMemRW_Short"); - } -#endif - } - parentForm.commPlcActive = false; - return answ; - } - /// - /// wrapper chiamata lettura/scrittura x INT... - /// - /// - /// - /// - /// - /// - public bool OsaiMemRW_Integer(bool bWrite, OSAI.MemTypeWord MemType, Int32 memIndex, ref int[] Value) - { - bool answ = false; -#if false - if (OSAI_ref.Connected) - { - try - { - parentForm.commPlcActive = true; - answ = OSAI_ref.O_RW_Integer(bWrite, MemType, memIndex, ref Value); - } - catch (Exception exc) - { - lg.Error(exc, "Eccezione in OsaiMemRW_Integer"); - } - } -#endif - parentForm.commPlcActive = false; - return answ; - } - /// - /// wrapper chiamata lettura/scrittura x Double... - /// - /// - /// - /// - /// - /// - public bool OsaiMemRW_Double(bool bWrite, OSAI.MemTypeDouble MemType, Int32 memIndex, ref double[] Value) - { - bool answ = false; -#if false - if (OSAI_ref.Connected) - { - try - { - parentForm.commPlcActive = true; - answ = OSAI_ref.O_RW_Double(bWrite, MemType, memIndex, ref Value); - } - catch (Exception exc) - { - lg.Error(exc, "Eccezione in OsaiMemRW_Double"); - } - } -#endif - parentForm.commPlcActive = false; - return answ; - } -#endif - /// /// Oggetto MAIN x connessione OSAI /// protected ComCNOsai OSAI_ref; - /// /// estende l'init della classe base... /// @@ -296,71 +122,6 @@ namespace IOB_WIN bitStatus += 1; } - // lettura variabili (es contapezzi) - ComCNOsai.stVAR temp; - temp.nAddress = 29; // impostare da conf - temp.nBit = 0; - temp.nNumCn = 1; - temp.szVarName = ""; - - short risultato; - risultato = OSAI_ref.ReadShortVar(temp); - - - // area vb di riferimento x decodifica... -#if false - ' valore bitmap dello statup IOB - Dim status As Short = 0 - - ' power on - If CnOsai.Connected Then - status += 1 - End If - - ' RUN mode - If (machineStatus = ComCNOsai.CYCLE_ And modeSelected = ComCNOsai.AUTO) Then - status += 2 - End If - - ' Allarme - If (machineStatus = ComCNOsai.ERRO_) Then - status += 8 - End If - - ' Manuale - If (modeSelected <> ComCNOsai.AUTO) Then - status += 16 - End If - - ' Allarme - If (machineStatus = ComCNOsai.EMERG_) Then - status += 32 - End If - - - ' compongo i bit di status... - Dim IobBitmap As String - IobBitmap = "--------------" + vbCrLf - IobBitmap += "Bitmap IOB:" + vbCrLf - IobBitmap += status.ToString() + vbCrLf - IobBitmap += "--------------" + vbCrLf + vbCrLf - - ' per leggere variabili dichiaro la struttura - Dim temp As ComCNOsai.stVAR - temp.nAddress = nVar_NC_state ' da conf che vale 352 da - temp.nBit = 0 - temp.nNumCn = 1 - temp.szVarName = "" - - Dim risultato As Short - risultato = CnOsai.ReadShortVar(temp) - - IobBitmap += vbCrLf - IobBitmap += "Variabile " + nVar_NC_state.ToString() + ": " + risultato.ToString() -#endif - - - if (utils.CRB("enableContapezzi")) { lgInfo("OSAI: inizio gestione contapezzi"); @@ -690,48 +451,6 @@ namespace IOB_WIN return prgName; } /// - /// Recupero programma in lavorazione come Dictionary CNC... - /// - SYSINFO: (prima KEY globale) TUTTI i valori separati da # (x fare check modifica) - /// - altre stringhe: ogni singolo parametro / valore - /// - /// - public override Dictionary getSysInfo() - { - Dictionary outVal = new Dictionary(); - stopwatch.Restart(); -#if false - CncLib.Focas1.ODBSYS answ = OSAI_ref.getSysInfo(); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("SYS-INFO"), stopwatch.ElapsedTicks); - } - - try - { - string cnc_type = new string(answ.cnc_type); - string mt_type = new string(answ.mt_type); - string series = new string(answ.series); - string version = new string(answ.version); - string axes = new string(answ.axes); - //short addInfo = answ.addinfo; - short max_axis = answ.max_axis; - // preparo i singoli valori dell'array... - outVal.Add("SYSINFO", string.Format("{0}#{1}#{2}#{3}#{4}#{5}", cnc_type, mt_type, series, version, axes, max_axis)); - outVal.Add("CNC", cnc_type); - outVal.Add("MTT", mt_type); - outVal.Add("SER", series); - outVal.Add("VER", version); - outVal.Add("AXS", string.Format("{0}|{1}", axes, max_axis)); - } - catch (Exception exc) - { - lgError(exc, "Errore in getSysInfo"); - connectionOk = false; - } -#endif - return outVal; - } - /// /// Effettua vero processing contapezzi appoggiato ad area specifica da CONF /// public override void processContapezzi() @@ -765,13 +484,7 @@ namespace IOB_WIN int resVal = 0; // lettura variabili (es contapezzi) resVal = (int)OSAI_ref.ReadVarSN((short)cntAddr); - //ComCNOsai.stVAR tmpVar; - //tmpVar.nAddress = cntAddr; - //tmpVar.nBit = 0; - //tmpVar.nNumCn = 1; - //tmpVar.szVarName = ""; - //// vera lettura - //resVal = OSAI_ref.ReadShortVar(tmpVar); + if (utils.CRB("recTime")) { TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-MEM", 2), stopwatch.ElapsedTicks); @@ -954,181 +667,5 @@ namespace IOB_WIN } return outVal; } -#if false - - /// - /// 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, FANUC.MemType.D, areaD.startIdx, areaD.arraySize); - } - // se l'area ha una size > 0... - if (areaR.arraySize > 0) - { - dump_MemArea(tipo, FANUC.MemType.R, areaR.startIdx, areaR.arraySize); - } - // se l'area ha una size > 0... - if (areaX.arraySize > 0) - { - dump_MemArea(tipo, FANUC.MemType.X, areaX.startIdx, areaX.arraySize); - } - // se l'area ha una size > 0... - if (areaY.arraySize > 0) - { - dump_MemArea(tipo, FANUC.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 - } - /// - /// Dump area D della memoria - /// - /// tipo di DUMP: START (sovrascrivendo) / SAMPLE (salva tanti campionamenti) - /// tipo memoria - /// area memoria di partenza - /// dimensione memoria - private void dump_MemArea(dumpType tipo, FANUC.MemType tipoMem, int memIndex, int memSizeByte) - { - DateTime adesso = DateTime.Now; - string nomeFileB = ""; - string nomeFileW = ""; - string nomeFileDW = ""; - Dictionary mappaValori = new Dictionary(); - // per sicurezza verifico < 9999 byte - if (memSizeByte > 9999) - { - memSizeByte = 9999; - } - // leggo TUTTI i (MAX 9999) byte della memoria D... - byte[] MemBlockCurr = new byte[memSizeByte]; - if (verboseLog) - { - lgInfo("START MemDump", tipoMem); - } - - stopwatch.Restart(); -#if false - OsaiMemRW(R, tipoMem, memIndex, ref MemBlockCurr); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-{1}", MemBlockCurr.Length, tipoMem), stopwatch.ElapsedTicks); - } -#endif - - if (verboseLog) - { - lgInfo("END MemDump", tipoMem); - } - - // seconda del tipo di lettura definisco i nomi delle variabili... - if (tipo == dumpType.SAMPLE) - { - nomeFileB = string.Format(@"{0}\SAMPLES\{1}_{2}_Byte_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem, adesso); - nomeFileW = string.Format(@"{0}\SAMPLES\{1}_{2}_W_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem, adesso); - nomeFileDW = string.Format(@"{0}\SAMPLES\{1}_{2}_DW_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem, adesso); - } - else - { - // salvo in file i dati letti come BYTE - nomeFileB = string.Format(@"{0}\{1}_{2}_Byte.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem); - nomeFileW = string.Format(@"{0}\{1}_{2}_W.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem); - nomeFileDW = string.Format(@"{0}\{1}_{2}_DW.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem); - } - - // salvo in file i dati letti come BYTE - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockCurr.Length; i++) - { - mappaValori.Add(i.ToString("0000"), MemBlockCurr[i].ToString()); - } - utils.WritePlain(mappaValori, nomeFileB); - - // salvo in file i dati letti come Word (2byte) - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockCurr.Length / 2; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt16(MemBlockCurr, i * 2).ToString()); - } - utils.WritePlain(mappaValori, nomeFileW); - - // salvo in file i dati letti come DWord (4byte) - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockCurr.Length / 4; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt32(MemBlockCurr, i * 4).ToString()); - } - utils.WritePlain(mappaValori, nomeFileDW); - } - /// - /// Dump area PARAMETRI - /// - /// tipo di DUMP: START (sovrascrivendo) / SAMPLE (salva tanti campionamenti) - /// Parametro di partenza - /// Numero parametri da esportare... memoria - private void dump_ParArea(dumpType tipo, int memIndex, int numPar) - { - DateTime adesso = DateTime.Now; - string nomeFile = ""; - Dictionary mappaValori = new Dictionary(); - // per sicurezza verifico < 9999 parametri - if (numPar > 9999) - { - numPar = 9999; - } - - // leggo TUTTI i (MAX 9999) byte della memoria D... - object[] paramsArray = new object[numPar]; - if (verboseLog) - { - lgInfo("START ParamDump"); - } - - stopwatch.Restart(); -#if false - for (int i = 0; i < numPar; i++) - { - OSAI_ref.F_RW_Param_Integer(false, memIndex + i, 3, ref paramsArray[i]); - } -#endif - - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-PAR", 4 * numPar), stopwatch.ElapsedTicks); - } - - if (verboseLog) - { - lgInfo("END ParamDump"); - } - - // seconda del tipo di lettura definisco i nomi delle variabili... - if (tipo == dumpType.SAMPLE) - { - nomeFile = string.Format(@"{0}\SAMPLES\{1}_{2}_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, "PAR", adesso); - } - else - { - nomeFile = string.Format(@"{0}\{1}_{2}.dat", utils.dataDatDir, currIobConf.codIOB, "PAR"); - } - - // salvo in file i dati letti - mappaValori = new Dictionary(); - for (int i = 0; i < paramsArray.Length; i++) - { - mappaValori.Add(i.ToString("0000"), paramsArray[i].ToString()); - } - utils.WritePlain(mappaValori, nomeFile); - } -#endif } } From 51d39e743de4ea3bbe47d1b9a80caf477e519d4e Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 26 Nov 2018 17:27:01 +0100 Subject: [PATCH 2/3] Inizio pulizia codice kawasaki + "appunti OSAI" --- IOB-WIN/IobKawasaki.cs | 1482 ++++++++++++++-------------------------- 1 file changed, 525 insertions(+), 957 deletions(-) diff --git a/IOB-WIN/IobKawasaki.cs b/IOB-WIN/IobKawasaki.cs index c8174ef4..56621c66 100644 --- a/IOB-WIN/IobKawasaki.cs +++ b/IOB-WIN/IobKawasaki.cs @@ -23,58 +23,6 @@ namespace IOB_WIN /// protected string comando; - -#if false - /// - /// wrapper chiamata lettura/scrittura SINGOLO BYTE... - /// - /// - /// - /// - /// - /// - public bool FanucMemRW(bool bWrite, FANUC.MemType MemType, Int32 memIndex, ref byte Value) - { - bool answ = false; - if (FANUC_ref.Connected) - { - try - { - parentForm.commPlcActive = true; - answ = FANUC_ref.F_RW_Byte(bWrite, MemType, memIndex, ref Value); - } - catch - { } - } - parentForm.commPlcActive = false; - return answ; - } - /// - /// wrapper chiamata lettura/scrittura MULTI BYTE... - /// - /// - /// - /// - /// - /// - public bool FanucMemRW(bool bWrite, FANUC.MemType MemType, Int32 memIndex, ref byte[] Value) - { - bool answ = false; - if (FANUC_ref.Connected) - { - try - { - parentForm.commPlcActive = true; - answ = FANUC_ref.F_RW_Byte(bWrite, MemType, memIndex, ref Value); - } - catch - { } - } - parentForm.commPlcActive = false; - return answ; - } -#endif - /// /// estende l'init della classe base... /// @@ -279,6 +227,521 @@ namespace IOB_WIN #endif } +#if false + /// + /// Override disconnessione + /// + public override void tryDisconnect() + { + if (connectionOk) + { + string szStatusConnection = ""; + try + { + OSAI_ref.CloseSession(); + connectionOk = false; + // resetto timing! + TimingData.resetData(); + lgInfo(szStatusConnection); + lgInfo("Effettuata disconnessione adapter OSAI!"); + } + catch (Exception exc) + { + lgFatal(exc, "Errore nella disconnessione dall'adapter OSAI"); + } + } + else + { + lgError("IMPOSSIBILE effettuare disconnessione: Connessione non disponibile..."); + } + } + /// + /// Override connessione + /// + public override void tryConnect() + { + if (!connectionOk) + { + // controllo che il ping sia stato tentato almeno pingTestSec fa... + if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec")) + { + if (verboseLog || periodicLog) + { + lgInfo("ConnKO - tryConnect"); + } + // PING SOLO x OPEN!!! + bool needPing = (currIobConf.tipoIob == tipoAdapter.OSAI_OPEN); + bool pingOk = false; + Ping pingSender = new Ping(); + PingReply reply = pingSender.Send("127.0.0.1", 100); + // se serve PING... + if (needPing) + { + // in primis salvo data ping... + lastPING = DateTime.Now; + // ora PING!!! + IPAddress address = IPAddress.Loopback; + IPAddress.TryParse(currIobConf.cncIpAddr, out address); + reply = pingSender.Send(address, 100); + pingOk = reply.Status == IPStatus.Success; + } + // se passa il ping faccio il resto... + if (pingOk || !needPing) + { + string szStatusConnection = ""; + try + { + // ora provo connessione... + parentForm.commPlcActive = true; + bool fatto = OSAI_ref.OpenSession(); + if (!fatto) + { + // log errore! + lgInfo("Impossibile effettuare apertura sessione: " + OSAI_ref.ErrMsg); + } + parentForm.commPlcActive = false; + lgInfo("szStatusConnection: " + szStatusConnection); + connectionOk = true; + // refresh stato allarmi!!! + if (connectionOk) + { + dtAvvioAdp = DateTime.Now; + if (adpRunning) + { + // carico status allarmi (completo) + lgInfo("Inizio refresh completo stato allarmi..."); + forceAlarmCheck(); + lgInfo("Completato refresh completo stato allarmi!"); + } + else + { + lgInfo("Connessione OK"); + } + } + else + { + lgError("Impossibile procedere, connessione mancante..."); + } + } + catch (Exception exc) + { + lgFatal(string.Format("Errore nella connessione all'adapter OSAI: {0}{1}{2}", szStatusConnection, Environment.NewLine, exc)); + connectionOk = false; + lgInfo(string.Format("Eccezione in TryConnect, Adapter NON running, pausa di {0} msec prima di ulteriori tentativi di riconnessione", utils.CRI("waitRecMSec"))); + } + } + else + { + // loggo no risposta ping ... + connectionOk = false; + if (needPing) + { + if (verboseLog || periodicLog) + { + lgInfo(string.Format("Attenzione: controllo PING fallito per IP {0} - {1}", currIobConf.cncIpAddr, reply.Status)); + } + } + } + } + } + // se non è ancora connesso faccio procesisng memoria caso disconnesso... + if (!connectionOk) + { + // processo semafori ed invio... + processMemoryDiscon(); + } + } + /// + /// lettura principale (bit semafori) + /// + public override void readSemafori() + { + base.readSemafori(); + try + { + if (verboseLog) + { + lgInfo("inizio read semafori"); + } + + parentForm.sIN = Semaforo.SV; + + stopwatch.Restart(); + // possiamo leggere tutto da qui che contiene tutto: status, mode, last_nc_error + var ncInfo = OSAI_ref.NcInfo1(ref oData); + // time rec + if (utils.CRB("recTime")) + { + TimingData.addResult(currIobConf.codIOB, "GETINFO1DATA", stopwatch.ElapsedTicks); + } + stopwatch.Stop(); + + // salvo il solo BYTE dell'input decifrando il semaforo... + decodeToBitmap(); + } + catch (Exception exc) + { + lgError(string.Format("Eccezione in readSemafori:{0}{1}", Environment.NewLine, exc)); + connectionOk = false; + } + } + /// + /// Effettua decodifica aree memoria alla bitmap usata x MAPO + /// + private void decodeToBitmap() + { + // init a zero... + B_input = 0; + // SE SI E' CONNESSO al CNC allora è 1=powerON... + if (OSAI_ref.Connected) + { + B_input += 1 << 0; + } + + // decodifico impiegando dictionary... cercando il TIPO di memoria & co... + string bKey = ""; + string bVal = ""; + for (int i = 0; i < 8; i++) + { + bKey = string.Format("BIT{0}", i); + // cerco se ci sia in LUT + if (signLUT.ContainsKey(bKey)) + { + // recupero nome variabile... + bVal = signLUT[bKey]; + // se l'area è PZCOUNT... processo PUNTUALMENTE il CONTAPEZZI... + if (bVal.StartsWith("PZCOUNT")) + { + string currODL = ""; + try + { + currODL = utils.callUrl(urlGetCurrODL); + if (utils.CRB("verbose")) + { + lgInfo(string.Format("Lettura ODL, {0} --> {1}", currIdxODL, currODL)); + } + // provo a salvare nuovo ODL + int.TryParse(currODL, out currIdxODL); + } + catch (Exception exc) + { + if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15) + { + lgError(exc, "Errore in fase di chiamata URL x ODL corrente | URL chiamato: {0}", urlGetCurrODL); + lastWarnODL = DateTime.Now; + } + } + if (currODL != null && currODL != "" && currODL != "0") + { + // controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x distanziare invio e ridurre letture + if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) + { + // verifico se variato contapezzi in area STD PAR6711... e se passato ritardo minimo... + if (lastCountCNC > contapezzi) + { + // salvo nuovo contapezzi (incremento di 1...) + contapezzi++; + // salvo in semaforo! + B_input += 1 << 2; + } + // registro contapezzi + lgInfo(string.Format("Contapezzi OSAI: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi)); + + // invio a server contapezzi (aggiornato) + string retVal = utils.callUrl(urlSetPzCount + contapezzi.ToString()); + // verifica se tutto OK + if (retVal != "OK") + { + // errore salvataggio contapezzi + lgInfo(string.Format("Errore salvataggio Contapezzi OSAI: {0} | Contapezzi interno {1} | Errore salvataggio: {2}", lastCountCNC, contapezzi, retVal)); + } + // resetto timer... + lastPzCountSend = DateTime.Now; + } + } + else + { + if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) + { + lgInfo(string.Format("Attenzione: mancanza ODL non procedo con gestione contapezzi. Contapezzi OSAI: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi)); + // resetto timer... + lastPzCountSend = DateTime.Now; + } + } + } + // controllo le condizioni x costruire il bit1 RUN! + if (oData.mode_select == 2 && oData.status == 2) + { + B_input += 1 << 1; + } + // errore su bit3 + if (oData.mode_select == 6) + { + B_input += 1 << 3; + } + // auto su bit4 + if (oData.mode_select != 2) + { + B_input += 1 << 4; + } + // emergenza su bit5 + if (oData.mode_select == 9) + { + B_input += 1 << 5; + } + } + } + // log opzionale! + if (verboseLog) + { + lgInfo(string.Format("Trasformazione B_input: {0}", B_input)); + } + } + /// + /// Recupero programma in lavorazione + /// + /// + public override string getPrgName() + { + string prgName = ""; + // recupero NUOVO prgName... + try + { + // recupero nome programma MAIN + prgName = System.Text.Encoding.Default.GetString(oData.main_progr_name); + // trimmo path del programma, ovvero "CNCMEMUSERPATH1" + prgName = prgName.Replace(utils.CRS("basePrgMemPath"), ""); + lgInfo("Current PROG: {0}", prgName); + } + catch (Exception exc) + { + lgError(string.Format("Eccezione in recupero PRG NAME MAIN:{0}{1}", Environment.NewLine, exc)); + connectionOk = false; + } + return prgName; + } + /// + /// Effettua vero processing contapezzi appoggiato ad area specifica da CONF + /// + public override void processContapezzi() + { + if (utils.CRB("enableContapezzi")) + { + try + { + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) + if (currIobConf.optPar.Count > 0 && currIobConf.optPar["PZCOUNT_MODE"] != "") + { + string memAddr = currIobConf.optPar["PZCOUNT_MODE"]; + if (memAddr.StartsWith("STD")) + { + // inizio verifica area memoria/parametro levando prima parte codice + memAddr = memAddr.Replace("STD.", ""); + // var di appoggio + int cntAddr = 0; + // verifico se si tratta di lettura MEMORIA... formato tipo STD.MEM.6711 + if (memAddr.StartsWith("MEM.")) + { + // recupero parametro... + int.TryParse(memAddr.Replace("MEM.", ""), out cntAddr); + if (cntAddr == 0) + { + cntAddr = 29; + } + // processo parametro contapezzi (lavorati) + stopwatch.Restart(); + // vera lettura area memoria... + int resVal = 0; + // lettura variabili (es contapezzi) + resVal = (int)OSAI_ref.ReadVarSN((short)cntAddr); + + if (utils.CRB("recTime")) + { + TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-MEM", 2), stopwatch.ElapsedTicks); + } + // aggiungo in visualizzazione SE variata... + if (resVal != lastCountCNC) + { + string mCount = string.Format("MEM{0}", cntAddr); + string sVal = string.Format("[PZCOUNT]{0}|{1}", mCount, resVal); + // chiamo accodamento... + accodaFLog(sVal, qEncodeFLog(mCount, resVal.ToString())); + } + // salvo ultimo conteggio rilevato + lastCountCNC = resVal; + } + stopwatch.Stop(); + } + } + } + catch (Exception exc) + { + lgError(exc, "Errore in contapezzi CNC"); + connectionOk = false; + } + } + } + /// + /// Esegue processing MODE (e nel contempo recupera altri dati dell'area G) + /// + public override void processMode() + { + if (utils.CRB("enableMode")) + { + try + { + // verifico modo con valore corrente, se cambia aggiorno... + CNC_MODE newMode = decodeModeOsai(oData.mode_select); + if (newMode != currMode) + { + // aggiorno! + currMode = newMode; + // conversione NUM MODE in descrizione da ENUM + string descrMode = Enum.GetName(typeof(CNC_MODE), currMode); + // accodo x invio + string sVal = string.Format("[CNC_MODE]{0}", descrMode); + // chiamo accodamento... + accodaFLog(sVal, qEncodeFLog("CNC_MODE", descrMode)); + } + } + catch (Exception exc) + { + lgError(exc, string.Format("Errore in process Mode OSAI: {0}{1}", Environment.NewLine, exc)); + connectionOk = false; + stopwatch.Stop(); + } + } + // lo status lo processo SEMPRE + try + { + // verifico modo con valore corrente, se cambia aggiorno... + CNC_STATUS_OSAI newStatus = (CNC_STATUS_OSAI)(oData.status); + if (newStatus != currStatus) + { + // aggiorno! + currStatus = newStatus; + // accodo x invio + string sVal = string.Format("[CNC_STATUS]{0}", currStatus.ToString()); + // chiamo accodamento... + accodaFLog(sVal, qEncodeFLog("CNC_STATUS", currStatus.ToString())); + } + } + catch (Exception exc) + { + lgError(exc, string.Format("Errore in process Mode OSAI: {0}{1}", Environment.NewLine, exc)); + connectionOk = false; + stopwatch.Stop(); + } + } + /// + /// Decodifica del MODE selezionato + /// + /// + /// + protected CNC_MODE decodeModeOsai(int mode) + { + CNC_MODE answ = CNC_MODE.ND; + switch (mode) + { + case 1: + answ = CNC_MODE.MDI; + break; + case 2: + answ = CNC_MODE.AUTO; + break; + case 3: + answ = CNC_MODE.SEMI; + break; + case 4: + answ = CNC_MODE.JOG_MAN; + break; + case 5: + answ = CNC_MODE.JOG_INC; + break; + case 6: + answ = CNC_MODE.PROFILE; + break; + case 7: + answ = CNC_MODE.HOME; + break; + case 8: + answ = CNC_MODE.HANDLE_INC; + break; + default: + break; + } + return answ; + } + /// + /// Recupero dati dinamici... + /// + public override Dictionary getDynData() + { + Dictionary outVal = new Dictionary(); + stopwatch.Restart(); + try + { + string actf = oData.real_feed.ToString(); + string acts = oData.real_speed.ToString(); + outVal.Add("DYNDATA", string.Format("FEED {0}#SPEED_RPM {1}", actf, acts)); + + if (utils.CRB("SendFeedSpeed")) + { + outVal.Add("FEED", actf); + outVal.Add("SPEED_RPM", acts); + //outVal.Add("NUM_ALARM", numAlarm); + outVal.Add("ACT_TOOL", oData.actual_tool.ToString()); + } + if (utils.CRB("SendAxPos")) + { + // salvo info assi... + outVal.Add("AX_SEL", oData.ax_sel.ToString()); + outVal.Add("NUM_AX_SEL", oData.num_ax_sel.ToString()); + } + } + catch (Exception exc) + { + lgError(exc, "Errore in getDynData"); + } + stopwatch.Stop(); + return outVal; + } + /// + /// Recupero dati override (da area G che è già stata letta...) + /// + /// + public override Dictionary getOverrides() + { + Dictionary outVal = new Dictionary(); + outVal.Add("FEED_OVER", (oData.feed_ov).ToString()); + outVal.Add("RAPID_OVER", (oData.rapid_override).ToString()); + return outVal; + } + /// + /// Recupera e processa allarmi CNC... + /// + public override Dictionary getCncAlarms() + { + Dictionary outVal = new Dictionary(); + // se ho allarmi li accodo... + if (oData.last_nc_error != 0) + { + try + { + outVal.Add("CNC_ALARM", (oData.last_nc_error).ToString()); + } + catch (Exception exc) + { + lg.Error(exc, "Eccezione in getCncAlarms"); + } + } + return outVal; + } +#endif + + /// + /// Oggetto per lettura/scrittura counter pezzi robot + /// private int pzCounter { get @@ -300,7 +763,6 @@ namespace IOB_WIN resDataArray = KAWASAKI_ref.command(comando, 3000); // imposto cicli depositati/fatti a 3 --> " 0\r\n" } } - } /// @@ -340,7 +802,6 @@ namespace IOB_WIN } } } - /// /// Effettua invio del programma di alvorazione al ROBOT /// Dir di riferimento @@ -356,913 +817,20 @@ namespace IOB_WIN // carico... KAWASAKI_ref.asInquiry = delegate (string as_msg) { - Console.WriteLine(as_msg); if (as_msg.StartsWith("Are you sure ?")) return "0\n"; // 0 [RET] - if (as_msg.StartsWith("Load data?")) return "1\n"; // 1 [RET] + Console.WriteLine(as_msg); if (as_msg.StartsWith("Are you sure ?")) + { + return "0\n"; // 0 [RET] + } + + if (as_msg.StartsWith("Load data?")) + { + return "1\n"; // 1 [RET] + } + return null; }; int retLoad = KAWASAKI_ref.load(prgPath, "/Q"); // LOAD/Q default.as[RET] } } - - -#if false - /// - /// Area memoria G (copia) - /// - protected byte[] MemBlockG = new byte[2]; - /// - /// Area memoria R (copia) - /// - protected byte[] MemBlockR = new byte[2]; - /// - /// Area memoria X (copia) - /// - protected byte[] MemBlockX = new byte[2]; - /// - /// Area memoria Y (copia) - /// - protected byte[] MemBlockY = new byte[2]; - - /// - /// Oggetto MAIN x connessione FANUC - /// - protected FANUC FANUC_ref; - - /// - /// Dati dell'area D - /// - protected memAreaFanuc areaD; - /// - /// Dati dell'area PARameters - /// - protected memAreaFanuc areaPAR; - /// - /// Dati dell'area R - /// - protected memAreaFanuc areaR; - /// - /// Dati dell'area X - /// - protected memAreaFanuc areaX; - /// - /// Dati dell'area Y - /// - protected memAreaFanuc areaY; -#endif - - -#if false - - /// - /// Override disconnessione - /// - public override void tryDisconnect() - { - if (connectionOk) - { - string szStatusConnection = ""; - try - { - FANUC_ref.Disconnect(ref szStatusConnection); - connectionOk = false; - // resetto timing! - TimingData.resetData(); - lgInfo(szStatusConnection); - lgInfo("Effettuata disconnessione adapter FANUC!"); - } - catch (Exception exc) - { - lgFatal(exc, "Errore nella disconnessione dall'adapter FANUC"); - } - } - else - { - lgError("IMPOSSIBILE effettuare disconnessione: Connessione non disponibile..."); - } - } - /// - /// Override connessione - /// - public override void tryConnect() - { - if (!connectionOk) - { - // controllo che il ping sia stato tentato almeno pingTestSec fa... - if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec")) - { - if (verboseLog || periodicLog) - { - lgInfo("ConnKO - tryConnect"); - } - // in primis salvo data ping... - lastPING = DateTime.Now; - // ora PING!!! - Ping pingSender = new Ping(); - IPAddress address = IPAddress.Loopback; - IPAddress.TryParse(currIobConf.cncIpAddr, out address); - PingReply reply = pingSender.Send(address, 100); - // se passa il ping faccio il resto... - if (reply.Status == IPStatus.Success) - { - string szStatusConnection = ""; - try - { - // ora provo connessione... - parentForm.commPlcActive = true; - FANUC_ref.Connect(ref szStatusConnection); - parentForm.commPlcActive = false; - lgInfo("szStatusConnection: " + szStatusConnection); - connectionOk = true; - // refresh stato allarmi!!! - if (connectionOk) - { - dtAvvioAdp = DateTime.Now; - if (adpRunning) - { - // carico status allarmi (completo) - lgInfo("Inizio refresh completo stato allarmi..."); - forceAlarmCheck(); - lgInfo("Completato refresh completo stato allarmi!"); - } - else - { - lgInfo("Connessione OK"); - } - } - else - { - lgError("Impossibile procedere, connessione mancante..."); - } - } - catch (Exception exc) - { - lgFatal(string.Format("Errore nella connessione all'adapter FANUC: {0}{1}{2}", szStatusConnection, Environment.NewLine, exc)); - connectionOk = false; - lgInfo(string.Format("Eccezione in TryConnect, Adapter NON running, pausa di {0} msec prima di ulteriori tentativi di riconnessione", utils.CRI("waitRecMSec"))); - } - } - else - { - // loggo no risposta ping ... - connectionOk = false; - if (verboseLog || periodicLog) - { - lgInfo(string.Format("Attenzione: controllo PING fallito per IP {0} - {1}", currIobConf.cncIpAddr, reply.Status)); - } - } - } - } - // se non è ancora connesso faccio procesisng memoria caso disconnesso... - if (!connectionOk) - { - // processo semafori ed invio... - processMemoryDiscon(); - } - } - /// - /// lettura principale (bit semafori) - /// - public override void readSemafori() - { - base.readSemafori(); - try - { - if (verboseLog) - { - lgInfo("inizio read semafori"); - } - - parentForm.sIN = Semaforo.SV; - // inizio letture, SEMPRE DA ZERO (possibile ottimizzazione...) - int memIndex = 0; - // controllo area R: se ha dati (> 0 byte) --> leggo! - if (MemBlockR.Length > 0) - { - stopwatch.Restart(); - FanucMemRW(R, FANUC.MemType.R, memIndex, ref MemBlockR); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-R", MemBlockR.Length), stopwatch.ElapsedTicks); - } - // log - if (verboseLog) - { - for (int i = 0; i < MemBlockR.Length; i++) - { - lgInfo(string.Format("MemBlockR{0}: {1}", i, utils.binaryForm(MemBlockR[i]))); - } - } - } - // controllo area X: se ha dati (> 0 byte) --> leggo! - if (MemBlockX.Length > 0) - { - stopwatch.Restart(); - FanucMemRW(R, FANUC.MemType.X, memIndex, ref MemBlockX); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-X", MemBlockX.Length), stopwatch.ElapsedTicks); - } - // log - if (verboseLog) - { - for (int i = 0; i < MemBlockX.Length; i++) - { - lgInfo(string.Format("MemBlockX{0}: {1}", i, utils.binaryForm(MemBlockX[i]))); - } - } - } - // controllo area Y: se ha dati (> 0 byte) --> leggo! - if (MemBlockY.Length > 0) - { - stopwatch.Restart(); - FanucMemRW(R, FANUC.MemType.Y, memIndex, ref MemBlockY); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-Y", MemBlockY.Length), stopwatch.ElapsedTicks); - } - // log - if (verboseLog) - { - for (int i = 0; i < MemBlockY.Length; i++) - { - lgInfo(string.Format("MemBlockY{0}: {1}", i, utils.binaryForm(MemBlockY[i]))); - } - } - } - stopwatch.Stop(); - // salvo il solo BYTE dell'input decifrando il semaforo... - decodeToBitmap(); - } - catch (Exception exc) - { - lgError(string.Format("Eccezione in readSemafori:{0}{1}", Environment.NewLine, exc)); - connectionOk = false; - } - } - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - private void decodeToBitmap() - { - // init a zero... - B_input = 0; - // SE SI E' CONNESSO al FANUC allora è 1=powerON... - if (FANUC_ref.Connected) - { - B_input += 1 << 0; - } - - // decodifico impiegando dictionary... cercando il TIPO di memoria & co... - string bKey = ""; - string bVal = ""; - char area; - // valore INVERTED (default è false) - bool invSignal = false; - string memArea = ""; - string[] memIdx; - int bitNum = 0; - int byteNum = 0; - int byte2check = 0; - for (int i = 0; i < 8; i++) - { - bKey = string.Format("BIT{0}", i); - // cerco se ci sia in LUT - if (signLUT.ContainsKey(bKey)) - { - // recupero nome variabile... - bVal = signLUT[bKey]; - // se l'area è PZCOUNT... processo PUNTUALMENTE il CONTAPEZZI... - if (bVal.StartsWith("PZCOUNT")) - { - string currODL = ""; - try - { - currODL = utils.callUrl(urlGetCurrODL); - lgInfo(string.Format("Lettura ODL, {0} --> {1}", currIdxODL, currODL)); - // provo a salvare nuovo ODL - int.TryParse(currODL, out currIdxODL); - } - catch (Exception exc) - { - if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15) - { - lgError(exc, "Errore in fase di chiamata URL x ODL corrente | URL chiamato: {0}", urlGetCurrODL); - lastWarnODL = DateTime.Now; - } - } - if (currODL != null && currODL != "" && currODL != "0") - { - // controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x distanziare invio e ridurre letture - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - // verifico se variato contapezzi in area STD PAR6711... e se passato ritardo minimo... - if (lastCountCNC > contapezzi) - { - // salvo nuovo contapezzi (incremento di 1...) - contapezzi++; - // salvo in semaforo! - B_input += 1 << 2; - } - // registro contapezzi - lgInfo(string.Format("Contapezzi FANUC: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi)); - - // 2018.06.26 NON resetto perché si deve resettare da solo da conteggio TC POST cambio ODL... -#if false - else if (contapezzi > lastCountCNC) // in questo caso resetto - { - contapezzi = lastCountCNC; - } -#endif - // invio a server contapezzi (aggiornato) - string retVal = utils.callUrl(urlSetPzCount + contapezzi.ToString()); - // verifica se tutto OK - if (retVal != "OK") - { - // errore salvataggio contapezzi - lgInfo(string.Format("Errore salvataggio Contapezzi FANUC: {0} | Contapezzi interno {1} | Errore salvataggio: {2}", lastCountCNC, contapezzi, retVal)); - } - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - else - { - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - lgInfo(string.Format("Attenzione: mancanza ODL non procedo con gestione contapezzi. Contapezzi FANUC: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi)); - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - } - else // area "normale" byte.bit - { - // di norma è segnale normale => 1, altrimenti inverse => 0... - invSignal = false; - // cerco se sia inverse (ultimo char "!") --> registro e elimino char... - invSignal = bVal.StartsWith("!"); - // tolgo comunque inversione... - bVal = bVal.Replace("!", ""); - // recupero area... - area = bVal[0]; - // altrimenti decodifico area... - memArea = bVal.Substring(1, bVal.Length - 1); - memIdx = memArea.Split('.'); - // calcolo bit e byte number... - int.TryParse(memIdx[0], out byteNum); - if (memIdx.Length > 1) - { - int.TryParse(memIdx[1], out bitNum); - } - // in base al nome cerco in una delle aree.. e prendo solo solo quel bit di quel byte... - switch (area) - { - case 'G': - byte2check = MemBlockG[byteNum]; - break; - case 'R': - byte2check = MemBlockR[byteNum]; - break; - case 'X': - byte2check = MemBlockX[byteNum]; - break; - case 'Y': - byte2check = MemBlockY[byteNum]; - break; - default: - break; - } - // a secondo che sia segnale normale o inverso... - if (invSignal) - { - // controllo se il bit sia NON attivo (basso)... == 0... - if ((byte2check & (1 << bitNum)) == 0) - { - B_input += 1 << i; - } - } - else - { - // controllo se il bit sia attivo (alto)... != 0 - if ((byte2check & (1 << bitNum)) != 0) - { - B_input += 1 << i; - } - } - -#if false - // da rivedere x gestione contapezzi a bit... - // verifico se si tratta di un segnale contapezzo... nel qual caso conteggio ed invio... - if (currIobConf.optPar["PZCOUNT_MODE"].StartsWith("BIT")) - { - // salvo nuovo contapezzi (incremento di 1...) - contapezzi++; - // invio a server contapezzi (aggiornato) - utils.callUrl(urlSetPzCount + contapezzi.ToString()); - lgInfo("Aggiornato contapezzi: {0}", contapezzi); - // resetto timer... - lastPzCountSend = DateTime.Now; - } -#endif - } - - } - } - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format("Trasformazione B_input: {0}", B_input)); - } - } - /// - /// Recupero programma in lavorazione - /// - /// - public override string getPrgName() - { - string prgName = ""; - // recupero NUOVO prgName... - try - { - // recupero nome programma MAIN - prgName = utils.purgedChar2String(FANUC_ref.getPrgNameMain()); - // trimmo path del programma, ovvero "CNCMEMUSERPATH1" - prgName = prgName.Replace(utils.CRS("basePrgMemPath"), ""); - lgInfo("Current PROG: {0}", prgName); - } - catch (Exception exc) - { - lgError(string.Format("Eccezione in recupero PRG NAME MAIN:{0}{1}", Environment.NewLine, exc)); - connectionOk = false; - } - return prgName; - } - - /// - /// Recupero programma in lavorazione come Dictionary FANUC... - /// - SYSINFO: (prima KEY globale) TUTTI i valori separati da # (x fare check modifica) - /// - altre stringhe: ogni singolo parametro / valore - /// - /// - public override Dictionary getSysInfo() - { - Dictionary outVal = new Dictionary(); - stopwatch.Restart(); - CncLib.Focas1.ODBSYS answ = FANUC_ref.getSysInfo(); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("SYS-INFO"), stopwatch.ElapsedTicks); - } - - try - { - string cnc_type = new string(answ.cnc_type); - string mt_type = new string(answ.mt_type); - string series = new string(answ.series); - string version = new string(answ.version); - string axes = new string(answ.axes); - //short addInfo = answ.addinfo; - short max_axis = answ.max_axis; - // preparo i singoli valori dell'array... - outVal.Add("SYSINFO", string.Format("{0}#{1}#{2}#{3}#{4}#{5}", cnc_type, mt_type, series, version, axes, max_axis)); - outVal.Add("CNC", cnc_type); - outVal.Add("MTT", mt_type); - outVal.Add("SER", series); - outVal.Add("VER", version); - outVal.Add("AXS", string.Format("{0}|{1}", axes, max_axis)); - } - catch (Exception exc) - { - lgError(exc, "Errore in getSysInfo"); - connectionOk = false; - } - return outVal; - } - /// - /// Effettua vero processing contapezzi: - /// 6711: pezzi lavorati - /// 6712: pezzi lavorati totali - /// 6713: pezzi richiesti - /// - public override void processContapezzi() - { - if (utils.CRB("enableContapezzi")) - { - try - { - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) - if (currIobConf.optPar.Count > 0 && currIobConf.optPar["PZCOUNT_MODE"] != "") - { - string memAddr = currIobConf.optPar["PZCOUNT_MODE"]; - if (memAddr.StartsWith("STD")) - { - // inizio verifica area memoria/parametro levando prima parte codice - memAddr = memAddr.Replace("STD.", ""); - // var di appoggio - int cntAddr = 0; - object outputVal = new object(); - // verifico se si tratta di lettura parametro... formato tipo STD.PAR.6711 - if (memAddr.StartsWith("PAR.")) - { - // recupero parametro... - int.TryParse(memAddr.Replace("PAR.", ""), out cntAddr); - if (cntAddr == 0) - { - cntAddr = 6711; - } - - // processo parametro contapezzi (lavorati) - stopwatch.Restart(); - FANUC_ref.F_RW_Param_Integer(false, cntAddr, 3, ref outputVal); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-PAR", 4), stopwatch.ElapsedTicks); - } - - // salvo ultimo conteggio rilevato - Int32.TryParse(outputVal.ToString(), out lastCountCNC); - } - // altrimenti se legge da area memoria specifica leggo da li... formto tipo STD.D.1604.DW - else - { - memAddressFanuc areaCounter = new memAddressFanuc(memAddr); - - if (utils.CRB("verbose")) - { - lgInfo("[0] area memoria: {0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType); - } - - // leggo! - stopwatch.Restart(); - // switch x tipo dati --> tipo lettura... e salvo ultimo conteggio rilevato - switch (areaCounter.vType) - { - case "B": - byte valB = 0; - FANUC_ref.F_RW_Byte(false, areaCounter.mType, areaCounter.mPos, ref valB); - outputVal = valB; - break; - case "D": - ushort valW = 0; - FANUC_ref.F_RW_Word(false, areaCounter.mType, areaCounter.mPos, ref valW); - outputVal = valW; - break; - case "DW": - uint valDW = 0; - FANUC_ref.F_RW_DWord(false, areaCounter.mType, areaCounter.mPos, ref valDW); - if (utils.CRB("verbose")) - { - lgInfo("[1] valDW contapezzi: {0}", valDW); - } - - outputVal = valDW; - if (utils.CRB("verbose")) - { - lgInfo("[2] outputVal contapezzi: {0}", outputVal); - } - - break; - default: - break; - } - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R-{0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType), stopwatch.ElapsedTicks); - } - - // salvo... - Int32.TryParse(outputVal.ToString(), out lastCountCNC); - if (utils.CRB("verbose")) - { - lgInfo("[3] lastCountCNC contapezzi: {0}", lastCountCNC); - } - } - stopwatch.Stop(); - } - } - } - catch (Exception exc) - { - lgError(exc, "Errore in contapezzi FANUC"); - connectionOk = false; - } - } - } - /// - /// Esegue processing MODE (e nel contempo recupera altri dati dell'area G) - /// - public override void processMode() - { - if (utils.CRB("enableMode")) - { - try - { - // leggo tutto da 0 a 43... - int memIndex = 0; - // controllo modalità lettura memoria - stopwatch.Restart(); - FanucMemRW(R, FANUC.MemType.G, memIndex, ref MemBlockG); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-G-AREA", MemBlockG.Length), stopwatch.ElapsedTicks); - } - - stopwatch.Stop(); - // verifico modo con valore corrente, se cambia aggiorno... - CNC_MODE newMode = decodeG43(MemBlockG[43]); - if (newMode != currMode) - { - // aggiorno! - currMode = newMode; - // conversione NUM MODE in descrizione da ENUM - string descrMode = Enum.GetName(typeof(CNC_MODE), currMode); - // accodo x invio - string sVal = string.Format("[CNC_MODE]{0}", descrMode); - // chiamo accodamento... - accodaFLog(sVal, qEncodeFLog("CNC_MODE", descrMode)); - } - } - catch (Exception exc) - { - lgError(exc, string.Format("Errore in process Mode G43: {0}{1}", Environment.NewLine, exc)); - connectionOk = false; - stopwatch.Stop(); - } - } - } - /// - /// decodifica il modo dai valori del byte G43 - /// - /// - /// - protected CNC_MODE decodeG43(byte currVal) - { - // hard coded da valori tabellari a MODI definiti in CNC_MODE... - CNC_MODE answ = CNC_MODE.ND; - switch (currVal) - { - case 0: - answ = CNC_MODE.MDI; - break; - case 1: - answ = CNC_MODE.MEN; - break; - case 3: - answ = CNC_MODE.EDIT; - break; - case 4: - answ = CNC_MODE.HANDLE_INC; - break; - case 5: - answ = CNC_MODE.JOG; - break; - case 6: - answ = CNC_MODE.TJOG; - break; - case 7: - answ = CNC_MODE.THND; - break; - case 33: - answ = CNC_MODE.RMT; - break; - case 133: - answ = CNC_MODE.REF; - break; - default: - answ = CNC_MODE.ND; - break; - } - return answ; - } - /// - /// Recupero dati dinamici... - /// - public override Dictionary getDynData() - { - Dictionary outVal = new Dictionary(); - stopwatch.Restart(); - CncLib.Focas1.ODBDY2_1 answ = FANUC_ref.getAllDynData(); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("PROC-DYN-DATA"), stopwatch.ElapsedTicks); - } - - try - { - string actf = answ.actf.ToString(); - string acts = answ.acts.ToString(); - //string numAlarm = answ.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")) - { - outVal.Add("FEED", actf); - outVal.Add("SPEED_RPM", acts); - //outVal.Add("NUM_ALARM", numAlarm); - } - if (utils.CRB("SendAxPos")) - { - // salvo le posizioni... - CncLib.Focas1.FAXIS posAx = answ.pos; - int[] currPosAbs = posAx.absolute; - int i = 0; - foreach (var item in currPosAbs) - { - i++; - outVal.Add(string.Format("POS_{0:00}", i), item.ToString()); - } - } - } - catch (Exception exc) - { - lgError(exc, "Errore in getDynData"); - } - stopwatch.Stop(); - return outVal; - } - /// - /// Recupero dati override (da area G che è già stata letta...) - /// - /// - public override Dictionary getOverrides() - { - Dictionary outVal = new Dictionary(); - if (utils.CRB("enableMode") && MemBlockG != null) - { - outVal.Add("FEED_OVER", MemBlockG[30].ToString()); - outVal.Add("RAPID_OVER", MemBlockG[12].ToString()); - } - return outVal; - } - - /// - /// Override salvataggio valori in memoria... - /// - /// tipo di DUMP - public override void saveMemDump(dumpType tipo) - { - // se l'area ha una size > 0... - if (areaD.arraySize > 0) - { - dump_MemArea(tipo, FANUC.MemType.D, areaD.startIdx, areaD.arraySize); - } - // se l'area ha una size > 0... - if (areaR.arraySize > 0) - { - dump_MemArea(tipo, FANUC.MemType.R, areaR.startIdx, areaR.arraySize); - } - // se l'area ha una size > 0... - if (areaX.arraySize > 0) - { - dump_MemArea(tipo, FANUC.MemType.X, areaX.startIdx, areaX.arraySize); - } - // se l'area ha una size > 0... - if (areaY.arraySize > 0) - { - dump_MemArea(tipo, FANUC.MemType.Y, areaY.startIdx, areaY.arraySize); - } - // se l'area ha una size > 0... - if (areaPAR.arraySize > 0) - { - dump_ParArea(tipo, areaPAR.startIdx, areaPAR.arraySize); - } - } - /// - /// Dump area D della memoria - /// - /// tipo di DUMP: START (sovrascrivendo) / SAMPLE (salva tanti campionamenti) - /// tipo memoria - /// area memoria di partenza - /// dimensione memoria - private void dump_MemArea(dumpType tipo, FANUC.MemType tipoMem, int memIndex, int memSizeByte) - { - DateTime adesso = DateTime.Now; - string nomeFileB = ""; - string nomeFileW = ""; - string nomeFileDW = ""; - Dictionary mappaValori = new Dictionary(); - // per sicurezza verifico < 9999 byte - if (memSizeByte > 9999) - { - memSizeByte = 9999; - } - // leggo TUTTI i (MAX 9999) byte della memoria D... - byte[] MemBlockCurr = new byte[memSizeByte]; - if (verboseLog) - { - lgInfo("START MemDump", tipoMem); - } - - stopwatch.Restart(); - FanucMemRW(R, tipoMem, memIndex, ref MemBlockCurr); - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-{1}", MemBlockCurr.Length, tipoMem), stopwatch.ElapsedTicks); - } - - if (verboseLog) - { - lgInfo("END MemDump", tipoMem); - } - - // seconda del tipo di lettura definisco i nomi delle variabili... - if (tipo == dumpType.SAMPLE) - { - nomeFileB = string.Format(@"{0}\SAMPLES\{1}_{2}_Byte_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem, adesso); - nomeFileW = string.Format(@"{0}\SAMPLES\{1}_{2}_W_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem, adesso); - nomeFileDW = string.Format(@"{0}\SAMPLES\{1}_{2}_DW_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem, adesso); - } - else - { - // salvo in file i dati letti come BYTE - nomeFileB = string.Format(@"{0}\{1}_{2}_Byte.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem); - nomeFileW = string.Format(@"{0}\{1}_{2}_W.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem); - nomeFileDW = string.Format(@"{0}\{1}_{2}_DW.dat", utils.dataDatDir, currIobConf.codIOB, tipoMem); - } - - // salvo in file i dati letti come BYTE - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockCurr.Length; i++) - { - mappaValori.Add(i.ToString("0000"), MemBlockCurr[i].ToString()); - } - utils.WritePlain(mappaValori, nomeFileB); - - // salvo in file i dati letti come Word (2byte) - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockCurr.Length / 2; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt16(MemBlockCurr, i * 2).ToString()); - } - utils.WritePlain(mappaValori, nomeFileW); - - // salvo in file i dati letti come DWord (4byte) - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockCurr.Length / 4; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt32(MemBlockCurr, i * 4).ToString()); - } - utils.WritePlain(mappaValori, nomeFileDW); - } - /// - /// Dump area PARAMETRI - /// - /// tipo di DUMP: START (sovrascrivendo) / SAMPLE (salva tanti campionamenti) - /// Parametro di partenza - /// Numero parametri da esportare... memoria - private void dump_ParArea(dumpType tipo, int memIndex, int numPar) - { - DateTime adesso = DateTime.Now; - string nomeFile = ""; - Dictionary mappaValori = new Dictionary(); - // per sicurezza verifico < 9999 parametri - if (numPar > 9999) - { - numPar = 9999; - } - - // leggo TUTTI i (MAX 9999) byte della memoria D... - object[] paramsArray = new object[numPar]; - if (verboseLog) - { - lgInfo("START ParamDump"); - } - - stopwatch.Restart(); - for (int i = 0; i < numPar; i++) - { - FANUC_ref.F_RW_Param_Integer(false, memIndex + i, 3, ref paramsArray[i]); - } - - if (utils.CRB("recTime")) - { - TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-PAR", 4 * numPar), stopwatch.ElapsedTicks); - } - - if (verboseLog) - { - lgInfo("END ParamDump"); - } - - // seconda del tipo di lettura definisco i nomi delle variabili... - if (tipo == dumpType.SAMPLE) - { - nomeFile = string.Format(@"{0}\SAMPLES\{1}_{2}_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, currIobConf.codIOB, "PAR", adesso); - } - else - { - nomeFile = string.Format(@"{0}\{1}_{2}.dat", utils.dataDatDir, currIobConf.codIOB, "PAR"); - } - - // salvo in file i dati letti - mappaValori = new Dictionary(); - for (int i = 0; i < paramsArray.Length; i++) - { - mappaValori.Add(i.ToString("0000"), paramsArray[i].ToString()); - } - utils.WritePlain(mappaValori, nomeFile); - } -#endif } } From 0515e96d43f3ff6399623ddc911a02e64a88381d Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 26 Nov 2018 17:41:11 +0100 Subject: [PATCH 3/3] pulizia codice --- IOB-WIN/IobKawasaki.cs | 267 ++++++++++++++++++++--------------------- IOB-WIN/IobOSAI.cs | 7 +- 2 files changed, 129 insertions(+), 145 deletions(-) diff --git a/IOB-WIN/IobKawasaki.cs b/IOB-WIN/IobKawasaki.cs index 56621c66..c446d25c 100644 --- a/IOB-WIN/IobKawasaki.cs +++ b/IOB-WIN/IobKawasaki.cs @@ -1,4 +1,5 @@ -using System; +using IOB_UT; +using System; using System.Collections.Generic; namespace IOB_WIN @@ -29,6 +30,132 @@ namespace IOB_WIN /// /// public IobKawasaki(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) + { + // i dati RAW principali sono 6 byte... + RawInput = new byte[6]; + // gestione invio ritardato contapezzi + pzCountDelay = utils.CRI("pzCountDelay"); + lastPzCountSend = DateTime.Now; + lastWarnODL = DateTime.Now; + // inizializzo correttamente aree memoria secondo CONF - iniFileName + IniFile fIni = new IniFile(IOBConf.iniFileName); + // fix enable prgName + enablePrgName = fIni.ReadBoolean("CNC", "GETPRGNAME", true); + +#if false + + // effettuo lettura della conf sigLUT... cercando 1:1 i bit... + string currBit = ""; + string memArea = ""; + for (int i = 0; i < 8; i++) + { + currBit = string.Format("BIT{0}", i); + memArea = fIni.ReadString("MEMORY", currBit, ""); + // se trovo un valore... + if (memArea != "") + { + signLUT.Add(currBit, memArea); + } + } + + // è little endian (NON serve conversione) + hasBigEndian = false; + lgInfo("Start init Adapter OSAI, tipo all'IP/NOME {0}, variante {1} per IOB {2}", IOBConf.cncIpAddr, IOBConf.tipoIob, IOBConf.codIOB); + + // Creo oggetto x gestione connessione/comunicazione NC: secondo il tipo creo CNDEX o OPEN + parentForm.commPlcActive = true; + if (IOBConf.tipoIob == tipoAdapter.OSAI_OPEN) + { + OSAI_ref = new Open_Series(IOBConf.cncIpAddr, false); + } + else if (IOBConf.tipoIob == tipoAdapter.OSAI_VB6) + { + OSAI_ref = new ComCNOSAIVB6(IOBConf.cncIpAddr, false); + } + else + { + OSAI_ref = new ComCNOsai(IOBConf.cncIpAddr, false); + } + parentForm.commPlcActive = false; + + if (utils.CRB("verbose")) + { + lgInfo(string.Format("INIT OSAI_ref da CncLib come {0}", IOBConf.tipoIob)); + } + + // disconnetto e connetto... + if (utils.CRB("verbose")) + { + lgInfo("OSAI: tryDisconnect"); + } + + tryDisconnect(); + lgInfo("OSAI: tryConnect"); + tryConnect(); + + + // recupero machine status e mode da cui decodificare info sul PLC... + byte machineStatus = OSAI_ref.GetMachineStatus(); + byte modeSelected = OSAI_ref.GetModeSelected(); + lgInfo(string.Format("Lettura preliminare: machineStatus={0} | modeSelected={1}", machineStatus, modeSelected)); + + // possiamo leggere tutto da qui che contiene status, mode e last_nc_error + oData = new Cndex.GETINFO1DATA(); + var ncInfo = OSAI_ref.NcInfo1(ref oData); + + lgInfo(string.Format("Lettura START completa NCINFO1DATA{0} lastNcError={1}{0}status={2}{0}substatus={9}{0}mode_select={3}{0}main_progr_name={4}{0}speed_ov={5}{0}progr_speed={6}{0}real_speed={7}{0}real_feed={8}{0}", Environment.NewLine, oData.last_nc_error, oData.status, oData.mode_select, oData.main_progr_name, oData.speed_ov, oData.progr_speed, oData.real_speed, oData.real_feed, oData.substatus)); + + // inizio il calcolo dello status semaforico + short bitStatus = 0; + if (OSAI_ref.Connected) + { + bitStatus += 1; + } + + if (utils.CRB("enableContapezzi")) + { + lgInfo("OSAI: inizio gestione contapezzi"); + try + { + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) + if (currIobConf.optPar.Count > 0 && currIobConf.optPar["PZCOUNT_MODE"] != "") + { + if (currIobConf.optPar["PZCOUNT_MODE"].StartsWith("OVAR")) + { + pzCntReload(); + // refresh associazione Macchina - IOB + sendM2IOB(); + // per adesso imposto lettura dal CNC == contapezzi (poi farà vera lettura...) + lastCountCNC = contapezzi; + } + else + { + contapezzi = 0; + lgInfo("Contapezzi STD disabilitato: modalità {0}", currIobConf.optPar["PZCOUNT_MODE"]); + } + } + else + { + contapezzi = 0; + lgInfo("Parametro mancante PZCOUNT_MODE"); + } + } + catch (Exception exc) + { + lgError(exc, "Errore in contapezzi OSAI"); + } + } + // finisco INIT ADAPTER + lgInfo("End init Adapter OSAI"); +#endif + + // test completo funzionalità kawasaki + kawasakiFullTest(); + } + /// + /// Test completo funzioni kawasaki + /// + private void kawasakiFullTest() { // faccio un try-catch di test vari... try @@ -87,144 +214,6 @@ namespace IOB_WIN { // e.Message = "can't connect TCP/IP" or // "can't login" Console.WriteLine(e.Message); } - - -#if false - // i dati RAW principali sono 6 byte... - RawInput = new byte[6]; - - // gestione invio ritardato contapezzi - pzCountDelay = utils.CRI("pzCountDelay"); - lastPzCountSend = DateTime.Now; - lastWarnODL = DateTime.Now; - - // inizializzo correttamente aree memoria secondo CONF - iniFileName - IniFile fIni = new IniFile(IOBConf.iniFileName); - // inizializzo aree di memoria correnti... - MemBlockG = new byte[fIni.ReadInteger("MEMORY", "AREAG_SIZE", 8)]; - MemBlockR = new byte[fIni.ReadInteger("MEMORY", "AREAR_SIZE", 8)]; - MemBlockX = new byte[fIni.ReadInteger("MEMORY", "AREAX_SIZE", 8)]; - MemBlockY = new byte[fIni.ReadInteger("MEMORY", "AREAY_SIZE", 8)]; - // loggo aree di memoria avviate... - lgInfo(string.Format("Avviare area di memoria MemBlockG: {0} byte", MemBlockG.Length)); - lgInfo(string.Format("Avviare area di memoria MemBlockR: {0} byte", MemBlockR.Length)); - lgInfo(string.Format("Avviare area di memoria MemBlockX: {0} byte", MemBlockX.Length)); - lgInfo(string.Format("Avviare area di memoria MemBlockY: {0} byte", MemBlockY.Length)); - - // fix enable prgName - enablePrgName = fIni.ReadBoolean("CNC", "GETPRGNAME", true); - - // salvo le aree X-Y-D (per dump/sample/ottimizzazione lettura) - areaD = new memAreaFanuc - { - areaName = "AreaD", - startIdx = fIni.ReadInteger("MEMORY", "AREAD_START", 0), - arraySize = fIni.ReadInteger("MEMORY", "AREAD_SIZE", 0) - }; - areaPAR = new memAreaFanuc - { - areaName = "AreaPARR", - startIdx = fIni.ReadInteger("MEMORY", "PAR_START", 0), - arraySize = fIni.ReadInteger("MEMORY", "PAR_SIZE", 0) - }; - areaR = new memAreaFanuc - { - areaName = "AreaR", - startIdx = fIni.ReadInteger("MEMORY", "AREAR_START", 0), - arraySize = fIni.ReadInteger("MEMORY", "AREAR_SIZE", 0) - }; - areaX = new memAreaFanuc - { - areaName = "AreaX", - startIdx = fIni.ReadInteger("MEMORY", "AREAX_START", 0), - arraySize = fIni.ReadInteger("MEMORY", "AREAX_SIZE", 0) - }; - areaY = new memAreaFanuc - { - areaName = "AreaY", - startIdx = fIni.ReadInteger("MEMORY", "AREAY_START", 0), - arraySize = fIni.ReadInteger("MEMORY", "AREAY_SIZE", 0) - }; - lgInfo(string.Format("Salvata area di memoria: {0}, da {1} per {2} byte", areaD.areaName, areaD.startIdx, areaD.arraySize)); - lgInfo(string.Format("Salvata area di memoria: {0}, da {1} per {2} byte", areaR.areaName, areaR.startIdx, areaR.arraySize)); - lgInfo(string.Format("Salvata area di memoria: {0}, da {1} per {2} byte", areaX.areaName, areaX.startIdx, areaX.arraySize)); - lgInfo(string.Format("Salvata area di memoria: {0}, da {1} per {2} byte", areaY.areaName, areaY.startIdx, areaY.arraySize)); - - // effettuo lettura della conf sigLUT... cercando 1:1 i bit... - string currBit = ""; - string memArea = ""; - for (int i = 0; i < 8; i++) - { - currBit = string.Format("BIT{0}", i); - memArea = fIni.ReadString("MEMORY", currBit, ""); - // se trovo un valore... - if (memArea != "") - { - signLUT.Add(currBit, memArea); - } - } - - // è little endian (NON serve conversione) - hasBigEndian = false; - lgInfo("Start init Adapter FANUC all'IP {0}:{1} per IOB {2}", IOBConf.cncIpAddr, IOBConf.cncPort, IOBConf.codIOB); - - // Creo oggetto connessione NC - parentForm.commPlcActive = true; - Runtime.CreateNC(CNC.NcType.FANUC, IOBConf.cncIpAddr, IOBConf.cncPort); - parentForm.commPlcActive = false; - - // aggiungo referenza obj FANUC - FANUC_ref = (FANUC)Runtime.NC; - if (utils.CRB("verbose")) - { - lgInfo("FANUC_ref da CncLib"); - } - - // disconnetto e connetto... - if (utils.CRB("verbose")) - { - lgInfo("FANUC: tryDisconnect"); - } - - tryDisconnect(); - lgInfo("FANUC: tryConnect"); - tryConnect(); - if (utils.CRB("enableContapezzi")) - { - lgInfo("FANUC: inizio gestione contapezzi"); - try - { - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) - if (currIobConf.optPar.Count > 0 && currIobConf.optPar["PZCOUNT_MODE"] != "") - { - if (currIobConf.optPar["PZCOUNT_MODE"].StartsWith("STD")) - { - pzCntReload(); - // refresh associazione Macchina - IOB - sendM2IOB(); - // per adesso imposto lettura fanuc == contapezzi (poi farà vera lettura...) - lastCountCNC = contapezzi; - } - else - { - contapezzi = 0; - lgInfo("Contapezzi STD disabilitato: modalità {0}", currIobConf.optPar["PZCOUNT_MODE"]); - } - } - else - { - contapezzi = 0; - lgInfo("Parametro mancante PZCOUNT_MODE"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in contapezzi FANUC"); - } - } - // finisco INIT ADAPTER - lgInfo("End init Adapter FANUC"); -#endif } #if false diff --git a/IOB-WIN/IobOSAI.cs b/IOB-WIN/IobOSAI.cs index 95a0e234..0157eeb4 100644 --- a/IOB-WIN/IobOSAI.cs +++ b/IOB-WIN/IobOSAI.cs @@ -38,9 +38,6 @@ namespace IOB_WIN /// public IobOSAI(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) { - // i dati RAW principali sono 6 byte... - RawInput = new byte[6]; - // gestione invio ritardato contapezzi pzCountDelay = utils.CRI("pzCountDelay"); lastPzCountSend = DateTime.Now; @@ -49,8 +46,6 @@ namespace IOB_WIN // inizializzo correttamente aree memoria secondo CONF - iniFileName IniFile fIni = new IniFile(IOBConf.iniFileName); - // inizializzo aree di memoria correnti... - // fix enable prgName enablePrgName = fIni.ReadBoolean("CNC", "GETPRGNAME", true); @@ -484,7 +479,7 @@ namespace IOB_WIN int resVal = 0; // lettura variabili (es contapezzi) resVal = (int)OSAI_ref.ReadVarSN((short)cntAddr); - + if (utils.CRB("recTime")) { TimingData.addResult(currIobConf.codIOB, string.Format("R{0}-MEM", 2), stopwatch.ElapsedTicks);