Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumQuello che succede è corretto, vediamo perchè ti trovi in questa situazione.
Il modo di acquisizione 4÷20mA è stato pensato volutamente con l’offset a 4mA per controllare l’eventuale interruzione del cablaggio. In caso di interruzione (O nel tuo caso sullo spegnimento del sensore) il valore di corrente in ingresso al convertitore A/D scende sotto i 4mA. In questa condizione il FB SysGetAnInp segnala l’anomalia attivando l’uscita Fault e generando l’errore:
9983150 Il valore ritornato dal modulo analogico non è corretto
In questa condizione non è possibile determinare il valore di ritorno, quindi viene ritornato QNAN che letteralmente significa Not a number. Il valore di QNAN nel formato IEE754 in esadecimale è 16#7F8FFFFF.
Siccome il valore in uscita dal FB di acquisizione è passato alla FB Average se non blocchi l’esecuzione della Average ti troverai a mettere in media un valore QNAN e questo provoca il blocco della FB. La soluzione è bloccare l’esecuzione della FB Average se Fault nella FB di acquisizione. Ecco come:
FBData(Address:=0, Channel:=0, Mode:=AD_CURR_4_20_DIFFER);
IF NOT(FBData.Fault) THEN AvValue(Value:=FBData.Value); END_IF;Allego il programma TestNaN, ecco la stampa ed il progetto per il download.
Marzo 7, 2016 alle 5:20 pm in risposta a: Configurazione comunicazione tra Omron CJ1M e cMT-SVR #39438Sergio Bertana
Amministratore del forumHo girato la richiesta ed ecco la risposta.
Come ultima prova imposta il driver: Omron ethernet sempre con UDP selezionato.Marzo 7, 2016 alle 2:22 pm in risposta a: Configurazione comunicazione tra Omron CJ1M e cMT-SVR #36206Sergio Bertana
Amministratore del forumNon avendo un PLC Omrom su cui fare test ho chiesto aiuto ad un nostro cliente che usa i pannelli Weintek con i PLC Omron, ti riporto la sua risposta.
Il cMT-SVR con un PLC Omron CJ1M funziona, l’ho testato proprio in mattinata, con il CJ1M etn11 si utilizza UDP e nel PLC dopo averlo settato è necessario spegnerlo e riaccenderlo.
Sergio Bertana
Amministratore del forumRimando alla applicazione ModemMachine che tra l’altro permette di inviare e ricevere SMS dalla pagina web. Dalla pagina del prodotto si può eseguire il download sia del programma sorgente che delle pagine web, questa è una valida base di partenza per sviluppare una applicazione.
Sergio Bertana
Amministratore del forumI terminali della famiglia iP sono rimasti gli unici che si programmano con EasyBuilder 8000. E’ una vecchia serie che è ancora prodotta perchè nella versione solo seriale costa un pò meno della serie iE che ha la Ethernet.
Ma se consideri l’esigua differenza di prezzo, abbinata alla presenza della Ethernet che ti consente di vedere il terminale da remoto con VNC e di attivare EasyAccess per la programmabilità remota tramite Internet non solo del pannello ma anche del PLC connesso al pannello. Non sò se è così vantaggioso utilizzare la serie iP.
Inoltre EasyAccessPro ha una gestione del ricettario molto più completa oltre a molte altre feautures interesanti.
Sergio Bertana
Amministratore del forumUtilizzando il nuovo EasyBuilderPro che utilizza una struttura database per la gestione del ricettario, non devi fare nulla basta usare il Recipe view (Topic).
Se usi il vecchio EasyBuilder 8000 (Topic), allego un progetto che fà qualcosa di simile a quello che hai bisogno utilizzando una macro (Download progetto).
Sergio Bertana
Amministratore del forumPer caricare dei file recipe nel simulatore il file recipe.rcp va copiato nella cartella: C:EB8000HMI_memoryrecipe.
Altrimenti per caricare valori di default bisogna farsi una macro non c’è un tool esterno o un’impostazione di sistema.Marzo 4, 2016 alle 2:28 pm in risposta a: Acquisizione valori via Modbus da contatori Iskraemeco #39433Sergio Bertana
Amministratore del forumHo sviluppato una nuova funzione IEE754DoubleToFloat, IEE754 double to float (Estratto manuale) che converte un valore dal formato IEE754 a 64 bits nel formato REAL a 32 bits gestito dallo SlimLine.
Ho realizzato il programma IEEConversion (Stampa) che esegue il test di funzionamento della funzione (Download progetto). Naturalmente eseguendo la conversione di formato si ha una perdita di precisione nel numero ed un range diverso del valore.
Marzo 4, 2016 alle 7:58 am in risposta a: Utilizzo della dichiarazione AT nella definizione variabili #39432Sergio Bertana
Amministratore del forumNella dichiarazione delle variabili solitamente si lascia al compilatore il posizionamento all’interno della memoria dati del sistema e quindi si ha una assegnazione automatica. All’interno del programma poi si fà riferimento alle variabili utilizzando il nome con il quale la variabile è stata dichiarata ed il compilatore provvede a gestire il corretto indirizzamento.
Ma se la variabile deve essere “vista” anche al di fuori del sistema, esempio deve essere visualizzata su un pannello operatore (Topic) è necessario conoscerne l’indirizzo all’interno della memoria del sistema, ed ecco allora che con la direttiva AT si fissa l’indirizzo in cui la variabile si trova. Naturalmente utilizzando la direttiva AT occorre fare attenzione alla dimensione delle variabili per evitare di allocare più variabili sugli stessi indirizzi di memoria.
Sergio Bertana
Amministratore del forumThe forum has been created to support customers in using our products and we try to give our best effort in quickly answer.
About the SysTime it is a global variable, there are many others global variables, are all explained in the IEC 61131-3 programming Manual (Refer to the chapter 4, System variables).
Shortly, the SysTime is a UDINT variable that automatically increment each 1 mS, reached the maximum the value is reinitialized. Comparing its actual value with a saved value, it’s possible to generate or measure delay times. If more precision is required the SysGetSysTime, get system time function must be used. It returns a UDINT variable that automatically increment each 1 uS, reached the maximum the value is reinitialized. Here a sample program that calculates the time the Di00 on CPU module remains active.
IF (%IX255.0 <> Pulse) THEN
Pulse:=%IX255.0; (* Input pulse *)IF (Pulse) THEN
TimeBf:=SysGetSysTime(TRUE); (* Time reference (uS) *)
ELSE
OnTimeCalc:=SysGetSysTime(TRUE)-TimeBf; (* On time calculation (uS) *)
END_IF;
END_IF;Here the InputOnTime project printout and project download.
Sergio Bertana
Amministratore del forumAbbiamo rilasciato la nuova libreria eLLabStdLib_B200 con il FB eTON modificato secondo le raccomandazioni IEC, è possibile farne il download dalla pagina di LogicLab.
Sergio Bertana
Amministratore del forumThe new eLLabStdLib_B200 library with the eTON FB modified according the IEC raccomandations is available for the download from the LogicLab page.
Sergio Bertana
Amministratore del forumThe behaviour of eTON is been treated in this topic, unfortunately is an Italian topic. The eTON Q output works according the On-delay (TON) timing IEC-61131 raccomandation (Here the logic diagram) the only difference is in the ET output that it’s not reset, but the time is not remembered at the new IN activation. When the IN is been deactivated it stops the count (ET remains at its value) but when the IN is activated again the ET is reset and starts to count from 0. Here the eTON FB source code, on red the modify to be written to match the IEC raccomandation.
(* If the IN is not active resets the ouput and save time. *)
IF NOT(IN) THEN
ET:=0; (* Executing time (mS) to be inserted to exactly match the IEC raccomandation *)
TimeBf:=SysTime; (* Time buffer *)
Q:=FALSE; (* Delayed output *)
RETURN;
END_IF;(* IN active, and if Q is active checks if PT is greather than ET and resets Q. *)
IF (Q) THEN
IF (PT > ET) THEN Q:=FALSE; END_IF;
RETURN;
END_IF;(* Checks if time is been elapsed. *)
ET:=SysTime-TimeBf; (* Executing time (mS) *)
IF (ET >= PT) THEN
Q:=TRUE; (* Delayed output *)
ET:=PT; (* Executing time (mS) *)
END_IF;To help you, here the print of a sample project with the eTON source code, so you can modify it according the IEC raccomandations.
Sergio Bertana
Amministratore del forumPrendo spunto dalla domanda per aggiungere alcune informazioni. A seguito dell’uscita della versione di SlimLine per CODESYS abbiamo cercato di uniformare i due ambienti e visto che in CODESYS per la gestione della porta seriale c’era un FB apposito abbiamo scelto di creare lo stesso FB anche in LogicLab.
Rimane per compatibilità la possibilità di utilizare la Sysfopen ma è preferibile usare il nuovo FB, in questo modo ci si allenea anche alle gestioni TCP/UDP dove abbiamo appositi FB per la gestione sia server che client.
Sergio Bertana
Amministratore del forumDalla versione XTarget_12 abbiamo introdotto il FB SysSerialPort per la gestione delle porte seriali, nei targets precedenti veniva utilizzata la funzione Sysfopen. Nel manuale e nel forum troverai ancora moltissimi esempi che utilizzano la Sysfopen e puoi anche continuare ad utilizzarla anche se consigliamo di passare all’utilizzo del nuovo FB.
L’errore che tu fai è che abiliti il FB SysSerialPort con il SysFirstLoop che è attivo un solo loop, quindi la porta si apre per un loop e poi si richiude, il FB deve essere abilitato con un TRUE come nell’esempio del manuale.
-
AutorePost