using IOB_UT_NEXT; using IOB_UT_NEXT.Config; using System; namespace IOB_WIN_MBUS.IobModbusTCP { /* -------------------------------------------------------------------------------- * Controlli ModBusTCP COMECA * - protocollo ModBus TCP HAM * - specifico comportamento impianti HAM Pizzaferri * * STRUTTURA MEMORIA a banchi di byte, convertiti successivamente in bit/int/real: * lettura: xxx byte, * scrittura yyy byte * G:\Drive condivisi\30_Clienti\Pizzaferri\Impianti\HAM * * -------------------------------------------------------------------------------- */ public class ModbusTCPHam : ModbusTCP { #region Public Constructors /// /// Classe base con i metodi x ModBusTCP /// /// Form chiamante /// Configurazione (legacy) /// Configurazione (v 4.x) public ModbusTCPHam(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("NEW IOB ModBus TCP HAM"); // provo lettura una prima volta i dati DYN if (currPLC != null && currPLC.Connected) { try { processDynData(); } catch (Exception exc) { lgError($"Eccezione in processDynData iniziale x ModBus TCP HAM:{Environment.NewLine}{exc}"); } } } #endregion Public Constructors #region Protected Methods /// /// Effettua decodifica aree memoria alla bitmap usata x MAPO/GWMS /// - per lo scopo specifico IN REALTA' non conta lo stato macchina.... ma lo inviamo lo stesso /// protected override void decodeToBaseBitmap() { // init a zero... B_input = 0; /* ----------------------------------------------------- * bitmap MAPO STANDARD * B0: POWER_ON * B1: RUN * B2: pzCount * B3: allarme * ----------------------------------------------------- */ var MemInt = new byte[2]; int byteSignals = 0; // bit 0 (poweron) imposto a 1 SE connected... if (currPLC.Connected) { byteSignals += (1 << 0); } // processo dagli stati + gravi... if (hasAlarms()) { byteSignals += (1 << 3); } else { byteSignals += (1 << 1); } // salvo! B_input = byteSignals; } /// /// Effettua verifica se abilitato invio pezzi in blocco e nel caso /// - invio in blocco pezzi /// - aggiornamento del contapezzi (passato come ref) x nuovo valore post invio /// protected override void trySendPzCountBlock() { // non fa nulla se non accettare lato IOB i pezzi del PLC... su GWMS NON è gestito il contapezzi if (contapezziIOB != contapezziPLC) { contapezziIOB = contapezziPLC; lgTrace($"Registrata variazione contapezzi"); } } #endregion Protected Methods } }