Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,391 a 3,405 (di 4,373 totali)
  • Autore
    Post
  • 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.

    in risposta a: Protezione della proprietà intellettuale del software #37587
    Sergio Bertana
    Amministratore del forum

    Si in effetti ho riletto quanto dichiarato nel post che tu citi e ci sono contraddizioni. Attualmente abbiamo rilasciato i nuovi moduli CPU Compact e la versione B dei moduli CPU ARM7. Questi nuovi prodotti sono retrocompatibili, ma avendo ridesegnato alcuni parti del sistema operativo stiamo lavorando su una nuova funzione per migliorare questo aspetto di protezione a livello utente.

    in risposta a: Controllo temperatura con invio di Email e sgancio carico #37585
    Sergio Bertana
    Amministratore del forum

    La soluzione più semplice per gestire la sua applicazione è l’utilizzo del Poseidon 3268. Tramite un comune browser il prodoto può essere configurato per gestire una uscita logica sul superamento di una soglia impostabile di temperatura e anche gestire l’invio di una Email.

    Nello screenshot indico le due impostazioni da effettuare, la prima è per gestire l’uscita logica, la seconda per l’invio della Email. La mail può essere inviata a un massimo di 2 destinatari, se serve inviarla a più destinatari è possibile utilizzare il software PD Trigger (Vedi post).

    in risposta a: Installazione driver RNDIS per connessione USB #37584
    Sergio Bertana
    Amministratore del forum

    Aggiungo che tutto quanto descritto in merito al driver RNDIS è disponibile anche sui moduli CPU ARM7 versione B a partire da sistema operativo codice SFW184A200.

    in risposta a: Installazione driver RNDIS per connessione USB #37583
    Sergio Bertana
    Amministratore del forum

    Aggiungo che dopo l’impostazione dell’indirizzo IP di rete il modulo CPU SlimLine sarà accessibile da TCP/IP come un qualunque modulo connesso in rete. Ad esempio digitando nella barra di indirizzo di un browser l’indirizzo del modulo (Esempio 192.168.1.122) ne possiamo visualizzare la pagina web di configurazione (Screenshot).

    Allo stesso modo potremo accedervi da LogicLab con connessione ModbusTCP sulla porta 502, da Telnet sulla porta 23 e da Ftp sulla porta 21. Accedendo in Ftp con l’esplora risorse di Windows (Definendo nella barra indirizzo ftp: //Admin:[email protected]) potremo vedere il File system del modulo CPU (Screenshot). 

    in risposta a: Protezione della proprietà intellettuale del software #37582
    Sergio Bertana
    Amministratore del forum

    Bloccare la lettura del SysCustomerCode non è possibile in quanto questo codice deve comunque essere leggibile da programma e quindi basterebbbe per un cliente realizzare un semplice ramo nel programma che con un MOVE ne copia il valore su una sua variabile per poterlo acquisire.

    Come forse non è stato ben spiegato nei post precedenti, il SysCustomerCode può proteggere il programma solo se non si danno i sorgenti al cliente. Nel caso in cui si diano i sorgenti al cliente l’unico modo di proteggere efficacemente il programma è utilizzare il Manufacturer ID.

    Altra tecnica che alcuni adottano è di utilizzare una variabile in memoria RETAIN impostandone in debug il suo valore, il blocco funzione criptato controlla questo valore e se diverso si blocca. Non essendo nota la locazione di memoria utilizzata e quasi impossibile bypassare la protezione.

    in risposta a: Invio di SMS da termometro IP #37580
    Sergio Bertana
    Amministratore del forum

    Aggiungo la possibilità di utilizzare un Poseidon come netGSM gateway (Vedi post).

Stai visualizzando 15 post - dal 3,391 a 3,405 (di 4,373 totali)