Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,691 a 3,705 (di 4,379 totali)
  • Autore
    Post
  • in risposta a: Standard utilizzato per calcoli in virgola mobile (floating) #37185
    Sergio Bertana
    Amministratore del forum

    Riporto la formula da iutilizzarsi per l calcolo del valore REAL di un numero decimale.

    Calcolo esponente
    Occorre trovare l’esponente di 2 per cui dividendo il numero si ottiene un risultato maggiore di 1 e minore di 2.

    Calcolo mantissa
    Si divide il numero per 2 elevato all’esponente trovato e si sottrae dal risultato 1.
    Si moltiplica il numero per 2 elevato alla 23.

    Calcolo valore REAL
    Si somma 127 al valore di esponente trovato.
    Si moltiplica per 2 elevato alla 23 il risultato e si somma al valore della mantissa.

    Esempi
    Numero decimale 123.87, l’esponente è 6.
    Mantissa (123.87/2^6)=1,93546875 sottraggo 1 diventa 0.93546875. (0.93546875*2^23) in hex 16#77BD71
    Valore REAL ((127+6)*2^23) in hex 16#42800000, sommando la mantissa 16#42800000+16#77BD71=16#42F7BD71

    Se il numero è negativo si somma 16#80000000

    Attenzione! Su SlimLine i numeri sono rappresentati in Little-Endian quindi il valore REAL di 123.87 rappresentato come  sequenza di bytes sarà 16#71, 16#BD, 16#F7, 16#42. Come si vede dallo screenshot eseguendo un programma che ha allocate allo stesso indirizzo dell’area DB100 tre diverse variabili una REAL, una DWORD ed un array di BYTES. Caricando il programma sullo SlimLine e definendo nella finestra di Watch diversi valori della variabile REAL si può vedere la rappresentazione del valore (Download programma).

    in risposta a: Rilevamento temperature in stanze di edifici #37184
    Sergio Bertana
    Amministratore del forum

    Il bus 1-Wire è un bus multidrop più dispositivi possono essere connessi in parallelo sul bus, quello che puoi fare è connettere un adattatore 1-Wire a RS232 sulla porta seriale dello SlimLine e connettere tutti sensori a questo convertitore.

    Per la realizzazione del bus 1-Wire Dallas raccomanda di utilizzare un cavo CAT5 non schermato, si consiglia di collegare i sensori con un unico cavo continuo che và da sensore a sensore (daisy chain), questo consente di ridurre le riflessioni sul cavo. Quindi non puoi realizzare una topologia di connessione a stella. Collegando più di 10-15 sensori si possono causare problemi dovuti al caricamento del bus dati, per minimizzare questo effetto è possibile posizionare una resistenza da 100-120 ohm in serie al segnale di data di ciascun sensore.

    Attenzione! Guardati la nota relativa alle specifiche del bus 1-Wire che trovi in questo post, ma ricorda che tipicamente la rete 1-Wire non può superare i 60 metri. La risoluzione dei sensori di temperatura è 0.01°C, e la loro precisione nel range da -10°C a +85°C è di 0.5°C.

    Se la tua rete è molto distribuita è meglio utilizzare i sensori connessi in RS485 che offrono maggiori garanzie sulla distanza. Ma anche nel caso di connessioni in RS485 non puoi realizzare una topologia di connessione a stella ma deve sempre essere una connessione di tipo Daisy-chain.

    in risposta a: Rilevamento temperature in stanze di edifici #37182
    Sergio Bertana
    Amministratore del forum

    Nelle sonde Pt100 essendo molto bassa la differenza di resistenza da misurare vi è sicuramente un problema di compensazione della resistenza dei cavi. Per questo motivo consiglierei di utilizzare un cablaggio a 4 fili in modo da compensare la caduta resistiva del cavo.Una alternativa è l’uso delle sonde Pt1000 che avendo una resistenza 10 volte maggiore subiscono meno l’influenza della resistenza dei cavi.In entrambi i casi per evitare o minimizzare gli effetti dei disturbi elettromagnetici consiglio l’utilizzo di un cavo schermato e twistato per la connessione delle sonde.Se per la gestione delle temperature utilizzi un nostro sistema SlimLine un modulo espansione I/O analogico di tipo PCB126*130 può acquisire sino a 10 sonde Pt100 e/o Pt1000, più moduli di espansione possono essere connessi al sistema.Con l’adattatore 1-Wire a RS232, puoi utilizzare come sonde di temperatura e di umidità le sonde 1-Wire (Vedi pagina), appositi blocchi funzioni permettono di gestire le sonde direttamente da SlimLine (Vedi post).In alternativa alle sonde di temperatura, puoi utilizzare il prodotto Temp-485 Box2 (Vedi datasheet) per la misurazione della sola temperatura oppure il prodotto HTemp-485 Box2 che permette di acquisire sia la temperatura che l’umidità. I dispositivi possono essere connessi in RS485, un apposito blocco funzione ne permette l’acquisizione da SlimLine (Vedi post). Se l’edificio è cablato in rete Ethernet, è possibile utilizzare il prodotto HWg-STE2, ogni dispositivo può leggere la temperatura ed aggiungendo una sonda anche l’umidità, anche per questo dispositivo un apposito blocco funzione ne permette l’acquisizione da SlimLine (Vedi post).

    in risposta a: Invio di notifiche verso server Syslog #37181
    Sergio Bertana
    Amministratore del forum

    It’s available the new version of the manual MNL151C*20 SlimLine system IEC61131-3 programming Manual (English). In this manual version, the SysLogReport function block is explained.

    You can download this manual from our web site, in the download area of the SlimLine ARM7 IEC61131-3 CPU page (Go to page).

    in risposta a: Connessione inverters Aurora a dispositivo di telecontrollo #37180
    Sergio Bertana
    Amministratore del forum

    Sia il protocollo modbus che il protocollo proprietario della Power One sono protocolli a pacchetto a singolo master, quindi non puoi connettere all’inverter contemporaneamente sia il data logger che in convertitore Modbus. Noi abbiamo sviluppato applicazioni gestendo direttamente il protocollo Power One tramite i nostri sistemi programmabili SlimLine (Vedi post). Quindi con un semplice programma, lo SlimLine può diventare una interfaccia Modbus/Power One, ma non risolveresti il problema. Ti do alcune possibili soluzioni, ma sono abbastanza complesse e se hai una sola applicazione il tempo/costi di sviluppo probabilmente non sono compatibili. Una soluzione è di utilizzare una CPU SlimLine connessa all’inverter od agli inverter in multidrop ed utilizzando un pannello operatore realizzare il datalogger eliminando il Solarlog. Il pannello operatore può visualizzare dati storici in trend grafico e salvarli su disco (E’ dotato di un file system). In questo modo la CPU SlimLine rende disponibile una porta seriale per la connessione di un telecontrollo in Modbus. Inoltre connettendo un modem al modulo è possibile inviare/ricevere SMS con allarmi e/o riepilogativi di produzione (Vedi post). Un’altra soluzione è di utilizzare una CPU SlimLine connessa all’inverter od agli inverter in multidrop e tramite un programma da realizzare ad hoc, su una delle sue porte seriali rendere disponibile lo stesso protocollo Power One cosi da poter collegare il datalogger Solarlog. Sull’altra porta seriale sarà disponibile il protocollo Modbus per il telecontrollo.

    in risposta a: Gestione ricette su files #37179
    Sergio Bertana
    Amministratore del forum

    Per quanto riguarda la comprensione dei valori riportati occorre fare mente locale con la posizione delle variabili nella memoria. Prendendo ad esempio una definizione come quella riportata nello screenshot, avremo le variabili:

    BOOLVar, allocata ad indirizzo DB100.2048, con valore TRUE
    USINTVar, allocata ad indirizzo DB100.2049, con valore 120 (16#78)
    UINTVar, allocata ad indirizzo DB100.2050, con valore 12000 (16#2EE0)
    UDINTVar, allocata ad indirizzo DB100.2054, con valore 120000 (16#1D4C0)
    REALVar, allocata ad indirizzo DB100.2058, con valore 12,5 (16#41480000)

    La prima cosa da notare è che la variabile UDINTVar è allocata ad indirizzo DB100.2054 (Vengono lasciati liberi due bytes DB100.2052 e DB100.2053) questo perchè le variabili a 16 bits vanno sempre allocate ad indirizzi divisibili per 2 e le variabili a 32 bits vanno sempre allocate ad indirizzi divisibili per 4. Il file dump è il seguente:

    00000000: 01 78 E0 2E 00 00 C0 D4 | 01 00 00 00 48 41 00 00

    Come si nota il primo valore è 16#01 e corrisponde alla variabile BOOLVar, poi segue il valore 16#78 che corrisponde alla variabile USINTVar, queste sono variabili ad un solo byte e quindi non vi è il problema della endianness dei dati.

    Per le variabili a 16 e 32 bits occorre ricordare che SlimLine è basato su un ARM, e sfrutta una architettura Little-Endian, quindi il byte meno significativo si trova ad indirizzo più basso rispetto al byte più significativo. La variabile UINTVar viene riportata con i valori 16#E0 e 16#2E. La variabile UDINTVar viene riportata con i valori 16#C0, 16#D4, 16#01, 16#00.

    Per la variabile REALVar il discorso è ancora più complesso, le variabili REAL utilizzano 4 bytes (32 bits) il valore è espresso nel formato IEEE 754-1985 (1 bit di segno, 8 bits di esponente, 23 bits di mantissa) (Vedi post). Il valore 12,5 è rappresentato in esadecimale con 16#41480000 che nel file di dump viene riportato con i valori 16#00, 16#00, 16#48, 16#41.

    in risposta a: Gestione ricette su files #37178
    Sergio Bertana
    Amministratore del forum

    Il blocco funzione di dump memoria esegue la copia del valore di ogni byte di memoria sul file, il valore è scritto in esadecimale usando due digit per ogni byte, vengono riportati 16 bytes per ogni riga del file. Nel file l’indirizzo parte sempre da 00000000 ma devi tenere presente che in realtà quell’indirizzo corrisponde all’offset a partire dal valore che tu hai definito in MBufferPtr. Nel tuo caso che esegui il dump di tutta l’area RETAIN a partire da DB100.2048 per 2048 bytes, avrai definito:

    RMng.MBufferPtr:=ADR(%MX100.2048); (* Pointer buffer parametri *)
    RMng.MBufferSize:=2048; (* Dimensione buffer parametri *)

    Il file di dump ottenuto partirà da indirizzo 00000000 e all’ultima riga riporterà l’indirizzo 000007F0. Ecco un esempio di file (Sono state omesse tutte le righe tranne le prime due e l’ultima):

    00000000: 01 78 E0 2E 00 00 C0 D4 | 01 00 00 00 48 41 00 00
    00000010: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00
    ………….
    000007F0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

    Quindi l’indirizzo 00000000 corrisponde al byte di memoria %MX100.2048 ed ha valore 16#01, l’indirizzo seguente corrisponde al byte di memoria %MX100.2049 ed ha valore 16#78 e così via. L’indirizzo 000007F0 corrisponde al byte di memoria %MX100.4080 e l’ultimo indirizzo della riga corrisponde al byte di memoria %MX100.4095.

    in risposta a: Esempi programmazione in IEC61131 #37176
    Sergio Bertana
    Amministratore del forum

    Ora è tutto chiaro, quindi avendo bisogno di un solo ingresso digitale, puoi utilizzare il solo modulo CPU che dispone di 2 ingressi digitali. Per contare i sacchi quindi occorre verificare il tempo di attivazione dell’ingresso che potrebbe essere una fotocellula di lettura sacco.
     
    Nel programma prevederò due valori di tempo soglia minimo e massimo per i due tipi di sacco. Se il tempo è compreso nel range del sacco piccolo incrementerò il numero di sacchi piccoli, se il tempo è compreso nel range del sacco grande incrementerò il numero di sacchi grandi. Tutti i tempi non compresi in questo range saranno scartati (Errore di lettura).
     
    Ti realizzo un programma completamente testabile sul simulatore PC, attivando opportunamente l’ingresso Fotocellula vedrai gestire i counters di sacco. Nel programma ho realizzato un blocco funzione TimeRange che poi viene utilizzato in linguaggio ladder per gestire il conteggio sacchi.
     
    L’FB TimeRange ha un ingresso a cui collegare l’ingresso di fotocellula e prevede la definizione di un tempo minimo e massimo di attivazione ingresso. Se l’ingresso è attivato per un tempo compreso nel range si attiva per un loop di programma l’uscita Ok che gestisce l’incremento del counter di sacco.
     
    Nella task di Boot viene eseguito il programma StartUp che definisce le etichette ed i ranges delle variabili sul simulatore in modo da personalizzarlo per il tuo programma (Screenshot). Per aggiornare le etichette occorre dopo avere trasferito il programma nel simulatore agire sul tasto Reboot Plc.
     
    Usandolo sul simulatore potrai vedere i valori sia nel simulatore che in debug, mentre per la tua applicazione devi usare forzatamente un modulo CPU SlimLine e per leggere i valori puoi utilizzare un pannello operatore oppure un programma su PC utilizzando il protocollo Modbus RTU oppure Modbus over IP. Stampa programma e download programma sorgente.

    in risposta a: Esempi programmazione in IEC61131 #37174
    Sergio Bertana
    Amministratore del forum

    La domanda non è chiarissima, ho cercato di interpretarla, ho realizzato un semplice progetto LogicLab che utilizza due programmi. Il controllo del tempo viene eseguito sull’ingresso 0 del modulo CPU di SlimLine, ma può essere facilmente modificato per gestire ingressi logici da qualsiasi modulo di estensione.

    LogicIO: Programma in LD, esegue l’acquisizione dei due ingressi sul modulo CPU di SlimLine.
    CheckTime: Programma in ST, esegue il calcolo del tempo di attivazione e gestisce i counters.

    Ho definito 3 soglie di tempo e 4 counters, un counter per ogni soglia ed uno se il valore di tempo è inferiore alla 1a soglia. I tempi sono calcolati in uS, se tempo inferiore ad 1 secondo viene incrementato il Counter[0], tempo tra 1 e 2 secondi  viene incrementato il Counter[1], tempo tra 2 e 3 secondi viene incrementato il Counter[2], tempo superiore a 3 secondi viene incrementato il Counter[3].

    Download stampa programma e programma sorgente.

    in risposta a: Distanza massima connessione in RS422/485 #37172
    Sergio Bertana
    Amministratore del forum

    Lo standard RS422/485 riporta come indicazione di distanza massima tra due apparati 1200 metri (4000 ft), utilizzando un cavo telefonico twistato da 24 AWG con capacità tipica di di 52.5 pF/m (16 pF/ft) e 100 Ohm di impedenza. Il cavo deve essere terminato da entrambe le estremità con una resistenza da 120 Ohm.

    Se  si verificano le caratteristiche del convertitore RS232-RS422/485 ATC-108N e del repeater RS422/485 ATC-109N, si riscontra come indicazione di velocità:

    15.2K Bps to 1.2 Km, 38.4K Bps to 2.4 Km, 9600 Bps to 5 Km

    Questo dato è riscontrabile anche su altri convertitori di altri fornitori. Essendo un dato in contrasto con quanto riportato dalle specifiche, ho chiesto al nostro fornitore delucidazioni. Il fornitore mi informa che nel mondo hanno clienti che hanno realizzato reti in RS422/485 utilizzando i loro convertitori, su distanze da 3 a 5 Km, usando velocità di comunicazione inferiori ai 9600 Bps.

    Io non ho informazioni dirette di comunicazioni su distanze superiori ai 1200 metri, l’unico feedback che ho dai miei clienti è che comunicazioni su lunghe distanze sono molto sensibili ai fulmini, anche se il cavo di comunicazione è interrato le estratensioni generate da fulmini che colpiscono la zona possono distruggere i convertitore.

    Quindi il consiglio che dò è quello di utilizzare un buon soppressore sulla linea RS422/485 in ingresso al convertitore. L’unico problema è che il soprressore costa molto di più del convertitore.

    in risposta a: Connessione I/O logici ed analogici modem TC65-Terminal #37170
    Sergio Bertana
    Amministratore del forum

    Il modem TC65-Terminal dispone di un connettore a 24 pin per l’interfacciamento degli I/O, per la connessione occorre utilizzare un connettore Tyco Micro Mate-N-LOK Series. Sul connettore sono presenti 10 GPIO oltre a 2 analog inputs, è anche presente un bus I2C ed un bus SPI per la connessione ad un hardware esterno.

    Tutti i segnali dei GPIO sono a livello logico 3 Volt, quindi sono utilizzabili solo tramite una opportuna interfaccia di adattamento del livello del segnale. Gli ingressi analogici accettano un segnale massimo di 5 Volt con risoluzione di +/- 1 mV.

    Allego un estratto del manuale di riferimento hardware con le connessioni degli I/O e le loro specifiche elettriche.

    in risposta a: Comportamento della procedura di Pass-Through #37171
    Sergio Bertana
    Amministratore del forum

    La funzione Pass-Through permette di poter accedere tramite connessione TCP/IP su rete ethernet ed anche Internet, al PLC connesso in seriale al pannello operatore. Attivando il Pass-Through, sul PC viene installata una porta seriale virtuale, che è fisicamente connessa alla porta seriale del pannello.

    Attivando il tool di sviluppo del PLC connesso al pannello e definendo come porta seriale di connessione la porta virtuale (COMx) installata dal Pass-Through, è possibile operare sul PLC tramite la connessione ethernet al pannello come se il PLC fosse fisicamente connesso alla porta seriale del PC.

    Durante questa fase naturalmente il pannello non può dialogare con il PLC per lo scambio dati, quindi viene visualizzato un pop up con l’indicazione PLC no response (Screenshot). Se la finestra viene chiusa con il tasto Close, è possibile continuare ad operare sul pannello ma tutte le operazioni che vengono effettuate non hanno alcun effetto sul PLC.

    Non vi è alcun bit interno al pannello che indichi che è in corso la procedura di Pass-Through, se si vuole evitare che l’operatore operi sul pannello durante questa fase occorre predisporre un quadro di service e tramite l’accesso remoto al pannello (Client Vnc, vedi post), attivare il quadro in modo da informare l’operatore che è in corso una procedura di servizio da remoto.

    Per quanto riguarda l’arresto del servizio di Pass-Through, ci sono comportamenti diversi in base ai diversi protocolli veicolati dal servizio.

    Nel caso di protocollo modbus la procedura corretta è: Disattivare PLC on line sul tool di programmazione PLC e poi agire sul pulsante Stop pass-through.

    Nel caso di Omron la procedura corretta è: Agire sul pulsante Stop pass-through e poi disattivare PLC On line sul tool di programmazione PLC.

    in risposta a: SMS machine, programma per invio SMS da PC #37169
    Sergio Bertana
    Amministratore del forum

    Mi è stato chiesto da un cliente se è possibile gestire l’invio di SMS da connessione TCP piuttosto che da connessione UDP. Naturalmente sì, basta aprire uno stream di I/O definendo come nome file il socket TC, uno statement come questo:

    Fp:=Sysfopen(‘TCPSKT’, ‘rw’); (* File pointer *)

    Ritorna un file pointer che opera su un server TCP, utilizzando l’FB SysSktListen sarà possibile definire la porta in cui il server si pone in ascolto oltre ai parametri di gestione del socket stesso. Nell’esempio che ho realizzato e di cui fornisco il codice sorgente (Download) viene posto in ascolto un server TCP sulla porta 1000.

    Collegandosi con un client telnet (Esempio Toolly) sulla porta 1000 alla connessione viene ritornato un messaggio di Welcome e poi è possibile gestire il comando di invio SMS come indicato nel post precedente.

    in risposta a: Precisione e velocità acquisizione modulo I/O analogico #37167
    Sergio Bertana
    Amministratore del forum

    Per quanto il tempo di conversione del modulo occorre fare riferimento al numero di convertitori A/D presenti nel modulo:

    PCB126*110 e PCB126*170: Utilizzano un solo convertitore A/D
    PCB126*130: Utilizza due convertitori A/D

    Nel caso di tensioni e correnti il tempo di conversione di un convertitore A/D è di 16 mS per ogni canale, nel caso di acquisizione in temperatura è di 60 mS. Per calcolare il tempo di conversione totale occorre moltiplicare il tempo di conversione di un canale per il numero di canali acquisiti sullo stesso convertitore A/D.

    L’acquisizione da parte del convertitore avviene ciclicamente e non dipende dalla chiamata al blocco funzione SysGetAnInp, ad ogni esecuzione del blocco funzione viene ritornato l’ultimo valore acquisisto.

    in risposta a: Precisione e velocità acquisizione modulo I/O analogico #37166
    Sergio Bertana
    Amministratore del forum

    Il  modulo di espansione I/O analogico PCB126*** utilizza un convertitore sigma/delta a 23 bits per le acquisizioni analogiche. Dovendo adattare l’ingresso per i diversi range di acquisizione, non viene sfruttata l’intera risoluzione del convertitore e quindi si ha un deprezzamento sulla precisione, nel caso di acquisizione in 4-20mA la risoluzione reale è di 15 bits.

    La risoluzione di acquisizione è di 0.6 uA (20000 uA/2^15), nel tuo caso sulla lunghezza di 2700 mm si avrà una risoluzione di 0.082 mm. Il fatto che oscilli in +/- 1mm sembra denotare un problema di disturbi. Consiglio di collegare i morsetti in modo differenziale ed usare il modo di acquisizione AD_CURR_4_20_DIFFER, in pratica il segnale in corrente và acquisito con un cavo schermato e twistato direttamente ai capi del generatore di corrente.

    Per miminizzare le oscillazioni di lettura è anche possibile introdurre un filtro digitale sul valore letto (FB Average presente nella libreria PLCUtyLib).

Stai visualizzando 15 post - dal 3,691 a 3,705 (di 4,379 totali)