superpolipo Inserito: 3 ottobre 2006 Segnala Inserito: 3 ottobre 2006 Salve a tutti, vi chiedo se riuscite a spiergarmi come funziona questa istruzione AWL non essendo un programmatore ma un semplice manutentoreGrazie a chi voglia spendere un po del suo tempo per me AUF DB 220 // DB allarmi, immagine attuale AUF DI 221 // Immagine ciclo precedente U( L DBD 0 UD DW#16#FFFFFFFF // filtraggio allarmi non interessanti sirena L DID 0 INVD UD L DW#16#0 <>D )
floppydisco Inserita: 3 ottobre 2006 Segnala Inserita: 3 ottobre 2006 AUF DB 220 // dichiara DBAUF DI 221 // dichiara DB di istanza (DI)U( L DBD 0// carica dword del DBUD DW#16#FFFFFFFF // carica maschera L DID 0 // carica dword dal db di istanzaINVD // inverte tutti i bit della dword(0->1, 1->0)UD // AND bit a bit L DW#16#0 // carica zero<>D // se il risultato del AND bit a bit è diverso da 0, setta RLC)in pratica alza RLC quando si alza un bit della DBD 0. poi da qualche parte ci saranno le istruzioni che copia la DBD immagine attuale sulla DID immagine precedente. questo ti azzera RLCtradotto in laddeer è una cosa del genereallarm__mask__all_prec--||------||-------|\|-------|------ out--||------||-------|\|-------|--||------||-------|\|-------|immagina in parallelo tutti i 32 rami dei corrispondenti bit delle dword
superpolipo Inserita: 3 ottobre 2006 Autore Segnala Inserita: 3 ottobre 2006 (modificato) Grazie mille per il chiarimento che è stato efficente.l'unica cosa che non mi torna è che nell'istruzione UD DW#16#FFFFFFFF // filtraggio allarmi non interessanti sirenadove FFFFFF corisponde a dei bit sul DB ( db220) il confronto dovrebbe essere ignorato qualunche sia il risultato Modificato: 3 ottobre 2006 da superpolipo
batta Inserita: 3 ottobre 2006 Segnala Inserita: 3 ottobre 2006 La maschera serve per poter filtrare gli allarmi che non devono interessare la sirena. Finché la maschera è "FFFFFFFF" è come non ci fosse, ma è già lì, pronta per essere utilizzata (mettendo a zero i bit da mascherare), in caso di necessità.
Ecup Inserita: 4 ottobre 2006 Segnala Inserita: 4 ottobre 2006 Spiegato a parole, senza entrare nel merito delle singole istruzioni.La DB220 contiene lo stato attuale degli allarmiLa DB221 contiene lo stato precedenteVengono caricati gli allarmi attuali (un po' pochini se stanno tutti in una DW, e scritto così non sembra esserci nulla di ricorsivo... comunque dipende dal'applicazione... possono anche essere più che sufficienti)Vengono "filtrati" con una maschera fissa (IMHO sarebbe meglio se anche la maschera fosse in una DB, magari con possibilità di personalizzazione da SCADA o da pannello) per decidere quali sono "rilevanti" per far suonare la sirenaIn risultato viene confrontato con lo stato precedente per stabilire se ci sono allarmi nuovi, e quindi, far suonare la sirena (se l'allarme era già attivo la sirena sta già suonando, oppure è già stata resettata e non deve suonare di nuovo)Volendo fare i puntigliosi, io avrei fatto prima il confronto con lo stato precedente, e poi mascherato per stabilire se far suonare la sirena, comunque agli effetti finali non cambia nullaciao
superpolipo Inserita: 4 ottobre 2006 Autore Segnala Inserita: 4 ottobre 2006 nell'esempio rportato vi è solo una Dword ma in effetti ce ne sono molte di più solamente essendo tutte in or capita una le altre sono uguali
Ecup Inserita: 4 ottobre 2006 Segnala Inserita: 4 ottobre 2006 Beh, ma se sono più DW tanto valeva fare un loop indicizzato... a meno che non siano solo 3 o 4 per cui può non valerne la pena. E' anche vero che per fare un loop avrebbe dovuto memorizzare da qualche parte anche la maschera, altrimenti resterebbe la stessa per tutte le DWcomunque questo è solo il mio parere, poi ognuno programma a modo suo ciao
superpolipo Inserita: 5 ottobre 2006 Autore Segnala Inserita: 5 ottobre 2006 Per essere completi le DW sono 50 anche se molti bit non sono usati perche disponibili e, essendo un programma fornito da terzi su commissione noi "poveri " manutentori dobbiamo adeguarci e capire come è sviluppato il programma per poi metterci le mani dopo la consegna del lavoro.
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora