diff --git a/AgentBin/simulator/CMS_DEMO.xml b/AgentBin/simulator/CMS_DEMO.xml
index d441180..c42dde0 100644
--- a/AgentBin/simulator/CMS_DEMO.xml
+++ b/AgentBin/simulator/CMS_DEMO.xml
@@ -12,6 +12,7 @@
+
@@ -152,7 +153,6 @@
-
diff --git a/MTC_Sim/.vs/MTC_Sim/v14/.suo b/MTC_Sim/.vs/MTC_Sim/v14/.suo
index d3fd767..8bc4f4a 100644
Binary files a/MTC_Sim/.vs/MTC_Sim/v14/.suo and b/MTC_Sim/.vs/MTC_Sim/v14/.suo differ
diff --git a/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml b/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml
index 833f715..e8a1c26 100644
--- a/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml
+++ b/MTC_Sim/MTC_Sim/AdapterConf/CMS_FANUC.xml
@@ -241,10 +241,6 @@
Path_01_SubMode
FLAG#R10528.0:R10531.7
-
- Path_01_UserAction
- STROBE#R10520.4:R10520.6
-
diff --git a/MTC_Sim/MTC_Sim/AdapterConf/Demo.xml b/MTC_Sim/MTC_Sim/AdapterConf/Demo.xml
index 5b1babd..1e6f3e3 100644
--- a/MTC_Sim/MTC_Sim/AdapterConf/Demo.xml
+++ b/MTC_Sim/MTC_Sim/AdapterConf/Demo.xml
@@ -1,9 +1,8 @@
- Demo
1
CMS_ADAPTER_00
- Demo
+ DEMO
VacPump_01
@@ -33,7 +32,7 @@
VacAct_01
Attuatore vuoto 1
Random
-
+ ù
VacAct_01_Count
0#15
@@ -156,39 +155,91 @@
Path_01_FeedRate
- 0#15
+ INT#D8888.0
Path_01_FeedOverr
- 16#31
+ INT#D8888.0
- Path_01_SpeedOverr
- 32#47
+ Path_01_RapidOverr
+ INT#D8888.0
Path_01_PosActX
- 48#63
+ FLOAT#D7777.0
Path_01_PosActY
- 64#79
+ FLOAT#D7777.1
Path_01_PosActZ
- 80#95
+ FLOAT#D7777.2
Path_01_PosActI
- 96#111
+ FLOAT#D7777.3
Path_01_PosActJ
- 112#127
+ FLOAT#D7777.4
Path_01_PosActK
- 128#143
+ 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
+ CLASS
+
+
+ Path_01_CodG_Act
+ CLASS
+
+
+ Path_01_SubMode
+ FLAG#R10528.0:R10531.7
diff --git a/MTC_Sim/MTC_Sim/AdapterDemo.cs b/MTC_Sim/MTC_Sim/AdapterDemo.cs
index 4ce555b..fcbfd8c 100644
--- a/MTC_Sim/MTC_Sim/AdapterDemo.cs
+++ b/MTC_Sim/MTC_Sim/AdapterDemo.cs
@@ -19,6 +19,7 @@ namespace MTC_Sim
///
public AdapterDemo(CMS_MachineSim caller, AdapterConf adpConf) : base(caller, adpConf)
{
+ if (utils.CRB("verbose")) lg.Info("Start init Adapter DEMO");
// IMPLICITO: carica da metodo base tutte le specifiche del conf...
@@ -83,55 +84,22 @@ namespace MTC_Sim
}
- protected void addSystemAlarm(int numAllarme)
- {
- mAlarmSystem.Add(Condition.Level.FAULT, string.Format("ERR_{0:###}: Errore", numAllarme), string.Format("ERR_{0:###}", numAllarme));
- }
- protected void addPlcAlarm(int numAllarme)
- {
- mAlarmPLC.Add(Condition.Level.FAULT, string.Format("ERR_{0:###}: Errore", numAllarme), string.Format("ERR_{0:###}", numAllarme));
- }
- protected void addCncAlarm(int numAllarme)
- {
- mAlarmCNC.Add(Condition.Level.FAULT, string.Format("ERR_{0:###}: Errore", numAllarme), string.Format("ERR_{0:###}", numAllarme));
- }
- protected void addGenericAlarm(DataRefItem allarme)
- {
- mAlarmGeneral.Add(Condition.Level.FAULT, string.Format("ERR_{0:###}: Errore {1}", allarme.Key, allarme.Value), string.Format("ERR_{0:###}_{1}", allarme.Key, allarme.Value));
- }
-
public override void processStrobe()
{
base.processStrobe();
-
- if (parentForm.systemAlarm.Count > 0)
- {
- foreach (Int32 alarm in parentForm.systemAlarm)
- {
- addSystemAlarm(alarm);
- }
- }
- if (parentForm.plcAlarm.Count > 0)
- {
- foreach (Int32 alarm in parentForm.plcAlarm)
- {
- addPlcAlarm(alarm);
- }
- }
- if (parentForm.cncAlarm.Count > 0)
- {
- foreach (Int32 alarm in parentForm.cncAlarm)
- {
- addCncAlarm(alarm);
- }
- }
- if (parentForm.genericAlarm.Count > 0)
- {
- foreach (DataRefItem alarm in parentForm.genericAlarm)
- {
- addGenericAlarm(alarm);
- }
- }
+ // qui forzo la gestione di update dei path & co...
+ getPath();
+ getUnOp();
+ getAxis();
+ }
+ ///
+ /// non fa nulla perché recupera allarmi in vettore al singolo cambio...
+ ///
+ ///
+ ///
+ public override void refreshAlarmState(StFlag32 Alarm2Refresh, bool giveAck)
+ {
+ base.refreshAlarmState(Alarm2Refresh, giveAck);
}
public override void getPath()
diff --git a/MTC_Sim/MTC_Sim/AdapterFanuc.cs b/MTC_Sim/MTC_Sim/AdapterFanuc.cs
index ca34d9b..2f94a4e 100644
--- a/MTC_Sim/MTC_Sim/AdapterFanuc.cs
+++ b/MTC_Sim/MTC_Sim/AdapterFanuc.cs
@@ -23,7 +23,7 @@ namespace MTC_Sim
FANUC_ref = (FANUC)Runtime.NC;
if (utils.CRB("verbose")) lg.Info("FANUC_ref da CMSCncLib");
-
+
// disconnetto e connetto...
if (utils.CRB("verbose")) lg.Info("FANUC: tryDisconnect");
tryDisconnect();
@@ -177,7 +177,7 @@ namespace MTC_Sim
reloadDataFromFile();
// memorizzo allarme nel vettore ack....
- retACK_DW1 = utils.setBitOnStFlag(retACK_DW1, 1, bitNum);
+ retACK_DW1 = utils.setBitOnStFlag(retACK_DW1, true, bitNum);
}
// AREA strobe USER ACTION
@@ -193,7 +193,7 @@ namespace MTC_Sim
gestStrobeUserAction(bitNum, ref retACK_DW1, ref UserAction, "# RESET # ");
// se ci sono state azioni (1 o +) le invio...
- if (UserAction != "") vettPath[idxPath].mPathUserAction.Value = UserAction.Trim();
+ if (UserAction != "") mUserAction.Value = UserAction.Trim();
}
else
{
@@ -241,7 +241,7 @@ namespace MTC_Sim
}
}
// memorizzo allarme nel vettore ack....
- retACK_DW1 = utils.setBitOnStFlag(retACK_DW1, 1, bitNum);
+ retACK_DW1 = utils.setBitOnStFlag(retACK_DW1, true, bitNum);
}
}
///
@@ -266,7 +266,7 @@ namespace MTC_Sim
// salvo evento UserAction in variabile...
UserAction += azione;
// memorizzo allarme nel vettore ack....
- retACK_DW1 = utils.setBitOnStFlag(retACK_DW1, 1, bitNum);
+ retACK_DW1 = utils.setBitOnStFlag(retACK_DW1, true, bitNum);
}
}
///
@@ -338,7 +338,7 @@ namespace MTC_Sim
}
// segnalo allarme letto! memorizzo allarme nel vettore ack....
- retACK_DW0 = utils.setBitOnStFlag(retACK_DW0, 1, i);
+ retACK_DW0 = utils.setBitOnStFlag(retACK_DW0, true, i);
}
}
// scrivo ack se richiesto!!!
@@ -380,47 +380,13 @@ namespace MTC_Sim
}
}
}
- ///
- /// processing strobe degli allarmi
- ///
- public override void processAlarm()
- {
- base.processAlarm();
-
- if (AlarmFlags != null)
- {
- // 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++)
- {
- // leggo 32bit alla volta...
- AlarmBlock = (StFlag32)BitConverter.ToUInt32(AlarmFlags, i * 4);
-
- for (int j = 0; j < 32; j++)
- {
- // converto! e aggiungo allarmi sollevati al corretto controller allarmi...
- if (AlarmBlock.HasFlag((StFlag32)Math.Pow(2, 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;
- }
- }
- }
- }
- }
- }
+ /////
+ ///// processing strobe degli allarmi
+ /////
+ //public override void processAlarm()
+ //{
+ // base.processAlarm();
+ //}
///
/// processing!
///
diff --git a/MTC_Sim/MTC_Sim/AdapterGeneric.cs b/MTC_Sim/MTC_Sim/AdapterGeneric.cs
index 0a73453..4c77533 100644
--- a/MTC_Sim/MTC_Sim/AdapterGeneric.cs
+++ b/MTC_Sim/MTC_Sim/AdapterGeneric.cs
@@ -293,10 +293,6 @@ namespace MTC_Sim
///
public Event mPathSubMode;
///
- /// Azione utente START/STOP/RESET
- ///
- public Event mPathUserAction;
- ///
/// Allarmi CNC del PATH
///
public Condition mPathAlarmCNC;
@@ -341,7 +337,6 @@ namespace MTC_Sim
mPathActiveAxes = new Event(dataRefList[19].Key);
mPathCodG_Act = new Event(dataRefList[20].Key);
mPathSubMode = new Event(dataRefList[21].Key);
- mPathUserAction = new Event(dataRefList[22].Key);
mPathAlarmCNC = new Condition(string.Format("{0}_AlarmCNC", ident));
mPathAlarmPLC = new Condition(string.Format("{0}_AlarmPLC", ident));
}
@@ -689,6 +684,10 @@ namespace MTC_Sim
/// modalità funzionale
///
public Event mFunctionalMode = new Event("FUNCT_MODE");
+ ///
+ /// Azioni operatore (Start/Stop/reset)
+ ///
+ public Event mUserAction = new Event("UserAction");
@@ -758,6 +757,7 @@ namespace MTC_Sim
// modalità esecutiva e funzionale
mAdapter.AddDataItem(mFunctionalMode);
+ mAdapter.AddDataItem(mUserAction);
// Pompe vuoto
vettVacPump = new VacuumPomp[adpConf.nVacuumPump];
@@ -812,6 +812,7 @@ namespace MTC_Sim
for (int i = 0; i < adpConf.nPath; i++)
{
vettPath[i] = new Path(adpConf.Path[i]);
+ mAdapter.AddDataItem(vettPath[i].mPathAlias);
mAdapter.AddDataItem(vettPath[i].mPathFeed);
mAdapter.AddDataItem(vettPath[i].mPathFeedOver);
mAdapter.AddDataItem(vettPath[i].mPathRapidOver);
@@ -833,7 +834,12 @@ namespace MTC_Sim
mAdapter.AddDataItem(vettPath[i].mPathCurrProg);
mAdapter.AddDataItem(vettPath[i].mPathCurrProgRowNum);
mAdapter.AddDataItem(vettPath[i].mPathActiveAxes);
+ mAdapter.AddDataItem(vettPath[i].mPathCodG_Act);
+ mAdapter.AddDataItem(vettPath[i].mPathSubMode);
// aggiungo condizioni allarme...
+ mAdapter.AddDataItem(vettPath[i].mPathAlarmCNC);
+ mAdapter.AddDataItem(vettPath[i].mPathAlarmPLC);
+ // altre aggiunte
}
// UnOp
@@ -932,7 +938,7 @@ namespace MTC_Sim
string linea;
totRighe = File.ReadLines(fileName).Count();
// inizializzo
- elencoSubMode.Clear();
+ elencoSubMode = new Dictionary();
// carica da file...
System.IO.StreamReader file = new System.IO.StreamReader(fileName);
// leggo 1 linea alla volta...
@@ -1219,7 +1225,39 @@ namespace MTC_Sim
///
public virtual void processAlarm()
{
- // da gestire su ogni adapter...
+ if (AlarmFlags != null)
+ {
+ // 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++)
+ {
+ // leggo 32bit alla volta...
+ AlarmBlock = (StFlag32)BitConverter.ToUInt32(AlarmFlags, i * 4);
+
+ for (int j = 0; j < 32; j++)
+ {
+ // converto! e aggiungo allarmi sollevati al corretto controller allarmi...
+ if (AlarmBlock.HasFlag((StFlag32)Math.Pow(2, 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;
+ }
+ }
+ }
+ }
+ }
}
///
@@ -1250,45 +1288,6 @@ namespace MTC_Sim
public void checkPath()
{
-#if false
- // controllo feed e velocità
- if (utils.IsSetAny(STROBE_PLC, Strobe.FEED_SPEED))
- {
- // leggo i valori feed/speed
- mPathFeed.Value = FeedRate;
- mPathFeedOver.Value = FeedRateOver;
- mPathSpeedOver.Value = SpeedRateOver;
-
- // alzo flag lettura...
- if (utils.IsSetAll(STROBE_PLC, Strobe.FEED_SPEED)) STROBE_ADP = STROBE_ADP | Strobe.FEED_SPEED;
-
- }
- else
- {
- // resetto eventuali flag di lettura...
- if (utils.IsSetAll(STROBE_ADP, Strobe.FEED_SPEED)) STROBE_ADP -= Strobe.FEED_SPEED;
- }
-
- // controllo posizione...
- if (utils.IsSetAny(STROBE_PLC, Strobe.POS_ACT))
- {
- // leggo i valori posizione attuale
- mPathPosActX.Value = PosAct.x;
- mPathPosActY.Value = PosAct.y;
- mPathPosActZ.Value = PosAct.z;
- mPathPosActI.Value = PosAct.i;
- mPathPosActJ.Value = PosAct.j;
- mPathPosActK.Value = PosAct.k;
-
- // alzo flag lettura...
- if (utils.IsSetAll(STROBE_PLC, Strobe.POS_ACT)) STROBE_ADP = STROBE_ADP | Strobe.POS_ACT;
- }
- else
- {
- // resetto eventuali flag di lettura...
- if (utils.IsSetAll(STROBE_ADP, Strobe.POS_ACT)) STROBE_ADP -= Strobe.POS_ACT;
- }
-#endif
}
///
diff --git a/MTC_Sim/MTC_Sim/Appunti.txt b/MTC_Sim/MTC_Sim/Appunti.txt
index fb2dd75..a6cbe3c 100644
--- a/MTC_Sim/MTC_Sim/Appunti.txt
+++ b/MTC_Sim/MTC_Sim/Appunti.txt
@@ -1,33 +1,18 @@
-#fix simulation:
-- meno frequente modifiche produzione...
-- posizione attuale/sim meno "ballerina"
-
-
-
-ATTENZIONE: aggiungere pos memoria x status e strobe x path
-
- 0) chiusura app --> FANUC_ref.disconnect
-OK 1) rivedere GetBit (cambiare!!!)
-OK 2) strobe allarmi --> su cambio fronte --> serve vettore stato COMPLETO allarmi
-OK 3) lo strobe allarmi va inizializzato all'avvio (carica TUTTI i bit...)
-OK 4) da strobe allarmi --> vettore allarmi
-OK 5) CodS 5 cifre
-OK 6) CodM/CodT 3 cifre
- 7) lettura assi: vedere in progetto CMSConnect in OpPanel di FANUC la RefreshAxisNames()
- 8) lettura strobe e registrazione NUOVO flusso EVENT x START/STOP/RESET (1 solo con 3 strobe separati) -->gestire!!!
-
-
-Classi x lettura assi
-
-feedrate C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\CMS_orig\A02B-0207-K737_04.20\Document\SpecE\Position\cnc_actf.htm
-pos abs C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\CMS_orig\A02B-0207-K737_04.20\Document\SpecE\Position\cnc_absolute2.htm
-
-ALL? C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\CMS_orig\A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdaxisdata.htm
+OK 00) chiusura app --> FANUC_ref.disconnect
+OK 01) rivedere GetBit (cambiare!!!)
+OK 02) strobe allarmi --> su cambio fronte --> serve vettore stato COMPLETO allarmi
+OK 03) lo strobe allarmi va inizializzato all'avvio (carica TUTTI i bit...)
+OK 04) da strobe allarmi --> vettore allarmi
+OK 05) CodS 5 cifre
+OK 06) CodM/CodT 3 cifre
+ 07) lettura assi: vedere in progetto CMSConnect in OpPanel di FANUC la RefreshAxisNames()
+ - feedrate C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\CMS_orig\A02B-0207-K737_04.20\Document\SpecE\Position\cnc_actf.htm
+ - pos abs C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\CMS_orig\A02B-0207-K737_04.20\Document\SpecE\Position\cnc_absolute2.htm
+ - ALL? C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\CMS_orig\A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdaxisdata.htm
+OK 08) lettura strobe e registrazione NUOVO flusso EVENT x START/STOP/RESET (1 solo con 3 strobe separati) --> gestire!!!
+OK 09) update gestione SUB MODE
+OK 10) riallineamento simulatore generico
-
-- update gestione SUB MODE
-- update gestione 4 nuovi strobe
-- riallineamento simulatore generico
\ No newline at end of file
diff --git a/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs b/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs
index 40d270b..9f6969f 100644
--- a/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs
+++ b/MTC_Sim/MTC_Sim/CMS_MachineSim.Designer.cs
@@ -137,6 +137,12 @@
this.tabCtrlMain = new System.Windows.Forms.TabControl();
this.tpStatus = new System.Windows.Forms.TabPage();
this.groupBox6 = new System.Windows.Forms.GroupBox();
+ this.STATUS_ACK_DW3 = new System.Windows.Forms.TextBox();
+ this.label52 = new System.Windows.Forms.Label();
+ this.STATUS_ACK_DW2 = new System.Windows.Forms.TextBox();
+ this.label51 = new System.Windows.Forms.Label();
+ this.STATUS_ACK_DW1 = new System.Windows.Forms.TextBox();
+ this.label50 = new System.Windows.Forms.Label();
this.STATUS_ACK_DW0 = new System.Windows.Forms.TextBox();
this.label48 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
@@ -202,12 +208,7 @@
this.lblCodaM = new System.Windows.Forms.Label();
this.addCodM = new System.Windows.Forms.TextBox();
this.label20 = new System.Windows.Forms.Label();
- this.STATUS_ACK_DW1 = new System.Windows.Forms.TextBox();
- this.label50 = new System.Windows.Forms.Label();
- this.STATUS_ACK_DW2 = new System.Windows.Forms.TextBox();
- this.label51 = new System.Windows.Forms.Label();
- this.STATUS_ACK_DW3 = new System.Windows.Forms.TextBox();
- this.label52 = new System.Windows.Forms.Label();
+ this.ErrRT_03 = new System.Windows.Forms.CheckBox();
this.groupBox4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.PosAct)).BeginInit();
this.groupBox3.SuspendLayout();
@@ -239,8 +240,9 @@
this.PlcErr_02.Name = "PlcErr_02";
this.PlcErr_02.Size = new System.Drawing.Size(72, 17);
this.PlcErr_02.TabIndex = 6;
- this.PlcErr_02.Text = "PlcErr_02";
+ this.PlcErr_02.Text = "PlcErr_05";
this.PlcErr_02.UseVisualStyleBackColor = true;
+ this.PlcErr_02.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// gather
//
@@ -451,8 +453,9 @@
this.PlcErr_03.Name = "PlcErr_03";
this.PlcErr_03.Size = new System.Drawing.Size(72, 17);
this.PlcErr_03.TabIndex = 5;
- this.PlcErr_03.Text = "PlcErr_03";
+ this.PlcErr_03.Text = "PlcErr_06";
this.PlcErr_03.UseVisualStyleBackColor = true;
+ this.PlcErr_03.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// PlcErr_01
//
@@ -461,11 +464,13 @@
this.PlcErr_01.Name = "PlcErr_01";
this.PlcErr_01.Size = new System.Drawing.Size(72, 17);
this.PlcErr_01.TabIndex = 4;
- this.PlcErr_01.Text = "PlcErr_01";
+ this.PlcErr_01.Text = "PlcErr_04";
this.PlcErr_01.UseVisualStyleBackColor = true;
+ this.PlcErr_01.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// groupBox3
//
+ this.groupBox3.Controls.Add(this.ErrRT_03);
this.groupBox3.Controls.Add(this.ErrRT_02);
this.groupBox3.Controls.Add(this.CncErr_02);
this.groupBox3.Controls.Add(this.CncErr_03);
@@ -489,10 +494,11 @@
this.ErrRT_02.AutoSize = true;
this.ErrRT_02.Location = new System.Drawing.Point(268, 43);
this.ErrRT_02.Name = "ErrRT_02";
- this.ErrRT_02.Size = new System.Drawing.Size(64, 17);
+ this.ErrRT_02.Size = new System.Drawing.Size(67, 17);
this.ErrRT_02.TabIndex = 10;
- this.ErrRT_02.Text = "ERR_fill";
+ this.ErrRT_02.Text = "ERR_11";
this.ErrRT_02.UseVisualStyleBackColor = true;
+ this.ErrRT_02.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// CncErr_02
//
@@ -501,8 +507,9 @@
this.CncErr_02.Name = "CncErr_02";
this.CncErr_02.Size = new System.Drawing.Size(76, 17);
this.CncErr_02.TabIndex = 9;
- this.CncErr_02.Text = "CncErr_02";
+ this.CncErr_02.Text = "CncErr_08";
this.CncErr_02.UseVisualStyleBackColor = true;
+ this.CncErr_02.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// CncErr_03
//
@@ -511,8 +518,9 @@
this.CncErr_03.Name = "CncErr_03";
this.CncErr_03.Size = new System.Drawing.Size(76, 17);
this.CncErr_03.TabIndex = 8;
- this.CncErr_03.Text = "CncErr_03";
+ this.CncErr_03.Text = "CncErr_09";
this.CncErr_03.UseVisualStyleBackColor = true;
+ this.CncErr_03.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// CncErr_01
//
@@ -521,8 +529,9 @@
this.CncErr_01.Name = "CncErr_01";
this.CncErr_01.Size = new System.Drawing.Size(76, 17);
this.CncErr_01.TabIndex = 7;
- this.CncErr_01.Text = "CncErr_01";
+ this.CncErr_01.Text = "CncErr_07";
this.CncErr_01.UseVisualStyleBackColor = true;
+ this.CncErr_01.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// SysErr_03
//
@@ -533,16 +542,18 @@
this.SysErr_03.TabIndex = 3;
this.SysErr_03.Text = "SysErr_03";
this.SysErr_03.UseVisualStyleBackColor = true;
+ this.SysErr_03.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// ErrRT_01
//
this.ErrRT_01.AutoSize = true;
this.ErrRT_01.Location = new System.Drawing.Point(268, 20);
this.ErrRT_01.Name = "ErrRT_01";
- this.ErrRT_01.Size = new System.Drawing.Size(78, 17);
+ this.ErrRT_01.Size = new System.Drawing.Size(67, 17);
this.ErrRT_01.TabIndex = 2;
- this.ErrRT_01.Text = "ERR_temp";
+ this.ErrRT_01.Text = "ERR_10";
this.ErrRT_01.UseVisualStyleBackColor = true;
+ this.ErrRT_01.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// SysErr_02
//
@@ -553,6 +564,7 @@
this.SysErr_02.TabIndex = 1;
this.SysErr_02.Text = "SysErr_02";
this.SysErr_02.UseVisualStyleBackColor = true;
+ this.SysErr_02.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// SysErr_01
//
@@ -563,6 +575,7 @@
this.SysErr_01.TabIndex = 0;
this.SysErr_01.Text = "SysErr_01";
this.SysErr_01.UseVisualStyleBackColor = true;
+ this.SysErr_01.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// groupBox2
//
@@ -1102,9 +1115,9 @@
this.label28.AutoSize = true;
this.label28.Location = new System.Drawing.Point(10, 91);
this.label28.Name = "label28";
- this.label28.Size = new System.Drawing.Size(67, 13);
+ this.label28.Size = new System.Drawing.Size(64, 13);
this.label28.TabIndex = 31;
- this.label28.Text = "Speed Over.";
+ this.label28.Text = "Rapid Over.";
//
// hsPathSpeedOver
//
@@ -1263,10 +1276,61 @@
this.groupBox6.TabStop = false;
this.groupBox6.Text = "ACK ADP --> PLC";
//
+ // STATUS_ACK_DW3
+ //
+ this.STATUS_ACK_DW3.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.STATUS_ACK_DW3.Location = new System.Drawing.Point(85, 118);
+ this.STATUS_ACK_DW3.Name = "STATUS_ACK_DW3";
+ this.STATUS_ACK_DW3.Size = new System.Drawing.Size(293, 24);
+ this.STATUS_ACK_DW3.TabIndex = 59;
+ //
+ // label52
+ //
+ this.label52.AutoSize = true;
+ this.label52.Location = new System.Drawing.Point(15, 126);
+ this.label52.Name = "label52";
+ this.label52.Size = new System.Drawing.Size(59, 13);
+ this.label52.TabIndex = 58;
+ this.label52.Text = "ACK_DW3";
+ //
+ // STATUS_ACK_DW2
+ //
+ this.STATUS_ACK_DW2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.STATUS_ACK_DW2.Location = new System.Drawing.Point(85, 83);
+ this.STATUS_ACK_DW2.Name = "STATUS_ACK_DW2";
+ this.STATUS_ACK_DW2.Size = new System.Drawing.Size(293, 24);
+ this.STATUS_ACK_DW2.TabIndex = 57;
+ //
+ // label51
+ //
+ this.label51.AutoSize = true;
+ this.label51.Location = new System.Drawing.Point(15, 91);
+ this.label51.Name = "label51";
+ this.label51.Size = new System.Drawing.Size(59, 13);
+ this.label51.TabIndex = 56;
+ this.label51.Text = "ACK_DW2";
+ //
+ // STATUS_ACK_DW1
+ //
+ this.STATUS_ACK_DW1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.STATUS_ACK_DW1.Location = new System.Drawing.Point(85, 48);
+ this.STATUS_ACK_DW1.Name = "STATUS_ACK_DW1";
+ this.STATUS_ACK_DW1.Size = new System.Drawing.Size(293, 24);
+ this.STATUS_ACK_DW1.TabIndex = 55;
+ //
+ // label50
+ //
+ this.label50.AutoSize = true;
+ this.label50.Location = new System.Drawing.Point(15, 56);
+ this.label50.Name = "label50";
+ this.label50.Size = new System.Drawing.Size(59, 13);
+ this.label50.TabIndex = 54;
+ this.label50.Text = "ACK_DW1";
+ //
// STATUS_ACK_DW0
//
this.STATUS_ACK_DW0.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.STATUS_ACK_DW0.Location = new System.Drawing.Point(85, 11);
+ this.STATUS_ACK_DW0.Location = new System.Drawing.Point(85, 15);
this.STATUS_ACK_DW0.Name = "STATUS_ACK_DW0";
this.STATUS_ACK_DW0.Size = new System.Drawing.Size(293, 24);
this.STATUS_ACK_DW0.TabIndex = 53;
@@ -1349,7 +1413,7 @@
this.tbConf.Location = new System.Drawing.Point(4, 22);
this.tbConf.Name = "tbConf";
this.tbConf.Padding = new System.Windows.Forms.Padding(3);
- this.tbConf.Size = new System.Drawing.Size(772, 643);
+ this.tbConf.Size = new System.Drawing.Size(777, 643);
this.tbConf.TabIndex = 1;
this.tbConf.Text = "XML CONFIG";
//
@@ -1359,7 +1423,7 @@
this.wbXmlConf.Location = new System.Drawing.Point(3, 3);
this.wbXmlConf.MinimumSize = new System.Drawing.Size(20, 20);
this.wbXmlConf.Name = "wbXmlConf";
- this.wbXmlConf.Size = new System.Drawing.Size(766, 637);
+ this.wbXmlConf.Size = new System.Drawing.Size(771, 637);
this.wbXmlConf.TabIndex = 0;
//
// tpSIM
@@ -1379,7 +1443,7 @@
this.tpSIM.Controls.Add(this.groupBox12);
this.tpSIM.Location = new System.Drawing.Point(4, 22);
this.tpSIM.Name = "tpSIM";
- this.tpSIM.Size = new System.Drawing.Size(772, 643);
+ this.tpSIM.Size = new System.Drawing.Size(777, 643);
this.tpSIM.TabIndex = 2;
this.tpSIM.Text = "SIMULATION";
//
@@ -1917,56 +1981,16 @@
this.label20.TabIndex = 52;
this.label20.Text = "AddM";
//
- // STATUS_ACK_DW1
+ // ErrRT_03
//
- this.STATUS_ACK_DW1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.STATUS_ACK_DW1.Location = new System.Drawing.Point(85, 48);
- this.STATUS_ACK_DW1.Name = "STATUS_ACK_DW1";
- this.STATUS_ACK_DW1.Size = new System.Drawing.Size(293, 24);
- this.STATUS_ACK_DW1.TabIndex = 55;
- //
- // label50
- //
- this.label50.AutoSize = true;
- this.label50.Location = new System.Drawing.Point(15, 56);
- this.label50.Name = "label50";
- this.label50.Size = new System.Drawing.Size(59, 13);
- this.label50.TabIndex = 54;
- this.label50.Text = "ACK_DW1";
- //
- // STATUS_ACK_DW2
- //
- this.STATUS_ACK_DW2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.STATUS_ACK_DW2.Location = new System.Drawing.Point(85, 83);
- this.STATUS_ACK_DW2.Name = "STATUS_ACK_DW2";
- this.STATUS_ACK_DW2.Size = new System.Drawing.Size(293, 24);
- this.STATUS_ACK_DW2.TabIndex = 57;
- //
- // label51
- //
- this.label51.AutoSize = true;
- this.label51.Location = new System.Drawing.Point(15, 91);
- this.label51.Name = "label51";
- this.label51.Size = new System.Drawing.Size(59, 13);
- this.label51.TabIndex = 56;
- this.label51.Text = "ACK_DW2";
- //
- // STATUS_ACK_DW3
- //
- this.STATUS_ACK_DW3.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.STATUS_ACK_DW3.Location = new System.Drawing.Point(85, 118);
- this.STATUS_ACK_DW3.Name = "STATUS_ACK_DW3";
- this.STATUS_ACK_DW3.Size = new System.Drawing.Size(293, 24);
- this.STATUS_ACK_DW3.TabIndex = 59;
- //
- // label52
- //
- this.label52.AutoSize = true;
- this.label52.Location = new System.Drawing.Point(15, 126);
- this.label52.Name = "label52";
- this.label52.Size = new System.Drawing.Size(59, 13);
- this.label52.TabIndex = 58;
- this.label52.Text = "ACK_DW3";
+ this.ErrRT_03.AutoSize = true;
+ this.ErrRT_03.Location = new System.Drawing.Point(268, 66);
+ this.ErrRT_03.Name = "ErrRT_03";
+ this.ErrRT_03.Size = new System.Drawing.Size(67, 17);
+ this.ErrRT_03.TabIndex = 11;
+ this.ErrRT_03.Text = "ERR_12";
+ this.ErrRT_03.UseVisualStyleBackColor = true;
+ this.ErrRT_03.CheckedChanged += new System.EventHandler(this.SysErr_01_CheckedChanged);
//
// CMS_MachineSim
//
@@ -2207,6 +2231,7 @@
private System.Windows.Forms.Label label51;
private System.Windows.Forms.TextBox STATUS_ACK_DW1;
private System.Windows.Forms.Label label50;
+ private System.Windows.Forms.CheckBox ErrRT_03;
}
}
diff --git a/MTC_Sim/MTC_Sim/CMS_MachineSim.cs b/MTC_Sim/MTC_Sim/CMS_MachineSim.cs
index 6d8d0cb..ddd2686 100644
--- a/MTC_Sim/MTC_Sim/CMS_MachineSim.cs
+++ b/MTC_Sim/MTC_Sim/CMS_MachineSim.cs
@@ -19,6 +19,7 @@ using NLog;
namespace MTC_Sim
{
using MTConnect;
+ using System.Collections;
using System.Configuration;
using System.Diagnostics;
using System.IO;
@@ -145,7 +146,7 @@ namespace MTC_Sim
Power = 1000;
AccTime = 1440 * 365;
- OPERATOR_ID.Text = "M9999";
+ OPERATOR_ID.Text = "OP9999";
STATUS_STRB_DW0.Text = utils.binaryForm(0);
STATUS_STRB_DW1.Text = utils.binaryForm(0);
@@ -249,7 +250,7 @@ namespace MTC_Sim
// inizio a riportare che sto eseguendo..
MainProgrBar.PerformStep();
- // eseguo eventuali simulazioni x dati/flags
+ // eseguo eventuali simulazioni x dati/flags SE RICHIESTO
simulateData();
// check esecuzione FastTask
@@ -287,7 +288,7 @@ namespace MTC_Sim
private void checkSlowTask()
{
slowCount--;
- if(slowCount<=0)
+ if (slowCount <= 0)
{
slowCount = utils.CRI("slowCount");
//lg.Info("Reset slowCount");
@@ -342,7 +343,7 @@ namespace MTC_Sim
agObj.mMessage.ForceChanged();
agObj.mAdapter.SendChanged();
}
-
+
// apro eseguibile dump
private void dump_Click(object sender, EventArgs e)
{
@@ -356,7 +357,7 @@ namespace MTC_Sim
Process.Start(string.Format(@"{0}\dump\dump.exe", path));
}
}
-
+
#region classi x simulazione valori vari
///
@@ -373,10 +374,25 @@ namespace MTC_Sim
{
PROG_ROW_NUM.Text = rnd.Next(1, 10000).ToString();
}
- // ora controllo se ci siano eventi M/S/T x alzare flag...
- if (agObj.codaM.Count > 0) agObj.STROBE_PLC = agObj.STROBE_PLC | Strobe.M_CODE;
- 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;
+
+
+ // cambio posizioni 6% casi: aggiungo codici M
+ if (rnd.Next(0, 100) > 95)
+ {
+ agObj.appendCodeMST("M", rnd.Next(1, 30).ToString());
+ }
+
+ // cambio posizioni 3% casi: aggiungo codici S
+ if (rnd.Next(0, 100) > 97)
+ {
+ agObj.appendCodeMST("S", rnd.Next(100, 10000).ToString());
+ }
+ // cambio posizioni 3% casi: aggiungo codici T
+ if (rnd.Next(0, 100) > 97)
+ {
+ agObj.appendCodeMST("T", rnd.Next(1, 100).ToString());
+ }
+
// aggiungo 1 pz al totale nel 0.3% dei casi (-->TC circa 333 x tick)...
if (rnd.Next(0, 1000) > 997)
@@ -468,6 +484,59 @@ namespace MTC_Sim
agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusBitMap.AL03;
}
+ // nel 2% dei casi imposto un RUN MODE diverso da RUN
+ if (rnd.Next(0, 100) > 98)
+ {
+ int codSel = rnd.Next(1, 3);
+ switch (codSel)
+ {
+ case 1:
+ manual.Checked = true;
+ break;
+ case 2:
+ mdi.Checked = true;
+ break;
+ default:
+ edit.Checked = true;
+ break;
+ }
+ }
+ // nel 3% degli altri casi riporto RUN MODE a RUN
+ else
+ {
+ if (rnd.Next(0, 100) > 97)
+ {
+ automatic.Checked = true;
+ }
+ }
+
+
+ // nel 2% dei casi imposto un EXE MODE diverso da AUTO
+ if (rnd.Next(0, 100) > 98)
+ {
+ int codSel = rnd.Next(1, 3);
+ switch (codSel)
+ {
+ case 1:
+ ready.Checked = true;
+ break;
+ case 2:
+ stopped.Checked = true;
+ break;
+ default:
+ feedhold.Checked = true;
+ break;
+ }
+ }
+ // nel 3% degli altri casi riporto EXE MODE a AUTO
+ else
+ {
+ if (rnd.Next(0, 100) > 97)
+ {
+ running.Checked = true;
+ }
+ }
+
// controllo se ci sia il flag di lettura di un evento M/S/T nel qual caso lo abbasso...
@@ -506,7 +575,25 @@ namespace MTC_Sim
if (utils.IsSetAll(agObj.STROBE_PLC, Strobe.POS_ACT)) agObj.STROBE_PLC -= Strobe.POS_ACT;
}
+
+#if false
+ // ora controllo se ci siano da alzare flag...
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.codaM.Count > 0), 32);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.codaS.Count > 0), 33);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.codaT.Count > 0), 34);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[0] != 0), 0);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[1] != 0), 1);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[2] != 0), 2);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[3] != 0), 3);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[4] != 0), 4);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[5] != 0), 5);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[6] != 0), 6);
+ utils.setBitOnStFlag(agObj.Strobes, (agObj.AlarmFlags[7] != 0), 7);
+#endif
+
+
refreshVisualStrobes();
+ refreshCodeMST();
}
}
@@ -540,7 +627,7 @@ namespace MTC_Sim
{
if (addCodM.Text.Trim() != "")
{
- agObj.appendCodeMST("M",addCodM.Text.Trim());
+ agObj.appendCodeMST("M", addCodM.Text.Trim());
addCodM.Text = "";
}
refreshCodeMST();
@@ -731,7 +818,7 @@ namespace MTC_Sim
answ.Status = stop.Enabled;
answ.Power = Power;
answ.AccTime = AccTime;
- answ.EmrStop = estop.Checked;
+ answ.EmrStop = estop.Checked;
answ.FuncMode = ((KeyValuePair)functionalMode.SelectedItem).Key;
@@ -751,7 +838,7 @@ namespace MTC_Sim
else if (feedhold.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusBitMap.EM_FEEDHOLD;
else if (stopped.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusBitMap.EM_STOP;
else if (ready.Checked) agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusBitMap.EM_READY;
- if(answ.FuncMode!= "1") agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusBitMap.HM;
+ if (answ.FuncMode != "1") agObj.STATUS_FLAG = agObj.STATUS_FLAG | StatusBitMap.HM;
// ritorno oggetto!
return answ;
@@ -910,6 +997,10 @@ namespace MTC_Sim
float.TryParse(cells[5].Value.ToString(), out posAct.k);
answ.PathPosAct = posAct;
+ // aggiungo altri oggetti...
+ answ.CodG_Act = "G01 G10 G34 G60";
+ answ.SubMode = string.Format("# Asse selezionato {0} #", cbAxNum.SelectedIndex);
+
// ritorno oggetto!
return answ;
}
@@ -946,10 +1037,10 @@ namespace MTC_Sim
int.TryParse(uoNumCU.Text, out answ.UnOpNumCU);
answ.UnOpStatus = uoStatus.Text;
int.TryParse(uoVitaRes.Text, out answ.UnOpVitaRes);
- answ.UnOpSpeed=uoSpeed.Value;
- answ.UnOpLoad=uoLoad.Value;
+ answ.UnOpSpeed = uoSpeed.Value;
+ answ.UnOpLoad = uoLoad.Value;
int.TryParse(uoAccTime.Text, out answ.UnOpAccTime);
-
+
// ritorno oggetto!
return answ;
}
@@ -1061,74 +1152,36 @@ namespace MTC_Sim
#endregion
- #region gestione allarmi
-
- ///
- /// Vettore errori system
- ///
- public List systemAlarm
- {
- get
- {
- List answ = new List();
- // controllo se ho valori errori checked...
- if (SysErr_01.Checked) answ.Add(1);
- if (SysErr_02.Checked) answ.Add(2);
- if (SysErr_03.Checked) answ.Add(3);
-
- return answ;
- }
- }
- ///
- /// Vettore errori PLC
- ///
- public List plcAlarm
- {
- get
- {
- List answ = new List();
- // controllo se ho valori errori checked...
- if (PlcErr_01.Checked) answ.Add(1);
- if (PlcErr_02.Checked) answ.Add(2);
- if (PlcErr_03.Checked) answ.Add(3);
-
- return answ;
- }
- }
- ///
- /// Vettore errori CNC
- ///
- public List cncAlarm
- {
- get
- {
- List answ = new List();
- // controllo se ho valori errori checked...
- if (CncErr_01.Checked) answ.Add(1);
- if (CncErr_02.Checked) answ.Add(2);
- if (CncErr_03.Checked) answ.Add(3);
-
- return answ;
- }
- }
-
- public List> genericAlarm
- {
- get
- {
- List> answ = new List>();
- if (ErrRT_01.Checked) answ.Add(new DataRefItem(1, "TEMP"));
- if (ErrRT_02.Checked) answ.Add(new DataRefItem(1, "FILL"));
-
- return answ;
- }
- }
-
- #endregion
private void CMS_MachineSim_FormClosing(object sender, FormClosingEventArgs e)
{
agObj.tryDisconnect();
}
+
+ private void SysErr_01_CheckedChanged(object sender, EventArgs e)
+ {
+ // aggiorno il vettore allarmi (da 128 byte) sulla base della selezione dei checkbox (per i primi 9...) - ultimi 3 selezionano 8 allarmi ciascuno...
+ BitArray bitArray = new BitArray(1024);
+
+ bitArray[7] = SysErr_01.Checked;
+ bitArray[6] = SysErr_02.Checked;
+ bitArray[5] = SysErr_03.Checked;
+ bitArray[4] = PlcErr_01.Checked;
+ bitArray[3] = PlcErr_02.Checked;
+ bitArray[2] = PlcErr_03.Checked;
+ bitArray[1] = CncErr_01.Checked;
+ bitArray[0] = CncErr_02.Checked;
+ bitArray[15] = CncErr_03.Checked;
+
+ // ne assegno 8 alla volta...
+ for (int i = 0; i < 8; i++)
+ {
+ bitArray[16 + i] = ErrRT_01.Checked;
+ bitArray[24 + i] = ErrRT_02.Checked;
+ bitArray[32 + i] = ErrRT_03.Checked;
+ }
+ byte[] newAlarm = utils.ToByteArray(bitArray);
+ Buffer.BlockCopy(newAlarm, 0, agObj.AlarmFlags, 0, 32);
+ }
}
}
diff --git a/MTC_Sim/MTC_Sim/MTC_Sim.csproj b/MTC_Sim/MTC_Sim/MTC_Sim.csproj
index cb10d0c..a0578aa 100644
--- a/MTC_Sim/MTC_Sim/MTC_Sim.csproj
+++ b/MTC_Sim/MTC_Sim/MTC_Sim.csproj
@@ -127,7 +127,7 @@
PreserveNewest
-
+
PreserveNewest
diff --git a/MTC_Sim/MTC_Sim/SetupAdapter.cs b/MTC_Sim/MTC_Sim/SetupAdapter.cs
index 0a032b3..f9a1ee1 100644
--- a/MTC_Sim/MTC_Sim/SetupAdapter.cs
+++ b/MTC_Sim/MTC_Sim/SetupAdapter.cs
@@ -360,7 +360,6 @@ namespace MTC_Sim
// aggiunto 2016.05.10
listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_CodG_Act", i + 1), "CLASS"));
listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_SubMode", i + 1), "FLAG#R10528.0:R10531.7"));
- listaDR.Add(new DataRefItem(string.Format("Path_{0:00}_UserAction", i + 1), "STROBE#R10520.4:R10520.6"));
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 bb29ba4..18d278a 100644
--- a/MTC_Sim/MTC_Sim/utils.cs
+++ b/MTC_Sim/MTC_Sim/utils.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
@@ -116,17 +117,19 @@ namespace MTC_Sim
return answ;
}
///
- /// imposta un bita al valore richiesto duplicando il valore IN come OUT
+ /// imposta un bit al valore richiesto duplicando il valore IN come OUT
///
/// valore originale da aggiornare
- /// valore richiesto x il bit (0/1)
+ /// valore richiesto x il bit (0/1)
/// indice bit, 0 based (es: 0..31 per 32bit)
///
- public static byte[] setBitOnStFlag(byte[] original, int bitVal, int bitIndex)
+ public static byte[] setBitOnStFlag(byte[] original, bool bitBool, int bitIndex)
{
+ int bitVal = 0;
+ if (bitBool) bitVal = 1;
// risposta è identica ad originale...
byte[] answ = original;
- // verifico se il bit è 0/1
+ // verifico se il bit è 0/1b
if (bitVal <= 1 && bitVal >= 0)
{
// verifico se si possa aggiornare il bit richiesto (<= al totale dei bit...)
@@ -155,6 +158,34 @@ namespace MTC_Sim
}
return answ;
}
+ ///
+ /// Converte un bitarray a byte[]
+ ///
+ ///
+ ///
+ public static byte[] ToByteArray(BitArray bits)
+ {
+ int numBytes = bits.Count / 8;
+ if (bits.Count % 8 != 0) numBytes++;
+
+ byte[] bytes = new byte[numBytes];
+ int byteIndex = 0, bitIndex = 0;
+
+ for (int i = 0; i < bits.Count; i++)
+ {
+ if (bits[i])
+ bytes[byteIndex] |= (byte)(1 << (7 - bitIndex));
+
+ bitIndex++;
+ if (bitIndex == 8)
+ {
+ bitIndex = 0;
+ byteIndex++;
+ }
+ }
+
+ return bytes;
+ }
}
///
/// Oggetto timing x archiviazione dati perfomances