From 76a461e9a86ea7bb103e4c99667e9a277ae8af02 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Wed, 4 May 2016 22:58:06 +0200 Subject: [PATCH] alcune modifiche x riconf gestione strobe e classi varie allarmi demo... --- MTC_Sim/.vs/MTC_Sim/v14/.suo | Bin 136704 -> 119808 bytes MTC_Sim/MTC_Sim/AdapterGeneric.cs | 71 +++++++----- MTC_Sim/MTC_Sim/App.config | 7 +- MTC_Sim/MTC_Sim/Appunti.txt | 5 +- MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs | 38 +++++++ MTC_Sim/MTC_Sim/CMS_MachineSim.cs | 125 ++++++++++++++++----- MTC_Sim/MTC_Sim/CMS_MachineSim.resx | 18 --- MTC_Sim/MTC_Sim/utils.cs | 58 +++++++--- 8 files changed, 232 insertions(+), 90 deletions(-) diff --git a/MTC_Sim/.vs/MTC_Sim/v14/.suo b/MTC_Sim/.vs/MTC_Sim/v14/.suo index 72bc86bd0c63230a609d7f4c35f370e97c51a65a..6ec97ded512f8e549fd518fb29b47cd5c3375552 100644 GIT binary patch delta 8306 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 H_VND)Z(!T> delta 12419 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 diff --git a/MTC_Sim/MTC_Sim/AdapterGeneric.cs b/MTC_Sim/MTC_Sim/AdapterGeneric.cs index e96d8eb..1e5b8a0 100644 --- a/MTC_Sim/MTC_Sim/AdapterGeneric.cs +++ b/MTC_Sim/MTC_Sim/AdapterGeneric.cs @@ -429,8 +429,18 @@ namespace MTC_Sim #region altri oggetti + /// + /// Strobe mask PLC + /// public Strobe STROBE_PLC = 0; + /// + /// Strobe mask adapter + /// public Strobe STROBE_ADP = 0; + /// + /// Status flag + /// + public StatusFlag STATUS_FLAG = 0; public List codaM = new List(); @@ -601,7 +611,7 @@ namespace MTC_Sim mAdapter.AddDataItem(mMode); mAdapter.AddDataItem(mExec); mAdapter.AddDataItem(mFunctionalMode); - + // Pompe vuoto vettVacPump = new VacuumPomp[adpConf.nVacuumPump]; for (int i = 0; i < adpConf.nVacuumPump; i++) @@ -745,38 +755,49 @@ namespace MTC_Sim } /// - /// effettua recupero dati ed invio valori modificati... + /// effettua recupero dati ed invio valori modificati... /// - public void gaterAndSend() + /// + public void gaterAndSend(gatherCycle ciclo) { - // !!!FARE!!!: ripensare se riscrivere con un timer rapido ed un insieme di task preimpostati a scadenza... (al posto di altri timers...) - - // avvio fase raccolta dati mAdapter.Begin(); - // leggo parametri da config file - getConfigParam(); - - ///acquisisco dati su programma in esecuzione e dati generali (stato, orologio, power...) - getCurrProgramData(); - - // fix codici M/S/T - getCodMST(); - - getProduzione(); - - // fix dati x ulteriori (allarmi, modalità RUN/EXEC, ...) + // parte che eseguo SEMPRE: strobe/status + // dati stato macchina (allarmi, modalità RUN/EXEC, ...) getCurrMode(); - getPath(); - - getUnOp(); - - getAxis(); - + // gestione allarmi getAlarms(); + if (ciclo == gatherCycle.HF) + { + + // gestisco strobe... + + // di conseguenza leggo valori variati + + // fix codici M/S/T + getCodMST(); + } + else if (ciclo == gatherCycle.MF) + { + // leggo parametri a media freq (path, assi) + getPath(); + + getUnOp(); + + getAxis(); + } + else + { + // leggo parametri da config file + getConfigParam(); + // bassa freq leggo altri valori... + getProduzione(); + ///acquisisco dati su programma in esecuzione e dati generali (stato, orologio, power...) + getCurrProgramData(); + } // INVIO dati variati! mAdapter.SendChanged(); @@ -802,7 +823,7 @@ namespace MTC_Sim /// public virtual void getAxis() { - + } private void getProduzione() diff --git a/MTC_Sim/MTC_Sim/App.config b/MTC_Sim/MTC_Sim/App.config index 9730627..54dc877 100644 --- a/MTC_Sim/MTC_Sim/App.config +++ b/MTC_Sim/MTC_Sim/App.config @@ -5,10 +5,10 @@ - + - - + + @@ -17,6 +17,7 @@ + diff --git a/MTC_Sim/MTC_Sim/Appunti.txt b/MTC_Sim/MTC_Sim/Appunti.txt index 0a435d9..a0d38d5 100644 --- a/MTC_Sim/MTC_Sim/Appunti.txt +++ b/MTC_Sim/MTC_Sim/Appunti.txt @@ -1,9 +1,12 @@ - +#fix simulation: +- meno frequente modifiche produzione... +- posizione attuale/sim meno "ballerina" # modifica threading - thread molto veloci - eseguo SEMPRE lettura degli STROBE - leggo strobe valori speciali - leggo strobe stato + allarmi + - quando ho lettura minimal/normal/full leggo altri dati OLTRE a strobe - gestione 3 contatori - ho dei contatori a count down x task di HF/MF/LF di ripetizione diff --git a/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs b/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs index 0fad300..0eae262 100644 --- a/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs +++ b/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs @@ -195,6 +195,9 @@ this.lblCodaM = new System.Windows.Forms.Label(); this.addCodM = new System.Windows.Forms.TextBox(); this.label20 = new System.Windows.Forms.Label(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.STATUS_FLAGS = new System.Windows.Forms.TextBox(); + this.label48 = new System.Windows.Forms.Label(); this.groupBox4.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.PosAct)).BeginInit(); this.groupBox3.SuspendLayout(); @@ -216,6 +219,7 @@ this.groupBox10.SuspendLayout(); this.groupBox8.SuspendLayout(); this.groupBox12.SuspendLayout(); + this.groupBox6.SuspendLayout(); this.SuspendLayout(); // // PlcErr_02 @@ -1184,6 +1188,7 @@ // tpStatus // this.tpStatus.BackColor = System.Drawing.Color.WhiteSmoke; + this.tpStatus.Controls.Add(this.groupBox6); this.tpStatus.Controls.Add(this.groupBox1); this.tpStatus.Controls.Add(this.groupBox11); this.tpStatus.Location = new System.Drawing.Point(4, 22); @@ -1830,6 +1835,34 @@ this.label20.TabIndex = 52; this.label20.Text = "AddM"; // + // groupBox6 + // + this.groupBox6.Controls.Add(this.STATUS_FLAGS); + this.groupBox6.Controls.Add(this.label48); + this.groupBox6.Location = new System.Drawing.Point(1, 207); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(773, 75); + this.groupBox6.TabIndex = 58; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "Status & Alarms"; + // + // STATUS_FLAGS + // + this.STATUS_FLAGS.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.STATUS_FLAGS.Location = new System.Drawing.Point(85, 11); + this.STATUS_FLAGS.Name = "STATUS_FLAGS"; + this.STATUS_FLAGS.Size = new System.Drawing.Size(363, 29); + this.STATUS_FLAGS.TabIndex = 53; + // + // label48 + // + this.label48.AutoSize = true; + this.label48.Location = new System.Drawing.Point(15, 19); + this.label48.Name = "label48"; + this.label48.Size = new System.Drawing.Size(32, 13); + this.label48.TabIndex = 52; + this.label48.Text = "Flags"; + // // CMS_MachineSim // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1880,6 +1913,8 @@ this.groupBox8.PerformLayout(); this.groupBox12.ResumeLayout(false); this.groupBox12.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -2053,6 +2088,9 @@ private System.Windows.Forms.Label D1_NAME; private System.Windows.Forms.Label D1_UUID; private System.Windows.Forms.Label D1_ID; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.TextBox STATUS_FLAGS; + private System.Windows.Forms.Label label48; } } diff --git a/MTC_Sim/MTC_Sim/CMS_MachineSim.cs b/MTC_Sim/MTC_Sim/CMS_MachineSim.cs index 332d29a..d0c58e8 100644 --- a/MTC_Sim/MTC_Sim/CMS_MachineSim.cs +++ b/MTC_Sim/MTC_Sim/CMS_MachineSim.cs @@ -139,6 +139,7 @@ namespace MTC_Sim STATUS_PLC_ADP.Text = utils.binaryForm(utils.CRI("STATUS_PLC_ADP")); STATUS_ADP_PLC.Text = utils.binaryForm(utils.CRI("STATUS_ADP_PLC")); + STATUS_FLAGS.Text = utils.binaryForm(utils.CRI("STATUS_FLAGS")); MainProgrBar.Minimum = 0; MainProgrBar.Maximum = 100; @@ -231,14 +232,21 @@ namespace MTC_Sim // inizio a riportare che sto eseguendo.. MainProgrBar.PerformStep(); + // eseguo eventuali simulazioni x dati/flags + simulateData(); + MainProgrBar.PerformStep(); + // check esecuzione FastTask checkFastTask(); + MainProgrBar.PerformStep(); // check esecuzione NormTask checkNormTask(); + MainProgrBar.PerformStep(); // check esecuzione SlowTask checkSlowTask(); + MainProgrBar.PerformStep(); // se è arrivato a MAX resetto... if (MainProgrBar.Value >= MainProgrBar.Maximum) @@ -254,9 +262,13 @@ namespace MTC_Sim { slowCount = 0; + + // avvio fase raccolta dati e invio con adapter + agObj.gaterAndSend(gatherCycle.LF); + MainProgrBar.PerformStep(); + // refresh stringhe code M/S/T refreshCodeMST(); - MainProgrBar.PerformStep(); } } @@ -270,7 +282,7 @@ namespace MTC_Sim normCount = 0; // avvio fase raccolta dati e invio con adapter - agObj.gaterAndSend(); + agObj.gaterAndSend(gatherCycle.MF); MainProgrBar.PerformStep(); } } @@ -283,15 +295,10 @@ namespace MTC_Sim if (fastCount <= 0) { fastCount = 0; + + // avvio fase raccolta dati e invio con adapter + agObj.gaterAndSend(gatherCycle.HF); - // recupero info x strobe - - // recupero info x status - - // recupero info x allarmi... - - // eseguo eventuali simulazioni x dati/flags - simulateData(); MainProgrBar.PerformStep(); } } @@ -303,9 +310,7 @@ namespace MTC_Sim agObj.mMessage.ForceChanged(); agObj.mAdapter.SendChanged(); } - - - + // apro eseguibile dump private void dump_Click(object sender, EventArgs e) { @@ -319,11 +324,7 @@ namespace MTC_Sim Process.Start(string.Format(@"{0}\dump\dump.exe", path)); } } - - - - - + #region classi x simulazione valori vari /// @@ -335,6 +336,7 @@ namespace MTC_Sim { DateTime adesso = DateTime.Now; Random rnd = new Random(); + // 10% casi cambia riga if (rnd.Next(0, 100) > 90) { PROG_ROW_NUM.Text = rnd.Next(1, 10000).ToString(); @@ -344,8 +346,8 @@ namespace MTC_Sim if (agObj.codaS.Count > 0) agObj.STROBE_PLC = agObj.STROBE_PLC | Strobe.S_CODE; if (agObj.codaT.Count > 0) agObj.STROBE_PLC = agObj.STROBE_PLC | Strobe.T_CODE; - // aggiungo 1 pz al totale nel 33% dei casi (-->TC circa 3 x tick)... - if (rnd.Next(0, 100) > 67) + // aggiungo 1 pz al totale nel 0.3% dei casi (-->TC circa 333 x tick)... + if (rnd.Next(0, 1000) > 997) { pzOk++; agObj.STROBE_PLC = agObj.STROBE_PLC | Strobe.PZ_OK; @@ -368,17 +370,74 @@ namespace MTC_Sim } - // cambio power nel 25% dei casi... - if (rnd.Next(0, 100) > 75) + // cambio power nel 15% dei casi... + if (rnd.Next(0, 100) > 85) { Power += rnd.Next(-10, 10); } - // aggiungo 1 min AccTime nel 1.6% dei casi - if (rnd.Next(0, 1000) > 984) + // aggiungo 1 min AccTime nel 0.1% dei casi + if (rnd.Next(0, 1000) > 999) { AccTime++; } + // toggle 1 allarme sys nello 0.5% dei casi + if (rnd.Next(0, 1000) > 995) + { + int codAlarm = rnd.Next(1, 3); + switch (codAlarm) + { + case 1: + SysErr_01.Checked = !SysErr_01.Checked; + break; + case 2: + SysErr_02.Checked = !SysErr_02.Checked; + break; + default: + SysErr_03.Checked = !SysErr_03.Checked; + break; + } + agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.AL01; + } + // toggle 1 allarme PLC nello 0.4% dei casi + if (rnd.Next(0, 1000) > 996) + { + int codAlarm = rnd.Next(1, 3); + switch (codAlarm) + { + case 1: + PlcErr_01.Checked = !PlcErr_01.Checked; + break; + case 2: + PlcErr_02.Checked = !PlcErr_02.Checked; + break; + default: + PlcErr_03.Checked = !PlcErr_03.Checked; + break; + } + agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.AL02; + } + // toggle 1 allarme CNC nello 0.3% dei casi + if (rnd.Next(0, 1000) > 997) + { + int codAlarm = rnd.Next(1, 3); + switch (codAlarm) + { + case 1: + CncErr_01.Checked = !CncErr_01.Checked; + break; + case 2: + CncErr_02.Checked = !CncErr_02.Checked; + break; + default: + CncErr_03.Checked = !CncErr_03.Checked; + break; + } + agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.AL03; + } + + + // controllo se ci sia il flag di lettura di un evento M/S/T nel qual caso lo abbasso... if (utils.IsSetAll(agObj.STROBE_ADP, Strobe.M_CODE)) { @@ -418,6 +477,7 @@ namespace MTC_Sim // aggiorno visualizzazione strobe! STATUS_PLC_ADP.Text = utils.binaryForm((int)agObj.STROBE_PLC); STATUS_ADP_PLC.Text = utils.binaryForm((int)agObj.STROBE_ADP); + STATUS_FLAGS.Text = utils.binaryForm((int)agObj.STATUS_FLAG); } } @@ -653,6 +713,21 @@ namespace MTC_Sim answ.pzKo = pzKo; answ.pzTot = pzOk + pzKo; + // parto vuoto con statusFlag... + agObj.STATUS_FLAG = 0; + // aggiorno status flag in base a valori... + if (answ.EmrStop) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.ESTOP; + if (automatic.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.RM_AUTO; + else if (mdi.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.RM_MDI; + else if (edit.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.RM_EDIT; + else agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.RM_MANUAL; + + if (running.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.EM_RUN; + else if (feedhold.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.EM_FEEDHOLD; + else if (stopped.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.EM_STOP; + else if (ready.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.EM_READY; + if(answ.FuncMode!= "1") agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusFlag.HM; + // ritorno oggetto! return answ; } @@ -882,7 +957,7 @@ namespace MTC_Sim answ.AxisType = AxisType; answ.AxisDir = AxDir.Text; answ.AxisLoad = AxLoad.Value; - answ.AxisPosAct = AxPosition.Value + rnd.Next(-2, 2); + answ.AxisPosAct = AxPosition.Value;// + rnd.Next(-2, 2); answ.AxisPosTgt = AxPosition.Value; answ.AxisFeedAct = AxFeedAct.Value; answ.AxisFeedOver = AxFeedOver.Value; diff --git a/MTC_Sim/MTC_Sim/CMS_MachineSim.resx b/MTC_Sim/MTC_Sim/CMS_MachineSim.resx index 707fc60..d24e7d7 100644 --- a/MTC_Sim/MTC_Sim/CMS_MachineSim.resx +++ b/MTC_Sim/MTC_Sim/CMS_MachineSim.resx @@ -138,24 +138,6 @@ True - - True - - - True - - - True - - - True - - - True - - - True - 104, 17 diff --git a/MTC_Sim/MTC_Sim/utils.cs b/MTC_Sim/MTC_Sim/utils.cs index 37be44d..9b56eb2 100644 --- a/MTC_Sim/MTC_Sim/utils.cs +++ b/MTC_Sim/MTC_Sim/utils.cs @@ -64,6 +64,26 @@ namespace MTC_Sim return ((value & flag) != 0); } /// + /// verifica se un dato bit sia alzato (come flag di strobe) + /// + /// valore da testare + /// valore cercato, può essere un singolo valore o un insieme in modalità AND + /// + public static bool IsSetAll(StatusFlag value, StatusFlag flag) + { + return ((value & flag) == flag); + } + /// + /// verifica se un dato bit sia alzato (come flag di strobe) + /// + /// valore da testare + /// valore cercato, può essere un singolo valore o un insieme in modalità OR + /// + public static bool IsSetAny(StatusFlag value, StatusFlag flag) + { + return ((value & flag) != 0); + } + /// /// formatta un numero in forma binaria 0/1 /// /// @@ -103,7 +123,9 @@ namespace MTC_Sim /// ND } - + /// + /// Sorgente dati (per modalità recupero sw) + /// public enum fonteDati { /// @@ -124,20 +146,20 @@ namespace MTC_Sim Random } - public enum dataReadType + public enum gatherCycle { /// - /// lettura dati rapida e breve (minimo) + /// lettura dati ad alta frequenza /// - minimal, + HF, /// - /// lettura dati standard ma nON completa + /// lettura dati standard /// - normal, + MF, /// - /// lettura dati COMPLETA + /// lettura dati bassa freq /// - full + LF } /// @@ -279,16 +301,16 @@ namespace MTC_Sim public enum StatusFlag : int { NONE = 0, - ST01 = 1 << 0, - ST02 = 1 << 1, - ST03 = 1 << 2, - ST04 = 1 << 3, - ST05 = 1 << 4, - ST06 = 1 << 5, - ST07 = 1 << 6, - ST08 = 1 << 7, - ST09 = 1 << 8, - ST10 = 1 << 9, + ESTOP = 1 << 0, + RM_AUTO = 1 << 1, + RM_MANUAL = 1 << 2, + RM_MDI = 1 << 3, + RM_EDIT = 1 << 4, + EM_RUN = 1 << 5, + EM_READY = 1 << 6, + EM_STOP = 1 << 7, + EM_FEEDHOLD = 1 << 8, + HM = 1 << 9, ST11 = 1 << 10, ST12 = 1 << 11, ST13 = 1 << 12,