Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,376 a 3,390 (di 4,364 totali)
  • Autore
    Post
  • in risposta a: Come rendere ritentivo valore quota della FB IOEncoder #37608
    Sergio Bertana
    Amministratore del forum

    Hai fatto un po di confusione… Intanto la variabile Quote è una variabile di output del blocco funzione, pertanto non la puoi valorizzare con istruzioni di MOVE. E se in uscita tu la appoggi su di una variabile di tipo retain, l’FB alla accensione azzera sempre il valore di Quote, e quindi di conseguenza azzererà anche il valore della variabile di appoggio.

    Il giusto approccio per soluzionare il tuo problema è di utilizzare come valore di quota una variabile UDINT di tipo RETAIN (Oppure una variabile allocata a partire da MD100.2048) e di utilizzare il valore Quote in uscita dalla FB per calcolare lo spostamente dell’encoder. Con il valore di spostamento calcolato potrai poi aggiornare il valore della variabile di quota, che in questo caso manterrà il suo valore allo spegnimento.

    Per spiegare il concetto ho realizzato un semplice programma di esempio che utilizza i due I/O di un modulo SlimLine per gestire il conteggio di quota da un encoder (Stampa e Download programma).

    Nell’esempio il valore di quota da utilizzare è quello presente nella variabile RETAIN Quote, ti ricordo che per azzerare il valore di quota devi utilizzare una istruzione di MOVE scrivendo il valore “0” nella variabile. In questo modo è anche possibile utilizzando l’istruzione MOVE presettare il valore di quota.

    in risposta a: Verifica degli operatori disponibili #37606
    Sergio Bertana
    Amministratore del forum

    Per completezza riporto il significato del codice operatore numerico, si compone di 6 cifre:

    Le prime 3 si riferiscono al MCC:Mobile Country Code (222 per l’Italia).
    Le seconde 2 si riferiscono al MNC:Mobile Network Code e cambiano in funzione dell’operatore.
    01: Tim
    10: Omnitel
    88: Wind
    98: Blu
    99: 3 Italia

    in risposta a: Informazioni su bus I2C, possibilità utilizzo moduli custom #37605
    Sergio Bertana
    Amministratore del forum

    Ecco in questo post come realizzare un sistema per la gestione di motori passo/passo utilizzando IC direttamente connessi al bus I2C di estensione.

    in risposta a: Come gestire motori passo/passo con i vostri prodotti #37604
    Sergio Bertana
    Amministratore del forum

    Aggiungo una serie di informazioni su quali potrebbero essere i componenti da utilizzare, preciso che ho solo fatto una veloce ricerca su internet ed ho trovato:

    AMIS-30622: Stepper Motor Driver and Controller with I2C Bus, Micro-stepping Features and Stall Detection, prodotto dalla ON-Semiconductor (Datasheet).

    PCA9629: I2C-bus stepper motor controller, prodotto dalla NXP (Datasheet).

    TMC222: Micro Stepping Stepper Motor Controller/Driver with Two Wire Serial Interface della TRINAMIC (Datasheet).

    Tutti i prodotti sono interfacciabili al bus I2C e permettono la gestione completa del motore passo/passo gestendo il posizionamento con le relative rampe di accelerazione e decelerazione. I prodotti AMIS-30622 e TMC222 hanno anche la potenza integrata e gestiscono motori di piccola potenza, mentre il prodotto NXP richiede l’impiego di mosfet di potenza esterni e quindi permette di gestire anche motori di elevata potenza.

    in risposta a: Come gestire motori passo/passo con i vostri prodotti #37603
    Sergio Bertana
    Amministratore del forum

    Nella versione SlimLine compact non vi sono moduli con uscita in frequenza, ma visto che mi dici che vorresti costruire un circuito stampato ad hoc per la gestione della potenza dello stepping motor, allora pensavo di indirizzarti verso l’utilizzo di circuiti integrati realizzati appositamente per il controllo di stepping motors che grazie alla interfaccia I2C possono essere gestiti direttamente dalla CPU SlimLine da programma IEC 61131 (Vedi post).Potresti così utilizzare un modulo CPU OEM che fissato sul tuo circuito stampato formerebbe un blocco unico ottimizzando i costi e realizzando un prodotto custom specifico per la tua applicazione che manterrebbe tutta la flessibilità di programmazione offerta dalla linea SlimLine.

    in risposta a: Blocco funzione per gestione modbus ascii master #37602
    Sergio Bertana
    Amministratore del forum

    Nelle nostre librerie di funzioni e blocchi funzioni abbiamo solo il blocco funzione master per il protocollo modbus RTU, e lo slave Ascii. In attesa di aggiungere anche l’FB per il modbus Ascii master prendo spunto dalla tua richiesta per realizzare un semplice blocco funzione che gestisce il comando di lettura Holding registers (0x03) di un registro con modbus Ascii.

    Il blocco funzione è realizzato in ST e può essere propedeutico per realizzare altri blocchi funzioni di gestione comunicazione, ecco la stampa del programma. Come si vede un program in Ladder apre la porta di comunicazione, ne imposta i parametri, e poi viene seguita la chiamata sequenziale di due istanze della FB ModbusAsciiMaster, una esegue la lettura del registro 16#1234 e l’altra la lettura del registro 16#5678. Il valore letto è ritornato in Value e può poi essere appoggiato nella propria variabile.

    Il blocco funzione ModbusAsciiMaster in linguaggio ST è gestito a sequenze con lo statement CASE, le sequenze biniziano con la compilazione e l’invio del frame di comando e poi l’attesa del frame di risposta. Nella FB è gestito sia il calcolo che il controllo dell’LRC del frame modbus, ed al termine della ricezione della risposta è gestito un tempo di attesa parametrizzabile. Allego programma sorgente per il download.

    in risposta a: Utilizzo di ProfilabExpert con moduli CPU SlimLine #37598
    Sergio Bertana
    Amministratore del forum

    Aggiungo che informazioni sull’indirizzamento variabili Modbus nei sistemi SlimLine sono reperibili in vari posts del nostro forum, (Vedi post).

    Lo stesso dicasi per esempi di programmazione dei nostri sistemi, nel forum troverai una ampia disponibilità di programmi sorgente che si possono scaricare ed utilizzare come base per lo sviluppo dei proprii programmi.

    Per l’apprendimento di base della programmazione dei nostri sistemi SlimLine ti rimando alla sezione videocorsi.

    in risposta a: Utilizzo di ProfilabExpert con moduli CPU SlimLine #37597
    Sergio Bertana
    Amministratore del forum

    Come riportato nel post precedente ProfilabExpert supporta sia il modbus RTU che TCP/IP se utilizzi il modbus RTU puoi connetterti tramite porta seriale con tutti i moduli CPU serie SlimLine, se invece utilizzi il modbus TC/IP devi utilizzare un modulo con interfaccia ethernet.

    Ho realizzato un semplice progetto ProfilabExpert che tramite il modbus TCP/IPO esegue la visualizzazione dello stato dei due ingressi e l’attivazione delle due uscite di un modulo CPU ARM7. Come vedi dallo screenshot del progetto ho utilizzato due oggetti modbus.

    ReadCoils: Esegue la lettura di 4 variabili booleane, utilizzato per la lettura degli ingressi logici.
    Write Multiple Coils: Esegue la scrittura di 4 variabili booleane, utilizzato per la scrittura delle uscite logiche.

    I due oggetti sono eseguiti ciclicamente tramite un clock ed agli oggetti sono connessi i pulsanti e le lampade di visualizzazione posti sul pannello frontale. Per il funzionamento dovrai definire il corretto indirizzo IP nei due oggetti (Vedi properties).

    Nel modulo CPU occorre caricare un semplice programma che appoggia le variabili Modbus in scambio con ProfilabExpert sui reali I/O del modulo (Vedi stampa). Come vedi gli ingressi logici sono appoggiati nell’array ProfilabInp allocato ad indirizzo %MX100.32 (Indirizzo modbus 40032). Lo stato dell’array ProfilabOut allocato ad indirizzo %MX100.16 (Indirizzo modbus 40016) è appoggiato sulle uscite logiche. Allego file con programmi sorgenti LogicLab e ProfilabExpert (Download).

    in risposta a: Come gestire gli I/O del modulo CPU SlimLine #37595
    Sergio Bertana
    Amministratore del forum

    Gli I/O logici dei moduli CPU della famiglia SlimLine Compact sono stati mappati in memoria nella DB indirizzata a 255, questa mappatura in memoria è stata effettuata anche per i 2 I/O del modulo CPU ARM 7 a parire dalla versione B. Quindi puoi riferirti a loro direttamente indicando %IX255.0 per l’ingresso DI00, %IX255.1 per lingresso DI01 e così via. %QX255.0 per l’uscita DO00, %QX255.1 per l’uscita DO01 e così via.

    Per quanto riguarda gli ingressi analogici presenti sul modulo CPU compact, per eseguirne l’acquisizione devi utilizzare il blocco funzione SysGetAnInp definendo Address:=255 e Channel:=0 per l’ingresso 0 e Channel:=1 per l’ingresso 1.

    Ho realizzato un semplice programma che gestisce gli I/O logici ed esegue l’acquisizione del valore analogico da 0-10 volts sui due ingressi analogici, allego la stampa ed il programma sorgente.

    in risposta a: Informazioni sulla gestione delle stringhe #37593
    Sergio Bertana
    Amministratore del forum

    Allego alla mia risposta la stampa del programma che mi hai inviato così da potermi riferire per la risposta. Come si vede nella FB per valorizzare la stringa di uscita Buffer hai utilizzato una sintassi del tipo:

    Buffer[0]:=’$02′; (* STX *)

    Il linguaggio IEC61131 non prevede l’indicizzazione che è invece tipica del C. Quando tu accedi con le parentesi quadre il compilatore suppone che stai accedendo alla stringa [0] di un array di stringhe. Quindi non fà quello di cui tu hai bisogno, cioè di copiare il valore 16#02 nel primo byte della stringa.

    Se vuoi utilizzare l’indice devi definire un array di USINT al posto di una stringa, in alternativa per utilizzare una stringa devi usare un pointer per riferirti ai suoi singoli bytes. Allego la stampa ed il programma sorgente corretto.

    in risposta a: Utilizzo di ProfilabExpert con moduli CPU SlimLine #37592
    Sergio Bertana
    Amministratore del forum

    ProfilabExpert supporta la comunicazione con il protocollo Modbus, sia RTU che Over IP, quindi puoi tranquillamente connetterlo ai nostri moduli SlimLine sia tramite connessione seriale che Ethernet.
     
    In questa configurazione puoi realizzare il programma logico di gestione direttamente nello SlimLine delegando al ProfilabExpert la sola interfaccia con l’utente. Questo permette di avere un reale funzionamento realtime con tempi di esecuzione estremamente ridotti e garantisce il funzionamento anche a PC spento o scollegato.
     
    Per la realizzazione di sinottici animati normalmente i clienti utilizzano un pannello operatore touch screen che con costi estremamente ridotti permette di realizzare interfaccie uomo macchina accattivanti. La versione dotata di porta Ethernet del pannello operatore permette tramite un server VNC integrato di essere accessibile anche da web su PC o su smartphone tramite un comune client VNC gratuito (Vedi post).
     
    Nella sezione del forum dedicata allo SlimLine troverai moltissimi posto con esempi di programmi realizzati di cui è possibile eseguire il download.

    in risposta a: Funzione per la conversione epoch time in stringa data/ora #37591
    Sergio Bertana
    Amministratore del forum

    Il problema è che tu stai istanziando una FB la SysETimeToDate in una funzione. Nella normativa IEC 611131 le funzioni non possono avere al loro interno dati statici, quindi per realizzare quello che tu vuoi, devi per forza realizzare un blocco funzione. Ecco il listato di una FB che ha in entrata una variabile di tempo in Epoch time ETime ed una uscita con una stringa formattata di data ed ora OString.

    ETToD(EpochTime:=ETime); (* Valore di epoch time *)
    i:=SysVarsnprintf(ADR(OString[0]), 4, ‘d/’, USINT_TYPE, ADR(ETToD.Day));
    i:=SysVarsnprintf(ADR(OString[3]), 4, ‘d/’, USINT_TYPE, ADR(ETToD.Month));
    i:=SysVarsnprintf(ADR(OString[6]), 6, ‘d ‘, UINT_TYPE, ADR(ETToD.Year));
    i:=SysVarsnprintf(ADR(OString[11]), 4, ‘d:’, USINT_TYPE, ADR(ETToD.Hour));
    i:=SysVarsnprintf(ADR(OString[14]), 4, ‘d:’, USINT_TYPE, ADR(ETToD.Minute));
    i:=SysVarsnprintf(ADR(OString[17]), 3, ‘d’, USINT_TYPE, ADR(ETToD.Second));

    Allego stampa e programma sorgente di un semplice porogramma di test.

    in risposta a: Lettura variabili di tipo REAL da PLC SlimLine #37590
    Sergio Bertana
    Amministratore del forum

    Il terminale Weintek può acquisire anche le variabili REAL dal PLC senza alcun problema, il formato delle variabili REAL sia sul pannello che sui sistemi SlimLine segue lo standard IEEE 754-1985 in singola precisione a 32 bit (Vedi post). La rappresentazione in memoria sui sistemi SlilLine è in Little-Endian ed è direttamente acquisita dal terminale.

    Il fatto che leggi asterischi è perchè il valore della variabile è fuori dal range di visualizzazione dell’oggetto, probabilmente non hai settato correttamente il formato numerico della variabile. Essendo una variabile a virgola mobile devi definire il tipo 32-bit Float (Screenshot). Come vedi nella stessa finestra di impostazione puoi definire anche il numero di cifre intere e decimali che deve avere il numero visualizzato.

    Ho realizzato un piccolo progetto (PLC e terminale) che esegue l’acquisizione di un valore analogico 0-10 Volt e lo visualizza sul terminale (Download progetto). Nel progetto la variabile REAL è allocata alo stesso indirizzo MD 100.16 che tu hai citato e quindi l’indirizzo da definire sul pannello è 40008.

    Ricordo che le variabili REAL vanno sempre allocate in memoria ad indirizzi divisibili per 4, quindi MD 100.16, MD 100.20, MD 100.24, ecc.

    in risposta a: Connessione in SNMP con alcuni dispositivi STE #37589
    Sergio Bertana
    Amministratore del forum

    Sulla release B dei moduli CPU è possibile trasferire pagine web utente, e le pagine possono essere dinamiche, cioè  il loro contenuto viene modificato dal server, in questo modo è possibile visualizzare dati da variabili di programma. Ho realizzato una semplice pagina web di dimensioni adatte ad essere visualizzata anche in uno smartphone che visualizza i 4 valori di temperatura ed umidità del programma del post precedente. Ecco la pagina come visualizzata su uno smartphone (Screenshot).

    Allego la stampa del sorgente html, basta copiarlo in un file testo e salvarlo con estensione htm nella directory Storage dello SlimLine per poterla visualizzare semplicemente digitandone l’indirizzo come si vede dallo screenshot.

    Come si nota per la visualizzazione dei valori si utilizza una sintassi del tipo <!–[“%3.1f”, REAL, 0]–>, che stà ad indicare la visualizzazione di una variabile di tipo REAL ad indirizzo MD 100.0 con rappresentazione a due cifre intere ed una cifra decimale. Maggiori informazioni sulle pagine web dinamiche si trovano sul Manuale programmazione IEC61131-3 su sistema SlimLine.

    Come si vede dalla direttiva <meta http-equiv=”refresh” content=”5″>, la pagina verrà ricaricata dal browser ogni 5 secondi visualizando così la variazione dei valori.

    in risposta a: Connessione in SNMP con alcuni dispositivi STE #37588
    Sergio Bertana
    Amministratore del forum

    Rispondo subito alla tua domanda, l’apertura del socket e la sua forzatura in listening può essere fatta una sola volta se poi vengono sequenziate le varie acquisizioni dai moduli STE, allego la stampa e i files sorgenti, di un programma che acquisisce 2 STE, ma può essere esteso al numero desiderato solo aggiungendo chiamate alla FB STESnmpAcq.

    Vediamo come funziona la comunicazione con protocollo UDP facendo riferimento al programma indicato. Con la chiamata alla funzione Sysfopen viene aperto un socket UDP, la FB SysSktListen lo pone in ascolto sulla porta 161, tutti i pacchetti UDP da qualsiasi IP che arriveranno su questa porta saranno ricevuti e bufferizzati.

    Ad ogni secondo (Se si hanno molti STE consiglio di mettere un timer con tempo maggiore) la prima FB STESnmpAcq invia la richiesta SNMP al modulo con IP 192.168.0.174 sulla porta 161 ed aspetta la risposta. Su ricezione risposta Done o su timeout od errore Fault viene attivata la seconda FB STESnmpAcq che invia la richiesta SNMP al modulo con IP 192.168.0.101 ed aspetta la risposta. E così via per tutte le altre acquisizioni che fossero necessarie.

    Anche se si potrebbero eseguire tutte in parallelo le abilitazioni alla FB STESnmpAcq, per evitare di intasare lo stack di ricezione pacchetti UDP consiglio di sequenziarle come fatto nell’esempio.

Stai visualizzando 15 post - dal 3,376 a 3,390 (di 4,364 totali)