Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumIpotizzando di realizzare un nuovo progetto, dopo avere aggiunto al progetto la libreria eSLineC2SysLib (Vedere capitolo Librerie sul Manuale programmazione IEC61131-3) è possibile inserire in un programma ladder il FB di acquisizione analogica SysGetAnInp.
Questo FB non dispone di un ingresso BOOL di abilitazione quindi per inserirlo in un programma ladder occorre utilizzare un oggetto Box with EN. Questo tipo di oggetto aggiunge in automatico al FB l’ingresso EN di abilitazione che permette di connetterlo al ramo logico del programma ladder. Per spiegare i concetti ho realizzato una semplice Nota applicativa che illustra passo per passo le operazioni da eseguire. Download programma di esempio per l’acquisizione di una termocoppia.
Aprile 27, 2015 alle 8:17 am in risposta a: Ricetta da HMI abbinata a struttura dati su SlimLine #38895Sergio Bertana
Amministratore del forumLa soluzione scelta è corretta, per gestire le ricette è buona norma definire una struttura dati nello SlimLine abbinata ai dati della ricetta sul terminale, in questo topic si parla di come gestire le ricette.
Una curiosità perchè hai definito 3 strutture dati se i dati sono identici per ogni ricetta ? Meglio definire una sola struttura dati e poi allocare un array di strutture con 3 elementi. E con questo rispondo alla tua domanda sul tipo dati, il tipo dati nelle variabili globali sarà un array di 3 elementi di tipo struttura dati da te definita (Ecco uno screenshot di esempio).
Ora nella definizione della struttura dati puoi mischiare tutti i tipi che desideri, ma attenzione alla loro allocazione in memoria (Vedo che già conosci il problema della divisibilità per 2 delle variabili a 16 bit e per 4 delle variabili a 32 bit). Se noti nella mia definizione della struttura ho volutamente definito Umidita dopo Temperatura per evidenziare il concetto.
Naturalmente sul terminale quando definisci la ricetta dovrai definire anche le variabili Dummy di riempimento così come sono definite nella struttura dati.
Aprile 27, 2015 alle 7:04 am in risposta a: Esecuzione macro periodica all’interno di una pagina #38894Sergio Bertana
Amministratore del forumDevi definire nella macro oltra alla esecuzione periodica anche Esegui su condizione, impostando come condizione l’attivazione di un bit (Nel mio esempio LB 0).
Ora nella pagina dove vuoi che la macro venga eseguita inserisci due oggetti Imposta Bit, che li definirai trasparenti in modo da non essere visibili. Uno di questi definito con Imposta ON quando apri pagina attiverà il bit LB 0, l’altro definito con Imposta OFF quando chiudi pagina, disattiverà il bit LB 0.
Ti ho fatto un semplice programma di esempio che puoi testare direttamente simulandolo sul PC con EasyBuilderPro (Download progetto).
Sergio Bertana
Amministratore del forumEcco lo screenshot di un programma essenziale di come si utilizza il terminale Picoface connesso allo SlimLine. Nel progetto occorre includere la libreria eHMIBuiltInLib (Menù Project -> Library manager), il progetto di esempio in questo topic contiene l’ultima versione.
Per gestire il terminale Picoface connesso al bus di estensione, come vedi, viene aperto un file pointer sullo stream PCOM15.1 e poi viene passata la variabile Fp alla FB di gestione del terminale Picoface. Nella sezione Resources è possibile aggiungere un HMI con la definizione dei messaggi display (Nel progetto di esempio l’ho chiamato Messages). Nella FB di gestione Picoface occorre passare la variabile Messages.HMIBuiltInID.
Ecco come si presenta nella sezione Resources la definizione di un messaggio display (Screenshot). Come vedi sono impostati i testi da visualizzare con il riferimento alle variabili. Durante la visualizzazione sul display i tags delle variabili saranno sostituiti dal reale valore. Sono gestibili sul terminale solo le variabili allocate nella DB 100.
Per inputare da tastiera una variabile occorre selezionarla con il tasto FUN del terminale (Il valore della variabile diventa lampeggiante) poi agendo sul tasto CLR è possibile inputare un nuovo valore.
Puntandosi con il mouse sull’albero dei messaggi ed agendo sul tasto destro è possibile inserire nuovi messaggi (Screenshot). Da terminale Picoface sarà possibile navigare tra i messaggi con i tasti freccia Su, Giù, Destra, Sinistra (Download progetto).
Sergio Bertana
Amministratore del forumDi solito lascio la gestione al loop successivo. Trovo il tempo da te indicato molto lungo, hai molte interrogazioni modbus o hai un baud rate molto basso per avere tempi fino a 5 Sec.
Però mi hai meso una pulcina nell’orecchio… potrei pensare di modificare (Tempo permettendo) il FB ModbusMaster aggiungendo la gestione di retries sul comando.
Sergio Bertana
Amministratore del forumTutte i FB che gestiscono stream di comunicazione (Seriale, UDP, TCP/IP) o accedono al file system devono essere eseguiti nella task di Back.
Se le interrogazioni Modbus non sono molte puoi istanziare tante istanze della FB ModbusMaster quante sono le interrogazioni (Lettura/Scrittura) da eseguire (Questo topic spiega come mettere in cascata le varie istanze, ecco uno screenshot). In questo modo si ha uno “spreco” nell’utilizzo delle risorse in quanto ogni istanza del FB occupa memoria RAM anche se vi è una esecuzione sequenziale delle varie istanze.
Molto più ottimizzato è l’utilizzo di una singola istanza del FB a cui vengono ciclicamente passati i parametri di configurazione, nodo del dispostivo con cui comunicare, codice funzione e range indirizzi del comando da eseguire. Il modo migliore per realizzarlo è gestire da ST una macchina a stati con l’operando CASE. Nel forum ci sono posts che trattano l’argomento ma a titolo di esempi ti allego un programma che utilizza questa tecnica (Download sorgente).
Come vedi dalla stampa del programma, si tratta di un programma che comunica con drivers brushless, tutti i comandi mosdbus operano su registri a 32 bits (2 registri modbus) ed è eseguito anche lo swap tra MSB e LSB. Altra particolarità è la gestione di un socket TCP per permettere il dialogo con il driver “passando” tramite lo SlimLine. Aprendo una connessione con la porta 2000 è possibile da TCP/IP comicare su RS485 con i drivers (In questo topic si tratta l’argomento).
Troverai il programma un pò più complesso (Per ogni interrogazione modbus viene utilizzata una struttura dati) perchè per velocizzare la comunicazione per i comandi di scrittura verso il driver viene mantenuta una copia del valore scritto ed il comando Modbus viene eseguito solo se il programma utente cambia i valori da scrivere.
Sergio Bertana
Amministratore del forumIl FB ModbusMaster utilizza la nuova funzione SysSpyData (Topic) che è disponibile dalla versione SFW184A800 del sistema operativo (Solo sugli SlimLine versione B).
In questo topic un workaround per aggirare il problema se il tuo SlimLine è una versione A. In questo topic le informazioni per come aggiornare il tuo sistema se è uno SlimLine versione B.
Sergio Bertana
Amministratore del forumIntanto alcune precisazioni, il blocco funzione per la gestione del protocollo Modbus master ha subito diverse revisioni ed affinamenti (Topic). L’ultima versione il ModbusMaster gestisce tutti e tre i tipi di protocollo Ascii, RTU e TCP/IP, ti consiglio di utilizzare questa versione al posto del precedente ModBusRtuMaster.
Poi come in tutti i miei esempi in LD, utilizzando il FB ModbusMaster non servono gli I/O EN/ENO, pertanto ti consiglio di eliminarli dalla grafica (Topic).
Detto questo, dalla tua descrizione non mi è chiaro il tuo problema, il modo migliore è di inviare alla mail di supporto (Vedi link) il tuo progetto in modo che io possa capire il tuo problema.
Sergio Bertana
Amministratore del forumVisto che hai già esperienza di programmazione di altri prodotti, credo che il passaggio all’ambiente LogicLab sia semplice, inoltre come hai detto tu la guida PLC in pratica è un ottimo supporto. Nel forum troverai inoltre molti esempi di programmi in codice sorgente pronti per il download.
Per quanto riguarda la tua domanda sulla comunicazione tra il pannello HMI ed il PLC, utilizzando EasyBuilder Pro puoi sviluppare il progetto HMI e poi testarlo direttamente connesso al modulo CPU (Il simulatore funziona per 15 min). In questo topic un progetto di esempio, il progetto è sviluppato con il vecchio tool EasyBuilder 8000 ma lo puoi importare in EasyBuilder Pro.
Consiglio… Se acquisti un modulo CPU per delle prove ti consiglio il modello Compact con ethernet, così puoi testare tutte le funzionalità del prodotto e nella simulazione con l’HMI utilizzando la ethernet puoi eseguire contemporaneamente il debug della applicazione PLC con LogicLab.
Inoltre se dovessimo attivare un supporto tecnico On-Line la connessione ethernet permette a noi di “vedere” tutti i dispositivi da remoto.
Sergio Bertana
Amministratore del forumLa crittografia sulla comunicazione WiFi è attivabile in tutte le configurazioni, e sicuramente anche in configurazione access point e stations che è là più utilizzata per la distribuzione del segnale WiFi.
Il fatto che la rete degli SlimLine sia connessa ad router ADSL di fatto non incide sulla sicurezza, il problema nasce solo se tu configuri il router per avere accesso in NAT dalla rete Internet verso la rete locale magari per la programmazione remota dei dispositivi SlimLine.
In questo caso se dai accesso da Internet alla porta del Modbus per evitare che i dispositivi SlimLine vengano programmati da eventuali hackers dovrai disabilitare da Telnet il protocollo modbus (Comando sysconfig -mtcpd). Potrai abilitarlo solo quando vuoi accedervi tu per la programmazione (Comando sysconfig -mtcpe).
Sergio Bertana
Amministratore del forumSui sistemi programmabili con LogicLab come hai fatto giustamente notare esiste una libreria per la completa gestione del modem. Non abbiamo fatto il porting della libreria con CODESYS ma credo che puoi trovare librerie analoghe già pronte sul mercato.
Eventualmente puoi gestire direttamente da programma ST i comandi AT del modem per gestire l’invio dei messaggi SMS (Topic).
Aprile 9, 2015 alle 6:05 am in risposta a: Strane differenze tra simulazione e risultati reali #38876Sergio Bertana
Amministratore del forumInformato Axel del problema, posto la risposta ricevuta.
Abbiamo effettivamente verificato, non funziona il cast implicito di una costante come parametro a una funzione. La soluzione, per ora, è appoggiare il paramentro su una variabile (o aggiungere .0 alla costante). Apriamo il ticket #LL-1418: Wrong implict conversion to REAL of a costant, passed as function’s argument
Aprile 7, 2015 alle 8:02 am in risposta a: Strane differenze tra simulazione e risultati reali #38875Sergio Bertana
Amministratore del forumHo visto il tuo progetto e l’errore che hai commesso è nella definizione dei valori di limite alla funzione ValueScale, la funzione vuole un valore di tipo REAL che vanno sempre definiti con l’indicazione del decimale. In pratica non devi scrivere 0 ma 0.0, non 10 ma 10.0, ecc…
Probabilmente il compilatore sul simulatore è in grado di convertire il formato in REAL mentre il compilatore sul target non esegue la conversione. Farò presente questa discrepanza alla Axel.
Ecco lo screenshot del programma in esecuzione sul sistema target (SlimLine con modulo espansione 20I/O mixed signal), allego programma sorgente.
Sergio Bertana
Amministratore del forumEsame superato a pieni voti… Con il FB IOEncoder si possono utilizzare due ingressi digitali per acquisire segnali da un encoder in quadratura. Naturalmente essendo la gestione tutta software occorre che il ciclo macchina di esecuzione del FB sia compatibile con la frequenza massima dell’encoder da acquisire.
Dovendo campionare i segnali encoder almeno 4 volte per ciclo, se ne deduce che la frequenza massima dell’encoder nel caso di FB eseguita ogni 1 mS è di 200 Hz.
Il FB SysGetEncoder invece utilizza un circuito hardware presente nei moduli di I/O che permette di acquisire segnali fino a 50 KHz. Standard è possibile gestire un encoder per modulo di espansione, ma su richiesta possiamo fornire packages hardware specifici per poter gestire più encoders sullo stesso modulo di I/O.
Sergio Bertana
Amministratore del forumSicuramente la tua esposizione è corretta il sistema è fattibile nei termini in cui lo hai esposto. Per la lettura encoder devi usare il FB SysGetEncoder che acquisisce l’encoder tramite il circuito hardware del modulo di estensione. Puoi utilizzare il PWM out del modulo CPU (In questo topic alcune considerazioni in merito).
Per le rampe di accelerazione e decelerazione puoi utilizzare il FB LRamp, Linear Ramp. Ora se il tuo problema è di fare solo un posizionamento e non hai problemi di velocità, concordo con te che è fattibile. Calcoli la traiettoria di rallentamento per arrivare un pò in anticipo sulla quota e poi percorri l’ultimo pezzo in velocità lenta per avere la precisione sulla quota.
Però la tendenza generale è quella di utilizzare drivers intelligenti, il PLC dialoga con il driver (Esempio in modbus), ed è il driver che gestisce il posizionamento. Esistono drivers anche per piccoli motori sia stepping (Topic) che brushless.
In questo topic un programma spartano per la gestione del posizionamento di un asse.
-
AutorePost