Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 2,836 a 2,850 (di 4,367 totali)
  • Autore
    Post
  • in risposta a: Gestire comunicazione RS485 in multi-point #38462
    Sergio Bertana
    Amministratore del forum

    Hai dettagliato molto bene la tua situazione, analizzandola emerge come l’utilizzo di un prodotto programmabile come la nostra serie SlimLine grazie alla disponibilità di un gran numero di blocchi funzione per la gestione della comunicazione con diversi protocolli permetta in modo semplice di fare dialogare tra di loro in “serenità” (Prendo in prestito la tua definizione) apparati diversi di diversi vendors.

    Intanto inizio con il chiederti perchè disponendo di un modulo SlimLine con Ethernet non hai interconnesso il terminale operatore usando l’interfaccia Ethernet al posto della porta seriale. Basta impostare la comunicazione con il protocollo Modbus TCP al posto del Modbus RTU.

    Ma vengo alla tua domanda, l’interfaccia RS485 è nata per le comunicazioni multidrop, più apparati connessi con un doppino twistato. Il protocollo modbus gestisce la comunicazione multidrop, il master interooga i vari nodi che devono avere indirizzi diversi e stessa modalità di comunicazione seriale. Lo standard RS485 teoricamente può supportare fino a 32 dispositivi connessi sul bus (con ricevitori speciali ad alta impedenza questo numero può essere aumentato fino a 128 o 256). Questa quantità è determinata solamente dalla capacità di pilotaggio del driver di trasmissione e dalla impedenza d’ingresso dei ricevitori.

    Per gestire da SlimLine la comunicazione Modbus multidrop su seriale ti viene in aiuto la FB ModbusMaster che permette di essere eseguita in cascata (Topic). In questo topic trovi esempio di rete modbus tra moduli CPU SlimLine utilizzati come remote I/O.

    in risposta a: Utilizzo del convertitore Temperatura/Modbus ST485C #37079
    Sergio Bertana
    Amministratore del forum

    Il modulo dispone di una memoria EEPROM per la memorizzazione della configurazione, è possibile impostare il numero di nodo ed il valore di baud rate di comunicazione. Vediamo come effettuare la configurazione del modulo, per ulteriori informazioni si rimanda al manuale utente allegato al modulo. Tutte le operazioni sono eseguite con comandi di scrittura registri modbus (0x10 Write Multiple Registers).

    a) Scrivere il valore 0x0001 nel registro modbus 0x0002 (EEPROM Write Enabled).
    b) Scrivere l’indirizzo di nodo (Registro 0x0003 Low) e baud rate (Registro 0x0003 High).
    c) L’operazione di scrittura memorizza il valore in memoria EEPROM ed azzera il bit di abilitazione.
    d) Spegnere e riaccendere il modulo.

    in risposta a: Acquisizione temperatura acqua su tubo #37781
    Sergio Bertana
    Amministratore del forum

    Per rendere più chiara la connessione dei dispositivi con uscita 4÷20mA ai nostri moduli di acquisizione analogica ecco lo schema di connessione del sensore STI Pt1000. Nello schema sono rappresentate i due possibili modi di connessione.

    Common mode
    Si utilizza sui moduli CPU Compact e 20I/O mixed signal, sui moduli CPU compact visto che è prevista la sola lettura 0÷10Volt è necessario utilizzare la resistenza da 500Ω. Sul modulo mixed signal essendo prevista la modalità ingresso in corrente occorre utilizzare la resistenza da 62Ω fornita insieme al modulo.

    Differential mode
    Si utilizza nei moduli di espansione I/O analogico, essendo prevista la modalità ingresso in corrente occorre utilizzare la resistenza da 62Ω fornita insieme al modulo. E’ utile ricordare che nella connessione in differenziale per avere i vantaggi di eliminazione dei disturbi propria del tipo di connessione, occorre utilizzare un cavo twistato e la connessione di entrambi i capi del segnale Aixx+ ed Aixx- deve essere fatta il più vicino possibile al dispositivo da acquisire.

    in risposta a: Esportare dati sul web da SlimLine (Usando Php) #38460
    Sergio Bertana
    Amministratore del forum

    Se sul sito dove hai lo SlimLine hai un IP statico o un router ADSL che supporta DynDNS (L’importante è che il fornitore del servizio ti dia un IP pubblico) puoi usare la tecnica da me descritta. Naturalmente il server PHP dovrà attivare lo script ad intervalli regolari.

    Il fare richiedere la pagina web sul server dallo SlimLine con i parametri in GET (Come da tè indicato) è la tecnica che ho descritto nel caso di utilizzo del modem. In questo caso è il modem che gestisce l’invio dell’header http.

    Siccome lo SlimLine allo stato attuale non può agire come client TCP ma solo come server, per aprire la conessione in modo client puoi usare (Come hanno fatto alcuni clienti) un convertitore Ethernet/Seriale connesso alla seriale dello SlimLine e delegare al convertitore l’apertura della connessione TCP, mentre lo SlimLine invierà l’header http tramite la seriale.

    in risposta a: Acquisizione temperatura acqua su tubo #37093
    Sergio Bertana
    Amministratore del forum

    Non presentati sulle pagine del nostro sito ma disponibile su ordinazione i modelli NS 540 con uscita in corrente 4÷20mA ed NS 740 con uscita in tensione 0÷10V contengono in un unico contenitore adatto al montaggio diretto sul tubo sia il sensore che il condizionatore di segnale (Vedi datasheet serie completa).

    in risposta a: Esportare dati sul web da SlimLine (Usando Php) #38458
    Sergio Bertana
    Amministratore del forum

    La domanda non specifica se si tratta di server Web che gira in una rete locale o VPN, oppure se è distribuito geograficamente ed in tal caso come è connesso alla rete Internet. In ogni caso vediamo le possibili soluzioni.

    Rete locale, VPN, connessione con IP statico o DynDNS, il server sul cloud può con uno script PHP eseguito a tempo (Esempio cron di Linux) effettuare l’accesso ad una pagina web dello SlimLine. Nella pagina vi sono i TAG di visualizzazione variabili (Creazione di pagine dinamiche topics (1), (2), (3)). Eseguendo la richiesta della pagina come se fosse un browser lo script PHP riceve i valori e li memorizza nel database. Ipotizzando di avere nello SlimLine una pagina Values.htm nella directory Storage, per eseguirne la lettura lo script PHP utilizzerà la funzione file_get_contents nel modo:

    $Content=file_get_contents(“http://192.168.0.122/Storage/Values.htm);

    Ho preparato un semplice esempio con un programma SlimLine che gestisce 4 contatori, ed un programma PHP che ne esegue la lettura e li ritorna in echo. Naturalmente il programma PHP andrà eseguito a tempo ed andrà inserita tutta la gestione MySQL. Sullo SlimLine andrà caricato nella cartella Storage il file Values.htm (Download esempio completo).

    Se invece la connessione viene effettuata tramite un modem puoi vedere questo topic.

    in risposta a: Controllo motore passo-passo in Modbus #38457
    Sergio Bertana
    Amministratore del forum

    Le variabili DINT, UDINT, REAL solitamente sono allocate in due registri consecutivi, quindi basterà leggere o scrivere da Modbus 2 registri all’indirizzo della variabile. L’unico problema che ci può essere riguarda l’endianness dei dati siccome Modbus non prevede gestione di variabili a 32 bits non esistono specifiche che trattano l’endianness.

    SlimLine è basato su di un procesore ARM che utilizza la memorizzazione dei dati nel formato little-endian, inizia dal byte meno significativo per finire col più significativo ora se anche il sistema slave usa la stessa endianness non ci sono problemi, se invece il sistema utilizza il formato big-endian devi eseguire uno SWAP della variabile. Ecco il codice in ST

    VarOut:=ROL(VarIn, 16); (* Output variable *)

    Altro discorso per le variabili REAL dove oltre al problema endianness devi fare riferimento al formato del dato, SlimLine utilizza lo standard IEEE 754-1985 in singola precisione a 32 bit (Topic). Questa codifica è la più utilizata e quindi non ci dovrebbero essere problemi.

    in risposta a: Acquisizione temperatura acqua su tubo #36286
    Sergio Bertana
    Amministratore del forum

    Nella gamma di sensori Sensit abbiamo sensori adatti al montaggio diretto su tubo . La gamma comprende una vasta serie di sensori ma per l’applicazione io consiglio il modello Pt1000. Purtroppo l’ingresso analogico del Modulo CPU Compact prevede solo ingresso da 0÷10Volt. Quindi per l’acquisizione o aggiungi un modulo di espansione, il modello mixed signal (Acquisisce 2 sensori) il modulo analogico (Acquisisce 5 o 10 sensori). Se però hai un solo sensore da acquisire la soluzione più comoda è utilizzare il convertitore di temperatura STI (Attenzione occorre specificare in fase di ordine il range di temperatura da convertire).Il convertitore esce con una corrente 4÷20mA, per poter utilizzare l’ingresso analogico del modulo CPU compact occorre convertirla in volt, possiamo utilizzare una resistenza da 500Ω. Siccome il convertitore si alimenta tramite il circuito di uscita per garantire che alla massima uscita 20mA ai capi del convertitore vi siano ancora i volts sufficienti ad alimentarlo, occorre utilizzare una tensione di 24V per alimentare il circuito di lettura.Per la lettura è possibile utilizzare lo stesso programma in FBD riportato in questo topic, ecco la foto del test da me effettuato dove si vede il convertitore STI, la sonda Pt1000 il modulo CPU Compact e l’alimentatore 24Vdc.

    in risposta a: Lettura velocità vento con soglie programmabili da pagina web #38456
    Sergio Bertana
    Amministratore del forum

    Il mio esempio voleva spiegare come realizzare l’intera applicazione, con particolare focus sulla visualizzazione web. Per questo ho scelto di acquisire un anemometro con uscita analogica. Ma certo moltissimi anemometri hanno una uscita digitale in tal caso è anche molto più economico gestirne l’acquisizione in quanto basta utilizzare un comune ingresso digitale.

    Tra tutti i programmi sviluppati ho trovato quello che avevo suggerito ad un cliente per la lettura proprio di un anemometro digitale ecco la stampa. Questo programma è eseguito nella task Fast (Ogni 1 Ms) quindi può acquisisre una frequenza massima di 400Hz.

    Come vedi vengono conteggiati gli impulsi sull’ingresso digitale e ogni 30 secondi viene eseguito il calcolo della velocità del vento. Il valore letto viene poi mediato con la FB Average. La scelta del tempo di campionatura di 30 S era basata sul numero di impulsi generati dall’anemometro. Più veloce è la campionatura minore è la risoluzione in lettura della velocità.

    in risposta a: Controllo motore passo-passo in Modbus #38454
    Sergio Bertana
    Amministratore del forum

    Intanto inizio con il suggerirti di utilizzare il nuovo FB ModbusMaster (Estratto manuale) di gestione protocollo modbus master, vediamo le nuove ed interessanti caratteristiche di questa FB.

    Può essere gestita in sequenza, puoi cioè definire piu istanze della FB definendo per ogni istanza il comando modbus da eseguire, basta connettere il Done della FB precedente sull’Enable di quella successiva per effettuare tutti i comandi in sequenza (Vedi questo topic). Certo che se i registri da leggere e/o scrivere sono molti e non consecutivi, piuttosto che istanziare in LD o FBD molte FB conviene gestire una sola FB da ST gestendo una macchina a stati con l’operando CASE (Trovi un esempio di programma in questo topic).

    Se poni a TRUE l’ingresso SpyOn ti sarà possibile attivare la procedura di spionaggio da connessione Telnet e vedere i dati trasmessi e ricevuti su porta seriale, questo ti permetterà di capire cosa risponde l’azionamento. Può essere che fai un indirizzamento fuori range, chiedi troppi registri contemporaneamente o utilizzi un comando modbus non supportato.

    Ricordati che il protocollo Modbus ha un offset di 1 quindi se nella FB definisci indirizzo di lettura 100 sul pacchetto Modbus verrà inviato l’indirizzo 99 in quanto il dispositivo Slave dovrebbe in accordo allo standard sommare 1. In molti dispositivi Slave questo non viene fatto, quindi in tal caso devi sommare 1 tu all’indirizzo richiesto.

    in risposta a: Come utilizzare la SDCard per il salvataggio di file di log #38453
    Sergio Bertana
    Amministratore del forum

    Se esegui il download  del programma che trovi in uno dei posts di questo topic hai già una buona base di partenza. Comunque partendo dal programma del post precedente ho preparato un programma che realizza quello che necessiti, ecco la stampa del programma WriteLog.

    Come vedi ho definito un array di stringhe per la definizione dei giorni setimanali, così è possibile scrivere un file CSV per ogni giorno (Il file avrà il nome del giorno). Al cambio di giorno viene cancellato il file dello stesso giorno (Si tratta del file della settimana prima) e viene creato un nuovo file del giorno con i nuovi dati. In questo modo hai una settimana di tempo per eseguire il download in FTP dei file di log memorizzati.

    Il record di log l’ho creato nel formato 2014-10-08 09:25:58;02.8;02.8;02.8;02.8, come vedi il campo data/ora è seguito dai 4 valori analogici. Nel mio esempio eseguo una sola acquisizione analogica per tutti e 4 i canali ma lascio a te il compito di effettuare le 4 acquisizioni e riportarle nel record.

    Credo che  con questo esempio insiene all’esempio precedente hai tutte le indicazioni per realizzare il tuo DataLogger. Ecco il programma sorgente.

    in risposta a: Lettura velocità vento con soglie programmabili da pagina web #38449
    Sergio Bertana
    Amministratore del forum

    In questo topic dove si trovano altre informazioni su come gestire l’aggiornamento automatico delle pagine HTM con la tecnica AJAX.

    in risposta a: Lettura velocità vento con soglie programmabili da pagina web #38446
    Sergio Bertana
    Amministratore del forum

    Ho analizzato le tue necessità ed ipotizzando l’utilizzo di 2 anemometri analogici puoi utilizzare sia un modulo SlimLine compact che un modulo NetLogIII. Ho pensato di realizzare due pagine web una per la visualizzazione dei valori istantanei ed una per l’impostazione dei parametri. Nella pagina di visualizzazione valori ho utilizzato la tecnica AJAX per permettere la visualizzazione dei valori in tempo reale senza dover ricaricare la pagina nel browser.

    Intanto vediamo il programma di cui allego la stampa, il cuore è nel program “WindSpeed” dove vengono acquisiti i valori analogici dei due anemometri e tramite la funzione ValueScale sono convertiti direttamente in velocità. Il FB Average esegue una media sul valore acquisito per stabilizzare la lettura. Di seguito viene eseguita la logica di gestione allarme in uscita (Per semplicità ho trattato un solo canale).

    Come si può notare dalla allocazione delle variabili globali tutte le variabili che devono esserre visualizzate e/o impostate da pagina web sono allocate nella DB 100. Quelle di impostazione a partire dall’indirizzo 2048 per averle tamponate (RETAIN).

    Come si vede dallo screenshot nella pagina Home sono visualizzate le due velocità del vento e lo stato di funzionamento del sistema, lo sfondo della visualizzazione cambia colore in base all’errore ed allo stato attuale. Per capire il funziomento della visualizzazione occorre visualizzare il codice sorgente della pagina di cui riporto la stampa.

    Nella linea 28 vi è la funzione javascript di gestione AJAX (Non và toccata), nella linea 27 si arriva ad ogni esecuzione richiesta AJAX con i valori da visualizzare e si provvede a visualizzarli ed a gestire lo sfondo. La richiesta AJAX si attiva alla riga 64 dove sul caricamento pagina si esegue una chiamata AJAX per visualizzare immediatamente i valori e s i attiva uan richiesta ad intervallo per avere la visualizzazione automatica.

    La richiesta AJAX non fà altro che caricare la pagina Values.htm che contiene indicazione degli indirizzi e della formattazione dei dati da visualizzare, ritornandoli in una stringa separati dal carattere “|”.

    In testa alla pagina ho inserito 3 pulsanti fatti con dei div per navigare tra le varie pagine. Ma più utile delle spiegazioni allego il progetto completo con tutti i sorgenti sia del programma SlimLIne che delle pagine web (Download).

    in risposta a: Come collegare l’alimentazione al termometro STE #38444
    Sergio Bertana
    Amministratore del forum

    Il termometro STE viene fornito in due versioni, una con alimentatore estrno (Compreso nella fornitura) ed una con alimentazione PoE. Entrambi i modelli presentano comunque il connettore Jack Ø3.5 x 1.35/10 [mm] di alimentazione.

    Per alimentare il dispositivo dal connettore jack di alimentazione occorre fornire una tensione di 5Vdc 250mA con il polo positivo al centro ed il negativo sull’esterno.

    Per la configurazione, attaccandolo direttamente ad un PC (Che come ovvio non fornisce alimentazione PoE) occorre provvedere anche alla alimentazione tramite l’alimentatore esterno. Rimando a questo topic per informazioni sulla configurazione.

    in risposta a: Conversione lettura temperatura da sonda NS700 #38442
    Sergio Bertana
    Amministratore del forum

    Ho effettuato una prova diretta utilizzando un sensore Sensit NS700 connesso all’ingresso analogico di un modulo CPU compact ed ho realizzato un semplice programma in FBD (Vedi foto).

    Come si vede dal programma in FBD con la FB SysGetAnaInp eseguo l’acquisizione del valore di tensione in uscita al sensore (Utilizzo uno degli ingressi del modulo CPU quindi Address 255 Channel 0). Il sensore NS700 ha una uscita in tensione da 0÷10 Volt con un range di temperatura da -30÷60 gradi centigradi, quindi utilizzando la funzione ValueScale eseguo la scalatura diretta dal valore di tensione al valore di temperatura.

    Siccome il sensore esegue l’uscita del valore istanteneo di temperatura e l’acquisizione è molto veloce ho utilizzato la FB LRamp per integrare il valore di temperatura acquisito in modo da avere un valore stabile e poterne apprezzare la lettura anche dei numeri decimali. Il coefficente di rampa di 0.1 Step/Sec fà sì che ipotizzando uno step di temperatura da 0 a 25 gradi il valore in uscita impiegherà 250 secondi per raggiungere il valore. Occorre tenere presente che la temperatura è un fenomeno lento quindi è accettata una integrazione molto lenta (Allego programma sorgente).

Stai visualizzando 15 post - dal 2,836 a 2,850 (di 4,367 totali)