Vai al contenuto
PLC Forum


Richiamare Una Routine


Bacchetti Lorenzo

Messaggi consigliati

Bacchetti Lorenzo

Buongiorno a tutti,

sono nuovo nel mondo Allen & Bradley. Sto sviluppando in ambiente RS Logix 5000 e volevo avere un informazione a riguardo.

Premetto che son abituato a programmare in Step 7, e la mia richiesta è la seguente.

Dopo aver creato il blocco (routine), come faccio a richiamarlo in stile Step 7, ovvero far comparire un blocco con tutti i parametri IN sulla sinistra e i parametri OUT sulla destra?

E' possibile una cosa del genere?

Grazie mille,

Link al commento
Condividi su altri siti


Ci sono due metodi per richiamare una subroutine passando parametri di Input e ricevendo parametri di Output:

1. utilizzo delle istruzioni JSR - SBR - RET, utilizzando Input e Return parameters

2. utilizzo delle Add-On Instructions (AOI)

Il secondo metodo credo sia il più simile a quello richiesto.

Ti consiglio i seguenti manuali:

1.Logix5000 Controllers General Instructions Reference Manual

2.Logix5000 Controllers Add-on Instructions Programming Manual

- fuzzy logic

Link al commento
Condividi su altri siti

Bacchetti Lorenzo

Grazie per la risposta.

Avrei un altra domanda.

Avevo già provato il metodo JSR-SRB-RET, e in merito vorrei sapere:

all'interno della subroutine che richiamo scrivo un programma con degli input e output con delle tag generali, senza particolare riferimento ad un movimento. Invece nella main routine ho la necessità di utilizzare delle tag che mi riportino anche il nome del movimento.

Quindi nell' istruzione JSR mi ritroverò negli INPUT/OUTPUT delle tag con il nome del movimento, e nelle istruzioni SRB e RET, all'interno della subroutine, mi ritroverò gli INPUT e OUTPUT con delle tag generali.

Ora, la mia domanda, come fa la subroutine ad assegnare la corretta tag agli input definiti nell istruzione SRB? e di conseguenza la corretta tag agli output nell'istruzione RET?

Segue la posizione definita nell'istruzione JSR?? Ovvero, se nell'istruzione JSR, il primo input par è: "value_a", viene assegnato al primo input par dell'istruzione SRB, anche se ha un nome di tag diverso, ad esempio "general_input_1"?

Saluti,

Link al commento
Condividi su altri siti

Probabilmente non ho ben capito,ma ogni tag ha un nome univoco,

quindi il problema non sussiste,

ne approfitto per chiederti come ti trovi con controllogix

a differenza di s7

ciao

Link al commento
Condividi su altri siti

Bacchetti Lorenzo

Si le tag hanno un nome univoco, però io ho la necessità di utilizzare la stessa subroutine per più movimenti, e che quindi verranno settati da tag diverse.

Su siemens richiamavo il blocco, davo le mie condizioni hai parametri IN, il blocco eseguiva e mi restituiva gli OUT.

Per quel poco che ho utilizzato A&B posso dire che rispetto a siemens è meno intuitivo collegarsi ONLINE la prima volta, ho perso un po di tempo.

Ha però il vantaggio di avere tutti i blocchi contemporaneamente online, molto useful!

Un altro vantaggio è il fatto che i valori che ricevo da HMI non devo convertirli in S5Time come su S7, ma ho già un INT da usare a piacere.

Una pecca secondo me è che lavorando a tag, devi ogni volta andare a cercarti la tag, e fare copia e incolla, mentre su S7 avevo le mie Memorie e ingressi standard e lo sviluppo era più rapido.

Un altra pecca è la mancanza di certi tipi di temporizzatore (PEXT) che ti costringe a usare degli scamuffi.

Poi non puoi andare online fino a che non hai la configurazione hardware corretta, quindi se vuoi testare il tuo software in ufficio con la sola CPU devi farti un programma completo di ingressi, remotaggi e inverter, mentre uno di test, solo con la CPU.

Un vantaggio secondo me è il modo in cui hanno raggruppato le varie funzioni, per categorie (temporizzatori, contattori, program control).

