From 21c8a12310667c30240d7fec4c9bf7bca60e55ca Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Tue, 10 May 2016 16:22:11 +0200 Subject: [PATCH] Modifiche x gestione allarmi con flag SOLO al cambio fronte + intercept valori da simulatore Fix errore getBit (sostituito con HasFlag) --- AgentBin/simulator/CMS_DEMO.xml | 2 + MTC_Sim/.vs/MTC_Sim/v14/.suo | Bin 168960 -> 175104 bytes MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml | 8 + MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml.bak | 632 ------------------ MTC_Sim/MTC_Sim/AdapterFanuc.cs | 154 +++-- MTC_Sim/MTC_Sim/AdapterGeneric.cs | 52 +- MTC_Sim/MTC_Sim/Appunti.txt | 10 + MTC_Sim/MTC_Sim/SetupAdapter.cs | 2 + MTC_Sim/MTC_Sim/utils.cs | 2 + 9 files changed, 152 insertions(+), 710 deletions(-) delete mode 100644 MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml.bak diff --git a/AgentBin/simulator/CMS_DEMO.xml b/AgentBin/simulator/CMS_DEMO.xml index 65d09b5..5eac7bd 100644 --- a/AgentBin/simulator/CMS_DEMO.xml +++ b/AgentBin/simulator/CMS_DEMO.xml @@ -150,6 +150,8 @@ + + diff --git a/MTC_Sim/.vs/MTC_Sim/v14/.suo b/MTC_Sim/.vs/MTC_Sim/v14/.suo index 249a6bc4b3968ab240d00502810c738d7da93a2f..176111ff449a2527e24fe374e2548cce83075956 100644 GIT binary patch delta 11334 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 delta 9112 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 Q%~{Ud-Azu`@MHA<3#6V`Pyhe` diff --git a/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml b/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml index f633571..c16d2e6 100644 --- a/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml +++ b/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml @@ -233,6 +233,14 @@ Path_01_ActiveAxes STROBE#R10520.3 + + Path_01_CodG_Act + STROBE#R10520.3 + + + Path_01_SubMode + STROBE#R10520.3 + diff --git a/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml.bak b/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml.bak deleted file mode 100644 index 9ecbf8a..0000000 --- a/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml.bak +++ /dev/null @@ -1,632 +0,0 @@ - - - 1 - CMS_ADAPTER_00 - FANUC - - - VacPump_01 - Pompa 1 - Random - - - VacPump_01_Status - 0#7 - - - - - VacPump_02 - Pompa 2 - Random - - - VacPump_02_Status - 0#7 - - - - - - - VacAct_01 - Attuatore vuoto 1 - Random - - - VacAct_01_Count - 0#15 - - - - - VacAct_02 - Attuatore vuoto 2 - Random - - - VacAct_02_Count - 0#15 - - - - - - - Lubro_01 - Lubrorefrigerante 1 - Random - - - Lubro_01_Num - 0#15 - - - - - Lubro_02 - Lubrorefrigerante 2 - Random - - - Lubro_02_Num - 0#15 - - - - - - - Cooler_01 - Cooler 1 - Random - - - Cooler_01_Status - 0#3 - - - - - Cooler_02 - Cooler 2 - Random - - - Cooler_02_Status - 0#3 - - - - - - - Press_01 - Pressostato 1 - Random - - - Press_01_Value - 0#7 - - - - - Press_02 - Pressostato 2 - Random - - - Press_02_Value - 0#7 - - - - - - - Temp_01 - Sonda Temperatura 1 - Random - - - Temp_01_Value - 0#7 - - - - - Temp_02 - Sonda Temperatura 2 - Random - - - Temp_02_Value - 0#7 - - - - - - - Path_01 - Path num 1 - Random - - - Path_01_FeedRate - INT#D8888.0 - - - Path_01_FeedOverr - INT#D8888.0 - - - Path_01_RapidOverr - INT#D8888.0 - - - Path_01_PosActX - FLOAT#D7777.0 - - - Path_01_PosActY - FLOAT#D7777.1 - - - Path_01_PosActZ - FLOAT#D7777.2 - - - Path_01_PosActI - FLOAT#D7777.3 - - - Path_01_PosActJ - FLOAT#D7777.4 - - - Path_01_PosActK - FLOAT#D7777.5 - - - Path_01_Type - FLAG#R10528.12 - - - Path_01_PartId - INT#D9999 - - - Path_01_PZ_TOT - INT#D9999 - - - Path_01_Cod_M - STROBE#R10520.0 - - - Path_01_Cod_S - STROBE#R10520.1 - - - Path_01_Cod_T - STROBE#R10520.2 - - - Path_01_RUN_MODE - FLAG#R10528.1:R10528.7 - - - Path_01_EXE_MODE - FLAG#R10528.8:R10528.11 - - - Path_01_CurrProg - STRING#D0000 - - - Path_01_CurrProg_RowNum - INT#D0001.0 - - - Path_01_ActiveAxes - STROBE#R10520.3 - - - - - - - UnOp_01 - Unita Op num 1 - Random - - - UnOp_01_ToolId - 0#7 - - - UnOp_01_NumCU - 8#15 - - - UnOp_01_Status - 16#23 - - - UnOp_01_VitaRes - 24#31 - - - UnOp_01_Speed - 32#39 - - - UnOp_01_Load - 40#47 - - - UnOp_01_AccTime - 48#55 - - - - - - - Axis_01 - Asse num 1 - Random - - - Axis_01_MainProc - 0#7 - - - Axis_01_IsMast - 8#15 - - - Axis_01_MastId - 16#23 - - - Axis_01_Type - 24#31 - - - Axis_01_Dir - 32#39 - - - Axis_01_Load - 40#47 - - - Axis_01_PosAct - 48#55 - - - Axis_01_PosTgt - 56#63 - - - Axis_01_FeedAct - 64#71 - - - Axis_01_FeedOver - 72#79 - - - Axis_01_AccelAct - 80#87 - - - Axis_01_AccTime - 88#95 - - - Axis_01_Battery - 96#103 - - - - - Axis_02 - Asse num 2 - Random - - - Axis_02_MainProc - 0#7 - - - Axis_02_IsMast - 8#15 - - - Axis_02_MastId - 16#23 - - - Axis_02_Type - 24#31 - - - Axis_02_Dir - 32#39 - - - Axis_02_Load - 40#47 - - - Axis_02_PosAct - 48#55 - - - Axis_02_PosTgt - 56#63 - - - Axis_02_FeedAct - 64#71 - - - Axis_02_FeedOver - 72#79 - - - Axis_02_AccelAct - 80#87 - - - Axis_02_AccTime - 88#95 - - - Axis_02_Battery - 96#103 - - - - - Axis_03 - Asse num 3 - Random - - - Axis_03_MainProc - 0#7 - - - Axis_03_IsMast - 8#15 - - - Axis_03_MastId - 16#23 - - - Axis_03_Type - 24#31 - - - Axis_03_Dir - 32#39 - - - Axis_03_Load - 40#47 - - - Axis_03_PosAct - 48#55 - - - Axis_03_PosTgt - 56#63 - - - Axis_03_FeedAct - 64#71 - - - Axis_03_FeedOver - 72#79 - - - Axis_03_AccelAct - 80#87 - - - Axis_03_AccTime - 88#95 - - - Axis_03_Battery - 96#103 - - - - - Axis_04 - Asse num 4 - Random - - - Axis_04_MainProc - 0#7 - - - Axis_04_IsMast - 8#15 - - - Axis_04_MastId - 16#23 - - - Axis_04_Type - 24#31 - - - Axis_04_Dir - 32#39 - - - Axis_04_Load - 40#47 - - - Axis_04_PosAct - 48#55 - - - Axis_04_PosTgt - 56#63 - - - Axis_04_FeedAct - 64#71 - - - Axis_04_FeedOver - 72#79 - - - Axis_04_AccelAct - 80#87 - - - Axis_04_AccTime - 88#95 - - - Axis_04_Battery - 96#103 - - - - - Axis_05 - Asse num 5 - Random - - - Axis_05_MainProc - 0#7 - - - Axis_05_IsMast - 8#15 - - - Axis_05_MastId - 16#23 - - - Axis_05_Type - 24#31 - - - Axis_05_Dir - 32#39 - - - Axis_05_Load - 40#47 - - - Axis_05_PosAct - 48#55 - - - Axis_05_PosTgt - 56#63 - - - Axis_05_FeedAct - 64#71 - - - Axis_05_FeedOver - 72#79 - - - Axis_05_AccelAct - 80#87 - - - Axis_05_AccTime - 88#95 - - - Axis_05_Battery - 96#103 - - - - - Axis_06 - Asse num 6 - Random - - - Axis_06_MainProc - 0#7 - - - Axis_06_IsMast - 8#15 - - - Axis_06_MastId - 16#23 - - - Axis_06_Type - 24#31 - - - Axis_06_Dir - 32#39 - - - Axis_06_Load - 40#47 - - - Axis_06_PosAct - 48#55 - - - Axis_06_PosTgt - 56#63 - - - Axis_06_FeedAct - 64#71 - - - Axis_06_FeedOver - 72#79 - - - Axis_06_AccelAct - 80#87 - - - Axis_06_AccTime - 88#95 - - - Axis_06_Battery - 96#103 - - - - - \ No newline at end of file diff --git a/MTC_Sim/MTC_Sim/AdapterFanuc.cs b/MTC_Sim/MTC_Sim/AdapterFanuc.cs index 145dbac..013f902 100644 --- a/MTC_Sim/MTC_Sim/AdapterFanuc.cs +++ b/MTC_Sim/MTC_Sim/AdapterFanuc.cs @@ -11,12 +11,6 @@ namespace MTC_Sim { protected FANUC FANUC_ref; -#if false - protected StatusBitMap CurrStatus; - protected StFlag8 Status8; - protected StFlag32 Status32; -#endif - /// /// estende l'init della classe base... /// @@ -83,7 +77,8 @@ namespace MTC_Sim // 2016.05.09 ci sono solo 4 bit x ora da controllare... // check COD_M bitNum = 0; - if (STRB_DW1.getBit(bitNum)) + //if (STRB_DW1.getBit(bitNum)) + if (STRB_DW1.HasFlag((StFlag32)Math.Pow(2, bitNum))) { memIndex = 10660; // recupero tutti i 16+16 bit del blocco @@ -103,7 +98,8 @@ namespace MTC_Sim // check COD_S bitNum = 1; - if (STRB_DW1.getBit(1)) + //if (STRB_DW1.getBit(bitNum)) + if (STRB_DW1.HasFlag((StFlag32)Math.Pow(2, bitNum))) { memIndex = 10682; // recupero tutti i 16+16 bit del blocco @@ -123,7 +119,8 @@ namespace MTC_Sim // check COD_T bitNum = 2; - if (STRB_DW1.getBit(2)) + //if (STRB_DW1.getBit(bitNum)) + if (STRB_DW1.HasFlag((StFlag32)Math.Pow(2, bitNum))) { memIndex = 10694; // recupero tutti i 16+16 bit del blocco @@ -143,7 +140,8 @@ namespace MTC_Sim // check assi assegnati al path 01... bitNum = 3; - if (STRB_DW1.getBit(3)) + //if (STRB_DW1.getBit(bitNum)) + if (STRB_DW1.HasFlag((StFlag32)Math.Pow(2, bitNum))) { // mi basta un solo byte... MemBlock = new byte[1]; @@ -156,7 +154,8 @@ namespace MTC_Sim // spazzo i bit, dove è 1 metto nella stringa degli assi attivi... for (int i = 0; i < 8; i++) { - if (StrobeBlock.getBit(i)) + //if (StrobeBlock.getBit(i)) + if (StrobeBlock.HasFlag((StFlag8)Math.Pow(2, i))) { AssiAttivi += string.Format(" {0}", i); } @@ -183,6 +182,52 @@ namespace MTC_Sim } /// + /// recupera allarmi ed agiorna strobe (privato) degli allarmi + /// + /// 32bit mask degli allarmi da aggiornare + /// boolean: se si debba tornare ACK + public override void refreshAlarmState(StFlag32 Alarm2Refresh, bool giveAck) + { + base.refreshAlarmState(Alarm2Refresh, giveAck); + + // byte di acknowledge... + byte[] retACK_DW0 = new byte[4]; + + if (Alarm2Refresh != StFlag32.NONE) + { + // blocco memoria x lettura dati + byte[] MemBlock = new byte[4]; + // primo blocco memoria allarmi + int memIndex = 10532; + // verifico gli allarmi di tutti i bit alzati... + for (int i = 0; i < 32; i++) + { + if (Alarm2Refresh.HasFlag((StFlag32)Math.Pow(2, i))) + { + // recupero tutti i 32 bit del blocco + FANUC_ref.F_RW_Byte(R, FANUC.MemType.R, memIndex + i * 4, ref MemBlock); + // aggiorno nel vettore allarmi i byte interessati + for (int j = 0; j < 4; j++) + { + AlarmFlags[i * 4 + j] = MemBlock[j]; + } + //AlarmFlags.SetValue(MemBlock, i * 4); + + // segnalo allarme letto! memorizzo allarme nel vettore ack.... + retACK_DW0 = utils.setBitOnStFlag(retACK_DW0, 1, i); + + } + } + if (giveAck) + { + // mi preparo a scrivere ACK + memIndex = 10500; + // scrivo update ad ack!!! + FANUC_ref.F_RW_Byte(W, FANUC.MemType.R, memIndex, ref retACK_DW0); + } + } + } + /// /// processing strobe degli allarmi /// public override void processAlarm() @@ -191,72 +236,43 @@ namespace MTC_Sim // se non sono connesso esco if (!FANUC_ref.Connected) return; - // procedo! - int memIndex = 0; // byte di acknowledge... byte[] retACK_DW0 = new byte[4]; - // controllo TUTTI i flag: se ce ne sono di alzati DEVO processare... - if (STRB_DW0 != StFlag32.NONE) + + // faccio refresh degli allarmi segnalati + refreshAlarmState(STRB_DW0, true); + + // variabili helper + StFlag32 AlarmBlock = 0; + allarme currAllarm; + // controllo TUTTI i bit della variabile COMPLETA degli status allarmi: se ce ne sono di alzati DEVO processare... + for (int i = 0; i < AlarmFlags.Length / 4; i++) { - // blocco memoria x lettura dati - byte[] MemBlock = new byte[4]; - StFlag32 AlarmBlock = 0; - allarme currAllarm; - // primo blocco memoria allarmi - memIndex = 10532; - // verifico gli allarmi di tutti i bit alzati... - for (int i = 0; i < 32; i++) + // leggo 32bit alla volta... + AlarmBlock = (StFlag32)BitConverter.ToUInt32(AlarmFlags, i * 4); + + for (int j = 0; j < 32; j++) { - if (STRB_DW0.getBit(i)) + // converto! e aggiungo allarmi sollevati al corretto controller allarmi... + //if (AlarmBlock.getBit(j)) + if (AlarmBlock.HasFlag((StFlag32)Math.Pow(2, j))) { - // recupero tutti i 32 bit del blocco - FANUC_ref.F_RW_Byte(R, FANUC.MemType.R, memIndex + i * 4, ref MemBlock); - AlarmBlock = (StFlag32)BitConverter.ToUInt32(MemBlock, 0); - for (int j = 0; j < 32; j++) + // recupero allarme da oggetto in memoria... + currAllarm = elencoAllarmi[i * 32 + j]; + // in base al gruppo decido dove assegnare come CONDITION... + switch (currAllarm.gruppo) { - // converto! - // e aggiungo allarmi sollevati al corretto controller allarmi... - if (AlarmBlock.getBit(j)) - { - // recupero allarme da oggetto in memoria... - currAllarm = elencoAllarmi[i * 32 + j]; - // in base al gruppo decido dove assegnare come CONDITION... - switch (currAllarm.gruppo) - { - case "PLC": - mAlarmPLC.Add(MTConnect.Condition.Level.FAULT, currAllarm.descrizione, currAllarm.codNum, "", ""); - break; - case "CNC": - default: - mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, currAllarm.descrizione, currAllarm.codNum, "", ""); - break; - } - } + case "PLC": + mAlarmPLC.Add(MTConnect.Condition.Level.FAULT, currAllarm.descrizione, currAllarm.codNum, "", ""); + break; + case "CNC": + default: + mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, currAllarm.descrizione, currAllarm.codNum, "", ""); + break; } - // memorizzo allarme nel vettore ack.... - retACK_DW0 = utils.setBitOnStFlag(retACK_DW0, 1, i); } -#if false - else - { - // abbasso eventuali flag di ack se non ne ho + dall'altro caso... - retACK_DW0 = utils.setBitOnStFlag(retACK_DW0, 0, i); - } -#endif } } - else - { - // se mi sono rimasti degli strobe di lettura allarmi alzati li abbasso - if (ACK_DW0 != StFlag32.NONE) - { - // inizializzo 4 byte a zero!!! - retACK_DW0 = new byte[4]; - } - } - memIndex = 10500; - // scrivo update ad ack!!! - FANUC_ref.F_RW_Byte(W, FANUC.MemType.R, memIndex, ref retACK_DW0); } /// /// processing! @@ -366,7 +382,7 @@ namespace MTC_Sim // !!!FARE!!! recuperare davvero dai dati del CNC e sostituire NA mOperator.Value = "NA"; - + // recupero SEMPRE dati ulteriori: status ON/OFF, clock, ... mStatus.Value = "NA"; mAccTime.Value = "NA"; @@ -382,7 +398,7 @@ namespace MTC_Sim public override void getPath() { base.getPath(); - + #if false // byte x lettura memoria... 8byte --> 64 bit! diff --git a/MTC_Sim/MTC_Sim/AdapterGeneric.cs b/MTC_Sim/MTC_Sim/AdapterGeneric.cs index 987312c..b08ce6f 100644 --- a/MTC_Sim/MTC_Sim/AdapterGeneric.cs +++ b/MTC_Sim/MTC_Sim/AdapterGeneric.cs @@ -285,6 +285,14 @@ namespace MTC_Sim /// public Sample mPathPosActK; /// + /// Stato dei codici G attivi + /// + public Event mPathCodG_Act; + /// + /// Stato dei SubMode attivi + /// + public Event mPathSubMode; + /// /// Allarmi CNC del PATH /// public Condition mPathAlarmCNC; @@ -327,6 +335,8 @@ namespace MTC_Sim mPathCurrProg = new Event(dataRefList[17].Key); mPathCurrProgRowNum = new Event(dataRefList[18].Key); mPathActiveAxes = new Event(dataRefList[19].Key); + mPathCodG_Act = new Event(dataRefList[20].Key); + mPathSubMode = new Event(dataRefList[21].Key); mPathAlarmCNC = new Condition(string.Format("{0}_AlarmCNC", ident)); mPathAlarmPLC = new Condition(string.Format("{0}_AlarmPLC", ident)); } @@ -518,6 +528,15 @@ namespace MTC_Sim // 16 bit di strobe in risposta (4 word da 32 bit di flags...) public byte[] Acknowl = new byte[16]; + // 1024 bit di strobe degli allarmi attivi (32 word da 4byte/32 bit di flags...) + public byte[] AlarmFlags; + + /// + /// Oggetto elenco allarmi + /// + public allarme[] elencoAllarmi; + + /// /// Prima word di strobe da array flag completo /// @@ -600,10 +619,6 @@ namespace MTC_Sim return (StFlag32)BitConverter.ToUInt32(Acknowl, 12); } } - /// - /// Oggetto elenco allarmi - /// - public allarme[] elencoAllarmi; #if true @@ -622,7 +637,7 @@ namespace MTC_Sim /// /// Variabili stato macchina principali /// - public StFlag8 ST_MACCH = 0; + public StFlag8 ST_MACCH = 0; #endif @@ -714,8 +729,6 @@ namespace MTC_Sim // salvo al form chiamante parentForm = caller; - loadAllarmi(); - // item disponibilità mAdapter.AddDataItem(mAvail); mAvail.Value = "AVAILABLE"; @@ -886,6 +899,11 @@ namespace MTC_Sim file.Close(); // ora trimmo vettore al solo numero VERO degli allarmi caricati... Array.Resize(ref elencoAllarmi, rumRiga); + + // inizializzo a zero il vettore allarmi... + int numByte = (int)Math.Ceiling(Convert.ToDecimal(rumRiga) / 8); + AlarmFlags = new byte[numByte]; + } /// /// Decodifica file allarme @@ -907,6 +925,13 @@ namespace MTC_Sim /// public virtual void startAdapter(int port) { + // inizializzo vettori di utility.. + loadAllarmi(); + + // carico status allarmi (completo) + StFlag32 forceAlarm = (StFlag32)unchecked((int)UInt32.MaxValue); + refreshAlarmState(forceAlarm, false); + // Start the adapter lib with the port number in the text box mAdapter.Port = port; mAdapter.Start(); @@ -920,6 +945,15 @@ namespace MTC_Sim mAlarmCNC.Normal(); mAlarmGeneral.Normal(); } + /// + /// Effettua refresh del vettore privato degli allarmi attivi + /// + /// flag mask degli allarmi da aggiornare + /// boolean: se si debba tornare ACK + public virtual void refreshAlarmState(StFlag32 Alarm2Refresh, bool giveAck) + { + // carco lo stato di tutti gli allarmi... forzo a 1 il flag degli allarmi + } /// /// ferma l'adapter... @@ -1005,7 +1039,7 @@ namespace MTC_Sim { } - + /// /// verifica gli status attivi @@ -1150,7 +1184,7 @@ namespace MTC_Sim return answ; } } - + /// /// recupera pezzi OK (fare override!) /// diff --git a/MTC_Sim/MTC_Sim/Appunti.txt b/MTC_Sim/MTC_Sim/Appunti.txt index f1aacc7..c452168 100644 --- a/MTC_Sim/MTC_Sim/Appunti.txt +++ b/MTC_Sim/MTC_Sim/Appunti.txt @@ -6,3 +6,13 @@ ATTENZIONE: aggiungere pos memoria x status e strobe x path Aggiungere condition (1) x ogni path e x ogni asse + + +- chiusura app --> FANUC_ref.disconnect + +1) rivedere GetBit (cambiare!!!) +2) strobe allarmi --> su cambio fronte --> serve vettore stato COMPLETO allarmi +3) lo strobe allarmi va inizializzato all'avvio (carica TUTTI i bit...) +4) da strobe allarmi --> vettore allarmi +5) CodS 5 cifre +6) CodM/CodT 3 cifre diff --git a/MTC_Sim/MTC_Sim/SetupAdapter.cs b/MTC_Sim/MTC_Sim/SetupAdapter.cs index 41c457e..4727bcd 100644 --- a/MTC_Sim/MTC_Sim/SetupAdapter.cs +++ b/MTC_Sim/MTC_Sim/SetupAdapter.cs @@ -357,6 +357,8 @@ namespace MTC_Sim listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_CurrProg", i + 1), "STRING#D0000")); listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_CurrProg_RowNum", i + 1), "INT#D0001.0")); listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_ActiveAxes", i + 1), "STROBE#R10520.3")); + listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_CodG_Act", i + 1), "STROBE#xxx")); + listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_SubMode", i + 1), "STROBE#xxx")); Path[i] = new element(string.Format("Path_{0:00}", i + 1), string.Format("Path num {0}", i + 1), fonteDati.Random, listaDR); } diff --git a/MTC_Sim/MTC_Sim/utils.cs b/MTC_Sim/MTC_Sim/utils.cs index b1d412d..222cfe0 100644 --- a/MTC_Sim/MTC_Sim/utils.cs +++ b/MTC_Sim/MTC_Sim/utils.cs @@ -228,6 +228,8 @@ namespace MTC_Sim public string ProgrRow; public string PartId; public string ActiveAxes; + public string CodG_Act; + public string SubMode; public int PathFeedrate; public int PathFeedrateOver;