diff --git a/MTC_Sim/.vs/MTC_Sim/v14/.suo b/MTC_Sim/.vs/MTC_Sim/v14/.suo index b04e4dc..e097d28 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/AdapterFanuc.cs b/MTC_Sim/MTC_Sim/AdapterFanuc.cs index 14e4d18..84983cc 100644 --- a/MTC_Sim/MTC_Sim/AdapterFanuc.cs +++ b/MTC_Sim/MTC_Sim/AdapterFanuc.cs @@ -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); diff --git a/MTC_Sim/MTC_Sim/AdapterGeneric.cs b/MTC_Sim/MTC_Sim/AdapterGeneric.cs index 84ade9e..75608a9 100644 --- a/MTC_Sim/MTC_Sim/AdapterGeneric.cs +++ b/MTC_Sim/MTC_Sim/AdapterGeneric.cs @@ -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