Stefano
Risposte nei forum create
-
AutorePost
-
Giugno 28, 2019 alle 7:51 am in risposta a: Firmware modulo di espansione I/O Analogici PCB126C* #48339
Stefano
PartecipanteHo provato ad eseguire l’aggiornamento:
– Collegato la COM0 del modulo al cavo null modem e ad un adattatore USB (stesso che utilizzio per aggiornare gli MPS050)
– Selezionato PCB126, seriale corretta e file firmware su Toolly
– Premuto send
– Acceso il modulo (che è connesso ad uno slimline ed ha un programma in run)Su Toolly non accade nulla.
Ho provato sia mettendo i Jumper come indicato da Toolly che lasciandoli come sono nel mio banco di test e anche usando uno slimline in stop. Mi sfugge qualcosa nella procedura?
Marzo 4, 2019 alle 3:48 pm in risposta a: Termocoppie gestite da modulo espansione I/O analogico #46705Stefano
PartecipanteUsi AI00+ ed AI00- quindi i morsetti 2 e 3 ?
Si, morsetti 2 e 3
Visto che non sei sicuro del tipo di termocoppia che stai usando, prova usando nella SysGetAnInp gli altri tipi AD_THERMOCOUPLE_*.
Sono sicuro che sia una termocoppia J, e poi ho provato con una K (sicuro che fosse K). Il dubbio sulla J è se fosse o meno con giunto a massa. Ma sto provando sul tavolo ed è connessa solo quella quindi è isolata da tutto. La K, invece, è a giunto isolato.
Febbraio 26, 2019 alle 10:19 am in risposta a: Termocoppie gestite da modulo espansione I/O analogico #46688Stefano
PartecipanteSto cercando di acquisire il valore di un termocoppia Eliwell SN300000. Non trovo il datasheet quindi non so se è a giunto caldo a massa. Sto comunque sto facendo solo test al banco quindi è isolata da tutto.
Il modulo di acquisizione è un PCB126C110. Jumper chiusi: LK4 ed LK15, aperti LK3, LK13 ed LK14
Termocoppia connessa tra AI00+ ed AI00-. Il modulo ha il led RDY acceso e RUN lampeggiante.
Nel progetto il modulo SysGetAnInp è settato con indirizzo 3 (indirizzo corretto del modulo), Channel 0, Mode AD_THERMOCOUPLE_J. Ho sempre il l’uscita “Fault” alta e SysGetLastError riporta 9983150. Non capisco quale possa essere il motivo. Mi sembra tutto settato correttamente.
Febbraio 15, 2019 alle 3:28 pm in risposta a: Definizione di costanti utilizzabili nel programma #46659Stefano
PartecipanteAvrei una domanda sulle costanti:
Se io dichiarassi una variabile come costante e la mappassi in un’area di memoria accessibile da MODBUS, un tentativo di scrittura via MODBUS su quella locazione di memoria modificherebbe la costante o rimarrebbe immutata?
Stefano
PartecipanteDomanda riferita a:
Nelle altre tasks (Slow e Back) non devi utilizzare le uscite gestite nella task Fast.
Chiaro che ci possono essere problemi gestendo uscite sia con SysSetPhrDO che con immagine di processo. Per gli ingressi invece?
Ho sette manopole (encoder incrementali) su un sinottico, collegate da DI00 a DII13 su un modulo a 32 ingressi. Gli ingressi sono prelevati dalla SysGetPhrDI in modo “DI_I_16_L” in una task Fast. Ovviamente in questo modo vengono prelevati in blocco gli ingressi da 00 a 15. Sugli ingresso DI14 e DI15 ci sono collegati due pulsanti che vorrei gestire con l’immagine di processo creando le variabili %IX1.14 e %IX1.15. A rigor di logica non dovrebbe creare problemi, è una lettura in più.
Il dubbio che mi viene è: l’immagine di processo acquisisce con il debounce presumo, mentre nella mia task fast la SysGetPhrDI no. Potrebbe esserci qualche acquisizione falsata nella task fast ?
Stefano
PartecipantePrendo spunto da questo vecchio post.
Ho un sistema con MT8073iE e uno SlimLine Cortex M7 con RTC. La lan1 del pannello operatore è connessa alla rete ed il pannello sincronizza l’orario con un server NTP. Lo SlimLine è connesso alla porta lan2 del pannello. Sarebbe comodo se il pannello potesse fare nat oppure avesse un server ntp interno, in questo modo potrei semplicemente tenere sincronizzato lo SlimLine con l’apposito blocco funzione. Non mi sembra che questo sia possibile.
La mia idea era di fare una macro sul pannello, da eseguire ciclicamente, che l’Epoch time dallo SlimLine, lo confronta con quello locale e se differisce più di un tot (es 1 minuto, non ho grosse pretese di sincronia) va a sovrascrivere il valore sul PLC.
Potrebbe essere un approccio corretto? Se non vado errando non dovrei avere nemmeno problemi di differenze DST in questo modo.
Stefano
PartecipanteE’ possibile connettere una porta ethernet alla rete, l’altra ad uno SlimLine ed utilizzare il pannello come gateway per programmare lo SlimLine tramite LogicLab, in rete locale ?
Stefano
PartecipanteDirei che se anche perdesse qualche conteggio l’operatore può girare la manopola di qualche scatto in più. Non è una cosa critica. Se non erro estendo gli encoder con IOEncoder in una task fast si devono acquisire gli ingressi con SysGetPhrDI perchè l’immagine ingressi mappata dal sistema è aggiornata con meno frequenza..
Stefano
PartecipanteSono alle prese con il dimensionamento delle apparacchiature. Penso di usare i due blocchi PID, uno che varia il set Point dell’altro che poi comanda il ‘PWM’. La CPU dovrà dunque gestire i due blocchi PID, la generazione del out statico della CPU (periodo di 2 secondi), la lettura di un paio di ingressi 4-20ma, la lettura di una decina di encoder (l’ambiente è molto sporco e in alcune fasi diventa difficoltoso l’uso del touch screen. Gli operatori gireranno quindi degli encoder rotativi da pannello per modificare dei setpoint. Userò il blocco IOEncoder). Gestirà una manciata di I/O (qualche pulsante, qualche spia), comunicherà come modbus slave con il pannello e come master su 485 con un driver per motori.
La logica è abbastanza semplice ma le varie gestioni si portano via CPU. Non saprei se tentare con una CPU compact o passare ad una Cortex. Alla peggio sarebbe possibile richiedere un modulo input modificato per avere vari gestori hardware di encoder in quadratura ?
Stefano
PartecipanteHo contattato la Weintek che, dopo mesi di verifiche, mi ha confermato esserci un bug nel firmware relativo alla LW9030.
Febbraio 23, 2018 alle 12:13 pm in risposta a: Connettere dispositivi I2C al bus di espansione SlimLine #39969Stefano
PartecipanteHo scovato questo interessante progetto relativo ad un encoder rotativo su bus I2C. Ci possono essere controindicazioni usandolo sul bus espansione SlimLine ? Più che altro come lunghezza massima delle connessioni.
Stefano
Partecipante1 – Potrei eseguire i calcoli su variabili a 32 e poi troncarle a 16. C’è un comando specifico per il troncamento o posso semplicemente assegnare il valore di una variabile a 32bit in una a 16?
2 – Posso anche postare il resto della macro ma non vengono toccati valori relativi a tempistiche o LW9030, viene eseguito tutto nel loop che ho postato. Chiedo se sono noti bug nel firmware perchè la cosa è abbastanza anomala. Nel manuale LW9030 è indicato come system time a 32 bit in decimi di secondo. Dovrebbe quindi raggiungere lo zero dopo 4294967295 decimi di secondo, 13 anni circa, non dopo un paio di mesi. Inoltre, anche LW9030 facesse overflow sul conteggio ritornando a 0, il comportamento indicherebbe che dopo l’overflow LW9030 rimane a zero senza incrementare più, perchè se anche interrompo la macro e la rieseguo rimane lo stesso problema fintantochè non spengo e riaccendo il pannello.
Stefano
PartecipanteRiprendo questo vecchio post. Il progetto sta funzionando egregiamente da un bel po’ su un MT6070iP (EB8000). Tutta via gli operatori mi hanno appena segnalato un paio di anomalie. La prima anomalia è relativa al seguente pezzetto di macro:
sub CalcTimer(unsigned int time)
unsigned int minutes, seconds
minutes = time / 600
seconds = (time % 600) / 10
SetData(minutes, "Local HMI", "F2_MINREM", 1)
SetData(seconds, "Local HMI", "F2_SECREM", 1)
end subViene passato alla sub un valore in decimi di secondo e questa procedura lo scrive in due registri che rappresentano minuti e secondi. La mia svista è stata utilizzare “unsigned int” per “minutes” e “seconds”, quindi “SetData” scrive due registri adiacenti e non uno che avevo previsto. Questo mi va a sporcare registri usati per altre cose, solo in visualizzazione fortunatamente. La mia idea è semplicemente di dichiarare unsigned short minutes, seconds ma vorrei capire se ci sono possibili problemi di troncamento. Ossia la macro eseguirebbe il calcolo in una variabile a 32 bit per poi troncarla a 16 (che mi andrebbe bene), oppure troncherebbe la variabile 32 bit per eseguire l calcolo in quella a 16?
Altra questione molto strana è relativa a questo pezzo di codice:
unsigned int tick, prevtick, interval, elapsed, remaining
GetData(prevtick, "Local HMI", LW, 9030, 1)
interval = record[hold] * 600<
elapsed = 0while elapsed <= interval
GetData(tick, "Local HMI", LW, 9030, 1)
elapsed = tick - prevtickif elapsed > interval then<
remaining = 0
else
remaining = interval - elapsed
end ifCalcTimer(remaining)
DELAY(250)
wendL’operatore preme un tasto che attiva la macro che contiene questo codice. La macro fa trascorrere un certo tempo e aggiorna due registri che visualizzano un countdown. Questo pezzo di codice funziona perfettamente. Se però lascio il pannello acceso per più di un mese, quando l’operatore fa attivare la macro accade che il ciclo while esce immediatamente (sicuramente un ciclo viene fatto perchè viene visualizzato il il valore corretto iniziale del countdown). Interval si inizializza a 30 minuti solitamete (30 * 600). Questo accade finchè non spengo e riaccendo il pannello. A quel punto tutto torna a funzionare correttamente. Non riesco a capire cosa possa influire. Ci sono bug noti sul pannello nella gestione di LW-9030 (32bit system time unit : 0.1 second) ?
Stefano
PartecipanteDopo un pò di pausa per altre urgenze stò tornando sul progetto dei carrelli. Devo gestire 10 carrelli, quindi la mia interfaccia avrà 10 riquadri uguali, ognuno che legge e scrive gli stessi registri su 10 PLC diversi.
C’è una possibilità di creare un oggetto custom, contenente tutti gli oggetti che mi interessano, che possa essere trattato come gli oggetti di sistema o come libreria? In modo che in caso di modifiche debba toccare solo l’oggetto originale e non tutti i 10 i riquadri.
Stefano
PartecipanteA proposito di SysGetCounter vedo che nella descrizione del modulo PCB124*000 è gestito un encoder e due counters. Nel manuale Hardware è indicato solo il collegamento dell’encoder. Potrei pensare che i due ingressi per i contatori corrispondano alle fasi A/B dell’encoder e che quindi l’utilizzo come contatore o lettura encoder sia alternativo.
E’ corretta l’ipotesi ?
-
AutorePost