From cd686bfa6f27e2333fe2282cade0731bdc1e2fd8 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 12 May 2017 18:00:38 +0200 Subject: [PATCH] spostata chiamata watchdog in adapterGeneric + gestione memoria specifica su ogni adapter tipizzato... --- MTC_Adapter/MTC_Adapter/AdapterFanuc.cs | 42 +++++++---------------- MTC_Adapter/MTC_Adapter/AdapterGeneric.cs | 42 +++++++++++++++++++++++ MTC_Adapter/MTC_Adapter/AdapterOsai.cs | 31 +++++------------ MTC_Adapter/MTC_Adapter/AdapterSiemens.cs | 33 +++++------------- 4 files changed, 71 insertions(+), 77 deletions(-) diff --git a/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs b/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs index d285282..8ba96a4 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs @@ -344,34 +344,18 @@ namespace MTC_Adapter sendWatchDog(); } - /// - /// Invia (se necessario) il watchdog di stato in vita... blink 0/1 ogni secondo - /// - private void sendWatchDog() - { - int memIndex = 0; - bool setFlag = false; - byte[] retACK_DW = new byte[4]; - // 2016.10.18 aggiungo scrittura del bit di "watchdog" al primo bit della DW2... come resto tra secondi / 2 - if (utils.CRB("sendWatchDog")) - { - int resto = 0; - Math.DivRem(DateTime.Now.Second, 2, out resto); - setFlag = resto == 0; - // se watchdog è cambiato lo invio, altrimenti lascio come è... - if (setFlag != lastWatchDog) - { - lastWatchDog = setFlag; - retACK_DW = utils.setBitOnStFlag(retACK_DW, setFlag, 0); // imposto primo bit!!! - // scrivo su area PLC - memIndex = 10508; - inizio = DateTime.Now; - FanucMemRW(W, FANUC.MemType.R, memIndex, ref retACK_DW); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-WatchDog", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks); - } - } - } + /// + /// Scrive watchdog + /// + /// + /// + public override bool writeWatchDog(ref byte[] retACK_DW) + { + int memIndex = 10508; + return FanucMemRW(W, FANUC.MemType.R, memIndex, ref retACK_DW); + } + /// /// Recupero info su test: numero + elenco parametri IN/OUT /// @@ -763,7 +747,7 @@ namespace MTC_Adapter uint[] tabDatiAnalog = new uint[analogData.Length]; inizio = DateTime.Now; FanucMemRW(R, FANUC.MemType.R, memIndex, ref tabDatiAnalogByte); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalogByte.Length*4), DateTime.Now.Subtract(inizio).Ticks); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalogByte.Length * 4), DateTime.Now.Subtract(inizio).Ticks); // copio byte --> word! Buffer.BlockCopy(tabDatiAnalogByte, 0, tabDatiAnalog, 0, tabDatiAnalogByte.Length); // decodifico aree memoria secondo tab configurazione @@ -945,7 +929,7 @@ namespace MTC_Adapter inizio = DateTime.Now; FanucMemRW(R, FANUC.MemType.D, memIndex, ref unOpSpeedMem); if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-SPEED_UNOP", unOpSpeedMem.Length), DateTime.Now.Subtract(inizio).Ticks); - + procUnOp(unOpSpeedMem); } /// diff --git a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs index f699a35..f2c915e 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs @@ -2140,6 +2140,7 @@ namespace MTC_Adapter inizio = DateTime.Now; uint[] MemBlock; + // !!! FARE verifica se convenga leggere SEMPRE 128 byte allarmi x avere MENO letture (in caso di concorrenza...) --> decidere post test SIEMENS, OSAI sembrerebbe giustificarlo... // controllo, SE devo leggere tutto uso un unico accesso ai 128byte, altrimenti leggo a blocchi di 32bit... if (Alarm2Refresh == (StFlag32)unchecked((int)UInt32.MaxValue)) { @@ -2251,6 +2252,47 @@ namespace MTC_Adapter } #endregion + + #region gestione altri strobe/ack + + /// + /// Invia (se necessario) il watchdog di stato in vita... blink 0/1 ogni secondo + /// + public void sendWatchDog() + { + bool setFlag = false; + byte[] retACK_DW = new byte[1]; + // 2016.10.18 aggiungo scrittura del bit di "watchdog" al primo bit della DW2... come resto tra secondi / 2 + if (utils.CRB("sendWatchDog")) + { + int resto = 0; + Math.DivRem(DateTime.Now.Second, 2, out resto); + setFlag = resto == 0; + // se watchdog è cambiato lo invio, altrimenti lascio come è... + if (setFlag != lastWatchDog) + { + lastWatchDog = setFlag; + retACK_DW = utils.setBitOnStFlag(retACK_DW, setFlag, 0); // imposto primo bit!!! + // scrivo su area PLC + inizio = DateTime.Now; + writeWatchDog(ref retACK_DW); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-WatchDog", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks); + } + } + } + /// + /// Scrive watchdog + /// + /// + /// + public virtual bool writeWatchDog(ref byte[] retACK_DW) + { + return false; + } + + #endregion + + /// /// recupero dati PATH /// diff --git a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs index 4c9c137..a8c6c7e 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs @@ -491,33 +491,18 @@ namespace MTC_Adapter if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-ACK_DW0", currACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks); } } + /// - /// Invia (se necessario) il watchdog di stato in vita... blink 0/1 ogni secondo + /// Scrive watchdog /// - private void sendWatchDog() + /// + /// + public override bool writeWatchDog(ref byte[] retACK_DW) { - int memIndex = 0; - bool setFlag = false; - byte[] retACK_DW = new byte[1]; - // 2016.10.18 aggiungo scrittura del bit di "watchdog" al primo bit della DW2... come resto tra secondi / 2 - if (utils.CRB("sendWatchDog")) - { - int resto = 0; - Math.DivRem(DateTime.Now.Second, 2, out resto); - setFlag = resto == 0; - // se watchdog è cambiato lo invio, altrimenti lascio come è... - if (setFlag != lastWatchDog) - { - lastWatchDog = setFlag; - retACK_DW = utils.setBitOnStFlag(retACK_DW, setFlag, 0); // imposto primo bit!!! - // scrivo su area PLC - memIndex = 19022; - inizio = DateTime.Now; - OsaiMemRW_Byte(W, OSAI.MemTypeWord.MW_CODE, memIndex, 0, ref retACK_DW); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-WatchDog", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks); - } - } + int memIndex = 19022; + return OsaiMemRW_Byte(W, OSAI.MemTypeWord.MW_CODE, memIndex, 0, ref retACK_DW); } + /// /// Recupero info su test: numero + elenco parametri IN/OUT /// diff --git a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs index 76518dd..2f061f8 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs @@ -444,31 +444,14 @@ namespace MTC_Adapter } } /// - /// Invia (se necessario) il watchdog di stato in vita... blink 0/1 ogni secondo + /// Scrive watchdog /// - private void sendWatchDog() + /// + /// + public override bool writeWatchDog(ref byte[] retACK_DW) { - int memIndex = 0; - bool setFlag = false; - byte[] retACK_DW = new byte[1]; - // 2016.10.18 aggiungo scrittura del bit di "watchdog" al primo bit della DW2... come resto tra secondi / 2 - if (utils.CRB("sendWatchDog")) - { - int resto = 0; - Math.DivRem(DateTime.Now.Second, 2, out resto); - setFlag = resto == 0; - // se watchdog è cambiato lo invio, altrimenti lascio come è... - if (setFlag != lastWatchDog) - { - lastWatchDog = setFlag; - retACK_DW = utils.setBitOnStFlag(retACK_DW, setFlag, 0); // imposto primo bit!!! - // scrivo su area PLC - memIndex = 38; - inizio = DateTime.Now; - SIEMENSMemRW_Byte(W, baseMemDb, memIndex, ref retACK_DW); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-WatchDog", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks); - } - } + int memIndex = 38; + return SIEMENSMemRW_Byte(W, baseMemDb, memIndex, ref retACK_DW); } /// /// Recupero info su test: numero + elenco parametri IN/OUT @@ -495,7 +478,7 @@ namespace MTC_Adapter // recupero cod univoco test e numero parametri impiegati testNum = BitConverter.ToUInt16(BitConverter.GetBytes(MemBlockTestData[0]), 0); numPar = BitConverter.ToUInt16(BitConverter.GetBytes(MemBlockTestData[0]), 2); - + // riporto separatore + numero test + num parametri answ = string.Format("{0}TN:{1}{0}NP:{2}", charSep, testNum, numPar); // se ci sono parametri da accodare li recupero! @@ -547,7 +530,7 @@ namespace MTC_Adapter int memIndex = 118; return SIEMENSMemRW_DWord(R, baseMemDb, memIndex + blockIndex * 2, ref MemBlock); } - + /// /// processing! ///