Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumTo answer to your question about SNMP/Modbus converter, if your needs are only to read some OIDs from the UPS and make them available to your program or reachable by Modbus you can use the SNMPManager FB to read the OIDs and store them to program variables mapped on the DB 100 memory area. So they can be reachable by the Modbus.
If you want make a real SNMP/Modbus converter you have to write a program that manages the modbus requests, on a modbus request reception sends a SNMP request, waits for the SNMP answer and send it back to the Modbus client.
Sergio Bertana
Amministratore del forumWe not have any SNMP to Modbus converter, but our SlimLine and Netsyst products can manage the SNMP protocol. We have developped the eLLabSNMPLib library for that purpose. This topic (Unfortunaltely it’s in Italian) treats the argument with a source code example, the example contains also the library. In the library you can found 2 FBs.
The SNMPAgent FB, allows the systems to act as SNMP agent, so they can be reached by any standard SNMP manager programs (i.e. Nagios, Cacti, etc..). By program it’s possible to define all the OIDs must be published and assign to them any program variables. Here an example:
VDefs.Type:=16#02; (* Variable type (Integer) *)
VDefs.Writable:=TRUE; (* The variable can be written *)
VDefs.OID:=ADR(‘1.3.6.1.4.1.36955.1’); (* OID definition *)
VDefs.Address:=ADR(Value); (* Variable address *)
VDefs.Length:=SIZEOF(Value); (* Variable length *)The SNMPManager FB, allows the system to act as SNMPManager, with this FB you can read any OID from any systems, you define the IP address, the Community, the OID and the type of variable to be read. The FB reads the OID value and stores the result on the defined program variable. Here an example:
SNMPMng.Address:=ADR(‘192.168.0.184’); (* Agent address *)
SNMPMng.Community:=ADR(‘public’); (* Community *)
SNMPMng.VType:=16#04; (* Variable type (Octect string) *)
SNMPMng.OID:=ADR(‘1.3.6.1.4.1.36955.2’); (* OID to be read *)Sergio Bertana
Amministratore del forumIntanto iniziamo con il dire che la connessione è corretta, poi se leggi il datasheet della sonda di temperatura NS500,vedrai che la sonda accetta tensioni da 11÷30 Vdc quindi puoi tranquillamente usare il 24Vdc. Il riferimento ai 12Vdc è una indicazione ma non è vincolante.
In merito al modulo espansione 20I/O mixed signal, il modo di acquisizione 4÷20mA diferenziale è stato introdotto dalla versione firmware SFW170C100. Quindi puoi eseguire un upgrade del firmware (Vedi FAQ) oppure selezionare l’acquisizione in modo comune, in questo modo avresti anche 4 ingressi al posto di 2.
Ti rimando a questo topic per altre informazioni.
Marzo 15, 2016 alle 10:25 am in risposta a: Eseguire iterazione (Ciclo FOR) su membri struttura #39455Sergio Bertana
Amministratore del forumL’iterazione sui membri di una struttura dati è possibile solo se tutti i membri della struttura sono dello stesso tipo, nel tuo caso mi sembra di capire che sono tutti UDINT quindi è sicuramente possibile iterare.
Per gestire le temporizazzioni si utilizza il valore di tempo di sistema ritornato dalla funzione SysGetSysTime, è un un UDINT che si incrementa ogni uS, al valore massimo esegue overflow a zero, non è possibile quindi effettuare comparazioni dirette con il tempo di riferimento ma occorre sempre eseguire la differenza. Nel seguente esempio viene attivato Timeout se l’ingresso Di00M00 rimane attivo per più di un secondo.
IF NOT(Di00M00) THEN TimeBf:=SysGetSysTime(TRUE);
ELSE IF ((SysGetSysTime(TRUE)-TimeBf) >= 1000000) THEN Timeout:=TRUE; END_IF;
END_IF;Ho realizzato il programma TimerStruct che illustra l’utilizzo di una struttura di timers dove utilizzo una struttura dati che contiene tutti i tempi di riferimento per mostrare come eseguire un ciclo FOR di iterazione (Ecco la stampa del programma ed il programma sorgente).
Sergio Bertana
Amministratore del forumI pannelli operatore supportano fino a 3 connessioni VNC contemporanee ma tutte le connessioni VNC riportano esattamente la copia della pagina visualizzata sul pannello. Non puoi fare pagine diverse gestibili dalle varie connessioni.
Per avere pagine indipendenti gestibili da remoto occorre utilizzare un cMT-SVR che accetta fino a 3 connessioni remote contemporanee tra di loro indipendenti. Con il cMT-SVT è indipendente anche il livello di accesso tra le varie connessioni quindi puoi gestire anche livelli di password diversi (Topic).
Purtroppo però per accedere al cMt da remoto serve una apposita App da installare su smartphone o su PC e mi sembra di capire che nel tuo caso questo non è possibile.
Quindi le soluzioni posono essere come hai detto tu nuotare fino all’ultima spiaggia ed utilizzare in parallelo un’altro pannnello (Magari un economico 4.3″ TFT MT8050iE) dove realizzi una pagina specifica.
Se l’impianto utilizza un sistema con web server integrato (Esempio un ns SlimLine) puoi realizzare una pagina web con la Visualizzazione/Impostazione del valore che ti interessa.
Sergio Bertana
Amministratore del forumHo inserito i sorgenti nel programma proprio per permettere a tutti di comprenderne il funzionamento e poter modificare il FB secondo le proprie necessità. Quindi non ho realizzato un manuale dedicato al FB.
Come vedi dal programma LD del progetto al FB si passa la variabile CBAddress in cui occorre fornire l’indirizzo di una stringa dove l’FB appoggerà il valore letto dalla cella CSV (L’FB ritorna sempre stringhe). Siccome l’FB copia il contenuto della cella nella stringa per evitare che se la cella contiene un valore più lungo della stringa di appoggio si vada a sporcare locazioni contigue in CBLength occorre passarne la dimensione.
Ora aggiungo che siccome l’FB ritorna sempre stringhe anche se il tuo file CSV contiene numeri, i numeri sono comunque scritti in formato stringa, per ricavare da una stringa il numero si utilizza la funzione SysVarsscanf.
Sergio Bertana
Amministratore del forumQuello che cerchi lo puoi realizzare partendo dal FB di esempio FindTAGOnFile che trovi nel programma postato in questo topic.
Ma avendo stamattina un pò di tempo a disposizione e per dare a tutti gli utenti del forum un esempio di come utilizare l’ambiente LogicLab e le funzioni ed FB di supporto ho realizzato il programma CSVFileReader che contiene il blocco funzione RdCellFromCSV che permette di leggere una specifica cella (Indicata da riga e colonna) da un file CSV. Ammettendo di avere un file Data.csv caricato nella cartella Storage (Il file si può caricare con una connessione FTP, Topic) che contiene:
1,2,3
4,5,6
7,8,9Utilizzando il FB RdCellFromCSV ed indicando Row=1, Column=2 il FB ritornerà il valore 6. Ricordo che la numerazione delle righe e delle colonne parte da 0. Come si vede dalla stampa del FB ho inserito la gestione dello spionaggio (Topic) che permette da telnet di controllarne il funzionamento (Download programma).
Sergio Bertana
Amministratore del forumNella gestione del FIFO si definisce in FIFOSize la dimensione massima del file di appoggio, il FB automaticamente mantiene il file a quella dimensione. In pratica il FB inizia a scrivere nel file, poi raggiunta la dimensione limite riprende la scrittura dall’inizio. Questo vuol dire che più grande è il file più il FIFO può contenere dati senza sovrascrivere quelli più datati.
Conviene sempre utilizzare la versione più recente di libreria che sicuramente contiene i FB più aggiornati. Il comando Del era presente nella prima versione del FB perchè era previsto leggere un record con il comando Out e poi decidere di eliminarlo dal FIFO con il comando Del.
Nell’ultima versione di FB il comando è sparito, eseguendo il FB con il comando Out attivo il record inserito per primo viene ritornato in uscita ed automaticamente cancellato dal FIFO. Alla prossima esecuzione del FB con il comando di Out attivo viene ritornato il record successivo e così via fino allo svuotamento del FIFO.
Sergio Bertana
Amministratore del forumIn logicLab non abbiamo più gestito flags impulsive come in Remoter (L’ambiente di sviluppo famiglia Picosyst), ma è estremamente facile realizzare in proprio queste flags. La funzione SysGetSysTime ritorna il valore di tempo espresso su di una variabile UDINT che si incrementa ogni 1 uS. Utilizzando un UDINT avremo il roll over del valore ogni 4294.967295 secondi (71 minuti).
Utilizzando questa funzione è possibile gestire in linguaggio ST una flags con impulso di un loop di programma che si attiva ogni 100mS. Ecco il listato del programma.
PLCPulse100:=FALSE; (* Pulse bit every 100 mS *)
IF ((SysGetSysTime(TRUE)-TimeBf) >= 100000) THEN
TimeBf:=SysGetSysTime(TRUE); (* Time buffer (uS) *)
PLCPulse100:=TRUE; (* Pulse bit every 100 mS *)
END_IF;E solo modificando il valore di tempo nella IF ((SysGetSysTime(TRUE)-TimeBf) >= 100000) sarà possibile generare tutte le flags impulsive che servono.
In linguaggio ladder utilizzando il FB eTON è facilmente realizzabile la gestione di flags impulsive (Screenshot). Ho realizzato il programma Pulse100mS che contiene i due esempi in linguaggio LD ed ST (Download programma).
Sergio Bertana
Amministratore del forumNaturalmente l’operazione di invio di un file verso il server FTP occupa un certo tempo (Tanto più lungo quanto è più lungo il file), e durante questo tempo il file deve essere bloccato in scrittura, non devono esserci altri accessi da programma sul file in scrittura.
Sicuramente è buona l’idea di creare una copia del file originale che poi verrà utilizzata per il trasferimento in FTP, purtroppo non esiste un FB di copia files, quindi se vuoi fare una copia devi gestire la lettura del file di origine e la scrittura del file di destinazione.
Ma io ti consiglierei di fare transitare le operazioni di scrittura nel file locale da un FB FIFOFile (Topic), in questo modo ogni volta che il programma deve scrivere nel file in realtà scrive nel file di appoggio del FIFO e poi se il file trasferito in FTP è libero puoi estrarre i dati dal FIFO e scriverli nel file.
Così durante l’upload in FTP del file il FIFO continua ad accumulare i dati (Mantenendoli anche allo spegnimento) e poi quando le operazioni di FTP sono terminate potrai leggere dal FIFO e popolare il tuo file FTP di appoggio.
Sergio Bertana
Amministratore del forumMore informations about web pages, in SlimLine LogicLab it’s possible to use AJAX or HTML5 to develop pages that are automatically updated, with AJAX and Javascript the update uses the standard HTTP instead of connection with a dedicated TCP port like the Java application used by CODESYS. So when you publish the SlimLine web pages, you have only to publish the HTPP port 80.
In this topic it’s possible to find a web page with some standard HTML objects, in this topic an example on how to use AJAX to automatically update pages. This is a screenshot of a web page we use internally to our company to set the climatization time table and this is the source page.
If the browser that display the SlimLine web pages can access to Internet it’s possible to use the Google charts objects to make the pages more impressive (See the screenshot), in this topic we treat the argument.
Sergio Bertana
Amministratore del forumCODESYS and LogicLab are very similar in programs developing, mainly we suggest LogicLab due its cheaper costs (The CODESYS’s royalties are more expensive). About the features there is no great differences between the two environments, we develop functions and FBs mainly for LogicLab because it’s based on our proprietary operating system, so we obviously know it well than CODESYS and we can obtain the better results.
Sincerely CODESYS has the WebVisu facility that makes easy to create web pages and make possible to display and set program variables by using graphics objects. But unfortunately the WebVisu is based on Java and we have experienced some trouble with security. It’s difficult to display the page because the browser reports many security alerts and sometime (Specially on the smartphones) it’s not possible to display the page.
As you pointed out in the LogicLab at the moment there is not any facility to develop web pages, but it’s possible to design pages by using standard web editors. If in the source page special tags are written (They are written as HTM comment) the SlimLine HTTP server when sends the page to the browser automatically changes the tags with the variable values (Here the manual abstract).
Marzo 10, 2016 alle 5:04 pm in risposta a: Gestione credenziali accesso (password) su cMT-SVR #39443Sergio Bertana
Amministratore del forumIl Mocha VNC è un VNC viewer, il cMT-SVR non si utilizza con il VNC, non ha la gestione VNC perchè come detto prima può gestire fino a 3 connessioni contemporaneee e tutte tra di loro indipendenti, mentre il VNC è un semplice replicatore della pagina visualizzata sul pannello, utilizzando il VNC si lavora in parallelo con il pannello e con le varie sessioni di VNC aperte.Per visualizzare il cMT-SVR occorre utilizzare l’apposita App, esistono Apps per iOs e per Android, nella pagina del prodotto vi sono i links al market per il download.
Sergio Bertana
Amministratore del forumSui pannelli cMT-SVR la gestione della protezione è stata un pò modificata, rimando a questo topic per tutte le informazioni.
Marzo 9, 2016 alle 10:47 am in risposta a: Gestione credenziali accesso (password) su cMT-SVR #39440Sergio Bertana
Amministratore del forumPer quanto riguarda i pannelli cMt-SVR occorre fare una premessa, siccome il cMT può gestire fino a 3 Tablet/Smartphone connessi contemporaneamente ed ognuno di essi è indipendente dagli altri nella gestione delle pagine, è stato creato un nuovo tipo di variabili le PLW. Le PLW sono variabili che sono legate al pannello che stà visualizzando la pagina, quindi avremo ad esempio 3 PLW-1000 con valori diversi legate ai 3 Tablets connessi.
Detto questo veniamo alla gestione della sicurezza, il cMT usa sempre la sicurezza avanzata quindi è possibile definire utenti e password in modalità testuale (Screenshot). Come si vede ho dichiarato due utenti con username Utente1 ed Utente2 e con password Psw1 e Psw2. Attenzione alla impostazione del controllo indirizzo perchè come vedremo per gestire il login utilizzeremo la pagina di template 70, e questa pagina è preconfezionata con i riferimenti alla word di controllo PLW-1000.
Veniamo ora al progetto di cui allego lo screenshot, come si vede agendo sul tasto Login/Logout si attiva la visualizzazione in pop up della pagina 70 che contiene tutti gli oggetti per la gestione del login. Un menù a tendina visualizza tutti gli utenti definiti, una casella di testo permette di scrivere la password (Case sensitive), attenzione dopo avere scritto la password confermare con il tasto Enter. Il tasto di Login esegue il controllo della password inputata e se accettata come nell’esempio viene attivata la classe relativa e siccome la visualizzazione del pulsante Toggle 1 era legata alla classe A il pulsante viene visualizzato (Download progetto).
-
AutorePost