Modifiche x gestione allarmi con flag SOLO al cambio fronte + intercept valori da simulatore

Fix errore getBit (sostituito con HasFlag)
This commit is contained in:
Samuele E. Locatelli
2016-05-10 16:22:11 +02:00
parent 9c7d7e0a0c
commit 21c8a12310
9 changed files with 152 additions and 710 deletions
+2
View File
@@ -150,6 +150,8 @@
<DataItems>
<DataItem category="EVENT" id="Path_01_Type" type="MESSAGE"/>
<DataItem category="EVENT" id="Path_01_ActiveAxes" type="ACTIVE_AXES"/>
<DataItem category="EVENT" id="Path_01_CodG_Act" type="MESSAGE"/>
<DataItem category="EVENT" id="Path_01_SubMode" type="MESSAGE"/>
<DataItem category="EVENT" id="Path_01_PartId" type="PART_ID"/>
<DataItem category="EVENT" id="Path_01_PZ_TOT" type="PART_COUNT"/>
<DataItem category="EVENT" id="Path_01_Cod_M" type="MESSAGE"/>
Binary file not shown.
@@ -233,6 +233,14 @@
<Key>Path_01_ActiveAxes</Key>
<Value>STROBE#R10520.3</Value>
</dataRef>
<dataRef>
<Key>Path_01_CodG_Act</Key>
<Value>STROBE#R10520.3</Value>
</dataRef>
<dataRef>
<Key>Path_01_SubMode</Key>
<Value>STROBE#R10520.3</Value>
</dataRef>
</dataRefList>
</element>
</Path>
@@ -1,632 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<AdapterConf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Version>1</Version>
<NomeAdapt>CMS_ADAPTER_00</NomeAdapt>
<TipoAdapt>FANUC</TipoAdapt>
<VacuumPump>
<element>
<ident>VacPump_01</ident>
<alias>Pompa 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>VacPump_01_Status</Key>
<Value>0#7</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>VacPump_02</ident>
<alias>Pompa 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>VacPump_02_Status</Key>
<Value>0#7</Value>
</dataRef>
</dataRefList>
</element>
</VacuumPump>
<VacuumAct>
<element>
<ident>VacAct_01</ident>
<alias>Attuatore vuoto 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>VacAct_01_Count</Key>
<Value>0#15</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>VacAct_02</ident>
<alias>Attuatore vuoto 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>VacAct_02_Count</Key>
<Value>0#15</Value>
</dataRef>
</dataRefList>
</element>
</VacuumAct>
<Lubro>
<element>
<ident>Lubro_01</ident>
<alias>Lubrorefrigerante 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Lubro_01_Num</Key>
<Value>0#15</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Lubro_02</ident>
<alias>Lubrorefrigerante 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Lubro_02_Num</Key>
<Value>0#15</Value>
</dataRef>
</dataRefList>
</element>
</Lubro>
<Cooler>
<element>
<ident>Cooler_01</ident>
<alias>Cooler 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Cooler_01_Status</Key>
<Value>0#3</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Cooler_02</ident>
<alias>Cooler 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Cooler_02_Status</Key>
<Value>0#3</Value>
</dataRef>
</dataRefList>
</element>
</Cooler>
<Press>
<element>
<ident>Press_01</ident>
<alias>Pressostato 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Press_01_Value</Key>
<Value>0#7</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Press_02</ident>
<alias>Pressostato 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Press_02_Value</Key>
<Value>0#7</Value>
</dataRef>
</dataRefList>
</element>
</Press>
<Temp>
<element>
<ident>Temp_01</ident>
<alias>Sonda Temperatura 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Temp_01_Value</Key>
<Value>0#7</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Temp_02</ident>
<alias>Sonda Temperatura 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Temp_02_Value</Key>
<Value>0#7</Value>
</dataRef>
</dataRefList>
</element>
</Temp>
<Path>
<element>
<ident>Path_01</ident>
<alias>Path num 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Path_01_FeedRate</Key>
<Value>INT#D8888.0</Value>
</dataRef>
<dataRef>
<Key>Path_01_FeedOverr</Key>
<Value>INT#D8888.0</Value>
</dataRef>
<dataRef>
<Key>Path_01_RapidOverr</Key>
<Value>INT#D8888.0</Value>
</dataRef>
<dataRef>
<Key>Path_01_PosActX</Key>
<Value>FLOAT#D7777.0</Value>
</dataRef>
<dataRef>
<Key>Path_01_PosActY</Key>
<Value>FLOAT#D7777.1</Value>
</dataRef>
<dataRef>
<Key>Path_01_PosActZ</Key>
<Value>FLOAT#D7777.2</Value>
</dataRef>
<dataRef>
<Key>Path_01_PosActI</Key>
<Value>FLOAT#D7777.3</Value>
</dataRef>
<dataRef>
<Key>Path_01_PosActJ</Key>
<Value>FLOAT#D7777.4</Value>
</dataRef>
<dataRef>
<Key>Path_01_PosActK</Key>
<Value>FLOAT#D7777.5</Value>
</dataRef>
<dataRef>
<Key>Path_01_Type</Key>
<Value>FLAG#R10528.12</Value>
</dataRef>
<dataRef>
<Key>Path_01_PartId</Key>
<Value>INT#D9999</Value>
</dataRef>
<dataRef>
<Key>Path_01_PZ_TOT</Key>
<Value>INT#D9999</Value>
</dataRef>
<dataRef>
<Key>Path_01_Cod_M</Key>
<Value>STROBE#R10520.0</Value>
</dataRef>
<dataRef>
<Key>Path_01_Cod_S</Key>
<Value>STROBE#R10520.1</Value>
</dataRef>
<dataRef>
<Key>Path_01_Cod_T</Key>
<Value>STROBE#R10520.2</Value>
</dataRef>
<dataRef>
<Key>Path_01_RUN_MODE</Key>
<Value>FLAG#R10528.1:R10528.7</Value>
</dataRef>
<dataRef>
<Key>Path_01_EXE_MODE</Key>
<Value>FLAG#R10528.8:R10528.11</Value>
</dataRef>
<dataRef>
<Key>Path_01_CurrProg</Key>
<Value>STRING#D0000</Value>
</dataRef>
<dataRef>
<Key>Path_01_CurrProg_RowNum</Key>
<Value>INT#D0001.0</Value>
</dataRef>
<dataRef>
<Key>Path_01_ActiveAxes</Key>
<Value>STROBE#R10520.3</Value>
</dataRef>
</dataRefList>
</element>
</Path>
<UnOp>
<element>
<ident>UnOp_01</ident>
<alias>Unita Op num 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>UnOp_01_ToolId</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>UnOp_01_NumCU</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>UnOp_01_Status</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>UnOp_01_VitaRes</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>UnOp_01_Speed</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>UnOp_01_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>UnOp_01_AccTime</Key>
<Value>48#55</Value>
</dataRef>
</dataRefList>
</element>
</UnOp>
<Axis>
<element>
<ident>Axis_01</ident>
<alias>Asse num 1</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Axis_01_MainProc</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>Axis_01_IsMast</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>Axis_01_MastId</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>Axis_01_Type</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>Axis_01_Dir</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>Axis_01_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>Axis_01_PosAct</Key>
<Value>48#55</Value>
</dataRef>
<dataRef>
<Key>Axis_01_PosTgt</Key>
<Value>56#63</Value>
</dataRef>
<dataRef>
<Key>Axis_01_FeedAct</Key>
<Value>64#71</Value>
</dataRef>
<dataRef>
<Key>Axis_01_FeedOver</Key>
<Value>72#79</Value>
</dataRef>
<dataRef>
<Key>Axis_01_AccelAct</Key>
<Value>80#87</Value>
</dataRef>
<dataRef>
<Key>Axis_01_AccTime</Key>
<Value>88#95</Value>
</dataRef>
<dataRef>
<Key>Axis_01_Battery</Key>
<Value>96#103</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Axis_02</ident>
<alias>Asse num 2</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Axis_02_MainProc</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>Axis_02_IsMast</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>Axis_02_MastId</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>Axis_02_Type</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>Axis_02_Dir</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>Axis_02_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>Axis_02_PosAct</Key>
<Value>48#55</Value>
</dataRef>
<dataRef>
<Key>Axis_02_PosTgt</Key>
<Value>56#63</Value>
</dataRef>
<dataRef>
<Key>Axis_02_FeedAct</Key>
<Value>64#71</Value>
</dataRef>
<dataRef>
<Key>Axis_02_FeedOver</Key>
<Value>72#79</Value>
</dataRef>
<dataRef>
<Key>Axis_02_AccelAct</Key>
<Value>80#87</Value>
</dataRef>
<dataRef>
<Key>Axis_02_AccTime</Key>
<Value>88#95</Value>
</dataRef>
<dataRef>
<Key>Axis_02_Battery</Key>
<Value>96#103</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Axis_03</ident>
<alias>Asse num 3</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Axis_03_MainProc</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>Axis_03_IsMast</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>Axis_03_MastId</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>Axis_03_Type</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>Axis_03_Dir</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>Axis_03_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>Axis_03_PosAct</Key>
<Value>48#55</Value>
</dataRef>
<dataRef>
<Key>Axis_03_PosTgt</Key>
<Value>56#63</Value>
</dataRef>
<dataRef>
<Key>Axis_03_FeedAct</Key>
<Value>64#71</Value>
</dataRef>
<dataRef>
<Key>Axis_03_FeedOver</Key>
<Value>72#79</Value>
</dataRef>
<dataRef>
<Key>Axis_03_AccelAct</Key>
<Value>80#87</Value>
</dataRef>
<dataRef>
<Key>Axis_03_AccTime</Key>
<Value>88#95</Value>
</dataRef>
<dataRef>
<Key>Axis_03_Battery</Key>
<Value>96#103</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Axis_04</ident>
<alias>Asse num 4</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Axis_04_MainProc</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>Axis_04_IsMast</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>Axis_04_MastId</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>Axis_04_Type</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>Axis_04_Dir</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>Axis_04_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>Axis_04_PosAct</Key>
<Value>48#55</Value>
</dataRef>
<dataRef>
<Key>Axis_04_PosTgt</Key>
<Value>56#63</Value>
</dataRef>
<dataRef>
<Key>Axis_04_FeedAct</Key>
<Value>64#71</Value>
</dataRef>
<dataRef>
<Key>Axis_04_FeedOver</Key>
<Value>72#79</Value>
</dataRef>
<dataRef>
<Key>Axis_04_AccelAct</Key>
<Value>80#87</Value>
</dataRef>
<dataRef>
<Key>Axis_04_AccTime</Key>
<Value>88#95</Value>
</dataRef>
<dataRef>
<Key>Axis_04_Battery</Key>
<Value>96#103</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Axis_05</ident>
<alias>Asse num 5</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Axis_05_MainProc</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>Axis_05_IsMast</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>Axis_05_MastId</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>Axis_05_Type</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>Axis_05_Dir</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>Axis_05_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>Axis_05_PosAct</Key>
<Value>48#55</Value>
</dataRef>
<dataRef>
<Key>Axis_05_PosTgt</Key>
<Value>56#63</Value>
</dataRef>
<dataRef>
<Key>Axis_05_FeedAct</Key>
<Value>64#71</Value>
</dataRef>
<dataRef>
<Key>Axis_05_FeedOver</Key>
<Value>72#79</Value>
</dataRef>
<dataRef>
<Key>Axis_05_AccelAct</Key>
<Value>80#87</Value>
</dataRef>
<dataRef>
<Key>Axis_05_AccTime</Key>
<Value>88#95</Value>
</dataRef>
<dataRef>
<Key>Axis_05_Battery</Key>
<Value>96#103</Value>
</dataRef>
</dataRefList>
</element>
<element>
<ident>Axis_06</ident>
<alias>Asse num 6</alias>
<fonte>Random</fonte>
<dataRefList>
<dataRef>
<Key>Axis_06_MainProc</Key>
<Value>0#7</Value>
</dataRef>
<dataRef>
<Key>Axis_06_IsMast</Key>
<Value>8#15</Value>
</dataRef>
<dataRef>
<Key>Axis_06_MastId</Key>
<Value>16#23</Value>
</dataRef>
<dataRef>
<Key>Axis_06_Type</Key>
<Value>24#31</Value>
</dataRef>
<dataRef>
<Key>Axis_06_Dir</Key>
<Value>32#39</Value>
</dataRef>
<dataRef>
<Key>Axis_06_Load</Key>
<Value>40#47</Value>
</dataRef>
<dataRef>
<Key>Axis_06_PosAct</Key>
<Value>48#55</Value>
</dataRef>
<dataRef>
<Key>Axis_06_PosTgt</Key>
<Value>56#63</Value>
</dataRef>
<dataRef>
<Key>Axis_06_FeedAct</Key>
<Value>64#71</Value>
</dataRef>
<dataRef>
<Key>Axis_06_FeedOver</Key>
<Value>72#79</Value>
</dataRef>
<dataRef>
<Key>Axis_06_AccelAct</Key>
<Value>80#87</Value>
</dataRef>
<dataRef>
<Key>Axis_06_AccTime</Key>
<Value>88#95</Value>
</dataRef>
<dataRef>
<Key>Axis_06_Battery</Key>
<Value>96#103</Value>
</dataRef>
</dataRefList>
</element>
</Axis>
</AdapterConf>
+85 -69
View File
@@ -11,12 +11,6 @@ namespace MTC_Sim
{
protected FANUC FANUC_ref;
#if false
protected StatusBitMap CurrStatus;
protected StFlag8 Status8;
protected StFlag32 Status32;
#endif
/// <summary>
/// estende l'init della classe base...
/// </summary>
@@ -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<StFlag32>(bitNum))
//if (STRB_DW1.getBit<StFlag32>(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<StFlag32>(1))
//if (STRB_DW1.getBit<StFlag32>(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<StFlag32>(2))
//if (STRB_DW1.getBit<StFlag32>(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<StFlag32>(3))
//if (STRB_DW1.getBit<StFlag32>(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<StFlag8>(i))
//if (StrobeBlock.getBit<StFlag8>(i))
if (StrobeBlock.HasFlag((StFlag8)Math.Pow(2, i)))
{
AssiAttivi += string.Format(" {0}", i);
}
@@ -183,6 +182,52 @@ namespace MTC_Sim
}
/// <summary>
/// recupera allarmi ed agiorna strobe (privato) degli allarmi
/// </summary>
/// <param name="Alarm2Refresh">32bit mask degli allarmi da aggiornare</param>
/// <param name="giveAck">boolean: se si debba tornare ACK</param>
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);
}
}
}
/// <summary>
/// processing strobe degli allarmi
/// </summary>
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<StFlag32>(i))
// converto! e aggiungo allarmi sollevati al corretto controller allarmi...
//if (AlarmBlock.getBit<StFlag32>(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<StFlag32>(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);
}
/// <summary>
/// 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!
+43 -9
View File
@@ -285,6 +285,14 @@ namespace MTC_Sim
/// </summary>
public Sample mPathPosActK;
/// <summary>
/// Stato dei codici G attivi
/// </summary>
public Event mPathCodG_Act;
/// <summary>
/// Stato dei SubMode attivi
/// </summary>
public Event mPathSubMode;
/// <summary>
/// Allarmi CNC del PATH
/// </summary>
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;
/// <summary>
/// Oggetto elenco allarmi
/// </summary>
public allarme[] elencoAllarmi;
/// <summary>
/// Prima word di strobe da array flag completo
/// </summary>
@@ -600,10 +619,6 @@ namespace MTC_Sim
return (StFlag32)BitConverter.ToUInt32(Acknowl, 12);
}
}
/// <summary>
/// Oggetto elenco allarmi
/// </summary>
public allarme[] elencoAllarmi;
#if true
@@ -622,7 +637,7 @@ namespace MTC_Sim
/// <summary>
/// Variabili stato macchina principali
/// </summary>
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<allarme>(ref elencoAllarmi, rumRiga);
// inizializzo a zero il vettore allarmi...
int numByte = (int)Math.Ceiling(Convert.ToDecimal(rumRiga) / 8);
AlarmFlags = new byte[numByte];
}
/// <summary>
/// Decodifica file allarme
@@ -907,6 +925,13 @@ namespace MTC_Sim
/// <param name="port"></param>
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();
}
/// <summary>
/// Effettua refresh del vettore privato degli allarmi attivi
/// </summary>
/// <param name="Alarm2Refresh">flag mask degli allarmi da aggiornare</param>
/// <param name="giveAck">boolean: se si debba tornare ACK</param>
public virtual void refreshAlarmState(StFlag32 Alarm2Refresh, bool giveAck)
{
// carco lo stato di tutti gli allarmi... forzo a 1 il flag degli allarmi
}
/// <summary>
/// ferma l'adapter...
@@ -1005,7 +1039,7 @@ namespace MTC_Sim
{
}
/// <summary>
/// verifica gli status attivi
@@ -1150,7 +1184,7 @@ namespace MTC_Sim
return answ;
}
}
/// <summary>
/// recupera pezzi OK (fare override!)
/// </summary>
+10
View File
@@ -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
+2
View File
@@ -357,6 +357,8 @@ namespace MTC_Sim
listaDR.Add(new DataRefItem<string, string>(string.Format("Path_{0:00}_CurrProg", i + 1), "STRING#D0000"));
listaDR.Add(new DataRefItem<string, string>(string.Format("Path_{0:00}_CurrProg_RowNum", i + 1), "INT#D0001.0"));
listaDR.Add(new DataRefItem<string, string>(string.Format("Path_{0:00}_ActiveAxes", i + 1), "STROBE#R10520.3"));
listaDR.Add(new DataRefItem<string, string>(string.Format("Path_{0:00}_CodG_Act", i + 1), "STROBE#xxx"));
listaDR.Add(new DataRefItem<string, string>(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);
}
+2
View File
@@ -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;