Potrò darti una panoramica migliore a software finito e ad avviamento concluso, per fare un paragone in "ufficio" ed in "campo" tra questi due colossi.

Link al commento
Condividi su altri siti

Lorenzo, è come scrivi tu: il valore del primo Input Parameter dell'istruzione JSR viene passato nel primo dell'istruzione SBR e così via di seguito.

Lo stesso vale per le uscite del blocco: il primo parametro dell'istruzione RET corrisponde al primo Output Parameter dell'istruzione JSR.

Il nome dei parametri non ha impotanza, nella subroutine saranno sempre le stesse variabili, mentre cambieranno in ogni JSR che richiama il blocco.

- fuzzy logic

Modificato: da fuzzy logic
Link al commento
Condividi su altri siti

Bacchetti Lorenzo

Ok, perfetto grazie mille.

Già che ci sono volevo farmi un altra domanda.

E' possibile usare come PREset di un timer una Tag?

ho provato ad inserire un INT come preset su un TON, ma RSLogix mi dice: "Failed to modify the tag value. String invalid."

Leggendo l'. vedo che accetta solo valori immediati, quindi numerici.

Ho provato ad usare un move della tag al preset del timer ma non funziona.

Link al commento
Condividi su altri siti

Bacchetti Lorenzo

Sistemato.

Scusatemi, un errore mio!!! semplicemente mi ero dimenticato di richiamare il blocco utilizzato nella main routine!!!

Comunque ribadisco:

Per utilizzare una TAG come valore di PRESET in un timer si deve utilizzare un MOVE, con source la TAG stessa, e come destination "timer.pre".

Grazie per l'aiuto.

Link al commento
Condividi su altri siti

Le istruzioni Timer dei controllori A-B accettano solo un valore numerico nel campo Preset.

Per poter gestire un Preset variabile, occorre eseguire un MOV della tua tag nella tag di preset del timer.

Es.: se la tag del timer si chiama MyTimer, l'istruzione MOV dovrà avere come destinazione MyTimer.PRE (il preset è un tipo di dato DINT, il valore di tempo è espresso in msec)

- fuzzy logic

Link al commento
Condividi su altri siti

  • 3 weeks later...
  • 2 weeks later...

Buongiorno a tutti, anche io sono nuovo del Allen Bradley e vorrei ricollegarmi alla domanda di Lorenzo riguardo alle subroutine parametrizzabili come in Siemens. Sto lavorando con RSLogix500 Pro e con il plc 1747-L531, ho verificato sul manuale d'uso ma non parla di subroutine parametrizzabili. Qualcuno di voi sa se è possibile crearle e come?

Grazie

Link al commento
Condividi su altri siti

Il richiamo è così:

JSR

Routine Name (nome delle routine)

Inpit Par (1° parametro ingresso)

Inpit Par (2° parametro ingresso)

Inpit Par (3° parametro ingresso)

Return Par (1° parametro uscita)

Return Par (2° parametro uscita)

nella suborutine PRIMA ISTRUZIONE

SBR

Inpit Par (1° parametro ingresso)

Inpit Par (2° parametro ingresso)

Inpit Par (3° parametro ingresso)

nella suborutine ULTIMA ISTRUZIONE

RET

Return Par (1° parametro uscita)

Return Par (2° parametro uscita)

Note:

- il numero di parametri nel richiamo e nella subroutine devono ovviamente corrispondere

- la prima istruzione della subroutine deve essere la SBR ma non in un ramo a sè, devono sempre seguire altre istruzioni, in pratica prendi il primo ramo della tua suboroutine e come primo contatto ci metti SBR.

ciao

Link al commento
Condividi su altri siti

  • 3 weeks later...
Bacchetti Lorenzo

Dopo l'istruzione SBR puoi inserire anche un NOP.

Ricordarsi che la tag richiamata sulla JSR e poi SBR come in RET devo avere lo stesso data type.

questo è fondamentale se no non lavora il meccanismo!

Saluti,

Dopo l'istruzione SBR puoi inserire anche un NOP.

Ricordarsi che la tag richiamata sulla JSR e poi SBR come in RET devo avere lo stesso data type.

questo è fondamentale se no non lavora il meccanismo!

Saluti,

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