From 4ae78c3c6b13c85340f6453d3dbf911da59d58c2 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 15 Jan 2025 15:37:03 +0100 Subject: [PATCH 1/4] Cleanup siemens da NEXT --- IOB-WIN-NEXT/AdapterFormNext.cs | 82 - .../IobSiemens/IobSiemensTorri_legacy.cs | 1083 ---------- IOB-WIN-NEXT/IobSiemens/Siemens.cs | 1816 ----------------- IOB-WIN-NEXT/IobSiemens/SiemensAprochim.cs | 222 -- IOB-WIN-NEXT/IobSiemens/SiemensAt2001.cs | 291 --- IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs | 234 --- IOB-WIN-NEXT/IobSiemens/SiemensComur.cs | 282 --- IOB-WIN-NEXT/IobSiemens/SiemensCosmap.cs | 284 --- IOB-WIN-NEXT/IobSiemens/SiemensFape.cs | 293 --- IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs | 681 ------- IOB-WIN-NEXT/IobSiemens/SiemensIngenia.cs | 306 --- IOB-WIN-NEXT/IobSiemens/SiemensLasco.cs | 640 ------ IOB-WIN-NEXT/IobSiemens/SiemensNWSE.cs | 221 -- IOB-WIN-NEXT/IobSiemens/SiemensPressoilCei.cs | 275 --- .../IobSiemens/SiemensRobotService.cs | 278 --- IOB-WIN-NEXT/IobSiemens/SiemensSaet.cs | 343 ---- IOB-WIN-NEXT/IobSiemens/SiemensSimec.cs | 270 --- IOB-WIN-NEXT/IobSiemens/SiemensTorri.cs | 551 ----- IOB-WIN-NEXT/memAreaFanuc.cs | 56 - IOB-WIN-NEXT/packages.config | 1 - IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini | 32 +- IOB-WIN-SIEMENS/IOB-WIN-SIEMENS.csproj | 12 +- IOB-WIN-SIEMENS/postBuildTgt.bat | 4 +- 23 files changed, 7 insertions(+), 8250 deletions(-) delete mode 100644 IOB-WIN-NEXT/IobSiemens/IobSiemensTorri_legacy.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/Siemens.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensAprochim.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensAt2001.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensComur.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensCosmap.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensFape.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensIngenia.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensLasco.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensNWSE.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensPressoilCei.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensRobotService.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensSaet.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensSimec.cs delete mode 100644 IOB-WIN-NEXT/IobSiemens/SiemensTorri.cs diff --git a/IOB-WIN-NEXT/AdapterFormNext.cs b/IOB-WIN-NEXT/AdapterFormNext.cs index 91cdbf1c..a94a4fbd 100644 --- a/IOB-WIN-NEXT/AdapterFormNext.cs +++ b/IOB-WIN-NEXT/AdapterFormNext.cs @@ -112,88 +112,6 @@ namespace IOB_WIN_NEXT btnStart.Enabled = true; break; -#if false - case tipoAdapter.SIEMENS: - iobObj = new IobSiemens.Siemens(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_APROCHIM: - iobObj = new IobSiemens.SiemensAprochim(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_AT2001: - iobObj = new IobSiemens.SiemensAt2001(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_COMECA: - iobObj = new IobSiemens.SiemensComeca(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_COMUR: - iobObj = new IobSiemens.SiemensComur(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_COSMAP: - iobObj = new IobSiemens.SiemensCosmap(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_FAPE: - iobObj = new IobSiemens.SiemensFape(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_FAPE_2: - iobObj = new IobSiemens.SiemensFapeV2(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_INGENIA: - iobObj = new IobSiemens.SiemensIngenia(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_LASCO: - iobObj = new IobSiemens.SiemensLasco(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_NWSE: - iobObj = new IobSiemens.SiemensNWSE(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_PRESSOIL_CEI: - iobObj = new IobSiemens.SiemensPressoilCei(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_ROBOTSERVICE: - iobObj = new IobSiemens.SiemensRobotService(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_SAET: - iobObj = new IobSiemens.SiemensSaet(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_SIMEC: - iobObj = new IobSiemens.SiemensSimec(this, IOBConf); - btnStart.Enabled = true; - break; - - case tipoAdapter.SIEMENS_TORRI: - iobObj = new IobSiemens.SiemensTorri(this, IOBConf); - btnStart.Enabled = true; - break; -#endif - case tipoAdapter.SOAP_GOMBA: iobObj = new IobSoap.Gomba(this, IOBConf); btnStart.Enabled = true; diff --git a/IOB-WIN-NEXT/IobSiemens/IobSiemensTorri_legacy.cs b/IOB-WIN-NEXT/IobSiemens/IobSiemensTorri_legacy.cs deleted file mode 100644 index faaf961e..00000000 --- a/IOB-WIN-NEXT/IobSiemens/IobSiemensTorri_legacy.cs +++ /dev/null @@ -1,1083 +0,0 @@ -using IOB_UT; -using S7.Net; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Net.NetworkInformation; - -namespace IOB_WIN -{ - public class IobSiemensTorri : IobSiemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS TORRI - * - basasto su SIEMENS - * - S7 vers 1200 - * - * -------------------------------------------------------------------------------- */ - - #region area componenti base - - /// - /// Configurazione valori da LEGGERE dal PLC - /// - public otherData[] memMapR; - /// - /// Configurazione valori da SCRIVERE nel PLC - /// - public otherData[] memMapW; - /// - /// Byte dimensione buffer dati memoria (da file map) - /// - public int numByte = 0; - /// - /// Lungh massima stringhe - /// - protected int maxStrChar = 20; - /// - /// Oggetto PLC da ri-utilizzare... - /// - protected Plc currPLC; - /// - /// Oggetto cronometro x test vari... - /// - protected Stopwatch sw = new Stopwatch(); - /// - /// parametri di connessione - /// - protected connParamS7 parametri; - /// - /// Variabile x salvataggio iobConf locale - /// - protected IobConfiguration _IOBConf; - - #endregion - - #region area metodi lettura/Scrittura - - - /// - /// wrapper chiamata LETTURA in blocco MULTI BYTE... - /// - /// - /// - public bool S7ReadBB(ref byte[] Value) - { - bool answ = false; - sw.Restart(); - parentForm.commPlcActive = true; - if (testCncConn()) - { - // decodifico memoria... - memAreaSiemens memoria = new memAreaSiemens(parametri.memAddrRead); - int numByte = parametri.memSizeRead; - Byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte); - // copio in value, sennò do errore... - if (memByteRead.Length == Value.Length) - { - Value = memByteRead; - } - else - { - lgError(string.Format("Mismatch dimensione array memoria: passato array di {0} byte, letti da S7 {1} byte", Value.Length, memByteRead.Length)); - } - string titolo = string.Format("READ BLOCK MEM BYTE: {0} --> {1} byte", parametri.memAddrRead, numByte); - if (verboseLog) - { - lgInfo(titolo); - } - - string contenuto = string.Format("Contenuto area memoria aquisita{0}", Environment.NewLine); - string byteVal = ""; - for (int i = 0; i < memByteRead.Length; i++) - { - byteVal = Convert.ToString(memByteRead[i], 2).PadLeft(8, '0'); - contenuto += string.Format("B{0:000}: {1} | {2}{3}", i, byteVal, memByteRead[i], Environment.NewLine); - } - // loggo lettura... - if (verboseLog) - { - lgInfo(contenuto); - } - } - else - { - connectionOk = false; - } - parentForm.commPlcActive = false; - sw.Stop(); - if (utils.CRB("recTime")) - { - TimingData.addResult(cIobConf.codIOB, string.Format("{0}|{1}", parametri.memAddrRead, numByte), sw.ElapsedTicks); - } - - return answ; - } - /// - /// wrapper chiamata SCRITTURA in blocco MULTI BYTE... - /// - /// - /// - public bool S7WriteBB(ref byte[] Value) - { - bool answ = false; - -#if false - sw.Restart(); - if (testCncConn()) - { - // decodifico memoria... - memAddress memoria = new memAddress(txtMemArea.Text); - int numByte = 1; - int.TryParse(txtMemSize.Text, out numByte); - Byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte); - titolo = string.Format("READ BLOCK MEM BYTE: {0} --> {1} byte", txtMemArea.Text, numByte); - contenuto = ""; - string byteVal = ""; - for (int i = 0; i < memByteRead.Length; i++) - { - byteVal = Convert.ToString(memByteRead[i], 2).PadLeft(8, '0'); - contenuto += string.Format("B{0:000}: {1} | {2}{3}", i, byteVal, memByteRead[i], Environment.NewLine); - } - showOut(titolo, contenuto); - } - sw.Stop(); - tslRTime.Text = string.Format("{0}", sw.Elapsed); -#endif - - -#if false - if (FANUC_ref.Connected) - { - try - { - parentForm.commPlcActive = true; - answ = FANUC_ref.F_RW_Byte(bWrite, MemType, memIndex, ref Value); - } - catch - { } - } - parentForm.commPlcActive = false; -#endif - return answ; - } - - - #endregion - - /// - /// estende l'init della classe base con i metodi x Siemens specifici x Torri - /// - /// - /// - public IobSiemensTorri(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - // gestione invio ritardato contapezzi - pzCountDelay = utils.CRI("pzCountDelay"); - lastPzCountSend = DateTime.Now; - lastWarnODL = DateTime.Now; - // init conf - _IOBConf = IOBConf; - // inizializzo parametri... - parametri = new connParamS7() - { - ipAdrr = "127.0.0.1", - tipoCpu = CpuType.S7200, - slot = 0, - rack = 0, - pingMsTimeout = IOBConf.pingMsTimeout, - memAddrRead = "DB700.DBB0", - memAddrWrite = "DB701.DBB0", - memSizeRead = 0, - memSizeWrite = 0 - }; - setParamPlc(); - } - /// - /// Test connessione CNC - /// - /// - private bool testCncConn() - { - bool answ = false; - IPStatus pingStatus = testPing(); - // se passa il ping faccio il resto... - if (pingStatus != IPStatus.Success) - { - lgError(string.Format("Errore in testCncConn: reply Status per {0}: {1}", parametri.ipAdrr, pingStatus)); - } - else - { - if (!currPLC.IsConnected) - { - currPLC.Open(); - } - - if (!currPLC.IsAvailable) - { - lgError(string.Format("PLC Siemens NON disponibile:{0} | {1}", currPLC.LastErrorCode, currPLC.LastErrorString)); - currPLC.ClearLastError(); - } - else - { - if (!currPLC.IsConnected) - { - lgError(string.Format("PLC Siemens NON connesso:{0} | {1}", currPLC.LastErrorCode, currPLC.LastErrorString)); - currPLC.ClearLastError(); - parentForm.updateComStats("NO connection"); - } - else - { - parentForm.updateComStats("Connection OK"); - answ = true; - } - } - } - return answ; - } - /// - /// Imposto parametri PLC - /// - private void setParamPlc() - { - // Creo oggetto connessione NC - parentForm.commPlcActive = true; - lgInfo("Start init Adapter SIEMENS TORRI all'IP {0} | CPU: {1} | R/S: {2}/{3} | --> IOB {4}", _IOBConf.cncIpAddr, _IOBConf.cpuType, _IOBConf.rack, _IOBConf.slot, _IOBConf.codIOB); - // SE è necessario refresh... - if (needRefresh) - { - lgInfo("Refreshing connection..."); - try - { - parametri.slot = _IOBConf.slot; - parametri.rack = _IOBConf.rack; - parametri.tipoCpu = (CpuType)Enum.Parse(typeof(CpuType), _IOBConf.cpuType); - parametri.ipAdrr = _IOBConf.cncIpAddr; - // leggo file init... - IniFile fIni = new IniFile(_IOBConf.iniFileName); - // ora leggo valori speciali - parametri.memAddrRead = fIni.ReadString("MEMORY", "ADDR_READ", ""); - parametri.memAddrWrite = fIni.ReadString("MEMORY", "ADDR_WRITE", ""); - parametri.memSizeRead = fIni.ReadInteger("MEMORY", "SIZE_READ", 0); - parametri.memSizeWrite = fIni.ReadInteger("MEMORY", "SIZE_WRITE", 0); - // salvo vettori memoria... - RawInput = new byte[parametri.memSizeRead]; - RawOutput = new byte[parametri.memSizeWrite]; - // salvo parametri conn! - lgInfo(string.Format("Parametri memoria: memAddrRead: {0} | memAddrWrite: {1} | memSizeRead: {2} | memSizeWrite: {3}", parametri.memAddrRead, parametri.memAddrWrite, parametri.memSizeRead, parametri.memSizeWrite)); - } - catch (Exception exc) - { - lgError(exc, "Errore in parse parametri da IOBConf"); - } - // ora tento avvio PLC... SE PING OK... - if (testPing() == IPStatus.Success) - { - try - { - currPLC = new Plc(parametri.tipoCpu, parametri.ipAdrr, parametri.rack, parametri.slot); - // disconnetto e connetto... - if (utils.CRB("verbose")) - { - lgInfo("SIEMENS-TORRI: tryDisconnect"); - } - - tryDisconnect(); - lgInfo("SIEMENS-TORRI: tryConnect"); - tryConnect(); - lgInfo("End init Adapter SIEMENS-TORRI"); - if (utils.CRB("verbose")) - { - lgInfo("S7+ CONNESSIONE AVVENUTA"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in INIT PLC S7+"); - } - needRefresh = false; - } - parentForm.commPlcActive = false; - // carico conf vettore memoria... - loadMemConf(); - if (utils.CRB("enableContapezzi")) - { - lgInfo("TORRI-SIEMENS: inizio gestione contapezzi"); - try - { - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) - if (cIobConf.optPar.Count > 0 && cIobConf.optPar["PZCOUNT_MODE"] != "") - { - if (cIobConf.optPar["PZCOUNT_MODE"].StartsWith("STD")) - { - pzCntReload(true); - // 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}", cIobConf.optPar["PZCOUNT_MODE"]); - } - } - else - { - contapezzi = 0; - lgInfo("Parametro mancante PZCOUNT_MODE"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in contapezzi TORRI-SIEMENS"); - } - } - } - } - /// - /// Override disconnessione - /// - public override void tryDisconnect() - { - if (connectionOk) - { - string szStatusConnection = ""; - try - { - currPLC.Close(); - connectionOk = false; - lgInfo(szStatusConnection); - lgInfo("Effettuata disconnessione adapter SIEMENS-TORRI!"); - } - catch (Exception exc) - { - lgFatal(exc, "Errore nella disconnessione dall'adapter SIEMENS-TORRI"); - } - } - else - { - lgError("IMPOSSIBILE effettuare disconnessione SIEMENS-TORRI: Connessione non disponibile..."); - } - } - /// - /// Override connessione - /// - public override void tryConnect() - { - bool doLog = (verboseLog || periodicLog); - if (!connectionOk) - { - // reimporto parametri PLC se necessario... - setParamPlc(); - // controllo che il ping sia stato tentato almeno pingTestSec fa... - if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec")) - { - if (doLog) - { - lgInfo("SIEMENS-TORRI: ConnKO - tryConnect"); - } - // in primis salvo data ping... - lastPING = DateTime.Now; - // se passa il ping faccio il resto... - if (testPing() == IPStatus.Success) - { - string szStatusConnection = ""; - try - { - // ora provo connessione... - parentForm.commPlcActive = true; - currPLC.Open(); - parentForm.commPlcActive = false; - lgInfo("szStatusConnection: " + szStatusConnection); - connectionOk = true; - // refresh stato allarmi!!! - if (connectionOk) - { - 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 SIEMENS-TORRI: {0}{1}{2}", szStatusConnection, Environment.NewLine, exc)); - connectionOk = false; - lgInfo(string.Format("Eccezione in TryConnect, Adapter SIEMENS-TORRI NON running, pausa di {0} msec prima di ulteriori tentativi di riconnessione", utils.CRI("waitRecMSec"))); - } - } - else - { - // loggo no risposta ping ... - connectionOk = false; - if (doLog) - { - lgInfo(string.Format("Attenzione: SIEMENS-TORRI controllo PING fallito per IP {0}", cIobConf.cncIpAddr)); - } - } - } - } - // se non è ancora connesso faccio procesisng memoria caso disconnesso... - if (!connectionOk) - { - // processo semafori ed invio... - processMemoryDiscon(); - } - } - /// - /// Caricamento conf memoria DB del SIEMENS - /// - private void loadMemConf() - { - // carico conf memoria - loadConfFile(ref memMapR, filePath("MMapR"), 1, ref numByte); - loadConfFile(ref memMapW, filePath("MMapW"), 1, ref numByte); - } - /// - /// Restituisce path completo file da chaive configurazione - /// - /// chaive conf x file richiesto - /// - protected string filePath(string keyFile) - { - string answ = ""; - try - { - answ = string.Format(@"{0}\{1}", utils.confDir, utils.CRS(keyFile)); - } - catch (Exception exc) - { - lgError(exc, "Eccezione in recupero filePath"); - } - return answ; - } - - /// - /// Effettua vero processing contapezzi - /// - public override void processContapezzi() - { - if (utils.CRB("enableContapezzi")) - { - try - { - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) - if (cIobConf.optPar.Count > 0 && cIobConf.optPar["PZCOUNT_MODE"] != "") - { - string memAddr = cIobConf.optPar["PZCOUNT_MODE"]; - if (memAddr.StartsWith("STD")) - { - // inizio verifica area memoria/parametro levando prima parte codice - memAddr = memAddr.Replace("STD.", ""); - object outputVal = new object(); - // verifico se si tratta di lettura area DB... formato tipo STD.DB700.DBB22.W - if (memAddr.StartsWith("DB")) - { - memAreaSiemens areaCounter = new memAreaSiemens(memAddr); - - if (utils.CRB("verbose")) - { - lgInfo("[0] area memoria: {1}.{2}.{3}", memAddr, areaCounter.DbNum, areaCounter.indiceMem, areaCounter.tipoMem); - } - // copio da blocco già letto... con switch x tipo dati --> tipo lettura... e salvo ultimo conteggio rilevato - switch (areaCounter.tipoMem) - { - case "B": - byte valB = RawInput[areaCounter.indiceMem]; - outputVal = valB; - break; - case "W": - ushort valW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(2).ToArray()); - outputVal = valW; - break; - case "DW": - uint valDW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(4).ToArray()); - outputVal = valDW; - if (utils.CRB("verbose")) - { - lgInfo("[2] outputVal contapezzi: {0}", outputVal); - } - - break; - default: - break; - } - // 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 SIEMENS-TORRI"); - } - } - } - - #region da completare - - /// - /// Recupero dati override in formato dictionary - /// - /// - public override Dictionary getOverrides() - { - Dictionary outVal = new Dictionary(); - uint valDW = 0; - // !!!FARE!!! recuperare da conf memoria, ora HARD CODED - outVal.Add("FEED_OVER", RawInput[19].ToString()); - outVal.Add("RAPID_OVER", RawInput[20].ToString()); - outVal.Add("CURR_MODE", decodeCurrMode(RawInput[21])); - // recupero RPM pezzo/mola !!!FARE!!! cambio nome da config, qui sono 01:conduttrice e 02:operatrice (3013), mentre sono pezzo/mola nella V100 - valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(24).Take(4).ToArray()); - outVal.Add("RPM_01", valDW.ToString()); - valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(28).Take(4).ToArray()); - outVal.Add("RPM_02", valDW.ToString()); - return outVal; - } - - /// - /// lettura bit semafori - /// - public override void readSemafori() - { - base.readSemafori(); - if (verboseLog) - { - lgInfo("inizio read semafori"); - } - - parentForm.sIN = Semaforo.SV; - // leggo TUTTI i byte configurati... - byte[] MemBlock = new byte[parametri.memSizeRead]; - bool fatto = S7ReadBB(ref MemBlock); - Buffer.BlockCopy(MemBlock, 0, RawInput, 0, parametri.memSizeRead); - if (verboseLog) - { - lgInfo(string.Format("RawInput[0]: {0}", utils.binaryForm(RawInput[0]))); - } - // salvo il solo BYTE dell'input decifrando il semaforo... - decodeToBaseBitmap(); - decodeOtherData(); - } - - /// - /// decodifica da bitmap il CURRENT MODE del controllo - /// - /// - /// - protected string decodeCurrMode(byte currModeBitmap) - { - string answ = ""; - if (verboseLog) - { - lgInfo(string.Format("CURR_MODE raw data: {0}", utils.binaryForm(currModeBitmap))); - } - // decodifica del MODO... B21 - /* - * CURR MODE diviso in BIT: - * B0 (01) = AUTO - * B1 (02) = MDI - * B2 (04) = JOG - * B3 (08) = TeachIN (associato a MDI --> 10) - * B4 (16) = Repos (associato a JOG --> 20) - * B5 (32) = RefPoint (associato a Jog --> 36) - * B6 (64) = Incr1 (associato a Jog --> 68) - * B7 (128) = Incr10 (associato a Jog --> -124 / 132 se UInt) - * */ - - // modi principali - if (currModeBitmap.SelectBit(0)) - { - answ = "AUTO"; - } - else if (currModeBitmap.SelectBit(1)) - { - answ = "MDI"; - } - else if (currModeBitmap.SelectBit(2)) - { - answ = "JOG"; - } - // modi accessori - if (currModeBitmap.SelectBit(3)) - { - answ += " | TEACH-IN"; - } - if (currModeBitmap.SelectBit(4)) - { - answ += " | REPOS"; - } - if (currModeBitmap.SelectBit(5)) - { - answ += " | REF-POINT"; - } - if (currModeBitmap.SelectBit(6)) - { - answ += " | INCR-1"; - } - if (currModeBitmap.SelectBit(7)) - { - answ += " | INCR-10"; - } - return answ; - } - /// - /// Decodifica il resto dell'area TORRI x i dati accessori (allarmi, ...) - /// - private void decodeOtherData() - { - if (verboseLog) - { - - } - } - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - private void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - // TORRI: leggo i primi 8 bit hard coded... - int byteSem = RawInput[0]; - // azzero i bit NON gestiti (2-5-6-7) - byteSem &= ~(1 << 2); - byteSem &= ~(1 << 5); - byteSem &= ~(1 << 6); - byteSem &= ~(1 << 7); - // salvo infine variabile bit x invio - B_input = byteSem; - - - string currODL = ""; - try - { - currODL = utils.callUrl(urlGetCurrODL); - // solo SE HO un ODL... - if (currODL == "" || currODL == "0") - { - if (periodicLog) - { - lgInfo(string.Format("SiemensTorri | Lettura ODL andata a vuoto: currODL: {0}", currODL)); - } - } - else - { - // se variato o scaduto timeout log... - if (periodicLog || (currIdxODL.ToString() != currODL)) - { - lgInfo(string.Format("SiemensTorri | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL)); - } - // 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") - { - // ora processo il contapezzi... - // controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x distanziare invio e ridurre letture - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - - // se sono differenti MOSTRO... - if (lastCountCNC != contapezzi) - { - // registro contapezzi - lgInfo(string.Format("Differenza Contapezzi: READ: {0} | Interno {1}", lastCountCNC, contapezzi)); - } - // verifico se variato contapezzi... 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 SIEMENST-TORRI: {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 SIEMENST-TORRI: {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 SIEMENST-TORRI: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi)); - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format("Trasformazione B_input: {0}", B_input)); - } - } - /// - /// Recupero programma in lavorazione - /// - /// - public override string getPrgName() - { - string prgName = ""; -#if false - // 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"), ""); - } - catch (Exception exc) - { - lgError(string.Format("Eccezione in recupero PRG NAME MAIN:{0}{1}", Environment.NewLine, exc)); - } -#endif - 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(); -#if false - inizio = DateTime.Now; - EgwProxy.MultiCncLib.Focas1.ODBSYS answ = FANUC_ref.getSysInfo(); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("SYS-INFO"), DateTime.Now.Subtract(inizio).Ticks); - 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"); - } -#endif - return outVal; - } - /// - /// Esegue processing MODE (e nel contempo recupera altri dati dell'area G) - /// - public override void processMode() - { - if (utils.CRB("enableMode")) - { -#if false - try - { - inizio = DateTime.Now; - // leggo tutto da 0 a 43... - int memIndex = 0; - FanucMemRW(R, FANUC.MemType.G, memIndex, ref MemBlockG); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-G-AREA", MemBlockG.Length), DateTime.Now.Subtract(inizio).Ticks); - // 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, "Errore in process Mode G43"); - } -#endif - } - } -#if false - /// - /// 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; - } -#endif - /// - /// Recupero dati dinamici... - /// - public override Dictionary getDynData() - { - Dictionary outVal = new Dictionary(); -#if false - inizio = DateTime.Now; - EgwProxy.MultiCncLib.Focas1.ODBDY2_1 answ = FANUC_ref.getAllDynData(); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("PROC-DYN-DATA"), DateTime.Now.Subtract(inizio).Ticks); - 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... - EgwProxy.MultiCncLib.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"); - } -#endif - return outVal; - } - - /// - /// Override salvataggio valori in memoria... - /// - /// tipo di DUMP - public override void saveMemDump(dumpType tipo) - { -#if false - dump_MemAreaD(); - dump_MemAreaY(); -#endif - } - /// - /// Dump PERIODICO area D della memoria - /// - /// area memoria di partenza - /// - private void dump_MemAreaD(int memIndex, int memSyzeByte) - { - // leggo TUTTI i 9999 byte della memoria D... - byte[] MemBlockD = new byte[memSyzeByte]; - stopwatch.Restart(); - if (verboseLog) - { - lgInfo("START MemDump AreaD"); - } -#if false - FanucMemRW(R, FANUC.MemType.D, memIndex, ref MemBlockD); - if (verboseLog) lgInfo("END MemDump AreaD"); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-MemDumpD", MemBlockD.Length), DateTime.Now.Subtract(inizio).Ticks); - // file out! - string nomeFile = ""; - Dictionary mappaValori = new Dictionary(); - // salvo in file i dati letti come DWord (4byte) - nomeFile = string.Format(@"{0}\SAMPLES\MemDump_D_DW_{1:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, DateTime.Now); - for (int i = 0; i < MemBlockD.Length / 4; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt32(MemBlockD, i * 4).ToString()); - } - utils.WritePlain(mappaValori, nomeFile); -#endif - } - /// - /// Dump area D della memoria - /// - private void dump_MemAreaD() - { - // faccio chaimate e salvo in file dump... - int memIndex = 0; - // leggo TUTTI i 9999 byte della memoria D... - byte[] MemBlockD = new byte[9999]; - stopwatch.Restart(); - if (verboseLog) - { - lgInfo("START MemDump AreaD"); - } -#if false - FanucMemRW(R, FANUC.MemType.D, memIndex, ref MemBlockD); - if (verboseLog) lgInfo("END MemDump AreaD"); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-MemDumpD", MemBlockD.Length), DateTime.Now.Subtract(inizio).Ticks); - // - string nomeFile = ""; - // salvo in file i dati letti come BYTE - nomeFile = string.Format(@"{0}\MemDump_D_Byte.dat", utils.dataDatDir); - Dictionary mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockD.Length; i++) - { - mappaValori.Add(i.ToString("0000"), MemBlockD[i].ToString()); - } - utils.WritePlain(mappaValori, nomeFile); - - // salvo in file i dati letti come DWord (4byte) - nomeFile = string.Format(@"{0}\MemDump_D_DW.dat", utils.dataDatDir); - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockD.Length / 4; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt32(MemBlockD, i * 4).ToString()); - } - utils.WritePlain(mappaValori, nomeFile); - - // salvo in file i dati letti come DWord (4byte) - nomeFile = string.Format(@"{0}\MemDump_D_W.dat", utils.dataDatDir); - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockD.Length / 2; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt16(MemBlockD, i * 2).ToString()); - } - utils.WritePlain(mappaValori, nomeFile); -#endif - } - /// - /// Dump area Y della memoria - /// - private void dump_MemAreaY() - { - // faccio chaimate e salvo in file dump... - int memIndex = 0; - // leggo TUTTI i 9999 byte della memoria Y... - byte[] MemBlockY = new byte[10]; - stopwatch.Restart(); - if (verboseLog) - { - lgInfo("START MemDump AreaY"); - } -#if false - FanucMemRW(R, FANUC.MemType.Y, memIndex, ref MemBlockY); - if (verboseLog) lgInfo("END MemDump AreaY"); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-MemDumpY", MemBlockY.Length), DateTime.Now.Subtract(inizio).Ticks); - // - string nomeFile = ""; - // salvo in file i dati letti come BYTE - nomeFile = string.Format(@"{0}\MemDump_Y_Byte.dat", utils.dataDatDir); - Dictionary mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockY.Length; i++) - { - mappaValori.Add(i.ToString("0000"), MemBlockY[i].ToString()); - } - utils.WritePlain(mappaValori, nomeFile); - - // salvo in file i dati letti come DWord (4byte) - nomeFile = string.Format(@"{0}\MemDump_Y_DW.dat", utils.dataDatDir); - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockY.Length / 4; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt32(MemBlockY, i * 4).ToString()); - } - utils.WritePlain(mappaValori, nomeFile); - - // salvo in file i dati letti come DWord (4byte) - nomeFile = string.Format(@"{0}\MemDump_Y_W.dat", utils.dataDatDir); - mappaValori = new Dictionary(); - for (int i = 0; i < MemBlockY.Length / 2; i++) - { - mappaValori.Add(i.ToString("0000"), BitConverter.ToUInt16(MemBlockY, i * 2).ToString()); - } - utils.WritePlain(mappaValori, nomeFile); -#endif - } - #endregion - } -} diff --git a/IOB-WIN-NEXT/IobSiemens/Siemens.cs b/IOB-WIN-NEXT/IobSiemens/Siemens.cs deleted file mode 100644 index e55ddc7d..00000000 --- a/IOB-WIN-NEXT/IobSiemens/Siemens.cs +++ /dev/null @@ -1,1816 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using Newtonsoft.Json; -using S7.Net; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Net.NetworkInformation; -using System.Text; -using System.Threading; - -namespace IOB_WIN_NEXT.IobSiemens -{ - public class Siemens : Iob.GenericNext, IDisposable - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS tramite libreria S7.net - * - basasto su SIEMENS - * - S7 testato vers 300 e 1200 - * - attenzione conf rack/slot x varie serie controlli - * - necessità apertura metodi pu/get - * - * -------------------------------------------------------------------------------- */ - - #region Public Fields - - /// - /// Byte dimensione buffer dati memoria (da file map) - /// - public int numByte = 0; - - #endregion Public Fields - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public Siemens(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - memMap = new plcMemMapExt(); - writePre = true; - if (IOBConf.optPar.ContainsKey("WRITE_PRE")) - { - bool.TryParse(IOBConf.optPar["WRITE_PRE"], out writePre); - lgInfo($"Override Write pre da conf: {IOBConf.optPar["WRITE_PRE"]} --> {writePre}"); - } - if (IOBConf != null) - { - // gestione invio ritardato contapezzi - pzCountDelay = utils.CRI("pzCountDelay"); - lastPzCountSend = DateTime.Now; - lastWarnODL = DateTime.Now; - // inizializzo parametri... - parametri = new connParamS7() - { - ipAdrr = "127.0.0.1", - tipoCpu = CpuType.S7200, - slot = 0, - rack = 0, - pingMsTimeout = IOBConf.pingMsTimeout, - memAddrRead = "DB1.DBB0", - memAddrWrite = "DB2.DBB0", - memSizeRead = 0, - memSizeWrite = 0 - }; - setParamPlc(); - - // salvo info su conf IOB... - string iobConfSer = ""; - try - { - iobConfSer = JsonConvert.SerializeObject(IOBConf, Formatting.Indented); - } - catch - { } - // finito! - lgInfoStartup($"Init IOB, con {iobConfSer}"); - } - else - { - lgError("Impossibile avviare, IOBConf nullo/non valido!"); - } - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Converte direttamente un valore Int su un oggetto byte[4] - /// - /// valore da scrivere - public byte[] dintToByte(string valore) - { - byte[] answ = new byte[4]; - try - { - int valInt = 0; - int.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.DInt.ToByteArray(valInt); - int byteLen = 4; - Buffer.BlockCopy(strByte, 0, answ, 0, byteLen); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DINT {valore} in byte{Environment.NewLine}{exc}"); - } - return answ; - } - - /// - /// Metodo dispose x il currPLC contenuto - /// - public void Dispose() - { - currPLC.Dispose(); - } - - /// - /// Converte direttamente un valore UInt32 su un oggetto byte[4] - /// - /// valore da scrivere - public byte[] dwordToByte(string valore) - { - byte[] answ = new byte[4]; - try - { - ushort valInt = 0; - ushort.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.DWord.ToByteArray(valInt); - int byteLen = 4; - Buffer.BlockCopy(strByte, 0, answ, 0, byteLen); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DINT {valore} in byte{Environment.NewLine}{exc}"); - } - return answ; - } - - /// - /// Recupero dati dinamici... - /// - public override Dictionary getDynData() - { - // valore non presente in vers default... se gestito fare override - Dictionary outVal = new Dictionary(); - if (utils.CRB("enableTSVC")) - { - // processing SOLO SE ho in memoria abbastanza dati... - if (RawInput.Length < parametri.memSizeRead) - { - lgError($"Impossibile processare getDynData x Siemens PLC, vettore memoria troppo piccolo: {RawInput.Length} byte / {parametri.memSizeRead} byte presenti/richiesti)"); - } - else - { - try - { - // processo x ogni valore configurato... - if (memMap.mMapRead.Count > 0) - { - // inizializzo i valori - bool valBool = false; - double valore = 0; - string valString = ""; - // procedo x ogni valore configurato...... - foreach (var item in memMap.mMapRead) - { - // in primis DEVO determinare di quale TIPO di valore ho bisogno... - switch (item.Value.tipoMem) - { - case plcDataType.Boolean: - valBool = S7.Net.Types.Boolean.GetValue(RawInput[item.Value.index], item.Value.size); - break; - - case plcDataType.Int: - valore = ((double)S7.Net.Types.Int.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray())) / item.Value.factor; - saveValue(ref outVal, item.Key, valore); - break; - - case plcDataType.DInt: - valore = ((double)S7.Net.Types.DInt.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray())) / item.Value.factor; - saveValue(ref outVal, item.Key, valore); - break; - - case plcDataType.Word: - valore = ((double)S7.Net.Types.Word.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray())) / item.Value.factor; - saveValue(ref outVal, item.Key, valore); - break; - - case plcDataType.DWord: - valore = ((double)S7.Net.Types.DWord.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray())) / item.Value.factor; - saveValue(ref outVal, item.Key, valore); - break; - - case plcDataType.Real: - valore = S7.Net.Types.Double.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray()) / item.Value.factor; - saveValue(ref outVal, item.Key, valore); - break; - - case plcDataType.String: - valString = S7.Net.Types.String.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray()); - saveValueString(ref outVal, item.Key, valString); - break; - - case plcDataType.Byte: - case plcDataType.BitMap: - byte[] byteState = RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray(); - // calcolo valore string come unione delle bitmap attive... - valString = getBitmapState(item.Value, byteState); - // se vuoto segno "OK" - valString = string.IsNullOrEmpty(valString) ? "OK" : valString; - saveValueString(ref outVal, item.Key, valString); - break; - - default: - break; - } - } - } - else - { - lgInfo($"getDynData: {memMap.mMapRead.Count} record in mMapRead"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in getDynData x Siemens PLC"); - } - } - } - else - { - lgInfo($"Non processo getDynData: enableTSVC = false"); - } - if (periodicLog || outVal.Count > 0) - { - lgInfo($"Esito getDynData: {outVal.Count} valori VALIDI in outVal"); - } - return outVal; - } - - /// - /// Recupero programma in lavorazione - /// - /// - public override string getPrgName() - { - // valore non presente in vers default... se gestito fare override - string prgName = ""; - 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() - { - // valore non presente in vers default... se gestito fare override - Dictionary outVal = new Dictionary(); - return outVal; - } - - /// - /// Converte direttamente un valore Short su un oggetto byte[2] - /// - /// valore da scrivere - public byte[] intToByte(string valore) - { - byte[] answ = new byte[2]; - try - { - short valInt = 0; - short.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.Int.ToByteArray(valInt); - int byteLen = 2; - Buffer.BlockCopy(strByte, 0, answ, 0, byteLen); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura INT {valore} in byte{Environment.NewLine}{exc}"); - } - return answ; - } - - /// - /// Effettua vero processing contapezzi - /// - public override void processContapezzi() - { - bool disableByIob = (getOptPar("DISABLE_PZCOUNT") == "TRUE"); - if (utils.CRB("enableContapezzi") && !disableByIob) - { - try - { - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con - // indicazione area) - if (cIobConf.optPar.Count > 0) - { - int pzCountBuoni = -1; - int pzCountQCtrl = -1; - int pzCountAll = 0; - string memAddrPzCount = ""; - string strOutValPzBuoni = ""; - string memAddrPzQCtrl = ""; - string strOutValPzQCtrl = ""; - - if (!string.IsNullOrEmpty(getOptPar("PZCOUNT_MODE"))) - { - memAddrPzCount = getOptPar("PZCOUNT_MODE"); - strOutValPzBuoni = readCountVal(ref memAddrPzCount); - - // verifico valori letti - if (!string.IsNullOrEmpty(strOutValPzBuoni)) - { - // salvo... - Int32.TryParse(strOutValPzBuoni, out pzCountBuoni); - // e sommo (SE sono > -1) - if (pzCountBuoni >= 0) - { - pzCountAll += pzCountBuoni; - } - } - } - if (!string.IsNullOrEmpty(getOptPar("PZQCTRL_MODE"))) - { - memAddrPzQCtrl = getOptPar("PZQCTRL_MODE"); - strOutValPzQCtrl = readCountVal(ref memAddrPzQCtrl); - - // verifico valori letti - if (!string.IsNullOrEmpty(strOutValPzQCtrl)) - { - // salvo... - Int32.TryParse(strOutValPzQCtrl, out pzCountQCtrl); - // e sommo (SE sono > -1) - if (pzCountQCtrl >= 0) - { - pzCountAll += pzCountQCtrl; - } - } - } - - // proseguo SOLO SE ho un pzCount > 0... - if (pzCountAll >= 0) - { - // verifico il NUOVO contapezzi PRIMA di accettare ogni incremento... - int deltaPzCount = pzCountAll - contapezziPLC; - double maxDelta = DateTime.Now.Subtract(plcLastPzRead).TotalMinutes / (plcAvgTc / 60); - // se incremento superiore del doppio atteso --> segnalo errore e NON accetto - if (deltaPzCount > maxDelta * (maxPzDeltaPerc / 100)) - { - lgError($"[DELTA CHECK]: intremento contapezziPLC troppo elevato: lettura {pzCountAll} | contapezzi attuale: {contapezziPLC} | ultima lettura PLC: {plcLastPzRead} | TCiclo medio: {plcAvgTc}s | incremento accettato "); - } - else - { - contapezziPLC = (pzCountAll >= 0 ? pzCountAll : contapezziPLC); - if (isVerboseLog) - { - lgInfo($"[2] pzBuoni: {strOutValPzBuoni} | pzCQ: {strOutValPzQCtrl}"); - lgInfo($"[3] contapezziPLC: {contapezziPLC}"); - } - } - } - } - } - catch (Exception exc) - { - lgError(exc, "Errore in contapezzi SIEMENS"); - } - } - } - - /// - /// Esegue processing MODE (e nel contempo recupera altri dati dell'area G) - /// - public override void processMode() - { - // valore non presente in vers default... se gestito fare override - if (utils.CRB("enableMode")) - { - } - } - - /// - /// Effettua lettura semafori principale - /// Parametri da aggiornare x display in form - /// - public override void readSemafori(ref newDisplayData currDispData) - { - base.readSemafori(ref currDispData); - try - { - currDispData.semIn = Semaforo.SV; - - if (verboseLog) - { - lgInfo("inizio read semafori"); - } - // leggo TUTTI i byte configurati... - byte[] MemBlock = new byte[parametri.memSizeRead]; - bool fatto = S7ReadBB(ref MemBlock); - Buffer.BlockCopy(MemBlock, 0, RawInput, 0, parametri.memSizeRead); - if (verboseLog) - { - lgInfo(string.Format("RawInput[0]: {0}", utils.binaryForm(RawInput[0]))); - } - // salvo il solo BYTE dell'input decifrando il semaforo... - decodeToBaseBitmap(); - decodeOtherData(); - // riporto bitmap... - reportRawInput(ref currDispData); - } - catch - { - currDispData.semIn = Semaforo.SR; - } - } - - /// - /// wrapper chiamata LETTURA in blocco MULTI BYTE dell'area read DI DEFAULT... - /// - /// - /// - public bool S7ReadBB(ref byte[] Value) - { - return S7ReadBB(ref Value, parametri.memAddrRead, parametri.memSizeRead); - } - - /// - /// wrapper chiamata LETTURA in blocco MULTI BYTE... - /// - /// MATRICE valori letti - /// Area memoria da leggere... - /// Numero byte da leggere - /// - public bool S7ReadBB(ref byte[] Value, string memAddrRead, int numByte) - { - bool answ = false; - if (Value != null) - { - sw.Restart(); - parentForm.commPlcActive = true; - if (testCncConn()) - { - // decodifico memoria... - memAreaSiemens memoria = new memAreaSiemens(memAddrRead); - Byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte); - // copio in value, sennò do errore... - if (memByteRead.Length == Value.Length) - { - Value = memByteRead; - answ = true; - } - else - { - lgError($"Mismatch dimensione array memoria: indirizzo: {memAddrRead} | passato array di {Value.Length} byte, letti da S7 {memByteRead.Length} byte"); - numErroriCheck++; - } - // loggo lettura... - if (verboseLog) - { - StringBuilder sb = new StringBuilder(); - sb.AppendLine(lineSep); - sb.AppendLine($"READ BLOCK MEM BYTE: {parametri.memAddrRead} --> {numByte} byte"); - sb.AppendLine($"Contenuto area memoria acquisita:"); - string byteVal = ""; - for (int i = 0; i < memByteRead.Length; i++) - { - byteVal = Convert.ToString(memByteRead[i], 2).PadLeft(8, '0'); - sb.AppendLine($"B{i:000}: {byteVal} | {memByteRead[i]}"); - } - sb.AppendLine(lineSep); - lgInfo(sb.ToString()); - } - } - else - { - connectionOk = false; - } - parentForm.commPlcActive = false; - sw.Stop(); - if (utils.CRB("recTime")) - { - TimingData.addResult(cIobConf.codIOB, string.Format("{0}|{1}", parametri.memAddrRead, numByte), sw.ElapsedTicks); - } - } - // se supero soglia errori lettura --> disconnetto e resetto - if (numErroriCheck > maxErroriCheck) - { - lgInfo($"numErroriCheck: {numErroriCheck} --> richiesta disconnessione adapter con tryDisconnect"); - numErroriCheck = 0; - tryDisconnect(); - } - - return answ; - } - - /// - /// wrapper chiamata LETTURA in blocco MULTI BYTE... default size a parametri.memSizeRead - /// - /// - /// Area memoria da leggere... - /// - public bool S7ReadBB(ref byte[] Value, string memAddrRead) - { - bool answ = false; - answ = S7ReadBB(ref Value, memAddrRead, parametri.memSizeRead); - return answ; - } - - /// - /// wrapper chiamata SCRITTURA in blocco MULTI BYTE, DI DEFAULT su area configurata x - /// scrittura CONTINUA... - /// - /// - /// - public bool S7WriteBB(ref byte[] Value) - { - return S7WriteBB(ref Value, parametri.memAddrWrite); - } - - /// - /// Override scrittura in area DBB - /// - /// - /// - /// - public bool S7WriteBB(ref byte[] Value, string memAddrWrite) - { - bool answ = false; - if (Value == null) - { - lgError($"Errore in S7WriteBB: Value = null"); - } - else - { - if (string.IsNullOrEmpty(memAddrWrite)) - { - lgError($"Errore in S7WriteBB: memAddrWrite = vuoto"); - } - else - { - sw.Restart(); - if (testCncConn()) - { - try - { - // decodifico memoria... - memAreaSiemens memoria = new memAreaSiemens(memAddrWrite); - int numByte = Value.Length; - ErrorCode errorCode = currPLC.WriteBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, Value); - switch (errorCode) - { - case ErrorCode.NoError: - answ = true; - maybeLogWrite(memAddrWrite, $"S7WriteBB-01 Effettuata correttamente scrittura su PLC: MEMORIA {memAddrWrite} | numByte: {Value.Length} | ValOriginale: {BitConverter.ToString(Value)}"); - break; - - case ErrorCode.WrongCPU_Type: - case ErrorCode.ConnectionError: - case ErrorCode.IPAddressNotAvailable: - case ErrorCode.WrongVarFormat: - case ErrorCode.WrongNumberReceivedBytes: - case ErrorCode.SendData: - case ErrorCode.ReadData: - case ErrorCode.WriteData: - lgError($"Errore in S7WriteBB su {memAddrWrite}: {errorCode.ToString()} | numByte: {Value.Length}| {Value.ValToBinString()}"); - answ = false; - break; - - default: - break; - } - } - catch (Exception exc) - { - lgError($"Eccezione in S7WriteBB | memAddrWrite {memAddrWrite} | numByte: {Value.Length}{Environment.NewLine}{exc}"); - } - } - sw.Stop(); - } - } - return answ; - } - - /// - /// Override scrittura in area DBB - /// - /// Valore byte[] da scrivere - /// Numero del DB (es 700 per DB700) - /// Indice interno al datablock del byte da cui partire - /// - public bool S7WriteBB(ref byte[] Value, int DbNum, int IndiceMem) - { - bool answ = false; - if (Value == null) - { - lgError($"Errore in S7WriteBB: Value è null"); - } - else - { - if (DbNum < 0 || IndiceMem < 0) - { - lgError($"Errore in S7WriteBB | DbNum: {DbNum} | IndiceMem: {IndiceMem}"); - } - else - { - sw.Restart(); - if (testCncConn()) - { - try - { - int numByte = Value.Length; - ErrorCode errorCode = currPLC.WriteBytes(DataType.DataBlock, DbNum, IndiceMem, Value); - switch (errorCode) - { - case ErrorCode.NoError: - lgInfo($"S7WriteBB-02 Effettuata correttamente scrittura su PLC: DB {DbNum}.{IndiceMem} | numByte: {Value.Length}| {Value.ValToBinString()}"); - break; - - case ErrorCode.WrongCPU_Type: - case ErrorCode.ConnectionError: - case ErrorCode.IPAddressNotAvailable: - case ErrorCode.WrongVarFormat: - case ErrorCode.WrongNumberReceivedBytes: - case ErrorCode.SendData: - case ErrorCode.ReadData: - case ErrorCode.WriteData: - lgError($"Errore in S7WriteBB su DB {DbNum}.{IndiceMem}: {errorCode.ToString()} | numByte: {Value.Length}| {Value.ValToBinString()}"); - break; - - default: - break; - } - answ = true; - } - catch (Exception exc) - { - lgError($"Eccezione in S7WriteBB: DbNum {DbNum}, IndiceMem: {IndiceMem}, numByte: {Value.Length}{Environment.NewLine}{exc}"); - } - } - sw.Stop(); - } - } - return answ; - } - - /// - /// Salvo in memblock il valore DInt indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Posizione inizio scrittura - /// Valore da scrivere - public void saveDIntOnMemBlock(ref byte[] MemBlock, int startPos, string valore) - { - try - { - lgInfo($"saveDIntOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | valore: {valore}"); - - int valInt = 0; - int.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.DInt.ToByteArray(valInt); - int byteLen = 4; - Buffer.BlockCopy(strByte, 0, MemBlock, startPos, byteLen); - //var verifica = S7.Net.Types.String.FromByteArray(MemBlock); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DINT {valore} alla posizione {startPos} byte{Environment.NewLine}{exc}"); - } - } - - /// - /// Salvo in memblock il valore DInt indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Valore da scrivere - /// Posizione inizio scrittura - public void saveDIntOnMemBlock(ref byte[] MemBlock, string stringKey, int startPos) - { - if (currProdData.ContainsKey(stringKey)) - { - try - { - string valore = currProdData[stringKey]; - lgInfo($"saveDIntOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | key: {stringKey} | valore: {valore}"); - saveDIntOnMemBlock(ref MemBlock, startPos, valore); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DINT {stringKey}{Environment.NewLine}{exc}"); - } - } - } - - /// - /// Salvo in memblock il valore DInt indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Posizione inizio scrittura - /// Valore da scrivere - public void saveDWordOnMemBlock(ref byte[] MemBlock, int startPos, string valore) - { - try - { - lgInfo($"saveDWordOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | valore: {valore}"); - byte[] stringPar = new byte[4]; - int valInt = 0; - int.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.DInt.ToByteArray(valInt); - int byteLen = 4; - Buffer.BlockCopy(strByte, 0, MemBlock, startPos, byteLen); - //var verifica = S7.Net.Types.String.FromByteArray(MemBlock); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DWord {valore} alla posizione {startPos} byte{Environment.NewLine}{exc}"); - } - } - - /// - /// Salvo in memblock il valore DInt indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Valore da scrivere - /// Posizione inizio scrittura - public void saveDWordOnMemBlock(ref byte[] MemBlock, string stringKey, int startPos) - { - if (currProdData.ContainsKey(stringKey)) - { - try - { - string valore = currProdData[stringKey]; - lgInfo($"saveDWordOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | key: {stringKey} | valore: {valore}"); - saveDIntOnMemBlock(ref MemBlock, startPos, valore); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DINT {stringKey}{Environment.NewLine}{exc}"); - } - } - } - - /// - /// Salvo in memblock il valore Int indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Posizione inizio scrittura - /// valore da scrivere - public void saveIntOnMemBlock(ref byte[] MemBlock, int startPos, string valore) - { - try - { - lgInfo($"saveIntOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | valore: {valore}"); - short valInt = 0; - short.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.Int.ToByteArray(valInt); - int byteLen = 2; - Buffer.BlockCopy(strByte, 0, MemBlock, startPos, byteLen); - //var verifica = S7.Net.Types.String.FromByteArray(MemBlock); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura INT {valore} alla posizione {startPos} byte{Environment.NewLine}{exc}"); - } - } - - /// - /// Salvo in memblock il valore Int indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Nome del parametro da recuperare da prodData x scrivere - /// Posizione inizio scrittura - public void saveIntOnMemBlock(ref byte[] MemBlock, string stringKey, int startPos) - { - if (currProdData.ContainsKey(stringKey)) - { - try - { - string valore = currProdData[stringKey]; - lgInfo($"saveIntOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | key: {stringKey} | valore: {valore}"); - saveIntOnMemBlock(ref MemBlock, startPos, valore); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura INT {stringKey}{Environment.NewLine}{exc}"); - } - } - } - - /// - /// Salvo in memblock il valore stringa indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Posizione inizio scrittura - /// Valore scrivere - public void saveRealOnMemBlock(ref byte[] MemBlock, int startPos, string valore) - { - try - { - byte[] stringPar = new byte[2]; - lgInfo($"saveRealOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | valore: {valore}"); - - double valReal = 0; - double.TryParse(valore, out valReal); - byte[] strByte = S7.Net.Types.Double.ToByteArray(valReal); - int byteLen = 4; - Buffer.BlockCopy(strByte, 0, MemBlock, startPos, byteLen); - //var verifica = S7.Net.Types.String.FromByteArray(MemBlock); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura REAL {valore} alla posizione {startPos} byte{Environment.NewLine}{exc}"); - } - } - - /// - /// Salvo in memblock il valore stringa indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Valore scrivere - /// Posizione inizio scrittura - public void saveRealOnMemBlock(ref byte[] MemBlock, string stringKey, int startPos) - { - if (currProdData.ContainsKey(stringKey)) - { - try - { - string valore = currProdData[stringKey]; - lgInfo($"saveRealOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | key: {stringKey} | valore: {valore}"); - saveRealOnMemBlock(ref MemBlock, startPos, valore); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura REAL {stringKey}{Environment.NewLine}{exc}"); - } - } - } - - /// - /// Salvo in memblock il valore stringa indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Posizione inizio scrittura - /// - /// Lunghezza max stringa (se ci sono 2 byte iniziali verrà ridotta di 2) - /// - /// valore da scrivere - public void saveStringOnMemBlock(ref byte[] MemBlock, int startPos, int totLen, string valore) - { - if (MemBlock != null) - { - // loggare valore? fornire un output con memBlock e NON ref? - try - { - lgInfo($"saveStringOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | totLen: {totLen} | valore: {valore}"); - byte[] stringPar = new byte[2]; - byte[] strByte = S7.Net.Types.String.ToByteArray(valore); - // eventuale decremento val lungh totale... - totLen = writePre ? totLen - 2 : totLen; - int byteLen = strByte.Length <= totLen ? strByte.Length : totLen; - int shiftStrByte = writePre ? 2 : 0; - if (writePre) - { - // MAX LUN - stringPar[1] = (byte)totLen; - // LUNGH STRING - stringPar[0] = (byte)byteLen; - Buffer.BlockCopy(stringPar, 0, MemBlock, startPos, shiftStrByte); - } - Buffer.BlockCopy(strByte, 0, MemBlock, startPos + shiftStrByte, byteLen); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura {valore} alla posizione {startPos} per {totLen} byte{Environment.NewLine}{exc}"); - } - } - else - { - lgError("Errore: MemBlock nullo"); - } - } - - /// - /// Salvo in memblock il valore stringa indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Nome del parametro da recuperare da prodData x scrivere - /// Posizione inizio scrittura - /// - /// Lunghezza max stringa (se ci sono 2 byte iniziali verrà ridotta di 2) - /// - public void saveStringOnMemBlock(ref byte[] MemBlock, string stringKey, int startPos, int totLen) - { - if (currProdData.ContainsKey(stringKey)) - { - try - { - string valore = currProdData[stringKey]; - saveStringOnMemBlock(ref MemBlock, startPos, totLen, valore); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura x key {stringKey}{Environment.NewLine}{exc}"); - } - } - } - - /// - /// Salvo in memblock il valore DInt indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Posizione inizio scrittura - /// Valore da scrivere - public void saveWordOnMemBlock(ref byte[] MemBlock, int startPos, string valore) - { - try - { - lgInfo($"saveWordOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | valore: {valore}"); - byte[] stringPar = new byte[4]; - int valInt = 0; - int.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.DInt.ToByteArray(valInt); - int byteLen = 4; - Buffer.BlockCopy(strByte, 0, MemBlock, startPos, byteLen); - //var verifica = S7.Net.Types.String.FromByteArray(MemBlock); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura Word {valore} alla posizione {startPos} byte{Environment.NewLine}{exc}"); - } - } - - /// - /// Salvo in memblock il valore DInt indicato con formattazione siemens - /// - /// Blocco memoria come byte[] dove scrivere - /// Valore da scrivere - /// Posizione inizio scrittura - public void saveWordOnMemBlock(ref byte[] MemBlock, string stringKey, int startPos) - { - if (currProdData.ContainsKey(stringKey)) - { - try - { - string valore = currProdData[stringKey]; - lgInfo($"saveWordOnMemBlock: MemBlock size: {MemBlock.Length} | startPos: {startPos} | key: {stringKey} | valore: {valore}"); - saveDIntOnMemBlock(ref MemBlock, startPos, valore); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura DINT {stringKey}{Environment.NewLine}{exc}"); - } - } - } - - /// - /// Converte direttamente un valore stringa su un oggetto byte[] (senza limitazioni di dimensione) - /// - /// - /// Dimensione massima ammessa per la stringa - /// - public byte[] stringToByte(string valore, int maxLenght) - { - byte[] answ = new byte[1]; - byte[] stringPar = new byte[2]; - byte[] strByte = S7.Net.Types.String.ToByteArray(valore); - int shiftStrByte = writePre ? 2 : 0; - int byteLen = strByte.Length <= maxLenght ? strByte.Length : maxLenght; - if (writePre) - { - // MAX LUN - stringPar[1] = (byte)maxLenght; - // LUNGH STRING - stringPar[0] = (byte)byteLen; - Buffer.BlockCopy(stringPar, 0, answ, 0, shiftStrByte); - } - Buffer.BlockCopy(strByte, 0, answ, shiftStrByte, byteLen); - return answ; - } - - /// - /// Override connessione - /// - public override void tryConnect() - { - bool doLog = (verboseLog || periodicLog); - lgInfoStartup("SIEMENS: tryConnect step 01"); - if (!connectionOk) - { - // SE è necessario refresh... - if (needRefresh) - { - lgInfoStartup("SIEMENS: tryConnect step 02"); - - // reimporto parametri PLC se necessario... - setParamPlc(); - } - lgInfoStartup("SIEMENS: tryConnect step 03"); - - // controllo che il ping sia stato tentato almeno pingTestSec fa... - if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec")) - { - if (doLog) - { - lgInfoStartup("SIEMENS: ConnKO - tryConnect"); - } - lgInfoStartup("SIEMENS: tryConnect step 04"); - - // in primis salvo data ping... - lastPING = DateTime.Now; - // se passa il ping faccio il resto... - if (testPingMachine == IPStatus.Success) - { - string szStatusConnection = "ND"; - try - { - // ora provo connessione... - parentForm.commPlcActive = true; - currPLC.Open(); - szStatusConnection = "OPEN"; - parentForm.commPlcActive = false; - connectionOk = true; - lgInfoStartup($"StatusConnection: {szStatusConnection}"); - // refresh stato allarmi!!! - if (connectionOk) - { - queueInEnabCurr = true; - if (adpRunning) - { - lgInfo($"Connessione OK: {connectionOk} | adpRunning: {adpRunning}"); - } - } - else - { - lgError("Impossibile procedere, connessione mancante..."); - } - } - catch (Exception exc) - { - lgFatal($"Errore in TryConnect adapter SIEMENS | szStatusConnection {szStatusConnection}{Environment.NewLine}{exc}"); - connectionOk = false; - needRefresh = true; - } - } - else - { - // loggo no risposta ping ... - connectionOk = false; - if (doLog) - { - lgInfo($"Attenzione: SIEMENS controllo PING fallito per IP {cIobConf.cncPingAddr}"); - } - } - } - } - // se non è ancora connesso faccio procesisng memoria caso disconnesso... - if (!connectionOk) - { - // processo semafori ed invio... - processMemoryDiscon(); - } - } - - /// - /// Override disconnessione - /// - public override void tryDisconnect() - { - if (connectionOk) - { - string szStatusConnection = ""; - try - { - currPLC.Close(); - connectionOk = false; - queueInEnabCurr = false; - lgInfo(szStatusConnection); - lgInfo("Effettuata disconnessione adapter SIEMENS!"); - } - catch (Exception exc) - { - lgFatal(exc, "Errore nella disconnessione dall'adapter SIEMENS"); - } - } - else - { - lgError("IMPOSSIBILE effettuare disconnessione SIEMENS: Connessione non disponibile..."); - } - } - - /// - /// Converte direttamente un valore UInt16 su un oggetto byte[2] - /// - /// valore da scrivere - public byte[] wordToByte(string valore) - { - byte[] answ = new byte[2]; - try - { - ushort valInt = 0; - ushort.TryParse(valore, out valInt); - byte[] strByte = S7.Net.Types.Word.ToByteArray(valInt); - int byteLen = 2; - Buffer.BlockCopy(strByte, 0, answ, 0, byteLen); - } - catch (Exception exc) - { - lgError($"Errore in gestione scrittura INT {valore} in byte{Environment.NewLine}{exc}"); - } - return answ; - } - - #endregion Public Methods - - #region Protected Fields - - /// - /// Oggetto PLC da ri-utilizzare... - /// - protected Plc currPLC; - - /// - /// Ultimo controllo ping x evitare ping flood... - /// - protected DateTime lastPingConn = DateTime.Now.AddMinutes(-10); - - /// - /// Esito ultimo ping - /// - protected bool lastPingOk = false; - - /// - /// Lungh massima stringhe - /// - protected int maxStrChar = 20; - - /// - /// parametri di connessione - /// - protected connParamS7 parametri; - - /// - /// Oggetto cronometro x test vari... - /// - protected Stopwatch sw = new Stopwatch(); - - /// - /// indica se scrivere i primi byte x string siemens x indicare lung max e corrente - /// - protected bool writePre = true; - - #endregion Protected Fields - - #region Protected Properties - - /// - /// Dizionario delle ultime operazioni di scrittura per OGNI memoria (in modo che fa log - /// ogni x sec...) - /// - protected Dictionary lastMemWrite { get; set; } = new Dictionary(); - - #endregion Protected Properties - - #region Protected Methods - - /// - /// decodifica da bitmap il CURRENT MODE del controllo - /// - /// - /// - protected virtual string decodeCurrMode(byte currModeBitmap) - { - string answ = ""; - if (verboseLog) - { - lgInfo(string.Format("CURR_MODE raw data: {0}", utils.binaryForm(currModeBitmap))); - } - // decodifica del MODO... B21 - /* - * CURR MODE diviso in BIT: - * B0 (01) = AUTO - * B1 (02) = MDI - * B2 (04) = JOG - * B3 (08) = TeachIN (associato a MDI --> 10) - * B4 (16) = Repos (associato a JOG --> 20) - * B5 (32) = RefPoint (associato a Jog --> 36) - * B6 (64) = Incr1 (associato a Jog --> 68) - * B7 (128) = Incr10 (associato a Jog --> -124 / 132 se UInt) - * */ - - // modi principali - if (currModeBitmap.SelectBit(0)) - { - answ = "AUTO"; - } - else if (currModeBitmap.SelectBit(1)) - { - answ = "MDI"; - } - else if (currModeBitmap.SelectBit(2)) - { - answ = "JOG"; - } - // modi accessori - if (currModeBitmap.SelectBit(3)) - { - answ += " | TEACH-IN"; - } - if (currModeBitmap.SelectBit(4)) - { - answ += " | REPOS"; - } - if (currModeBitmap.SelectBit(5)) - { - answ += " | REF-POINT"; - } - if (currModeBitmap.SelectBit(6)) - { - answ += " | INCR-1"; - } - if (currModeBitmap.SelectBit(7)) - { - answ += " | INCR-10"; - } - return answ; - } - - /// - /// Decodifica il resto dell'area x i dati accessori (allarmi, ...) - /// - protected virtual void decodeOtherData() - { - if (verboseLog) - { - } - } - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected virtual void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - } - - /// - /// Restituisce path completo file da chiave configurazione - /// - /// chiave conf x file richiesto - /// - protected string filePath(string keyFile) - { - string answ = ""; - try - { - answ = $"{utils.confDir}\\{utils.CRS(keyFile)}"; - } - catch (Exception exc) - { - lgError(exc, "Eccezione in recupero filePath"); - } - return answ; - } - - /// - /// Verifica presenza allarmi (tra quelli configurati) - /// - protected override bool hasAlarms() - { - bool answ = false; - int numErrors = 0; - uint currStatus = 0; - if (alarmMaps != null) - { - // leggo a ciclo le aree degli allarmi CONFIGURATI, se ne trovo --> segnalo allarme... - foreach (var item in alarmMaps) - { - // banchi in WORD (2 byte) --> scompongo - for (int i = 0; i < item.size / 2; i++) - { - currStatus = S7.Net.Types.Counter.FromByteArray(RawInput.Skip(item.index + 2 * i).Take(2).ToArray()); - // verifica e decremento blink... - item.checkBlinkCounter(i, (uint)currStatus); - - // verifico SE sia variato... confronto allarmi filtrato stile blink per bit status: - // - allarmi che iniziano per # IGNORATI - // - altri allarmi con un countdown da MAX_COUNTER_BLINK a 0 per il fronte - // di discesa - if (item.isChanged(i, currStatus)) - { - if (currStatus > 0) - { - numErrors++; - } - // registro gli allarmi attivi e trasmetto... - if (sendAlarmVariations(item.memAddr, i, item.alarmsState[i], (uint)(item.alarmsMask[i] & currStatus), item.messages)) - { - // se inviato --> salvo stato da current... - item.updStatusVal(i, (uint)(item.alarmsMask[i] & currStatus)); - } - } - } - } - } - answ = numErrors > 0; - return answ; - } - - /// - /// Override metodo x scrittura parametri su PLC - /// - /// - protected override void plcWriteParams(ref List updatedPar) - { - dataConf currMem = null; - int byteSize = 0; - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - bool fatto = false; - string serObj = ""; - if (updatedPar != null) - { - // controllo i parametri... ne gestisco 4... - foreach (var item in updatedPar) - { - try - { - memAddrWrite = ""; - int valInt = 0; - uint valUInt = 0; - // cerco in area memMapWrite... - if (memMap.mMapWrite.ContainsKey(item.uid)) - { - // recupero! - currMem = memMap.mMapWrite[item.uid]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - // faccio preliminarmente upsertKey... - upsertKey(currMem.name, currMem.value); - serObj = JsonConvert.SerializeObject(item, Formatting.Indented); - lgInfo($"Inizio processing plcWriteParams per {currMem.name} | valore richiesto {currMem.value}{Environment.NewLine}---------------UPDATED PARAM---------------{Environment.NewLine}{serObj}{Environment.NewLine}---------------"); - serObj = JsonConvert.SerializeObject(currMem, Formatting.Indented); - lgInfo($"---------------MEMORY CONTENT---------------{Environment.NewLine}{serObj}{Environment.NewLine}---------------"); - switch (currMem.tipoMem) - { - case plcDataType.Boolean: - break; - - case plcDataType.Int: - valInt = getScaledInt(currMem); - saveIntOnMemBlock(ref MemBlock, 0, valInt.ToString()); - break; - - case plcDataType.DInt: - valInt = getScaledInt(currMem); - saveDIntOnMemBlock(ref MemBlock, 0, valInt.ToString()); - break; - - case plcDataType.Word: - valUInt = getScaledUInt(currMem); - saveWordOnMemBlock(ref MemBlock, 0, valInt.ToString()); - break; - - case plcDataType.DWord: - valUInt = getScaledUInt(currMem); - saveDWordOnMemBlock(ref MemBlock, 0, valInt.ToString()); - break; - - case plcDataType.Real: - saveRealOnMemBlock(ref MemBlock, 0, currMem.value); - break; - - case plcDataType.String: - // se ho writePre --> "allungo" di 2 la dimensione della stringa - // x MemBlock... - if (writePre) - { - MemBlock = new byte[byteSize + 2]; - } - saveStringOnMemBlock(ref MemBlock, 0, currMem.size, currMem.value); - break; - - default: - break; - } - lgInfo($"Preparo scrittura{Environment.NewLine}---------------MemBlock data---------------{Environment.NewLine}{BitConverter.ToString(MemBlock)}{Environment.NewLine}--------------- END data ---------------"); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo su siemens - fatto = S7WriteBB(ref MemBlock, memAddrWrite); - // se fatto --> aggiorno! - if (fatto) - { - item.value = item.reqValue; - item.reqValue = ""; - item.lastRead = DateTime.Now; - } - // se configurato faccio verifica write... - if (getOptPar("WRITE_CHECK") == "TRUE") - { - byte[] MemBlockRead = new byte[MemBlock.Length]; - S7ReadBB(ref MemBlockRead, memAddrWrite, MemBlock.Length); - // se non corrispondessero loggo! - if (!MemBlock.SequenceEqual(MemBlockRead)) - { - lgError($"Errore: mancata corrispondenza tra dati scritti e letti:{Environment.NewLine}Write: {BitConverter.ToString(MemBlock)}{Environment.NewLine}read: {BitConverter.ToString(MemBlockRead)}"); - } - else - { - lgInfo($"Scrittura corretta: {BitConverter.ToString(MemBlockRead)}"); - } - } - } - else - { - lgInfo($"Errore: memAddrWrite vuoto!"); - } - } - else - { - lgInfo($"Errore uid non trovato in area write memory: {item.uid}, ci sono {memMap.mMapWrite.Count} in area write"); - } - } - catch (Exception exc) - { - lgError($"Eccezione in fase di plcWriteParams per item {item.uid} con valore {item.value}{Environment.NewLine}{exc}"); - } - } - } - } - - /// - /// Imposto parametri PLC - /// - protected override void setParamPlc() - { - // Creo oggetto connessione NC - parentForm.commPlcActive = true; - lgInfoStartup("Start init Adapter SIEMENS all'IP {0} | CPU: {1} | R/S: {2}/{3} | --> IOB {4}", cIobConf.cncIpAddr, cIobConf.cpuType, cIobConf.rack, cIobConf.slot, cIobConf.codIOB); - // SE è necessario refresh... - if (needRefresh) - { - lgInfoStartup("Refreshing connection..."); - if (parametri != null) - { - try - { - parametri.slot = cIobConf.slot; - parametri.rack = cIobConf.rack; - parametri.tipoCpu = (CpuType)Enum.Parse(typeof(CpuType), cIobConf.cpuType); - parametri.ipAdrr = cIobConf.cncIpAddr; - // leggo file init... - lgInfoStartup("Reading ini file..."); - IniFile fIni = new IniFile(cIobConf.iniFileName); - // ora leggo valori speciali - parametri.memAddrRead = fIni.ReadString("MEMORY", "ADDR_READ", ""); - parametri.memAddrWrite = fIni.ReadString("MEMORY", "ADDR_WRITE", ""); - parametri.memSizeRead = fIni.ReadInteger("MEMORY", "SIZE_READ", 0); - parametri.memSizeWrite = fIni.ReadInteger("MEMORY", "SIZE_WRITE", 0); - // salvo vettori memoria... - lgInfoStartup("Set RawInput dimensions..."); - RawInput = new byte[parametri.memSizeRead]; - RawOutput = new byte[parametri.memSizeWrite]; - // salvo parametri conn! - lgInfoStartup(string.Format("Parametri memoria: memAddrRead: {0} | memAddrWrite: {1} | memSizeRead: {2} | memSizeWrite: {3}", parametri.memAddrRead, parametri.memAddrWrite, parametri.memSizeRead, parametri.memSizeWrite)); - } - catch (Exception exc) - { - lgError(exc, "Errore in parse parametri da IOBConf"); - } - // ora tento avvio PLC... SE PING OK... - IPStatus esitoPing = testPingMachine; - if (esitoPing == IPStatus.Success) - { - needRefresh = false; - try - { - currPLC = new Plc(parametri.tipoCpu, parametri.ipAdrr, parametri.rack, parametri.slot); - // disconnetto e connetto... - if (isVerboseLog) - { - lgInfo("SIEMENS: tryDisconnect"); - } - - tryDisconnect(); - // lo ripeto x evitare che ci sia un loop... e tryConnect richiami la - // procedura corrente... - needRefresh = false; - lgInfoStartup("SIEMENS: tryConnect"); - lastConnectTry = DateTime.Now; - tryConnect(); - lgInfoStartup("End init Adapter SIEMENS"); - if (isVerboseLog) - { - lgInfo("S7+ CONNESSIONE AVVENUTA"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in INIT PLC S7+"); - } - } - else - { - lgError($"IOB SIEMENS | Errore in ping: esito {esitoPing}"); - } - parentForm.commPlcActive = false; - // carico conf vettore memoria... - loadMemConf(); - bool enableByApp = utils.CRB("enableContapezzi"); - bool enableByIob = (getOptPar("ENABLE_PZCOUNT") == "TRUE"); - bool disableByIob = (getOptPar("DISABLE_PZCOUNT") == "TRUE"); - if ((enableByApp || enableByIob) && !(disableByIob)) - { - lgDebug("SIEMENS: inizio gestione contapezzi"); - try - { - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, - // con indicazione area) - if (cIobConf.optPar.Count > 0 && !string.IsNullOrWhiteSpace(getOptPar("PZCOUNT_MODE"))) - { - if (getOptPar("PZCOUNT_MODE").StartsWith("STD")) - { - lgDebug("Init contapezzi SIEMENS: pzCntReload(true)"); - pzCntReload(true); - // refresh associazione Macchina - IOB - SendM2IOB(); - // invio altri dati accessori... - SendMachineConf(); - // per adesso imposto lettura PLC == contapezzi (poi farà vera lettura...) - contapezziPLC = contapezziIOB; - } - else - { - contapezziIOB = 0; - lgDebug("Contapezzi STD disabilitato: modalità {0}", getOptPar("PZCOUNT_MODE")); - } - } - else - { - contapezziIOB = 0; - lgDebug("Parametro mancante PZCOUNT_MODE"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in contapezzi SIEMENS"); - } - } - } - else - { - lgError("Parametri null!"); - } - } - } - - /// - /// Test connessione CNC - /// - /// - protected bool testCncConn() - { - bool answ = false; - // riduco i controlli ping.. li faccio solo ogni 5 ping period se precedente positivo... - DateTime adesso = DateTime.Now; - if (lastPingOk && adesso.Subtract(lastPingConn).TotalMilliseconds < 5 * parametri.pingMsTimeout) - { - answ = lastPingOk; - } - else - { - IPStatus pingStatus = testPingMachine; - - // se non ok riprovo 1 volta dopo attesa - if (pingStatus != IPStatus.Success) - { - Thread.Sleep(2 * cIobConf.pingMsTimeout); - pingStatus = testPingMachine; - } - // se non passa ancora errore! - if (pingStatus != IPStatus.Success) - { - lgError($"Errore in testCncConn | reply Status {pingStatus} | IP: {parametri.ipAdrr} | T.Out: {parametri.pingMsTimeout}ms"); - } - // se passa il ping faccio il resto... - else - { - if (!currPLC.IsConnected) - { - currPLC.Open(); - } - - if (!currPLC.IsAvailable) - { - lgError($"PLC Siemens NON disponibile:{currPLC.LastErrorCode} | {currPLC.LastErrorString}"); - currPLC.ClearLastError(); - } - else - { - if (!currPLC.IsConnected) - { - lgError($"PLC Siemens NON connesso:{currPLC.LastErrorCode} | {currPLC.LastErrorString}"); - currPLC.ClearLastError(); - parentForm.updateComStats("NO connection"); - } - else - { - // tutto ok - parentForm.updateComStats("Connection OK"); - answ = true; - } - } - } - // salvo stato ping - lastPingOk = answ; - lastPingConn = adesso; - } - - return answ; - } - - #endregion Protected Methods - - #region Private Methods - - private static int getScaledInt(dataConf currMem) - { - int valInt; - // prima faccio eventuale fattore di scala... - int.TryParse(currMem.value, out valInt); - if (currMem.factor != 1) - { - valInt = (int)(valInt * currMem.factor); - } - - return valInt; - } - - private static uint getScaledUInt(dataConf currMem) - { - uint valUInt; - // prima faccio eventuale fattore di scala... - uint.TryParse(currMem.value, out valUInt); - if (currMem.factor != 1) - { - valUInt = valUInt * (uint)currMem.factor; - } - - return valUInt; - } - - /// - /// Verifica SE sia il caso di fare il log della memoria indicata - /// - /// - /// - private void maybeLogWrite(string memAddrWrite, string logValue) - { - bool doWrite = true; - DateTime adesso = DateTime.Now; - if (!lastMemWrite.ContainsKey(memAddrWrite)) - { - lastMemWrite.Add(memAddrWrite, adesso.AddMinutes(-1)); - } - // ora mi leggo valore ultima scrittura e confronto con adesso - try - { - doWrite = (lastMemWrite[memAddrWrite].AddSeconds(vetoSeconds) < adesso); - } - catch (Exception exc) - { - lgError($"Eccezione in maybeLogWrite{Environment.NewLine}{exc}"); - } - // se encessario --> LOG! - if (doWrite) - { - // 2022.03.16 portato a livello TRACE x evitare log troppo verboso - lgTrace(logValue); - lastMemWrite[memAddrWrite] = adesso; - } - } - - /// - /// Effettua lettura del contatore e restitusice la stringa grezza del dato - /// - /// - /// - private string readCountVal(ref string memAddrPzCount) - { - object outputVal = new object(); - string strOutVal; - // cerco i pezzi contati STANDARD - if (memAddrPzCount.StartsWith("STD")) - { - // inizio verifica area memoria/parametro levando prima parte codice - memAddrPzCount = memAddrPzCount.Replace("STD.", ""); - // verifico se si tratta di lettura area DB... formato tipo STD.DB700.DBB22.W - if (memAddrPzCount.StartsWith("DB")) - { - memAreaSiemens areaCounter = new memAreaSiemens(memAddrPzCount); - - if (isVerboseLog) - { - lgInfo("DB [0] area memoria: {1}.{2}.{3}", memAddrPzCount, areaCounter.DbNum, areaCounter.indiceMem, areaCounter.tipoMem); - } - // copio da blocco già letto... con switch x tipo dati --> tipo lettura... e - // salvo ultimo conteggio rilevato - switch (areaCounter.tipoMem) - { - case "B": - byte valB = RawInput[areaCounter.indiceMem]; - outputVal = valB; - break; - - case "W": - ushort valW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(2).ToArray()); - outputVal = valW; - break; - - case "DW": - uint valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(4).ToArray()); - outputVal = valDW; - break; - - case "DI": - int valSDW = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(4).ToArray()); - outputVal = valSDW; - break; - - case "RE": - double valRe = S7.Net.Types.Double.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(4).ToArray()); - outputVal = valRe; - break; - - default: - break; - } - } - } - else if (memAddrPzCount.StartsWith("SPEC")) - { - // inizio verifica area memoria/parametro levando prima parte codice - memAddrPzCount = memAddrPzCount.Replace("SPEC.", ""); - // verifico se si tratta di lettura area DB... formato tipo SPEC.DB700.DBB22.W - if (memAddrPzCount.StartsWith("DB")) - { - memAreaSiemens areaCounter = new memAreaSiemens(memAddrPzCount); - - if (isVerboseLog) - { - lgInfo("SPEC [0] area memoria: {1}.{2}.{3}", memAddrPzCount, areaCounter.DbNum, areaCounter.indiceMem, areaCounter.tipoMem); - } - // leggo i dati SPECIFICI... - byte[] MemBlockPZ = new byte[8]; - bool fatto = false; - // copio da blocco LEGGENDO con switch x tipo dati --> tipo lettura... e salvo - // ultimo conteggio rilevato - switch (areaCounter.tipoMem) - { - case "B": - MemBlockPZ = new byte[1]; - fatto = S7ReadBB(ref MemBlockPZ, memAddrPzCount, 1); - outputVal = MemBlockPZ[0]; - break; - - case "W": - MemBlockPZ = new byte[2]; - fatto = S7ReadBB(ref MemBlockPZ, memAddrPzCount, 2); - ushort valW = S7.Net.Types.Word.FromByteArray(MemBlockPZ.ToArray()); - outputVal = valW; - break; - - case "DW": - MemBlockPZ = new byte[4]; - fatto = S7ReadBB(ref MemBlockPZ, memAddrPzCount, 4); - uint valDW = S7.Net.Types.DWord.FromByteArray(MemBlockPZ.ToArray()); - outputVal = valDW; - break; - - case "DI": - MemBlockPZ = new byte[4]; - fatto = S7ReadBB(ref MemBlockPZ, memAddrPzCount, 4); - int valSDW = S7.Net.Types.DInt.FromByteArray(MemBlockPZ.ToArray()); - outputVal = valSDW; - break; - - case "RE": - MemBlockPZ = new byte[4]; - fatto = S7ReadBB(ref MemBlockPZ, memAddrPzCount, 4); - double valRe = S7.Net.Types.Double.FromByteArray(MemBlockPZ.ToArray()); - outputVal = valRe; - break; - - default: - break; - } - } - } - strOutVal = $"{outputVal}"; - return strOutVal; - } - - #endregion Private Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensAprochim.cs b/IOB-WIN-NEXT/IobSiemens/SiemensAprochim.cs deleted file mode 100644 index 5c41ae5c..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensAprochim.cs +++ /dev/null @@ -1,222 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti Aprochim /MacDermid - /// - public class SiemensAprochim : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS Aprochim (impianti filtrazione in Jetco, gruppo macDermid) - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB60: - * - parametri processo - * - DB60.DBD6: pressione camera filtrante (salvataggio del MAX ogni minuto) | var testVal = S7.Net.Types.Double.FromByteArray(memByteRead.Skip(0).Take(4).ToArray()); - * - DB60.DBD10: pressione linea utenze (salvataggio del MAX ogni minuto) - * - DB60.DBD14: temperatura acqua pulita (salvataggio del MAX ogni minuto) - * - * - BIT di stato - * - DB60.DBX3.0: AUSILIARI INSERITI = NO EMERGENZA - * - DB60.DBX3.1: Filtro (macchina) in LAVORAZIONE - * - DB60.DBX3.2: Selettore in AUTOMATICO (sennò GIALLO) - * - DB60.DBX3.3: WARNING MIN LIV VASCA (arancio) - * - DB60.DBX3.4: WARNING MIN LIV CELLULOSA (blu) - * - DB60.DBX3.5: LAMPADA ROSSA (allarmi almeno 1 attivo) - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensAprochim(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione APROCHIM"); - // imposto i parametri speciali x calcolo... - var chiaviTSVC = findOptPar("TSVC"); - if (chiaviTSVC.Count > 0) - { - lgInfo($"Trovate {chiaviTSVC.Count} chiavi TSVC"); - string[] codVal; - VCData currConf; - int periodo = 0; - VC_func funz = VC_func.POINT; - // accodo nella conf... - foreach (var item in chiaviTSVC) - { - codVal = item.Value.Split(':'); - Enum.TryParse(codVal[0], out funz); - int.TryParse(codVal[1], out periodo); - currConf = new VCData() - { - Funzione = funz, - Period = periodo, - DTStart = DateTime.Now.AddHours(-1), - dataArray = new List() - }; - TSVC_Data.Add(item.Key.Replace("TSVC_", ""), currConf); - } - // documento... - foreach (var item in TSVC_Data) - { - lgTrace($"TSVC: {item.Key} | periodo: {item.Value.Period} | funz: {item.Value.Funzione}"); - // salvo i valori PREC... - LastTSVC.Add(item.Key, 0); - } - } - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Recupero dati dinamici in formato dictionary - /// - /// - public override Dictionary getDynData() - { - Dictionary outVal = new Dictionary(); - try - { - /* ---------------------------------------------------------- - * DB60.DBD6: pressione camera filtrante (salvataggio del MAX ogni minuto) | var testVal = S7.Net.Types.Double.FromByteArray(memByteRead.Skip(0).Take(4).ToArray()); - * DB60.DBD10: pressione linea utenze (salvataggio del MAX ogni minuto) - * DB60.DBD14: temperatura acqua pulita (salvataggio del MAX ogni minuto) - * */ - double pressCamFilt = S7.Net.Types.Double.FromByteArray(RawInput.Skip(6).Take(4).ToArray()); - double pressLinUt = S7.Net.Types.Double.FromByteArray(RawInput.Skip(10).Take(4).ToArray()); - double tempH2O = S7.Net.Types.Double.FromByteArray(RawInput.Skip(14).Take(4).ToArray()); - - if (utils.CRB("enableTSVC")) - { - DateTime adesso = DateTime.Now; - // salvo in stack le VC rilevate - bool scad01 = stackVal_TSVC("pressCamFilt", pressCamFilt, adesso); - bool scad02 = stackVal_TSVC("pressLinUt", pressLinUt, adesso); - bool scad03 = stackVal_TSVC("tempH2O", tempH2O, adesso); - - // verifico SE devo riportare dati VC - if (scad01 || scad02 || scad03) - { - pressCamFilt = getVal_TSVC("pressCamFilt", scad01); - pressLinUt = getVal_TSVC("pressLinUt", scad02); - tempH2O = getVal_TSVC("tempH2O", scad03); - outVal.Add("DYNDATA", $"pressCamFilt {pressCamFilt:N6} | pressLinUt {pressLinUt:N6} | tempH2O {tempH2O:N3}"); - outVal.Add("pressCamFilt", $"{pressCamFilt:N6}"); - outVal.Add("pressLinUt", $"{pressLinUt:N6}"); - outVal.Add("tempH2O", $"{tempH2O:N3}"); - // salvo! - LastTSVC["pressCamFilt"] = pressCamFilt; - LastTSVC["pressLinUt"] = pressLinUt; - LastTSVC["tempH2O"] = tempH2O; - } - else - { - outVal.Add("DYNDATA", $"pressCamFilt {LastTSVC["pressCamFilt"]:N6} | pressLinUt {LastTSVC["pressLinUt"]:N6} | tempH2O {LastTSVC["tempH2O"]:N3}"); - } - } - else - { - outVal.Add("pressCamFilt", $"{pressCamFilt:N6}"); - outVal.Add("pressLinUt", $"{pressLinUt:N6}"); - outVal.Add("tempH2O", $"{tempH2O:N3}"); - outVal.Add("DYNDATA", $"pressCamFilt {pressCamFilt:N3} | pressLinUt {pressLinUt:N3} | tempH2O {tempH2O:N3}"); - } - } - catch (Exception exc) - { - lgError(exc, "Errore in getDynData x Siemens Aprochim"); - } - return outVal; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - #endregion Public Methods - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza - * - * - * - BIT di stato - * - DB60.DBX3.0: AUSILIARI INSERITI = NO EMERGENZA - * - DB60.DBX3.1: Filtro (macchina) in LAVORAZIONE - * - DB60.DBX3.2: Selettore in AUTOMATICO (sennò GIALLO) - * - DB60.DBX3.3: WARNING MIN LIV VASCA (arancio) - * - DB60.DBX3.4: WARNING MIN LIV CELLULOSA (blu) - * - DB60.DBX3.5: LAMPADA ROSSA (allarmi almeno 1 attivo) - ----------------------------------------------------- */ - - /* ----------------------------------------------------- - * bitmap MAPO FILTRO Aprochim - * B0: POWER_ON - * B1: RUN - * B2: AUTOMATICO - * B3: WARN_MIN_VASCA - * B4: WARN_MIN_CELL - * B5: ALARM - * B6: EMERGENZA - ----------------------------------------------------- */ - - // bit 0 (poweron) imposto a 1 SE connected... - B_input = currPLC.IsConnected ? 1 : 0; - - // recupero byte segnali... - int byteSignals = RawInput[3]; - // aggiungo "in coda" primo bit emergenza...essendo un bit negato (NON emergenza) lo - // cambio di segno - if ((byteSignals & (1 << 0)) == 0) - { - byteSignals += (1 << 6); - } - // cancello primo bit (faccio uno shift a dx e poi a sx di 1...) - byteSignals = ((byteSignals >> 1) << 1); - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}")); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensAt2001.cs b/IOB-WIN-NEXT/IobSiemens/SiemensAt2001.cs deleted file mode 100644 index 1a69c0d8..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensAt2001.cs +++ /dev/null @@ -1,291 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti SAET - /// - public class SiemensAt2001 : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli VIPA/SIEMENS (Interclays) di @2001 - * - VIPA, COMPATIBILE SIEMENS - * - S7 vers 300 - * - * - - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensAt2001(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione VIPA AT2001"); - lastPLCWatchDog = DateTime.Now.AddMinutes(-1); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio VUOTO - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4 - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - memAddrWrite = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceSetPzCount: - case taskType.stopSetup: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.forceResetPzCount: - case taskType.startSetup: - // alzo il bit x registrare richiesta reset contapezzi... POI quando ha - // eseguito abbassa il PLC il bit a zero... - MemBlock[0] = 1; - memAddrWrite = "DB1001.DBB88"; - break; - - case taskType.setArt: - case taskType.setComm: - case taskType.setProg: - - int byteSize = 0; - upsertKey(item.Key, item.Value); - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - switch (currMem.tipoMem) - { - case plcDataType.Boolean: - break; - - case plcDataType.Int: - saveIntOnMemBlock(ref MemBlock, item.Key, 0); - break; - - case plcDataType.DInt: - saveDIntOnMemBlock(ref MemBlock, item.Key, 0); - break; - - case plcDataType.Real: - saveRealOnMemBlock(ref MemBlock, item.Key, 0); - break; - - case plcDataType.String: - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - break; - - default: - break; - } - } - taskVal = item.Value; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (!string.IsNullOrEmpty(taskVal)) - { - taskOk = true; - } - else - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - // alzo il bit x registrare RICHEISTA modifica (secondo BIT)... POI - // quando ha eseguito abbassa il PLC il bit a zero... - MemBlock[0] = 2; - memAddrWrite = "DB1001.DBB88"; - break; - - case taskType.sendWatchDogMes2Plc: - //// compogo in byte... primo bit è setup/run, ultimo è watchdog - //int valore = inSetup ? 1 : 0; - int valore = counterMes2Plc; - MemBlock[68] = (byte)valore; - taskVal = $"VALUE DB1001.68 --> {counterMes2Plc}"; - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (!taskOk) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - - return taskDone; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - public override void processWhatchDog() - { - //NON SERVE!!!! - } - - #endregion Public Methods - - #region Protected Fields - - protected int counterMes2Plc = 0; - protected int counterPlc2Mes = 0; - protected DateTime lastPLCWatchDog; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: avvio/spegnimento - * B6: emergenza - * - * - * - BYTE di stato - * - +0.0 AutoStatus BYTE B#16#0 Valore 0=Fermo/1->3=Avviamento/4=Avviato/5=Pausa/6->8spegnimento/9->10 allarme - * - +1.0 Dosatore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +2.0 V_Dosatore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +3.0 Nas_Lancio BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +4.0 Cilindro BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +5.0 Bruciatore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +6.0 Aspiratore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +7.0 Nas_Raccolta BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +8.0 Nas_Brandeg BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +9.0 Coclea_Filtro BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - * - +10.0 Ciclico_Filtro BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on) - ----------------------------------------------------- */ - - // recupero byte segnali... - int byteSignals = RawInput[0]; - - // bit 0 (poweron) imposto a 1 SE connected... - B_input = currPLC.IsConnected ? 1 : 0; - - // avviamento --> manuale - switch (byteSignals) - { - case 0: - B_input = 1; - break; - - case 1: - case 2: - case 3: - B_input += (1 << 5); - break; - - case 4: - B_input += (1 << 1); - break; - - case 5: - B_input += (1 << 4); - break; - - case 6: - case 7: - case 8: - B_input += (1 << 5); - break; - - case 9: - B_input += (1 << 3); - break; - - case 10: - B_input += (1 << 6); - break; - - default: - break; - } - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}")); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs b/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs deleted file mode 100644 index 8cb974c2..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs +++ /dev/null @@ -1,234 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti COMECA (gestione GNL x Pizzaferri) - /// - public class SiemensComeca : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS COMECA - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB85: - * lettura: 260 byte, - * scrittura 32 byte - * G:\Drive condivisi\30_Clienti\Pizzaferri\Impianti\Comeca - * - * Si intende lettura/scrittura con DB85.DBxx - * - * READ - * Si leggono parametri impianti + eventuali allarmi - * 000...151 R --> Variabili ANALOGICHE - * 152...183 R --> parametri - * 232...259 R --> allarmi - * - * WRITE - * 268...271 R --> Word conferma comandi (ACK) - * 280...288 W --> parametri inviati (WRITE) - * 308...309 W --> conferma invio (STR) - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensComeca(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione Comeca"); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - lgInfo($"Chiamata executeTasks specifica IobSiemensComeca: {task2exe.Count} task ricevuti"); - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setProg: - case taskType.sendWatchDogMes2Plc: - case taskType.startSetup: - case taskType.stopSetup: - case taskType.setPzComm: - case taskType.setArt: - case taskType.setComm: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - - // aggiunta finale bit a 1 x richiesta processing.. - MemBlock = S7.Net.Types.Int.ToByteArray(1); - memAddrWrite = "DB85.DBB308"; - // imposto valore strobe x check successivi - strobeVal = 1; - - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (!taskOk) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Fields - - protected int strobeVal = 0; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - per lo scopo specifico IN REALTA' non conta lo stato macchina.... ma lo inviamo lo stesso - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * - ----------------------------------------------------- */ - - //bool fatto = false; - //ushort valW = 0; - - var MemInt = new byte[2]; - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - - // processo dagli stati + gravi... - if (hasAlarms()) - { - byteSignals += (1 << 3); - } - else - { - byteSignals += (1 << 1); - } - - // verifico SE ho strobe/hack da chiudere - if (strobeVal != 0) - { - checkStrobeHack(); - } - // salvo! - B_input = byteSignals; - } - - #endregion Protected Methods - - #region Private Methods - - private void checkStrobeHack() - { - // verifico SE ho un hack sulla var DB85.DB268 - byte[] byteCtrlW = new byte[2]; - bool fatto = S7ReadBB(ref byteCtrlW, "DB85.DBB268", 2); - ushort valCtrlW = S7.Net.Types.Word.FromByteArray(byteCtrlW.ToArray()); - // se vale 1 --> resetto strobe! - if (valCtrlW == 1) - { - // aggiunta finale bit a 0 x chiusura processing.. - var MemBlock = S7.Net.Types.Int.ToByteArray(0); - var memAddrWrite = "DB85.DBB308"; - // imposto valore strobe x check successivi - var taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - if (taskOk) - { - strobeVal = 0; - } - } - else - { - lgInfo("SiemensComeca: Strobe attivo su DBB308, ack non rilevato su DBB268"); - } - } - - #endregion Private Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensComur.cs b/IOB-WIN-NEXT/IobSiemens/SiemensComur.cs deleted file mode 100644 index c7194eec..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensComur.cs +++ /dev/null @@ -1,282 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti COMUR - /// - public class SiemensComur : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS COMUR - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB150: 56 byte lettura, di cui 4 byte scrittura (4..7), vedere doc allegato - * G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\COMUR Dentatrice - * - * Si intende tutto con DB150.DBxx - * - * - parametri processo PLC --> MES - * - DBX0.0 - Macchina On: Segnale pulito di informazione sullo stato della macchina. 0->Aux OFF, 1->Aux ON - * - DBX0.1 – Macchina in Allarme: Segnale pulito di macchina in allarme. 0->Nessun Allarme, 1->E’ presente almeno un allarme/anomalia - * - DBX0.2 – Macchina in Ciclo: Segnale pulito sullo stato di funzionamento. 0->La macchina NON sta eseguendo un ciclo automatico, 1->La macchina sta eseguendo un ciclo automatico. - * - DBX0.3 – Macchina Non in Produzione: Segnale pulito sullo stato della macchina. 0->Macchina accesa e in lavorazione automatica, 1->Macchina accesa ma NON sta eseguendo un ciclo automatico. - * - DBX0.4 – Macchina In Ciclo Continuità: Segnale pulito sullo stato di funzionamento. 1->La macchina sta eseguendo un ciclo automatico con carico/scarico pezzo autonomo, 0->Altrimenti. - * - DBX0.7 – Assi In Moto: Segnale pulito sullo stato di movimento Assi. 0->Tutti gli assi della macchina sono fermi, 1->Almeno un asse si sta muovendo. - * - DBX1.0 – Impulso Start Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Start Ciclo. - * - DBX1.1 – Impulso Fine Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Fine Ciclo. Attenzione! Questo impulso viene generato solo se il Ciclo Automatico finisce correttamente. Non viene generato nel caso in cui il Ciclo Automatico venga interrotto da allarmi. - * - DBX1.3 – Impulso Conta Pezzi: Impulso a fronte positivo (0->1) della durata di 1’’ generato al completamento di ogni programma pezzo. - * - DBX2.0 – Preallarmi Pezzi: Segnale pulito di segnalazione Preallarme Pezzi impostabile su CN. 0->Preallarme Disattivo, 1->Preallarme Attivo - * - DBX2.1 – Allarme Pezzi: Segnale pulito di segnalazione Allarme Pezzi impostabile su CN. 0->Allarme Disattivo, 1->Allarme Attivo. - * - DBX2.3 – Fine Vita Utensile: Segnale pulito di segnalazione Allarme Fine Vita Creatore. 0->Allarme Disattivo, 1->Allarme Attivo. - * - DBX2.7 – Ciclo In Attesa: Segnale pulito sullo stato di funzionamento. 1->Ciclo Automatico attivo ma tutti assi fermi, 0->Altrimenti. - * - * - DBD52 - Codice Pezzo In Lavorazione (4byte, REAL) - * - DBD56 - Codice Utensile In Uso (4byte, REAL) - * - * - * - parametri processo MES --> PLC - * - DBX4.0 – Reset Contapezzi Parziale: Segnale per resettare il valore del contatore “Contapezzi parziale”. Impostare il bit a 1 per attivare la funzione (il PLC riporterà a 0 il valore quando completa l’operazione). - * - * - DB150.DBD8 - Numero di Pezzi da produrre per il lotto (4byte, DInt) - * - DB150.[12.0 .. 31.7] - Codice articolo (stringa da 18 char) - * - DB150.[32.0 .. 51.7] - Codice commessa (stringa da 18 char) - * - * - * - DB111.DBD24: PartCounter INT 2.0 Conteggio Parziale di pezzi prodotti dalla macchina - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensComur(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione COMUR"); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // init valori - int byteSize = 0; - int valDInt = 0; - short valShort = 0; - - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setProg: - case taskType.sendWatchDogMes2Plc: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setArt: - case taskType.setComm: - case taskType.setPzComm: - upsertKey(item.Key, item.Value); - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - if (currMem.tipoMem == plcDataType.String) - { - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - } - else if (currMem.tipoMem == plcDataType.DInt) - { - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.Int) - { - short.TryParse(item.Value, out valShort); - MemBlock = S7.Net.Types.Int.ToByteArray(valShort); - } - } - taskVal = item.Value; - break; - - case taskType.startSetup: - // resetto IN PRIMIS il contapezzi... - valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - memAddrWrite = "DB150.DBB24"; - S7WriteBB(ref MemBlock, memAddrWrite); - - // processo scrittura BIT su DB150.DBX4.0 - MemBlock = new byte[1]; - MemBlock[0] = (byte)1; - memAddrWrite = "DB150.DBB4"; - break; - - case taskType.stopSetup: - // resetto IN PRIMIS il contapezzi... - valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - memAddrWrite = "DB150.DBB24"; - S7WriteBB(ref MemBlock, memAddrWrite); - - // processo scrittura BIT su DB150.DBX4.0 - MemBlock = new byte[1]; - MemBlock[0] = (byte)0; - memAddrWrite = "DB150.DBB4"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (!taskOk) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value} | taskOk {taskOk}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: allarme creatore - * - * - * - BIT di stato - * - DBX0.0 - Macchina On: Segnale pulito di informazione sullo stato della macchina. 0->Aux OFF, 1->Aux ON - * - DBX0.1 – Macchina in Allarme: Segnale pulito di macchina in allarme. 0->Nessun Allarme, 1->E’ presente almeno un allarme/anomalia - * - DBX0.2 – Macchina in Ciclo: Segnale pulito sullo stato di funzionamento. 0->La macchina NON sta eseguendo un ciclo automatico, 1->La macchina sta eseguendo un ciclo automatico. - * - DBX0.3 – Macchina Non in Produzione: Segnale pulito sullo stato della macchina. 0->Macchina accesa e in lavorazione automatica, 1->Macchina accesa ma NON sta eseguendo un ciclo automatico. - * - DBX0.4 – Macchina In Ciclo Continuità: Segnale pulito sullo stato di funzionamento. 1->La macchina sta eseguendo un ciclo automatico con carico/scarico pezzo autonomo, 0-> Altrimenti. NON HA SENSO perché NON HANNO il robot... - * - DBX0.7 – Assi In Moto: Segnale pulito sullo stato di movimento Assi. 0->Tutti gli assi della macchina sono fermi, 1->Almeno un asse si sta muovendo. - * - DBX1.0 – Impulso Start Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Start Ciclo. - * - DBX1.1 – Impulso Fine Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Fine Ciclo. Attenzione! Questo impulso viene generato solo se il Ciclo Automatico finisce correttamente. Non viene generato nel caso in cui il Ciclo Automatico venga interrotto da allarmi. - * - DBX1.3 – Impulso Conta Pezzi: Impulso a fronte positivo (0->1) della durata di 1’’ generato al completamento di ogni programma pezzo. - * - DBX2.0 – Preallarmi Pezzi: Segnale pulito di segnalazione Preallarme Pezzi impostabile su CN. 0->Preallarme Disattivo, 1->Preallarme Attivo - * - DBX2.1 – Allarme Pezzi: Segnale pulito di segnalazione Allarme Pezzi impostabile su CN. 0->Allarme Disattivo, 1->Allarme Attivo. - * - DBX2.3 – Fine Vita Utensile: Segnale pulito di segnalazione Allarme Fine Vita Creatore. 0->Allarme Disattivo, 1->Allarme Attivo. - * - DBX2.7 – Ciclo In Attesa: Segnale pulito sullo stato di funzionamento. 1->Ciclo Automatico attivo ma tutti assi fermi, 0->Altrimenti. - * - ----------------------------------------------------- */ - - byte mainData = RawInput[0]; - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - if ((mainData & (1 << 2)) != 0) - { - byteSignals += (1 << 1); - } - - // controllo il bit MAIN dello status - if ((mainData & (1 << 1)) != 0) - { - byteSignals += (1 << 3); - } - - // considero come MANUALE NON ciclo in continuo... - if ((mainData & (1 << 3)) != 0) - { - byteSignals += (1 << 4); - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}"); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensCosmap.cs b/IOB-WIN-NEXT/IobSiemens/SiemensCosmap.cs deleted file mode 100644 index 36ca5013..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensCosmap.cs +++ /dev/null @@ -1,284 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti Cosmap - /// - public class SiemensCosmap : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS Cosmap - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB29: (lettura) 10byte, - * G:\Drive condivisi\30_Clienti\Donati\Schemi IOB-WIN\COSMAP - * - * Si intende lettura/scrittura con DB6.DBxx - * - * DB6 - * CodOdl Array[000..049] of Char DBB0..49 - * RicettaRich Array[050..099] of Char DBB50..99 - * CodArt Array[100..150] of Char DBB100..149 - * RicettaCorr Array[100..150] of Char DBB150..199 - * QtaRich DInt 200 - * Stato Int 204 (0 = ferma, 1 = produzione, 2 = manuale, 3 = emergenza) - * Allarme Int 206 (0 = ok, 1 = macchina in allarme) - * Contapezzi DInt 208 - * PzCountSet DInt 212 valore che si vuole impostare sul contapezzi - * PzCountRes DInt 216 comando di set contapezzi: al fronte di salita (0-->1) imposta contapezzi al valore prec - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensCosmap(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione Cosmap"); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - lgInfo($"Chiamata executeTasks specifica IobSiemensCosmap: {task2exe.Count} task ricevuti"); - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceSetPzCount: - case taskType.setProg: - case taskType.sendWatchDogMes2Plc: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setPzComm: - case taskType.setArt: - case taskType.setComm: - upsertKey(item.Key, item.Value); - int byteSize = 0; - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - if (currMem.tipoMem == plcDataType.String) - { - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - } - else if (currMem.tipoMem == plcDataType.DInt) - { - int valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.Int) - { - short valInt = 0; - short.TryParse(item.Value, out valInt); - MemBlock = S7.Net.Types.Int.ToByteArray(valInt); - } - } - else - { - string rawMemConf = JsonConvert.SerializeObject(memMap, Formatting.Indented); - lgError($"Errore: non trovata chiave write in memMap.mMapWrite per {item.Key}{Environment.NewLine}Configurazione memoria R/W:{Environment.NewLine}{rawMemConf}"); - } - taskVal = item.Value; - break; - - case taskType.forceResetPzCount: - // processo scrittura BIT su DB6.DBDW216 - MemBlock = new byte[4]; - MemBlock = S7.Net.Types.DInt.ToByteArray(1); - memAddrWrite = "DB6.DBDW216"; - break; - - case taskType.startSetup: - // processo scrittura BIT su DB6.DBDW216 - MemBlock = new byte[4]; - MemBlock = S7.Net.Types.DInt.ToByteArray(1); - memAddrWrite = "DB6.DBDW216"; - break; - - case taskType.stopSetup: - // processo scrittura BIT su DB6.DBDW216 - MemBlock = new byte[4]; - MemBlock = S7.Net.Types.DInt.ToByteArray(0); - memAddrWrite = "DB6.DBDW216"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("setParameter --> processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - - lgInfo($"executeTask: {tName} | {taskVal}"); - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (taskOk) - { - // aggiorno valore memoria... SE presente - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - memMap.mMapWrite[item.Key].value = item.Value; - lgInfo($"Aggiornato valore in mMapWrite per {item.Key}"); - } - lgInfo($"Eseguita con successo S7WriteBB per executeTasks: {item.Key} | {item.Value}"); - } - else - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza (1=attiva/premuta, 0=armed) - * - ----------------------------------------------------- */ - - //bool fatto = false; - ushort currStatus = 0; - ushort allarme = 0; - //ushort valW = 0; - - var MemInt = new byte[2]; - - // recupero - //fatto = S7ReadBB(ref MemInt, "DB6.DBW204", 2); - //valW = S7.Net.Types.Word.FromByteArray(MemInt.ToArray()); - //var testalW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(204).Take(2).ToArray()); - currStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(204).Take(2).ToArray()); - - //fatto = S7ReadBB(ref MemInt, "DB6.DBW206", 2); - //valW = S7.Net.Types.Word.FromByteArray(MemInt.ToArray()); - //allarme = valW; - allarme = S7.Net.Types.Word.FromByteArray(RawInput.Skip(206).Take(2).ToArray()); - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - - // processo dagli stati + gravi... - if (allarme > 0) - { - byteSignals += (1 << 3); - } - - switch (currStatus) - { - case 1: - byteSignals += (1 << 1); - break; - - case 2: - byteSignals += (1 << 4); - break; - - case 3: - byteSignals += (1 << 5); - break; - - default: - break; - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo($"Trasformazione dati: Status:{currStatus} | alarm:{allarme} --> B_input: {B_input}"); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs b/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs deleted file mode 100644 index 07ae3980..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs +++ /dev/null @@ -1,293 +0,0 @@ -using IOB_UT_NEXT; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - public class SiemensFape : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS FAPE (es punzonatrice Tecnomeccanica di LVF) - * - basasto su SIEMENS - * - S7 vers 1200 - * - V1.0 (2018): abilitata 1 area in lettura DB15 ed 1 in scrittura DB16 (NON la usano) - * - x poter funzionare --> protezione: meccanismi di collegamento / consenti put/get - * - lettura/scrittura primi 48 byte (240 max x le due DB) - * - * Versione 2018 - * DB15 | Read seguenti byte: - * - B0, WORD, Stato Macchina Generale - * - B2, WORD, Posizione sequenza contatore - * - B4, WORD, contatore cicli eseguiti per lubrifica - * - B40, DWORD, contapezzi azzerabile da operatore - * - B44, DWORD, contapezzi ASSOLUTO - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensFape(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione FAPE 1.0 - 2018"); - } - - #endregion Public Constructors - - #region private enums - - /// - /// Posizione sequenza ciclo standard punzonatrice - /// - private enum posSeq2018 - { - CICLO_AUTOMATICO_FERMO = 0, - CONTROLLO_MODO_OPERATIVO = 5, - MODO_ATTIVO_CON_ROBOT = 8, - SBLOCCAGGIO_PEZZO = 10, - APERTURA_PORTELLO_ROBOT = 11, - CONSENSO_ACCESSO_AL_ROBOT = 12, - CARICO_ROBOT_IN_CORSO = 14, - CARICO_ROBOT_CONCLUSO = 16, - CHIUSURA_PORTELLO_ROBOT = 18, - VERIFICA_POSIZIONE_CARRI = 20, - BLOCCAGGIO_PEZZO = 22, - ATTESA_CARRO_A_DESTRA = 24, - DISCESA_RAPIDO_BROCCIATURA = 25, - CICLO_DI_BROCCIATURA = 26, - RITORNO_BROCCIATRICE = 28, - COMANDO_CARRO_A_SINISTRA = 30, - CICLO_DI_ALESATURA = 32, - RITORNO_CARRO_ALESATURA = 34, - COMANDO_CARRO_A_DESTRA = 36, - INCREMENTO_CONTAPEZZI = 38, - CONTROLLO_TIME_OUT_CICLO = 40, - RILANCIO_CICLO_F42 = 42, - ATTESA_FINE_CICLO = 45 - } - - /// - /// Enum degli stati macchina (B0) - /// - private enum stMacc2018 - { - COMUNICAZIONE_ASSENTE = 0, - EMERGENZA_INSERITA = 1, - AVARIA_ARIA = 2, - AVARIA_PRESSIONE_OLIO = 3, - AVARIA_LIVELLO_OLIO = 4, - AVARIA_TEMPERATURA_OLIO = 5, - AVARIA_MOTORE_POMPA_IDRAULICA = 6, - AVARIA_MOTORE_RAFFREDDO_IDRAULICA = 7, - AVARIA_SINCRONISMO_PORTE = 8, - AVARIA_LIBERA = 9, - ATTIVAZIONE_IN_CORSO = 10, - MODO_MANUALE_ATTREZZAGGIO = 11, - MODO_AUTOMATICO_LOCALE = 12, - MODO_AUTOMATICO_ROBOT = 13, - CICLO_IN_CORSO = 14, - LIBERO = 15 - } - - #endregion private enums - - #region Public Methods - - /// - /// Recupero dati override in formato dictionary - /// - /// - public override Dictionary getDynData() - { - Dictionary outVal = new Dictionary(); - ushort valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray()); - ushort valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray()); - outVal.Add("CURR_STATO", ((stMacc2018)valStatus).ToString()); - outVal.Add("CURR_POSIT", ((posSeq2018)valPosit).ToString()); - return outVal; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - #endregion Public Methods - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - // FAPE: leggo i primi 2 WORD x decodifica stato e posizione... - ushort valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray()); - ushort valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray()); - stMacc2018 _stMacch = ((stMacc2018)valStatus); - posSeq2018 _posSeq = ((posSeq2018)valPosit); - - /* ----------------------------------------------------- - * bitmap MAPO - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza - ----------------------------------------------------- */ - - // bit 0 (poweron) imposto a 1 SE connected... - B_input = currPLC.IsConnected ? 1 : 0; - // controllo stato macchina x impostare altri bit... - switch (_stMacch) - { - case stMacc2018.EMERGENZA_INSERITA: - B_input += (1 << 5); - break; - - case stMacc2018.AVARIA_ARIA: - case stMacc2018.AVARIA_PRESSIONE_OLIO: - case stMacc2018.AVARIA_LIVELLO_OLIO: - case stMacc2018.AVARIA_TEMPERATURA_OLIO: - B_input += (1 << 3); - B_input += (1 << 6); - break; - - case stMacc2018.AVARIA_MOTORE_POMPA_IDRAULICA: - case stMacc2018.AVARIA_MOTORE_RAFFREDDO_IDRAULICA: - case stMacc2018.COMUNICAZIONE_ASSENTE: - case stMacc2018.AVARIA_SINCRONISMO_PORTE: - case stMacc2018.AVARIA_LIBERA: - case stMacc2018.ATTIVAZIONE_IN_CORSO: - B_input += (1 << 3); - break; - - case stMacc2018.MODO_MANUALE_ATTREZZAGGIO: - B_input += (1 << 4); - break; - - case stMacc2018.CICLO_IN_CORSO: - B_input += (1 << 1); - break; - - case stMacc2018.MODO_AUTOMATICO_LOCALE: - case stMacc2018.MODO_AUTOMATICO_ROBOT: - B_input += (1 << 7); - break; - - case stMacc2018.LIBERO: - default: - break; - } - - // procedo SOLO SE è enabled IOB - if (IobOnline) - { - try - { - currODL = utils.callUrl(urlGetCurrODL); - // solo SE HO un ODL... - if (string.IsNullOrWhiteSpace(currODL) || currODL == "0") - { - if (periodicLog) - { - lgInfo(string.Format("SiemensFape | Lettura ODL andata a vuoto: currODL: {0}", currODL)); - } - } - else - { - // se variato o scaduto timeout log... - if (periodicLog || (currIdxODL.ToString() != currODL)) - { - lgInfo(string.Format("SiemensFape | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL)); - } - // 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; - } - } - } - else - { - // imposto currODL a vuoto! - currODL = ""; - if (periodicLog) - { - lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto"); - } - } - if (!string.IsNullOrWhiteSpace(currODL) && currODL != "0") - { - // ora processo il contapezzi... controllo se è passato intervallo minimo tra 2 - // controlli/elaborazioni x distanziare invio e ridurre letture - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - // se sono differenti MOSTRO... - if (contapezziPLC != contapezziIOB) - { - // registro contapezzi - lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB {contapezziIOB}"); - } - // verifico se variato contapezzi... e se passato ritardo minimo... - if (contapezziPLC > contapezziIOB) - { - // salvo nuovo contapezzi (incremento di 1...) + richiesta refresh conteggio - contapezziIOB++; - needRefreshPzCount = true; - // salvo in semaforo! - B_input += (1 << 2); - // registro contapezzi - lgInfo($"contapezziPLC SIEMENS: {contapezziPLC} | contapezziIOB {contapezziIOB}"); - } - - // invio a server contapezzi (aggiornato) - string retVal = utils.callUrl(urlSetPzCount + contapezziIOB.ToString()); - // verifica se tutto OK - if (retVal != contapezziIOB.ToString()) - { - // errore salvataggio contapezzi - lgInfo($"Errore salvataggio Contapezzi SIEMENS: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}"); - // rileggo il counter pezzi da server - pzCntReload(true); - } - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - else - { - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC SIEMENS {contapezziPLC} | contapezziIOB {contapezziIOB}"); - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format("Trasformazione B_input: {0}", B_input)); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs b/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs deleted file mode 100644 index 7f1f72cd..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs +++ /dev/null @@ -1,681 +0,0 @@ -using IOB_UT_NEXT; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - public class SiemensFapeV2 : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS FAPE (es punzonatrice Tecnomeccanica di LVF) - * - basasto su SIEMENS - * - S7 vers 1200 - * - x poter funzionare --> protezione: meccanismi di collegamento / consenti put/get - * - * V1.0 (2018): - * - abilitata 1 area in lettura DB15 - * DB15 | Read seguenti byte: - * - B0, WORD, Stato Macchina Generale - * - B2, WORD, Posizione sequenza contatore - * - B4, WORD, contatore cicli eseguiti per lubrifica - * - B40, DWORD, contapezzi azzerabile da operatore - * - B44, DWORD, contapezzi ASSOLUTO - * - abilitata 1 area in scrittura DB16 (NON la usano) - * - * V2.0 (2024): - * - abilitata 1 area in lettura DB17 - * DB17 v.2 | Read seguenti byte: - * - B0, WORD, Stato Macchina Generale - * - B2, WORD, Posizione sequenza contatore - * - B4, WORD, contatore cicli eseguiti per lubrifica - * - B6, DWORD, contapezzi azzerabile da operatore - * - B10, DWORD, contapezzi ASSOLUTO - * - * DB17 v.3 | Read seguenti byte: - * - B0, WORD, Semaforo Macchina - * - B2, WORD, Stato Macchina Generale - * - B4, WORD, Posizione sequenza contatore - * - B6, WORD, contatore cicli eseguiti per lubrifica - * - B8, DWORD, contapezzi azzerabile da operatore - * - B12, DWORD, contapezzi ASSOLUTO - * - * - abilitata 1 area in scrittura DB16 - * DB16 | Write seguenti byte: - * - B0, STRING(30), Commessa - * - B32, STRING(30), Articolo - * - B64, DWORD, NumPezzi - * - B68, BOOL, Reset Contapezzi Parziale(autoresetta) - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensFapeV2(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - string sFapeVers = getOptPar("FAPE_VERS"); - if (!string.IsNullOrEmpty(sFapeVers)) - { - int.TryParse(sFapeVers, out FapeVers); - } - int yRef = FapeVers == 1 ? 2018 : 2024; - // inizializzo dizionari decodifica da conf json... - // cerco nella conf specifica... - if (memMap.DataDecodMap != null && memMap.DataDecodMap.Count > 0) - { - if (memMap.DataDecodMap.ContainsKey("StatoMacchina")) - { - DictState = memMap.DataDecodMap["StatoMacchina"]; - } - else - { - lgError("Errore: missing DataDecodMap.StatoMacchina dict"); - } - if (memMap.DataDecodMap.ContainsKey("StepCiclo")) - { - DictStCic = memMap.DataDecodMap["StepCiclo"]; - } - else - { - lgError("Errore: missing DataDecodMap.StepCiclo dict"); - } - } - else - { - lgInfo("Attenzione. non ho trovcato dizionari di decodifica (DataDecodMap) nel file json!"); - } - lgInfo($"NEW IOB SIEMENS versione FAPE v.{FapeVers} - {yRef}"); - } - - private Dictionary DictState = new Dictionary(); - private Dictionary DictStCic = new Dictionary(); - - #endregion Public Constructors - - #region Public Methods - - /// - /// Recupero dati override in formato dictionary - /// - /// - public override Dictionary getDynData() - { - Dictionary outVal = new Dictionary(); - ExtractFapeData(); - string curState = ""; - string curPosiz = ""; - // rivedere da conf estesa decodifica?!? - if (FapeVers == 3) - { - // stato - curState = $"{valState}"; - // cerco nella conf specifica... - if (DictState.Count > 0 && DictState.ContainsKey($"{valState}")) - { - curState = DictState[$"{valState}"]; - } - - // posizione - curPosiz = $"{valStepCic}"; - // cerco nella conf specifica... - if (DictStCic.Count > 0 && DictStCic.ContainsKey($"{valStepCic}")) - { - curPosiz = DictStCic[$"{valStepCic}"]; - } - } - // se non trovato ancora.. - if (string.IsNullOrEmpty(curState) || string.IsNullOrEmpty(curPosiz)) - { - if (FapeVers == 1) - { - curState = ((stMacc2018)valState).ToString(); - curPosiz = ((posSeq2018)valStepCic).ToString(); - //outVal.Add("CURR_STATO", ((stMacc2018)valState).ToString()); - //outVal.Add("CURR_POSIT", ((posSeq2018)valStepCic).ToString()); - } - else - { - curState = ((stMacc2024)valState).ToString(); - curPosiz = ((posSeq2024)valStepCic).ToString(); - //outVal.Add("CURR_STATO", ((stMacc2024)valState).ToString()); - //outVal.Add("CURR_POSIT", ((posSeq2024)valStepCic).ToString()); - } - } - // salvo valori! - outVal.Add("CURR_STATO", curState); - outVal.Add("CURR_POSIT", curPosiz); - - // aggiungo main state se disponibile... - if (FapeVers > 2) - { - outVal.Add("CURR_LAMP", ((mainState)valMain).ToString()); - } - return outVal; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - #endregion Public Methods - - #region Protected Fields - - /// - /// Stato impianto codificato come valore mainState - /// - protected ushort valMain = 0; - - /// - /// Posizione corrente ciclo - /// - protected ushort valStepCic = 0; - - /// - /// Stato Dettagliato macchina - /// - protected ushort valState = 0; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - // FAPE: leggo i primi 2 WORD x decodifica stato e posizione... - ExtractFapeData(); -#if false - mainState _stMain = ((mainState)valMain); - stMacc2024 _stMacch = ((stMacc2024)valStatus); - posSeq2024 _posSeq = ((posSeq2024)valPosit); -#endif - - /* ----------------------------------------------------- - * bitmap MAPO - 47 - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza - ----------------------------------------------------- */ - - // bit 0 (poweron) imposto a 1 SE connected... - B_input = currPLC.IsConnected ? 1 : 0; - - // verifico versione decodifica da + recente a + vecchia... - if (FapeVers == 3) - { - DecodeV3(ref B_input); - } - else if (FapeVers == 2) - { - DecodeV2(ref B_input); - } - else - { - DecodeV1(ref B_input); - } - - // FIXME ToDo !!! verificare da qui... - - // procedo SOLO SE è enabled IOB - if (IobOnline) - { - try - { - currODL = utils.callUrl(urlGetCurrODL); - // solo SE HO un ODL... - if (string.IsNullOrWhiteSpace(currODL) || currODL == "0") - { - if (periodicLog) - { - lgInfo(string.Format("SiemensFape | Lettura ODL andata a vuoto: currODL: {0}", currODL)); - } - } - else - { - // se variato o scaduto timeout log... - if (periodicLog || (currIdxODL.ToString() != currODL)) - { - lgInfo(string.Format("SiemensFape | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL)); - } - // 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; - } - } - } - else - { - // imposto currODL a vuoto! - currODL = ""; - if (periodicLog) - { - lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto"); - } - } - if (!string.IsNullOrWhiteSpace(currODL) && currODL != "0") - { - // ora processo il contapezzi... controllo se è passato intervallo minimo tra 2 - // controlli/elaborazioni x distanziare invio e ridurre letture - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - // se sono differenti MOSTRO... - if (contapezziPLC != contapezziIOB) - { - // registro contapezzi - lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB {contapezziIOB}"); - } - // verifico se variato contapezzi... e se passato ritardo minimo... - if (contapezziPLC > contapezziIOB) - { - // salvo nuovo contapezzi (incremento di 1...) + richiesta refresh conteggio - contapezziIOB++; - needRefreshPzCount = true; - // salvo in semaforo! - B_input += (1 << 2); - // registro contapezzi - lgInfo($"contapezziPLC SIEMENS: {contapezziPLC} | contapezziIOB {contapezziIOB}"); - } - - // invio a server contapezzi (aggiornato) - string retVal = utils.callUrl(urlSetPzCount + contapezziIOB.ToString()); - // verifica se tutto OK - if (retVal != contapezziIOB.ToString()) - { - // errore salvataggio contapezzi - lgInfo($"Errore salvataggio Contapezzi SIEMENS: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}"); - // rileggo il counter pezzi da server - pzCntReload(true); - } - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - else - { - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC SIEMENS {contapezziPLC} | contapezziIOB {contapezziIOB}"); - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format("Trasformazione B_input: {0}", B_input)); - } - } - - /// - /// Esegue decodificada stati in modalità "classica" (2018) - /// - /// - protected void DecodeV1(ref int B_input) - { - // Guardo SOLO stato macchina V1 (2018) - stMacc2018 _stMacch = ((stMacc2018)valState); - // controllo stato macchina x impostare altri bit... - switch (_stMacch) - { - case stMacc2018.EMERGENZA_INSERITA: - B_input += (1 << 5); - break; - - case stMacc2018.AVARIA_ARIA: - case stMacc2018.AVARIA_PRESSIONE_OLIO: - case stMacc2018.AVARIA_LIVELLO_OLIO: - case stMacc2018.AVARIA_TEMPERATURA_OLIO: - B_input += (1 << 3); - B_input += (1 << 6); - break; - - case stMacc2018.AVARIA_MOTORE_POMPA_IDRAULICA: - case stMacc2018.AVARIA_MOTORE_RAFFREDDO_IDRAULICA: - case stMacc2018.COMUNICAZIONE_ASSENTE: - case stMacc2018.AVARIA_SINCRONISMO_PORTE: - case stMacc2018.AVARIA_LIBERA: - case stMacc2018.ATTIVAZIONE_IN_CORSO: - B_input += (1 << 3); - break; - - case stMacc2018.MODO_MANUALE_ATTREZZAGGIO: - B_input += (1 << 4); - break; - - case stMacc2018.CICLO_IN_CORSO: - B_input += (1 << 1); - break; - - case stMacc2018.MODO_AUTOMATICO_LOCALE: - case stMacc2018.MODO_AUTOMATICO_ROBOT: - B_input += (1 << 7); - break; - - case stMacc2018.LIBERO: - default: - break; - } - } - - /// - /// Esegue decodificada stati in modalità "v2" (2024) con 2 valori senza macro stato - /// - /// - protected void DecodeV2(ref int B_input) - { - // Guardo SOLO stato macchina V2 (2024) - stMacc2024 _stMacch = ((stMacc2024)valState); - - // controllo stato macchina x impostare altri bit... semplificato sui VALORI interi val status... - - // da 00..50 -> pronta NON faccio nulla - if (valState < 51) - { - //B_input = 1; - } - // lavora - else if (valState >= 51 && valState < 100) - { - B_input += (1 << 1); - } - // manuale/warning - else if (valState >= 100 && valState < 199) - { - B_input += (1 << 3); - } - // allarme - else if (valState >= 200) - { - B_input += (1 << 4); - } - - // controllo COMUNQUE emergenza premuta... - if (_stMacch == stMacc2024.MACCHINA_NON_ATTIVA) - { - B_input += (1 << 5); - } - } - - /// - /// Esegue decodificada stati in modalità "v3" (2024) con 3 valori guardando SOLO macro stato - /// - /// - protected void DecodeV3(ref int B_input) - { - // Guardo SOLO stato MAIN V3 (2024) - mainState _stMain = ((mainState)valMain); - stMacc2024 _stMacch = ((stMacc2024)valState); - - // controllo stato macchina x impostare altri bit... - switch (_stMain) - { - case mainState.Pronta: - break; - - case mainState.Lavora: - B_input += (1 << 1); - break; - - case mainState.Warning: - B_input += (1 << 4); - break; - - case mainState.Allarme: - B_input += (1 << 3); - break; - - case mainState.ND: - default: - break; - } - - // controllo COMUNQUE emergenza premuta... - if (_stMacch == stMacc2024.MACCHINA_NON_ATTIVA) - { - B_input += (1 << 5); - } - } - - #endregion Protected Methods - - #region Private Fields - - private int FapeVers = 1; - - #endregion Private Fields - - #region Private Enums - - /// - /// Enum degli stati macchina (B0) - /// - private enum mainState - { - ND = 0, - Pronta = 1, - Lavora = 2, - Warning = 3, - Allarme = 4 - } - - /// - /// Posizione sequenza ciclo standard punzonatrice - /// - private enum posSeq2018 - { - CICLO_AUTOMATICO_FERMO = 0, - CONTROLLO_MODO_OPERATIVO = 5, - MODO_ATTIVO_CON_ROBOT = 8, - SBLOCCAGGIO_PEZZO = 10, - APERTURA_PORTELLO_ROBOT = 11, - CONSENSO_ACCESSO_AL_ROBOT = 12, - CARICO_ROBOT_IN_CORSO = 14, - CARICO_ROBOT_CONCLUSO = 16, - CHIUSURA_PORTELLO_ROBOT = 18, - VERIFICA_POSIZIONE_CARRI = 20, - BLOCCAGGIO_PEZZO = 22, - ATTESA_CARRO_A_DESTRA = 24, - DISCESA_RAPIDO_BROCCIATURA = 25, - CICLO_DI_BROCCIATURA = 26, - RITORNO_BROCCIATRICE = 28, - COMANDO_CARRO_A_SINISTRA = 30, - CICLO_DI_ALESATURA = 32, - RITORNO_CARRO_ALESATURA = 34, - COMANDO_CARRO_A_DESTRA = 36, - INCREMENTO_CONTAPEZZI = 38, - CONTROLLO_TIME_OUT_CICLO = 40, - RILANCIO_CICLO_F42 = 42, - ATTESA_FINE_CICLO = 45 - } - - /// - /// Posizione sequenza ciclo standard punzonatrice - /// - private enum posSeq2024 - { - CICLO_NON_ATTIVO_0 = 0, - CONTROLLO_TIPO_CARICO_5 = 5, - APERTURA_PORTELLO_ACCESSO_AREA_ROBOT_10 = 10, - ATTESA_SCARICO_CARICO_PEZZO_DA_ROBOT_15 = 15, - ATTESA_ROBOT_FUORI_AREA_20 = 20, - ATTESA_CADUTA_SEGNALE_ROBOT_FUORI_AREA_25 = 25, - CHIUSURA_PORTELLO_ACCESSO_AREA_ROBOT_30 = 30, - FASE_1_STAFFAGGIO_PEZZO_50 = 50, - FASE_2_POSIZIONAMENTO_CONTRASTO_PEZZO_60 = 60, - FASE_3_PUNZONATURA_1_LUBRIFICAZIONE_PUNZONE_69 = 69, - FASE_3_PUNZONATURA_1_DISCESA_RAPIDA_70 = 70, - FASE_3_PUNZONATURA_1_DISCESA_LENTA_74 = 74, - FASE_3_PUNZONATURA_1_DISCESA_LENTISSIMA_75 = 75, - FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_79 = 79, - FASE_3_PUNZONATURA_1_RITARDO_PER_RISALITA_80 = 80, - FASE_3_PUNZONATURA_1_SALITA_LENTA_85 = 85, - FASE_3_PUNZONATURA_1_SALITA_RAPIDA_90 = 90, - FASE_3_PUNZONATURA_1_SALITA_FINALE_95 = 95, - FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_96 = 96, - FASE_4_TRASLAZIONE_1_RITARDO_AVVIO_105 = 105, - FASE_4_TRASLAZIONE_1_MOVIMENTO_SU_PUNZONATURA_2_110 = 110, - FASE_4_TRASLAZIONE_1_ARRESTO_AZIONAMENTO_114 = 114, - FASE_5_PUNZONATURA_2_RITARDO_AVVIO_115 = 115, - FASE_5_PUNZONATURA_2_LUBRIFICAZIONE_PUNZONE_119 = 119, - FASE_5_PUNZONATURA_2_DISCESA_RAPIDA_120 = 120, - FASE_5_PUNZONATURA_2_DISCESA_LENTA_124 = 124, - FASE_5_PUNZONATURA_2_DISCESA_LENTISSIMA_125 = 125, - FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_126 = 126, - FASE_5_PUNZONATURA_2_RITARDO_PER_RISALITA_130 = 130, - FASE_5_PUNZONATURA_2_SALITA_LENTA_135 = 135, - FASE_5_PUNZONATURA_2_SALITA_RAPIDA_140 = 140, - FASE_5_PUNZONATURA_2_SALITA_FINALE_145 = 145, - FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_146 = 146, - INCREMENTO_CONTATORI_PEZZI_ESEGUITI_155 = 155, - FASE_6_TRASLAZIONE_2_RITARDO_AVVIO_156 = 156, - FASE_6_TRASLAZIONE_2_MOVIMENTO_SU_PUNZONATURA_1_160 = 160, - FASE_6_TRASLAZIONE_2_ARRESTO_AZIONAMENTO_161 = 161, - FASE_7_DISINSERIMENTO_CONTRASTO_165 = 165, - FASE_8_DESTAFFAGGIO_PEZZO_170 = 170, - DISATTIVAZIONE_AZIONAMENTO_180 = 180, - VERIFICA_RIAVVIO_CICLO_CON_CARICO_DA_ROBOT_190 = 190, - CICLO_TERMINATO_300 = 300 - } - - /// - /// Enum degli stati macchina (B0) - /// - private enum stMacc2018 - { - COMUNICAZIONE_ASSENTE = 0, - EMERGENZA_INSERITA = 1, - AVARIA_ARIA = 2, - AVARIA_PRESSIONE_OLIO = 3, - AVARIA_LIVELLO_OLIO = 4, - AVARIA_TEMPERATURA_OLIO = 5, - AVARIA_MOTORE_POMPA_IDRAULICA = 6, - AVARIA_MOTORE_RAFFREDDO_IDRAULICA = 7, - AVARIA_SINCRONISMO_PORTE = 8, - AVARIA_LIBERA = 9, - ATTIVAZIONE_IN_CORSO = 10, - MODO_MANUALE_ATTREZZAGGIO = 11, - MODO_AUTOMATICO_LOCALE = 12, - MODO_AUTOMATICO_ROBOT = 13, - CICLO_IN_CORSO = 14, - LIBERO = 15 - } - - /// - /// Enum degli stati macchina (B0) - /// - private enum stMacc2024 - { - COMUNICAZIONE_ASSENTE = 0, - EMERGENZA_RIPRISTINATA = 5, - MACCHINA_IN_POTENZA = 10, - MACCHINA_PRONTA_PER_CICLO_LOCALE = 15, - MACCHINA_PRONTA_PER_CICLO_CON_ROBOT = 20, - MACCHINA_IN_MANUALE = 25, - CICLO_RESET_ATTIVO = 50, - CICLO_AUTOMATICO_LOCALE_ATTIVO = 55, - CICLO_AUTOMATICO_CON_ROBOT_ATTIVO = 60, - MANCANZA_OLIO_LUBRIFICAZIONE_PEZZO = 100, - MANCANZA_OLIO_LUBRIFICAZIONE_CILINDRO = 105, - ATTESA_BARRIERE_LIBERE = 110, - ATTESA_BLOCCAGGIO_PORTELLO_ANTERIORE = 111, - ATTESA_RILASCIO_PULSANTE_RESET = 115, - ATTESA_ASSE_PUNZONATURA_ALTO = 120, - ATTESA_BLOCCAGGIO_PEZZO_ALTO = 125, - ATTESA_BLOCCAGGIO_PEZZO = 126, - ATTESA_CONTRASTO_PEZZO_DISINSERITO = 130, - ATTESA_CARRO_IN_POSIZIONE_1 = 135, - ATTESA_CHIUSURA_PORTELLO_ROBOT = 140, - ATTESA_ROBOT_FUORI_INGOMBRO = 145, - ATTESA_TERMINE_CICLO_RESET = 150, - TIMEOUT_LUBRIFICAZIONE_CILINDRO = 155, - LIVELLO_OLIO_BASSO_LUBRIFICA_PEZZO = 160, - LIVELLO_OLIO_BASSO_LUBRIFICA_CILINDRO = 165, - ATTESA_AREA_TRASLAZIONE_LIBERA = 170, - ANOMALIA_POSIZIONE_PER_CARICO_ROBOT = 205, - SOVRAPRESSIONE_PUNZONATURA_1 = 210, - OLTRE_QUOTA_MASSIMA_PUNZONATURA_1 = 215, - SOVRAPRESSIONE_PUNZONATURA_2 = 220, - OLTRE_QUOTA_MASSIMA_PUNZONATURA_2 = 225, - SOVRAPRESSIONE_TRASLAZIONE_CARRO = 230, - TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA = 235, - SOVRAPRESSIONE_MOVIMENTO_PUNZONE = 240, - ALLARME_DRIVE_POMPA_IDRAULICA = 245, - ANOMALIA_ALIMENTAZIONE_PNEUMATICA = 250, - APERTURA_ANOMALA_PORTELLO_ROBOT = 255, - APERTURA_ANOMALA_PORTELLO_ANTERIORE = 260, - INTRUSIONE_ANOMALA_BARRIERE = 265, - MACCHINA_NON_ATTIVA = 270, - ALLARME_AREA_TRASLAZIONE_NON_LIBERA = 275, - ANOMALIA_SALITA_PUNZONATORE = 301, - ANOMALIA_TRASLAZIONE_CARRO = 303, - ANOMALIA_ARRETRAMENTO_CONTRASTO_305 = 305, - ANOMALIA_APERTURA_STAFFAGGIO = 307, - ANOMALIA_STAFFAGGIO_PEZZO = 403, - ANOMALIA_POSIZIONE_CONTRASTO = 405, - ANOMALIA_PUNZONATURA_1 = 407, - ANOMALI_TRASLAZIONE_IN_POSIZIONE_2 = 409, - ANOMALIA_PUNZONATURA_2 = 411, - ANOMALIA_ARRETRAMENTO_CONTRASTO_413 = 413, - ANOMALIA_SALITA_STAFFAGGIO = 415, - ANOMALI_TRASLAZIONE_IN_POSIZIONE_1 = 417, - ANOMALIA_DISATTIVAZIONE_DRIVE_POMPA = 419, - } - - #endregion Private Enums - - #region Private Methods - - /// - /// recupero dati specifici FAPE da struttura array memoria e versione adapter - /// - private void ExtractFapeData() - { - /* ---------------------------------------------- - * NOTA: - * - v1 (2018): 2 blocchi memoria, area DB15 - * - v2 (2024): 2 blocchi area DB17 - * - v3 (2024): 3 blocchi area DB17 (MacroStato, stato, ciclo) - * - * decodifico secondo conf - * ----------------------------------------------*/ - // leggo secondo versione adapter 1/2/3... - if (FapeVers <= 2) - { - valState = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray()); - valStepCic = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray()); - } - else - { - valMain = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray()); - valState = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray()); - valStepCic = S7.Net.Types.Word.FromByteArray(RawInput.Skip(4).Take(2).ToArray()); - } - } - - #endregion Private Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensIngenia.cs b/IOB-WIN-NEXT/IobSiemens/SiemensIngenia.cs deleted file mode 100644 index 38ec8cd2..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensIngenia.cs +++ /dev/null @@ -1,306 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti Ingenia (Automazione Valvital) - /// - public class SiemensIngenia : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS INGENIA (system integrator gestione robot impianto PRESSA in VALVITAL) - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB700 - * - * Le informazioni di cui abbiamo bisogno (lettura) sono le seguenti : - * Macchina Lavora (DB700.DBX0.0) - * Macchina in ciclo (DB700.DBX0.1) - * Macchina in manuale (DB700.DBX0.2) - * Macchina in allarme (DB700.DBX0.3) - * Macchina in emergenza (DB700.DBX0.4) - * Macchina in timeout -> NON GESTIBILE in quanto attualmente gestito come ALLARME o SCARTO. - * Contapezzi - * Gestione scarti - * - * Sul tema del contapezzi ovviamente ci adattiamo a come gestite la cosa e quindi vanno bene sia 2 (o più) contapezzi (contapezzi_buono, contapezzi_scarto_forno, contapezzi_scarto_pressa, contapezzi_scarto_bilancere) -> VITA ISOLA (DB700.DBD24), BUONI (DB700.DBD28), SCARTO SAET (DB700.DBD32), SCARTO PEZZI FREDDI (DB700.DBD36). - * - * in scrittura vorremmo indicare al PLC - * - codice articolo(DB701.DBD20) - * - codice commessa(DB701.DBD24) - * - quantità produzione(DB701.DBD28) - * - * Questi 3 dati devono essere visualizzati in una qualche schermata per poter asseverare il requisito della 4.0, non è necessario ci siano vincoli per cui se ad esempio la richiesta fosse superata il robot continua a lavorare comunque. - * - * - * NB: Si intende tutto con DB700.DBxx - * - * - BIT di stato - * - DBX0.0: Macchina in LAVORAZIONE - * - DBX0.1: Macchina in CICLO - * - DBX0.2: Macchina in MANUALE - * - DBX0.3: Macchina in ALLARME - * - DBX0.4: Macchina in EMERGENZA - * - * - DBD24: Vita isola (!!!???) Contapezzi TOTALISSIMO? - * - DBD28: BUONI - * - DBD32: pezzi prelevati per controllo qualità (era SCARTO SAET) - * - DBD36: SCARTO pezzi freddi - * - * - * SCRITTURA - * - DBD701.DBD20: codice articolo - * - DBD701.DBD24: codice commessa - * - DBD701.DBD28: qta produzione - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensIngenia(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione VIPA INGENIA"); - lastPLCWatchDog = DateTime.Now.AddMinutes(-1); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebbe togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte VUOTO - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4 - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - memAddrWrite = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setProg: - case taskType.startSetup: - case taskType.stopSetup: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.sendWatchDogMes2Plc: - memAddrWrite = "DB701.DBB12"; - upsertKey(item.Key, item.Value); - MemBlock = dwordToByte(counterMes2Plc.ToString()); - taskVal = $"VALUE DB701.DBB12 --> {counterMes2Plc} ({MemBlock})"; - if (verboseLog) - { - lgInfo(taskVal); - } - break; - - case taskType.setArt: - case taskType.setComm: - case taskType.setPzComm: - case taskType.setParameter: - upsertKey(item.Key, item.Value); - // verifico se posso aggiornare valori in memoria... - if (memMap != null && memMap.mMapWrite != null) - { - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; - taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte"; - // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà - memMap.mMapWrite[item.Key].value = item.Value; - } - else - { - taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}"; - } - } - else - { - taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}"; - } - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - taskOk = true; - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (!taskOk) - { - lgError($"Ingenia: errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value} | memAddrWrite: {memAddrWrite} | {taskVal}"); - } - } - } - return taskDone; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - public override void processWhatchDog() - { - // scrivo 1 volta al secondo il contatore incrementale su area apposita - DateTime adesso = DateTime.Now; - if (adesso.Subtract(lastPLCWatchDog).TotalSeconds > watchDogPeriod) - { - // incremento - counterMes2Plc++; - // se > 999'999'999 --> 0 - if (counterMes2Plc > 999999999) counterMes2Plc = 0; - // salvo su DB - Dictionary task2exe = new Dictionary(); - Dictionary taskDone = new Dictionary(); - task2exe.Add("sendWatchDogMes2Plc", counterMes2Plc.ToString()); - taskDone = executeTasks(task2exe); - lgInfo($"Scritto watchdog: {counterMes2Plc}"); - // salvo watchdog PLC - lastPLCWatchDog = adesso; - } - } - - #endregion Public Methods - - #region Protected Fields - - protected int counterMes2Plc = 0; - - protected int counterPlc2Mes = 0; - - protected DateTime lastPLCWatchDog; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza - * - * - * - BIT di stato - * - DBX0.0: Macchina in LAVORAZIONE - * - DBX0.1: Macchina in CICLO - * - DBX0.2: Macchina in MANUALE - * - DBX0.3: Macchina in ALLARME - * - DBX0.4: Macchina in EMERGENZA - ----------------------------------------------------- */ - - // bit 0 (poweron) imposto a 1 SE connected... - B_input = currPLC.IsConnected ? 1 : 0; - - // recupero byte segnali... - byte mainData = RawInput[0]; - int byteSignals = 0; - - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - - // RUN se lavora ed in ciclo - if ((mainData & (1 << 0)) != 0 && (mainData & (1 << 1)) != 0) - { - byteSignals += (1 << 1); - } - // manuale - if ((mainData & (1 << 2)) != 0) - { - byteSignals += (1 << 4); - } - // allarme - if ((mainData & (1 << 3)) != 0) - { - byteSignals += (1 << 3); - } - // emergenza - if ((mainData & (1 << 4)) != 0) - { - byteSignals += (1 << 5); - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}")); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensLasco.cs b/IOB-WIN-NEXT/IobSiemens/SiemensLasco.cs deleted file mode 100644 index 73c0bcdc..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensLasco.cs +++ /dev/null @@ -1,640 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti Lasco (Pressa bilancere Valvital) - /// - public class SiemensLasco : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS LASCO (Pressa principale in VALVITAL) - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB1001 READ: 68 byte lettura, DB1002 68 byte byte scrittura, vedere doc allegato - * F:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\22 - LASCO Bilancere - * - - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensLasco(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione LASCO"); - lastPLCWatchDog = DateTime.Now.AddMinutes(-1); - useNewSend = string.IsNullOrWhiteSpace(getOptPar("USE_NEW_EXE_TASK")) ? false : true; - // imposto i parametri speciali x calcolo... - var chiaviTSVC = findOptPar("TSVC"); - if (chiaviTSVC.Count > 0) - { - lgInfo($"Trovate {chiaviTSVC.Count} chiavi TSVC"); - string[] codVal; - VCData currConf; - int periodo = 0; - VC_func funz = VC_func.POINT; - // accodo nella conf... - foreach (var item in chiaviTSVC) - { - codVal = item.Value.Split(':'); - Enum.TryParse(codVal[0], out funz); - int.TryParse(codVal[1], out periodo); - currConf = new VCData() - { - Funzione = funz, - Period = periodo, - DTStart = DateTime.Now.AddHours(-1), - dataArray = new List() - }; - // cerco se esiste eda ggiongo o aggiorno... - string currKey = item.Key.Replace("TSVC_", ""); - if (TSVC_Data.ContainsKey(currKey)) - { - TSVC_Data[currKey] = currConf; - } - else - { - TSVC_Data.Add(currKey, currConf); - } - } - // documento... - foreach (var item in TSVC_Data) - { - lgTrace($"TSVC: {item.Key} | periodo: {item.Value.Period} | funz: {item.Value.Funzione}"); - // salvo i valori PREC... - if (LastTSVC.ContainsKey(item.Key)) - { - LastTSVC[item.Key] = 0; - } - else - { - LastTSVC.Add(item.Key, 0); - } - } - } - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - string memAddrWrite = ""; - if (task2exe != null) - { - // inizio VUOTO - byte[] MemBlock = new byte[parametri.memSizeWrite]; - - // controllo su OPT_PAR se usare nuovo metodo exe task... - if (useNewSend) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - int valore = 0; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.forceSetPzCount: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setArt: - case taskType.setComm: - case taskType.setPzComm: - case taskType.setProg: - upsertKey(item.Key, item.Value); - // verifico se posso aggiornare valori in memoria... - if (memMap != null && memMap.mMapWrite != null) - { - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; - taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte"; - // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà - memMap.mMapWrite[item.Key].value = item.Value; - } - else - { - taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}"; - } - } - else - { - taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}"; - } - int byteSize = 0; - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - if (currMem.tipoMem == plcDataType.String) - { - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - } - else if (currMem.tipoMem == plcDataType.DInt) - { - int valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.Int) - { - short valDInt = 0; - short.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.Int.ToByteArray(valDInt); - } - } - taskVal = item.Value; - break; - - case taskType.sendWatchDogMes2Plc: - // processo scrittura BIT su DB1002.DBB0.0 - MemBlock = new byte[1]; - memAddrWrite = "DB1002.DBB0"; - // compogo in byte... primo bit è setup/run, ultimo è watchdog - valore = inSetup ? 1 : 0; - // verifica SE aggiungere il veto reset contapezzi - if (forcePzReset) - { - // reset shift counter - valore += 2; - // reset type counter - valore += 4; - // controlla se resettare il pz reset... - forcePzReset = forcePzResetUntil >= DateTime.Now; - } - valore += (byte)(counterMes2Plc << 7); - MemBlock[0] = (byte)valore; - taskVal = $"VALUE DB1002.92 --> {valore} | counter interno {counterMes2Plc}"; - break; - - case taskType.forceResetPzCount: - // forzo reset contapezzi - forcePzReset = true; - forcePzResetUntil = DateTime.Now.AddSeconds(3); - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - case taskType.startSetup: - // salvo che SONO IN SETUP! - inSetup = true; - lgInfo("!!! Richiesta startSetup - BLOCCO contapezzi LASCO !!!"); - // forzo reset contapezzi - forcePzReset = true; - forcePzResetUntil = DateTime.Now.AddSeconds(3); - break; - - case taskType.stopSetup: - // salvo che SONO FUORI DAL SETUP! - inSetup = false; - lgInfo("!!! Richiesta stopSetup - SBLOCCO contapezzi LASCO!!!"); - // forzo reset contapezzi - forcePzReset = true; - forcePzResetUntil = DateTime.Now.AddSeconds(3); - break; - - case taskType.fixStopSetup: - // salvo che SONO FUORI DAL SETUP! - inSetup = false; - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - // scrivo comunque! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - if (!taskOk) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - else - { - lgInfo("Use old send"); - // cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4 - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.startSetup: - case taskType.stopSetup: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setArt: - case taskType.setComm: - case taskType.setPzComm: - case taskType.setProg: - //saveProdData(item); - upsertKey(item.Key, item.Value); - taskVal = item.Value; - break; - - case taskType.sendWatchDogMes2Plc: - // compogo in byte... primo bit è setup/run, ultimo è watchdog - int valore = inSetup ? 1 : 0; - valore += (byte)(counterMes2Plc << 7); - MemBlock[0] = (byte)valore; - taskVal = $"VALUE DB1002.92 --> {counterMes2Plc}"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - case taskType.fixStopSetup: - // salvo che SONO FUORI DAL SETUP! - inSetup = false; - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - } - // controllo SE HO da scrivere articolo/commessa/programma - saveStringOnMemBlock(ref MemBlock, "setArt", 2, 22); - saveStringOnMemBlock(ref MemBlock, "setComm", 24, 22); - saveStringOnMemBlock(ref MemBlock, "setProg", 46, 22); - - // scrivo comunque! - taskOk = S7WriteBB(ref MemBlock); - } - } - return taskDone; - } - - /// - /// Recupero dati dinamici in formato dictionary - /// - /// - public override Dictionary getDynData() - { - bool disableDynData = true; - Dictionary outVal = new Dictionary(); - // processing - try - { - disableDynData = (getOptPar("DISABLE_DYN_DATA") == "TRUE"); - } - catch (Exception exc) - { - lgError(exc, "Errore in getOptPar x DISABLE_DYN_DATA"); - } - try - { - // le 3 posizioni sono in 1/10 mm x cui vanno divise x 10... x avere MM - double RamPosition = S7.Net.Types.Int.FromByteArray(RawInput.Skip(18).Take(2).ToArray()) / 10; - double LowerEjectorPosition = S7.Net.Types.Int.FromByteArray(RawInput.Skip(20).Take(2).ToArray()) / 10; - double UpperTool = S7.Net.Types.Int.FromByteArray(RawInput.Skip(22).Take(2).ToArray()) / 10; - // temp in °C - int TempMainMotorU = S7.Net.Types.Int.FromByteArray(RawInput.Skip(24).Take(2).ToArray()); - int TempMainMotorV = S7.Net.Types.Int.FromByteArray(RawInput.Skip(26).Take(2).ToArray()); - int TempMainMotorW = S7.Net.Types.Int.FromByteArray(RawInput.Skip(28).Take(2).ToArray()); - int TempSpindleNut = S7.Net.Types.Int.FromByteArray(RawInput.Skip(30).Take(2).ToArray()); - int TempMotoModule = S7.Net.Types.Int.FromByteArray(RawInput.Skip(32).Take(2).ToArray()); - int TempOilCirculation = S7.Net.Types.Int.FromByteArray(RawInput.Skip(34).Take(2).ToArray()); - int TempHydraulicUnit = S7.Net.Types.Int.FromByteArray(RawInput.Skip(36).Take(2).ToArray()); - // press in BAR - int PressHydraulicPump = S7.Net.Types.Int.FromByteArray(RawInput.Skip(38).Take(2).ToArray()); - int PressHydraulicAccumulator = S7.Net.Types.Int.FromByteArray(RawInput.Skip(40).Take(2).ToArray()); - int PressCounterforceOil = S7.Net.Types.Int.FromByteArray(RawInput.Skip(42).Take(2).ToArray()); - int PressCounterforceGas = S7.Net.Types.Int.FromByteArray(RawInput.Skip(44).Take(2).ToArray()); - // forze in kN (10^3 Newton) - int ForcePressureActual = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(46).Take(4).ToArray()); - int ForceOnBushing = S7.Net.Types.Int.FromByteArray(RawInput.Skip(50).Take(2).ToArray()); - - if (utils.CRB("enableTSVC")) - { - // per sicurezza prendo 1 sec avanti così da prendere tutti i valori insieme - DateTime adesso = DateTime.Now.AddSeconds(1); - bool[] scaduti = new bool[16]; - // salvo in stack le VC rilevate - scaduti[0] = stackVal_TSVC("RamPosition", RamPosition, adesso); - scaduti[1] = stackVal_TSVC("LowerEjectorPosition", LowerEjectorPosition, adesso); - scaduti[2] = stackVal_TSVC("UpperTool", UpperTool, adesso); - scaduti[3] = stackVal_TSVC("TempMainMotorU", TempMainMotorU, adesso); - scaduti[4] = stackVal_TSVC("TempMainMotorV", TempMainMotorV, adesso); - scaduti[5] = stackVal_TSVC("TempMainMotorW", TempMainMotorW, adesso); - scaduti[6] = stackVal_TSVC("TempSpindleNut", TempSpindleNut, adesso); - scaduti[7] = stackVal_TSVC("TempMotoModule", TempMotoModule, adesso); - scaduti[8] = stackVal_TSVC("TempOilCirculation", TempOilCirculation, adesso); - scaduti[9] = stackVal_TSVC("TempHydraulicUnit", TempHydraulicUnit, adesso); - scaduti[10] = stackVal_TSVC("PressHydraulicPump", PressHydraulicPump, adesso); - scaduti[11] = stackVal_TSVC("PressHydraulicAccumulator", PressHydraulicAccumulator, adesso); - scaduti[12] = stackVal_TSVC("PressCounterforceOil", PressCounterforceOil, adesso); - scaduti[13] = stackVal_TSVC("PressCounterforceGas", PressCounterforceGas, adesso); - scaduti[14] = stackVal_TSVC("ForcePressureActual", ForcePressureActual, adesso); - scaduti[15] = stackVal_TSVC("ForceOnBushing", ForceOnBushing, adesso); - - // verifico SE devo riportare dati VC - if (baseUtils.CountTrue(scaduti) > 0) - { - RamPosition = (int)getVal_TSVC("RamPosition", scaduti[0]); - LowerEjectorPosition = (int)getVal_TSVC("LowerEjectorPosition", scaduti[1]); - UpperTool = (int)getVal_TSVC("UpperTool", scaduti[2]); - TempMainMotorU = (int)getVal_TSVC("TempMainMotorU", scaduti[3]); - TempMainMotorV = (int)getVal_TSVC("TempMainMotorV", scaduti[4]); - TempMainMotorW = (int)getVal_TSVC("TempMainMotorW", scaduti[5]); - TempSpindleNut = (int)getVal_TSVC("TempSpindleNut", scaduti[6]); - TempMotoModule = (int)getVal_TSVC("TempMotoModule", scaduti[7]); - TempOilCirculation = (int)getVal_TSVC("TempOilCirculation", scaduti[8]); - TempHydraulicUnit = (int)getVal_TSVC("TempHydraulicUnit", scaduti[9]); - PressHydraulicPump = (int)getVal_TSVC("PressHydraulicPump", scaduti[10]); - PressHydraulicAccumulator = (int)getVal_TSVC("PressHydraulicAccumulator", scaduti[11]); - PressCounterforceOil = (int)getVal_TSVC("PressCounterforceOil", scaduti[12]); - PressCounterforceGas = (int)getVal_TSVC("PressCounterforceGas", scaduti[13]); - ForcePressureActual = (int)getVal_TSVC("ForcePressureActual", scaduti[14]); - ForceOnBushing = (int)getVal_TSVC("ForceOnBushing", scaduti[15]); - - //vecchia gestione valori INT - //RamPosition = getVal_TSVC_int("RamPosition", scaduti[0]); - //LowerEjectorPosition = getVal_TSVC_int("LowerEjectorPosition", scaduti[1]); - //UpperTool = getVal_TSVC_int("UpperTool", scaduti[2]); - //TempMainMotorU = getVal_TSVC_int("TempMainMotorU", scaduti[3]); - //TempMainMotorV = getVal_TSVC_int("TempMainMotorV", scaduti[4]); - //TempMainMotorW = getVal_TSVC_int("TempMainMotorW", scaduti[5]); - //TempSpindleNut = getVal_TSVC_int("TempSpindleNut", scaduti[6]); - //TempMotoModule = getVal_TSVC_int("TempMotoModule", scaduti[7]); - //TempOilCirculation = getVal_TSVC_int("TempOilCirculation", scaduti[8]); - //TempHydraulicUnit = getVal_TSVC_int("TempHydraulicUnit", scaduti[9]); - //PressHydraulicPump = getVal_TSVC_int("PressHydraulicPump", scaduti[10]); - //PressHydraulicAccumulator = getVal_TSVC_int("PressHydraulicAccumulator", scaduti[11]); - //PressCounterforceOil = getVal_TSVC_int("PressCounterforceOil", scaduti[12]); - //PressCounterforceGas = getVal_TSVC_int("PressCounterforceGas", scaduti[13]); - //ForcePressureActual = getVal_TSVC_int("ForcePressureActual", scaduti[14]); - //ForceOnBushing = getVal_TSVC_int("ForceOnBushing", scaduti[15]); - - outVal.Add("RamPosition", $"{RamPosition:N1}"); - outVal.Add("LowerEjectorPosition", $"{LowerEjectorPosition:N1}"); - outVal.Add("UpperTool", $"{UpperTool:N1}"); - outVal.Add("TempMainMotorU", $"{TempMainMotorU}"); - outVal.Add("TempMainMotorV", $"{TempMainMotorV}"); - outVal.Add("TempMainMotorW", $"{TempMainMotorW}"); - outVal.Add("TempSpindleNut", $"{TempSpindleNut}"); - outVal.Add("TempMotoModule", $"{TempMotoModule}"); - outVal.Add("TempOilCirculation", $"{TempOilCirculation}"); - outVal.Add("TempHydraulicUnit", $"{TempHydraulicUnit}"); - outVal.Add("PressHydraulicPump", $"{PressHydraulicPump}"); - outVal.Add("PressHydraulicAccumulator", $"{PressHydraulicAccumulator}"); - outVal.Add("PressCounterforceOil", $"{PressCounterforceOil}"); - outVal.Add("PressCounterforceGas", $"{PressCounterforceGas}"); - outVal.Add("ForcePressureActual", $"{ForcePressureActual}"); - outVal.Add("ForceOnBushing", $"{ForceOnBushing}"); - - // salvo! - LastTSVC["RamPosition"] = RamPosition; - LastTSVC["LowerEjectorPosition"] = LowerEjectorPosition; - LastTSVC["UpperTool"] = UpperTool; - LastTSVC["TempMainMotorU"] = TempMainMotorU; - LastTSVC["TempMainMotorV"] = TempMainMotorV; - LastTSVC["TempMainMotorW"] = TempMainMotorW; - LastTSVC["TempSpindleNut"] = TempSpindleNut; - LastTSVC["TempMotoModule"] = TempMotoModule; - LastTSVC["TempOilCirculation"] = TempOilCirculation; - LastTSVC["TempHydraulicUnit"] = TempHydraulicUnit; - LastTSVC["PressHydraulicPump"] = PressHydraulicPump; - LastTSVC["PressHydraulicAccumulator"] = PressHydraulicAccumulator; - LastTSVC["PressCounterforceOil"] = PressCounterforceOil; - LastTSVC["PressCounterforceGas"] = PressCounterforceGas; - LastTSVC["ForcePressureActual"] = ForcePressureActual; - LastTSVC["ForceOnBushing"] = ForceOnBushing; - } - else - { - // se i dynData non sono disabilitati... - if (!disableDynData) - { - outVal.Add("DYNDATA", $"RamPosition {LastTSVC["RamPosition"]:N1} | ForcePressureActual {LastTSVC["ForcePressureActual"]} | ForceOnBushing {LastTSVC["ForceOnBushing"]}"); - } - } - } - else - { - // se i dynData non sono disabilitati... - if (!disableDynData) - { - outVal.Add("DYNDATA", $"RamPosition {LastTSVC["RamPosition"]:N1} | ForcePressureActual {LastTSVC["ForcePressureActual"]} | ForceOnBushing {LastTSVC["ForceOnBushing"]}"); - } - } - } - catch (Exception exc) - { - lgError(exc, "Errore in getDynData x Siemens LASCO"); - } - return outVal; - } - - public override string getPrgName() - { - string answ = ""; - try - { - string rawProdCode = S7.Net.Types.String.FromByteArray(RawInput.Skip(54).Take(12).ToArray()); - // primi due char sono \f e \n avanzamento carta e nuova linea... - answ = Regex.Replace(rawProdCode, @"\t|\n|\r|\f", ""); - } - catch (Exception exc) - { - lgError($"Errore in decodifica product code{Environment.NewLine}{exc}"); - } - return answ; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - public override void processWhatchDog() - { - // scrivo 1 volta al secondo il contatore incrementale su area apposita scrive nel primo - // byte, ultimo bit, il watchdog, mentre scrive nel primo 1 = setup, 0 = run - DateTime adesso = DateTime.Now; - if (adesso.Subtract(lastPLCWatchDog).TotalSeconds > watchDogPeriod) - { - // incremento - counterMes2Plc++; - // se > 1 --> 0 (balla solo 0..1) - if (counterMes2Plc > 1) counterMes2Plc = 0; - // salvo su DB - Dictionary task2exe = new Dictionary(); - Dictionary taskDone = new Dictionary(); - task2exe.Add("sendWatchDogMes2Plc", counterMes2Plc.ToString()); - taskDone = executeTasks(task2exe); - // salvo watchdog PLC - lastPLCWatchDog = adesso; - } - } - - #endregion Public Methods - - #region Protected Fields - - protected int counterMes2Plc = 0; - - protected int counterPlc2Mes = 0; - - protected int counterPlc2MesWrote = 0; - - protected DateTime lastPLCWatchDog; - - protected bool useNewSend = false; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza - * - * - * - BIT di stato - * - DBX0.0: RUN STATE - * - DBX0.1: CYCLE - * - DBX0.2: MANUAL MODE - * - DBX0.3: GENERAL ALARM - * - DBX0.4: ESTOP (1=OK, 0 = emergency) - * - DBX0.5: SAFETY DOORS - ----------------------------------------------------- */ - - byte mainData = RawInput[0]; - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - if ((mainData & (1 << 0)) == 1) - { - byteSignals += (1 << 1); - } - - // EMERGENZA - if ((mainData & (1 << 5)) == 1) - { - byteSignals += (1 << 5); - } - // ALLARME - if ((mainData & (1 << 3)) == 1) - { - byteSignals += (1 << 3); - } - - // MANUALE ... - if ((mainData & (1 << 2)) == 1) - { - byteSignals += (1 << 4); - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}")); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensNWSE.cs b/IOB-WIN-NEXT/IobSiemens/SiemensNWSE.cs deleted file mode 100644 index d951cb0a..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensNWSE.cs +++ /dev/null @@ -1,221 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; -using System.Threading; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti RobotSerice (es Smerigliature DONATI) - /// - public class SiemensNWSE : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS NWS - * - basasto su SIEMENS - * - S7 vers 1200 - * - * STRUTTURA MEMORIA DB100: (lettura) 50byte, - * G:\Drive condivisi\30_Clienti\Giacovelli - WIL\NWS - * - * - * DB100 - * B00..B15 --> 16 byte di allarmi (osmosi, depurazione, 6 x filtri) - * B20..B35 --> 16 byte di stati (osmosi, depurazione, 6 x filtri) - * B40..B49 --> 5 valori uint lettura parametri - * - * - * - * STRUTTURA MEMORIA DB101: (scrittura) 14byte, solo 2 impiegati x ora - * NB: segnali da tenere attivi ALMENO 3 secondi x farli recepire - * - * B0.0 Num Azzeramento volume acqua OSMOSI - * B0.1 Num Azzeramento volume acqua DEPURAZIONE - * - * B1.7 Num Attivazione modo DEMO (0 = disattivato) - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensNWSE(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione NWS"); - - if (IOBConf.optPar.ContainsKey("EMERGENCY_BYPASS")) - { - bool.TryParse(IOBConf.optPar["EMERGENCY_BYPASS"], out EmergencyBypass); - lgInfo($"Override EmergencyBypass da conf: {IOBConf.optPar["EMERGENCY_BYPASS"]} --> {EmergencyBypass}"); - } - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - lgInfo($"Chiamata executeTasks specifica IobSiemensNWS: {task2exe.Count} task ricevuti"); - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.forceResetPzCount: - // usato x resettare i contatori osmosi inversa e depurazione processo - // scrittura BIT su DB101.DBB0 per - MemBlock = new byte[1]; - // scrivo 3 x resettare entrambi i contatori - MemBlock = S7.Net.Types.Byte.ToByteArray(3); - memAddrWrite = "DB101.DB0"; - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - // attesa 3.5 sec sec - Thread.Sleep(3500); - // predispongo x reset valore 0... - MemBlock = S7.Net.Types.Byte.ToByteArray(0); - - break; - - // lasciato commentato, da rivalutare... -#if false - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("setParameter --> processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; -#endif - - default: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - } - - lgInfo($"executeTask | task name: {tName} | task value: {taskVal}"); - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (taskOk) - { - // aggiorno valore memoria... SE presente - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - memMap.mMapWrite[item.Key].value = item.Value; - lgInfo($"Aggiornato valore in mMapWrite per {item.Key}"); - } - lgInfo($"Eseguita con successo S7WriteBB per executeTasks: {item.Key} | {item.Value}"); - } - else - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Fields - - protected bool EmergencyBypass = false; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD 60 - * B0: POWER_ON - * B1: RUN - * B2: pzCount - NON usato - * B3: allarme (almeno 1 presente) - * B4: manuale - non usato - * B5: slowTC - non usato - * B6: WarmUpCoolDown - no usato - * B7: Emergenza armata (1) - * - ----------------------------------------------------- */ - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - - // processo dagli stati + gravi... - if (hasAlarms()) - { - byteSignals += (1 << 3); - } - else - { - byteSignals += (1 << 1); - } - - // se bypass emergenza attivo --> forzo a ARMED... - if (EmergencyBypass) - { - // segnalo NON emergenza - byteSignals += (1 << 7); - } - - // salvo! - B_input = byteSignals; - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensPressoilCei.cs b/IOB-WIN-NEXT/IobSiemens/SiemensPressoilCei.cs deleted file mode 100644 index 6e3aa1a2..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensPressoilCei.cs +++ /dev/null @@ -1,275 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti Pressoil+Cei (Pressa idraulica Valvital) - /// - public class SiemensPressoilCei : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS CEI PRESSOIL (impianti ad induzione in VALVITAL) - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB64 READ e DB67 WRITE, vedere file conf json - - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensPressoilCei(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione PRESSOIL - CEI"); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setProg: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setArt: - case taskType.setComm: - case taskType.setPzComm: - upsertKey(item.Key, item.Value); - // verifico se posso aggiornare valori in memoria... - if (memMap != null && memMap.mMapWrite != null) - { - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; - taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte"; - // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà - memMap.mMapWrite[item.Key].value = item.Value; - } - else - { - taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}"; - } - } - else - { - taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}"; - } - int byteSize = 0; - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - if (currMem.tipoMem == plcDataType.String) - { - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - } - else if (currMem.tipoMem == plcDataType.Int) - { - short valDInt = 0; - short.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.Int.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.DInt) - { - int valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.Word) - { - ushort valDInt = 0; - ushort.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.Word.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.DWord) - { - uint valDInt = 0; - uint.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DWord.ToByteArray(valDInt); - } - } - taskVal = item.Value; - break; - - case taskType.sendWatchDogMes2Plc: - // processo scrittura BIT su DB67.DBX0.0 - MemBlock = new byte[1]; - memAddrWrite = "DB67.DBB0"; - // compogo in byte... primo bit è setup/run, ultimo è watchdog - int valore = inSetup ? 1 : 0; - valore += (byte)(counterMes2Plc << 7); - MemBlock[0] = (byte)valore; - taskVal = $"VALUE DB67.0 --> {valore} | counter interno {counterMes2Plc}"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - case taskType.startSetup: - // salvo che SONO IN SETUP! - inSetup = true; - break; - - case taskType.stopSetup: - // salvo che SONO FUORI DAL SETUP! - inSetup = false; - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - // scrivo comunque! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - if (!taskOk) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Fields - - protected int counterMes2Plc = 0; - protected int counterPlc2Mes = 0; - protected DateTime lastPLCWatchDog; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza - * - * - * - BIT di stato - * - DBX0.0 - Life bit - * - DBX0.1 – Macchina lavora - * - DBX0.2 – Macchina in ciclo - * - DBX0.3 – Macchina in manuale - * - DBX0.4 – Macchina in allarme - * - DBX0.5 – Macchina in emergenza - * - ----------------------------------------------------- */ - - byte mainData = RawInput[0]; - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - // RUN se lavora ed in ciclo - if ((mainData & (1 << 1)) != 0 && (mainData & (1 << 2)) != 0) - { - byteSignals += (1 << 1); - } - // manuale - if ((mainData & (1 << 3)) != 0) - { - byteSignals += (1 << 4); - } - // allarme - if ((mainData & (1 << 4)) != 0) - { - byteSignals += (1 << 3); - } - // emergenza - if ((mainData & (1 << 5)) != 0) - { - byteSignals += (1 << 5); - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}"); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensRobotService.cs b/IOB-WIN-NEXT/IobSiemens/SiemensRobotService.cs deleted file mode 100644 index 6a8ff331..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensRobotService.cs +++ /dev/null @@ -1,278 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti RobotSerice (es Smerigliature DONATI) - /// - public class SiemensRobotService : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS RobotService - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB15: (lettura) 10byte, - * G:\Drive condivisi\30_Clienti\Donati\Schemi IOB-WIN\RobotService - * - * - * DB15 - * B0.0 Num PowerOn - * B0.1 Num Run - * B0.2 Num Contapezzi - * B0.3 Num Allarme - * B0.4 Num Manuale - * B0.5 Num MagOutPieno - * B0.6 Num MagInVuoto - * B0.7 Num EmergenzaArmata (0=triggered,premuta) - * Contapezzi DInt 2 - * PezziRiman DInt 6 - * - * - * STRUTTURA MEMORIA DB14: (scrittura) 520byte, - * G:\Drive condivisi\30_Clienti\Donati\Schemi IOB-WIN\RobotService - * - * - * DB14 - * Commessa Odl String[000..256] String (254) - * CodArt String[256..512] String (254) - * QtaRich DInt 512 numero pezzi lanciati - * PzCountRes Bool/Byte 516 al fronte di salita (0-->1) reset contapezzi e NON CONTA mentre è 1, se 0 conta - * - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensRobotService(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione RobotService"); - - if (IOBConf.optPar.ContainsKey("EMERGENCY_BYPASS")) - { - bool.TryParse(IOBConf.optPar["EMERGENCY_BYPASS"], out EmergencyBypass); - lgInfo($"Override EmergencyBypass da conf: {IOBConf.optPar["EMERGENCY_BYPASS"]} --> {EmergencyBypass}"); - } - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - lgInfo($"Chiamata executeTasks specifica IobSiemensRobotService: {task2exe.Count} task ricevuti"); - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceSetPzCount: - case taskType.setProg: - case taskType.sendWatchDogMes2Plc: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setPzComm: - case taskType.setArt: - case taskType.setComm: - upsertKey(item.Key, item.Value); - int byteSize = 0; - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - if (currMem.tipoMem == plcDataType.String) - { - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - } - else if (currMem.tipoMem == plcDataType.DInt) - { - int valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.Int) - { - short valInt = 0; - short.TryParse(item.Value, out valInt); - MemBlock = S7.Net.Types.Int.ToByteArray(valInt); - } - } - else - { - string rawMemConf = JsonConvert.SerializeObject(memMap, Formatting.Indented); - lgError($"Errore: non trovata chiave write in memMap.mMapWrite per {item.Key}{Environment.NewLine}Configurazione memoria R/W:{Environment.NewLine}{rawMemConf}"); - } - taskVal = item.Value; - break; - - case taskType.forceResetPzCount: - // processo scrittura BIT su DB6.DBB516 - MemBlock = new byte[1]; - MemBlock = S7.Net.Types.Byte.ToByteArray(1); - memAddrWrite = "DB14.DBB516"; - break; - - case taskType.startSetup: - // processo scrittura BIT su DB6.DBB516 - MemBlock = new byte[1]; - MemBlock = S7.Net.Types.Byte.ToByteArray(1); - memAddrWrite = "DB14.DBB516"; - break; - - case taskType.stopSetup: - // processo scrittura BIT su DB6.DBB516 - MemBlock = new byte[1]; - MemBlock = S7.Net.Types.Byte.ToByteArray(0); - memAddrWrite = "DB14.DBB516"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("setParameter --> processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - - lgInfo($"executeTask | task name: {tName} | task value: {taskVal}"); - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - if (taskOk) - { - // aggiorno valore memoria... SE presente - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - memMap.mMapWrite[item.Key].value = item.Value; - lgInfo($"Aggiornato valore in mMapWrite per {item.Key}"); - } - lgInfo($"Eseguita con successo S7WriteBB per executeTasks: {item.Key} | {item.Value}"); - } - else - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Fields - - protected bool EmergencyBypass = false; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: MagOutPieno - * B6: MagInVuoto - * B7: Emergenza armata (1) - * - ----------------------------------------------------- */ - - byte mainData = RawInput[0]; - - // copio il primo byte - int byteSignals = RawInput[0]; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals |= (1 << 0); - } - else - { - byteSignals &= ~(1 << 0); - } - - // se bypass emergenza attivo --> forzo a ARMED... - if (EmergencyBypass) - { - byteSignals |= (1 << 7); - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo($"Trasformazione dati: B0: {mainData} --> B_input: {B_input}"); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensSaet.cs b/IOB-WIN-NEXT/IobSiemens/SiemensSaet.cs deleted file mode 100644 index efa3e302..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensSaet.cs +++ /dev/null @@ -1,343 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti SAET - /// - public class SiemensSaet : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS SAET (impianti ad induzione in VALVITAL) - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB1275: primi 92 byte lettura, poi 56 byte scrittura, vedere doc allegato - * G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\SAET (forno e tempra) - * - * Si intende tutto con DB1275.DBxx - * - * - parametri processo - * - DBD00: Watchdog INT SAET Alive ( 1-9999 ) - * - * - DB60.DBD6: pressione camera filtrante (salvataggio del MAX ogni minuto) | var testVal = S7.Net.Types.Double.FromByteArray(memByteRead.Skip(0).Take(4).ToArray()); - * - DB60.DBD10: pressione linea utenze (salvataggio del MAX ogni minuto) - * - DB60.DBD14: temperatura acqua pulita (salvataggio del MAX ogni minuto) - * - * - BIT di stato - * - DBX2.1: READY TO RUN in AUTOMATICO - * - DBX2.3: Macchina in LAVORAZIONE - * - DBX2.4: WARNING Differenza tra Part Code MES - Saet (blu) - * - DBX2.5: se 1 --> LAMPADA ROSSA (allarmi almeno 1 attivo) - * - * PartCounter DINT 4.0 Conteggio Parziale di pezzi "OK" prodotti dalla macchina - * NumberCode String [12] 8.0 Valore numerico associato alla ricetta di produzione attualmente utilizzata dalla macchina - * NewCode INT 22.0 "1= Avvenuta ricezione del segnale ""richiesta nuovo ordine di produzione (NEW CODE)"" - * ricevuto dal server,impostabile su 1 solo quando la macchina NON è in produzione attiva" - * Potenza utilizzata ST.1 REAL 24 Potenza utilizzata dalla stazione di riscaldo 1 [kW] - * Potenza utilizzata ST.2 REAL 28 Potenza utilizzata dalla stazione di riscaldo 2 [kW] - * Potenza utilizzata ST.3 REAL 32 Potenza utilizzata dalla stazione di riscaldo 3 [kW] - * Potenza utilizzata ST.4 REAL 36 Potenza utilizzata dalla stazione di riscaldo 4 [kW] - * Lettura Pirometro ST.1 REAL 40 Lettura Pirometro della stazione di riscaldo 1 [°C] - * Lettura Pirometro ST.2 REAL 44 Lettura Pirometro della stazione di riscaldo 2 [°C] - * Lettura Pirometro ST.3 REAL 48 Lettura Pirometro della stazione di riscaldo 3 [°C] - * Lettura Pirometro ST.4 REAL 52 Lettura Pirometro della stazione di riscaldo 4 [°C] - * Temperatura Acqua Raff Conv. ST.1 REAL 56 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 1 [°C] - * Temperatura Acqua Raff Conv. ST.2 REAL 60 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 2 [°C] - * Temperatura Acqua Raff Conv. ST.3 REAL 64 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 3 [°C] - * Temperatura Acqua Raff Conv. ST.4 REAL 68 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 4 [°C] - * Part_Status ST.1 INT 72 Stato Pezzo Stazione di Riscaldo 1 (0=Assente 1=Grezzo 10=OK 11=NOK) - * Part_Status ST.2 INT 74 Stato Pezzo Stazione di Riscaldo 2 (0=Assente 1=Grezzo 10=OK 11=NOK) - * Part_Status ST.3 INT 76 Stato Pezzo Stazione di Riscaldo 3 (0=Assente 1=Grezzo 10=OK 11=NOK) - * Part_Status ST.4 INT 78 Stato Pezzo Stazione di Riscaldo 4 (0=Assente 1=Grezzo 10=OK 11=NOK) - * Reserve_12 REAL 80 Riserva - * Reserve_13 REAL 84 Riserva - * Reserve_14 REAL 88 Riserva - - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensSaet(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione SAET"); - lastPLCWatchDog = DateTime.Now.AddMinutes(-1); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // verifico non sia null - if (task2exe != null) - { - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setProg: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - break; - - case taskType.setArt: - upsertKey(item.Key, item.Value); - MemBlock = new byte[34]; - saveStringOnMemBlock(ref MemBlock, "setArt", 0, 32); - memAddrWrite = "DB1275.DBB96"; - taskVal = item.Value; - break; - - case taskType.setComm: - upsertKey(item.Key, item.Value); - MemBlock = new byte[14]; - saveStringOnMemBlock(ref MemBlock, "setComm", 0, 12); - memAddrWrite = "DB1275.DBB130"; - taskVal = item.Value; - break; - - case taskType.setPzComm: - // imposto i valori... - MemBlock = new byte[4]; - int numPz = 0; - int.TryParse(item.Value, out numPz); - MemBlock = S7.Net.Types.DInt.ToByteArray(numPz); - memAddrWrite = "DB1275.DBB144"; - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - // se restituiscce "" faccio altra prova... - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - case taskType.sendWatchDogMes2Plc: - MemBlock = new byte[2]; - MemBlock[1] = (byte)counterMes2Plc; - MemBlock[0] = (byte)(counterMes2Plc >> 8); - memAddrWrite = "DB1275.DBB92"; - taskVal = $"VALUE DB1275.92 --> {counterMes2Plc}"; - break; - - case taskType.endProd: - case taskType.startSetup: - // processo scrittura BIT x richiesta nuovo ordine a INIZIO setup --> è DINT! - MemBlock = new byte[2]; - MemBlock[0] = (byte)1; - MemBlock[1] = (byte)1; - memAddrWrite = "DB1275.DBB94"; - lgInfo($"Chiamata startSetup | memAddrWrite: {memAddrWrite} | MemBlock: {MemBlock}"); - break; - - case taskType.fixStopSetup: - case taskType.stopSetup: - // processo scrittura BIT x richiesta nuovo ordine a FINE setup - MemBlock = new byte[2]; - MemBlock[0] = (byte)0; - MemBlock[1] = (byte)0; - memAddrWrite = "DB1275.DBB94"; - lgInfo($"Chiamata stopSetup | memAddrWrite: {memAddrWrite} | MemBlock: {MemBlock}"); - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // verifico se posso aggiornare valori in memoria... - if (memMap != null && memMap.mMapWrite != null) - { - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; - taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte"; - // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà - memMap.mMapWrite[item.Key].value = item.Value; - } - else - { - taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}"; - } - } - else - { - taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}"; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - // scrivo comunque! - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - if (!taskOk) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}"); - } - } - } - - return taskDone; - } - - /// - /// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid) - /// - public override void processOverride() - { - } - - public override void processWhatchDog() - { - // scrivo 1 volta ogni n secondi il contatore incrementale su area apposita - DateTime adesso = DateTime.Now; - if (adesso.Subtract(lastPLCWatchDog).TotalSeconds > watchDogPeriod) - { - // incremento - counterMes2Plc++; - // se > 9999 --> 0 - if (counterMes2Plc > 9999) counterMes2Plc = 0; - // salvo su DB - Dictionary task2exe = new Dictionary(); - Dictionary taskDone = new Dictionary(); - task2exe.Add("sendWatchDogMes2Plc", counterMes2Plc.ToString()); - taskDone = executeTasks(task2exe); - // salvo watchdog PLC - lastPLCWatchDog = adesso; - } - } - - #endregion Public Methods - - #region Protected Fields - - protected int counterMes2Plc = 0; - protected int counterPlc2Mes = 0; - protected int counterPlc2MesWrote = 0; - protected DateTime lastPLCWatchDog; - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: anomalia - * - * - * - BIT di stato - * - DBX2.0: macchina accesa - * - DBX2.1: CICLO AUTO = NON HO ANOMALIE/ALLARMI (0 --> allarme) - * - DBX2.2: contapezzi - * - DBX2.3: MACCHINA IN CICLO AUTO = LAVORA - * - DBX2.4: ERRORE tra part code MES/SAET (blu) - * - DBX2.5: Anomalia presente (rosso) - ----------------------------------------------------- */ - - byte mainData = RawInput[2]; - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - if ((mainData & (1 << 3)) != 0) - { - byteSignals += (1 << 1); - } - - // controllo il bit ALLARME - if ((mainData & (1 << 1)) == 0) - { - byteSignals += (1 << 3); - } - - // controllo il bit ANOMALIA - if ((mainData & (1 << 5)) != 0) - { - byteSignals += (1 << 3); - } - - // considero NON auto come manuale... - if ((mainData & (1 << 3)) == 0) - { - byteSignals += (1 << 4); - } - - // salvo! - B_input = byteSignals; - - // processo il watchdog! - counterPlc2Mes = S7.Net.Types.Int.FromByteArray(RawInput.Skip(0).Take(2).ToArray()); - // ogni 60 registro... - if (Math.Abs(counterPlc2Mes - counterPlc2MesWrote) > 60) - { - lgInfo($"WatchDog da PLC: {counterPlc2Mes}"); - counterPlc2MesWrote = counterPlc2Mes; - } - // log opzionale! - if (verboseLog) - { - lgInfo($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}"); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensSimec.cs b/IOB-WIN-NEXT/IobSiemens/SiemensSimec.cs deleted file mode 100644 index ff068920..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensSimec.cs +++ /dev/null @@ -1,270 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; - -namespace IOB_WIN_NEXT.IobSiemens -{ - /// - /// Controllo Siemens specifico x impianti Simec - /// - public class SiemensSimec : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS SIMEC - * - basasto su SIEMENS - * - S7 vers 1500 - * - * STRUTTURA MEMORIA DB29: (lettura) 10byte, - * G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\26 - SIMEC Taglio\ - * - * Si intende lettura con DB29.DBxx, scrittura DB30.DBxx - * - * DB30 blocco dati scritto dal MES - * CodArt Array[0..19] of Char DBB0..19 - * CodComm Array[0..9] of Char DBB20..29 - * CodProgr Array[0..9] of Char DBB30..39 - * - * DB29 blocco dati letto dal MES Byte Num - * CicloOn Bool 0 0 - * MacchOn Bool 0 1 - * ManualeOn Bool 0 2 - * AllarmiOn Bool 0 3 - * EmergenzaOn Bool 0 4 - * EmergenzaPremuta Bool 0 5 - * b06 Bool 0 6 - * b07 Bool 0 7 - * b10 Bool 1 0 - * b11 Bool 1 1 - * b12 Bool 1 2 - * b13 Bool 1 3 - * b14 Bool 1 4 - * b15 Bool 1 5 - * b16 Bool 1 6 - * b17 Bool 1 7 - * ContapezziAssoluto DInt 2 - * Comtapezzi parziale DInt 6 - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// Classe base con i metodi x Siemens - /// - /// - /// - public SiemensSimec(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - lgInfo("NEW IOB SIEMENS versione SIMEC"); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool writeDone = false; - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte di default - byte[] MemBlock = new byte[1]; - string memAddrWrite = ""; - if (task2exe != null) - { - // cerco task specifici - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.fixStopSetup: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setProg: - case taskType.sendWatchDogMes2Plc: - case taskType.startSetup: - case taskType.stopSetup: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - lgInfo(taskVal); - break; - - case taskType.setPzComm: - case taskType.setArt: - case taskType.setComm: - upsertKey(item.Key, item.Value); - int byteSize = 0; - // verifico se posso aggiornare valori in memoria... - if (memMap != null && memMap.mMapWrite != null) - { - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - // recupero dati da memMap... altrimenti NULLA - if (memMap.mMapWrite.ContainsKey(item.Key)) - { - dataConf currMem = memMap.mMapWrite[item.Key]; - byteSize = currMem.size; - memAddrWrite = currMem.memAddr; - MemBlock = new byte[byteSize]; - if (currMem.tipoMem == plcDataType.String) - { - saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize); - } - else if (currMem.tipoMem == plcDataType.DInt) - { - int valDInt = 0; - int.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt); - } - else if (currMem.tipoMem == plcDataType.Int) - { - short valDInt = 0; - short.TryParse(item.Value, out valDInt); - MemBlock = S7.Net.Types.Int.ToByteArray(valDInt); - } - } - taskVal = item.Value; - } - else - { - taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}"; - } - } - else - { - taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}"; - } - if (!string.IsNullOrEmpty(memAddrWrite)) - { - // scrivo! - writeDone = true; - taskOk = S7WriteBB(ref MemBlock, memAddrWrite); - } - // se restituiscce "" faccio altra prova... - break; - - case taskType.setParameter: - // richiedo da URL i parametri WRITE da popolare - lgInfo("Chiamata processMemWriteRequests"); - taskVal = processMemWriteRequests(); - if (string.IsNullOrEmpty(taskVal)) - { - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) - { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; - } - } - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - break; - } - // aggiungo task! - taskDone.Add(item.Key, taskVal); - if (!taskOk && writeDone) - { - lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value} | taskOk {taskOk} | writeDone {writeDone}"); - } - } - } - return taskDone; - } - - #endregion Public Methods - - #region Protected Methods - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - - /* ----------------------------------------------------- - * bitmap MAPO STANDARD - * B0: POWER_ON - * B1: RUN - * B2: pzCount - * B3: allarme - * B4: manuale - * B5: emergenza (1=attiva/premuta, 0=armed) - * - * - BIT di stato - * DB29 blocco dati letto dal MES Byte Num - * CicloOn Bool 0 0 - * MacchOn Bool 0 1 - * ManualeOn Bool 0 2 - * AllarmiOn Bool 0 3 - * EmergenzaOn Bool 0 4 - * EmergenzaPremuta Bool 0 5 - * ContapezziAssoluto DInt 2 - * Comtapezzi parziale DInt 6 - * - ----------------------------------------------------- */ - - byte mainData = RawInput[0]; - - int byteSignals = 0; - // bit 0 (poweron) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSignals += (1 << 0); - } - - // lavora --> bit0 e bit1: cicloOn AND macchOn - if ((mainData & (1 << 0)) != 0 && (mainData & (1 << 1)) != 0) - { - byteSignals += (1 << 1); - } - - // controllo il bit ALARM - if ((mainData & (1 << 3)) != 0) - { - byteSignals += (1 << 3); - } - // controllo il bit emergenza dello status - if ((mainData & (1 << 5)) != 0) - { - byteSignals += (1 << 5); - } - - // check MANUALE ... - if ((mainData & (1 << 2)) != 0) - { - byteSignals += (1 << 4); - } - - // salvo! - B_input = byteSignals; - - // log opzionale! - if (verboseLog) - { - lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}"); - } - } - - #endregion Protected Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensTorri.cs b/IOB-WIN-NEXT/IobSiemens/SiemensTorri.cs deleted file mode 100644 index 5dcd3f37..00000000 --- a/IOB-WIN-NEXT/IobSiemens/SiemensTorri.cs +++ /dev/null @@ -1,551 +0,0 @@ -using IOB_UT_NEXT; -using MapoSDK; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace IOB_WIN_NEXT.IobSiemens -{ - public class SiemensTorri : Siemens - { - /* -------------------------------------------------------------------------------- - * Controlli SIEMENS TORRI - * - basasto su SIEMENS - * - S7 vers 1200 - * - * mod: 2019.01.19: aggiunta gestione segnale test/accensione/spegnimento (DB700.B1.4) --> mod StateMachine! - * mod: 2019.04.06: aggiunta indicazione (IOB--> PLC) di stato setup su DB701.B0.4 - * mod: 2024.12.05: gestione allarmi da file ext come base Siemens e opzione ENABLE_ALARM_LEGACY - * -------------------------------------------------------------------------------- */ - - #region Public Constructors - - /// - /// estende l'init della classe base con i metodi x Siemens specifici x Torri - /// - /// - /// - public SiemensTorri(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) - { - // gestione restart OpcUa client... - if (!string.IsNullOrEmpty(getOptPar("ENABLE_ALARM_LEGACY"))) - { - bool.TryParse(getOptPar("ENABLE_ALARM_LEGACY"), out enableAlarmLegacy); - } - // - lgInfo("NEW IOB SIEMENS versione TORRI avviato | vers 2024"); - } - - #endregion Public Constructors - - #region Public Methods - - /// - /// Processo i task richiesti e li elimino dalla coda 1:1 - /// - /// - public override Dictionary executeTasks(Dictionary task2exe) - { - // Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti... - Dictionary taskDone = new Dictionary(); - bool taskOk = false; - string taskVal = ""; - // inizio con 1 byte VUOTO - byte[] MemBlock = new byte[1]; - if (task2exe != null) - { - // cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4 - foreach (var item in task2exe) - { - taskOk = false; - taskVal = ""; - // converto richiesta in enum... - taskType tName = taskType.nihil; - Enum.TryParse(item.Key, out tName); - // controllo sulla KEY - switch (tName) - { - case taskType.nihil: - case taskType.forceResetPzCount: - case taskType.forceSetPzCount: - case taskType.setArt: - case taskType.setComm: - case taskType.setProg: - case taskType.sendWatchDogMes2Plc: - taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; - lgInfo($"Chiamata senza processing: taskOk: {taskOk} | taskVal: {taskVal}"); - break; - - case taskType.fixStopSetup: - MemBlock[0] = 0; - taskVal = "VALUE DB701.0.4 --> 0"; - lgInfo($"Chiamata fixStopSetup: taskOk: {taskOk} | taskVal: {taskVal}"); - break; - - case taskType.startSetup: - MemBlock[0] += (1 << 4); - taskVal = "VALUE DB701.0.4 --> 1"; - lgInfo($"Chiamata startSetup: taskOk: {taskOk} | taskVal: {taskVal}"); - break; - - case taskType.stopSetup: - MemBlock[0] = 0; - taskVal = "VALUE DB701.0.4 --> 0"; - lgInfo($"Chiamata stopSetup: taskOk: {taskOk} | taskVal: {taskVal}"); - break; - - default: - taskVal = "SKIPPED | NO EXEC"; - lgInfo($"Chiamata default senza processing: taskOk: {taskOk} | taskVal: {taskVal}"); - break; - } - taskDone.Add(item.Key, taskVal); - } - // scrivo comunque! - bool fatto = S7WriteBB(ref MemBlock); - } - return taskDone; - } - - /// - /// Recupera ULTIMO allarme... - /// - /// - public override Dictionary getCncAlarms() - { - // parto da ultimo vettore allarmi rilevato - Dictionary outVal = lastReadAlarms; - // se ho altro --> accodo - try - { - string almMsg = string.Format("{0} | {1}", currPLC.LastErrorCode.ToString(), currPLC.LastErrorString); - outVal.Add("CNC_ALARM", almMsg); - } - catch (Exception exc) - { - lgError(exc, "Errore in getCncAlarms"); - } - // resetto vettore allarmi - lastReadAlarms = new Dictionary(); - return outVal; - } - - /// - /// Recupero dati dinamici... - /// - public override Dictionary getDynData() - { - Dictionary outVal = new Dictionary(); -#if false - inizio = DateTime.Now; - EgwProxy.MultiCncLib.Focas1.ODBDY2_1 answ = FANUC_ref.getAllDynData(); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("PROC-DYN-DATA"), DateTime.Now.Subtract(inizio).Ticks); - 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... - EgwProxy.MultiCncLib.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"); - } -#endif - return outVal; - } - - /// - /// Recupero dati override in formato dictionary - /// - /// - public override Dictionary getOverrides() - { - Dictionary outVal = new Dictionary(); - uint valDW = 0; - // !!!FARE!!! recuperare da conf memoria, ora HARD CODED - outVal.Add("FEED_OVER", RawInput[19].ToString()); - outVal.Add("RAPID_OVER", RawInput[20].ToString()); - outVal.Add("CURR_MODE", decodeCurrMode(RawInput[21])); - // recupero RPM pezzo/mola !!!FARE!!! cambio nome da config, qui sono 01:conduttrice e - // 02:operatrice (3013), mentre sono pezzo/mola nella V100 - valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(24).Take(4).ToArray()); - outVal.Add("RPM_01", valDW.ToString()); - valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(28).Take(4).ToArray()); - outVal.Add("RPM_02", valDW.ToString()); - return outVal; - } - - /// - /// Recupero programma in lavorazione - /// - /// - public override string getPrgName() - { - string prgName = ""; -#if false - // 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"), ""); - } - catch (Exception exc) - { - lgError(string.Format("Eccezione in recupero PRG NAME MAIN:{0}{1}", Environment.NewLine, exc)); - } -#endif - 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(); - try - { - outVal.Add("CPU", currPLC.CPU.ToString()); - outVal.Add("MAX_PDU", currPLC.MaxPDUSize.ToString()); - outVal.Add("RACK", currPLC.Rack.ToString()); - outVal.Add("SLOT", currPLC.Slot.ToString()); - } - catch (Exception exc) - { - lgError(exc, "Errore in getSysInfo"); - } - return outVal; - } - - /// - /// Esegue processing MODE (e nel contempo recupera altri dati dell'area G) - /// - public override void processMode() - { - if (utils.CRB("enableMode")) - { -#if false - try - { - inizio = DateTime.Now; - // leggo tutto da 0 a 43... - int memIndex = 0; - FanucMemRW(R, FANUC.MemType.G, memIndex, ref MemBlockG); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-G-AREA", MemBlockG.Length), DateTime.Now.Subtract(inizio).Ticks); - // 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, "Errore in process Mode G43"); - } -#endif - } - } - - /// - /// Override salvataggio valori in memoria... - /// - /// tipo di DUMP - public override void saveMemDump(dumpType tipo) - { - } - - #endregion Public Methods - - #region Protected Fields - - protected Dictionary lastReadAlarms = new Dictionary(); - - #endregion Protected Fields - - #region Protected Methods - - /// - /// Decodifica il resto dell'area TORRI x i dati accessori (allarmi, ...) - /// - protected override void decodeOtherData() - { - if (verboseLog) - { - } - } - - /// - /// Effettua decodifica aree memoria alla bitmap usata x MAPO - /// - protected override void decodeToBaseBitmap() - { - // init a zero... - B_input = 0; - // TORRI: leggo i primi 8 bit hard coded... - int byteSem = RawInput[0]; - - // azzero powerOn... - byteSem &= ~(1 << 0); - // bit 0 (powerOn) imposto a 1 SE connected... - if (currPLC.IsConnected) - { - byteSem += (1 << 0); - } - - // azzero i bit NON gestiti (2-5-6-7) - byteSem &= ~(1 << 2); - byteSem &= ~(1 << 5); - byteSem &= ~(1 << 6); - byteSem &= ~(1 << 7); - // leggo bit DB700.B1.4 e lo porto al bit 5 --> ciclo test/accensione/spegnimento - if ((RawInput[1] & (1 << 4)) != 0) //se RawInput[1] & 16-- > 5° bit-- > TEST - { - byteSem += (1 << 5); - } - // salvo infine variabile bit x invio - B_input = byteSem; - - // se ho il bit di allarme - if ((RawInput[0] & (1 << 3)) != 0) - { - checkAlarms(); - } - - // procedo SOLO SE è enabled IOB - if (IobOnline) - { - try - { - currODL = utils.callUrl(urlGetCurrODL); - // solo SE HO un ODL... - if (string.IsNullOrEmpty(currODL) || currODL == "0") - { - if (periodicLog) - { - lgInfo($"SiemensTorri | Lettura ODL andata a vuoto: currODL: {currODL}"); - } - } - else - { - // se variato o scaduto timeout log... - if (periodicLog || (currIdxODL.ToString() != currODL)) - { - lgInfo($"SiemensTorri | Lettura ODL, currODL: {currODL} --> currIdxODL prec: {currIdxODL}"); - } - // 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: {urlGetCurrODL}"); - lastWarnODL = DateTime.Now; - } - } - } - else - { - // imposto currODL a vuoto! - currODL = ""; - if (periodicLog) - { - lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto"); - } - } - if (!string.IsNullOrEmpty(currODL) && currODL != "0") - { - // ora processo il contapezzi... - string retVal = ""; - // controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x - // distanziare invio e ridurre letture - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - // Salvo il contapezzi della macchina - retVal = utils.callUrlNow(urlSetPzCountMAC + contapezziPLC.ToString()); - // verifica se tutto OK, ovvero conferma i pezzi inviati - if (retVal != contapezziPLC.ToString()) - { - // errore salvataggio contapezzi - lgInfo($"Errore salvataggio Contapezzi PLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB {contapezziIOB} | Valore tornato: {retVal}"); - // rileggo il counter pezzi da server - pzCntReload(true); - } - - // se sono differenti MOSTRO... - if (contapezziPLC != contapezziIOB) - { - // registro contapezzi - lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB: {contapezziIOB}"); - } - if ((contapezziPLC > contapezziIOB)) - { - // salvo nuovo contapezzi (incremento di 1...) + richiesta refresh conteggio - contapezziIOB++; - needRefreshPzCount = true; - // salvo in semaforo! - B_input += 1 << 2; - // registro contapezzi - lgInfo($"contapezziPLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB {contapezziIOB}"); - } - - // Salvo il contapezzi della macchina - retVal = utils.callUrlNow(urlSetPzCount + contapezziIOB.ToString()); - // verifica se tutto OK, ovvero conferma i pezzi inviati - if (retVal != contapezziIOB.ToString()) - { - // errore salvataggio contapezzi - lgInfo($"Errore salvataggio contapezziPLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB {contapezziIOB} | Valore tornato: {retVal}"); - // rileggo il counter pezzi da server - pzCntReload(true); - } - - // verifico se variato contapezzi... e se passato ritardo minimo... - if ((contapezziPLC - contapezziIOB) > minSendPzCountBlock) - { - trySendPzCountBlock(""); - } - - // invio a server contapezzi (aggiornato) - retVal = utils.callUrlNow(urlSetPzCount + contapezziIOB.ToString()); - // verifica se tutto OK - if (retVal != contapezziIOB.ToString()) - { - // errore salvataggio contapezzi - lgInfo($"Errore salvataggio Contapezzi SIEMENS-TORRI: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}"); - // rileggo il counter pezzi da server - pzCntReload(true); - } - - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - else - { - if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) - { - lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB: {contapezziIOB}"); - // resetto timer... - lastPzCountSend = DateTime.Now; - } - } - - // log opzionale! - if (verboseLog) - { - lgInfo("Trasformazione B_input: {B_input}"); - } - } - - #endregion Protected Methods - - #region Private Fields - - /// - /// gestione allarmi classica torri come eventi FluxLog - /// - private bool enableAlarmLegacy = false; - - #endregion Private Fields - - #region Private Methods - - private int checkAlarmBank(string memAddrAlarms) - { - int trovato = 0; - uint valDW = 0; - var MemBlockPZ = new byte[4]; - bool fatto = S7ReadBB(ref MemBlockPZ, memAddrAlarms, 4); - if (fatto) - { - valDW = S7.Net.Types.DWord.FromByteArray(MemBlockPZ.ToArray()); - // se <> 0 --> log e accodo a dynData - if (valDW != 0) - { - string key = $"MTH_ALARM_{memAddrAlarms}_{valDW}"; - var biteVal = baseUtils.binaryForm(valDW); - lgInfo($"Stato allarmi rilevati: {key} | {valDW} | {biteVal}"); - // accodo a dictionary - string almMsg = $"{DateTime.Now} | val {valDW} | {biteVal}"; - // se non ci fosse aggiungo - if (!lastReadAlarms.ContainsKey(key)) - { - lastReadAlarms.Add(key, almMsg); - } - trovato++; - } - } - return trovato; - } - - private void checkAlarms() - { - int trovati = 0; - // SE ho la gestione legacy allarmi sennò nulla... - if (enableAlarmLegacy) - { - // test gestione da conf alarmMap... - if (alarmMaps != null && alarmMaps.Count > 0) - { - foreach (var item in alarmMaps) - { - // da rivedere procedura x usare metodi di gestione allarmi con check differenze + invio alarmLog... - trovati += checkAlarmBank(item.memAddr); - } - } - // legacy... tolto! -#if false - else - { - // leggo i banchi allarmi : cablato D700.DBDW2 --> D700 DBDW14, sono 4 banchi a 32 bit - // da verificare - - // ciclo nei 4 banchi... - trovati += checkAlarmBank("DB700.DBDW2"); - trovati += checkAlarmBank("DB700.DBDW6"); - trovati += checkAlarmBank("DB700.DBDW10"); - trovati += checkAlarmBank("DB700.DBDW14"); - } -#endif - } - } - - #endregion Private Methods - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/memAreaFanuc.cs b/IOB-WIN-NEXT/memAreaFanuc.cs index da8f1cf0..f65a0ec4 100644 --- a/IOB-WIN-NEXT/memAreaFanuc.cs +++ b/IOB-WIN-NEXT/memAreaFanuc.cs @@ -135,60 +135,4 @@ namespace IOB_WIN_NEXT #endregion Public Fields } -#if false - /// - /// Definizione area memoria SIEMENS - /// - public class memAreaSiemens - { - #region Public Fields - - /// - /// Indice DB - /// - public int DbNum = 0; - - /// - /// Indice partenza memoria (es DBD0 --> 0) - /// - public int indiceMem = 0; - - /// - /// Tipo Memoria (DBD, DBW...) - /// - public string tipoMem = ""; - - #endregion Public Fields - - #region Public Constructors - - /// - /// Inizializza da un formato stringa - /// - /// - public memAreaSiemens(string strFormat) - { - if (!string.IsNullOrEmpty(strFormat)) - { - string[] memComp = strFormat.Split('.'); - int.TryParse(memComp[0].Replace("DB", ""), out DbNum); - //tipoMem = memComp[1].Substring(2, 1); - tipoMem = ""; - for (int i = 0; i < memComp[1].Length; i++) - { - if (char.IsLetter(memComp[1][i])) - { - tipoMem += memComp[1][i]; - } - } - // rimuovo DB iniziale.. - tipoMem = tipoMem.Replace("DB", ""); - // ciclo x trovare SOLO stringa - int.TryParse(memComp[1].Replace("DB", "").Replace(tipoMem, ""), out indiceMem); - } - } - - #endregion Public Constructors - } -#endif } \ No newline at end of file diff --git a/IOB-WIN-NEXT/packages.config b/IOB-WIN-NEXT/packages.config index d29115ce..4e67bf6d 100644 --- a/IOB-WIN-NEXT/packages.config +++ b/IOB-WIN-NEXT/packages.config @@ -28,7 +28,6 @@ - diff --git a/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini b/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini index 601850d9..3fd3cfb5 100644 --- a/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini +++ b/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini @@ -17,38 +17,10 @@ CLI_INST=SteamWareSim ;--- TEST sul campo ; SIMULAZIONE verso server ufficio ;STARTLIST=SIMUL_01,SIMUL_02,SIMUL_03,SIMUL_04 -;STARTLIST=PIZ09 -;STARTLIST=VL25 -;STARTLIST=SIMUL_03 -;STARTLIST=GIACO_CEDAX_001 -;STARTLIST=GIACO_ICOEL_002 -;STARTLIST=GIACO_CENTERFRIGO -;STARTLIST=GIACO_NWSE -;STARTLIST=SIM_DP_01 -;STARTLIST=WPS -;STARTLIST=FINASSI_HELPI_01 -;STARTLIST=FINASSI_OMP_01 -;STARTLIST=BAGLIETTO_CIMOLAI_01 -;STARTLIST=GIACO_SAIM_003 -;STARTLIST=PIZ09 -;STARTLIST=IMI_RIMOR_SAB_01 -;STARTLIST=IMI_RIMOR_SAB_02 -;STARTLIST=IMI_RIMOR_VER_01 -;STARTLIST=IMI_RIMOR_VER_02 -;STARTLIST=IMI_PAMA_392 -;STARTLIST=Tend_FIMAT_01 -;STARTLIST=PIZ10 -;STARTLIST=IMI_SOITAAB_Z2342_02 -;STARTLIST=IMI_GOMBA -;STARTLIST=SIMUL_02 -;STARTLIST=SIM_DP_01 -;STARTLIST=FTP_SONATEST -;STARTLIST=L020 -;STARTLIST=PING -;STARTLIST=VL27 ;NB: mettere copy always ai file di conf x fare test... -STARTLIST=PIZ08 +;STARTLIST=PIZ08 +STARTLIST=3013 MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-SIEMENS/IOB-WIN-SIEMENS.csproj b/IOB-WIN-SIEMENS/IOB-WIN-SIEMENS.csproj index 59f50bb8..1ca566b2 100644 --- a/IOB-WIN-SIEMENS/IOB-WIN-SIEMENS.csproj +++ b/IOB-WIN-SIEMENS/IOB-WIN-SIEMENS.csproj @@ -199,15 +199,9 @@ - - Always - - - Always - - - Always - + + + Always diff --git a/IOB-WIN-SIEMENS/postBuildTgt.bat b/IOB-WIN-SIEMENS/postBuildTgt.bat index 8c745c52..3da25dd3 100644 --- a/IOB-WIN-SIEMENS/postBuildTgt.bat +++ b/IOB-WIN-SIEMENS/postBuildTgt.bat @@ -88,9 +88,9 @@ REM IOBVPN4MACHINE REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-SIEMENS-DEB /MIR REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-SIEMENS-DEB /MIR /log:RobocopyTransfer.log REM ROBOCOPY %2 Z:\IOB-WIN-SIEMENS-DEB /MIR +ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-SIEMENS-DEB /MIR REM ROBOCOPY %2 \\10.51.90.10\Steamware\IOB-WIN-SIEMENS-DEB /MIR -REM ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-SIEMENS-DEB /MIR -ROBOCOPY %2 \\10.51.90.11\Steamware\IOB-WIN-SIEMENS-DEB /MIR +REM ROBOCOPY %2 \\10.51.90.11\Steamware\IOB-WIN-SIEMENS-DEB /MIR goto END From a036126be3374b66e2c4f97d3a71b724e5ec564e Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 15 Jan 2025 15:51:24 +0100 Subject: [PATCH 2/4] Inizio add adapter FANUC --- IOB-WIN-FANUC/AdapterFormNext.cs | 56 ++ IOB-WIN-FANUC/App.Debug.config | 10 + IOB-WIN-FANUC/App.Release.config | 11 + IOB-WIN-FANUC/App.config | 170 ++++ IOB-WIN-FANUC/IOB-WIN-FANUC.csproj | 158 ++++ IOB-WIN-FANUC/MainFormNext.cs | 40 + IOB-WIN-FANUC/NLog.config | 39 + IOB-WIN-FANUC/Program.cs | 24 + IOB-WIN-FANUC/Properties/AssemblyInfo.cs | 21 + IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini | 50 + IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini | 61 ++ .../Properties/DATA/CONF/SIMUL_01.ini | 120 +++ .../Properties/DATA/CONF/SIMUL_01.json | 410 +++++++++ .../Properties/DATA/CONF/SIMUL_01_WD.ini | 51 ++ .../Properties/DATA/CONF/SIMUL_01_alarm.json | 859 ++++++++++++++++++ IOB-WIN-FANUC/Properties/Iob/GenericNext.cs | 13 + .../Properties/Resources.Designer.cs | 71 ++ IOB-WIN-FANUC/Properties/Resources.resx | 117 +++ IOB-WIN-FANUC/Properties/Settings.Designer.cs | 30 + IOB-WIN-FANUC/Properties/Settings.settings | 7 + .../Properties/logs/.placeholder.txt | 1 + IOB-WIN-FANUC/Resources/ChangeLog.html | 120 +++ IOB-WIN-FANUC/Resources/Circuit.ico | Bin 0 -> 164031 bytes IOB-WIN-FANUC/Resources/Net.ico | Bin 0 -> 104399 bytes IOB-WIN-FANUC/Resources/STEAM-IOB-WIN.xml | Bin 0 -> 3688 bytes IOB-WIN-FANUC/Resources/Start-IOB-WIN.bat | 15 + IOB-WIN-FANUC/Resources/SteamWare.ico | Bin 0 -> 279582 bytes IOB-WIN-FANUC/Resources/logoSteamware.png | Bin 0 -> 3402 bytes IOB-WIN-FANUC/Resources/manifest.xml | 7 + IOB-WIN-FANUC/docfx.json | 68 ++ IOB-WIN-FANUC/index.md | 11 + IOB-WIN-FANUC/index.pdf | Bin 0 -> 27994 bytes IOB-WIN-FANUC/packages.config | 20 + IOB-WIN-FANUC/postBuildTgt.bat | 97 ++ IOB-WIN-FANUC/setupTgt.bat | 25 + IOB-WIN-FANUC/temp/.placeholder | 1 + IOB-WIN-FANUC/toc.yml | 6 + 37 files changed, 2689 insertions(+) create mode 100644 IOB-WIN-FANUC/AdapterFormNext.cs create mode 100644 IOB-WIN-FANUC/App.Debug.config create mode 100644 IOB-WIN-FANUC/App.Release.config create mode 100644 IOB-WIN-FANUC/App.config create mode 100644 IOB-WIN-FANUC/IOB-WIN-FANUC.csproj create mode 100644 IOB-WIN-FANUC/MainFormNext.cs create mode 100644 IOB-WIN-FANUC/NLog.config create mode 100644 IOB-WIN-FANUC/Program.cs create mode 100644 IOB-WIN-FANUC/Properties/AssemblyInfo.cs create mode 100644 IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini create mode 100644 IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini create mode 100644 IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.ini create mode 100644 IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.json create mode 100644 IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_WD.ini create mode 100644 IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_alarm.json create mode 100644 IOB-WIN-FANUC/Properties/Iob/GenericNext.cs create mode 100644 IOB-WIN-FANUC/Properties/Resources.Designer.cs create mode 100644 IOB-WIN-FANUC/Properties/Resources.resx create mode 100644 IOB-WIN-FANUC/Properties/Settings.Designer.cs create mode 100644 IOB-WIN-FANUC/Properties/Settings.settings create mode 100644 IOB-WIN-FANUC/Properties/logs/.placeholder.txt create mode 100644 IOB-WIN-FANUC/Resources/ChangeLog.html create mode 100644 IOB-WIN-FANUC/Resources/Circuit.ico create mode 100644 IOB-WIN-FANUC/Resources/Net.ico create mode 100644 IOB-WIN-FANUC/Resources/STEAM-IOB-WIN.xml create mode 100644 IOB-WIN-FANUC/Resources/Start-IOB-WIN.bat create mode 100644 IOB-WIN-FANUC/Resources/SteamWare.ico create mode 100644 IOB-WIN-FANUC/Resources/logoSteamware.png create mode 100644 IOB-WIN-FANUC/Resources/manifest.xml create mode 100644 IOB-WIN-FANUC/docfx.json create mode 100644 IOB-WIN-FANUC/index.md create mode 100644 IOB-WIN-FANUC/index.pdf create mode 100644 IOB-WIN-FANUC/packages.config create mode 100644 IOB-WIN-FANUC/postBuildTgt.bat create mode 100644 IOB-WIN-FANUC/setupTgt.bat create mode 100644 IOB-WIN-FANUC/temp/.placeholder create mode 100644 IOB-WIN-FANUC/toc.yml diff --git a/IOB-WIN-FANUC/AdapterFormNext.cs b/IOB-WIN-FANUC/AdapterFormNext.cs new file mode 100644 index 00000000..513eff9e --- /dev/null +++ b/IOB-WIN-FANUC/AdapterFormNext.cs @@ -0,0 +1,56 @@ +using IOB_UT_NEXT; +using IOB_WIN_FANUC.Iob; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IOB_WIN_FANUC +{ + public class AdapterFormNext: IOB_WIN_FORM.AdapterForm + { + + /// + /// Avvio MainForm + /// + /// + public AdapterFormNext(string codIOB): base(codIOB) + { + } + /// + /// carica IOB richiesto + /// + protected override void loadIobType() + { + if (IOBConf != null) + { + switch (tipoScelto) + { + + case tipoAdapter.PingWatchdog: + iobObj = new IOB_WIN_FORM.Iob.PingWatchDog(this, IOBConf); + btnStart.Enabled = true; + break; + + case tipoAdapter.SIMULA: + case tipoAdapter.ND: + default: + iobObj = new IOB_WIN_FORM.Iob.Simula(this, IOBConf); + btnStart.Enabled = false; + break; + } + lblCncText = $"CNC: {IOBConf.tipoIob} [{IOBConf.cncIpAddr}:{IOBConf.cncPort}]"; + lblSrvUrlText = $"SRV: {IOBConf.serverData.MPIP} | URL: {IOBConf.serverData.MPURL}{IOBConf.serverData.CMDBASE}"; + + // aggancio evento refresh + iobObj.eh_refreshed += IobObj_eh_refreshed; + + // carico i default values su interfaccia + setDefaults(); + + displayTaskAndLog($"Caricata conf per adapter {tipoScelto}"); + } + } + } +} diff --git a/IOB-WIN-FANUC/App.Debug.config b/IOB-WIN-FANUC/App.Debug.config new file mode 100644 index 00000000..42297ccc --- /dev/null +++ b/IOB-WIN-FANUC/App.Debug.config @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/IOB-WIN-FANUC/App.Release.config b/IOB-WIN-FANUC/App.Release.config new file mode 100644 index 00000000..0f80d173 --- /dev/null +++ b/IOB-WIN-FANUC/App.Release.config @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/IOB-WIN-FANUC/App.config b/IOB-WIN-FANUC/App.config new file mode 100644 index 00000000..305318e6 --- /dev/null +++ b/IOB-WIN-FANUC/App.config @@ -0,0 +1,170 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj b/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj new file mode 100644 index 00000000..6ff223ca --- /dev/null +++ b/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj @@ -0,0 +1,158 @@ + + + + + Debug + AnyCPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C} + WinExe + IOB_WIN_FANUC + IOB-WIN-FANUC + v4.6.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + VersGen.cs + + + Form + + + Form + + + + + Always + + + Always + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + True + Resources.resx + + + App.config + PreserveNewest + + + App.config + PreserveNewest + + + Always + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Always + + + + Always + + + + + Designer + PreserveNewest + + + + + Always + + + + Always + + + + Always + + + Always + + + + + + {90512e12-29fc-460d-94cc-648c2a072dbd} + IOB-UT-NEXT + + + {9ba331bb-9bf1-40e0-ac03-74b43d73a097} + IOB-WIN-FORM + + + + \ No newline at end of file diff --git a/IOB-WIN-FANUC/MainFormNext.cs b/IOB-WIN-FANUC/MainFormNext.cs new file mode 100644 index 00000000..740abad6 --- /dev/null +++ b/IOB-WIN-FANUC/MainFormNext.cs @@ -0,0 +1,40 @@ +using IOB_UT_NEXT; +using IOB_WIN_FANUC.Iob; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IOB_WIN_FANUC +{ + public class MainFormNext : IOB_WIN_FORM.MainForm + { + + /// + /// Avvio MainForm + /// + /// + public MainFormNext(string[] args) : base(args) + { + } + + /// + /// Apre la finestra child con conf + /// + protected override void openChild(string IOB) + { + if (IOB == null) + { + throw new ArgumentNullException(nameof(IOB)); + } + + AdapterFormNext child = new AdapterFormNext(IOB); + child.MdiParent = this; + child.Text = IOB; + child.Show(); + child.Shown += Child_Shown; + child.FormClosed += Child_FormClosed; + } + } +} diff --git a/IOB-WIN-FANUC/NLog.config b/IOB-WIN-FANUC/NLog.config new file mode 100644 index 00000000..cd1bcc98 --- /dev/null +++ b/IOB-WIN-FANUC/NLog.config @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + diff --git a/IOB-WIN-FANUC/Program.cs b/IOB-WIN-FANUC/Program.cs new file mode 100644 index 00000000..de41fb2b --- /dev/null +++ b/IOB-WIN-FANUC/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Windows.Forms; + +namespace IOB_WIN_FANUC +{ + internal static class Program + { + #region Private Methods + + /// + /// Punto di ingresso principale dell'applicazione. + /// Parametri di avvio + /// + [STAThread] + private static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainFormNext(args)); + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/AssemblyInfo.cs b/IOB-WIN-FANUC/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..631b960a --- /dev/null +++ b/IOB-WIN-FANUC/Properties/AssemblyInfo.cs @@ -0,0 +1,21 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IOB-WIN-FANUC")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("IOB-WIN-FANUC")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4f59c1d0-6cae-4b30-aa21-71126472187c")] diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini b/IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini new file mode 100644 index 00000000..9ac13668 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini @@ -0,0 +1,50 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC +;IDXMACC=3001 + +[CNC] +; TEST TORNOS! +;IP=192.168.1.80 +IP=172.16.199.10 +PORT=8193 + +[SERVER] +MPIP=http://10.74.82.219 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +BITRED=Y8.4 +BITYELLOW=Y8.5 +BITGREEN=Y8.6 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=BIT +PZ_CAD_MADDR=1602 +PZ_REQ_MADDR=1603 +PZ_DONE_MADDR=1604 +PZ_GTOT_MADDR=1605 + +[BRANCH] +NAME=master diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini b/IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini new file mode 100644 index 00000000..43299be3 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini @@ -0,0 +1,61 @@ +;Configurazione IOB-WIN GENERALE +[BRANCH] +NAME=master + +[SERVER] + +; Server Steamware +MPIP=10.74.82.218 +MPURL=/MP/IO +CMDREBO=/IOB/sendRebootGateway?GWIP= +CMDIOB2CALL=/IOB/getIob2call?GWIP= + +;Client Install +CLI_INST=SteamWareSim + +[IOB] +;--- TEST sul campo +; SIMULAZIONE verso server ufficio +;STARTLIST=SIMUL_01,SIMUL_02,SIMUL_03,SIMUL_04 +;STARTLIST=PIZ09 +;STARTLIST=VL25 +;STARTLIST=SIMUL_03 +;STARTLIST=GIACO_CEDAX_001 +;STARTLIST=GIACO_ICOEL_002 +;STARTLIST=GIACO_CENTERFRIGO +;STARTLIST=GIACO_NWSE +;STARTLIST=SIM_DP_01 +;STARTLIST=WPS +;STARTLIST=FINASSI_HELPI_01 +;STARTLIST=FINASSI_OMP_01 +;STARTLIST=BAGLIETTO_CIMOLAI_01 +;STARTLIST=GIACO_SAIM_003 +;STARTLIST=PIZ09 +;STARTLIST=IMI_RIMOR_SAB_01 +;STARTLIST=IMI_RIMOR_SAB_02 +;STARTLIST=IMI_RIMOR_VER_01 +;STARTLIST=IMI_RIMOR_VER_02 +;STARTLIST=IMI_PAMA_392 +;STARTLIST=Tend_FIMAT_01 +;STARTLIST=PIZ10 +;STARTLIST=IMI_SOITAAB_Z2342_02 +;STARTLIST=IMI_GOMBA +;STARTLIST=SIMUL_02 +;STARTLIST=SIM_DP_01 +;STARTLIST=FTP_SONATEST +;STARTLIST=L020 +;STARTLIST=PING +;STARTLIST=VL27 + +;NB: mettere copy always ai file di conf x fare test... +;STARTLIST=2014 +;STARTLIST=Tend_RAMA_10_47 +;STARTLIST=3024-PING +;STARTLIST=2015 +;STARTLIST=3024 +;STARTLIST=SIMUL_01 +;STARTLIST=WPS +STARTLIST=FTP-PING + + +MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.ini b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.ini new file mode 100644 index 00000000..08975356 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.ini @@ -0,0 +1,120 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=SIMULA +PING_MS_TIMEOUT=500 +MinDeltaSec=5 +EnableRedisQueue=true +;IOB_NAME=TFT_RAMA_001 + +[MACHINE] +VENDOR=STEAMWARE +MODEL=DEMO_SIMULATOR + +[CNC] +IP=127.0.0.1 +PORT=0000 + +[SERVER] +MPIP=http://10.74.82.218 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= +CMD_ODL_STARTED=/IOB/getCurrOdlStart/ +CMD_FORCLE_SPLIT_ODL=/IOB/forceSplitOdlFull/ +CMD_IDLE_TIME=/IOB/getIdlePeriod/ + +[MEMORY] + +[BLINK] +MAX_COUNTER_BLINK = 15 +BLINK_FILT=0 + +[OPTPAR] +DISABLE_SEND_WDST=TRUE +AUTO_CHANGE_ODL=true +AUTO_SNAPSHOT_DOSSIER=true +CHANGE_ODL_HOURS=24 +CHANGE_ODL_IDLE_MIN=0 +CHANGE_ODL_MODE=SIMUL +; gestione custom timer +timerIntMs=100 +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +PZCOUNT_MODE=BIT +ENABLE_PZ_RESET=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +; gestione cambio ODL automatico (minuti minimi durata) +MIN_DURATA_ODL=960 +; per il simulatore: 50|1 = WAIT 50, DURATION 1 con riferimento al PERIODO base (PER_BASE in ms, default 10 secondi) +PER_BASE=10100 +SIM_PZCNT=5|1 +SIM_ALARM=100|10 +SIM_MANU=50|6 +; indica gestione e simulazione bit 5 --> slow +SIM_SLOW=3600|20 +; indica gestione e simulazione bit 6 --> warmup/cooldown +SIM_WUCD=8000|20 +; indica gestione e simulazione bit 7 --> emergenza +SIM_EMRG=4000|10 +; indica simulazione delle funzionalità power ON/ OFF +SIM_POW_ON_OFF=true +T_ON=7 +T_OFF=22 +; indica simulazione controlli utente +SIM_RC=81|1 +; indica simulazione registro scarti +SIM_RS=161|1 +; indica simulazione dichiarazioni (note) utente +SIM_DICH=261|1 +; indica matricola opr simulata +SIM_MATR_OPR=1 + +; test x datasync... +DATA_SYNC_AT_START=true +; test sim dossiers tipo Kepware +SIM_KWP=true + +; gestione DynData simulati +ENABLE_DYN_DATA=TRUE +FORCE_DYN_DATA=TRUE +NEW_DYN_DATA=TRUE +; indica parametri gestione TcMan +TC_MAX_TC_FACTOR=3.9 +TC_LAMBDA=0.4 +TC_MAX_INCR=5 +MAX_PZ_INCR_PERC=1000 +; conf parametri memoria READ/WRITE +PARAM_CONF=SIMUL_01.json +ALARM_CONF=SIMUL_01_alarm.json +;test gestione logfile (eg: soitaab) +EnabelPodlManFull=true +CodGruppoIob=STEAMWARE-SIM-FASE-01 +; invio flux alla lettura file +sendFluxOnRead=true + +;conf test FTP +FTP_SERVER=ftp.steamware.net +FTP_USER=testftpuser +FTP_PWD=we4reFromB3rghem! +FTP_CERT= +FTP_SKIP=TRUE +FTP_LOC_DIR=temp\csv +FTP_REM_DIR= +CSV_ADD_HEADER=true + + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=Steamware +HostOS=WIN +HostName=IOB-WIN-SIMULA +HostAddr=10.74.82.76 diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.json b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.json new file mode 100644 index 00000000..d2895eb1 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.json @@ -0,0 +1,410 @@ +{ + "mMapWrite": { + "setArt": { + "name": "setArt", + "description": "Articolo", + "memAddr": "DB150.DBB12", + "tipoMem": "String", + "index": 12, + "size": 20, + "displOrdinal": 1 + }, + "setArtNum": { + "name": "setArtNum", + "description": "# Num Articolo", + "memAddr": "DB150.DBB112", + "tipoMem": "Int", + "index": 112, + "size": 4, + "displOrdinal": 1 + }, + "setComm": { + "name": "setComm", + "description": "Commessa", + "memAddr": "DB150.DBB32", + "tipoMem": "String", + "index": 32, + "size": 20, + "displOrdinal": 2 + }, + "setCommNum": { + "name": "setCommNum", + "description": "# NumCommessa", + "memAddr": "DB150.DBB132", + "tipoMem": "Int", + "index": 132, + "size": 4, + "displOrdinal": 2 + }, + "setPzComm": { + "name": "setPzComm", + "description": "Qta Richiesta", + "memAddr": "DB150.DBB8", + "tipoMem": "Int", + "index": 8, + "size": 4, + "displOrdinal": 3 + }, + "forceSetPzCount": { + "name": "forceSetPzCount", + "description": "Imposta Qta", + "memAddr": "DB150.DBB8", + "tipoMem": "Int", + "index": 8, + "size": 4, + "displOrdinal": 11 + }, + //"OPC_Set Point.Chain Spped": { + // "name": "OPC_Set Point.Chain Spped", + // "description": "Chain Spped", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Chain Spped", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Top Overfeeding": { + // "name": "OPC_Set Point.Top Overfeeding", + // "description": "Top Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Top Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Bottom Overfeeding": { + // "name": "OPC_Set Point.Bottom Overfeeding", + // "description": "Bottom Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Bottom Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Width Master": { + // "name": "OPC_Set Point.Width Master", + // "description": "Width Master", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Width Master", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Thermoset Time": { + // "name": "OPC_Set Point.Thermoset Time", + // "description": "Thermoset Time", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Thermoset Time", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Thermoset Temperature": { + // "name": "OPC_Set Point.Thermoset Temperature", + // "description": "Thermoset Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Thermoset Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Take Off Overfeeding": { + // "name": "OPC_Set Point.Take Off Overfeeding", + // "description": "Take Off Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Take Off Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Small Roller Overfeeding": { + // "name": "OPC_Set Point.Small Roller Overfeeding", + // "description": "Small Roller Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Small Roller Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Scroll Roller Overfeeding": { + // "name": "OPC_Set Point.Scroll Roller Overfeeding", + // "description": "Scroll Roller Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Scroll Roller Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Right Whell Overfeeding": { + // "name": "OPC_Set Point.Right Whell Overfeeding", + // "description": "Right Whell Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Right Whell Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Plaiter Overfeeding": { + // "name": "OPC_Set Point.Plaiter Overfeeding", + // "description": "Plaiter Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Plaiter Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Load cell Weight": { + // "name": "OPC_Set Point.Load cell Weight", + // "description": "Load cell Weight", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Load cell Weight", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Left Wheel Overfeeding": { + // "name": "OPC_Set Point.Left Wheel Overfeeding", + // "description": "Left Wheel Overfeeding", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Left Wheel Overfeeding", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Fan 105A Speed": { + // "name": "OPC_Set Point.Fan 105A Speed", + // "description": "Fan 105A Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 105A Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Fan 105 Speed": { + // "name": "OPC_Set Point.Fan 105 Speed", + // "description": "Fan 105 Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 105 Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Fan 103A Speed": { + // "name": "OPC_Set Point.Fan 103A Speed", + // "description": "Fan 103A Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 103A Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Fan 103 Speed": { + // "name": "OPC_Set Point.Fan 103 Speed", + // "description": "Fan 103 Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 103 Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Fan 101A Speed": { + // "name": "OPC_Set Point.Fan 101A Speed", + // "description": "Fan 101A Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 101A Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Fan 101 Speed": { + // "name": "OPC_Set Point.Fan 101 Speed", + // "description": "Fan 101 Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 101 Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Exhaust Fan 1 Speed": { + // "name": "OPC_Set Point.Exhaust Fan 1 Speed", + // "description": "Exhaust Fan 1 Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Exhaust Fan 1 Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Differentiation Spindle 5": { + // "name": "OPC_Set Point.Differentiation Spindle 5", + // "description": "Differentiation Spindle 5", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 5", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Differentiation Spindle 4": { + // "name": "OPC_Set Point.Differentiation Spindle 4", + // "description": "Differentiation Spindle 4", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 4", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Differentiation Spindle 3": { + // "name": "OPC_Set Point.Differentiation Spindle 3", + // "description": "Differentiation Spindle 3", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 3", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Differentiation Spindle 2": { + // "name": "OPC_Set Point.Differentiation Spindle 2", + // "description": "Differentiation Spindle 2", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 2", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Differentiation Spindle 1": { + // "name": "OPC_Set Point.Differentiation Spindle 1", + // "description": "Differentiation Spindle 1", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 1", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Cooling Cell 1 Speed": { + // "name": "OPC_Set Point.Cooling Cell 1 Speed", + // "description": "Cooling Cell 1 Speed", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Cooling Cell 1 Speed", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Burner 6 Temperature": { + // "name": "OPC_Set Point.Burner 6 Temperature", + // "description": "Burner 6 Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 6 Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Burner 5 Temperature": { + // "name": "OPC_Set Point.Burner 5 Temperature", + // "description": "Burner 5 Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 5 Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Burner 4 Temperature": { + // "name": "OPC_Set Point.Burner 4 Temperature", + // "description": "Burner 4 Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 4 Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Burner 3 Temperature": { + // "name": "OPC_Set Point.Burner 3 Temperature", + // "description": "Burner 3 Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 3 Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Burner 2 Temperature": { + // "name": "OPC_Set Point.Burner 2 Temperature", + // "description": "Burner 2 Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 2 Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Burner 1 Temperature": { + // "name": "OPC_Set Point.Burner 1 Temperature", + // "description": "Burner 1 Temperature", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 1 Temperature", + // "index": 0, + // "size": 0 + //}, + //"OPC_Set Point.Air Humidity Preset Esa 1": { + // "name": "OPC_Set Point.Air Humidity Preset Esa 1", + // "description": "Air Humidity Preset Esa 1", + // "tipoMem": "String", + // "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Air Humidity Preset Esa 1", + // "index": 0, + // "size": 0 + //} + }, + "mMapRead": { + "TEMP_01": { + "name": "TEMP_01", + "description": "Temperatura 01", + "tipoMem": "Real", + "minVal": 18, + "maxVal": 24, + "displOrdinal": 4 + }, + "POWER_01": { + "name": "POWER_01", + "description": "Potenza impianto", + "tipoMem": "Int", + "minVal": 40, + "maxVal": 80, + "displOrdinal": 5 + }, + "FEED_OVER": { + "name": "FEED_OVER", + "description": "FEED override", + "tipoMem": "Int", + "minVal": 0, + "maxVal": 100, + "displOrdinal": 6 + }, + "RAPID_OVER": { + "name": "RAPID_OVER", + "description": "RAPID override", + "tipoMem": "Int", + "minVal": 50, + "maxVal": 120, + "displOrdinal": 7 + }, + "POS_X": { + "name": "POS_X", + "description": "Asse X", + "tipoMem": "Int", + "minVal": -2000, + "maxVal": 2000, + "displOrdinal": 8 + }, + "POS_Y": { + "name": "POS_Y", + "description": "Asse Y", + "tipoMem": "Int", + "minVal": 0, + "maxVal": 2000, + "displOrdinal": 9 + }, + "POS_Z": { + "name": "POS_Z", + "description": "Asse Z", + "tipoMem": "Int", + "minVal": 0, + "maxVal": 1500, + "displOrdinal": 10 + } + }, + "optKVP": { + "fluxLogReduce": true, + "fluxLogRedDeadBand": 1.5, + "fluxLogResendPeriod": 15, + "hasRecipe": true, + "maxPodlQty": 530, + "useLocalRecipe": true, + "path-locBase": "C:\\MesData\\", + "path-00-Arch": "ArchivioRicette\\FIMAT", + "path-01-Temp": "01-Temp\\FIMAT", + "path-02-Sent": "02-Inviate\\FIMAT", + "path-03-Recv": "03-Ricevute\\FIMAT", + "path-04-remReq": "Y:\\", + "path-05-remExe": "C:\\MesData\\Remote\\Dosed", + "path-06-remRec": "R:\\", + "path-outReport": "C:\\MesData\\Report", + "path-confSetup": "C:\\MesData\\Setup\\setupConsumi.json", + "replace-": "{{PODL}}", + "replace-": "Kg{{Qty}} | {{Note}}" + }, //, + //"BaseKeyTranslate": "ns=2;s=RamosaETN21.RamosaCJ2", + //"RecipeKeyTranslate": { + // "Present Value.General Fan": "Recipe.Chain Spped", + // "Present Value.Bottom Overfeeding": "Recipe.Bottom Overfeeding", + // "Present Value.Top Overfeeding": "Recipe.Top Overfeeding" + //} + "mMapWriteLink": { + "setArt": "setArtNum", + "setComm": "setCommNum" + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_WD.ini b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_WD.ini new file mode 100644 index 00000000..56bca173 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_WD.ini @@ -0,0 +1,51 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=PingWatchdog +PING_MS_TIMEOUT=500 +; attenzione che alcuni eventi vengo scritti cmq nel log di SIMUL_01 invece di SIMUL_01_WD +IOB_NAME=SIMUL_01 + +[MACHINE] +VENDOR=STEAMWARE +MODEL=WATCHDOG + +[CNC] +; ping vs WIN10-VPN-03 per test +IP=10.74.83.203 +PORT=0000 + +[SERVER] +MPIP=http://10.74.82.218 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= +CMD_ODL_STARTED=/IOB/getCurrOdlStart/ +CMD_FORCLE_SPLIT_ODL=/IOB/forceSplitOdlFull/ +CMD_IDLE_TIME=/IOB/getIdlePeriod/ + +[MEMORY] + +[BLINK] +MAX_COUNTER_BLINK = 15 +BLINK_FILT=0 + +[OPTPAR] +AUTO_CHANGE_ODL=false +POWEROFF_TIMEOUT_SEC=60 +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=Steamware +HostOS=WIN +HostName=IOB-WIN-SIMULA +HostAddr=10.74.82.76 diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_alarm.json b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_alarm.json new file mode 100644 index 00000000..4f6ed310 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_alarm.json @@ -0,0 +1,859 @@ +[ + { + "description": "Alarm Word 0 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 0", + "index": 0, + "size": 2, + "messages": [ + "1,ALLARME INVERTER CATENA TRASP. TESSUTO", + "2,ALLARME INVERTER CILINDRO SOVRALIMENTAZIONE SUPERIORE", + "3,ALLARME INVERTER CILINDRO SOVRALIMENTAZIONE INFERIORE", + "4,ALLARME INVERTER RUOTA SOVRALIMENTAZIONE SINISTRA", + "5,ALLARME INVERTER RUOTA SOVRALIMENTAZIONE DESTRA", + "6,ALLARME INVERTER STACCAPEZZA", + "7,ALLARME INVERTER FALDAROTOLATORE", + "8,ALLARME INVERTER FALDERUOLE", + "9,ALLARME INVERTER ESAUSTORE 1 ", + "10,ALLARME FUNE SICUREZZA USCITA", + "11,ALLARME VENTILATORE 1 (BASSO)", + "12, ALLARME VENTILATORE 2 (BASSO)", + "13,ALLARME F.C. MINIMO CAMPO MASTER", + "14,ALLARME F.C. MASSIMO CAMPO MASTER", + "15,ALLARME PROTEZIONE TAPPETO INGRESSO", + "16,RIFERIMENTO POTENZIOMETRI CAMPI ASSENTE" + ] + }, + + { + "description": "Alarm Word 1 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 1", + "index": 1, + "size": 2, + "messages": [ + "17,ALLARME CONDIZIONATORI", + "18,EMERGENZA IN CORSO !!!", + "19,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 2 POMPA 1", + "20,ALLARME POMPA RECUPERO CALORE 3", + "21,CONTROLLO UMIDITA' : FUORI CAMPO", + "22,ALLARME RILEVATORE ALTEZZA TESSUTO", + "23,ALLARME NON RILASCIO TESSUTO SINISTRO", + "24,ALLARME NON RILASCIO TESSUTO DESTRO", + "25,ALLARME ALIMENTAZIONE 24VAC QUADRO", + "26,ALLARME APRICIMOSSE", + "27,ALLARME ASCIUGACIMOSSE A INFRAROSSI", + "28,ALLARME PROTEZIONE CELLA DI RAFFREDDAMENTO 1", + "29,CAMPO PARALLELO 2 ALLARME PROTEZIONE", + "30,ALLARME VENTILATORE 3 (BASSO)", + "31,ALLARME VENTILATORE 4 (BASSO)", + "32,CAMPO PARALLELO 1 ALLARME PROTEZIONE" + ] + }, + + { + "description": "Alarm Word 2 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 2", + "index": 2, + "size": 2, + "messages": [ + "33,CAMPO PARALLELO 3 ALLARME PROTEZIONE", + "34,RAGGIUNTO MASSIMO CARICO CELLA DI CARICO TAPPETO", + "35,ALLARME FALLOPEZZA SINISTRO", + "36,ALLARME FALLOPEZZA DESTRO", + "37,PARATIE ANTERIORI APERTE", + "38,ALLARME AZIONAMENTO CAMPO CONICO", + "39,BLOCCO BRUCIATORE 9", + "40,CAMPO MASTER ALLARME PROTEZIONE ", + "41,ALLARME PRESSOSTATO TENDICATENA SINISTRO", + "42,ALLARME PRESSOSTATO TENDICATENA DESTRO", + "43,ALLARME MASSIMO ALLUNGAMENTO CATENA", + "44,ALLARME TIPO LAVORO USCITA NON SELEZIONATO", + "45,ALLARME RADDRIZZATRAMA", + "46,ALLARME SPREMITORE 1", + "47,BLOCCO BRUCIATORE 10", + "48,BLOCCO BRUCIATORE 11" + ] + }, + + { + "description": "Alarm Word 3 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 3", + "index": 3, + "size": 2, + "messages": [ + "49,BLOCCO BRUCIATORE 12", + "50,BLOCCO BRUCIATORE 1", + "51,BLOCCO BRUCIATORE 2", + "52,BLOCCO BRUCIATORE 3", + "53,BLOCCO BRUCIATORE 4", + "54,BIELLE FUORI POSIZIONE", + "55,GRUPPO FALDATORE FUORI POSIZIONE", + "56,SERIE ARRESTI APERTA", + "57,MANCANZA LUBRIFICANTE CATENA TRASP. TESSUTO", + "58,ALLARME INVERTER PICCOLO ROTOLO", + "59,ALLARME PROTEZIONE ALLARGATORI", + "60,ALLARME PROTEZIONE ASPIRACIMOSSE", + "61,ALLARME TAGLIACIMOSSE SINISTRA", + "62,ALLARME TAGLIACIMOSSE DESTRA", + "63,ALLARME INVERTER VENTILATORI INV101", + "64,ALLARME INVERTER VENTILATORI INV103" + ] + }, + + { + "description": "Alarm Word 4 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 4", + "index": 4, + "size": 2, + "messages": [ + "65,ALLARME TIMEOUT VITE CAMPO MASTER", + "66,ALLARME TIMEOUT VITE CAMPO PARALLELO 1", + "67,ALLARME TIMEOUT VITE CAMPO PARALLELO 2", + "68,ALLARME TIMEOUT VITE CAMPO PARALLELO 3", + "69,ALLARME TIMEOUT VITE CAMPO PARALLELO 4", + "70,ALLARME TIMEOUT VITE CAMPO PARALLELO 5", + "71,ALLARME TIMEOUT VITE CAMPO PARALLELO 6", + "72,ALLARME TIMEOUT VITE CAMPO PARALLELO 7", + "73,ALLARME TIMEOUT VITE CAMPO PARALLELO 8", + "74,ALLARME TIMEOUT VITE CAMPO PARALLELO 9", + "75,ALLARME DEVICE_NET ADDR. 32 DA BANCHETTO DI SPALMATURA", + "76,ALLARME INVERTER DOGAL ", + "77,ALLARME FOTOCELLULA TAPPETO USCITA PIENO", + "78,TEMPO DI CICLO PLC SOPRA MASSIMO IMPOSTATO", + "79,ERRORE INDIRIZZI SONDE BRUCIATORI", + "80,ALLARME VENTILATORE 4 (ALTO)" + ] + }, + + { + "description": "Alarm Word 5 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 5", + "index": 5, + "size": 2, + "messages": [ + "81,ALLARME VENTILATORE 5 (ALTO)", + "82,ALLARME VENTILATORE 6 (ALTO)", + "83,ALLARME VENTILATORE 7 (ALTO)", + "84,SONDA BRUCIATORE 1 INTERROTTA", + "85,SONDA BRUCIATORE 2 INTERROTTA", + "86,SONDA BRUCIATORE 3 INTERROTTA", + "87,SONDA BRUCIATORE 4 INTERROTTA", + "88,ALLARME DEVICE_NET ADDR. 0", + "89,ALLARME DEVICE_NET ADDR. 1", + "90,ALLARME DEVICE_NET ADDR. 2", + "91,ALLARME DEVICE_NET ADDR. 3", + "92,ALLARME DEVICE_NET ADDR. 4", + "93,ALLARME DEVICE_NET ADDR. 5", + "94,ALLARME DEVICE_NET ADDR. 6", + "95,ALLARME DEVICE_NET ADDR. 7", + "96,ALLARME DEVICE_NET ADDR. 8" + ] + }, + + { + "description": "Alarm Word 6 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 6", + "index": 6, + "size": 2, + "messages": [ + "97,ALLARME DEVICE_NET ADDR. 9", + "98,ALLARME DEVICE_NET ADDR. 10", + "99,ALLARME DEVICE_NET ADDR. 11", + "100,ALLARME DEVICE_NET ADDR. 12", + "101,ALLARME DEVICE_NET ADDR. 13", + "102,ALLARME DEVICE_NET ADDR. 14", + "103,ALLARME DEVICE_NET ADDR. 15", + "104,ALLARME DEVICE_NET ADDR. 16", + "105,ALLARME DEVICE_NET ADDR. 17", + "106,ALLARME DEVICE_NET ADDR. 18", + "107,ALLARME DEVICE_NET ADDR. 19", + "108,ALLARME DEVICE_NET ADDR. 20", + "109,ALLARME DEVICE_NET ADDR. 21", + "110,ALLARME DEVICE_NET ADDR. 22", + "111,ALLARME DEVICE_NET ADDR. 23", + "112,ALLARME DEVICE_NET ADDR. 24" + ] + }, + + { + "description": "Alarm Word 7 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 7", + "index": 7, + "size": 2, + "messages": [ + "113,ALLARME DEVICE_NET ADDR. 25", + "114,ALLARME DEVICE_NET ADDR. 26", + "115,BLOCCO BRUCIATORE 5", + "116,BLOCCO BRUCIATORE 6", + "117,BLOCCO BRUCIATORE 7", + "118,BLOCCO BRUCIATORE 8", + "119,SOVRATEMPERATURA BRUCIATORE 1", + "120,SOVRATEMPERATURA BRUCIATORE 2", + "121,SOVRATEMPERATURA BRUCIATORE 3", + "122,SOVRATEMPERATURA BRUCIATORE 4", + "123,SOVRATEMPERATURA BRUCIATORE 5", + "124,SOVRATEMPERATURA BRUCIATORE 6", + "125,SOVRATEMPERATURA BRUCIATORE 7", + "126,SOVRATEMPERATURA BRUCIATORE 8", + "127,SONDA BRUCIATORE 5 INTERROTTA", + "128,SONDA BRUCIATORE 6 INTERROTTA" + ] + }, + + { + "description": "Alarm Word 8 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 8", + "index": 8, + "size": 2, + "messages": [ + "129,SONDA BRUCIATORE 7 INTERROTTA", + "130,SONDA BRUCIATORE 8 INTERROTTA", + "131,SONDA BRUCIATORE 9 INTERROTTA", + "132,SONDA BRUCIATORE 10 INTERROTTA", + "133,SONDA BRUCIATORE 11 INTERROTTA", + "134,SONDA BRUCIATORE 12 INTERROTTA", + "135,SOVRATEMPERATURA BRUCIATORE 9", + "136,SOVRATEMPERATURA BRUCIATORE 10", + "137,SOVRATEMPERATURA BRUCIATORE 11", + "138,SOVRATEMPERATURA BRUCIATORE 12", + "139,ALLARME INVERTER VENTILATORI INV105", + "140,ALLARME INVERTER VENTILATORI INV107", + "141,ALLARME INVERTER VENTILATORI INV109", + "142,ALLARME INVERTER VENTILATORI INV111", + "143,ALLARME VENTILATORE 5 (BASSO)", + "144,ALLARME VENTILATORE 6 (BASSO)" + ] + }, + + { + "description": "Alarm Word 9 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 9", + "index": 9, + "size": 2, + "messages": [ + "145,ALLARME VENTILATORE 7 (BASSO)", + "146,ALLARME VENTILATORE 8 (BASSO)", + "147,ALLARME VENTILATORE 9 (BASSO)", + "148,ALLARME VENTILATORE 10 (BASSO)", + "149,ALLARME VENTILATORE 11 (BASSO)", + "150,ALLARME VENTILATORE 12 (BASSO)", + "151,ALLARME INVERTER ESAUSTORE 2", + "152,CAMPO PARALLELO 4 ALLARME PROTEZIONE", + "153,CAMPO PARALLELO 5 ALLARME PROTEZIONE", + "154,CAMPO PARALLELO 6 ALLARME PROTEZIONE", + "155,CAMPO PARALLELO 7 ALLARME PROTEZIONE", + "156,CAMPO PARALLELO 8 ALLARME PROTEZIONE", + "157,ALLARME INSEGUIMENTO VITE MASTER AGGIUNTA", + "158,ALLARME INVERTER CILINDRO RAFFREDDAMENTO", + "159,ALLARME TEMPERATURA ESAUSTORI", + "160,ALLARME INVERTER RECUPERO CALORE GRUPPO 1 " + ] + }, + + { + "description": "Alarm Word 10 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 10", + "index": 10, + "size": 2, + "messages": [ + "161,ALLARME FINECORSA SX TAPPETO USCITA", + "162,ALLARME FINECORSA DX TAPPETO USCITA", + "163,ALLARME INVERTER RECUPERO CALORE GRUPPO 2", + "164,ALLARME DEVICE_NET ADDR. 31", + "165,ALLARME CENTRATORE USCITA", + "166,COMPATTATORE NON PRONTO", + "167,ALLARME CONTROLLO PIROMETRI", + "168,ALLARME ALLARGATORE SU TAPPETO USCITA", + "169,ALLARME CONTROLLO FUMI", + "170,ALLARME FINECORSA BALLERINO ALTO", + "171,ALLARME FINECORSA BALLERINO BASSO", + "172,ALLARME PROTEZIONE ASPIRATORE VAPORIZZO INTENSIVO", + "173,ALLARME PROTEZIONE BRUCIATORE 1", + "174,ALLARME PROTEZIONE BRUCIATORE 2", + "175,ALLARME PROTEZIONE BRUCIATORE 3", + "176,ALLARME PROTEZIONE BRUCIATORE 4" + ] + }, + + { + "description": "Alarm Word 11 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 11", + "index": 11, + "size": 2, + "messages": [ + "177,ALLARME PROTEZIONE BRUCIATORE 5", + "178,ALLARME PROTEZIONE BRUCIATORE 6", + "179,ALLARME PROTEZIONE BRUCIATORE 7", + "180,ALLARME PROTEZIONE BRUCIATORE 8", + "181,ALLARME PROTEZIONE BRUCIATORE 9", + "182,ALLARME PROTEZIONE BRUCIATORE 10", + "183,ALLARME PROTEZIONE BRUCIATORE 11", + "184,ALLARME PROTEZIONE BRUCIATORE 12", + "185,TERMOFISSAGGIO O ESSICCAZIONE: TEMPERATURA FUORI CAMPO", + "186,TERMOFISSAGGIO O ESSICCAZIONE: VELOCITA' FUORI CAMPO", + "187,TERMOFISSAGGIO O ESSICCAZIONE: TEMPO FUORI CAMPO", + "188,SISTEMA CAMPI PARALLELI NON TARATO", + "189,ALLARME PROTEZIONE VENTOLE BRUCIATORI", + "190,CAMPO CONICO SINISTRO SU LIMITE CHIUSURA", + "191,CAMPO CONICO SINISTRO SU LIMITE APERTURA", + "192,CAMPO CONICO DESTRO SU LIMITE APERTURA" + ] + }, + + { + "description": "Alarm Word 12 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 12", + "index": 12, + "size": 2, + "messages": [ + "193,CAMPO CONICO DESTRO SU LIMITE CHIUSURA", + "194,FINECORSA CAMPO CONICO DESTRO SU TRAVERSA", + "195,FINECORSA CAMPO CONICO SINISTRO SU TRAVERSA", + "196,ALLARME PROTEZIONE INVERTER CAMPO CONICO SINISTRO", + "197,ALLARME PROTEZIONE INVERTER CAMPO CONICO DESTRO", + "198,ALLARME DEVICE_NET ADDR. 27", + "199,ALLARME VENTILATORE 8 (ALTO)", + "200,ALLARME VENTILATORE 9 (ALTO)", + "201,ALLARME VENTILATORE 10 (ALTO)", + "202,ALLARME VENTILATORE 11 (ALTO)", + "203,ALLARME VENTILATORE 12 (ALTO)", + "204,ALLARME VENTILATORE 1 (ALTO)", + "205,ALLARME VENTILATORE 2 (ALTO)", + "206,ALLARME VENTILATORE 3 (ALTO)", + "207,ALLARME PROTEZIONE CELLA DI RAFFREDDAMENTO 2", + "208,ALLARME FINECORSA TANDEM CONTROLLO ANSA TESSUTO" + ] + }, + + { + "description": "Alarm Word 13 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 13", + "index": 13, + "size": 2, + "messages": [ + "209,ALLARME FUNE SICUREZZA / PROTEZIONE RIBALTABILE ANTERIORE", + "210,ALLARME INVERTER VENTILATORI INV101A", + "211,ALLARME INVERTER VENTILATORI INV103A", + "212,ALLARME INVERTER VENTILATORI INV105A", + "213,ALLARME INVERTER VENTILATORI INV107A", + "214,ALLARME INVERTER VENTILATORI INV109A", + "215,ALLARME INVERTER VENTILATORI INV111A", + "216,ALLARME DA BANCHETTO DI SPALMATURA", + "217,ALLARME DEVICE_NET ADDR. 28", + "218,STOP JOG USCITA PER PESO RAGGIUNTO SU CELLA DI CARICO", + "219,DOGAL NON PRONTO", + "220,ALLARME PROTEZIONE CELLA RAFFREDDAMENTO 91A", + "221,MALFUNZIONAMENTO RECUPERO CALORE GRUPPO 1", + "222,ALLARME PROTEZIONE SOSTEGNO TESSUTO", + "223,TARATURA CAMPI CONICI NON EFFETTUATA!", + "224,ALLARME TIMEOUT VITE CAMPO PARALLELO 10" + ] + }, + + { + "description": "Alarm Word 14 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 14", + "index": 14, + "size": 2, + "messages": [ + "225,CAMPO PARALLELO 9 ALLARME PROTEZIONE", + "226,CAMPO PARALLELO 10 ALLARME PROTEZIONE", + "227,CAMPO PARALLELO 11 ALLARME PROTEZIONE", + "228,CAMPO PARALLELO 12 ALLARME PROTEZIONE", + "229,ALLARME FLUSSOSTATO RECUPERO CALORE 1", + "230,ALLARME FLUSSOSTATO RECUPERO CALORE 2", + "231,ALLARME FLUSSOSTATO RECUPERO CALORE 3", + "232,ALLARME PROTEZIONE VENTILATORE ASCIUGACIMOSSE", + "233,ALLARME PROTEZIONE RESISTENZE ASCIUGACIMOSSE", + "234,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 1 POMPA 1 ", + "235,ALLARME INCENDIO", + "236,ATTENZIONE ! ALLARME PRESENTE SU BANCHETTO DI SPALMATURA", + "237,MALFUNZIONAMENTO RECUPERO CALORE GRUPPO 2", + "238,ALLARME PROTEZIONE CELLA RAFFREDDAMENTO 91B", + "239,ALLARME PROTEZIONE PULISCISPILLI", + "240,BATTERIA PLC - LIVELLO BASSO" + ] + }, + + { + "description": "Alarm Word 15 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 15", + "index": 15, + "size": 2, + "messages": [ + "241,ALLARME CONTEMPORANEIT? TERMOSTATI SICUREZZA BRUCIATORI", + "242,BLOCCO VERSIONE SOFTWARE", + "243,SROTOLATORE NON PRONTO", + "244,ERRORE DI COMUNICAZIONE PROTOCOL MACRO", + "245,ALLARME TAGLIERINA URBAN", + "246,FINE TESSUTO IN INGRESSO", + "247,ALLARME PROTEZIONE SERVOVENTILAZIONI MOTORI", + "248,ALLARME INVERTER ARROTOLATORE TANGENZIALE", + "249,ALLARME SPREMITORE 2", + "250,ALLARME FS-91ER PLEVA", + "251,ALLARME LINEA EMERGENZA ARROTOLATORE", + "252,ALLARME FOTOCELLULE ARROTOLATORE", + "253,PORTA CASSETTA USCITA RAMOSA APERTA", + "254,ALLARME FINECORSA CILINDRO PROTEZIONE ARROTOLATORE ASSIALE", + "255,ALLARME PRESSOSTATI GRUPPO VALVOLE USCITA", + "256,ARROTOLATORE NON PRONTO" + ] + }, + + { + "description": "Alarm Word 16 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 16", + "index": 16, + "size": 2, + "messages": [ + "257,FINECORSA GRUPPO FALDATORE AVANTI", + "258,FINECORSA GRUPPO FALDATORE INDIETRO", + "259,ALLARME BATTERIA ELETTRICA 1", + "260,SOVRATEMPERATURA BATTERIA ELETTRICA 5", + "261,ALLARME BATTERIA ELETTRICA 2", + "262,RISCALDAMENTO QUADRO SPENTO", + "263,SOVRATEMPERATURA BATTERIA ELETTRICA 1", + "264,SOVRATEMPERATURA BATTERIA ELETTRICA 2", + "265,ALLARME BATTERIA ELETTRICA 3", + "266,EMERGENZA DA SPALMATRICE", + "267,ALLARME BATTERIA ELETTRICA 4", + "268,ALLARME BATTERIA ELETTRICA 5", + "269,SOVRATEMPERATURA BATTERIA ELETTRICA 3", + "270,SOVRATEMPERATURA BATTERIA ELETTRICA 4", + "271,ALLARME IDROSTATO RECUPERO CALORE 1", + "272,ALLARME SENSORE LIVELLO RECUPERO CALORE 1 : AGGIUNGERE LIQUIDO !" + ] + }, + + { + "description": "Alarm Word 17 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 17", + "index": 17, + "size": 2, + "messages": [ + "273,ALLARME RELE' CONTROLLO FASI", + "274,ALLARME DEVICE NET ADDR. 40 - MODULO GRT1-DRT USCITA RAMOSA", + "275,ALLARME PRESSOSTATO LINEA ENTRATA MACCHINA", + "276,ALLARME PRESSOSTATO LINEA USCITA MACCHINA", + "277,CAMPO CANNOCCHIALI 1 BLOCCATO", + "278,CAMPO CANNOCCHIALI 2 BLOCCATO", + "279,ALLARME DISCONTINUITA' CAMPI PARALLELI", + "280,ALLARME INSEGUIMENTO CAMPI PARALLELI - VITE LENTA", + "281,ALLARME LIMITE VITI", + "282,RAGGIUNTO MASSIMO CARICO SU CELLA DI CARICO", + "283,ALLARME PRESSOSTATO ESAUSTORE", + "284,EMERGENZA MOVIMENTO TESSUTO", + "285,EMERGENZA DA SPREMITORE 1", + "286,EMERGENZA DA RADDRIZZATRAMA", + "287,EMERGENZA DA SROTOLATORE", + "288,EMERGENZA DA ARROTOLATORE" + ] + }, + + { + "description": "Alarm Word 18 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 18", + "index": 18, + "size": 2, + "messages": [ + "289,ALLARME SICUREZZA BRUCIATORE 1", + "290,ALLARME SICUREZZA BRUCIATORE 2", + "291,ALLARME SICUREZZA BRUCIATORE 3", + "292,ALLARME SICUREZZA BRUCIATORE 4", + "293,ALLARME SICUREZZA BRUCIATORE 5", + "294,ALLARME SICUREZZA BRUCIATORE 6", + "295,ALLARME SICUREZZA BRUCIATORE 7", + "296,ALLARME SICUREZZA BRUCIATORE 8", + "297,ALLARME SICUREZZA BRUCIATORE 9", + "298,ALLARME SICUREZZA BRUCIATORE 10", + "299,ALLARME SICUREZZA BRUCIATORE 11", + "300,ALLARME SICUREZZA BRUCIATORE 12", + "301,ALLARME BRUCIATORE 1 SPENTO", + "302,ALLARME BRUCIATORE 2 SPENTO", + "303,ALLARME BRUCIATORE 3 SPENTO", + "304,ALLARME BRUCIATORE 4 SPENTO" + ] + }, + + { + "description": "Alarm Word 19 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 19", + "index": 19, + "size": 2, + "messages": [ + "305,ALLARME BRUCIATORE 5 SPENTO", + "306,ALLARME BRUCIATORE 6 SPENTO", + "307,ALLARME BRUCIATORE 7 SPENTO", + "308,ALLARME BRUCIATORE 8 SPENTO", + "309,ALLARME BRUCIATORE 9 SPENTO", + "310,ALLARME BRUCIATORE 10 SPENTO", + "311,ALLARME BRUCIATORE 11 SPENTO", + "312,ALLARME BRUCIATORE 12 SPENTO", + "313,ALLARME SENSORE LIVELLO RECUPERO CALORE 2 : AGGIUNGERE LIQUIDO !", + "314,ALLARME DA MIXER", + "315,ALLARME PRESSOSTATI LUBRIFICAZIONE", + "316,ALLARME ABBATTITORE FUMI", + "317,MACCHINA 1 NON IN LINEA", + "318,MACCHINA 2 NON IN LINEA", + "319,MACCHINA 3 NON IN LINEA", + "320,MACCHINA 4 NON IN LINEA" + ] + }, + + { + "description": "Alarm Word 20 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 20", + "index": 20, + "size": 2, + "messages": [ + "321,MACCHINA 5 NON IN LINEA", + "322,MACCHINA 6 NON IN LINEA", + "323,MACCHINA 7 NON IN LINEA", + "324,MACCHINA 8 NON IN LINEA", + "325,NON STOP NON PRONTO", + "326,EMERGENZA DA NON STOP", + "327,ALLARME DISCONTINUITA' CAMPO MASTER", + "328,ALLARME DISCONTINUITA' CAMPO PARALLELO 1", + "329,ALLARME DISCONTINUITA' CAMPO PARALLELO 2", + "330,ALLARME DISCONTINUITA' CAMPO PARALLELO 3", + "331,ALLARME DISCONTINUITA' CAMPO PARALLELO 4", + "332,ALLARME DISCONTINUITA' CAMPO PARALLELO 5", + "333,ALLARME DISCONTINUITA' CAMPO PARALLELO 6", + "334,ALLARME DISCONTINUITA' CAMPO PARALLELO 7", + "335,ALLARME DISCONTINUITA' CAMPO PARALLELO 8", + "336,ALLARME DISCONTINUITA' CAMPO PARALLELO 9" + ] + }, + + { + "description": "Alarm Word 21 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 21", + "index": 21, + "size": 2, + "messages": [ + "337,ALLARME DISCONTINUITA' CAMPO PARALLELO 10", + "338,PROTEZIONI INGRESSO APERTE", + "339,PROTEZIONI USCITA APERTE", + "340,ALLARME PROTEZIONE ESTRATTORE FUMI 1", + "341,ALLARME PROTEZIONE ESTRATTORE FUMI 2", + "342,MANCANZA PRESSOSTATO ESTRATTORE FUMI 1", + "343,MANCANZA PRESSOSTATO ESTRATTORE FUMI 2", + "344,EMERGENZA DA MIXER", + "345,EMERGENZA DA SPREMITORE 2", + "346,ALLARME PROTEZIONE VENTILATORE RECUPERO CALORE 1", + "347,ALLARME PROTEZIONE VENTILATORE RECUPERO CALORE 2", + "348,ALLARME MODULO VELOCITA? ZERO CATENA TRASP. TESSUTO", + "349,ALLARME RILEVAMENTO TESSUTO SINISTRO USCITA", + "350,ALLARME RILEVAMENTO TESSUTO DESTRO USCITA", + "351,ALLARME FINECORSA SOLLEVAMENTO CAMPI CONICI", + "352,ALLARME IDROSTATO RECUPERO CALORE 2" + ] + }, + + { + "description": "Alarm Word 22 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 22", + "index": 22, + "size": 2, + "messages": [ + "353,ALLARME FUNE DI PROTEZIONE IN USCITA", + "354,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 1", + "355,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 2", + "356,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 3", + "357,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 4", + "358,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 5", + "359,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 6", + "360,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 7", + "361,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 8", + "362,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 9", + "363,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 10", + "364,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 11", + "365,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 12", + "366,OLIO CATENA - PRESSIONE MINIMA", + "367,POMPA OLIO CATENA - ALLARME PROTEZIONE", + "368,JBOX INGRESSO - BALLERINO BASSO" + ] + }, + + { + "description": "Alarm Word 23 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 23", + "index": 23, + "size": 2, + "messages": [ + "369,JBOX INGRESSO - FINE TESSUTO", + "370,JBOX INGRESSO - PIENO", + "371,JBOX INGRESSO - BALLERINO ALTO", + "372,JBOX INGRESSO - VUOTO", + "373,JBOX USCITA - BALLERINO BASSO", + "374,JBOX USCITA - FINE TESSUTO", + "375,JBOX USCITA - PIENO", + "376,JBOX USCITA - BALLERINO ALTO", + "377,JBOX USCITA - VUOTO", + "378,JBOX USCITA - ALLARME PRESSOSTATO", + "379,JBOX ENTRATA - ALLARME PRESSOSTATO", + "380,ALLARME PROTEZIONE CARRELLO FALDATORE", + "381,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 1", + "382,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 2", + "383,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 3", + "384,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 4" + ] + }, + + { + "description": "Alarm Word 24 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 24", + "index": 24, + "size": 2, + "messages": [ + "385,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 5", + "386,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 6", + "387,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 7", + "388,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 8", + "389,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 9", + "390,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 10", + "391,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 11", + "392,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 12", + "393,ESTRATTORE FUMI RISC. INDIRETTO 1 - ALLARME PROTEZIONE", + "394,ESTRATTORE FUMI RISC. INDIRETTO 2 - ALLARME PROTEZIONE", + "395,ESTRATTORE FUMI RISC. INDIRETTO 3 - ALLARME PROTEZIONE", + "396,ESTRATTORE FUMI RISC. INDIRETTO 4 - ALLARME PROTEZIONE", + "397,ESTRATTORE FUMI RISC. INDIRETTO 5 - ALLARME PROTEZIONE", + "398,ESTRATTORE FUMI RISC. INDIRETTO 6 - ALLARME PROTEZIONE", + "399,TAGLIERINA SINISTRA - FUORI POSIZIONE", + "400,TAGLIERINA DESTRA - FUORI POSIZIONE" + ] + }, + + { + "description": "Alarm Word 25 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 25", + "index": 25, + "size": 2, + "messages": [ + "401,ALLARME PROTEZIONE CILINDRO CONTRASTO TAGLIERINE", + "402,JBOX INGRESSO - TESSUTO INCROCIATO", + "403,JBOX USCITA - TESSUTO INCROCIATO", + "404,ALLARME DEVICE_NET STAZIONE ADDR.38 - JBOX INGRESSO", + "405,ALLARME DEVICE_NET STAZIONE ADDR.39 - JBOX USCITA", + "406,JBOX INGRESSO - ALLARME INVERTER", + "407,JBOX USCITA - ALLARME INVERTER", + "408,ALLARGA/CENTRATORE A/B SU IMBARRAGGIO - ALLARME PROTEZIONE", + "409,ALLARME TIMEOUT VITE CAMPO PARALLELO 11", + "410,ALLARME TIMEOUT VITE CAMPO PARALLELO 12", + "411,FRENO JBOX INGRESSO - ALLARME PROTEZIONE", + "412,FRENO JBOX USCITA - ALLARME PROTEZIONE", + "413,ALLARME PROTEZIONE FRENO CAMPO CONICO SINISTRO", + "414,ALLARME PROTEZIONE FRENO CAMPO CONICO DESTRO", + "415,VERIFICA PRESSOSTATO 1 FALLITA", + "416,VERIFICA PRESSOSTATO 2 FALLITA" + ] + }, + + { + "description": "Alarm Word 26 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 26", + "index": 26, + "size": 2, + "messages": [ + "417,ALLARME TERMOSTATO INTERNO QUADRO", + "418,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 1 POMPA 2", + "419,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 2 POMPA 2", + "420,PROTEZIONE RIBALTABILE INGRESSO", + "421,FUNE EMERGENZA INGRESSO", + "422,PARATIA SCORREVOLE INGRESSO SINISTRA", + "423,PARATIA SCORREVOLE INGRESSO DESTRA", + "424,CANCELLO SINISTRO ENTRATA ANTERIORE", + "425,CANCELLO SINISTRO ENTRATA POSTERIORE", + "426,CANCELLO DESTRO ENTRATA ANTERIORE", + "427,CANCELLO DESTRO ENTRATA POSTERIORE", + "428,CANCELLO SINISTRO USCITA", + "429,CANCELLO DESTRO USCITA", + "430,TENSIONATORE FUNE EMERGENZA SINISTRA ZONA FORNO", + "431,TENSIONATORE FUNE EMERGENZA DESTRA ZONA FORNO", + "432,FUNE EMERGENZA SINISTRA ZONA FORNO" + ] + }, + + { + "description": "Alarm Word 27 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 27", + "index": 27, + "size": 2, + "messages": [ + "433,FUNE EMERGENZA DESTRA ZONA FORNO", + "434,ALLARME FEEDBACK SCARICO ARIA ENTRATA MACCHINA (1)", + "435,ALLARME FEEDBACK SCARICO ARIA ENTRATA MACCHINA (2)", + "436,ALLARME FEEDBACK SCARICO ARIA USCITA MACCHINA (1)", + "437,ALLARME FEEDBACK SCARICO ARIA USCITA MACCHINA (2)", + "438,ALLARME FEEDBACK EMERGENZA GENERALE DA SCARICO ARIA", + "439,BYPASS SPORTELLI ARMADIO ATTIVO", + "440,TIMEOUT ENCODER CAMPO CONICO SINISTRO", + "441,TIMEOUT ENCODER CAMPO CONICO DESTRO", + "442,ALLARME BALLERINO ALTO SPREMITORE 1", + "443,ALLARME BALLERINO ALTO SPREMITORE 2", + "444,", + "445,", + "446,", + "447,", + "448," + ] + }, + + { + "description": "Alarm Word 28 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 28", + "index": 28, + "size": 2, + "messages": [ + "449,", + "450,", + "451,", + "452,", + "453,", + "454,", + "455,", + "456,", + "457,", + "458,", + "459,", + "460,ALLARME PROTEZIONE BARRE ANTISTATICHE", + "461,ALLARME PROTEZIONE VENTILAZIONE INTERNO QUADRO", + "462,BORDO SENSIBILE ", + "463,FALDAROTOLATORE_SICUREZZA SX/DX ", + "464,FALDAROTOLATORE_EMERGENZA TESSUTO " + ] + }, + + { + "description": "Alarm Word 29 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 29", + "index": 29, + "size": 2, + "messages": [ + "465,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.1", + "466,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.2", + "467,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.3", + "468,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.4", + "469,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.5", + "470,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.6", + "471,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.7", + "472,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.8", + "473,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.9", + "474,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.10", + "475,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.11", + "476,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.12", + "477,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 1/2", + "478,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 3/4", + "479,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 5/6", + "480,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 7/8" + ] + }, + + { + "description": "Alarm Word 30 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 30", + "index": 30, + "size": 2, + "messages": [ + "481,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 9/10", + "482,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 1", + "483,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 2", + "484,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 3", + "485,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 4", + "486,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 5", + "487,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 6", + "488,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 7", + "489,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 8", + "490,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 9", + "491,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 10", + "492,TRASDUTTORE PRESSIONE BR 1 INTERROTTO", + "493,TRASDUTTORE PRESSIONE BR 2 INTERROTTO", + "494,TRASDUTTORE PRESSIONE BR 3 INTERROTTO", + "495,TRASDUTTORE PRESSIONE BR 4 INTERROTTO", + "496,TRASDUTTORE PRESSIONE BR 5 INTERROTTO" + ] + }, + + { + "description": "Alarm Word 31 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 31", + "index": 31, + "size": 2, + "messages": [ + "497,TRASDUTTORE PRESSIONE BR 6 INTERROTTO", + "498,TRASDUTTORE PRESSIONE BR 7 INTERROTTO", + "499,TRASDUTTORE PRESSIONE BR 8 INTERROTTO", + "500,TRASDUTTORE PRESSIONE BR 9 INTERROTTO", + "501,TRASDUTTORE PRESSIONE BR 10 INTERROTTO", + "502,TRASDUTTORE PRESSIONE BR 11 INTERROTTO", + "503,TRASDUTTORE PRESSIONE BR 12 INTERROTTO", + "504,ERRORE TRASDUTTORE DI PRESSIONE RC1", + "505,ERRORE TRASDUTTORE DI PRESSIONE RC2", + "506,ALLARME INVERTER RIPRISTINO PRESSIONE GRUPPO 1 RC", + "507,ALLARME INVERTER RIPRISTINO PRESSIONE GRUPPO 2 RC", + "508,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 11", + "509,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 12", + "510,ALLARME PRESSOSTATO TAGLIERINE", + "511,BALLERINO ALTO - SROTOLATORE - ALLARME", + "512,EMERGENZA DA LINEA ENTRATA RAMOSA" + ] + }, + + { + "description": "Alarm Word 32 ", + "tipoMem": "Byte", + "memAddr": "Alarm Word 32", + "index": 32, + "size": 2, + "messages": [ + "513,LINEA ENTRATA RAMOSA NON PRONTA", + "514,EMERGENZA DA LINEA USCITA RAMOSA", + "515,LINEA USCITA RAMOSA NON PRONTA", + "516,TAGLIERINA CENTRALE FUORI POSIZIONE", + "517,TIRACIMOSSE NON PRONTO", + "518,JBOX INGRESSO IN EMERGENZA", + "519,JBOX INGRESSO NON PRONTO", + "520,JBOX USCITA IN EMERGENZA", + "521,JBOX USCITA NON PRONTO", + "522,ALLARME D-NET 41 RISCALDAMENTO INDIRETTO", + "523,SPAZZOLATRICE IN EMERGENZA", + "524,SPAZZOLATRICE NON PRONTA", + "525,ALLARME FUNE DI SICUREZZA USCITA STACCAPEZZA", + "526,ALLARME FUNE DI SICUREZZA USCITA FALDAROTOLATORE", + "527,ALLARME FUNE DI SICUREZZA CAMPO CONICO SINISTRO", + "528,ALLARME FUNE DI SICUREZZA CAMPO CONICO DESTRO" + ] + } +] \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/Iob/GenericNext.cs b/IOB-WIN-FANUC/Properties/Iob/GenericNext.cs new file mode 100644 index 00000000..95d7ff9d --- /dev/null +++ b/IOB-WIN-FANUC/Properties/Iob/GenericNext.cs @@ -0,0 +1,13 @@ +using IOB_UT_NEXT; + +namespace IOB_WIN_FANUC.Iob +{ + public class GenericNext : IOB_WIN_FORM.Iob.Generic + { + + public GenericNext(AdapterFormNext caller, IobConfiguration IOBConf): base((IOB_WIN_FORM.AdapterForm)caller, IOBConf) + { + } + + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/Resources.Designer.cs b/IOB-WIN-FANUC/Properties/Resources.Designer.cs new file mode 100644 index 00000000..7ab5e0eb --- /dev/null +++ b/IOB-WIN-FANUC/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IOB_WIN_FANUC.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IOB_WIN_FANUC.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/IOB-WIN-FANUC/Properties/Resources.resx b/IOB-WIN-FANUC/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/IOB-WIN-FANUC/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/Settings.Designer.cs b/IOB-WIN-FANUC/Properties/Settings.Designer.cs new file mode 100644 index 00000000..85377438 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IOB_WIN_FANUC.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/IOB-WIN-FANUC/Properties/Settings.settings b/IOB-WIN-FANUC/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/IOB-WIN-FANUC/Properties/logs/.placeholder.txt b/IOB-WIN-FANUC/Properties/logs/.placeholder.txt new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/IOB-WIN-FANUC/Properties/logs/.placeholder.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/IOB-WIN-FANUC/Resources/ChangeLog.html b/IOB-WIN-FANUC/Resources/ChangeLog.html new file mode 100644 index 00000000..7ab91d78 --- /dev/null +++ b/IOB-WIN-FANUC/Resources/ChangeLog.html @@ -0,0 +1,120 @@ + +

MAPO-IOB-WIN

+ v: {{CURRENT-REL}} +
+ Acquisitore MAPO-IOB per sistemi Windows +
+ Note di rilascio: +
    +
  • + v.3.1.* → v.3.2.* +
      +
    • Nuovi simulatori con gestione emergenza
    • +
    • Fix gestione invio dati Redis
    • +
    • Implementazione IOB Eurom63
    • +
    +
  • +
  • + v.2.6.* → v.3.0.* +
      +
    • revisione sistema metodi invio in blocco
    • +
    • Gestione invio contapezzi in step > 1
    • +
    • Gestione eventi in blocco (indipendente e prioritario su EvBlock)
    • +
    • Gestione limite eventi memorizzabili
    • +
    • Integrazione REDIS
    • +
    • Integrazione IOB-MAN
    • +
    +
  • +
  • + v.2.5.* → v.2.6.* +
      +
    • revisione sistema timeout Ping
    • +
    • Gestione AutoODL in prod generale (non solo SIM)
    • +
    +
  • +
  • + v.2.4.* → v.2.5.* +
      +
    • Aggiunto adapter MTConnect
    • +
    • Ottimizzazione gestione SIEMENS
    • +
    +
  • +
  • + v.2.3.* → v.2.4.* +
      +
    • inserita gestione conf json x Flog acquisiti
    • +
    • gestione invio Json blocchi dati FLog
    • +
    • ottimizzazioni varie adapter Siemens
    • +
    • ottimizzazione processo svuotamento code
    • +
    • riduzione interferenza e interblocchi in fase di PLC assente
    • +
    +
  • +
  • + Ultime modifiche: +
      {{LAST-CHANGES}}
    +
  • +
  • + v.1.18.* → v.2.3.* +
      +
    • inserimento WPS x acontrolli WebPage human readable
    • +
    • fix gestione task2exe
    • +
    • aggiunte varie versioni PLC siemens
    • +
    • aggiunto PLC WPS x generiche web pages
    • +
    • revisitazione LOG ODL e contapezzi
    • +
    • modifica pagina presentazione dati (master) x resize
    • +
    • Attivazione IOB SIMULATOR per test di carico (sostituito type DEMO)
    • +
    • Aggiunto simulatore macchine MULTI pallet
    • +
    • Ottimizzazione simulatore
    • +
    • Ottimizzazioni PLC Siemens x riavvio post disconnessione (es spegnimento notturno)
    • +
    • Ottimizzazione processo chiusura in update applicazione
    • +
    • Aggiunta simulazione spegnimento con WU/CD
    • +
    +
  • +
  • + v.1.11.* → v.1.18.* +
      +
    • Inserimento controller SIEMENS con S7+ library
    • +
    • Inserimento nuove letture FANUC x programmi
    • +
    • Inserimento nuove letture FANUC x SysEx (informazioni sistema)
    • +
    • Inserimento invio FluxLog x parametri estesi (es SysEx, ProgName,...)
    • +
    • FIX visualizzazione dati FluxLog e URL inviati
    • +
    • FIX MAIN program da FANUC (non il current)
    • +
    • Inserita modalita' DUMP memoria (iniziale full + periodica)
    • +
    • Inserimento gestione contapezzi standard/checkBit in IOB.cfg
    • +
    • Inserimento contapezzi da area memoria X
    • +
    • NUOVA Gestione rami cliente e URL di update
    • +
    • Gestione modi CNC
    • +
    • Lettura dari dinamycs FANUC (feed, speed)
    • +
    • aggiunta gestione aree G0..G30 (overrides?)
    • +
    • fix errore disconnessione FANUC (allo spegnimento dl CNC) e memoria valori persistente a 1
    • +
    • fix globali x gestione log IN / FLOG + ottimizzaizone check FANUC (PING)
    • +
    • ottimizzazione fasi di restart in caso di assenza del server (evita reinvii inutili e migliora tempo ripartenza invio)
    • +
    • review procedure controllo connessione x FANUC (es Tornos II)
    • +
    • non richeide pi privilegi admin x fare update
    • +
    • gestione segnali inverted
    • +
    • completata gestione configurabilit parametrica segnali (Tornos, CMZ, Biglia)
    • +
    • revisitazione LOG x distinguere processi IOB
    • +
    +
  • +
  • + v.0.1.* → v.0.10.* +
      +
    • Testato in produzione x update ad avvio e su richiesta
    • +
    • Testato in produzione x lettura dati da Fanuc
    • +
    • Inizio deploy con copia file su area IIS
    • +
    • Prima versione con autoupdate
    • +
    • Test PrettyBin x spostamento dll
    • +
    • Base acquisitore FANUC
    • +
    • Sistema base sw controllo in tray
    • +
    +
  • +
+ + \ No newline at end of file diff --git a/IOB-WIN-FANUC/Resources/Circuit.ico b/IOB-WIN-FANUC/Resources/Circuit.ico new file mode 100644 index 0000000000000000000000000000000000000000..a05b27a67818d3faeddecb49c4a9fba3c8e30b28 GIT binary patch literal 164031 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 N9L6B!q@oYs{|5s6j{5)r literal 0 HcmV?d00001 diff --git a/IOB-WIN-FANUC/Resources/Net.ico b/IOB-WIN-FANUC/Resources/Net.ico new file mode 100644 index 0000000000000000000000000000000000000000..a33a9ecae52b0604d3f28293f0c19178a523a914 GIT binary patch literal 104399 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 HOwa#+TbYJK literal 0 HcmV?d00001 diff --git a/IOB-WIN-FANUC/Resources/STEAM-IOB-WIN.xml b/IOB-WIN-FANUC/Resources/STEAM-IOB-WIN.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba4e78f6ce10c6adc0ea87773115ddfc1fa017b8 GIT binary patch literal 3688 zcmbW4S#KIi6ov2eNcj&a@7RWT$wWOwPVB@;ac1O2e(?)q@FGKF(ZnS4<7ehOx9CvS zjWMxWy-;=QoV!=?-@lo?x9>Kxp*8H$1~#$6?rdzi{b8@IWgE7|yTMFuSB&?W&F#i# z&+W`USre&UWZqlHUfFM!G1>#={z=5PBL>zSNip5pl)7ogfW!rph@xAG5r@W_gtzOUdY@lCeC$QXrP%uA1V#>Fy z?{Z)B6>O4hkUwyl0psFn*`C|q^5-^|x47Oh*Y@WQdT!fWuAtRh7&mQ!A%88f_w5_} zx3EsYKLzd3_U+g%c%JZmiB^Bw2ggWdQ=9{Ak_RW)^6=B54k(XYvaf*^4_rfjUGe?T z-0A@{fujj)*S^m6U5=Nso}*(Iy)Prpn@iA2xpK8UvVIhlU9#(jD`aamLSL}&hC8oF zrg9;g;(g#&)XT`%<$|m-V(Ofacx;HJe|fx*-ADD=(!Mgj0p%2oF`WCn4~Tc1bB8eW z!M%3;0xtPxofTEC(x=bcmXTLEe1Bunz}Zy?-{#!axtK>B&-+?ZPe&}nhl-|pi*i+d zE$~3fQKwcCxgC4M z)ndNwHLMlC^INyZ_qc@9VwHN0Y)#o>J3{!4YgSv~xqJX9w>BTw#m=Z?E< zT^;>|$mK+3;0Vf5eXAQ!=bl#mE7Gc-kR{a>F{&i$-e1IL`FtF~jQmx7$tvv|@m%o8 zF**-@Uj1m`-jKdMS?S{Zj2^*b>#+aY%9M2<-v+CXuyI0_oMGR@ z_f2&M*__(C-ink(8U~ME_|BgDZq&oZA>*O@EbDyFuSt1A1;}SZvPGU$j!cQEGUk2_ z)|VipI;hhqlUHYcx*tg6a$UI(#Q9Z5c$r+x9#FNf6+b;5uc`WYm1K;oN-y(>Rh_=h^*^#skc`BkX}h`q>8diGR3^W zAL{bz_F+{OYneofamWdNKzG#XF`Qn{c#jzS;%}X8%G1h`cgyuwq%2_{P!$PJop{f& z>f`CUdWL<%X4Sn;Kk6;9e8}I$j`*^(R%RdZr*<}3uKij08;`}DnpNk3fy%Kos2 zk6|x3Pm49|@88iz|8-WKS#%x?(Ol*iVU401`pCZwowwDadyLO`%BPq3cT87pGNN51 i$b?>6J(F)Br!HT5D8{dPsjiz=r4|RhHD3M??AZU;C_$_M literal 0 HcmV?d00001 diff --git a/IOB-WIN-FANUC/Resources/Start-IOB-WIN.bat b/IOB-WIN-FANUC/Resources/Start-IOB-WIN.bat new file mode 100644 index 00000000..3f8ecaa1 --- /dev/null +++ b/IOB-WIN-FANUC/Resources/Start-IOB-WIN.bat @@ -0,0 +1,15 @@ +@ECHO OFF + +SET EXEName=IOB-WIN.exe +SET EXEFullPath=C:\Steamware\IOB-WIN\IOB-WIN.exe + +TASKLIST | FINDSTR /I "%EXEName%" +IF ERRORLEVEL 1 GOTO :StartIobWin + +REM "Programma ancora in run, nessuna azione necessaria" +timeout /T 2 +GOTO :EOF + +:StartIobWin +START "" "%EXEFullPath%" +GOTO :EOF diff --git a/IOB-WIN-FANUC/Resources/SteamWare.ico b/IOB-WIN-FANUC/Resources/SteamWare.ico new file mode 100644 index 0000000000000000000000000000000000000000..70ccadaff4b65965acc2004f6197e552114aa937 GIT binary patch literal 279582 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 literal 0 HcmV?d00001 diff --git a/IOB-WIN-FANUC/Resources/manifest.xml b/IOB-WIN-FANUC/Resources/manifest.xml new file mode 100644 index 00000000..f66a7e99 --- /dev/null +++ b/IOB-WIN-FANUC/Resources/manifest.xml @@ -0,0 +1,7 @@ + + + 1.0.0.0 + http://seriate.steamware.net:8083/SWS/MAPO/IOB-WIN/{{BRANCHNAME}}/MAPO-IOB-WIN.zip + http://seriate.steamware.net:8083/SWS/MAPO/IOB-WIN/{{BRANCHNAME}}/ChangeLog.html + false + \ No newline at end of file diff --git a/IOB-WIN-FANUC/docfx.json b/IOB-WIN-FANUC/docfx.json new file mode 100644 index 00000000..bacb80c9 --- /dev/null +++ b/IOB-WIN-FANUC/docfx.json @@ -0,0 +1,68 @@ +{ + "metadata": [ + { + "src": [ + { + "files": [ + "*.csproj" + ], + "cwd": ".", + "exclude": [ + "**/obj/**", + "**/bin/**", + "_site/**" + ] + } + ], + "dest": "obj/api" + } + ], + "build": { + "content": [ + { + "files": [ + "api/**.yml" + ], + "cwd": "obj" + }, + { + "files": [ + "api/*.md", + "articles/**.md", + "toc.yml", + "*.md" + ], + "exclude": [ + "obj/**", + "_site/**" + ] + } + ], + "resource": [ + { + "files": [ + "images/**" + ], + "exclude": [ + "obj/**", + "_site/**" + ] + } + ], + "overwrite": [ + { + "files": [ + "apidoc/**.md" + ], + "exclude": [ + "obj/**", + "_site/**" + ] + } + ], + "dest": "_site", + "template": [ + "default" + ] + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/index.md b/IOB-WIN-FANUC/index.md new file mode 100644 index 00000000..fdb4be99 --- /dev/null +++ b/IOB-WIN-FANUC/index.md @@ -0,0 +1,11 @@ +# IOB-WIN-PING + +Documentazione relativa all'applicativo IOB-WIN-PING + +## Articles + +Per maggiori dettagli, definizioni e demo funzionamento si rimanda alla sezione Articles + +## Api + +Per ogni dettaglio e riferimento alla libreria si rimanda alla sezione Api Documentation \ No newline at end of file diff --git a/IOB-WIN-FANUC/index.pdf b/IOB-WIN-FANUC/index.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8f7e09efe5daf291c211a14b094534ee926ea356 GIT binary patch literal 27994 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≺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 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-WIN-FANUC/postBuildTgt.bat b/IOB-WIN-FANUC/postBuildTgt.bat new file mode 100644 index 00000000..d56896d2 --- /dev/null +++ b/IOB-WIN-FANUC/postBuildTgt.bat @@ -0,0 +1,97 @@ +@echo off +echo Inizio processing After Build: configurazione %1 , directory %2 + +RD /S /Q %2"\lib\ar" +RD /S /Q %2"\lib\cs" +RD /S /Q %2"\lib\da" +RD /S /Q %2"\lib\de" +RD /S /Q %2"\lib\es" +RD /S /Q %2"\lib\fr" +RD /S /Q %2"\lib\it" +RD /S /Q %2"\lib\ja-JP" +RD /S /Q %2"\lib\ko" +RD /S /Q %2"\lib\lv" +RD /S /Q %2"\lib\nl" +RD /S /Q %2"\lib\pl" +RD /S /Q %2"\lib\pt" +RD /S /Q %2"\lib\pt-BR" +RD /S /Q %2"\lib\ru" +RD /S /Q %2"\lib\sk" +RD /S /Q %2"\lib\sv" +RD /S /Q %2"\lib\th" +RD /S /Q %2"\lib\tr" +RD /S /Q %2"\lib\zh" +RD /S /Q %2"\lib\zh-TW" + +MOVE /Y %2"ar" %2"lib\" +MOVE /Y %2"cs" %2"lib\" +MOVE /Y %2"da" %2"lib\" +MOVE /Y %2"de" %2"lib\" +MOVE /Y %2"es" %2"lib\" +MOVE /Y %2"fr" %2"lib\" +MOVE /Y %2"it" %2"lib\" +MOVE /Y %2"ja-JP" %2"lib\" +MOVE /Y %2"ko" %2"lib\" +MOVE /Y %2"lv" %2"lib\" +MOVE /Y %2"nl" %2"lib\" +MOVE /Y %2"pl" %2"lib\" +MOVE /Y %2"pt" %2"lib\" +MOVE /Y %2"pt-BR" %2"lib\" +MOVE /Y %2"ru" %2"lib\" +MOVE /Y %2"sk" %2"lib\" +MOVE /Y %2"sv" %2"lib\" +MOVE /Y %2"th" %2"lib\" +MOVE /Y %2"tr" %2"lib\" +MOVE /Y %2"zh" %2"lib\" +MOVE /Y %2"zh-TW" %2"lib\" + + +if %1 == "Release" goto ReleaseExec +if %1 == Release goto ReleaseExec +if %1 == "Debug" goto DebugExec +if %1 == Debug goto DebugExec +if %1 == "Remote_DEBUG" goto RemoteDebugExec +if %1 == Remote_DEBUG goto RemoteDebugExec + +:ReleaseExec +echo Release processing... +del /S %2"*.pdb"" +del /S %2"*.xml"" +del /S %2"lib/*.pdb"" +echo Release: eliminato pdb + xml!!! +goto END + +:DebugExec +echo Debug processing... + +goto END + + +:RemoteDebugExec +echo Remote_DEBUG processing, effettuo copia script verso server remoto (ROBOCOPY) +REM copia script verso server remoto +REM echo Debug remoto: effettuo robocopy sync (verificare remote per cliente) + +REM FINASSI +REM ROBOCOPY %2 \\10.150.0.1\Steamware\IOB-WIN-WPS-DEB /MIR +REM Baglietto +REM ROBOCOPY %2 \\192.168.60.15\Steamware\IOB-WIN-WPS-DEB /MIR +REM GIACOVELLI LOCOROTONDO +REM ROBOCOPY %2 \\192.168.1.93\Steamware\IOB-WIN-WPS-DEB /MIR +REM IMI Remosa +REM ROBOCOPY %2 \\192.168.0.12\Steamware\IOB-WIN-WPS-DEB /MIR + +REM IOB-WIN-SIM +REM ROBOCOPY %2 \\IOB-WIN-SIMULA\Steamware\IOB-WIN-WPS-DEB /MIR + +REM IOBVPN4MACHINE +REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-WPS-DEB /MIR +REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-WPS-DEB /MIR /log:RobocopyTransfer.log +REM ROBOCOPY %2 Z:\IOB-WIN-WPS-DEB /MIR +REM ROBOCOPY %2 \\10.51.90.10\Steamware\IOB-WIN-WPS-DEB /MIR +ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-WPS-DEB /MIR + +goto END + +:END +echo Fatto! \ No newline at end of file diff --git a/IOB-WIN-FANUC/setupTgt.bat b/IOB-WIN-FANUC/setupTgt.bat new file mode 100644 index 00000000..ba685c02 --- /dev/null +++ b/IOB-WIN-FANUC/setupTgt.bat @@ -0,0 +1,25 @@ +@echo off +echo Effettua setup dei file specifici per i vari ambienti pre build installer: verifica da nome configurazione %1 + + +if %1 == "Release" goto Release +if %1 == "Debug" goto Debug +if %1 == "Remote_DEBUG" goto RemoteDebug + +:Release +echo Release: nulla da copiare +goto END + +:Debug +echo Debug: copia file ini x simulazione Debug +REM del %2"DATA\CONF\EsaKvara.ini" +REM copy %2"Resources\SCM\EsaKvara_SIM.ini" %2"DATA\CONF\EsaKvara.ini" +goto END + + +:RemoteDebug +echo RemoteDebug: nulla da copiare +goto END + +:END +echo Fatto! \ No newline at end of file diff --git a/IOB-WIN-FANUC/temp/.placeholder b/IOB-WIN-FANUC/temp/.placeholder new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/IOB-WIN-FANUC/temp/.placeholder @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/IOB-WIN-FANUC/toc.yml b/IOB-WIN-FANUC/toc.yml new file mode 100644 index 00000000..7eee9ffb --- /dev/null +++ b/IOB-WIN-FANUC/toc.yml @@ -0,0 +1,6 @@ + +- name: Articles + href: articles/ +- name: API Documentation + href: obj/api/ + homepage: api/index.md From 8b49b8cc7d372ff635a790d82901605b043cd302 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 15 Jan 2025 16:08:14 +0100 Subject: [PATCH 3/4] Completato prima compilazione FANUC (da testare) --- IOB-WIN-FANUC.sln | 26 +- IOB-WIN-FANUC/AdapterFormNext.cs | 4 +- IOB-WIN-FANUC/App.config | 26 +- IOB-WIN-FANUC/DATA/CONF/3001.ini | 74 + IOB-WIN-FANUC/DATA/CONF/3002.ini | 74 + IOB-WIN-FANUC/DATA/CONF/3003.ini | 76 + IOB-WIN-FANUC/DATA/CONF/3004.ini | 77 + IOB-WIN-FANUC/DATA/CONF/3005.ini | 77 + IOB-WIN-FANUC/DATA/CONF/3006.ini | 72 + IOB-WIN-FANUC/DATA/CONF/3007.ini | 72 + IOB-WIN-FANUC/DATA/CONF/3012.ini | 76 + IOB-WIN-FANUC/DATA/CONF/3015.ini | 86 + IOB-WIN-FANUC/DATA/CONF/3021.ini | 73 + IOB-WIN-FANUC/DATA/CONF/3025.ini | 86 + IOB-WIN-FANUC/DATA/CONF/3028.ini | 97 + IOB-WIN-FANUC/DATA/CONF/3028.json | 30 + IOB-WIN-FANUC/DATA/CONF/FOV002.ini | 77 + IOB-WIN-FANUC/DATA/CONF/FOV005.ini | 77 + IOB-WIN-FANUC/DATA/CONF/FOV006.ini | 77 + IOB-WIN-FANUC/DATA/CONF/FOV008.ini | 77 + IOB-WIN-FANUC/DATA/CONF/FOV011.ini | 77 + IOB-WIN-FANUC/DATA/CONF/FOV090.ini | 77 + IOB-WIN-FANUC/DATA/CONF/FOV098.ini | 85 + IOB-WIN-FANUC/DATA/CONF/FOV099.ini | 84 + .../DATA/CONF/GT529.ini | 59 +- .../DATA/CONF/GT555.ini | 55 +- .../DATA/CONF/GT575.ini | 57 +- IOB-WIN-FANUC/DATA/CONF/GT578.ini | 83 + IOB-WIN-FANUC/DATA/CONF/GT579.ini | 84 + IOB-WIN-FANUC/DATA/CONF/GT613.ini | 83 + IOB-WIN-FANUC/DATA/CONF/GT653.ini | 83 + IOB-WIN-FANUC/DATA/CONF/GT658.ini | 83 + IOB-WIN-FANUC/DATA/CONF/GT673.ini | 83 + .../{Properties => }/DATA/CONF/IOB.ini | 0 IOB-WIN-FANUC/DATA/CONF/L014.ini | 74 + IOB-WIN-FANUC/DATA/CONF/L017.ini | 69 + IOB-WIN-FANUC/DATA/CONF/L018.ini | 75 + IOB-WIN-FANUC/DATA/CONF/L019.ini | 77 + .../{Properties => }/DATA/CONF/MAIN.ini | 0 .../{Properties => }/DATA/CONF/SIMUL_01.ini | 0 .../{Properties => }/DATA/CONF/SIMUL_01.json | 0 .../DATA/CONF/SIMUL_01_WD.ini | 0 .../DATA/CONF/SIMUL_01_alarm.json | 0 IOB-WIN-FANUC/DATA/CONF/VL27.ini | 84 + IOB-WIN-FANUC/DATA/CONF/VL27.json | 103 + .../ILLink.Descriptors.LibraryBuild.xml | 8 + IOB-WIN-FANUC/IOB-WIN-FANUC.csproj | 101 +- IOB-WIN-FANUC/Iob/Fanuc.cs | 2535 +++++++++++++++++ .../{Properties => }/Iob/GenericNext.cs | 0 .../{Properties => }/logs/.placeholder.txt | 0 IOB-WIN-FANUC/memAreaFanuc.cs | 138 + IOB-WIN-FANUC/packages.config | 21 +- IOB-WIN-NEXT/AdapterFormNext.cs | 4 +- IOB-WIN-NEXT/DATA/CONF/1032.ini | 67 - IOB-WIN-NEXT/DATA/CONF/1032.json | 82 - IOB-WIN-NEXT/DATA/CONF/1033.ini | 69 - IOB-WIN-NEXT/DATA/CONF/1033.json | 52 - IOB-WIN-NEXT/DATA/CONF/1034.ini | 69 - IOB-WIN-NEXT/DATA/CONF/1034.json | 52 - IOB-WIN-NEXT/DATA/CONF/1035.ini | 69 - IOB-WIN-NEXT/DATA/CONF/1035.json | 52 - IOB-WIN-NEXT/DATA/CONF/3010.ini | 70 - IOB-WIN-NEXT/DATA/CONF/3010_alarm.json | 169 -- IOB-WIN-NEXT/DATA/CONF/3011.ini | 66 - IOB-WIN-NEXT/DATA/CONF/3013.ini | 65 - IOB-WIN-NEXT/DATA/CONF/3017.ini | 71 - IOB-WIN-NEXT/DATA/CONF/3020.ini | 66 - IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.ini | 80 - IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.json | 217 -- IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE_alarm.json | 202 -- IOB-WIN-NEXT/DATA/CONF/GT693.ini | 75 - IOB-WIN-NEXT/DATA/CONF/GT693.json | 202 -- IOB-WIN-NEXT/DATA/CONF/GT694.ini | 63 - IOB-WIN-NEXT/DATA/CONF/GT696.ini | 63 - IOB-WIN-NEXT/DATA/CONF/GT698.ini | 63 - IOB-WIN-NEXT/DATA/CONF/INTERCL_01.ini | 54 - IOB-WIN-NEXT/DATA/CONF/INTERCL_01.json | 212 -- IOB-WIN-NEXT/DATA/CONF/PIZ03.ini | 72 - IOB-WIN-NEXT/DATA/CONF/PIZ03.json | 252 -- IOB-WIN-NEXT/DATA/CONF/PIZ03_alarm.json | 125 - IOB-WIN-NEXT/DATA/CONF/PIZ08.ini | 71 - IOB-WIN-NEXT/DATA/CONF/PIZ08.json | 252 -- IOB-WIN-NEXT/DATA/CONF/PIZ08_alarm.json | 125 - IOB-WIN-NEXT/DATA/CONF/SIEMENS.ini | 68 - IOB-WIN-NEXT/DATA/CONF/VALV_SAET.ini | 78 - IOB-WIN-NEXT/DATA/CONF/VL20.ini | 69 - IOB-WIN-NEXT/DATA/CONF/VL20.json | 114 - IOB-WIN-NEXT/DATA/CONF/VL21.ini | 71 - IOB-WIN-NEXT/DATA/CONF/VL21.json | 63 - IOB-WIN-NEXT/DATA/CONF/VL22.ini | 96 - IOB-WIN-NEXT/DATA/CONF/VL22.json | 214 -- IOB-WIN-NEXT/DATA/CONF/VL23.ini | 68 - IOB-WIN-NEXT/DATA/CONF/VL23.json | 127 - IOB-WIN-NEXT/DATA/CONF/VL24.ini | 70 - IOB-WIN-NEXT/DATA/CONF/VL24.json | 202 -- IOB-WIN-NEXT/DATA/CONF/VL25.ini | 64 - IOB-WIN-NEXT/DATA/CONF/VL25.json | 85 - IOB-WIN-NEXT/DATA/CONF/VL26.ini | 64 - IOB-WIN-NEXT/DATA/CONF/VL26.json | 60 - IOB-WIN-NEXT/connParamS7.cs | 60 - IOB-WIN-OPC-UA/DATA/CONF/STEL_210_alarm.json | 108 + 101 files changed, 5611 insertions(+), 4833 deletions(-) create mode 100644 IOB-WIN-FANUC/DATA/CONF/3001.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3002.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3003.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3004.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3005.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3006.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3007.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3012.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3015.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3021.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3025.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3028.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/3028.json create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV002.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV005.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV006.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV008.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV011.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV090.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV098.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/FOV099.ini rename IOB-WIN-NEXT/DATA/CONF/GT507.ini => IOB-WIN-FANUC/DATA/CONF/GT529.ini (52%) rename IOB-WIN-NEXT/DATA/CONF/GT554.ini => IOB-WIN-FANUC/DATA/CONF/GT555.ini (54%) rename IOB-WIN-NEXT/DATA/CONF/GT557.ini => IOB-WIN-FANUC/DATA/CONF/GT575.ini (52%) create mode 100644 IOB-WIN-FANUC/DATA/CONF/GT578.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/GT579.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/GT613.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/GT653.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/GT658.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/GT673.ini rename IOB-WIN-FANUC/{Properties => }/DATA/CONF/IOB.ini (100%) create mode 100644 IOB-WIN-FANUC/DATA/CONF/L014.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/L017.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/L018.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/L019.ini rename IOB-WIN-FANUC/{Properties => }/DATA/CONF/MAIN.ini (100%) rename IOB-WIN-FANUC/{Properties => }/DATA/CONF/SIMUL_01.ini (100%) rename IOB-WIN-FANUC/{Properties => }/DATA/CONF/SIMUL_01.json (100%) rename IOB-WIN-FANUC/{Properties => }/DATA/CONF/SIMUL_01_WD.ini (100%) rename IOB-WIN-FANUC/{Properties => }/DATA/CONF/SIMUL_01_alarm.json (100%) create mode 100644 IOB-WIN-FANUC/DATA/CONF/VL27.ini create mode 100644 IOB-WIN-FANUC/DATA/CONF/VL27.json create mode 100644 IOB-WIN-FANUC/ILLink/ILLink.Descriptors.LibraryBuild.xml create mode 100644 IOB-WIN-FANUC/Iob/Fanuc.cs rename IOB-WIN-FANUC/{Properties => }/Iob/GenericNext.cs (100%) rename IOB-WIN-FANUC/{Properties => }/logs/.placeholder.txt (100%) create mode 100644 IOB-WIN-FANUC/memAreaFanuc.cs delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1032.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1032.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1033.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1033.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1034.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1034.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1035.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/1035.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/3010.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/3010_alarm.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/3011.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/3013.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/3017.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/3020.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE_alarm.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GT693.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GT693.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GT694.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GT696.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/GT698.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/INTERCL_01.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/INTERCL_01.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/PIZ03.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/PIZ03.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/PIZ03_alarm.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/PIZ08.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/PIZ08.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/PIZ08_alarm.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/SIEMENS.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VALV_SAET.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL20.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL20.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL21.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL21.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL22.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL22.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL23.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL23.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL24.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL24.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL25.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL25.json delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL26.ini delete mode 100644 IOB-WIN-NEXT/DATA/CONF/VL26.json delete mode 100644 IOB-WIN-NEXT/connParamS7.cs create mode 100644 IOB-WIN-OPC-UA/DATA/CONF/STEL_210_alarm.json diff --git a/IOB-WIN-FANUC.sln b/IOB-WIN-FANUC.sln index 221674f9..bbb1ea95 100644 --- a/IOB-WIN-FANUC.sln +++ b/IOB-WIN-FANUC.sln @@ -14,7 +14,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-UT-NEXT", "IOB-UT-NEXT\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-FORM", "IOB-WIN-FORM\IOB-WIN-FORM.csproj", "{9BA331BB-9BF1-40E0-AC03-74B43D73A097}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-PING", "IOB-WIN-PING\IOB-WIN-PING.csproj", "{6ADF1E82-124C-489C-99EF-A857C933D362}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-FANUC", "IOB-WIN-FANUC\IOB-WIN-FANUC.csproj", "{4F59C1D0-6CAE-4B30-AA21-71126472187C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -61,18 +61,18 @@ Global {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|Any CPU.Build.0 = Debug|Any CPU {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|x86.Build.0 = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|x86.ActiveCfg = Debug|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|x86.Build.0 = Debug|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Release|Any CPU.Build.0 = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Release|x86.ActiveCfg = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Release|x86.Build.0 = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|Any CPU.ActiveCfg = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|Any CPU.Build.0 = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU - {6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|x86.Build.0 = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Debug|x86.ActiveCfg = Debug|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Debug|x86.Build.0 = Debug|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Release|Any CPU.Build.0 = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Release|x86.ActiveCfg = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Release|x86.Build.0 = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Remote_DEBUG|Any CPU.ActiveCfg = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Remote_DEBUG|Any CPU.Build.0 = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU + {4F59C1D0-6CAE-4B30-AA21-71126472187C}.Remote_DEBUG|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IOB-WIN-FANUC/AdapterFormNext.cs b/IOB-WIN-FANUC/AdapterFormNext.cs index 513eff9e..7d87620b 100644 --- a/IOB-WIN-FANUC/AdapterFormNext.cs +++ b/IOB-WIN-FANUC/AdapterFormNext.cs @@ -28,8 +28,8 @@ namespace IOB_WIN_FANUC switch (tipoScelto) { - case tipoAdapter.PingWatchdog: - iobObj = new IOB_WIN_FORM.Iob.PingWatchDog(this, IOBConf); + case tipoAdapter.FANUC: + iobObj = new Iob.Fanuc(this, IOBConf); btnStart.Enabled = true; break; diff --git a/IOB-WIN-FANUC/App.config b/IOB-WIN-FANUC/App.config index 305318e6..189c76de 100644 --- a/IOB-WIN-FANUC/App.config +++ b/IOB-WIN-FANUC/App.config @@ -111,19 +111,19 @@ - + - + - + - + @@ -131,15 +131,15 @@ - + - + - + @@ -153,6 +153,18 @@ + + + + + + + + + + + + diff --git a/IOB-WIN-FANUC/DATA/CONF/3001.ini b/IOB-WIN-FANUC/DATA/CONF/3001.ini new file mode 100644 index 00000000..48e7be25 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3001.ini @@ -0,0 +1,74 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=TORNOS +MODEL=DT26 + +[CNC] +; TORNOS DT26 I +IP=192.168.1.80 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=8 +AREAY_SIZE=16 +; Red: Y8.4 | Yellow: Y8.5 | Green Y8.6 | All DoorsClosed: Y4.0 (X5.1) | ..........WrkZone Y8.7 | Contapezzi X7.1 +;BIT0=CONN +BIT1=Y8.6 +BIT2=PZCOUNT.D.6416.DW +;BIT2=X7.1 +BIT3=Y8.4 +BIT4=Y8.5 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +;PZCOUNT_MODE=BIT.X7.1 +PZCOUNT_MODE=STD.D.6416.DW +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3002.ini b/IOB-WIN-FANUC/DATA/CONF/3002.ini new file mode 100644 index 00000000..1f96923e --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3002.ini @@ -0,0 +1,74 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=TORNOS +MODEL=DT26 + +[CNC] +; TORNOS DT26 II IOT ENABLED +IP=172.16.199.10 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=8 +AREAY_SIZE=16 +; Red: Y8.4 | Yellow: Y8.5 | Green Y8.6 | All DoorsClosed: Y4.0 (X5.1) | ..........WrkZone Y8.7 | Contapezzi X7.1 +;BIT0=CONN +BIT1=Y8.6 +BIT2=PZCOUNT.D.6416.DW +;BIT2=X7.1 +BIT3=Y8.4 +BIT4=Y8.5 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=24 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +;PZCOUNT_MODE=BIT.X7.1 +PZCOUNT_MODE=STD.D.6416.DW +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3003.ini b/IOB-WIN-FANUC/DATA/CONF/3003.ini new file mode 100644 index 00000000..dde1515f --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3003.ini @@ -0,0 +1,76 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=CMZ +MODEL=TA20 + +[CNC] +; CMZ TA20 +IP=192.168.1.57 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=0 +AREAY_SIZE=8 +; Red: Y3.7 | Yellow: Y3.6 | Green Y3.5 | All DoorsClosed: Y4.0 (X5.1) | ..........WrkZone Y8.7 +;BIT0=CONN +BIT1=Y3.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.7 +BIT4=Y3.6 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3004.ini b/IOB-WIN-FANUC/DATA/CONF/3004.ini new file mode 100644 index 00000000..f66d5a04 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3004.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=BIGLIA +MODEL=446 + +[CNC] +; BIGLIA 446 +IP=192.168.0.20 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=0 +AREAY_SIZE=12 +; Red: Y3.2 | Yellow: !Y8.0 | Green Y4.5 +;BIT0=CONN +BIT1=Y4.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y8.0 +BIT5=Y2.0 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 1 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=8 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3005.ini b/IOB-WIN-FANUC/DATA/CONF/3005.ini new file mode 100644 index 00000000..a9934b75 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3005.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=BIGLIA +MODEL=445 + +[CNC] +; BIGLIA 445 +IP=192.168.0.19 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=0 +AREAY_SIZE=12 +; Red: Y3.2 | Yellow: !Y8.0 | Green Y4.5 +;BIT0=CONN +BIT1=Y4.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y8.0 +BIT5=Y2.0 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 1 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=8 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3006.ini b/IOB-WIN-FANUC/DATA/CONF/3006.ini new file mode 100644 index 00000000..fce3e9b7 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3006.ini @@ -0,0 +1,72 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=HANWHA +MODEL=XD26J + +[CNC] +; HANWHA XD26J +IP=192.168.0.22 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=0 +AREAY_SIZE=56 +; Red: Y53.0 | Yellow: Y53.1 | Green Y53.2 +;BIT0=CONN +BIT1=Y53.2 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y53.0 +BIT4=Y53.1 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 1 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=8 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +PZ_CAD_MADDR=1602 +PZ_REQ_MADDR=1603 +PZ_DONE_MADDR=1604 +PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3007.ini b/IOB-WIN-FANUC/DATA/CONF/3007.ini new file mode 100644 index 00000000..b69840bf --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3007.ini @@ -0,0 +1,72 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=STAR +MODEL=SR32J + +[CNC] +; STAR SR32J +IP=192.168.0.21 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=0 +AREAY_SIZE=8 +; Red: Y0.2 | Yellow: Y1.2 | Green Y2.6 | PZCount R10.5 / R22.4 +;BIT0=CONN +BIT1=Y2.6 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y0.2 +BIT4=Y1.2 +AREAD_START=0 +AREAD_SIZE=0 +AREAR_START=0 +AREAR_SIZE=0 +AREAX_START=0 +AREAX_SIZE=0 +AREAY_START=0 +AREAY_SIZE=0 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 1 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=8 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +PZ_CAD_MADDR=1602 +PZ_REQ_MADDR=1603 +PZ_DONE_MADDR=1604 +PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3012.ini b/IOB-WIN-FANUC/DATA/CONF/3012.ini new file mode 100644 index 00000000..3e0a95b1 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3012.ini @@ -0,0 +1,76 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=TAKAHASHI +MODEL=TNC-L10 + +[CNC] +; TAKAHASHI TNC-L10-NCL +IP=192.168.0.23 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=0 +AREAY_SIZE=24 +; Red: Y21.4 | Yellow: Y21.5 | Green Y21.6 +;BIT0=CONN +BIT1=Y21.6 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y21.4 +BIT4=Y21.5 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 1 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=8 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3015.ini b/IOB-WIN-FANUC/DATA/CONF/3015.ini new file mode 100644 index 00000000..d61f7ea7 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3015.ini @@ -0,0 +1,86 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=DMG MORI Gildemeister +MODEL=SPRINT-32-5 + +[CNC] +; DMG MORI (IOT ENABLED) +IP=192.168.0.12 +PORT=19000 +;PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +;schema elettrico (203 pg): +;1) le lampade e i colori (pag 7 di 203, Y1.0 --> Y1.3) +;2) modo auto (6 di 203, X7.2) +;3) porte (19 di 203, X8.6) +;4) allarme (61 di 203, X10.5) e guasto (61 di 203, X10.3 / X10.4) +; +;lista segnali (12 pg) +;5a) emergenza ch1 (spero vada bene) --> pag 3 di 12, X8.4 +;5b) emergenza ch1 --> pg 8 di 12, Y7.0 +;6) prog in RUN Y5.0 (pag 6 di 12) + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=8 +AREAY_SIZE=16 +; Red: Y1.1 | Yellow: Y1.2 | Green Y1.3 | All DoorsClosed: Y4.0 (X5.1) | ..........WrkZone Y8.7 | PZ richiesti: D.7960.DW - PZ prodotti: D.7964.DW +;BIT0=CONN +BIT1=Y1.3 +BIT2=PZCOUNT.D.7964.DW +BIT3=Y1.1 +BIT4=Y1.2 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1990 --> 7960, 1991 --> 7964) +PZCOUNT_MODE=STD.D.7964.DW +;PZ_CAD_MADDR=???; cad +;PZ_REQ_MADDR=1990; pz richiesti (DW) +;PZ_DONE_MADDR=1991; pz fatti (DW) +;PZ_GTOT_MADDR=???; pz tot macchina +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3021.ini b/IOB-WIN-FANUC/DATA/CONF/3021.ini new file mode 100644 index 00000000..ed8b096a --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3021.ini @@ -0,0 +1,73 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=CITIZEN +MODEL=GN-3200 + +[CNC] +; CITIZEN RETTIFICA 3021 +IP=192.168.0.24 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y2.0 | Yellow: Y1.7 | Green Y2.1 | riscaldamento Y7.4 | D19.1 MANCA PEZZO (SE rosso) +;BIT0=CONN +BIT1=Y2.1 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y2.0 +BIT4=Y1.7 +BIT5=Y7.4 +AREAD_START=0 +AREAD_SIZE=0 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=0 +AREAX_START=0 +AREAX_SIZE=0 +AREAY_START=0 +AREAY_SIZE=8 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 0 +;bit3 = 0 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=16 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +PZGTOT_MODE=STD.PAR.6712 +PZREQ_MODE=STD.PAR.6713 +;PZCAD_MODE=STD.D.6408.DW +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/3025.ini b/IOB-WIN-FANUC/DATA/CONF/3025.ini new file mode 100644 index 00000000..2fa97d5b --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3025.ini @@ -0,0 +1,86 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=STAR +MODEL=SV-20R + +[CNC] +; START Tornio a Fantina SV20R +IP=192.168.0.70 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y31.4 | Yellow: Y31.5 | Green Y31.6 | riscaldamento Y7.4 ??? +;BIT0=CONN +BIT1=Y31.6 +;BIT2=PZCOUNT.PAR.6711 +BIT2=PZCOUNT.MACRO.10100 +;BIT2=STD.MACRO.10100 +BIT3=Y31.4 +BIT4=Y31.5 +; 8.4 --> emg armata= true, 0 = attiva mettere !8.4 (da verificare) +BIT5=!X8.4 +;BIT6=X8.4 +AREAD_START=0 +AREAD_SIZE=0 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=0 +AREAX_START=0 +AREAX_SIZE=40 +AREAY_START=0 +AREAY_SIZE=32 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 60 +;bit0 = 0 +;bit1 = 1 +;bit2 = 0 +;bit3 = 0 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=2 +;BLINK_FILT=16 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +;PZCOUNT_MODE=STD.PAR.6711 +PZCOUNT_MODE=STD.MACRO.10100 +PZREQ_MODE=STD.MACRO.10000 +PZGTOT_MODE=STD.PAR.6712 +;PZCAD_MODE=STD.D.6408.DW +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +DISABLE_SEND_WDST=TRUE + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=JETCO +HostOS=WIN +HostName=IOB-WIN-09 +HostAddr=192.168.1.133 diff --git a/IOB-WIN-FANUC/DATA/CONF/3028.ini b/IOB-WIN-FANUC/DATA/CONF/3028.ini new file mode 100644 index 00000000..c5b1f066 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3028.ini @@ -0,0 +1,97 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=GHIRINGHELLI +MODEL=GMG-M200 + +[CNC] +; START Tornio a Fantina SV20R +IP=192.168.0.91 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +; giallo --> 15000.0 +; richiesta interv operatore --> R15000.1 --> mandare in BLU!!! è richiesta intervento operatore... +; RO tot pezzi vita macchina D128 (DW, 4 byte) +; RO contapezzi D132 (DW, 4 byte) +; RW richiesta pezzi D136 (DW, 4 byte) --> occhio scrittura con bitconverter + +[MEMORY] +; Red: Y91.3 | Yellow: R15000.0 | Green Y91.4 | emerg 8.4 +;BIT0=CONN +BIT1=Y91.4 +BIT2=PZCOUNT.D.132 +;BIT2=STD.MACRO.10100 +BIT3=Y91.3 +; poichè leggo da 15000 --> R0.0 --> R15000.0 +;BIT4=R0.0 +; 8.4 --> emg armata= true, 0 = attiva mettere !8.4 (da verificare) +BIT5=!X8.4 +;BIT6=X33.4 +AREAD_START=128 +AREAD_SIZE=12 +AREAG_SIZE=48 +;AREAG_SIZE=48 +AREAR_START=15000 +AREAR_SIZE=4 +AREAX_START=0 +AREAX_SIZE=40 +AREAY_START=0 +AREAY_SIZE=92 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 60 +;bit0 = 0 +;bit1 = 1 +;bit2 = 0 +;bit3 = 0 +;bit4 = 0 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +; da gestire rosso lampeggiante? +BLINK_FILT=2 +;BLINK_FILT=16 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.D.132.DW +PZREQ_MODE=STD.D.136.DW +PZGTOT_MODE=STD.D.128.DW +;PZCAD_MODE=STD.D.6408.DW +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +ENABLE_PZ_REQ=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +DISABLE_SEND_WDST=TRUE +; bit da scrivere come trace ad ogni check +;MEM_2_TRACE=|BIT3|BIT4|BIT5| +PARAM_CONF=3028.json + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=JETCO +HostOS=WIN +HostName=IOB-WIN-09 +HostAddr=192.168.1.133 diff --git a/IOB-WIN-FANUC/DATA/CONF/3028.json b/IOB-WIN-FANUC/DATA/CONF/3028.json new file mode 100644 index 00000000..baf55dad --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/3028.json @@ -0,0 +1,30 @@ +{ + "mMapWrite": { + //"setComm": { + // "name": "setComm", + // "description": "Commessa", + // "tipoMem": "String", + // "memAddr": "VarADS.NomeLancioRichiesto", + // "index": 0, + // "size": 0 + //}, + //"setArt": { + // "name": "setArt", + // "description": "Articolo", + // "tipoMem": "String", + // "memAddr": "VarADS.NomeDisegnoRichiesto", + // "index": 0, + // "size": 0 + //}, + "setPzComm": { + "name": "setPzComm", + "description": "Qty", + "memAddr": "STD.D.136.DW", + "tipoMem": "DInt", + "index": 0, + "size": 0 + } + }, + "mMapRead": { + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV002.ini b/IOB-WIN-FANUC/DATA/CONF/FOV002.ini new file mode 100644 index 00000000..b52c6b65 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV002.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=SHE HONG +MODEL=VMC-S/A + +[CNC] +; SHE HONG +IP=192.168.50.55 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=12 +; Red: Y11.0 | Yellow: Y0.3 | Green Y0.4 | All DoorsClosed: Y4.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y0.4 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y11.0 +BIT4=Y0.3 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 1 +;bit2 = 0 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV005.ini b/IOB-WIN-FANUC/DATA/CONF/FOV005.ini new file mode 100644 index 00000000..ee22b3cd --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV005.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=DOOSAN +MODEL=PUMA500 + +[CNC] +; DOOSAN PUMA500 overmach +IP=192.168.50.50 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=8 +; Red: Y3.2 | Yellow: Y3.1 | Green Y3.0 | All DoorsClosed: X8.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV006.ini b/IOB-WIN-FANUC/DATA/CONF/FOV006.ini new file mode 100644 index 00000000..ad92b7de --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV006.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=DOOSAN +MODEL=PUMA700 1116 + +[CNC] +; DOOSAN PUMA700 1116 overmach +IP=192.168.50.51 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=8 +; Red: Y3.2 | Yellow: Y3.1 | Green Y3.0 | All DoorsClosed: X8.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV008.ini b/IOB-WIN-FANUC/DATA/CONF/FOV008.ini new file mode 100644 index 00000000..e4af8c1c --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV008.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=DOOSAN +MODEL=PUMA500 + +[CNC] +; DOOSAN PUMA500 overmach +IP=192.168.50.53 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=8 +; Red: Y0.7 | Yellow: Y0.6 | Green Y0.5 | All DoorsClosed: X8.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y0.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y0.7 +BIT4=Y0.6 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV011.ini b/IOB-WIN-FANUC/DATA/CONF/FOV011.ini new file mode 100644 index 00000000..f5c04318 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV011.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=HWACHEON +MODEL=HI-TECH300-400 + +[CNC] +; HWACHEON +IP=192.168.50.54 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=12 +; Red: Y10.4 | Yellow: Y10.6 | Green !Y10.5 | All DoorsClosed: Y11.3 | Emergenza X8.4 +;BIT0=CONN +BIT1=!Y10.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y10.4 +BIT4=Y10.6 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 1 +;bit2 = 0 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV090.ini b/IOB-WIN-FANUC/DATA/CONF/FOV090.ini new file mode 100644 index 00000000..3cb97a6f --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV090.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=KDM +MODEL=KTM 12/16 + +[CNC] +; KDM Ktm 12/16 +IP=192.168.50.53 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=8 +; Red: Y3.2 | Yellow: Y3.1 | Green Y3.0 | All DoorsClosed: X8.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV098.ini b/IOB-WIN-FANUC/DATA/CONF/FOV098.ini new file mode 100644 index 00000000..3a3a87c1 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV098.ini @@ -0,0 +1,85 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=PUMA +MODEL=PUMA 4100 + +[CNC] +IP=192.168.170.49 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=8 +; Red: Y3.2 | Yellow: Y3.1 | Green Y3.0 | All DoorsClosed: X8.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 1 +;bit2 = 0 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +; Disabilito conteggio Pezzi come richiesto +DISABLE_PZCOUNT=TRUE + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=Fluitek +HostOS=WIN +HostName=FLUITEK-IOB-01 +HostAddr=192.168.169.53 diff --git a/IOB-WIN-FANUC/DATA/CONF/FOV099.ini b/IOB-WIN-FANUC/DATA/CONF/FOV099.ini new file mode 100644 index 00000000..323503b2 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/FOV099.ini @@ -0,0 +1,84 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=AWEA +MODEL=BM1600 + +[CNC] +IP=192.168.170.50 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.168.17 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +AREAG_SIZE=48 +AREAR_SIZE=0 +AREAX_SIZE=12 +AREAY_SIZE=8 +; Red: Y4.0 | Yellow: Y4.1 | Green Y3.7 | All DoorsClosed: X8.1 | Emergenza X8.4 +;BIT0=CONN +BIT1=Y3.7 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y4.0 +BIT4=Y4.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 1 +;bit2 = 0 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602 +;PZ_REQ_MADDR=1603 +;PZ_DONE_MADDR=1604 +;PZ_GTOT_MADDR=1605 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +; Disabilito conteggio Pezzi come richiesto +DISABLE_PZCOUNT=TRUE + +[BRANCH] +NAME=master + +[TAGS] +Customer=Fluitek +HostOS=WIN +HostName=FLUITEK-IOB-02 +HostAddr=192.168.169.82 \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GT507.ini b/IOB-WIN-FANUC/DATA/CONF/GT529.ini similarity index 52% rename from IOB-WIN-NEXT/DATA/CONF/GT507.ini rename to IOB-WIN-FANUC/DATA/CONF/GT529.ini index aa24e14b..0f9fea70 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GT507.ini +++ b/IOB-WIN-FANUC/DATA/CONF/GT529.ini @@ -1,20 +1,19 @@ ;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE, isola Trevisan 424 con robot Kawasaki (NO industria 4.0) -CNCTYPE=SIEMENS_FAPE +[IOB] +;Tornio FANUC ROBOTDRILL +CNCTYPE=FANUC PING_MS_TIMEOUT=500 [MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape +VENDOR=TREVISAN +MODEL=GT529 [CNC] -IP=192.168.1.57 -CPUTYPE=S71200 -RACK=0 -SLOT=0 +IP=192.168.0.85 +PORT=8193 +GETPRGNAME=true -[SERVER] +[SERVER] MPIP=http://192.168.1.64 MPURL=/MP/IO CMDBASE=/IOB/input/ @@ -25,16 +24,27 @@ CMDADV1=?valore= CMDREBO=/sendReboot.aspx?idxMacchina= [MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=48 -SIZE_WRITE=48 +; Red: Y0.2 | Yellow: Y0.3 | Green Y0.0 | Apertura Auto porta: Y0.4 (X5.1) | NON Emergenza Y0.5 | MODO AUTO Y0.6 | Contapezzi Y0.1 ;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - +BIT1=Y0.0 +BIT2=Y0.1 +;BIT2=PZCOUNT.PAR.6711 +BIT3=Y0.2 +BIT4=Y0.3 +BIT5=Y0.5 +;BIT6=Y0.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=4 +PAR_START=6711 +PAR_SIZE=3 [BLINK] ;MAX_COUNTER_BLINK = 30 @@ -53,11 +63,12 @@ BLINK_FILT=0 [OPTPAR] ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice ; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBDW40 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 +PZCOUNT_MODE=BIT +;PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina ;gestione invio pezzi in blocco ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=5 diff --git a/IOB-WIN-NEXT/DATA/CONF/GT554.ini b/IOB-WIN-FANUC/DATA/CONF/GT555.ini similarity index 54% rename from IOB-WIN-NEXT/DATA/CONF/GT554.ini rename to IOB-WIN-FANUC/DATA/CONF/GT555.ini index 861e2c07..c12c0cd6 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GT554.ini +++ b/IOB-WIN-FANUC/DATA/CONF/GT555.ini @@ -1,20 +1,19 @@ ;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE, isola Trevisan 547 -CNCTYPE=SIEMENS_FAPE +[IOB] +;Tornio TREVISAN 555 +CNCTYPE=FANUC PING_MS_TIMEOUT=500 [MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape +VENDOR=TREVISAN +MODEL=GT555 [CNC] -IP=192.168.1.55 -CPUTYPE=S71200 -RACK=0 -SLOT=0 +IP=192.168.0.54 +PORT=8193 +GETPRGNAME=true -[SERVER] +[SERVER] MPIP=http://192.168.1.64 MPURL=/MP/IO CMDBASE=/IOB/input/ @@ -25,16 +24,24 @@ CMDADV1=?valore= CMDREBO=/sendReboot.aspx?idxMacchina= [MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=48 -SIZE_WRITE=48 +; Red: Y95.7 | Yellow: Y96.7 | Green Y96.3 | All DoorsClosed: Y4.0 (X5.1) | ..........WrkZone Y8.7 | Contapezzi X7.1 ;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - +BIT1=Y96.3 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y95.7 +BIT4=Y96.7 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=128 +PAR_START=6711 +PAR_SIZE=3 [BLINK] ;MAX_COUNTER_BLINK = 30 @@ -53,11 +60,11 @@ BLINK_FILT=0 [OPTPAR] ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice ; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBDW40 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina ;gestione invio pezzi in blocco ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=5 diff --git a/IOB-WIN-NEXT/DATA/CONF/GT557.ini b/IOB-WIN-FANUC/DATA/CONF/GT575.ini similarity index 52% rename from IOB-WIN-NEXT/DATA/CONF/GT557.ini rename to IOB-WIN-FANUC/DATA/CONF/GT575.ini index 68260385..792636aa 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GT557.ini +++ b/IOB-WIN-FANUC/DATA/CONF/GT575.ini @@ -1,20 +1,19 @@ ;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE, isola BTB1 -CNCTYPE=SIEMENS_FAPE +[IOB] +;Tornio FANUC Doosan Overmach +CNCTYPE=FANUC PING_MS_TIMEOUT=500 [MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape +VENDOR=Doosan Overmach +MODEL=GT575 [CNC] -IP=192.168.1.56 -CPUTYPE=S71200 -RACK=0 -SLOT=0 +IP=192.168.1.46 +PORT=8193 +GETPRGNAME=true -[SERVER] +[SERVER] MPIP=http://192.168.1.64 MPURL=/MP/IO CMDBASE=/IOB/input/ @@ -25,16 +24,25 @@ CMDADV1=?valore= CMDREBO=/sendReboot.aspx?idxMacchina= [MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=48 -SIZE_WRITE=48 +; Red: Y3.2 | Yellow:Y3.1 | Green Y3.0 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO Y1.2 (X12.4) | Contapezzi Y0.1 ;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 [BLINK] ;MAX_COUNTER_BLINK = 30 @@ -53,11 +61,12 @@ BLINK_FILT=0 [OPTPAR] ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice ; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBDW40 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina ;gestione invio pezzi in blocco ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=5 diff --git a/IOB-WIN-FANUC/DATA/CONF/GT578.ini b/IOB-WIN-FANUC/DATA/CONF/GT578.ini new file mode 100644 index 00000000..7e1db747 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/GT578.ini @@ -0,0 +1,83 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio CMF 645 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=CMF +MODEL=T91 + +[CNC] +IP=192.168.0.133 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y1.3 | Yellow:Y0.6 | Green Y0.5 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO Y1.2 (X12.4) | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y0.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y1.3 +BIT4=Y0.6 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=0 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop + +; Tags manuali +[TAGS] +Customer=LVF +HostOS=WIN +HostName=Server-MAPO-IOB +HostAddr=192.168.1.208 diff --git a/IOB-WIN-FANUC/DATA/CONF/GT579.ini b/IOB-WIN-FANUC/DATA/CONF/GT579.ini new file mode 100644 index 00000000..b27b3104 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/GT579.ini @@ -0,0 +1,84 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio CMF 646 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=CMF +MODEL=T91 + +[CNC] +IP=192.168.0.145 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y1.3 | Yellow:Y0.6 | Green Y0.5 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO Y1.2 (X12.4) | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y0.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y1.3 +BIT4=Y0.6 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=26 +;BLINK_FILT=0 + + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop + +; Tags manuali +[TAGS] +Customer=LVF +HostOS=WIN +HostName=Server-MAPO-IOB +HostAddr=192.168.1.208 diff --git a/IOB-WIN-FANUC/DATA/CONF/GT613.ini b/IOB-WIN-FANUC/DATA/CONF/GT613.ini new file mode 100644 index 00000000..5518c149 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/GT613.ini @@ -0,0 +1,83 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio FANUC Doosan Overmach PUMA 700 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=Doosan Overmach +MODEL=GT613 + +[CNC] +IP=192.168.0.80 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y3.2 | Yellow:Y3.1 | Green Y3.0 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO DOOR X12.4 | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop + +; Tags manuali +[TAGS] +Customer=LVF +HostOS=WIN +HostName=Server-MAPO-IOB +HostAddr=192.168.1.208 diff --git a/IOB-WIN-FANUC/DATA/CONF/GT653.ini b/IOB-WIN-FANUC/DATA/CONF/GT653.ini new file mode 100644 index 00000000..d561ff9b --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/GT653.ini @@ -0,0 +1,83 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio FANUC Doosan Overmach PUMA GT3100 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=Doosan Overmach +MODEL=GT653 + +[CNC] +IP=192.168.0.33 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y3.2 | Yellow:Y3.1 | Green Y3.0 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO DOOR X12.4 | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=LVF +HostOS=WIN +HostName=Server-MAPO-IOB +HostAddr=192.168.1.208 diff --git a/IOB-WIN-FANUC/DATA/CONF/GT658.ini b/IOB-WIN-FANUC/DATA/CONF/GT658.ini new file mode 100644 index 00000000..018e9814 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/GT658.ini @@ -0,0 +1,83 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio FANUC Doosan Overmach PUMA 4100A +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=Doosan Overmach +MODEL=GT658 + +[CNC] +IP=192.168.0.35 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y3.2 | Yellow:Y3.1 | Green Y3.0 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO DOOR X12.4 | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=LVF +HostOS=WIN +HostName=Server-MAPO-IOB +HostAddr=192.168.1.208 diff --git a/IOB-WIN-FANUC/DATA/CONF/GT673.ini b/IOB-WIN-FANUC/DATA/CONF/GT673.ini new file mode 100644 index 00000000..fdf85d2c --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/GT673.ini @@ -0,0 +1,83 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio FANUC Doosan Overmach PUMA GT3100 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=Doosan Overmach +MODEL=GT673 + +[CNC] +IP=192.168.0.40 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y3.2 | Yellow:Y3.1 | Green Y3.0 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO DOOR X12.4 | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=master + +; Tags manuali +[TAGS] +Customer=LVF +HostOS=WIN +HostName=Server-MAPO-IOB +HostAddr=192.168.1.208 diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini b/IOB-WIN-FANUC/DATA/CONF/IOB.ini similarity index 100% rename from IOB-WIN-FANUC/Properties/DATA/CONF/IOB.ini rename to IOB-WIN-FANUC/DATA/CONF/IOB.ini diff --git a/IOB-WIN-FANUC/DATA/CONF/L014.ini b/IOB-WIN-FANUC/DATA/CONF/L014.ini new file mode 100644 index 00000000..2394d13b --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/L014.ini @@ -0,0 +1,74 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=COLCOM +MODEL=TAKISAWA + +[CNC] +; TEST FANUC! +IP=192.168.0.228 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=192.168.111.104 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y7.4 | Yellow: Y51.1 (porta chiusa, da NEGARE) | Green Y7.6 | Alarm Y 51.4 +;BIT0=CONN +BIT1=Y7.6 +BIT2=PZCOUNT.D.3010.DW +BIT3=Y7.4 +;BIT4=Y51.1 +BIT5=Y51.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.D.3010.DW +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina + +;D.3010.DW: pz prodotti +;D.3020.DW: TOTALI +;D.3060.DW: pz da fare +;D.3064.DW: SUPER-TOTALE??? + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/L017.ini b/IOB-WIN-FANUC/DATA/CONF/L017.ini new file mode 100644 index 00000000..fc383e37 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/L017.ini @@ -0,0 +1,69 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=COLCOM +MODEL=TSUGAMI + +[CNC] +; TEST FANUC! +IP=192.168.0.245 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=192.168.111.104 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y4.7 | Yellow: Y5.1 | Green Y5.0 | ALARM Y 0.4 | Cycle CONT Y 4.4 +;BIT0=CONN +BIT1=Y5.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y4.7 +BIT4=Y5.1 +BIT5=Y0.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/L018.ini b/IOB-WIN-FANUC/DATA/CONF/L018.ini new file mode 100644 index 00000000..b7773901 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/L018.ini @@ -0,0 +1,75 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=COLCOM +MODEL=DMG-MORI + +[CNC] +; TEST FANUC! +IP=192.168.100.78 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=192.168.111.104 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y12.4 | Yellow: Y51.1 (porta chiusa, da NEGARE) | Green Y12.6 | Alarm Y 51.4 | Blu Y12.7 +;BIT0=CONN +BIT1=Y12.6 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y12.4 +BIT4=Y12.7 +;BIT5=Y11.2 +BIT5=X18.3 +BIT6=X11.3 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +PZCOUNT_MODE=STD.PAR.6711 +PZGTOT_MODE=STD.PAR.6712 +;PZREQ_MODE=STD.PAR.6713 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 + + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/L019.ini b/IOB-WIN-FANUC/DATA/CONF/L019.ini new file mode 100644 index 00000000..14502e3a --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/L019.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +VENDOR=COLCOM +MODEL=DMG-MORI-02 + +[CNC] +; TEST FANUC! +;IP=192.168.100.81 +;Nuovo ip in sottorete .80. +IP=192.168.80.34 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=192.168.111.104 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y12.4 | Yellow: Y51.1 (porta chiusa, da NEGARE) | Green Y12.6 | Alarm Y 51.4 | Blu Y12.7 +;BIT0=CONN +BIT1=Y12.6 +;BIT2=PZCOUNT.PAR.6711 +BIT3=Y12.4 +BIT4=Y12.7 +;BIT5=Y11.2 +BIT5=X18.3 +BIT6=X11.3 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +;PZCOUNT_MODE=STD.PAR.6711 +;PZGTOT_MODE=STD.PAR.6712 +;PZREQ_MODE=STD.PAR.6713 +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=10 +MAX_SEND_PZC_BLOCK=100 +DISABLE_SEND_WDST=TRUE + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini b/IOB-WIN-FANUC/DATA/CONF/MAIN.ini similarity index 100% rename from IOB-WIN-FANUC/Properties/DATA/CONF/MAIN.ini rename to IOB-WIN-FANUC/DATA/CONF/MAIN.ini diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.ini b/IOB-WIN-FANUC/DATA/CONF/SIMUL_01.ini similarity index 100% rename from IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.ini rename to IOB-WIN-FANUC/DATA/CONF/SIMUL_01.ini diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.json b/IOB-WIN-FANUC/DATA/CONF/SIMUL_01.json similarity index 100% rename from IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01.json rename to IOB-WIN-FANUC/DATA/CONF/SIMUL_01.json diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_WD.ini b/IOB-WIN-FANUC/DATA/CONF/SIMUL_01_WD.ini similarity index 100% rename from IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_WD.ini rename to IOB-WIN-FANUC/DATA/CONF/SIMUL_01_WD.ini diff --git a/IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_alarm.json b/IOB-WIN-FANUC/DATA/CONF/SIMUL_01_alarm.json similarity index 100% rename from IOB-WIN-FANUC/Properties/DATA/CONF/SIMUL_01_alarm.json rename to IOB-WIN-FANUC/DATA/CONF/SIMUL_01_alarm.json diff --git a/IOB-WIN-FANUC/DATA/CONF/VL27.ini b/IOB-WIN-FANUC/DATA/CONF/VL27.ini new file mode 100644 index 00000000..b4f5b851 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/VL27.ini @@ -0,0 +1,84 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=FANUC + +[MACHINE] +; VALVITAL 2024 +VENDOR=FFG +MODEL=CROSSFLEX A1600 + +[CNC] +; FANUC! +IP=192.168.214.100 +PORT=9000 +GETPRGNAME=true + +[SERVER] +MPIP=192.168.214.4 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Green 11.4 | Red: Y11.7 | Yellow: Y11.6 (bianco, eventualmente in lampeggio) | Emerg: X8.4 (negata)| +;BIT0=CONN +BIT1=Y11.4 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y11.7 +BIT4=Y11.6 +BIT5=!X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_SIZE=48 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=64 +AREAY_START=0 +AREAY_SIZE=64 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD|BIT +;PZCOUNT_MODE=STD.MACRO.930 +;PZGTOT_MODE=STD.MACRO.929 +PZCOUNT_MODE=STD.MACRO.929 +PZGTOT_MODE=STD.PAR.6712 +PZREQ_MODE=STD.MACRO.964 +ENABLE_PZ_REQ=TRUE +ENABLE_PZ_RESET=TRUE +ENABLE_PZ_RESET_stopSetup=TRUE +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +; conf cablata set Art/Commessa +SET_NUM_ART=STD.MACRO.966 +SET_NUM_COM=STD.MACRO.965 +;indica se il numero articolo sia semplicemente il trim dei caratteri alfabetici (chiama comunque server...) +NUM_ART_CHR_TRIM=TRUE +; conf parametri memoria READ/WRITE +PARAM_CONF=VL27.json +DISABLE_SEND_WDST=TRUE + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-FANUC/DATA/CONF/VL27.json b/IOB-WIN-FANUC/DATA/CONF/VL27.json new file mode 100644 index 00000000..72036f69 --- /dev/null +++ b/IOB-WIN-FANUC/DATA/CONF/VL27.json @@ -0,0 +1,103 @@ +{ + "mMapWrite": { + "setArt": { + "name": "setArt", + "description": "Articolo", + "memAddr": "NONE.01", + "tipoMem": "String", + "index": 0, + "size": 20, + "displOrdinal": 1 + }, + "setArtNum": { + "name": "setArtNum", + "description": "# Num Articolo", + "memAddr": "MACRO.966", + "tipoMem": "Int", + "index": 966, + "size": 4, + "displOrdinal": 1 + }, + "setComm": { + "name": "setComm", + "description": "Commessa", + "memAddr": "NONE.02", + "tipoMem": "String", + "index": 0, + "size": 20, + "displOrdinal": 2 + }, + "setCommNum": { + "name": "setCommNum", + "description": "# NumCommessa", + "memAddr": "MACRO.965", + "tipoMem": "Int", + "index": 965, + "size": 4, + "displOrdinal": 2 + }, + "setPzComm": { + "name": "setPzComm", + "description": "Qta Richiesta", + "memAddr": "MACRO.964", + "tipoMem": "Int", + "index": 964, + "size": 4, + "displOrdinal": 3 + } + }, + "mMapRead": { + "PZ_GTOT": { + "name": "PZ_GTOT", + "description": "Contatore GTot", + "memAddr": "", + "tipoMem": "Int", + "index": 0, + "size": 4, + "func": "MAX", + "period": 60, + "factor": 1, + "displOrdinal": 7 + }, + "PZ_COUNT": { + "name": "PZ_COUNT", + "description": "Contatore", + "memAddr": "", + "tipoMem": "Int", + "index": 0, + "size": 4, + "func": "MAX", + "period": 60, + "factor": 1, + "displOrdinal": 8 + }, + "PROG": { + "name": "PROG", + "description": "Programma", + "memAddr": "", + "tipoMem": "Int", + "index": 0, + "size": 4, + "func": "MAX", + "period": 60, + "factor": 1, + "displOrdinal": 9 + }, + "PzCntFree": { + "name": "PzCntFree", + "description": "Contatore", + "memAddr": "MACRO.930", + "tipoMem": "Int", + "index": 0, + "size": 4, + "func": "MAX", + "period": 60, + "factor": 1, + "displOrdinal": 8 + } + }, + "mMapWriteLink": { + "setArt": "setArtNum", + "setComm": "setCommNum" + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/ILLink/ILLink.Descriptors.LibraryBuild.xml b/IOB-WIN-FANUC/ILLink/ILLink.Descriptors.LibraryBuild.xml new file mode 100644 index 00000000..a42d7f0e --- /dev/null +++ b/IOB-WIN-FANUC/ILLink/ILLink.Descriptors.LibraryBuild.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj b/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj index 6ff223ca..8745f51f 100644 --- a/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj +++ b/IOB-WIN-FANUC/IOB-WIN-FANUC.csproj @@ -12,6 +12,8 @@ 512 true true + + AnyCPU @@ -33,8 +35,51 @@ 4 + + ..\packages\EgwProxy.MultiCncLib.3.6.2207.1211\lib\EgwProxy.MultiCncLib.dll + + + ..\packages\MapoSDK.6.14.2411.518\lib\MapoSDK.dll + + + ..\packages\Microsoft.Bcl.AsyncInterfaces.9.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.9.0.0\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Logging.Abstractions.9.0.0\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\System.Buffers.4.6.0\lib\net462\System.Buffers.dll + + + ..\packages\System.Diagnostics.DiagnosticSource.9.0.0\lib\net462\System.Diagnostics.DiagnosticSource.dll + + + ..\packages\System.IO.Pipelines.9.0.0\lib\net462\System.IO.Pipelines.dll + + + ..\packages\System.Memory.4.6.0\lib\net462\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.6.0\lib\net462\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.1.0\lib\net462\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Channels.9.0.0\lib\net462\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.6.0\lib\net462\System.Threading.Tasks.Extensions.dll + @@ -52,11 +97,14 @@ Form + Form + + Always @@ -68,7 +116,7 @@ Resources.Designer.cs Designer - + True Resources.resx @@ -81,27 +129,63 @@ App.config PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always - + Always - + Always - + Always - + Always - + Always - + Always @@ -128,10 +212,9 @@ - + Always - Always diff --git a/IOB-WIN-FANUC/Iob/Fanuc.cs b/IOB-WIN-FANUC/Iob/Fanuc.cs new file mode 100644 index 00000000..8b09d2ac --- /dev/null +++ b/IOB-WIN-FANUC/Iob/Fanuc.cs @@ -0,0 +1,2535 @@ +using EgwProxy.MultiCncLib.CNC; +using IOB_UT_NEXT; +using MapoSDK; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.NetworkInformation; + +namespace IOB_WIN_FANUC.Iob +{ + public class Fanuc : Iob.GenericNext + { + #region Public Constructors + + /// + /// estende l'init della classe base... + /// + /// + /// + public Fanuc(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf) + { + lgInfo("Start init Fanuc"); + // 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 = $"BIT{i}"; + memArea = fIni.ReadString("MEMORY", currBit, ""); + // se trovo un valore... + if (!string.IsNullOrEmpty(memArea)) + { + signLUT.Add(currBit, memArea); + } + } + + // gestione override contapezzi + enablePzCountByApp = utils.CRB("enableContapezzi"); + enablePzCountByIob = (getOptPar("ENABLE_PZCOUNT") == "TRUE"); + disablePzCountByIob = (getOptPar("DISABLE_PZCOUNT") == "TRUE"); + + // gestione override idx articoli... + if (!string.IsNullOrEmpty(getOptPar("NUM_ART_CHR_TRIM"))) + { + string NUM_ART_CHR_TRIM = getOptPar("NUM_ART_CHR_TRIM"); + bool.TryParse(NUM_ART_CHR_TRIM, out numArtCharTrim); + } + + // leggo conf x ricerca valori memoria da tracciare in log di continuo... + mem2trace = fIni.ReadString("OPTPAR", "MEM_2_TRACE", ""); + + // è little endian (NON serve conversione) + hasBigEndian = false; + lgInfoStartup("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 (isVerboseLog) + { + lgInfo("FANUC_ref da EgwProxy.MultiCncLib"); + } + + // disconnetto e connetto... + if (isVerboseLog) + { + lgInfo("FANUC: tryDisconnect"); + } + + tryDisconnect(); + lgInfo("FANUC: tryConnect"); + tryConnect(); + if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob)) + { + lgInfo("FANUC: inizio gestione contapezzi"); + try + { + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con + // indicazione area) + if (cIobConf.optPar.Count > 0 && !string.IsNullOrEmpty(getOptPar("PZCOUNT_MODE"))) + { + if (getOptPar("PZCOUNT_MODE").StartsWith("STD")) + { + lgInfo("Init contapezzi FANUC: pzCntReload(true)"); + pzCntReload(true); + // refresh associazione Macchina - IOB + SendM2IOB(); + // invio altri dati accessori... + SendMachineConf(); + // per adesso imposto lettura fanuc == contapezzi (poi farà vera lettura...) + contapezziPLC = contapezziIOB; + } + else + { + contapezziIOB = 0; + lgInfo("Contapezzi STD disabilitato: modalità {0}", getOptPar("PZCOUNT_MODE")); + } + } + else + { + contapezziIOB = 0; + lgInfo("Parametro mancante PZCOUNT_MODE"); + } + } + catch (Exception exc) + { + lgError(exc, "Errore in contapezzi FANUC 01"); + } + } + // finisco INIT ADAPTER + lgInfo("End init Adapter FANUC"); + } + + #endregion Public Constructors + + #region Public Methods + + /// + /// Processo i task richiesti e li elimino dalla coda 1:1 + /// + /// + public override Dictionary executeTasks(Dictionary task2exe) + { + // Verificare il protocollo: dovrebbe togliere SOLO i task eseguiti... + Dictionary taskDone = new Dictionary(); + if (task2exe != null) + { + bool taskOk = false; + string taskVal = ""; + string newVal = ""; + string memAddr = ""; + int newValInt = 0; + // cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4 + foreach (var item in task2exe) + { + taskOk = false; + taskVal = ""; + // converto richiesta in enum... + taskType tName = taskType.nihil; + Enum.TryParse(item.Key, out tName); + switch (tName) + { + case taskType.setArt: + case taskType.setComm: + lgInfo($"Richiesta scrittura {tName}"); + // salvo in memoria il valore richiesto... + if (memMap != null && memMap.mMapWrite != null) + { + if (memMap.mMapWrite.ContainsKey(item.Key)) + { + dataConf currMem = memMap.mMapWrite[item.Key]; + memAddr = currMem.memAddr; + taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte"; + // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà + memMap.mMapWrite[item.Key].value = newVal; + } + else + { + taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})"; + } + } + else + { + taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})"; + } + upsertKey(item.Key, item.Value); + break; + + case taskType.nihil: + case taskType.fixStopSetup: + case taskType.forceResetPzCount: + case taskType.setProg: + case taskType.forceSetPzCount: + case taskType.sendWatchDogMes2Plc: + taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC"; + lgInfo($"Chiamata senza processing: taskOk: {taskOk} | taskVal: {taskVal}"); + break; + + case taskType.setArtNum: + lgInfo($"Richiesta scrittura CodART numerico"); + // in primis faccio una chiamata per tutta la tab SE fosse vuoto il dict + // di traduzione + if (DictNumArt == null || DictNumArt.Count == 0) + { + getNumArt(""); + lgInfo($"Recuperato DictNumArt, trovati {DictNumArt.Count} rec"); + } + // chiamo server x avere decodifica valore INT + newVal = getNumArt(item.Value); + // se c'è gestione semplificata num articolo --> usa trim dei soli + // caratteri alfabetici lasciando numeri.. + if (numArtCharTrim) + { + newVal = baseUtils.GetNumbers(item.Value); + } + // converto int... + int.TryParse(newVal, out newValInt); + // procedo come il resto cercando mappatura in memMap: recupero dati da memMap... + if (memMap != null && memMap.mMapWrite != null) + { + if (memMap.mMapWrite.ContainsKey(item.Key)) + { + dataConf currMem = memMap.mMapWrite[item.Key]; + memAddr = currMem.memAddr; + taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte"; + // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà + memMap.mMapWrite[item.Key].value = newVal; + } + else + { + taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})"; + } + } + else + { + taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})"; + } + + // invio a controller... + taskOk = setNumArt(newValInt); + //se ho successo rileggo ed eventualmente sistemo valore + if (taskOk) + { + //var rVal = getValByParam("SET_NUM_ART"); + var rVal = getValByMemAddr(memAddr); + if (rVal == newVal) + { + lgInfo("All OK"); + // invio aggiornamento x reset richiesta... test! + sendOptVal(item.Key, newVal); + } + else + { + lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}"); + } + } + else + { + lgError("Errore in scrittura SetNumArt"); + } + // salvo in currProd.. + upsertKey(item.Key, item.Value); + break; + + case taskType.setCommNum: + lgInfo($"Richiesta scrittura cod COMMESSA numerica"); + // chiamo server x avere decodifica valore INT + newVal = getNumComm(item.Value); + // converto int... + int.TryParse(newVal, out newValInt); + //riscrivo senza eventuali zeri... + newVal = newValInt > 0 ? $"{newValInt}" : newVal; + lgTrace($"Conv.Int numComm | newVal: {newVal} | newValInt: {newValInt}"); + // procedo come il resto cercando mappatura in memMap: recupero dati da memMap... + if (memMap != null && memMap.mMapWrite != null) + { + if (memMap.mMapWrite.ContainsKey(item.Key)) + { + dataConf currMem = memMap.mMapWrite[item.Key]; + memAddr = currMem.memAddr; + taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte"; + // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà + memMap.mMapWrite[item.Key].value = newVal; + } + else + { + taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})"; + } + } + else + { + taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})"; + } + + // invio a controller... + taskOk = setNumCom(newValInt); + //se ho successo rileggo ed eventualmente sistemo valore + if (taskOk) + { + //var rVal = getValByParam("SET_NUM_COM"); + var rVal = getValByMemAddr(memAddr); + if (rVal == newVal) + { + lgInfo("All OK"); + // invio aggiornamento x reset richiesta... test! + sendOptVal(item.Key, newVal); + } + else + { + lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}"); + } + } + else + { + lgError("Errore in scrittura SetNumCom"); + } + // salvo in currProd.. + upsertKey(item.Key, item.Value); + break; + + case taskType.setPzComm: + int pzReq = 0; + int.TryParse(item.Value, out pzReq); + // set pezzi richiesti inizio setup + taskOk = setPzComm(pzReq); + taskVal = taskOk ? "RESET: SETUP START" : "PZ RESET DISABLED | NO EXEC"; + lgInfo($"Chiamata startSetup: taskOk: {taskOk} | taskVal: {taskVal}"); + + // salvo in currProd.. + upsertKey(item.Key, item.Value); + break; + + case taskType.startSetup: + // reset contapezzi inizio setup + taskOk = resetContapezziPLC(); + taskVal = taskOk ? "RESET: SETUP START" : "PZ RESET DISABLED | NO EXEC"; + lgInfo($"Chiamata startSetup: taskOk: {taskOk} | taskVal: {taskVal}"); + break; + + case taskType.stopSetup: + // reset contapezzi fine setup SE ESPLICITAMENTE IMPOSTATO + if (cIobConf.optPar.Count > 0 && getOptPar("ENABLE_PZ_RESET_stopSetup") == "TRUE") + { + taskOk = resetContapezziPLC(); + } + taskVal = taskOk ? "RESET: SETUP END" : "PZ RESET DISABLED | NO EXEC"; + lgInfo($"Chiamata stopSetup: taskOk: {taskOk} | taskVal: {taskVal}"); + break; + + case taskType.setParameter: + lgInfo($"Chiamata setParameter | NO processing: taskOk: {taskOk} | taskVal: {taskVal}"); + taskVal = "setParameter | SKIPPED | NO EXEC"; + break; + + default: + lgInfo($"Chiamata default senza processing: taskOk: {taskOk} | taskVal: {taskVal}"); + taskVal = "SKIPPED | NO EXEC"; + break; + } + // aggiungo task! + taskDone.Add(item.Key, taskVal); + } + } + return taskDone; + } + + /// + /// Wrapper chiamata lettura/scrittura INTERO in area macro... + /// + /// + /// + /// + /// + public bool FanucMemMacroRW(bool bWrite, Int32 memIndex, ref short Value) + { + bool answ = false; + if (connectionOk) + { + if (FANUC_ref.Connected) + { + try + { + parentForm.commPlcActive = true; + // provo ad usare SEMPRE double... + short zeroVal = 0; + // in primis scrivo reset a zero... + answ = FANUC_ref.F_RW_Macro_Short(bWrite, memIndex, ref zeroVal); + // ora scrivo vero valore... + answ = FANUC_ref.F_RW_Macro_Short(bWrite, memIndex, ref Value); + } + catch (Exception exc) + { + lgError($"Eccezione in FanucMemMacroRW | Short{Environment.NewLine}{exc}"); + } + } + } + parentForm.commPlcActive = false; + return answ; + } + + /// + /// Wrapper chiamata lettura/scrittura DOUBLE in area macro... + /// + /// + /// + /// + /// + public bool FanucMemMacroRW(bool bWrite, Int32 memIndex, ref double Value) + { + bool answ = false; + if (connectionOk) + { + if (FANUC_ref.Connected) + { + try + { + parentForm.commPlcActive = true; + short zeroVal = 0; + // in primis scrivo reset a zero... + answ = FANUC_ref.F_RW_Macro_Short(bWrite, memIndex, ref zeroVal); + // ora scrivo vero valore... + answ = FANUC_ref.F_RW_Macro_Double(bWrite, memIndex, ref Value); + } + catch (Exception exc) + { + lgError($"Eccezione in FanucMemMacroRW | Double{Environment.NewLine}{exc}"); + } + } + } + parentForm.commPlcActive = false; + return answ; + } + + /// + /// wrapper chiamata lettura/scrittura SINGOLO BYTE... + /// + /// + /// + /// + /// + /// + public bool FanucMemRW(bool bWrite, FANUC.MemType MemType, Int32 memIndex, ref byte Value) + { + bool answ = false; + if (connectionOk) + { + 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 (connectionOk) + { + 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; + } + + /// + /// Recupero dati dinamici... + /// + public override Dictionary getDynData() + { + Dictionary outVal = new Dictionary(); + // processo SOLO SE connected... + if (connectionOk) + { + if (FANUC_ref.Connected) + { + stopwatch.Restart(); + EgwProxy.MultiCncLib.Focas1.ODBDY2_1 answ = FANUC_ref.getAllDynData(); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("PROC-DYN-DATA"), stopwatch.ElapsedTicks); + } + + try + { + string actf = answ.actf.ToString(); + string acts = answ.acts.ToString(); + //string numAlarm = memName.alarm.ToString(); + // preparo i singoli valori dell'array... + //outVal.Add("DYNDATA", string.Format("{0}#{1}#{2}", actf, acts, numAlarm)); + outVal.Add("DYNDATA", string.Format("FEED {0}#SPEED_RPM {1}", actf, acts)); + if (utils.CRB("SendFeedSpeed")) + { + outVal.Add("FEED", actf); + outVal.Add("SPEED_RPM", acts); + //outVal.Add("NUM_ALARM", numAlarm); + } + if (utils.CRB("SendAxPos")) + { + // salvo le posizioni... + EgwProxy.MultiCncLib.Focas1.FAXIS posAx = answ.pos; + int[] currPosAbs = posAx.absolute; + int i = 0; + foreach (var item in currPosAbs) + { + 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(); + // processo SOLO SE connected... + if (connectionOk) + { + if (FANUC_ref.Connected) + { + if (utils.CRB("enableMode") && MemBlockG != null && MemBlockG.Length > 0) + { + outVal.Add("FEED_OVER", MemBlockG[30].ToString()); + outVal.Add("RAPID_OVER", MemBlockG[12].ToString()); + } + } + } + return outVal; + } + + /// + /// 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(); + EgwProxy.MultiCncLib.Focas1.ODBSYS answ = FANUC_ref.getSysInfo(); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.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 = memName.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 ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob)) + { + // procedo SOLO SE ho connessione... + if (connectionOk) + { + try + { + // controllo di AVERE parametri opzionali x conteggi vari + if (cIobConf.optPar.Count > 0) + { + // contapezzi ATTUALE + if (!string.IsNullOrEmpty(getOptPar("PZCOUNT_MODE"))) + { + // verifico quale modalità sia richiesta: STD (6711) oppure BIT + // (Custom, con indicazione area) + string memAddr = getOptPar("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(cIobConf.codIOB, string.Format("R{0}-PAR", 4), stopwatch.ElapsedTicks); + } + // salvo ultimo conteggio rilevato + int newVal = -1; + Int32.TryParse(outputVal.ToString(), out newVal); + contapezziPLC = newVal > -1 ? newVal : contapezziPLC; + } + // 2022.05.23 gestione MACRO da testare (Jetco) + else if (memAddr.StartsWith("MACRO.")) + { + lgTrace($"Decodifica memoria MACRO | memAddr: {memAddr}"); + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + // processo parametro + stopwatch.Restart(); + double macroVal = 0; + FANUC_ref.F_Read_macro(cntAddr, ref macroVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("R{0}-MACRO", 5), stopwatch.ElapsedTicks); + } + // salvo ultimo conteggio rilevato + int newVal = -1; + Int32.TryParse($"{macroVal}", out newVal); + contapezziPLC = newVal > -1 ? newVal : contapezziPLC; + } + // altrimenti se legge da area memoria specifica leggo da li... + // formato tipo STD.D.1604.DW + else + { + memAddressFanuc areaCounter = new memAddressFanuc(memAddr); + if (isVerboseLog) + { + lgInfo("processContapezzi [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 (isVerboseLog) + { + lgInfo("[1] valDW contapezzi: {0}", valDW); + } + + outputVal = valDW; + if (isVerboseLog) + { + lgInfo("[2] outputVal contapezzi: {0}", outputVal); + } + + break; + + default: + break; + } + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("R-{0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType), stopwatch.ElapsedTicks); + } + // salvo... + int newVal = -1; + Int32.TryParse(outputVal.ToString(), out newVal); + contapezziPLC = newVal > -1 ? newVal : contapezziPLC; + //if (isVerboseLog) + //{ + lgInfo("[3] contapezziPLC contapezzi: {0}", contapezziPLC); + //} + } + stopwatch.Stop(); + } + } + } + catch (Exception exc) + { + lgError(exc, "Errore in contapezzi FANUC 02"); + connectionOk = false; + } + } + else + { + lgError("Errore: manca connessione in contapezzi FANUC"); + } + } + } + + /// + /// Esegue processing MODE (e nel contempo recupera altri dati dell'area G) + /// + public override void processMode() + { + // processo SOLO SE connected... + if (connectionOk) + { + if (FANUC_ref.Connected) + { + if (utils.CRB("enableMode") && MemBlockG != null && MemBlockG.Length > 0) + { + 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(cIobConf.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(); + } + } + } + } + } + + /// + /// Recupero altri counters se ci sono + /// + public override void processOtherCounters() + { + try + { + // controllo di AVERE parametri opzionali x conteggi vari + if (cIobConf.optPar.Count > 0) + { + // gestione con ricerca in memoria Write / optPar... + if (string.IsNullOrEmpty(memAddrPzReq)) + { + lgTrace("PzReq disabilitato | NO memConf.Write | NO optPar"); + } + else + { + sendOptVal(memNamePzReq, getValByMemAddr(memAddrPzReq)); + } + if (string.IsNullOrEmpty(memAddrArt)) + { + lgTrace("Articolo disabilitato | NO memConf.Write | NO optPar"); + } + else + { + sendOptVal(memNameArt, getValByMemAddr(memAddrArt)); + } + if (string.IsNullOrEmpty(memAddrCom)) + { + lgTrace("Commessa disabilitata | NO memConf.Write | NO optPar"); + } + else + { + sendOptVal(memNameCom, getValByMemAddr(memAddrCom)); + } + if (string.IsNullOrEmpty(memAddrPzCnt)) + { + lgTrace("PzCount disabilitato | NO memConf.Write | NO optPar"); + } + else + { + sendOptVal(memNamePzCnt, getValByMemAddr(memAddrPzCnt)); + } + if (string.IsNullOrEmpty(memAddrPzCntFree)) + { + lgTrace("FreeCounter disabilitato | NO memConf.Write"); + } + else + { + sendOptVal(memNamePzCntFree, getValByMemAddr(memAddrPzCntFree)); + } + if (string.IsNullOrEmpty(memAddrPzCntTot)) + { + lgTrace("PzCntTOT disabilitato | NO memConf.Write | NO optPar"); + } + else + { + sendOptVal(memNamePzCntTot, getValByMemAddr(memAddrPzCntTot)); + } + if (string.IsNullOrEmpty(memAddrCaden)) + { + lgTrace("Cadenza disabilitata | NO memConf.Write | NO optPar"); + } + else + { + sendOptVal(memNameCaden, getValByMemAddr(memAddrCaden)); + } + } + } + catch (Exception exc) + { + lgError(exc, "Eccezione in processOtherCounters"); + } + } + + /// + /// Effettua lettura semafori principale Parametri da + /// aggiornare x display in form + /// + public override void readSemafori(ref newDisplayData currDispData) + { + DateTime adesso = DateTime.Now; + base.readSemafori(ref currDispData); + // verifico non sia in veto invio iniziale... + if (queueInEnabCurr) + { + try + { + if (verboseLog) + { + lgInfo("inizio read semafori"); + } + + currDispData.semIn = Semaforo.SV; + // ogni lettura inizia da SUA area inizio controllo area R: se ha dati (> 0 + // byte) --> leggo! + if (MemBlockR.Length > 0) + { + stopwatch.Restart(); + FanucMemRW(R, FANUC.MemType.R, areaR.startIdx, ref MemBlockR); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.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, areaX.startIdx, ref MemBlockX); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.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, areaY.startIdx, ref MemBlockY); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.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(); + reportRawInput(ref currDispData); + } + catch (Exception exc) + { + lgError(string.Format("Eccezione in readSemafori:{0}{1}", Environment.NewLine, exc)); + connectionOk = false; + currDispData.semIn = Semaforo.SR; + } + } + else + { + lgDebug($"[VETO readSemafori] | veto attivo alle {adesso:yyyy.MM.dd HH:mm:ss}"); + checkVetoQueueIn(); + } + } + + /// + /// Effettua reset del contapezzi + /// + /// + public override bool resetContapezziPLC() + { + bool answ = false; + // ...SE abilitato da conf IOB + if (cIobConf.optPar.Count > 0 && getOptPar("ENABLE_PZ_RESET") == "TRUE") + { + // scrivo valore 0 x il contapezzi + try + { + // contapezzi ATTUALE + if (!string.IsNullOrEmpty(getOptPar("PZCOUNT_MODE"))) + { + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con + // indicazione area) + string memAddr = getOptPar("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; + // var contapezzi a zero.... + object newVal = new object(); + newVal = 0; + // 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 RESET contapezzi (lavorati) + stopwatch.Restart(); + FANUC_ref.F_RW_Param_Integer(true, cntAddr, 3, ref newVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("W{0}-PAR", 4), stopwatch.ElapsedTicks); + } + } + else if (memAddr.StartsWith("MACRO.")) + { + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + if (cntAddr == 0) + { + cntAddr = 9999; + } + // processo SET contapezzi (lavorati) + stopwatch.Restart(); + double vTransf = (double)0; + answ = FanucMemMacroRW(true, cntAddr, ref vTransf); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, "MACRO-SHORT", stopwatch.ElapsedTicks); + } + } + // altrimenti se legge da area memoria specifica leggo da li... formto tipo STD.D.1604.DW + else + { + memAddressFanuc areaCounter = new memAddressFanuc(memAddr); + + if (isVerboseLog) + { + lgInfo("resetContapezziPLC [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(true, areaCounter.mType, areaCounter.mPos, ref valB); + newVal = valB; + break; + + case "D": + ushort valW = 0; + FANUC_ref.F_RW_Word(true, areaCounter.mType, areaCounter.mPos, ref valW); + newVal = valW; + break; + + case "DW": + uint valDW = 0; + FANUC_ref.F_RW_DWord(true, areaCounter.mType, areaCounter.mPos, ref valDW); + break; + + default: + break; + } + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("W-{0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType), stopwatch.ElapsedTicks); + } + } + stopwatch.Stop(); + } + } + catch (Exception exc) + { + lgError(exc, "Errore in RESET contapezzi FANUC"); + connectionOk = false; + } + answ = true; + } + return answ; + } + + /// + /// 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); + } + } + + /// + /// Effettua impostazione del valore numerico ARTICOLO (specifico FANUC) + /// + /// + public bool setNumArt(int valReq) + { + bool answ = false; + string memAddr = memAddrArt; + lgTrace($"INIT setNumArt | memAddr: {memAddr}"); + if (cIobConf.optPar.Count > 0 && !string.IsNullOrEmpty(memAddr)) + { + // scrivo valore richiesto in area configurata + try + { + // var di appoggio + int cntAddr = 0; + // verifico se si tratta di lettura MACRO... formato tipo MACRO.6711 + if (memAddr.StartsWith("MACRO.")) + { + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + if (cntAddr == 0) + { + cntAddr = 9999; + } + lgTrace($"MACRO | ART Write 01 | memAddr: {memAddr} | idx: {cntAddr}"); + // processo SET contapezzi (lavorati) + stopwatch.Restart(); + // comincio scrivendo reset a zero x cominciare... + + double vTransf = (double)valReq; + answ = FanucMemMacroRW(true, cntAddr, ref vTransf); + lgTrace($"MACRO | ART Write 02 | memAddr: {memAddr} | valReq: {valReq} | vTransf: {vTransf}"); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, "MACRO-SHORT", stopwatch.ElapsedTicks); + } + } + stopwatch.Stop(); + } + catch (Exception exc) + { + lgError(exc, "Errore in setNumArt FANUC"); + connectionOk = false; + } + } + return answ; + } + + /// + /// Effettua impostazione del valore numerico COMMESSA (specifico FANUC) + /// + /// + public bool setNumCom(int valReq) + { + bool answ = false; + // verifico quale modalità sia richiesta + string memAddr = memAddrCom; + lgTrace($"INIT setNumCom | memAddr: {memAddr}"); + if (cIobConf.optPar.Count > 0 && !string.IsNullOrEmpty(memAddr)) + { + lgTrace($"setNumCom | memAddr: {memAddr} | valReq: {valReq}"); + // scrivo valore richiesto in area configurata + try + { + // var di appoggio + int cntAddr = 0; + // verifico se si tratta di lettura MACRO... formato tipo MACRO.6711 + if (memAddr.StartsWith("MACRO.")) + { + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + if (cntAddr == 0) + { + cntAddr = 9999; + } + lgTrace($"MACRO | Com Write 01 | memAddr: {memAddr} | idx: {cntAddr}"); + // processo SET contapezzi (lavorati) + stopwatch.Restart(); + double vTransf = (double)valReq; + answ = FanucMemMacroRW(true, cntAddr, ref vTransf); + lgTrace($"MACRO | Com Write 02 | memAddr: {memAddr} | valReq: {valReq} | vTransf: {vTransf}"); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, "MACRO-SHORT", stopwatch.ElapsedTicks); + } + } + stopwatch.Stop(); + } + catch (Exception exc) + { + lgError(exc, "Errore in setNumCom FANUC"); + connectionOk = false; + } + answ = true; + } + return answ; + } + + /// + /// Effettua impostazione del conteggio pezzi richiesti + /// + /// + public override bool setPzComm(int pzReq) + { + bool answ = false; + // ...SE abilitato da conf IOB + if (cIobConf.optPar.Count > 0 && getOptPar("ENABLE_PZ_REQ") == "TRUE") + { + // scrivo valore 0 x il contapezzi + try + { + string memAddr = memAddrPzReq; + lgTrace($"INIT setPzComm | memAddr: {memAddr}"); + // contapezzi ATTUALE + if (!string.IsNullOrEmpty(memAddr)) + { + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con + // indicazione area) + if (memAddr.StartsWith("STD")) + { + // inizio verifica area memoria/parametro levando prima parte codice + memAddr = memAddr.Replace("STD.", ""); + } + // var di appoggio + int cntAddr = 0; + // var contapezzi a zero.... + object newVal = new object(); + newVal = pzReq; + // 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 SET contapezzi (lavorati) + stopwatch.Restart(); + FANUC_ref.F_RW_Param_Integer(true, cntAddr, 3, ref newVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("W{0}-PAR", 4), stopwatch.ElapsedTicks); + } + } + else if (memAddr.StartsWith("MACRO.")) + { + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + if (cntAddr == 0) + { + cntAddr = 9999; + } + lgTrace($"MACRO | Pz Write 01 | memAddr: {memAddr} | idx: {cntAddr}"); + // processo SET contapezzi (lavorati) + stopwatch.Restart(); + // se > 2^16 scrivo con INT, sennò con double... + short valTrShr = 0; + double valTrDbl = 0; + if (pzReq < Math.Pow(2, 16)) + { + valTrShr = (short)pzReq; + answ = FanucMemMacroRW(true, cntAddr, ref valTrShr); + //answ = FANUC_ref.F_RW_Macro_Short(true, cntAddr, ref valTrShr); + lgTrace($"MACRO | Com Write 02 SHORT | memAddr: {memAddr} | pzReq: {pzReq} | valTrShr: {valTrShr}"); + } + // sennò double! + else + { + valTrDbl = (double)pzReq; + answ = FanucMemMacroRW(true, cntAddr, ref valTrDbl); + //answ = FANUC_ref.F_RW_Macro_Double(true, cntAddr, ref valTrDbl); + lgTrace($"MACRO | Com Write 02 DOUBLE | memAddr: {memAddr} | pzReq: {pzReq} | valTrDbl: {valTrDbl}"); + } + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, "MACRO-SHORT", stopwatch.ElapsedTicks); + } + } + // altrimenti se legge da area memoria specifica leggo da li... formto tipo STD.D.1604.DW + else + { + memAddressFanuc areaCounter = new memAddressFanuc(memAddr); + + if (isVerboseLog) + { + lgInfo("setPzComm [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 = (byte)pzReq; + FANUC_ref.F_RW_Byte(true, areaCounter.mType, areaCounter.mPos, ref valB); + newVal = valB; + break; + + case "D": + ushort valW = (ushort)pzReq; + FANUC_ref.F_RW_Word(true, areaCounter.mType, areaCounter.mPos, ref valW); + newVal = valW; + break; + + case "DW": + uint valDW = (uint)pzReq; + FANUC_ref.F_RW_DWord(true, areaCounter.mType, areaCounter.mPos, ref valDW); + break; + + default: + break; + } + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("W-{0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType), stopwatch.ElapsedTicks); + } + } + stopwatch.Stop(); + } + } + catch (Exception exc) + { + lgError($"Errore in SET PzReq Commessa FANUC{Environment.NewLine}{exc}"); + connectionOk = false; + } + answ = true; + } + return answ; + } + + /// + /// 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("FANUC: ConnKO - tryConnect"); + } + // in primis salvo data ping... + lastPING = DateTime.Now; + // ora PING!!! + Ping pingSender = new Ping(); + IPAddress address = IPAddress.Loopback; + IPAddress.TryParse(cIobConf.cncIpAddr, out address); + PingReply reply; + try + { + // se != null --> uso address... + if (address != null) + { + reply = pingSender.Send(address, 100); + } + else + { + reply = pingSender.Send(cIobConf.cncIpAddr, 100); + } + } + catch + { + reply = pingSender.Send(IPAddress.Loopback, 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) + { + checkVetoQueueIn(); + dtAvvioAdp = DateTime.Now; + if (adpRunning) + { + 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}", cIobConf.cncPingAddr, reply.Status)); + } + } + } + } + // se non è ancora connesso faccio procesisng memoria caso disconnesso... + if (!connectionOk) + { + // processo semafori ed invio... + processMemoryDiscon(); + } + } + + /// + /// 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..."); + } + queueInEnabCurr = false; + } + + #endregion Public Methods + + #region Internal Fields + + /// + /// LookUpTable di decodifica da CNC a segnali tipo bitmap MAPO + /// + internal Dictionary signLUT = new Dictionary(); + + #endregion Internal Fields + + #region Protected Fields + + /// + /// 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; + + /// + /// Oggetto MAIN x connessione FANUC + /// + protected FANUC FANUC_ref; + + /// + /// 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]; + + #endregion Protected Fields + + #region Protected Methods + + /// + /// decodifica il modo dai valori del byte G43 + /// + /// + /// + protected static 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; + } + + /// + /// Metodo da overridare x scrivere DAVVERO i parametri sul PLC + /// + /// + protected override void plcWriteParams(ref List updatedPar) + { + lgTrace($"plcWriteParams: richiesta per {updatedPar.Count} params"); + foreach (var item in updatedPar) + { + lgInfo($"ITEM | {item.uid} | {item.value}"); + // salvo i valori ricevuti + upsertKey(item.uid, item.reqValue); + // se i valori richiesto e fatto corrispondono... resetto! + if (item.reqValue.Trim() == item.value.Trim()) + { + // resetto richiesta! + item.reqValue = ""; + } + } + } + + #endregion Protected Methods + + #region Private Properties + + private string memAddrArt + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("setArtNum")) + { + memAddr = memMap.mMapWrite["setArtNum"].memAddr; + } + // se vuoto provo altra alternativa... + if (string.IsNullOrEmpty(memAddr) && memMap.mMapWrite.ContainsKey("setArt")) + { + memAddr = memMap.mMapWrite["setArt"].memAddr; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memAddr)) + { + memAddr = getOptPar("SET_NUM_ART"); + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memAddrCaden + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("Cadenza")) + { + memAddr = memMap.mMapWrite["Cadenza"].memAddr; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memAddr)) + { + memAddr = getOptPar("PZCAD_MODE"); + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memAddrCom + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("setCommNum")) + { + memAddr = memMap.mMapWrite["setCommNum"].memAddr; + } + // se vuoto provo altra alternativa... + if (string.IsNullOrEmpty(memAddr) && memMap.mMapWrite.ContainsKey("setComm")) + { + memAddr = memMap.mMapWrite["setComm"].memAddr; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memAddr)) + { + memAddr = getOptPar("SET_NUM_COM"); + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memAddrPzCnt + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("ContatoreParziale")) + { + memAddr = memMap.mMapWrite["ContatoreParziale"].memAddr; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memAddr)) + { + memAddr = getOptPar("PZCOUNT_MODE"); + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memAddrPzCntFree + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("PzCntFree")) + { + memAddr = memMap.mMapWrite["PzCntFree"].memAddr; + } + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memAddrPzCntTot + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("ContatoreAssoluto")) + { + memAddr = memMap.mMapWrite["ContatoreAssoluto"].memAddr; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memAddr)) + { + memAddr = getOptPar("PZGTOT_MODE"); + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memAddrPzReq + { + get + { + string memAddr = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("setPzComm")) + { + memAddr = memMap.mMapWrite["setPzComm"].memAddr; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memAddr)) + { + memAddr = getOptPar("PZREQ_MODE"); + } + // bonifica variabile da definizione STD iniziale... + if (memAddr.StartsWith("STD")) + { + memAddr = memAddr.Replace("STD.", ""); + } + return memAddr; + } + } + + private string memNameArt + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("setArtNum")) + { + memName = "setArtNum"; + } + // se vuoto provo altra alternativa... + if (string.IsNullOrEmpty(memName) && memMap.mMapWrite.ContainsKey("setArt")) + { + memName = "setArt"; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memName)) + { + memName = "PZ_COUNT"; + } + return memName; + } + } + + private string memNameCaden + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("Cadenza")) + { + memName = "Cadenza"; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memName)) + { + memName = "CICLE_CAD"; + } + return memName; + } + } + + private string memNameCom + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("setCommNum")) + { + memName = "setCommNum"; + } + // se vuoto provo altra alternativa... + if (string.IsNullOrEmpty(memName) && memMap.mMapWrite.ContainsKey("setComm")) + { + memName = "setComm"; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memName)) + { + memName = "SET_NUM_COM"; + } + return memName; + } + } + + private string memNamePzCnt + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("PzCntFree")) + { + memName = "PzCntFree"; + } + } + return memName; + } + } + + private string memNamePzCntFree + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("ContatoreParziale")) + { + memName = "ContatoreParziale"; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memName)) + { + memName = "PZ_COUNT"; + } + return memName; + } + } + + private string memNamePzCntTot + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("ContatoreAssoluto")) + { + memName = "ContatoreAssoluto"; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memName)) + { + memName = "PZ_GTOT"; + } + return memName; + } + } + + private string memNamePzReq + { + get + { + string memName = ""; + if (memMap != null && memMap.mMapWrite != null) + { + //cerco in primis modalità NUM altrimenti standard... + if (memMap.mMapWrite.ContainsKey("setPzComm")) + { + memName = "setPzComm"; + } + } + // se non trovato... leggo da OPT_PAR + if (string.IsNullOrEmpty(memName)) + { + memName = "PZ_REQ"; + } + return memName; + } + } + + #endregion Private Properties + + #region Private Methods + + /// + /// Effettua decodifica aree memoria alla bitmap usata x MAPO + /// + private void decodeToBitmap() + { + // init a zero... + B_input = 0; + if (connectionOk) + { + // 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 = $"BIT{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")) + { + // procedo SOLO SE è enabled IOB + if (IobOnline) + { + try + { + currODL = utils.callUrl(urlGetCurrODL); + // solo SE HO un ODL... + if (string.IsNullOrEmpty(currODL) || currODL == "0") + { + if (periodicLog) + { + lgInfo(string.Format("Fanuc | Lettura ODL andata a vuoto: currODL: {0}", currODL)); + } + } + else + { + // se variato o scaduto timeout log... + if (periodicLog || ($"{currIdxODL}" != currODL)) + { + lgInfo(string.Format("Fanuc | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL)); + } + // 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; + } + } + } + else + { + // imposto currODL a vuoto! + currODL = ""; + if (periodicLog) + { + lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto"); + } + } + if (!string.IsNullOrEmpty(currODL) && currODL != "0") + { + // controllo se è passato intervallo minimo tra 2 + // controlli/elaborazioni x distanziare invio e ridurre letture + if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) + { + // se sono differenti MOSTRO... + if (contapezziPLC != contapezziIOB) + { + // registro contapezzi + lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB {contapezziIOB}"); + } + + if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob)) + { + // verifico se variato contapezzi... + if (contapezziPLC > contapezziIOB) + { + // salvo nuovo contapezzi (incremento di 1...) + + // richiesta refresh conteggio + contapezziIOB++; + needRefreshPzCount = true; + // salvo in semaforo! + B_input += 1 << 2; + // registro contapezzi + lgInfo($"contapezziPLC FANUC: {contapezziPLC} | contapezziIOB {contapezziIOB}"); + } + // invio a server contapezzi (aggiornato) + string retVal = utils.callUrl(urlSetPzCount + contapezziIOB.ToString()); + // verifica se tutto OK + if (retVal != contapezziIOB.ToString()) + { + // errore salvataggio contapezzi + lgInfo($"Errore salvataggio Contapezzi FANUC: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}"); + // rileggo il counter pezzi da server + pzCntReload(true); + } + // resetto timer... + lastPzCountSend = DateTime.Now; + } + } + } + else + { + if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay)) + { + lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC FANUC: {contapezziPLC} | contapezziIOB {contapezziIOB}"); + // resetto timer... + lastPzCountSend = DateTime.Now; + } + } + } + else // area "normale" byte.bit + { + // di norma è segnale normale => 1, altrimenti inverse => 0... + invSignal = false; + // cerco se sia inverse (primo char "!") --> registro e elimino char... + invSignal = bVal.StartsWith("!"); + // se è da tracciare... + if (mem2trace.Contains($"|{bKey}|")) + { + if (invSignal) + { + lgTrace($"Segnale invertito | bVal: {bVal}"); + } + } + // 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; + } + } + + // se è da tracciare... + if (mem2trace.Contains($"|{bKey}|")) + { + var bMapAct = Convert.ToString(byte2check, 2).PadLeft(8, '0'); + var bMapReq = Convert.ToString((1 << bitNum), 2).PadLeft(8, '0'); + lgTrace($"Valore | bKey: {bKey} | bVal: {bVal} | byte: {bMapAct} | tgt: {bMapReq} | B_input: {B_input}"); + } + } + } + } + } + // log opzionale! + if (verboseLog) + { + lgInfo(string.Format("Trasformazione B_input: {0}", B_input)); + } + } + + /// + /// 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(cIobConf.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, cIobConf.codIOB, tipoMem, adesso); + nomeFileW = string.Format(@"{0}\SAMPLES\{1}_{2}_W_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, cIobConf.codIOB, tipoMem, adesso); + nomeFileDW = string.Format(@"{0}\SAMPLES\{1}_{2}_DW_{3:yyyyMMdd_HHmmss}.dat", utils.dataDatDir, cIobConf.codIOB, tipoMem, adesso); + } + else + { + // salvo in file i dati letti come BYTE + nomeFileB = string.Format(@"{0}\{1}_{2}_Byte.dat", utils.dataDatDir, cIobConf.codIOB, tipoMem); + nomeFileW = string.Format(@"{0}\{1}_{2}_W.dat", utils.dataDatDir, cIobConf.codIOB, tipoMem); + nomeFileDW = string.Format(@"{0}\{1}_{2}_DW.dat", utils.dataDatDir, cIobConf.codIOB, tipoMem); + } + + // salvo in file i dati letti come BYTE + mappaValori = new Dictionary(); + for (int i = 0; i < MemBlockCurr.Length; i++) + { + // versione pre dotNet8 (che usa "b" come stringa formato std) + var bitMap = Convert.ToString(MemBlockCurr[i], 2).PadLeft(8, '0'); + mappaValori.Add($"[{i:0000}]", $"{bitMap}={MemBlockCurr[i]}"); + //mappaValori.Add($"[{i:0000}]", $"{MemBlockCurr[i]:b}={MemBlockCurr[i]}"); + } + 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: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: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(cIobConf.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, cIobConf.codIOB, "PAR", adesso); + } + else + { + nomeFile = string.Format(@"{0}\{1}_{2}.dat", utils.dataDatDir, cIobConf.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); + } + + /// + /// Recupera il valore INT dal nome del parametro per successivo processing + /// + /// + /// + private string getValByMemAddr(string memAddr) + { + lgTrace($"inizio getValByMemAddr | memAddr: {memAddr}"); + string answ = ""; + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) + 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); + // processo parametro + stopwatch.Restart(); + FANUC_ref.F_RW_Param_Integer(false, cntAddr, 3, ref outputVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("R{0}-PAR", 4), stopwatch.ElapsedTicks); + } + // salvo valore + answ = outputVal.ToString(); + } + // 2022.05.23 gestione MACRO da testare (Jetco) + else if (memAddr.StartsWith("MACRO.")) + { + double macroVal = 0; + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + lgTrace($"MACRO | Read 01 | memAddr: {memAddr} | idx: {cntAddr} | macroVal: {macroVal}"); + // processo parametro + stopwatch.Restart(); + FANUC_ref.F_Read_macro(cntAddr, ref macroVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, "R-MACRO", stopwatch.ElapsedTicks); + } + // salvo valore + answ = macroVal.ToString(); + lgTrace($"MACRO | Read 02 | memAddr: {memAddr} | idx: {cntAddr} | macroVal: {macroVal}"); + } + // altrimenti se legge da area memoria specifica leggo da li... formto tipo STD.D.1604.DW + else + { + memAddressFanuc areaCounter = new memAddressFanuc(memAddr); + + if (isVerboseLog) + { + lgInfo("getValByParam [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 (isVerboseLog) + { + lgInfo("[1] valDW PAR: {0}", valDW); + } + + outputVal = valDW; + if (isVerboseLog) + { + lgInfo("[2] outputVal PAR: {0}", outputVal); + } + + break; + + default: + break; + } + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("R-{0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType), stopwatch.ElapsedTicks); + } + + // salvo... + answ = outputVal.ToString(); + if (isVerboseLog) + { + lgInfo($"[3] Mem letta: {memAddr} | {answ}"); + } + } + stopwatch.Stop(); + return answ; + } + + /// + /// Recupera il valore INT dal nome del parametro per successivo processing + /// + /// + /// + private string getValByParam(string varName) + { + string memAddr = getOptPar(varName); + string answ = getValByMemAddr(memAddr); + if (isVerboseLog) + { + lgInfo($"[3] PAR letto: {varName} | {answ}"); + } + return answ; + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/Properties/Iob/GenericNext.cs b/IOB-WIN-FANUC/Iob/GenericNext.cs similarity index 100% rename from IOB-WIN-FANUC/Properties/Iob/GenericNext.cs rename to IOB-WIN-FANUC/Iob/GenericNext.cs diff --git a/IOB-WIN-FANUC/Properties/logs/.placeholder.txt b/IOB-WIN-FANUC/logs/.placeholder.txt similarity index 100% rename from IOB-WIN-FANUC/Properties/logs/.placeholder.txt rename to IOB-WIN-FANUC/logs/.placeholder.txt diff --git a/IOB-WIN-FANUC/memAreaFanuc.cs b/IOB-WIN-FANUC/memAreaFanuc.cs new file mode 100644 index 00000000..62b1dadc --- /dev/null +++ b/IOB-WIN-FANUC/memAreaFanuc.cs @@ -0,0 +1,138 @@ +using EgwProxy.MultiCncLib.CNC; + +namespace IOB_WIN_FANUC +{ + /// + /// Definizione indirizzo memoria FANUC + /// + public class memAddressFanuc + { + #region Public Fields + + /// + /// Posizione memoria + /// + public int mPos; + + /// + /// Tipo memoria + /// + public FANUC.MemType mType; + + /// + /// Tipo valore + /// + public string vType; + + #endregion Public Fields + + #region Public Constructors + + /// + /// Inizializza da un formato stringa + /// + /// Stringa TipoMem.Indice.DimMem (es D.1604.DW) + public memAddressFanuc(string strFormat) + { + if (!string.IsNullOrEmpty(strFormat)) + { + string[] memComp = strFormat.Split('.'); + switch (memComp[0]) + { + case "A": + mType = FANUC.MemType.A; + break; + + case "C": + mType = FANUC.MemType.C; + break; + + case "CM": + mType = FANUC.MemType.CM; + break; + + case "D": + mType = FANUC.MemType.D; + break; + + case "E": + mType = FANUC.MemType.E; + break; + + case "F": + mType = FANUC.MemType.F; + break; + + case "G": + mType = FANUC.MemType.G; + break; + + case "K": + mType = FANUC.MemType.K; + break; + + case "M": + mType = FANUC.MemType.M; + break; + + case "N": + mType = FANUC.MemType.N; + break; + + case "R": + mType = FANUC.MemType.R; + break; + + case "T": + mType = FANUC.MemType.T; + break; + + case "X": + mType = FANUC.MemType.X; + break; + + case "Y": + mType = FANUC.MemType.Y; + break; + + case "Z": + mType = FANUC.MemType.Z; + break; + + default: + break; + } + int.TryParse(memComp[1], out mPos); + vType = memComp[2]; + } + } + + #endregion Public Constructors + } + + /// + /// Definizione area memoria FANUC + /// + public class memAreaFanuc + { + #region Public Fields + + /// + /// Nome area memoria + /// + public string areaName; + + /// + /// Dimensione array memoria + /// + public int arraySize; + + /// + /// Indice inizio array + /// + public int startIdx; + + #endregion Public Fields + } + +} \ No newline at end of file diff --git a/IOB-WIN-FANUC/packages.config b/IOB-WIN-FANUC/packages.config index bc12d868..889a2004 100644 --- a/IOB-WIN-FANUC/packages.config +++ b/IOB-WIN-FANUC/packages.config @@ -1,20 +1,23 @@  + - - + + + - + + - - - - + + + + - - + + \ No newline at end of file diff --git a/IOB-WIN-NEXT/AdapterFormNext.cs b/IOB-WIN-NEXT/AdapterFormNext.cs index a94a4fbd..497866c6 100644 --- a/IOB-WIN-NEXT/AdapterFormNext.cs +++ b/IOB-WIN-NEXT/AdapterFormNext.cs @@ -59,10 +59,12 @@ namespace IOB_WIN_NEXT btnStart.Enabled = true; break; +#if false case tipoAdapter.FANUC: iobObj = new Iob.Fanuc(this, IOBConf); btnStart.Enabled = true; - break; + break; +#endif case tipoAdapter.FTP: iobObj = new IobNet.Ftp(this, IOBConf); diff --git a/IOB-WIN-NEXT/DATA/CONF/1032.ini b/IOB-WIN-NEXT/DATA/CONF/1032.ini deleted file mode 100644 index 32316035..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1032.ini +++ /dev/null @@ -1,67 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina transfer COSMAP per Donati -CNCTYPE=SIEMENS_COSMAP -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=COSMAP -MODEL=02 - -[CNC] -IP=192.168.51.140 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.51.79 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB6.DBB0 -ADDR_WRITE=DB6.DBB0 -SIZE_READ=224 -SIZE_WRITE=204 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB6.DBDW208 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; gestione custom timer -timerIntMs=30 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -; gestione scrittura string/char[]: true = string -WRITE_PRE=FALSE - -; conf parametri memoria READ/WRITE -PARAM_CONF=1032.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1032.json b/IOB-WIN-NEXT/DATA/CONF/1032.json deleted file mode 100644 index 0588bfec..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1032.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "mMapWrite": { - "setProg": { - "name": "setProg", - "description": "Programma", - "tipoMem": "String", - "memAddr": "DB6.DBB50", - "index": 50, - "size": 50 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB6.DBB0", - "index": 0, - "size": 50 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB6.DBB100", - "index": 100, - "size": 50 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB30.DBB212", - "tipoMem": "DInt", - "index": 212, - "size": 4 - } - }, - "mMapRead": { - "TempoLav": { - "name": "TempoLav", - "description": "TempoLav ASSOLUTO", - "memAddr": "DB6.DBB220", - "tipoMem": "Int", - "index": 220, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "CadenzaH": { - "name": "CadenzaH", - "description": "Pezzi Ora", - "memAddr": "DB6.DBB222", - "tipoMem": "Int", - "index": 222, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "Contatore01": { - "name": "Contatore01", - "description": "Contapezzi 01", - "memAddr": "DB6.DBB200", - "tipoMem": "DInt", - "index": 200, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContatoreParziale": { - "name": "ContatoreParziale", - "description": "Contapezzi MES DBB208", - "memAddr": "DB6.DBB208", - "tipoMem": "DInt", - "index": 208, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1033.ini b/IOB-WIN-NEXT/DATA/CONF/1033.ini deleted file mode 100644 index 095360f2..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1033.ini +++ /dev/null @@ -1,69 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina pulitrice RobotService x Donati -CNCTYPE=SIEMENS_ROBOTSERVICE -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=RobotService -MODEL=SMER12 - -[CNC] -IP=192.168.51.138 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.51.79 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB14.DBB0 -SIZE_READ=10 -SIZE_WRITE=517 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB15.DBDW2 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; gestione custom timer -timerIntMs=30 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -; gestione scrittura string/char[]: true = string / false = char[] -WRITE_PRE=TRUE -; gestione emergenza forzata (ignora valore letto, mette sempre ARMED) -EMERGENCY_BYPASS=true - -; conf parametri memoria READ/WRITE -PARAM_CONF=1033.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1033.json b/IOB-WIN-NEXT/DATA/CONF/1033.json deleted file mode 100644 index 681d6240..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1033.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "mMapWrite": { - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB14.DBB0", - "index": 0, - "size": 50 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB14.DBB256", - "index": 256, - "size": 50 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB14.DBB512", - "tipoMem": "DInt", - "index": 512, - "size": 4 - } - }, - "mMapRead": { - "Contatore01": { - "name": "PezziFineCiclo", - "description": "Mancanti programmati", - "memAddr": "DB15.DBB6", - "tipoMem": "DInt", - "index": 6, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContatoreParziale": { - "name": "ContaPezzi", - "description": "Contapezzi MES DBB2", - "memAddr": "DB15.DBB2", - "tipoMem": "DInt", - "index": 2, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1034.ini b/IOB-WIN-NEXT/DATA/CONF/1034.ini deleted file mode 100644 index 6a34255e..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1034.ini +++ /dev/null @@ -1,69 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina pulitrice RobotService x Donati -CNCTYPE=SIEMENS_ROBOTSERVICE -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=RobotService -MODEL=SCAT06 - -[CNC] -IP=192.168.51.134 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.51.79 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB14.DBB0 -SIZE_READ=10 -SIZE_WRITE=517 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB15.DBDW2 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; gestione custom timer -timerIntMs=30 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -; gestione scrittura string/char[]: true = string / false = char[] -WRITE_PRE=TRUE -; gestione emergenza forzata (ignora valore letto, mette sempre ARMED) -EMERGENCY_BYPASS=true - -; conf parametri memoria READ/WRITE -PARAM_CONF=1034.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1034.json b/IOB-WIN-NEXT/DATA/CONF/1034.json deleted file mode 100644 index 681d6240..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1034.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "mMapWrite": { - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB14.DBB0", - "index": 0, - "size": 50 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB14.DBB256", - "index": 256, - "size": 50 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB14.DBB512", - "tipoMem": "DInt", - "index": 512, - "size": 4 - } - }, - "mMapRead": { - "Contatore01": { - "name": "PezziFineCiclo", - "description": "Mancanti programmati", - "memAddr": "DB15.DBB6", - "tipoMem": "DInt", - "index": 6, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContatoreParziale": { - "name": "ContaPezzi", - "description": "Contapezzi MES DBB2", - "memAddr": "DB15.DBB2", - "tipoMem": "DInt", - "index": 2, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1035.ini b/IOB-WIN-NEXT/DATA/CONF/1035.ini deleted file mode 100644 index 086a7528..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1035.ini +++ /dev/null @@ -1,69 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina pulitrice RobotService x Donati -CNCTYPE=SIEMENS_ROBOTSERVICE -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=RobotService -MODEL=SCAT05 - -[CNC] -IP=192.168.51.135 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.51.79 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB14.DBB0 -SIZE_READ=10 -SIZE_WRITE=517 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB15.DBDW2 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; gestione custom timer -timerIntMs=30 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -; gestione scrittura string/char[]: true = string / false = char[] -WRITE_PRE=TRUE -; gestione emergenza forzata (ignora valore letto, mette sempre ARMED) -EMERGENCY_BYPASS=true - -; conf parametri memoria READ/WRITE -PARAM_CONF=1035.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/1035.json b/IOB-WIN-NEXT/DATA/CONF/1035.json deleted file mode 100644 index 681d6240..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/1035.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "mMapWrite": { - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB14.DBB0", - "index": 0, - "size": 50 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB14.DBB256", - "index": 256, - "size": 50 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB14.DBB512", - "tipoMem": "DInt", - "index": 512, - "size": 4 - } - }, - "mMapRead": { - "Contatore01": { - "name": "PezziFineCiclo", - "description": "Mancanti programmati", - "memAddr": "DB15.DBB6", - "tipoMem": "DInt", - "index": 6, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContatoreParziale": { - "name": "ContaPezzi", - "description": "Contapezzi MES DBB2", - "memAddr": "DB15.DBB2", - "tipoMem": "DInt", - "index": 2, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3010.ini b/IOB-WIN-NEXT/DATA/CONF/3010.ini deleted file mode 100644 index c5947b17..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/3010.ini +++ /dev/null @@ -1,70 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -CNCTYPE=SIEMENS_TORRI - -[MACHINE] -VENDOR=TORRI -MODEL=VUOMARD - -[CNC] -; Siemens Torri (Vuomard) -IP=192.168.0.51 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.1.7 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB700.DBB0 -ADDR_WRITE=DB701.DBB0 -SIZE_READ=52 -SIZE_WRITE=138 -;BIT0=CONN -BIT1=DB700.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB700.DBB3 -BIT4=DB700.DBB4 -BIT5=DB701.DBB4 ; bit ciclo in test == riscaldamento - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB700.DBW22 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 -DISABLE_SEND_WDST=TRUE -ENABLE_DYN_DATA=TRUE -ENABLE_ALARM_LEGACY=FALSE -ENABLE_PZ_RESET=TRUE -ENABLE_PZ_RESET_stopSetup=TRUE -; conf aree allarme -ALARM_CONF=3010_alarm.json - -[BRANCH] -NAME=develop \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3010_alarm.json b/IOB-WIN-NEXT/DATA/CONF/3010_alarm.json deleted file mode 100644 index b95f1b96..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/3010_alarm.json +++ /dev/null @@ -1,169 +0,0 @@ -[ - { - "description": "Alarm Word 1", - "tipoMem": "Byte", - "memAddr": "DB700.DBDW2", - "index": 2, - "size": 4, - "messages": [ - "ALLARME 01", - "ALLARME 02", - "ALLARME 03", - "ALLARME 04", - "ALLARME 05", - "ALLARME 06", - "ALLARME 07", - "ALLARME 08", - "ALLARME 09", - "ALLARME 10", - "ALLARME 11", - "ALLARME 12", - "ALLARME 13", - "ALLARME 14", - "ALLARME 15", - "ALLARME 16", - "ALLARME 17", - "ALLARME 18", - "ALLARME 19", - "ALLARME 20", - "ALLARME 21", - "ALLARME 22", - "ALLARME 23", - "ALLARME 24", - "ALLARME 25", - "ALLARME 26", - "ALLARME 27", - "ALLARME 28", - "ALLARME 29", - "ALLARME 30", - "ALLARME 31", - "ALLARME 32" - ] - }, - - { - "description": "Alarm Word 2", - "tipoMem": "Byte", - "memAddr": "DB700.DBDW6", - "index": 6, - "size": 4, - "messages": [ - "ALLARME 33", - "ALLARME 34", - "ALLARME 35", - "ALLARME 36", - "ALLARME 37", - "ALLARME 38", - "ALLARME 39", - "ALLARME 40", - "ALLARME 41", - "ALLARME 42", - "ALLARME 43", - "ALLARME 44", - "ALLARME 45", - "ALLARME 46", - "ALLARME 47", - "ALLARME 48", - "ALLARME 49", - "ALLARME 50", - "ALLARME 51", - "ALLARME 52", - "ALLARME 53", - "ALLARME 54", - "ALLARME 55", - "ALLARME 56", - "ALLARME 57", - "ALLARME 58", - "ALLARME 59", - "ALLARME 60", - "ALLARME 61", - "ALLARME 62", - "ALLARME 63", - "ALLARME 64" - ] - }, - - { - "description": "Alarm Word 3", - "tipoMem": "Byte", - "memAddr": "DB700.DBDW10", - "index": 10, - "size": 4, - "messages": [ - "ALLARME 65", - "ALLARME 66", - "ALLARME 67", - "ALLARME 68", - "ALLARME 69", - "ALLARME 70", - "ALLARME 71", - "ALLARME 72", - "ALLARME 73", - "ALLARME 74", - "ALLARME 75", - "ALLARME 76", - "ALLARME 77", - "ALLARME 78", - "ALLARME 79", - "ALLARME 80", - "ALLARME 81", - "ALLARME 82", - "ALLARME 83", - "ALLARME 84", - "ALLARME 85", - "ALLARME 86", - "ALLARME 87", - "ALLARME 88", - "ALLARME 89", - "ALLARME 90", - "ALLARME 91", - "ALLARME 92", - "ALLARME 93", - "ALLARME 94", - "ALLARME 95", - "ALLARME 96" - ] - }, - - { - "description": "Alarm Word 4", - "tipoMem": "Byte", - "memAddr": "DB700.DBDW14", - "index": 14, - "size": 4, - "messages": [ - "ALLARME 97", - "ALLARME 98", - "ALLARME 99", - "ALLARME 100", - "ALLARME 101", - "ALLARME 102", - "ALLARME 103", - "ALLARME 104", - "ALLARME 105", - "ALLARME 106", - "ALLARME 107", - "ALLARME 108", - "ALLARME 109", - "ALLARME 110", - "ALLARME 111", - "ALLARME 112", - "ALLARME 113", - "ALLARME 114", - "ALLARME 115", - "ALLARME 116", - "ALLARME 117", - "ALLARME 118", - "ALLARME 119", - "ALLARME 120", - "ALLARME 121", - "ALLARME 122", - "ALLARME 123", - "ALLARME 124", - "ALLARME 125", - "ALLARME 126", - "ALLARME 127", - "ALLARME 128" - ] - } -] \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3011.ini b/IOB-WIN-NEXT/DATA/CONF/3011.ini deleted file mode 100644 index 518386b8..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/3011.ini +++ /dev/null @@ -1,66 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -CNCTYPE=SIEMENS_TORRI -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=TORRI -MODEL=GHIRINGHELLI - -[CNC] -; Siemens Torri (Vaumard) -IP=192.168.0.53 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.1.7 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB700.DBB0 -ADDR_WRITE=DB701.DBB0 -SIZE_READ=52 -SIZE_WRITE=138 -;BIT0=CONN -BIT1=DB700.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB700.DBB3 -BIT4=DB700.DBB4 -BIT5=DB701.DBB4 ;bit ciclo in test == riscaldamento - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB700.DBW22 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 -ENABLE_PZ_RESET=TRUE -ENABLE_PZ_RESET_stopSetup=TRUE - -[BRANCH] -NAME=develop \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3013.ini b/IOB-WIN-NEXT/DATA/CONF/3013.ini deleted file mode 100644 index 9f975a6b..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/3013.ini +++ /dev/null @@ -1,65 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -CNCTYPE=SIEMENS_TORRI - -[MACHINE] -VENDOR=TORRI -MODEL=GHIRINGHELLI M200 - -[CNC] -; Siemens Torri (GHIRINGHELLI M200) -IP=192.168.0.55 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.1.7 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB700.DBB0 -ADDR_WRITE=DB701.DBB0 -SIZE_READ=52 -SIZE_WRITE=138 -;BIT0=CONN -BIT1=DB700.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB700.DBB3 -BIT4=DB700.DBB4 -BIT5=DB701.DBB4 ; bit ciclo in test == riscaldamento - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB700.DBW22 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 -ENABLE_PZ_RESET=TRUE -ENABLE_PZ_RESET_stopSetup=FALSE - -[BRANCH] -NAME=develop \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3017.ini b/IOB-WIN-NEXT/DATA/CONF/3017.ini deleted file mode 100644 index 318ec103..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/3017.ini +++ /dev/null @@ -1,71 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina filtraggio fanghi Aprochim x Jetco -CNCTYPE=SIEMENS_APROCHIM -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=Aprochim -MODEL=Micro4000 - -[CNC] -IP=192.168.0.60 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.7 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB60.DBB0 -ADDR_WRITE=DB60.DBB18 -SIZE_READ=18 -SIZE_WRITE=0 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -;PZCOUNT_MODE=STD.DB550.DBDW0 -PZCOUNT_MODE=NONE -DISABLE_PZCOUNT=TRUE -ENABLE_DYN_DATA=TRUE -TSVC_pressCamFilt=MAX:60 -TSVC_pressLinUt=MAX:60 -TSVC_tempH2O=MAX:60 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 -ENABLE_PZ_RESET=TRUE -ENABLE_PZ_RESET_stopSetup=TRUE - -[BRANCH] -NAME=develop \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3020.ini b/IOB-WIN-NEXT/DATA/CONF/3020.ini deleted file mode 100644 index a18632f7..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/3020.ini +++ /dev/null @@ -1,66 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -CNCTYPE=SIEMENS_TORRI -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=TORRI -MODEL=GHIRINGHELLI - -[CNC] -; Siemens Torri (Vaumard) -IP=192.168.0.66 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.1.7 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB700.DBB0 -ADDR_WRITE=DB701.DBB0 -SIZE_READ=52 -SIZE_WRITE=138 -;BIT0=CONN -BIT1=DB700.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB700.DBB3 -BIT4=DB700.DBB4 -BIT5=DB701.DBB4 ;bit ciclo in test == riscaldamento - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB700.DBW22 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 -ENABLE_PZ_RESET=TRUE -ENABLE_PZ_RESET_stopSetup=TRUE - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.ini b/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.ini deleted file mode 100644 index 7dfbfd20..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.ini +++ /dev/null @@ -1,80 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina pulitrice RobotService x Donati -CNCTYPE=SIEMENS_NWSE -PING_MS_TIMEOUT=500 -MinDeltaSec=5 - -[MACHINE] -VENDOR=NWS -MODEL=Impianto Turi - -[CNC] -IP=192.168.19.10 -CPUTYPE=S71200 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.14 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB100.DBB0 -ADDR_WRITE=DB101.DBB0 -SIZE_READ=54 -SIZE_WRITE=8 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB15.DBDW2 -DISABLE_PZCOUNT=TRUE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; gestione custom timer -timerIntMs=30 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -; gestione scrittura string/char[]: true = string / false = char[] -WRITE_PRE=TRUE -; gestione emergenza forzata (ignora valore letto, mette sempre ARMED) -EMERGENCY_BYPASS=true -DISABLE_SEND_WDST=TRUE - -; conf parametri memoria READ/WRITE -PARAM_CONF=GIACO_NWSE.json -; conf aree allarme -ALARM_CONF=GIACO_NWSE_alarm.json - -[BRANCH] -NAME=master - -; Tags manuali -[TAGS] -Customer=Giacovelli-Turi -HostOS=WIN -HostName=IOB-WIN-01 -HostAddr=192.168.137.11 diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.json deleted file mode 100644 index 10d39cdc..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "mMapWrite": { - "resetCountAcqua": { - "name": "resetCountAcqua", - "description": "Reset contatori acqua OSMOSI / DEPURAZIONE", - "tipoMem": "Int", - "memAddr": "DB101.DBB0", - "index": 0, - "size": 2 - } - }, - "mMapRead": { - "CondOsmosi": { - "name": "CondOsmosi", - "description": "Conducib. H2O Osmosi", - "memAddr": "DB100.DBB40", - "tipoMem": "Int", - "index": 40, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "VolOsmosi": { - "name": "VolOsmosi", - "description": "Volume H2O Osmosi mc", - "memAddr": "DB100.DBB42", - "tipoMem": "Int", - "index": 40, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "StatoOsmosi": { - "name": "StatoOsmosi", - "description": "Stato Osmosi Inversa", - "memAddr": "DB100.DBB20", - "tipoMem": "BitMap", - "index": 20, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Impianto in servizio" - ] - }, - "TorbDepuraz": { - "name": "TorbDepuraz", - "description": "Torb. H2O Depurazione", - "memAddr": "DB100.DBB44", - "tipoMem": "Int", - "index": 44, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "VolDepuraz": { - "name": "VolDepuraz", - "description": "Volume acqua Depurazione mc", - "memAddr": "DB100.DBB46", - "tipoMem": "Int", - "index": 40, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "StatoDepurazione": { - "name": "StatoDepurazione", - "description": "Stato Depurazione", - "memAddr": "DB100.DBB22", - "tipoMem": "BitMap", - "index": 22, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Basso Livello", - "Alto Livello" - ] - }, - "TorbFiltri": { - "name": "TorbFiltri", - "description": "Torb. H2O Filtri", - "memAddr": "DB100.DBB48", - "tipoMem": "Int", - "index": 44, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "StatoFiltro01": { - "name": "StatoFiltro01", - "description": "Stato Filtro 1", - "memAddr": "DB100.DBB24", - "tipoMem": "BitMap", - "index": 24, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Spazzola in salita", - "Spazzola in discesa", - "Valvola scarico Chiusa", - "Valvola scarico Aperta", - "Impianto in Servizio", - "Impianto in Lavaggio" - ] - }, - "StatoFiltro02": { - "name": "StatoFiltro02", - "description": "Stato Filtro 2", - "memAddr": "DB100.DBB26", - "tipoMem": "BitMap", - "index": 26, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Spazzola in salita", - "Spazzola in discesa", - "Valvola scarico Chiusa", - "Valvola scarico Aperta", - "Impianto in Servizio", - "Impianto in Lavaggio" - ] - }, - "StatoFiltro03": { - "name": "StatoFiltro03", - "description": "Stato Filtro 3", - "memAddr": "DB100.DBB28", - "tipoMem": "BitMap", - "index": 28, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Spazzola in salita", - "Spazzola in discesa", - "Valvola scarico Chiusa", - "Valvola scarico Aperta", - "Impianto in Servizio", - "Impianto in Lavaggio" - ] - }, - "StatoFiltro04": { - "name": "StatoFiltro04", - "description": "Stato Filtro 4", - "memAddr": "DB100.DBB30", - "tipoMem": "BitMap", - "index": 30, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Spazzola in salita", - "Spazzola in discesa", - "Valvola scarico Chiusa", - "Valvola scarico Aperta", - "Impianto in Servizio", - "Impianto in Lavaggio" - ] - }, - "StatoFiltro05": { - "name": "StatoFiltro05", - "description": "Stato Filtro 5", - "memAddr": "DB100.DBB32", - "tipoMem": "BitMap", - "index": 32, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Spazzola in salita", - "Spazzola in discesa", - "Valvola scarico Chiusa", - "Valvola scarico Aperta", - "Impianto in Servizio", - "Impianto in Lavaggio" - ] - }, - "StatoFiltro06": { - "name": "StatoFiltro06", - "description": "Stato Filtro 6", - "memAddr": "DB100.DBB34", - "tipoMem": "BitMap", - "index": 34, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1, - "decodeMap": [ - "Spazzola in salita", - "Spazzola in discesa", - "Valvola scarico Chiusa", - "Valvola scarico Aperta", - "Impianto in Servizio", - "Impianto in Lavaggio" - ] - } - }, - "optKVP": { - "fluxLogReduce": true, - "fluxLogRedDeadBand": 1.0, - "fluxLogResendPeriod": 60 - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE_alarm.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE_alarm.json deleted file mode 100644 index d8226c2d..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GIACO_NWSE_alarm.json +++ /dev/null @@ -1,202 +0,0 @@ -[ - { - "description": "Allarmi Impianto Osmosi", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB0", - "index": 0, - "size": 2, - "messages": [ - "Avaria pompa ingresso", - "Avaria pompa alta pressione", - "Livello basso vasca osmosi", - "Livello basso vasca acqua grezza", - "Impianto in allarme", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "Allarme comunicazione con Gateway" - ] - }, - { - "description": "Allarmi Impianto Depurazione", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB2", - "index": 2, - "size": 2, - "messages": [ - "Avaria pompa 1", - "Avaria pompa 2", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "Allarme comunicazione con Gateway" - ] - }, - { - "description": "Allarmi Filtro 1", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB4", - "index": 4, - "size": 2, - "messages": [ - "Avaria pompa", - "Livello basso vasca", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##" - ] - }, - { - "description": "Allarmi Filtro 2", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB6", - "index": 6, - "size": 2, - "messages": [ - "Avaria pompa", - "Livello basso vasca", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##" - ] - }, - { - "description": "Allarmi Filtro 3", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB8", - "index": 8, - "size": 2, - "messages": [ - "Avaria pompa", - "Livello basso vasca", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##" - ] - }, - { - "description": "Allarmi Filtro 4", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB10", - "index": 10, - "size": 2, - "messages": [ - "Avaria pompa", - "Livello basso vasca", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##" - ] - }, - { - "description": "Allarmi Filtro 5", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB12", - "index": 12, - "size": 2, - "messages": [ - "Avaria pompa", - "Livello basso vasca", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##" - ] - }, - { - "description": "Allarmi Filtro 6", - "tipoMem": "Boolean", - "memAddr": "DB100.DBB14", - "index": 14, - "size": 2, - "messages": [ - "Avaria pompa", - "Livello basso vasca", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##" - ] - } -] \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GT693.ini b/IOB-WIN-NEXT/DATA/CONF/GT693.ini deleted file mode 100644 index ef76669f..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GT693.ini +++ /dev/null @@ -1,75 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE Manuale v.2 - 2024 -CNCTYPE=SIEMENS_FAPE_2 -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape Manuale - -[CNC] -IP=192.168.1.57 -CPUTYPE=S71200 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.64 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB17.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=16 -SIZE_WRITE=70 -;BIT0=CONN -;BIT1=DB17.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB17.DBB3 -;BIT4=DB17.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;Fape vers: 1 originale, 2 = stato + ciclo, 3 = semafoto + stato + ciclo -FAPE_VERS=2 -;FAPE_VERS=3 -PZCOUNT_MODE=STD.DB17.DBDW6 -PZ_GTOT_MADDR=STD.DB17.DBDW10 -PZ_REQ_MADDR=STD.DB16.DBDW64 -;PZ_CAD_MADDR=1602 -;PZ_DONE_MADDR=1604 -PARAM_CONF=GT693.json - -;ENABLE_PZ_RESET=TRUE -;ENABLE_PZ_RESET_stopSetup=TRUE -;gestione invio pezzi in blocco -;ENABLE_SEND_PZC_BLOCK=TRUE -;MIN_SEND_PZC_BLOCK=10 -;MAX_SEND_PZC_BLOCK=100 -;DynData -;ENABLE_DYN_DATA=TRUE -;DISABLE_SEND_WDST=TRUE - -[BRANCH] -NAME=master diff --git a/IOB-WIN-NEXT/DATA/CONF/GT693.json b/IOB-WIN-NEXT/DATA/CONF/GT693.json deleted file mode 100644 index 9da38cbb..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GT693.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "mMapRead": { - "qtyWrk": { - "name": "qtyWrk", - "description": "Contatore Parziale", - "memAddr": "", - "tipoMem": "Int", - "index": 0, - "size": 4, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 5 - }, - "qtyTot": { - "name": "qtyTot", - "description": "Contatore Assoluto", - "memAddr": "", - "tipoMem": "Int", - "index": 0, - "size": 4, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 6 - }, - "DYNDATA": { - "name": "DYNDATA", - "description": "DynData check", - "memAddr": "", - "tipoMem": "String", - "index": 0, - "size": 4, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 13 - } - }, - "mMapWrite": { - "setArt": { - "name": "setArt", - "description": "Articolo", - "memAddr": "DB16.DBDW32", - "tipoMem": "String", - "index": 32, - "size": 30, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 1 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "memAddr": "DB16.DBDW0", - "tipoMem": "String", - "index": 0, - "size": 30, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 2 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty Commessa", - "memAddr": "DB16.DBDW64", - "tipoMem": "Int", - "index": 0, - "size": 4, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 3 - }, - "resetPzComm": { - "name": "resetPzComm", - "description": "Reset Contapezzi", - "memAddr": "DB16.DBB68.1", - "tipoMem": "Bool", - "index": 0, - "size": 1, - "func": "POINT", - "period": 60, - "factor": 1, - "displOrdinal": 3 - } - }, - "DataDecodMap": { - "StatoMacchina": { - "0": "COMUNICAZIONE ASSENTE", - "5": "5 EMERGENZA RIPRISTINATA", - "10": "10 MACCHINA IN POTENZA", - "15": "15 MACCHINA PRONTA PER CICLO LOCALE", - "20": "20 MACCHINA PRONTA PER CICLO CON ROBOT", - "25": "25 MACCHINA IN MANUALE", - "30": "30", - "35": "35", - "50": "50 CICLO RESET ATTIVO", - "55": "55 CICLO AUTOMATICO LOCALE ATTIVO", - "60": "60 CICLO AUTOMATICO CON ROBOT ATTIVO", - "65": "65", - "70": "70", - "100": "100 MANCANZA OLIO LUBRIFICAZIONE PEZZO", - "105": "105 MANCANZA OLIO LUBRIFICAZIONE CILINDRO", - "110": "110 ATTESA BARRIERE LIBERE", - "111": "111 ATTESA BLOCCAGGIO PORTELLO ANTERIORE", - "115": "115 ATTESA RILASCIO PULSANTE RESET", - "120": "120 ATTESA ASSE PUNZONATURA ALTO", - "125": "125 ATTESA BLOCCAGGIO PEZZO ALTO", - "126": "126 ATTESA BLOCCAGGIO PEZZO", - "130": "130 ATTESA CONTRASTO PEZZO DISINSERITO", - "135": "135 ATTESA CARRO IN POSIZIONE 1", - "140": "140 ATTESA CHIUSURA PORTELLO ROBOT", - "145": "145 ATTESA ROBOT FUORI INGOMBRO", - "150": "150 ATTESA TERMINE CICLO RESET", - "155": "155 TIMEOUT LUBRIFICAZIONE CILINDRO", - "160": "160 LIVELLO OLIO BASSO LUBRIFICA PEZZO", - "165": "165 LIVELLO OLIO BASSO LUBRIFICA CILINDRO", - "170": "170 ATTESA AREA TRASLAZIONE LIBERA", - "175": "175", - "200": "200", - "205": "205 ANOMALIA POSIZIONE PER CARICO ROBOT", - "210": "210 SOVRAPRESSIONE PUNZONATURA 1", - "215": "215 OLTRE QUOTA MASSIMA PUNZONATURA 1", - "220": "220 SOVRAPRESSIONE PUNZONATURA 2", - "225": "225 OLTRE QUOTA MASSIMA PUNZONATURA 1", - "230": "230 SOVRAPRESSIONE TRASLAZIONE CARRO", - "235": "235 TIMEOUT AVVIO DRIVE POMPA IDRAULICA", - "240": "240 SOVRAPRESSIONE MOVIMENTO PUNZONE", - "245": "245 ALLARME DRIVE POMPA IDRAULICA", - "250": "250 ANOMALIA ALIMENTAZIONE PNEUMATICA", - "255": "255 APERTURA ANOMALA PORTELLO ROBOT", - "260": "260 APERTURA ANOMALA PORTELLO ANTERIORE", - "265": "265 INTRUSIONE ANOMALA BARRIERE", - "270": "270 MACCHINA NON ATTIVA", - "275": "275 ALLARME AREA TRASLAZIONE NON LIBERA", - "280": "280", - "301": "301 ANOMALIA SALITA PUNZONATORE", - "302": "302", - "303": "303 ANOMALIA TRASLAZIONE CARRO", - "304": "304", - "305": "305 ANOMALIA ARRETRAMENTO CONTRASTO", - "306": "306", - "307": "307 ANOMALIA APERTURA STAFFAGGIO", - "403": "403 ANOMALIA STAFFAGGIO PEZZO", - "405": "405 ANOMALIA POSIZIONE CONTRASTO", - "407": "407 ANOMALIA PUNZONATURA 1", - "409": "409 ANOMALI TRASLAZIONE IN POSIZIONE 2", - "411": "411 ANOMALIA PUNZONATURA 2", - "413": "413 ANOMALIA ARRETRAMENTO CONTRASTO", - "415": "415 ANOMALIA SALITA STAFFAGGIO", - "417": "417 ANOMALI TRASLAZIONE IN POSIZIONE 1", - "419": "419 ANOMALIA DISATTIVAZIONE DRIVE POMPA" - }, - "StepCiclo": { - "0": "CICLO NON ATTIVO", - "5": "CONTROLLO TIPO CARICO", - "10": "APERTURA PORTELLO ACCESSO AREA ROBOT", - "15": "ATTESA SCARICO CARICO PEZZO DA ROBOT", - "20": "ATTESA ROBOT FUORI AREA", - "25": "ATTESA CADUTA SEGNALE ROBOT FUORI AREA", - "30": "CHIUSURA PORTELLO ACCESSO AREA ROBOT", - "50": "FASE 1 STAFFAGGIO PEZZO", - "60": "FASE 2 POSIZIONAMENTO CONTRASTO PEZZO", - "69": "FASE 3 PUNZONATURA 1 LUBRIFICAZIONE PUNZONE", - "70": "FASE 3 PUNZONATURA 1 DISCESA RAPIDA", - "74": "FASE 3 PUNZONATURA 1 DISCESA LENTA", - "75": "FASE 3 PUNZONATURA 1 DISCESA LENTISSIMA", - "79": "FASE 3 PUNZONATURA 1 ARRESTO AZIONAMENTO", - "80": "FASE 3 PUNZONATURA 1 RITARDO PER RISALITA", - "85": "FASE 3 PUNZONATURA 1 SALITA LENTA", - "90": "FASE 3 PUNZONATURA 1 SALITA RAPIDA", - "95": "FASE 3 PUNZONATURA 1 SALITA FINALE", - "96": "FASE 3 PUNZONATURA 1 ARRESTO AZIONAMENTO", - "105": "FASE 4 TRASLAZIONE 1 RITARDO AVVIO", - "110": "FASE 4 TRASLAZIONE 1 MOVIMENTO SU PUNZONATURA 2", - "114": "FASE 4 TRASLAZIONE 1 ARRESTO AZIONAMENTO", - "115": "FASE 5 PUNZONATURA 2 RITARDO AVVIO", - "119": "FASE 5 PUNZONATURA 2 LUBRIFICAZIONE PUNZONE", - "120": "FASE 5 PUNZONATURA 2 DISCESA RAPIDA", - "124": "FASE 5 PUNZONATURA 2 DISCESA LENTA", - "125": "FASE 5 PUNZONATURA 2 DISCESA LENTISSIMA", - "126": "FASE 5 PUNZONATURA 2 ARRESTO AZIONAMENTO", - "130": "FASE 5 PUNZONATURA 2 RITARDO PER RISALITA", - "135": "FASE 5 PUNZONATURA 2 SALITA LENTA", - "140": "FASE 5 PUNZONATURA 2 SALITA RAPIDA", - "145": "FASE 5 PUNZONATURA 2 SALITA FINALE", - "146": "FASE 5 PUNZONATURA 2 ARRESTO AZIONAMENTO", - "155": "INCREMENTO CONTATORI PEZZI ESEGUITI", - "156": "FASE 6 TRASLAZIONE 2 RITARDO AVVIO", - "160": "FASE 6 TRASLAZIONE 2 MOVIMENTO SU PUNZONATURA 1", - "161": "FASE 6 TRASLAZIONE 2 ARRESTO AZIONAMENTO", - "165": "FASE 7 DISINSERIMENTO CONTRASTO", - "170": "FASE 8 DESTAFFAGGIO PEZZO", - "180": "DISATTIVAZIONE AZIONAMENTO", - "190": "VERIFICA RIAVVIO CICLO CON CARICO DA ROBOT", - "300": "CICLO TERMINATO" - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GT694.ini b/IOB-WIN-NEXT/DATA/CONF/GT694.ini deleted file mode 100644 index 267f95a9..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GT694.ini +++ /dev/null @@ -1,63 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE Manuale v.2 - 2024 -CNCTYPE=SIEMENS_FAPE_2 -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape Automatica - -[CNC] -IP=192.168.1.57 -CPUTYPE=S71200 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.64 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=48 -SIZE_WRITE=48 -;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBDW40 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 - -[BRANCH] -NAME=master diff --git a/IOB-WIN-NEXT/DATA/CONF/GT696.ini b/IOB-WIN-NEXT/DATA/CONF/GT696.ini deleted file mode 100644 index 6aa49625..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GT696.ini +++ /dev/null @@ -1,63 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE Manuale v.2 - 2024 -CNCTYPE=SIEMENS_FAPE_2 -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape Automatica (Isola Okuma) - -[CNC] -IP=192.168.1.57 -CPUTYPE=S71200 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.64 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=48 -SIZE_WRITE=48 -;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBDW40 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 - -[BRANCH] -NAME=master diff --git a/IOB-WIN-NEXT/DATA/CONF/GT698.ini b/IOB-WIN-NEXT/DATA/CONF/GT698.ini deleted file mode 100644 index 933b6c1b..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/GT698.ini +++ /dev/null @@ -1,63 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Punzonatrice FAPE Manuale v.2 - 2024 -CNCTYPE=SIEMENS_FAPE_2 -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice Fape Manuale - -[CNC] -IP=192.168.1.57 -CPUTYPE=S71200 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.64 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=48 -SIZE_WRITE=48 -;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBDW40 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 - -[BRANCH] -NAME=master diff --git a/IOB-WIN-NEXT/DATA/CONF/INTERCL_01.ini b/IOB-WIN-NEXT/DATA/CONF/INTERCL_01.ini deleted file mode 100644 index bf4a6212..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/INTERCL_01.ini +++ /dev/null @@ -1,54 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina preriscaldo barre per Valvital -CNCTYPE=SIEMENS_AT2001 -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=SAET -MODEL=Preriscaldo_105B08 - -[CNC] -IP=192.168.0.99 -CPUTYPE=S7300 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://10.0.0.233 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB1000.DBB0 -ADDR_WRITE=DB1001.DBB0 -SIZE_READ=64 -SIZE_WRITE=90 - - -[BLINK] -MAX_COUNTER_BLINK = 15 -BLINK_FILT=0 - -[OPTPAR] -AUTO_CHANGE_ODL=true -CHANGE_ODL_HOURS=24 -CHANGE_ODL_IDLE_MIN=0 -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB1275.DBDW4 -DISABLE_PZCOUNT=TRUE -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; conf parametri memoria READ/WRITE -PARAM_CONF=INTERCL_01.json -WRITE_CHECK=TRUE -TEST_MODE=TRUE - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/INTERCL_01.json b/IOB-WIN-NEXT/DATA/CONF/INTERCL_01.json deleted file mode 100644 index 3759b806..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/INTERCL_01.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "mMapWrite": { - "kgParz": { - "name": "kgParz", - "description": "KG da produrre", - "tipoMem": "Int", - "memAddr": "DB1001.DBB66", - "index": 66, - "size": 2 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB1001.DBB0", - "index": 0, - "size": 22 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB1001.DBB22", - "index": 22, - "size": 22 - }, - "set_th": { - "name": "set_th", - "description": "Setpoint Dosatore T/h (0-12)", - "minVal": 0, - "maxVal": 1200, - "tipoMem": "Int", - "memAddr": "DB1001.DBB72", - "index": 72, - "size": 2, - "factor": 100 - }, - "set_c": { - "name": "set_c", - "description": "Setpoint Bruciatore (0-200)", - "minVal": 0, - "maxVal": 200, - "tipoMem": "Real", - "memAddr": "DB1001.DBB74", - "index": 74, - "size": 4 - }, - "aria_1": { - "name": "aria_1", - "description": "Set Temp Apertura Aria (0-180)", - "minVal": 0, - "maxVal": 180, - "tipoMem": "Int", - "memAddr": "DB1001.DBB78", - "index": 78, - "size": 2, - "factor": 10 - }, - "aria_2": { - "name": "aria_2", - "description": "Set Temp Stop Bruciatore (0-200)", - "minVal": 0, - "maxVal": 200, - "tipoMem": "Int", - "memAddr": "DB1001.DBB80", - "index": 80, - "size": 2, - "factor": 10 - }, - "setMmH20": { - "name": "setMmH20", - "description": "Setpoint Aspiratore mmH2O (0-50)", - "minVal": 0, - "maxVal": 50, - "tipoMem": "Real", - "memAddr": "DB1001.DBB82", - "index": 82, - "size": 4 - }, - "rpmci": { - "name": "rpmci", - "description": "Set rpm cilintro (0-12.4)", - "minVal": 0, - "maxVal": 124, - "tipoMem": "Int", - "memAddr": "DB1001.DBB86", - "index": 86, - "size": 2, - "factor": 10 - } - }, - "mMapRead": { - "T_Attuale_Cil": { - "name": "T_Attuale_Cil", - "description": "Temp Uscita Cilindro", - "tipoMem": "Real", - "memAddr": "DB1000.DBB16", - "index": 16, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "Bruc_0_100": { - "name": "Bruc_0_100", - "description": "Potenza Bruciatore", - "tipoMem": "Int", - "memAddr": "DB1000.DBB28", - "index": 28, - "size": 2, - "func": "MAX", - "period": 60 - }, - "Dep_Cil_mmH2O": { - "name": "Dep_Cil_mmH2O", - "description": "Depressione Cilindro mmH2O", - "tipoMem": "Int", - "memAddr": "DB1000.DBB30", - "index": 30, - "size": 2, - "func": "MAX", - "period": 60 - }, - "Asp_0_100": { - "name": "Asp_0_100", - "description": "Potenza Aspiratore", - "tipoMem": "Int", - "memAddr": "DB1000.DBB32", - "index": 32, - "size": 2, - "func": "MAX", - "period": 60 - }, - "Ampere_Asp": { - "name": "Ampere_Asp", - "description": "Ampere Aspiratore", - "tipoMem": "Int", - "memAddr": "DB1000.DBB34", - "index": 34, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "Temp_Filtro": { - "name": "Temp_Filtro", - "description": "Temp Uscita Filtro", - "tipoMem": "Int", - "memAddr": "DB1000.DBB36", - "index": 36, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "Ampere_Cil": { - "name": "Ampere_Cil", - "description": "Ampere Cilindro", - "tipoMem": "Int", - "memAddr": "DB1000.DBB38", - "index": 38, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "Flowrate": { - "name": "Flowrate", - "description": "Portata Dosatore T/h", - "tipoMem": "Int", - "memAddr": "DB1000.DBB40", - "index": 40, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 100 - }, - "Ampere_Dosat": { - "name": "Ampere_Dosat", - "description": "Ampere Dosatore", - "tipoMem": "Int", - "memAddr": "DB1000.DBB42", - "index": 42, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 10 - }, - "Tot_Parz_Dosatore": { - "name": "Tot_Parz_Dosatore", - "description": "Tot Parziale Dosatore", - "tipoMem": "DInt", - "memAddr": "DB1000.DBB48", - "index": 48, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1000 - }, - "Tot_Dosatore": { - "name": "Tot_Dosatore", - "description": "Tot Generale Dosatore", - "tipoMem": "DInt", - "memAddr": "DB1000.DBB52", - "index": 52, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1000 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ03.ini b/IOB-WIN-NEXT/DATA/CONF/PIZ03.ini deleted file mode 100644 index 31c7223e..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ03.ini +++ /dev/null @@ -1,72 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Impianto COMECA Collecchio per Pizzaferri -CNCTYPE=SIEMENS_COMECA -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=COMECA -MODEL=01 - -[CNC] -;IP=192.168.0.102 -IP=192.168.1.3 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -;MPIP=https://localhost:44339 -MPIP=https://gwms.egalware.com -MPURL=/pizzaferri/api -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/IOB/sendReboot?idxMacchina= - -[MEMORY] -ADDR_READ=DB85.DBB0 -ADDR_WRITE=DB85.DBB280 -SIZE_READ=280 -SIZE_WRITE=32 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB85.DBRE16 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; clock base (da 10ms) -timerIntMs=20 - -; conf parametri memoria READ/WRITE -PARAM_CONF=PIZ03.json - -NO_PING=TRUE -; conf aree allarme -ALARM_CONF=PIZ03_alarm.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ03.json b/IOB-WIN-NEXT/DATA/CONF/PIZ03.json deleted file mode 100644 index 1325fc6b..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ03.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "mMapWrite": { - "MinTemp01": { - "name": "MinTemp01", - "description": "Impostazione temperatura min TE04 Linea sfiato Gas", - "tipoMem": "Real", - "memAddr": "DB85.DBB280", - "index": 280, - "size": 4, - "unit": "C" - }, - "MinTemp02": { - "name": "MinTemp02", - "description": "Impostazione temperatura min TT17 Linea sfiato Gas Torcia Serbatoio", - "tipoMem": "Real", - "memAddr": "DB85.DBB284", - "index": 284, - "size": 4, - "unit": "C" - } - }, - "mMapRead": { - "TE2A": { - "name": "TE2A", - "description": "Temperatura Controllo Tenute Pompa A (TE2A)", - "memAddr": "DB85.DBB0", - "tipoMem": "Real", - "index": 0, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE1A": { - "name": "TE1A", - "description": "Temperatura Raffreddamento Pompa A (TE1A)", - "memAddr": "DB85.DBB4", - "tipoMem": "Real", - "index": 4, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE3A": { - "name": "TE3A", - "description": "Temperatura Cavitazione Pompa A (TE3A)", - "memAddr": "DB85.DBB8", - "tipoMem": "Real", - "index": 8, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "Temp01": { - "name": "Temp01", - "description": "Temperatura Torcia Aria Fredda (TE04)", - "memAddr": "DB85.DBB12", - "tipoMem": "Real", - "index": 12, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "Level": { - "name": "Level", - "description": "Livello Serbatoio (LT15)", - "memAddr": "DB85.DBB16", - "tipoMem": "Real", - "index": 16, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "Kg" - }, - "PressBH": { - "name": "PressBH", - "description": "Pressione Linea CNG (PT01)", - "memAddr": "DB85.DBB20", - "tipoMem": "Real", - "index": 20, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "PressBL": { - "name": "PressBL", - "description": "Pressione Riduttrice (PT100)", - "memAddr": "DB85.DBB24", - "tipoMem": "Real", - "index": 24, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "MainPress": { - "name": "MainPress", - "description": "Pressione Serbatoio (PT16)", - "memAddr": "DB85.DBB28", - "tipoMem": "Real", - "index": 28, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "Temp02": { - "name": "Temp02", - "description": "Temperatura Spurgo Torcia Serbatoio (TT17)", - "memAddr": "DB85.DBB36", - "tipoMem": "Real", - "index": 36, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE06": { - "name": "TE06", - "description": "Temperatura Uscita Vaporizzatore (TE06)", - "memAddr": "DB85.DBB40", - "tipoMem": "Real", - "index": 40, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE05": { - "name": "TE05", - "description": "Temperatura Carica Fredda (TE05)", - "memAddr": "DB85.DBB60", - "tipoMem": "Real", - "index": 60, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE2B": { - "name": "TE2B", - "description": "Temperatura Controllo Tenute Pompa B (TE2B)", - "memAddr": "DB85.DBB64", - "tipoMem": "Real", - "index": 64, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE1B": { - "name": "TE1B", - "description": "Temperatura Raffreddamento Pompa B (TE1B)", - "memAddr": "DB85.DBB68", - "tipoMem": "Real", - "index": 68, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE3B": { - "name": "TE3B", - "description": "Temperatura Cavitazione Pompa B (TE3B)", - "memAddr": "DB85.DBB72", - "tipoMem": "Real", - "index": 72, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "PressH": { - "name": "PressH", - "description": "Alta Pressione (PT300A)", - "memAddr": "DB85.DBB120", - "tipoMem": "Real", - "index": 120, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "PressM": { - "name": "PressM", - "description": "Media Pressione (PT300M)", - "memAddr": "DB85.DBB124", - "tipoMem": "Real", - "index": 124, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "LivelloPerc": { - "name": "LivelloPerc", - "description": "Livello Serbatorio % (LT15%)", - "memAddr": "DB85.DBB148", - "tipoMem": "Real", - "index": 148, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "%" - }, - "MinTemp01": { - "name": "MinTemp01", - "description": "Minima Temperatura Linea Sfiato Gas (TE04)", - "memAddr": "DB85.DBB152", - "tipoMem": "Real", - "index": 152, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "MinTemp02": { - "name": "MinTemp02", - "description": "Minima Temperatura Linea Sfiato Gas Torcia Serbatoio (TT17)", - "memAddr": "DB85.DBB156", - "tipoMem": "Real", - "index": 156, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ03_alarm.json b/IOB-WIN-NEXT/DATA/CONF/PIZ03_alarm.json deleted file mode 100644 index a9e1b755..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ03_alarm.json +++ /dev/null @@ -1,125 +0,0 @@ -[ - { - "description": "Allarmi Impianto", - "tipoMem": "Boolean", - "memAddr": "DB85.DBB232", - "index": 232, - "size": 6, - "messages": [ - "Emergenza Non Ripristinata", - "Emergenza QE Intervenuta", - "Emergenza Puls. Dispencer B Intervenuta", - "Emergenza Puls. Dispencer A Intervenuta", - "Stato Interruttore Erogatore Liquido B", - "Allarme Controllo Tensione di Rete", - "Allarme Controllo Tensione Antincendio", - "Stato Interruttore Erogatore Liquido A", - "Stato Sezionatore Generale", - "Stato Interruttore Protezione SPD", - "Stato Interruttore Sirena e Rotoalarm", - "Stato Interruttore Luci Emergenza", - "Stato Interruttore Pompa PC1A", - "Stato Interruttore Pompa PC1B", - "Stato Interruttore Pompa Sommersa C", - "Stato Termica Boil-Off", - "##234.0", - "Preallarme Centralina Metano", - "Allarme Centralina Metano", - "Emergenza Puls. Dispencer C Invervenuta", - "Mancaza Pressione Aria", - "Minima Temperatura Linea Sfiato Gas TE04", - "Minima Temperatura Linea Sfiato Gas Torcia Serbatoio TT17", - "Massima Temperatura Linea Sfiato Gas Torcia Serbatoio TT17", - "Almeno Un Emergenza Intervenuta", - "Arresto Operativo da PT1(predisposizione)", - "Stato Interruttore Alimentazione Punto Zero", - "##234.11", - "##234.12", - "##234.13", - "##234.14", - "Configurazione Incongruente", - "Pulsante Emergenza 2 SB17.3A Premuto", - "Pulsante Emergenza 1 SB17.3B Premuto", - "Pulsante Emergenza SB17.3C Premuto", - "Pulsante Emergenza 3 SB17.5 Premuto", - "Pulsante Emergenza 4 SB17.7 Premuto", - "##236.5", - "##236.6", - "##236.7", - "GT_TE2A", - "GT_TE1A", - "GT_TE3A", - "GT_TE04", - "GT_LT15", - "GT_PT01", - "GT_PT300R", - "GT_PT16" - ] - }, - { - "description": "Allarmi Serbatoio", - "tipoMem": "Boolean", - "memAddr": "DB85.DBB248", - "index": 248, - "size": 2, - "messages": [ - "Serbatoio Troppo Pieno", - "Serbatoio Pieno_HH", - "Serbatoio Pieno_H", - "Serbatoio Vuoto_LL", - "H Pressione Serbatoio", - "HH Pressione Serbatoio", - "LL Temperatura Ingresso BoilOff TE08", - "Minima Pressione Serbatoio per Partenza Pompe", - "Timeout Apertura Valvola PV1", - "Timeout Chiusura Valvola PV1", - "Timeout Apertura Valvola PV70", - "Timeout Chiusura Valvola PV70", - "##248.12", - "##248.13", - "##248.14", - "##248.15" - ] - }, - { - "description": "Allarmi Pompa Alta Pressione A", - "tipoMem": "Boolean", - "memAddr": "DB85.DBB252", - "index": 252, - "size": 4, - "messages": [ - "Ritardo Avvio Pompa PC1B", - "##252.1", - "Temperatura Freddo TE1B NON Raggiunta", - "##HH Temperatura Cavitazione TE3B", - "Allarme Temperatura Tenute Pompa TE2B", - "LL Temperatura Ingresso Stoccaggio TE06", - "Allarme Temperatura Ingresso Stoccaggio TE07", - "Aumento Pressione PT01", - "Max Pressione PT01", - "##256.9", - "##256.10", - "##256.11", - "##256.12", - "##256.13", - "##256.14", - "##256.15", - "Timeout Apertura PV3B", - "Timeout Apertura PV5B", - "Timeout Apertura PV6B", - "Timeout Apertura PV7", - "##258.4", - "##258.5", - "##258.6", - "##258.7", - "##258.8", - "##258.9", - "##258.10", - "##258.11", - "##258.12", - "##258.13", - "##258.14", - "##258.15" - ] - } -] \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ08.ini b/IOB-WIN-NEXT/DATA/CONF/PIZ08.ini deleted file mode 100644 index 0e2cd75f..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ08.ini +++ /dev/null @@ -1,71 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Impianto COMECA Pilastrello per Pizzaferri -CNCTYPE=SIEMENS_COMECA -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=COMECA -MODEL=01 - -[CNC] -IP=192.168.100.1 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -;MPIP=https://localhost:44339 -MPIP=https://gwms.egalware.com -MPURL=/pizzaferri/api -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/IOB/sendReboot?idxMacchina= - -[MEMORY] -ADDR_READ=DB85.DBB0 -ADDR_WRITE=DB85.DBB280 -SIZE_READ=280 -SIZE_WRITE=32 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB85.DBRE16 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; clock base (da 10ms) -timerIntMs=20 - -; conf parametri memoria READ/WRITE -PARAM_CONF=PIZ08.json - -NO_PING=TRUE -; conf aree allarme -ALARM_CONF=PIZ08_alarm.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ08.json b/IOB-WIN-NEXT/DATA/CONF/PIZ08.json deleted file mode 100644 index 1325fc6b..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ08.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "mMapWrite": { - "MinTemp01": { - "name": "MinTemp01", - "description": "Impostazione temperatura min TE04 Linea sfiato Gas", - "tipoMem": "Real", - "memAddr": "DB85.DBB280", - "index": 280, - "size": 4, - "unit": "C" - }, - "MinTemp02": { - "name": "MinTemp02", - "description": "Impostazione temperatura min TT17 Linea sfiato Gas Torcia Serbatoio", - "tipoMem": "Real", - "memAddr": "DB85.DBB284", - "index": 284, - "size": 4, - "unit": "C" - } - }, - "mMapRead": { - "TE2A": { - "name": "TE2A", - "description": "Temperatura Controllo Tenute Pompa A (TE2A)", - "memAddr": "DB85.DBB0", - "tipoMem": "Real", - "index": 0, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE1A": { - "name": "TE1A", - "description": "Temperatura Raffreddamento Pompa A (TE1A)", - "memAddr": "DB85.DBB4", - "tipoMem": "Real", - "index": 4, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE3A": { - "name": "TE3A", - "description": "Temperatura Cavitazione Pompa A (TE3A)", - "memAddr": "DB85.DBB8", - "tipoMem": "Real", - "index": 8, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "Temp01": { - "name": "Temp01", - "description": "Temperatura Torcia Aria Fredda (TE04)", - "memAddr": "DB85.DBB12", - "tipoMem": "Real", - "index": 12, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "Level": { - "name": "Level", - "description": "Livello Serbatoio (LT15)", - "memAddr": "DB85.DBB16", - "tipoMem": "Real", - "index": 16, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "Kg" - }, - "PressBH": { - "name": "PressBH", - "description": "Pressione Linea CNG (PT01)", - "memAddr": "DB85.DBB20", - "tipoMem": "Real", - "index": 20, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "PressBL": { - "name": "PressBL", - "description": "Pressione Riduttrice (PT100)", - "memAddr": "DB85.DBB24", - "tipoMem": "Real", - "index": 24, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "MainPress": { - "name": "MainPress", - "description": "Pressione Serbatoio (PT16)", - "memAddr": "DB85.DBB28", - "tipoMem": "Real", - "index": 28, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "Temp02": { - "name": "Temp02", - "description": "Temperatura Spurgo Torcia Serbatoio (TT17)", - "memAddr": "DB85.DBB36", - "tipoMem": "Real", - "index": 36, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE06": { - "name": "TE06", - "description": "Temperatura Uscita Vaporizzatore (TE06)", - "memAddr": "DB85.DBB40", - "tipoMem": "Real", - "index": 40, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE05": { - "name": "TE05", - "description": "Temperatura Carica Fredda (TE05)", - "memAddr": "DB85.DBB60", - "tipoMem": "Real", - "index": 60, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE2B": { - "name": "TE2B", - "description": "Temperatura Controllo Tenute Pompa B (TE2B)", - "memAddr": "DB85.DBB64", - "tipoMem": "Real", - "index": 64, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE1B": { - "name": "TE1B", - "description": "Temperatura Raffreddamento Pompa B (TE1B)", - "memAddr": "DB85.DBB68", - "tipoMem": "Real", - "index": 68, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "TE3B": { - "name": "TE3B", - "description": "Temperatura Cavitazione Pompa B (TE3B)", - "memAddr": "DB85.DBB72", - "tipoMem": "Real", - "index": 72, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "PressH": { - "name": "PressH", - "description": "Alta Pressione (PT300A)", - "memAddr": "DB85.DBB120", - "tipoMem": "Real", - "index": 120, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "PressM": { - "name": "PressM", - "description": "Media Pressione (PT300M)", - "memAddr": "DB85.DBB124", - "tipoMem": "Real", - "index": 124, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "bar" - }, - "LivelloPerc": { - "name": "LivelloPerc", - "description": "Livello Serbatorio % (LT15%)", - "memAddr": "DB85.DBB148", - "tipoMem": "Real", - "index": 148, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "%" - }, - "MinTemp01": { - "name": "MinTemp01", - "description": "Minima Temperatura Linea Sfiato Gas (TE04)", - "memAddr": "DB85.DBB152", - "tipoMem": "Real", - "index": 152, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - }, - "MinTemp02": { - "name": "MinTemp02", - "description": "Minima Temperatura Linea Sfiato Gas Torcia Serbatoio (TT17)", - "memAddr": "DB85.DBB156", - "tipoMem": "Real", - "index": 156, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1, - "unit": "C" - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ08_alarm.json b/IOB-WIN-NEXT/DATA/CONF/PIZ08_alarm.json deleted file mode 100644 index 464db0ff..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ08_alarm.json +++ /dev/null @@ -1,125 +0,0 @@ -[ - { - "description": "Allarmi Impianto", - "tipoMem": "Boolean", - "memAddr": "DB85.DBB232", - "index": 232, - "size": 6, - "messages": [ - "Emergenza Non Ripristinata", - "Emergenza QE Intervenuta", - "Emergenza Puls. Dispencer B Intervenuta", - "Emergenza Puls. Dispencer A Intervenuta", - "Stato Interruttore Erogatore Liquido B", - "Allarme Controllo Tensione di Rete", - "Allarme Controllo Tensione Antincendio", - "Stato Interruttore Erogatore Liquido A", - "Stato Sezionatore Generale", - "Stato Interruttore Protezione SPD", - "Stato Interruttore Sirena e Rotoalarm", - "Stato Interruttore Luci Emergenza", - "Stato Interruttore Pompa PC1A", - "Stato Interruttore Pompa PC1B", - "Stato Interruttore Pompa Sommersa C", - "Stato Termica Boil-Off", - "##234.0", - "Preallarme Centralina Metano", - "Allarme Centralina Metano", - "Emergenza Puls. Dispencer C Invervenuta", - "Mancaza Pressione Aria", - "Minima Temperatura Linea Sfiato Gas TE04", - "Minima Temperatura Linea Sfiato Gas Torcia Serbatoio TT17", - "Massima Temperatura Linea Sfiato Gas Torcia Serbatoio TT17", - "Almeno Un Emergenza Intervenuta", - "Arresto Operativo da PT1(predisposizione)", - "Stato Interruttore Alimentazione Punto Zero", - "##234.11", - "##234.12", - "##234.13", - "##234.14", - "Configurazione Incongruente", - "Pulsante Emergenza 2 SB17.3A Premuto", - "Pulsante Emergenza 1 SB17.3B Premuto", - "Pulsante Emergenza SB17.3C Premuto", - "Pulsante Emergenza 3 SB17.5 Premuto", - "Pulsante Emergenza 4 SB17.7 Premuto", - "##236.5", - "##236.6", - "##236.7", - "GT_TE2A", - "GT_TE1A", - "GT_TE3A", - "GT_TE04", - "GT_LT15", - "GT_PT01", - "GT_PT300R", - "GT_PT16" - ] - }, - { - "description": "Allarmi Serbatoio", - "tipoMem": "Boolean", - "memAddr": "DB85.DBB248", - "index": 248, - "size": 2, - "messages": [ - "Serbatoio Troppo Pieno", - "Serbatoio Pieno_HH", - "Serbatoio Pieno_H", - "Serbatoio Vuoto_LL", - "H Pressione Serbatoio", - "HH Pressione Serbatoio", - "LL Temperatura Ingresso BoilOff TE08", - "Minima Pressione Serbatoio per Partenza Pompe", - "Timeout Apertura Valvola PV1", - "Timeout Chiusura Valvola PV1", - "Timeout Apertura Valvola PV70", - "Timeout Chiusura Valvola PV70", - "##248.12", - "##248.13", - "##248.14", - "##248.15" - ] - }, - { - "description": "Allarmi Pompa Alta Pressione A", - "tipoMem": "Boolean", - "memAddr": "DB85.DBB252", - "index": 252, - "size": 4, - "messages": [ - "Ritardo Avvio Pompa PC1B", - "##252.1", - "Temperatura Freddo TE1B NON Raggiunta", - "HH Temperatura Cavitazione TE3B", - "Allarme Temperatura Tenute Pompa TE2B", - "LL Temperatura Ingresso Stoccaggio TE06", - "Allarme Temperatura Ingresso Stoccaggio TE07", - "Aumento Pressione PT01", - "Max Pressione PT01", - "##256.9", - "##256.10", - "##256.11", - "##256.12", - "##256.13", - "##256.14", - "##256.15", - "Timeout Apertura PV3B", - "Timeout Apertura PV5B", - "Timeout Apertura PV6B", - "Timeout Apertura PV7", - "##258.4", - "##258.5", - "##258.6", - "##258.7", - "##258.8", - "##258.9", - "##258.10", - "##258.11", - "##258.12", - "##258.13", - "##258.14", - "##258.15" - ] - } -] \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/SIEMENS.ini b/IOB-WIN-NEXT/DATA/CONF/SIEMENS.ini deleted file mode 100644 index 2821b08d..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/SIEMENS.ini +++ /dev/null @@ -1,68 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -CNCTYPE=SIEMENS -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=Tecnomeccanica -MODEL=Punzonatrice 140.000 - -[CNC] -; Siemens (FIAP) -; VECCHIA -;IP=192.168.1.57 -; NUOVA -IP=192.168.1.56 -;con KAWASAKI -;IP=192.168.1.55 -CPUTYPE=S71200 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.1.7 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB15.DBB0 -ADDR_WRITE=DB16.DBB0 -SIZE_READ=50 -SIZE_WRITE=50 -;BIT0=CONN -BIT1=DB15.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -BIT3=DB15.DBB3 -BIT4=DB15.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB15.DBW22 -;PZ_CAD_MADDR=1602 -;PZ_REQ_MADDR=1603 -;PZ_DONE_MADDR=1604 -;PZ_GTOT_MADDR=1605 - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VALV_SAET.ini b/IOB-WIN-NEXT/DATA/CONF/VALV_SAET.ini deleted file mode 100644 index 887dec1b..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VALV_SAET.ini +++ /dev/null @@ -1,78 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina preriscaldo barre per Valvital -CNCTYPE=SIEMENS_SAET -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=SAET -MODEL=Preriscaldo_105B08 - -[CNC] -IP=192.168.214.24 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB1275.DBB0 -ADDR_WRITE=DB1275.DBB92 -SIZE_READ=92 -SIZE_WRITE=56 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB1275.DBDW4 -DISABLE_PZCOUNT=TRUE -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -TSVC_Power_01=MAX:5 -TSVC_Power_02=MAX:5 -TSVC_Power_03=MAX:5 -TSVC_Power_04=MAX:5 -TSVC_TempPirom_01=MAX:5 -TSVC_TempPirom_02=MAX:5 -TSVC_TempPirom_03=MAX:5 -TSVC_TempPirom_04=MAX:5 -TSVC_TempCool_01=MAX:5 -TSVC_TempCool_02=MAX:5 -TSVC_TempCool_03=MAX:5 -TSVC_TempCool_04=MAX:5 -TSVC_PartStatus_01=MAX:5 -TSVC_PartStatus_02=MAX:5 -TSVC_PartStatus_03=MAX:5 -TSVC_PartStatus_04=MAX:5 - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL20.ini b/IOB-WIN-NEXT/DATA/CONF/VL20.ini deleted file mode 100644 index ee71f897..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL20.ini +++ /dev/null @@ -1,69 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina tempra induzione officina Valvital -CNCTYPE=SIEMENS_SAET -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=SAET -MODEL=FornoTemprainduzione_105B08 - -[CNC] -;IP=192.168.212.20 -IP=192.168.213.20 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB1275.DBB0 -ADDR_WRITE=DB1275.DBB92 -SIZE_READ=92 -SIZE_WRITE=56 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB1275.DBDW4 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; conf parametri memoria READ/WRITE -PARAM_CONF=VL20.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL20.json b/IOB-WIN-NEXT/DATA/CONF/VL20.json deleted file mode 100644 index d7b01aa7..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL20.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "mMapWrite": { - "setArt": { - "name": "setArt", - "description": "Articolo", - "memAddr": "DB1275.DBB96", - "tipoMem": "String", - "index": 96, - "size": 32 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "memAddr": "DB1275.DBB130", - "tipoMem": "String", - "index": 130, - "size": 12 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB1275.DBB144", - "tipoMem": "DInt", - "index": 144, - "size": 4 - } - }, - "mMapRead": { - "Power_01": { - "name": "Power_01", - "description": "Potenza_ST_1", - "memAddr": "DB1275.DBB24", - "tipoMem": "Real", - "index": 24, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Power_02": { - "name": "Power_02", - "description": "Potenza_ST_2", - "memAddr": "DB1275.DBB28", - "tipoMem": "Real", - "index": 28, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempPirom_01": { - "name": "TempPirom_01", - "description": "Temperatura_Pirometro_1", - "memAddr": "DB1275.DBB40", - "tipoMem": "Real", - "index": 40, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempCool_01": { - "name": "TempCool_01", - "description": "Temperatura_Raffr_1", - "memAddr": "DB1275.DBB56", - "tipoMem": "Real", - "index": 56, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "PartStatus_01": { - "name": "PartStatus_01", - "description": "Pezzo_Staz_1", - "memAddr": "DB1275.DBB72", - "tipoMem": "Int", - "index": 72, - "size": 2, - "func": "MAX", - "period": 60 - }, - "PartStatus_02": { - "name": "PartStatus_02", - "description": "Pezzo_Staz_2", - "memAddr": "DB1275.DBB74", - "tipoMem": "Int", - "index": 74, - "size": 2, - "func": "MAX", - "period": 60 - }, - "PartStatus_03": { - "name": "PartStatus_03", - "description": "Pezzo_Staz_3", - "memAddr": "DB1275.DBB76", - "tipoMem": "Int", - "index": 76, - "size": 2, - "func": "MAX", - "period": 60 - }, - "PartStatus_04": { - "name": "PartStatus_04", - "description": "Pezzo_Staz_4", - "memAddr": "DB1275.DBB78", - "tipoMem": "Int", - "index": 78, - "size": 2, - "func": "MAX", - "period": 60 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL21.ini b/IOB-WIN-NEXT/DATA/CONF/VL21.ini deleted file mode 100644 index e4227dfd..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL21.ini +++ /dev/null @@ -1,71 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina DENTATRICE per Valvital -CNCTYPE=SIEMENS_COMUR -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=COMUR -MODEL=DENTATRICE_PE125H - -[CNC] -IP=192.168.213.21 -CPUTYPE=S7300 -RACK=0 -SLOT=2 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -; attenzione: aree overlapping! -ADDR_READ=DB150.DBB0 -ADDR_WRITE=DB150.DBB4 -SIZE_READ=60 -SIZE_WRITE=48 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=SPEC.DB111.DBDI24 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -MAX_PZ_INCR_PERC=500 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; conf parametri memoria READ/WRITE -PARAM_CONF=VL21.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL21.json b/IOB-WIN-NEXT/DATA/CONF/VL21.json deleted file mode 100644 index c6e39c0b..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL21.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "mMapWrite": { - "setArt": { - "name": "setArt", - "description": "Articolo", - "memAddr": "DB150.DBB12", - "tipoMem": "String", - "index": 12, - "size": 20 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "memAddr": "DB150.DBB32", - "tipoMem": "String", - "index": 32, - "size": 20 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB150.DBB8", - "tipoMem": "Int", - "index": 8, - "size": 4 - } - }, - "mMapRead": { - "PzTotCount": { - "name": "PzTotCount", - "description": "Contapezzi totale", - "memAddr": "DB110.DBDI24", - "tipoMem": "DInt", - "index": 24, - "size": 4, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "CodUte": { - "name": "CodUte", - "description": "Codice Utensile in Uso", - "memAddr": "DB150.DBB56", - "tipoMem": "DInt", - "index": 56, - "size": 4, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "CodPezzo": { - "name": "CodPezzo", - "description": "Codice Pezzo in lavorazione", - "memAddr": "DB150.DBB52", - "tipoMem": "DInt", - "index": 52, - "size": 4, - "func": "MAX", - "period": 10, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL22.ini b/IOB-WIN-NEXT/DATA/CONF/VL22.ini deleted file mode 100644 index a78f1f29..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL22.ini +++ /dev/null @@ -1,96 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina preriscaldo barre per Valvital -CNCTYPE=SIEMENS_LASCO -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=LASCP -MODEL=PRESSA_3150 - -[CNC] -;REAL PLC: OK!!! -IP=192.168.10.30 -; PN/PN Coupler -;IP=192.168.214.22 -CPUTYPE=S71500 -RACK=0 -SLOT=0 -;CPUTYPE=S7300 -;RACK=0 -;SLOT=2 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB1001.DBB0 -ADDR_WRITE=DB1002.DBB0 -SIZE_READ=68 -SIZE_WRITE=68 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -NO_PING=false -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -;PZCOUNT_MODE=STD.DB1001.DBDW2 -PZCOUNT_MODE=STD.DB1001.DBDW6 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -;GESTIONE DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE -; gestione scrittura string/char[]: true = string / false = char[] -WRITE_PRE=TRUE - -USE_NEW_EXE_TASK=TRUE -; conf parametri memoria READ/WRITE -PARAM_CONF=VL22.json - -TSVC_RamPosition=MAX:10 -TSVC_LowerEjectorPosition=MAX:10 -TSVC_UpperTool=MAX:10 -TSVC_TempMainMotorU=MAX:10 -TSVC_TempMainMotorV=MAX:10 -TSVC_TempMainMotorW=MAX:10 -TSVC_TempSpindleNut=MAX:10 -TSVC_TempMotoModule=MAX:10 -TSVC_TempOilCirculation=MAX:10 -TSVC_TempHydraulicUnit=MAX:10 -TSVC_PressHydraulicPump=MAX:10 -TSVC_PressHydraulicAccumulator=MAX:10 -TSVC_PressCounterforceOil=MAX:10 -TSVC_PressCounterforceGas=MAX:10 -TSVC_ForcePressureActual=MAX:10 -TSVC_ForceOnBushing=MAX:10 - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL22.json b/IOB-WIN-NEXT/DATA/CONF/VL22.json deleted file mode 100644 index f291d8b6..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL22.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "mMapWrite": { - "setArt": { - "name": "setArt", - "description": "Articolo", - "memAddr": "DB1002.DBB2", - "tipoMem": "String", - "index": 2, - "size": 22 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "memAddr": "DB1002.DBB24", - "tipoMem": "String", - "index": 24, - "size": 22 - }, - "setProg": { - "name": "setProg", - "description": "Programma", - "memAddr": "DB1002.DBB46", - "tipoMem": "String", - "index": 46, - "size": 22 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB1002.DBB68", - "tipoMem": "DInt", - "index": 68, - "size": 2 - } - }, - "mMapRead": { - "RamPosition": { - "name": "RamPosition", - "description": "Ram Position", - "memAddr": "DB1001.DBB18", - "tipoMem": "Int", - "index": 18, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 10 - }, - "LowerEjectorPosition": { - "name": "LowerEjectorPosition", - "description": "Lower Ejector Position", - "memAddr": "DB1001.DBB20", - "tipoMem": "Int", - "index": 20, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 10 - }, - "UpperTool": { - "name": "UpperTool", - "description": "Upper Tool", - "memAddr": "DB1001.DBB22", - "tipoMem": "Int", - "index": 22, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 10 - }, - "TempMainMotorU": { - "name": "TempMainMotorU", - "description": "Temp MainMotor U", - "memAddr": "DB1001.DBB24", - "tipoMem": "Int", - "index": 24, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "TempMainMotorV": { - "name": "TempMainMotorV", - "description": "Temp MainMotor V", - "memAddr": "DB1001.DBB26", - "tipoMem": "Int", - "index": 26, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "TempMainMotorW": { - "name": "TempMainMotorW", - "description": "Temp MainMotor W", - "memAddr": "DB1001.DBB28", - "tipoMem": "Int", - "index": 28, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "TempSpindleNut": { - "name": "TempSpindleNut", - "description": "Temp Spindle Nut", - "memAddr": "DB1001.DBB30", - "tipoMem": "Int", - "index": 30, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "TempMotoModule": { - "name": "TempMotoModule", - "description": "Temp Moto Module", - "memAddr": "DB1001.DBB32", - "tipoMem": "Int", - "index": 32, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "TempOilCirculation": { - "name": "TempOilCirculation", - "description": "Temp Oil Circulation", - "memAddr": "DB1001.DBB34", - "tipoMem": "Int", - "index": 34, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "TempHydraulicUnit": { - "name": "TempHydraulicUnit", - "description": "Temp Hydraulic Unit", - "memAddr": "DB1001.DBB36", - "tipoMem": "Int", - "index": 36, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "PressHydraulicPump": { - "name": "PressHydraulicPump", - "description": "Press Hydraulic Pump", - "memAddr": "DB1001.DBB38", - "tipoMem": "Int", - "index": 38, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "PressHydraulicAccumulator": { - "name": "PressHydraulicAccumulator", - "description": "Press Hydraulic Accumulator", - "memAddr": "DB1001.DBB40", - "tipoMem": "Int", - "index": 40, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "PressCounterforceOil": { - "name": "PressCounterforceOil", - "description": "Press Counterforce Oil", - "memAddr": "DB1001.DBB42", - "tipoMem": "Int", - "index": 42, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "PressCounterforceGas": { - "name": "PressCounterforceGas", - "description": "Press Counterforce Gas", - "memAddr": "DB1001.DBB44", - "tipoMem": "Int", - "index": 44, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "ForcePressureActual": { - "name": "ForcePressureActual", - "description": "Force Pressure Actual", - "memAddr": "DB1001.DBB46", - "tipoMem": "DInt", - "index": 46, - "size": 4, - "func": "MAX", - "period": 10, - "factor": 1 - }, - "ForceOnBushing": { - "name": "ForceOnBushing", - "description": "Force On Bushing", - "memAddr": "DB1001.DBB50", - "tipoMem": "Int", - "index": 50, - "size": 2, - "func": "MAX", - "period": 10, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL23.ini b/IOB-WIN-NEXT/DATA/CONF/VL23.ini deleted file mode 100644 index 157237f3..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL23.ini +++ /dev/null @@ -1,68 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina preriscaldo barre per Valvital -CNCTYPE=SIEMENS_PRESSOIL_CEI -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=PRESSOIL_CEI -MODEL=PRESSA_IDRAULICA - -[CNC] -IP=192.168.214.23 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB64.DBB0 -ADDR_WRITE=DB67.DBB0 -SIZE_READ=30 -SIZE_WRITE=770 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB64.DBDW2 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -;GESTIONE DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; conf parametri memoria READ/WRITE -PARAM_CONF=VL23.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL23.json b/IOB-WIN-NEXT/DATA/CONF/VL23.json deleted file mode 100644 index f85395ce..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL23.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "mMapWrite": { - "setArt": { - "name": "setArt", - "description": "Articolo", - "memAddr": "DB67.DBB2", - "tipoMem": "String", - "index": 2, - "size": 20 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "memAddr": "DB67.DBB24", - "tipoMem": "String", - "index": 24, - "size": 20 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB67.DBB46", - "tipoMem": "Dint", - "index": 46, - "size": 4 - } - }, - "mMapRead": { - "Temp_Olio": { - "name": "Temp_Olio", - "description": "Temperatura Olio", - "memAddr": "DB64.DBB6", - "tipoMem": "DWord", - "index": 6, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Power": { - "name": "Power", - "description": "Forza", - "memAddr": "DB64.DBB10", - "tipoMem": "Word", - "index": 10, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "VelAsseSup": { - "name": "VelAsseSup", - "description": "Vel Asse Superiore", - "memAddr": "DB64.DBB12", - "tipoMem": "Word", - "index": 12, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "VelAsseInf": { - "name": "VelAsseInf", - "description": "Vel Asse Inferiore", - "memAddr": "DB64.DBB14", - "tipoMem": "Word", - "index": 14, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Pressione": { - "name": "Pressione", - "description": "Pressione", - "memAddr": "DB64.DBB16", - "tipoMem": "Word", - "index": 16, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Tensione": { - "name": "Tensione", - "description": "Tensione", - "memAddr": "DB64.DBB18", - "tipoMem": "Word", - "index": 18, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Corrente": { - "name": "Corrente", - "description": "Corrente", - "memAddr": "DB64.DBB20", - "tipoMem": "DInt", - "index": 20, - "size": 4, - "func": "MAX", - "period": 60 - }, - "Potenza": { - "name": "Potenza", - "description": "Potenza", - "memAddr": "DB64.DBB24", - "tipoMem": "DInt", - "index": 24, - "size": 4, - "func": "MAX", - "period": 60 - }, - "CosPhi": { - "name": "CosPhi", - "description": "CosPhi", - "memAddr": "DB64.DBB88", - "tipoMem": "Word", - "index": 28, - "size": 2, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} diff --git a/IOB-WIN-NEXT/DATA/CONF/VL24.ini b/IOB-WIN-NEXT/DATA/CONF/VL24.ini deleted file mode 100644 index c30dd66f..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL24.ini +++ /dev/null @@ -1,70 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina preriscaldo barre per Valvital -CNCTYPE=SIEMENS_SAET -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=SAET -MODEL=Preriscaldo_105B08 - -[CNC] -IP=192.168.220.24 -CPUTYPE=S71500 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB1275.DBB0 -ADDR_WRITE=DB1275.DBB92 -SIZE_READ=92 -SIZE_WRITE=56 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -; attenzione memoria sempre base BYTE (1604 DW --> 6416...) -PZCOUNT_MODE=STD.DB1275.DBDW4 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -;GESTIONE DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -NEW_DYN_DATA=TRUE -; conf parametri memoria READ/WRITE -PARAM_CONF=VL24.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL24.json b/IOB-WIN-NEXT/DATA/CONF/VL24.json deleted file mode 100644 index ce58f22e..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL24.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "mMapWrite": { - "setArt": { - "name": "setArt", - "description": "Articolo", - "memAddr": "DB1275.DBB96", - "tipoMem": "String", - "index": 4, - "size": 32 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "memAddr": "DB1275.DBB130", - "tipoMem": "String", - "index": 38, - "size": 12 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB1275.DBB144", - "tipoMem": "DInt", - "index": 52, - "size": 4 - } - }, - "mMapRead": { - "Power_01": { - "name": "Power_01", - "description": "Potenza_ST_1", - "memAddr": "DB1275.DBB24", - "tipoMem": "Real", - "index": 24, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Power_02": { - "name": "Power_02", - "description": "Potenza_ST_2", - "memAddr": "DB1275.DBB28", - "tipoMem": "Real", - "index": 28, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Power_03": { - "name": "Power_03", - "description": "Potenza_ST_3", - "memAddr": "DB1275.DBB32", - "tipoMem": "Real", - "index": 32, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "Power_04": { - "name": "Power_04", - "description": "Potenza_ST_4", - "memAddr": "DB1275.DBB36", - "tipoMem": "Real", - "index": 36, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempPirom_01": { - "name": "TempPirom_01", - "description": "Temperatura_Pirometro_1", - "memAddr": "DB1275.DBB40", - "tipoMem": "Real", - "index": 40, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempPirom_02": { - "name": "TempPirom_02", - "description": "Temperatura_Pirometro_3", - "memAddr": "DB1275.DBB44", - "tipoMem": "Real", - "index": 44, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempPirom_03": { - "name": "TempPirom_03", - "description": "Temperatura_Pirometro_3", - "memAddr": "DB1275.DBB46", - "tipoMem": "Real", - "index": 48, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempPirom_04": { - "name": "TempPirom_04", - "description": "Temperatura_Pirometro_4", - "memAddr": "DB1275.DBB48", - "tipoMem": "Real", - "index": 52, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempCool_01": { - "name": "TempCool_01", - "description": "Temperatura_Raffr_1", - "memAddr": "DB1275.DBB56", - "tipoMem": "Real", - "index": 56, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempCool_02": { - "name": "TempCool_02", - "description": "Temperatura_Raffr_2", - "memAddr": "DB1275.DBB60", - "tipoMem": "Real", - "index": 60, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempCool_03": { - "name": "TempCool_03", - "description": "Temperatura_Raffr_3", - "memAddr": "DB1275.DBB64", - "tipoMem": "Real", - "index": 64, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "TempCool_04": { - "name": "TempCool_04", - "description": "Temperatura_Raffr_4", - "memAddr": "DB1275.DBB68", - "tipoMem": "Real", - "index": 68, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "PartStatus_01": { - "name": "PartStatus_01", - "description": "Pezzo_Staz_1", - "memAddr": "DB1275.DBB72", - "tipoMem": "Int", - "index": 72, - "size": 2, - "func": "MAX", - "period": 60 - }, - "PartStatus_02": { - "name": "PartStatus_02", - "description": "Pezzo_Staz_2", - "memAddr": "DB1275.DBB74", - "tipoMem": "Int", - "index": 74, - "size": 2, - "func": "MAX", - "period": 60 - }, - "PartStatus_03": { - "name": "PartStatus_03", - "description": "Pezzo_Staz_3", - "memAddr": "DB1275.DBB76", - "tipoMem": "Int", - "index": 76, - "size": 2, - "func": "MAX", - "period": 60 - }, - "PartStatus_04": { - "name": "PartStatus_04", - "description": "Pezzo_Staz_4", - "memAddr": "DB1275.DBB78", - "tipoMem": "Int", - "index": 78, - "size": 2, - "func": "MAX", - "period": 60 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL25.ini b/IOB-WIN-NEXT/DATA/CONF/VL25.ini deleted file mode 100644 index 20d7c44f..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL25.ini +++ /dev/null @@ -1,64 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina preriscaldo barre per Valvital -CNCTYPE=SIEMENS_INGENIA -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=INGENIA -MODEL=RobotAutomPressaValvital - -[CNC] -IP=192.168.214.81 -CPUTYPE=S7300 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB700.DBB0 -ADDR_WRITE=DB01.DBB0 -SIZE_READ=44 -SIZE_WRITE=48 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB700.DBDW28 -PZQCTRL_MODE=STD.DB700.DBDW32 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -;GESTIONE DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - -; conf parametri memoria READ/WRITE -PARAM_CONF=VL25.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL25.json b/IOB-WIN-NEXT/DATA/CONF/VL25.json deleted file mode 100644 index 12177afa..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL25.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "mMapWrite": { - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "tipoMem": "DInt", - "memAddr": "DB701.DBB20", - "index": 20, - "size": 4 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB701.DBB24", - "index": 24, - "size": 22 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB701.DBB46", - "index": 46, - "size": 22 - } - }, - "mMapRead": { - "ContatoreAssoluto": { - "name": "ContatoreAssoluto", - "description": "Contapezzi ASSOLUTO", - "memAddr": "DB700.DBB24", - "tipoMem": "DInt", - "index": 24, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContaBuoni": { - "name": "ContaBuoni", - "description": "Contapezzi BUONI", - "memAddr": "DB700.DBB28", - "tipoMem": "DInt", - "index": 28, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContaScartiSaet": { - "name": "ContaScartiSaet", - "description": "Contapezzi SCARTO da SAET", - "memAddr": "DB700.DBB32", - "tipoMem": "DInt", - "index": 32, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContaScartiFreddi": { - "name": "ContaScartiFreddi", - "description": "Contapezzi SCARTO FREDDI", - "memAddr": "DB700.DBB36", - "tipoMem": "DInt", - "index": 36, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContaScartiPressoil": { - "name": "ContaScartiPressoil", - "description": "Contapezzi SCARTO PRESSOIL", - "memAddr": "DB700.DBB40", - "tipoMem": "DInt", - "index": 40, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL26.ini b/IOB-WIN-NEXT/DATA/CONF/VL26.ini deleted file mode 100644 index 418bf7ae..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL26.ini +++ /dev/null @@ -1,64 +0,0 @@ -;Configurazione IOB-WIN -[IOB] -;Macchina taglio barre per Valvital -CNCTYPE=SIEMENS_SIMEC -PING_MS_TIMEOUT=500 - -[MACHINE] -VENDOR=SIMEC -MODEL=180 - -[CNC] -IP=192.168.219.15 -CPUTYPE=S7300 -RACK=0 -SLOT=0 - -[SERVER] -MPIP=http://192.168.214.4 -MPURL=/MP/IO -CMDBASE=/IOB/input/ -CMDFLOG=/IOB/flog/ -CMDALIVE=/IOB -CMDENABLED=/IOB/enabled/ -CMDADV1=?valore= -CMDREBO=/sendReboot.aspx?idxMacchina= - -[MEMORY] -ADDR_READ=DB29.DBB0 -ADDR_WRITE=DB30.DBB0 -SIZE_READ=10 -SIZE_WRITE=40 - - -[BLINK] -;MAX_COUNTER_BLINK = 30 -MAX_COUNTER_BLINK = 15 -;bit0 = 0 -;bit1 = 0 -;bit2 = 1 -;bit3 = 1 -;bit4 = 1 -;bit5 = 0 -;bit6 = 0 -;bit7 = 0 -BLINK_FILT=0 -;BLINK_FILT=28 - -[OPTPAR] -;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB29.DBDW6 -DISABLE_PZCOUNT=FALSE -ENABLE_SEND_PZC_BLOCK=TRUE -MIN_SEND_PZC_BLOCK=0 -MAX_SEND_PZC_BLOCK=100 -; GEST DATI DYN -ENABLE_DYN_DATA=TRUE -FORCE_DYN_DATA=TRUE - - -; conf parametri memoria READ/WRITE -PARAM_CONF=VL26.json - -[BRANCH] -NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/VL26.json b/IOB-WIN-NEXT/DATA/CONF/VL26.json deleted file mode 100644 index 8f4c251e..00000000 --- a/IOB-WIN-NEXT/DATA/CONF/VL26.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "mMapWrite": { - "setProg": { - "name": "setProg", - "description": "Programma", - "tipoMem": "String", - "memAddr": "DB30.DBB20", - "index": 20, - "size": 20 - }, - "setComm": { - "name": "setComm", - "description": "Commessa", - "tipoMem": "String", - "memAddr": "DB30.DBB0", - "index": 0, - "size": 20 - }, - "setArt": { - "name": "setArt", - "description": "Articolo", - "tipoMem": "String", - "memAddr": "DB30.DBB40", - "index": 40, - "size": 20 - }, - "setPzComm": { - "name": "setPzComm", - "description": "Qty", - "memAddr": "DB30.DBB120", - "tipoMem": "DInt", - "index": 120, - "size": 4 - } - }, - "mMapRead": { - "ContatoreAssoluto": { - "name": "ContatoreAssoluto", - "description": "Contapezzi ASSOLUTO", - "memAddr": "DB29.DBB2", - "tipoMem": "DInt", - "index": 2, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - }, - "ContatoreParziale": { - "name": "ContatoreParziale", - "description": "Contapezzi Parziale", - "memAddr": "DB29.DBB6", - "tipoMem": "DInt", - "index": 6, - "size": 4, - "func": "MAX", - "period": 60, - "factor": 1 - } - } -} \ No newline at end of file diff --git a/IOB-WIN-NEXT/connParamS7.cs b/IOB-WIN-NEXT/connParamS7.cs deleted file mode 100644 index 90944ce7..00000000 --- a/IOB-WIN-NEXT/connParamS7.cs +++ /dev/null @@ -1,60 +0,0 @@ -using S7.Net; - -namespace IOB_WIN_NEXT -{ - /// - /// Implementazione classe connessione SIEMENS con S7.net, comprensiva dei parametri delle aree - /// di memoria - /// - public class connParamS7 - { - #region Public Fields - - /// - /// Indirizzo IP del PLC - /// - public string ipAdrr = ""; - - /// - /// Base area x lettura - /// - public string memAddrRead = ""; - - /// - /// Base area x scrittura - /// - public string memAddrWrite = ""; - - /// - /// Size memoria lettura - /// - public int memSizeRead = 0; - - /// - /// Size memoria scrittura - /// - public int memSizeWrite = 0; - - /// - /// Timeout ping - /// - public int pingMsTimeout = 250; - - /// - /// Rack comunicazione - /// - public short rack = 0; - - /// - /// Slot comunicazione - /// - public short slot = 0; - - /// - /// Tipo CPU Siemens - /// - public CpuType tipoCpu = CpuType.S7300; - - #endregion Public Fields - } -} \ No newline at end of file diff --git a/IOB-WIN-OPC-UA/DATA/CONF/STEL_210_alarm.json b/IOB-WIN-OPC-UA/DATA/CONF/STEL_210_alarm.json new file mode 100644 index 00000000..194bc532 --- /dev/null +++ b/IOB-WIN-OPC-UA/DATA/CONF/STEL_210_alarm.json @@ -0,0 +1,108 @@ +[ + { + "description": "Messaggi", + "tipoMem": "UInt", + "memAddr": "NumOfMessages", + "index": 0, + "size": 20, + "blockType": "ActiveList", + "blockLevel": "Warning", + "activeKeys": [ + "MessageCode(0)", + "MessageCode(1)", + "MessageCode(2)", + "MessageCode(3)", + "MessageCode(4)", + "MessageCode(5)", + "MessageCode(6)", + "MessageCode(7)", + "MessageCode(8)", + "MessageCode(9)", + "MessageCode(10)", + "MessageCode(11)", + "MessageCode(12)", + "MessageCode(13)", + "MessageCode(14)", + "MessageCode(15)", + "MessageCode(16)", + "MessageCode(17)", + "MessageCode(18)", + "MessageCode(19)" + ], + "activeValues": [ + "MessageText(0)", + "MessageText(1)", + "MessageText(2)", + "MessageText(3)", + "MessageText(4)", + "MessageText(5)", + "MessageText(6)", + "MessageText(7)", + "MessageText(8)", + "MessageText(9)", + "MessageText(10)", + "MessageText(11)", + "MessageText(12)", + "MessageText(13)", + "MessageText(14)", + "MessageText(15)", + "MessageText(16)", + "MessageText(17)", + "MessageText(18)", + "MessageText(19)" + ] + }, + { + "description": "Allarmi", + "tipoMem": "UInt", + "memAddr": "NumOfAlarms", + "index": 0, + "size": 20, + "blockType": "ActiveList", + "blockLevel": "Alarm", + "activeKeys": [ + "AlarmCode(0)", + "AlarmCode(1)", + "AlarmCode(2)", + "AlarmCode(3)", + "AlarmCode(4)", + "AlarmCode(5)", + "AlarmCode(6)", + "AlarmCode(7)", + "AlarmCode(8)", + "AlarmCode(9)", + "AlarmCode(10)", + "AlarmCode(11)", + "AlarmCode(12)", + "AlarmCode(13)", + "AlarmCode(14)", + "AlarmCode(15)", + "AlarmCode(16)", + "AlarmCode(17)", + "AlarmCode(18)", + "AlarmCode(19)" + ], + "activeValues": [ + "AlarmText(0)", + "AlarmText(1)", + "AlarmText(2)", + "AlarmText(3)", + "AlarmText(4)", + "AlarmText(5)", + "AlarmText(6)", + "AlarmText(7)", + "AlarmText(8)", + "AlarmText(9)", + "AlarmText(10)", + "AlarmText(11)", + "AlarmText(12)", + "AlarmText(13)", + "AlarmText(14)", + "AlarmText(15)", + "AlarmText(16)", + "AlarmText(17)", + "AlarmText(18)", + "AlarmText(19)" + ] + } +] \ No newline at end of file From 95054e1099dcef094e839426ec8e07ad1f17afdf Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 15 Jan 2025 16:09:59 +0100 Subject: [PATCH 4/4] Update yaml x FANUC --- .gitlab-ci.yml | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2799537e..79deaee7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -208,6 +208,19 @@ IOB-WIN:build: script: - '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=Release /p:Platform="x86" /p:OutputPath=bin/ /nodeReuse:false /verbosity:minimal /m' +IOB-WIN-FANUC:build: + stage: build + tags: + - win + variables: + APP_NAME: IOB-WIN-FANUC + before_script: + - *nuget-fix + - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet' + - *version-fix + script: + - '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=Release /p:Platform="x86" /p:OutputPath=bin/ /nodeReuse:false /verbosity:minimal /m' + IOB-WIN-MBUS:build: stage: build tags: @@ -327,6 +340,31 @@ IOB-WIN:release: - *nexusUpload - *SendToVersionsLog +IOB-WIN-FANUC:release: + stage: release + needs: ["IOB-WIN-FANUC:build"] + tags: + - win + variables: + APP_NAME: IOB-WIN-FANUC + NEXUS_PATH: MAPO/IOB-WIN-FANUC + rules: + - if: $CI_COMMIT_BRANCH == 'master' + changes: + - IOB-WIN-FANUC/* + when: always + before_script: + - *nuget-fix + - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet' + - *version-fix + - *cleanup-zip + script: + - '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=Release /p:Platform="x86" /p:OutputPath=bin/ /nodeReuse:false /verbosity:minimal /m' + - *zipper + - *hashBuild + - *nexusUpload + - *SendToVersionsLog + IOB-WIN-MBUS:release: stage: release needs: ["IOB-WIN-MBUS:build"] @@ -526,6 +564,26 @@ IOB-WIN-MBUS:docfx: - mv $env:APP_NAME/_site "docfx" - *DocReplica +IOB-WIN-FANUC:docfx: + stage: docfx + needs: ["IOB-WIN-FANUC:build"] + tags: + - win + variables: + APP_NAME: IOB-WIN-FANUC + rules: + - if: $CI_COMMIT_BRANCH == 'master' + changes: + - IOB-WIN-FANUC/* + when: always + before_script: + - *nuget-fix + - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet' + script: + - docfx $env:APP_NAME/docfx.json + - mv $env:APP_NAME/_site "docfx" + - *DocReplica + IOB-WIN-MTC:docfx: stage: docfx needs: ["IOB-WIN-MTC:build"]