Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumNon mi dici che modulo CPU utilizzi, il driver USB RNDIS non è disponibile sulle versioni CPU ARM7 Versione A. Se sul tuo modulo è gestito ed utilizzi Windows XP, 7 oppure 8 come detto precedentemente non vi è nessun driver da cercare perchè è nativo nel sistema Windows.Una volta installata la scheda di rete RNDIS devi assegnarle l’indirizzo IP appartenente alla stesa rete del modulo CPU SlimLine (Di default 192.168.1.122), segui quanto riportato nel post precedente.
Sergio Bertana
Amministratore del forumHo contattato il fornitore in merito alla tua domanda sulla possibilità di resettare i valori massimi. La risposta è che il HWg-PWR si limita a leggere tramite M-Bus i dati dai contatori, quindi anche il valore massimo viene letto dal contatore.
Quindi un eventuale reset dello stesso deve essere eseguito a livello contatore (Se il contatore ne è provvisto).
Sergio Bertana
Amministratore del forumPer rispondere nello specifico alla tua domanda ti ricordo che da pannello operatore non puoi accedere direttamente agli I/O reali dello SlimLine, ma puoi accedere solo a variabili mappate nella DB100. Quindi per gestire gli I/O devi definire variabili BOOL in DB100 a partire da indirizzo MB100.16, il terminale agirà su queste variabili.
Ho realizzato un semplice dimostrativo definendo una variabile di appoggio ingresso Inp00 allocata a MB100.16 (Indirizzo Modbus 40016), ed una variabile di appoggio uscita Out00 allocata a MB100.17 (Indirizzo Modbus 40017). Come vedi dalla stampa del programma SlimLine ho semplicemente eseguito un appoggio delle variabili negli I/O reali (Nell’esempio uso gli I/O del modulo CPU).
Sul pannello operatore ho inserito un oggetto lampada bit che ho legato alla variabile 0x 40016 dello SlimLine ed un oggetto ToggleSwitch che ho legato alla variabile 0x 40017 dello SlimLine (Vedi screenshot).
L’oggetto ToggleSwitch permette di definire due variabili, la variabile in lettura viene utililizzata per visualizzare lo stato mentre la variabile in scrittura viene impostata agendo sull’oggetto. Le due variabili normalmente coincidono come nell’esempio. Allego il file sorgente sia del programma su SlimLine che del programma terminale (Download).
Sergio Bertana
Amministratore del forumIl pannello operatore può dialogare con i moduli CPU SlimLine sia tramite una connessione seriale con protocollo Modbus RTU (Di default 115200, e, 8 nodo Modbus 1), che con protocollo modbus over IP (Di default porta 502 nodo Modbus 1). Naturalmente tu disponendo di una versione 6050i che non ha la porte ethernet puoi solo dialogare in seriale.
I comandi Modbus supportati sono il comando 0x per accedere a variabili BOOL ed il comando 3x per accedere a variabili numeriche, sono supportati tutti i tipi di variabili INT, UINT, DINT, UDINT e REAL. Dai una occhiata a questi posts per maggiori informazioni (1), (2). Ma cercando nel forum ne troverai molti altri.
In questo post è riportato un programma di esempio con relativi files sorgenti che ti aiutano nella comprensione di come operare tra pannello HMI e SlimLine.
Sergio Bertana
Amministratore del forumMa per rispondere alla tua domanda ecco lo screenshot di un programma LogicLab che illustra l’uso della funzione SysVarsnprintf per la conversione in stringa di una variabile REAL.
Come si vede dalla finestra di Watch alla variabile Var ho impostato il valore 5.67, la stringa StrOut assume il valore “Value: 5.67” e 11 caratteri sono stati trasferiti in StrOut.
La formattazione %5.2f indica di convertire in stringa una variabile REAL con 5 minimo cifre totali di cui 2 cifre decimali (Nelle cifre totali è compreso il punto). Da notare che siccome il valore della variabile è composto al massimo di 4 cifre 5.67, davanti alla 1a cifra intera è posto uno space.
Sergio Bertana
Amministratore del forum(Da Wikipedia) Molti linguaggi di programmazione implementano una funzione printf, per visualizzare sullo standard output una stringa costruita in base ad un formato specificato. Tale funzione ha origine dal linguaggio C, dove ha un prototipo simile al seguente: int printf(const char *format, …)
Il parametro format è una stringa che descrive il formato da seguire nell’output e che utilizza delle sequenze segnaposto, introdotte dal simbolo percentuale (“%”), per specificare la posizione relativa e il tipo dei dati con cui comporre la stringa.
Nella libreria delle funzioni embedded di SlimLine abbiamo introdotto le due funzioni:
SysVarfprintf, per inviare la stringa sullo stream (eFILE) di uscita.
SysVarsnprintf, per trasferire la stringa in un buffer di memoria.Rimandiamo al manuale Manuale programmazione IEC61131-3 su sistema SlimLine per una spiegazione dettagliata delle due funzioni.
Marzo 28, 2013 alle 10:00 am in risposta a: Calcolo potenza istantanea da lettura impulsi contatore #37611Sergio Bertana
Amministratore del forumAggiungo una nota, al primo impulso il valore di potenza è errato in quanto è evidente che non avendo il sistema memorizzato il tempo di arrivo impulso precedente la differenza dei tempi genera un valore errato.
Per sistemare il problema bisognerebbe aggiungere una variabile BOOL inizializzata a FALSE che verrà settata a TRUE dopo il primo impulso. Con variabile a FALSE il calcolo della potenza non viene eseguito ma si esegue solo il salvataggio dei tempi.
Marzo 28, 2013 alle 9:48 am in risposta a: Calcolo potenza istantanea da lettura impulsi contatore #37610Sergio Bertana
Amministratore del forumL’errore che hai commesso è il più classico, nei calcoli in REAL hai omesso il “.0” nella dichiarazione delle costanti numeriche REAL. Quando scrivi TO_REAL((myTimer-PwrTimeCalc)/(1000000)) tu vorresti eseguire i calcoli in REAL ma in realtà i calcoli sono eseguiti in UDINT e quindi si perdono le parti decimali della divisione.
Per scrivere in forma corretta il calcolo dovresti scrivere TO_REAL(myTimer-PwrTimeCalc)/1000000.0. Cioè converto prima in REAL il risultato della differenza dei tempi e poi eseguo la divisione per 1000000.0 (Nota il .0 finale).
Ho scritto un semplice programma che dimostra come eseguire correttamente il calcolo, ti allego la stampa ed il programma sorgente. Come noti ho definito come costante Impulsi/Kwh del contatore 3600.0 quindi se arriva un impulso al secondo la potenza istantanea è di 1000 Wh.
Marzo 26, 2013 alle 9:03 am in risposta a: Come rendere ritentivo valore quota della FB IOEncoder #37609Sergio Bertana
Amministratore del forumPer semplificarti il lavoro e come aiuto propedeutico allo sviluppo di FB da parte dei clienti, ho convertito l’esempio precedente utilizzando un blocco funzione FBEncoderOnIO costruito ad hoc (Di cui riporto il codice sorgente). Come vedi nel programma (Stampa e Download sorgente), il programma ladder si è enormemente semplificato, in pratica viene eseguito il solo blocco funzione.
Per poter gestire la variabile di Quote con attributo RETAIN ho passato allla FB come input l’indirizzo della variabile, in questo modo il blocco funzione può operare su di essa sia in lettura che in scrittura.
Anche in questo esempio puoi azzerare o presettare il valore di Quote semplicemente con istruzioni MOVE.
Marzo 26, 2013 alle 7:54 am in risposta a: Come rendere ritentivo valore quota della FB IOEncoder #37608Sergio Bertana
Amministratore del forumHai 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.
Sergio Bertana
Amministratore del forumPer 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 ItaliaMarzo 25, 2013 alle 7:41 am in risposta a: Informazioni su bus I2C, possibilità utilizzo moduli custom #37605Sergio Bertana
Amministratore del forumEcco in questo post come realizzare un sistema per la gestione di motori passo/passo utilizzando IC direttamente connessi al bus I2C di estensione.
Marzo 25, 2013 alle 7:26 am in risposta a: Come gestire motori passo/passo con i vostri prodotti #37604Sergio Bertana
Amministratore del forumAggiungo 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.
Marzo 25, 2013 alle 7:16 am in risposta a: Come gestire motori passo/passo con i vostri prodotti #37603Sergio Bertana
Amministratore del forumNella 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.
Sergio Bertana
Amministratore del forumNelle 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.
-
AutorePost