Vai al contenuto

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

Stai visualizzando 13 post - dal 1 a 13 (di 13 totali)
  • Autore
    Post
  • #35018
    Anonimo
    Inattivo

    Ho 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 ?

    #36754
    Sergio Bertana
    Amministratore del forum

    Gli 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.

    #37034
    Anonimo
    Inattivo

    Il 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 ?

    #37035
    Sergio Bertana
    Amministratore del forum

    La 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.

    #37038
    Sergio Bertana
    Amministratore del forum

    Ho 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).

    #37260
    Emiliano
    Partecipante

    Stò 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 ?

    #37261
    Sergio Bertana
    Amministratore del forum

    Da 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.

    #37594
    Luis
    Partecipante

    Ho 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.

    #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.

    #54714
    Fabio Romani
    Partecipante

    Ho 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.

    #54717
    Sergio Bertana
    Amministratore del forum

    Come 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.

    #55256
    Rubox
    Partecipante

    Mi 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?

    #55265
    Sergio Bertana
    Amministratore del forum

    Direi 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.

Stai visualizzando 13 post - dal 1 a 13 (di 13 totali)
  • Devi essere connesso per rispondere a questo topic.