Aggiunte modifiche da testare x

- miglioramento modalità verifica ACK_DW0 (dovrebbe essere più corretto e veloce)
- impostato nuovo sistema di copia da testare x byte memoria allarmi
This commit is contained in:
Samuele E. Locatelli
2016-05-11 21:46:31 +02:00
parent a0b09241cc
commit 9716fcb393
3 changed files with 26 additions and 11 deletions
Binary file not shown.
+25 -10
View File
@@ -248,6 +248,11 @@ namespace MTC_Sim
{
base.refreshAlarmState(Alarm2Refresh, giveAck);
// byte di acknowledge...
byte[] retACK_DW0 = new byte[4];
// inizio impostando una bitmap x ACK che abbia i bit abbassati se lo strobe è disattivo: AND logico tra STR e ACK
retACK_DW0 = BitConverter.GetBytes(Convert.ToUInt32(STRB_DW0 & ACK_DW0));
if (Alarm2Refresh != StFlag32.NONE) lg.Info("Richiesto refresh allarmi x bitmask: {0}", utils.binaryForm((int)Alarm2Refresh));
DateTime inizio = DateTime.Now;
@@ -268,9 +273,6 @@ namespace MTC_Sim
}
else
{
// byte di acknowledge...
byte[] retACK_DW0 = new byte[4];
if (Alarm2Refresh != StFlag32.NONE)
{
// blocco memoria x lettura dati
@@ -284,11 +286,20 @@ namespace MTC_Sim
inizio = DateTime.Now;
FANUC_ref.F_RW_Byte(R, FANUC.MemType.R, memIndex + i * 4, ref MemBlock);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-STRB_DW0", MemBlock.Length), DateTime.Now.Subtract(inizio).Ticks);
// aggiorno nel vettore allarmi i byte interessati
for (int j = 0; j < 4; j++)
// da testare metodo copia alternativo !!!FARE!!!
if (true)
{
// copy array o byte?!? !!!FARE!!! verifica
AlarmFlags[i * 4 + j] = MemBlock[j];
// aggiorno nel vettore allarmi i byte interessati
for (int j = 0; j < 4; j++)
{
// copy array o byte?!? !!!FARE!!! verifica
AlarmFlags[i * 4 + j] = MemBlock[j];
}
}
else
{
Buffer.BlockCopy(MemBlock, i, AlarmFlags, i, MemBlock.Length);
}
// segnalo allarme letto! memorizzo allarme nel vettore ack....
@@ -310,13 +321,17 @@ namespace MTC_Sim
}
}
// !!!FARE!!! testare questa modifica
// ultimo controllo: se ho degli ACK sollevati mentre gli strobe sono abbassati li abbasso...
//if ((STRB_DW0 != ACK_DW0) && (STRB_DW0 ^ ACK_DW0) != StFlag32.NONE)
if ((STRB_DW0 ^ ACK_DW0) != (STRB_DW0 & ACK_DW0))
//if ((STRB_DW0 ^ ACK_DW0) != (STRB_DW0 & ACK_DW0))
// se è diverso il vettorei degli ACK in memoria da quello PLC...
if (ACK_DW0 != (StFlag32)BitConverter.ToUInt32(retACK_DW0, 0))
{
memIndex = 10500;
// invio INTERO set ACK_DW0 con bit abbassati...
byte[] retACK_DW0 = BitConverter.GetBytes(Convert.ToUInt32(STRB_DW0 & ACK_DW0));
retACK_DW0 = BitConverter.GetBytes(Convert.ToUInt32(STRB_DW0 & ACK_DW0));
inizio = DateTime.Now;
FANUC_ref.F_RW_Byte(W, FANUC.MemType.R, memIndex, ref retACK_DW0);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-ACK_DW0", retACK_DW0.Length), DateTime.Now.Subtract(inizio).Ticks);
+1 -1
View File
@@ -1003,7 +1003,7 @@ namespace MTC_Sim
{
// parte che eseguo SEMPRE: RECUPERO stato di tutti gli strobe/status e degli ack attualmente noti
getStrobeAndAckStatus();
// faccio refresh degli allarmi segnalati (da strobe su vettore locale)
refreshAlarmState(STRB_DW0, true);
// acquisizione degli status