Vai al contenuto
PLC Forum


Creare "subroutine"


machyaer

Messaggi consigliati

Ciao a tutti,

qualcuno sa se è possibile (e come) programmare un CJ1 CPU12 in modo da realizzare delle "subroutine"?

Cerco di spiegarmi meglio:

Vorrei realizzare questa "subroutine" in modo tale da potergli passare alcuni ingressi, uscite, e numero timer. Questa dovrebbe poi essere richiamabile all'interno del programma principale anche più volte, ma in ogni istanza i parametri passatigli saranno diversi.

Ad es. I0.00; I0.01; O2.00; O2.01; T0001; W0.00 (parametri da passare)

oppure: I0.02; I0.03; O2.02; O2.03; T0002; W0.01

Sperando di essere stato abbastanza chiaro vi saluto.

Max

Modificato: da machyaer
Link al commento
Condividi su altri siti


Diciamo che se non sei pratico di Function Block puoi chiamare semplicemente una subroutine.

Prima della chiamata inizializzi i canali che usi all'interno della SBN e altre variabili le usi come appoggio per leggere dopo la chiamata SBS.

Link al commento
Condividi su altri siti

Claudio Negro

Direttamente dall'. in linea di CXprogrammer:

MCRO(099) richiama la subroutine con il numero di subroutine specificato allo stesso modo di SBS(091). Al contrario di SBS(091), gli operandi S e D di MCRO(099) possono essere utilizzati per modificare gli indirizzi di canali e bit nella subroutine, anche se la struttura della subroutine è costante.

Quando si esegue MCRO(099), il contenuto di S a S+3 viene copiato in A600 a A603 (ingressi area macro) e la subroutine specificata viene eseguita. Quando la subroutine viene completata, il contenuto di A604 a A607 (ingressi area macro) viene copiato in D a D+3 e l'esecuzione del programma continua con l'istruzione successiva a MCRO(099).

Ciao

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ho dato un'occhiata ai suggerimenti che mi avete dato ed avrei "scelto" di realizzare un function block, però non è che il mio tentativo sia andato proprio bene.

Il codice che vorrei inserirci dentro è quello del link qui sotto, ma non so come fare a passargli dal programma principale il timer (numero e durata) e la variabile di appoggio.

Sono riuscito a farlo funzionare solo impostando questi due parametri come interni, ma così posso utilizzare il blocco una sola volta altrimenti fa un grande casino. :(

Qualcuno mi sa aiutare e/o consigliare dove trovare informazioni maggiori sulla realizzazione dei function block?

Pulsante

Grazie

Link al commento
Condividi su altri siti

Claudio Negro

Nel temporizzatore hai messo una costante come valore.

Sostituiscila con un canale, tipo DM0

Dopo di che con l'autogenerazione del blocco funzione ti verrà creata una variabile interna.

Devi solo modificarla in variabile ingresso e avrai quello che cerchi.

Ogni volta che chamerai il blocco funzione imposterai la variabile tempo come vuoi tu.

Ciao

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...