Come gestire gli I/O del modulo CPU SlimLine
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Come gestire gli I/O del modulo CPU SlimLine
- Questo topic ha 12 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 4 anni, 11 mesi fa da
Sergio Bertana.
-
AutorePost
-
Maggio 28, 2011 alle 10:00 am #35018
Anonimo
InattivoHo una CPU Slimline con un modulo mixed I/O collegato. Riesco ad accedere senza problemi agli ingressi/uscite del modulo mixed I/O ma non riesco a capire come accedere all’I/O del modulo CPU.
Che indirizzi devo usare ?
Maggio 28, 2011 alle 10:03 am #36754Sergio Bertana
Amministratore del forumGli I/O presenti sul modulo CPU dello SlimLine non sono mappati in memoria in immagine di processo come tutti gli altri I/O dei moduli di estensione.
Per acquisire gli ingressi occorre utilizzare la funzione embedded SysGetPhrDI, get peripheral digital input definendo Address 255 e Mode DI_8_LL.
Per gestire le uscite occorre utilizzare la funzione embedded SysSetPhrDO, set peripheral digital output definendo Address 255 e Mode DO_8_LL.
Nella libreria PLCUtyLib, si trova il blocco funzione CPUModuleIO, CPU module I/O management che gestisce sia la acquisizione degli ingressi che la gestione delle uscite.
Nel guida Sline programming help che si attiva da LogicLab evidenziando la funzione ed agendo con il tasto F1, è possibile trovare esempi di utilizzo sia delle funzioni embedded che del blocco funzione.
Novembre 2, 2011 alle 1:12 pm #37034Anonimo
InattivoIl valore Value di tipo DWORD che passo alla funzione SysSetPhrDO contiene l’informazione su quali uscite attivare. Ma in che modo ciascuna uscita è mappata sui bit di Value ?
Novembre 2, 2011 alle 1:21 pm #37035Sergio Bertana
Amministratore del forumLa funzione SysSetPhrDO può gestire tutti i tipi di schede di uscite digitali collegabili al bus di estensione del sistema SlimLine. Ad ogni indirizzo di modulo è prevista la possibilità di avere un massimo di 32 output digitali (Ecco perchè Value è di tipo DWORD), ad ogni bit di Value corrisponde una uscita logica.
In Mode occorre definire il modo di gestione uscite digitali, esistono schede che dispongono di meno di 32 output, in questo caso è possibile gestire solo 16 (DO_16_H, DO_16_L) oppure 8 uscite (DO_8_MM, DO_8_M, DO_8_L, DO_8_LL).
DO_32, DO_16_L, DO_8_LL: bit 0 di Value corrisponde ad output 0, bit 1 ad output 1, e così via.
DO_8_L: bit 0 di Value corrisponde ad output 8, bit 1 ad output 9, e così via.
DO_16_L, DO_8_M: bit 0 di Value corrisponde ad output 16, bit 1 ad output 17, e così via.
DO_8_MM: bit 0 di Value corrisponde ad output 24, bit 1 ad output 25, e così via.Novembre 2, 2011 alle 2:35 pm #37038Sergio Bertana
Amministratore del forumHo realizzato un semplice programma LogicLab che utilizzando il bloco funzione CPUModuleIO esegue l’acquisizione dei due ingressi e la gestione delle due uscite sul modulo CPU SlimLine.
I due ingressi digitali sono appoggiati sulle variabili globali di tipo BOOL I0OnCPU, I1OnCPU. Le due variabili globali di tipo BOOL O0OnCPU, O1OnCPU sono trasferite sulle due uscite logiche del modulo (Download programma).
Giugno 1, 2012 alle 8:42 am #37260Emiliano
PartecipanteStò cercando di utilizzare le porte di I/O digitali a bordo del modulo CPU utilizzando il blocco funzione CPUModuleIO in linguaggio ST. Solo che non riesco a farlo funzionare; attivo l’ingresso di Enable, ma l’uscita Enabled rimane FALSE, Done e Fault sono sempre FALSE.
Agendo sulle uscite DO00, DO01 lo stato in debug cambia, ma in realtà ho sempre le uscite reali non attive, dove sbaglio ?
Giugno 1, 2012 alle 9:08 am #37261Sergio Bertana
Amministratore del forumDa come mi spieghi sembra tutto corretto, sei sicuro di eseguire il blocco funzione ? Cioè oltre a definirlo devi anche eseguirlo mettendo una chiamata al blocco funzione. Ti allego stampa e programma sorgente con un esempio di utilizzo.
Marzo 13, 2013 alle 9:22 pm #37594Luis
PartecipanteHo acquistato dei moduli CPU SlimLine compact, ma non riesco a gestire i 6 ingressi digitali i due analogici anche le 4 uscite digiltali, nell programma dimostrativo si riescono soltanto a gestire due ingressi digitali e due uscite digitali, ho cercato di inserire altri ingressi ed uscite ma non sono riuscito, può fare un esempio dimostrativo dove si gestiscono tutti gli I/O digitali ed analogici della CPU SlimLine compact.
Marzo 14, 2013 alle 9:20 am #37595Sergio Bertana
Amministratore del forumGli 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.
Aprile 18, 2020 alle 1:03 pm #54714Fabio Romani
PartecipanteHo acquistato un modulo SlimLine CPU comact e sto cercando di programmare in LD ma non riesco ad definire address e channel nel blocco funzione SysGetAnInp non capisco dove devo andare per settare address e channel in LogicLab.
Aprile 18, 2020 alle 1:21 pm #54717Sergio Bertana
Amministratore del forumCome ho scritto nelle risposte all’inzio del topic, gli I/O logici sono automaticamente mappati nell’immagine di processo, il FB SysGetAnInp serve per l’acquisizione degli ingressi analogici.
Ecco lo screenshot del programma SimplyLD, un semplice programma ladder che realizza una gestione logica ed una acquisizione analogica.
Come vedi gli I/O logici li ho dichiarati nelle variabili globali, quindi sono visibili da tutti i programmi che possono referenziarli.
Nel programma ladder ho istanziato il FB SysGetAnInp per l’acquisizione analogica e poi ho creato un nuovo ramo ladder, che ha un contatto ed una uscita. Ho trascinato sul contatto l’istanza creata e poi ho cancellato sia il contatto che l’uscita.
Per definire le variabili in ingresso/uscita dal FB basta trascinare l’oggetto sul relativo piedino. Ti lascio il progetto per il download.
Maggio 18, 2020 alle 8:30 am #55256Rubox
PartecipanteMi trovo con la necessità di acquisire circa 50 valori di temperatura. Finché sono stati solo 5 valori ho istanziato 5 variabili SysGetAnInp. Adesso con 50 valori come è meglio procedere?
Istanziare 50 blocchi funzione SysGetAnInp, oppure creare una struttura con dentro i campi address, channel, mode, value, istanziare un array di questa struttura e poi usare un ciclo for per acquisire i valori, modificando i parametri del blocco di lettura in base ai valori corretti?
A livello di memoria dati immagino che istanziare 50 blocchi funzione sia peggio della seconda opzione o sbaglio?
Nel caso ci sia un errore nella lettura (per guasto o per altro) quale approccio è migliore?
Maggio 18, 2020 alle 8:42 am #55265Sergio Bertana
Amministratore del forumDirei che hai suggerito la soluzione tu stesso, è certamente preferibile istanziare un unico FB SysGetAnInp e passare di volta in volta i valori di Address, Channel, Mode. Questo permette di ridurre l’occupazione di memoria e l’impegno del bus.
Ogni FB di acquisizione occupa un certo spazio di memoria dati ed istanziarla 50 volte ne moltiplica l’occupazione. Inoltre accedere al modulo di estensione richiede uno slot di tempo sul bus e 50 esecuzioni contemporanee aumentano lo slot di tempo.
Il consiglio quindi è di gestire la SysGetAnInp in un programma eseguito in Back, per non togliere tempo sull’accesso al bus alla immagine di processo degli I/O digitali (Eseguita in Slow).
Devi sequenziare i vari canali impostando i valori nei parametri di ingresso ed attendendo il Done. Con il Done attivo cambi parametri e passi al prossimo canale. Puoi controllare il Fault per segnalare errore sulla acquisizione di un canale.
Se vuoi velocizzare il tempo totale di acquisizione, o se qualche canale vuoi che sia acquisito piu velocemente, puoi creare più loops di acquisizione con piu FB SysGetAnInp, suddividendo i canali tra di loro.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.