Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Esegui Operazione Solo Con Rlc=1


Messaggi consigliati

Inserito:

Salve a tutti,

vi pongo il mio quesito...

con l' IL di un telemecanique io posso scrivere:

LD I1.0

[MW5:=10]

La parola MW5 viene scritta solo se l'ingresso I1.0 è uguale a 1.

Qual'è l'equivalente in Step7 ?

Spero di non dover ricorrere ad un salto del tipo:

U E1.0

SPBN label

L 10

T MW5

label: ....

Grazie.


Inserita:

Devi fare esattamente come hai scritto, con un salto.

Questo naturalmente se usi AWL come linguaggio.

CIAo

emanuele.croci
Inserita:

Consolati, dopo un po' ti abituerai... :P

Ciao, Emanuele

del_user_27683
Inserita:

In effetti l'utilizzo dei salti è piuttosto barbaro, nei linguaggi di programmazione ad alto livello sono decenni che sono stati studiati sistemi per evitarne l'utilizzo.

Se vuoi continuare ad usare l'AWL di S7 puoi crearti una libreria di funzioni (copia, somma...) sotto forma di FB con istanza, da richiamare in modo condizionato con l'istruzione CALL.

Mettiamo che devi copiare una word con E0.0 alto, pui scrivere:

U E0.0

CALL FB 98 , DB98

I_SORG:=MW12

I_DEST:=MW20

L'FB 98 che avrai creato può essere semplicemente del tipo:

SPBN LB1

L #I_SORG

T #I_DEST

CLR

LB1: NOT << In questo modo non perdi lo stato dell'RLC e puoi mettere in sequenza più CALL

Ovviamente dovrai creare un FB di copia per ogni tipo (INT, DINT, WORD...)

Ti assicuro che ci vuole veramente poco a crearsi un libreria e il programma guadagna molto in leggibilità e tra l'altro puoi creare funzioni più complesse che siemens non ha o migliorarne altre.

Ciao.

Inserita:

Il ricorso a FB per semplici operazioni non mi sembra una soluzione valida, perché utilizza un sacco di risorse per cose banali.

Fare il salto è solo questione di abitudine.

Tieni presente che succede anche il contrario: un'operazione che devi eseguire sempre con l'awl di step7 la devi solo scrivere, mentre con altri plc devi tirare in ballo un flag "sempre on" per fare l'operazione.

del_user_27683
Inserita:

Piuttosto che parlare di soluzioni “valide” preferisco utilizzare il termine “opportune”, è evidente che se si ritiene prioritaria la preservazione delle risorse del sistema le strategie siano altre.

D’altra parte se ci si trova di fronte alla soluzione di problematiche complesse senza la necessità di lesinare sul tipo di PLC a parer mio l’esigenza di “ordine” del software diventa prioritaria, considerando che il richiamo di una SUB in S7 non è traumatica come in sistemi obsoleti tipo S5.

Personalmente uso i salti come chiunque altro, il suggerimento probabilmente deriva dalla mia formazione “informatica” in cui l’utilizzo dei salti era fortemente sconsigliata, l’esperienza recente dimostra che i PLC hanno mutuato molto dai linguaggi ad alto livello.

In ogni caso penso sia importante conoscere i metodi, la loro applicazione resta legata al tipo di applicazione e al "gusto" personale.

Inserita:

Anch'io sono abituato a crearmi FC ed FB personalizzate anche per operazioni relativamente semplici che vengono richiamate ripetutamente in un programma, ma nel caso specifico mi sembra si esageri.

- Trasferimento di WORD nel modo tradizionale (con salto)

UN M0.0 (se M0.0 è basso NON effettuo il trasferimento)

SPB M000

L "Sorg"

T "Dest"

M000: NOP 0

- Trasferimento di WORD con FB (tuo esempio)

U E0.0

CALL FB 98 , DB98

I_SORG:=MW12

I_DEST:=MW20

Mi sai dire dov'è la semplificazione?

Tieni presente, inoltre, che effettuare salti significa non elaborare le istruzioni saltate, con beneficio sui tempi di scansione.

Per finire, se proprio ti vuoi fare una funzione di questo tipo, almeno utilizza una FC, non una FB.

D’altra parte se ci si trova di fronte alla soluzione di problematiche complesse senza la necessità di lesinare sul tipo di PLC a parer mio l’esigenza di “ordine” del software diventa prioritaria, considerando che il richiamo di una SUB in S7 non è traumatica come in sistemi obsoleti tipo S5.

L'ordine in un programma è importantissimo, ma delle due soluzioni la seconda non mi sembra più ordinata.

Per quanto riguarda il "lesinare sul tipo di plc", forse è proprio perché troppi programmatori di pc non si curano minimamente dell'utilizzo delle risorse che siamo arrivati agli attuali mastodontici e pesantissimi software, con l'attuale rincorsa a pc sempre più veloci per poter far girare programmi sempre più pesanti.

Quando sviluppo un programma per plc non metto certo il risparmio di risorse al primo posto, ma sicuramente neanche all'ultimo.

emanuele.croci
Inserita: (modificato)

Ciao mrctnj,

rispetto alla tua soluzione per copiare le word ti faccio notare il seguente:

CALL <Identificazione del blocco di codice> funge da richiamo per le funzioni (FC) ed i blocchi funzionali (FB) o anche per le funzioni standard (SFC) ed i blocchi di funzioni standard (SFB) fornite dalla Siemens. L'operazione CALL richiama FC e SFC, ovvero FB e SFB, immessi dall'utente come operandi, indipendentemente dal RLC o da altre condizioni. Se si richiama un FB o SFB con l'operazione CALL, occorre dotarlo di un blocco dati di istanza. A conclusione dell'elaborazione del blocco richiamato, viene elaborato il programma del blocco che ha eseguito il richiamo. L'identificazione del blocco di codice può essere indicata in modo assoluto o simbolico. I contenuti dei registri vengono riparati dopo un richiamo di SFB/SFC.

...di conseguenza non funziona perché è sempre eseguita.

Volevo dirti anche di usare una FC, ma batta mi ha preceduto.

Infine, ritengo che sia saggio e intelligente adattarsi un minimo alle strutture che un linguaggio ti fornisce: se Step7 ti spinge ad usare una istruzione di salto per eseguire una certa operazione, non è detto "a priori" che sia sbagliata.

Senza tirare in ballo Niklaus Wirth e compagnia, l'uso del GOTO è sconsigliato nei linguaggi ad alto livello, ma inteso come istruzione che ti rilancia ad un pezzo totalmente diverso del programma (ed è sconsigliato pure nei linguaggi plc in quanto al minimo errore rischi di mandare in stop il programma per superamento tempo ciclo)

Ma in questo caso parliamo di una istruzione che serve solo per completare l'operazione!

Se la Siemens l'avesse chiamato IF-THEN-ELSE... (perché in realtà è quello che fa) ti sarebbe andato bene??

Ciao, Emanuele

Modificato: da emanuele.croci
del_user_27683
Inserita:

Torno a ripetere che il mio era solo un esempio per un utente che si è trovato a disagio con una struttura a lui poco congeniale.

L’esempio citato è comunque funzionante c’è solo un errore di battitura nella descrizione (la call è ovviamente incondizionata), il blocco deve essere sempre eseguito ma con RLC basso non fa nulla.

Conosco bene la necessità di “risparmiare” il PLC visto che ho iniziato parecchi anni fa con i SAIA PCA senza seriale (da programmare con il tastierino) e un manciata di timer.

Ciao a tutti e buone ferie.

Inserita:

Vorrei spezzare una lancia (o se preferite un Bmw) :D contro l' utilizzo delle fb indicizzate, sono molto belle, il programma diviene "molto elegante" ma se poi devo andare in test per capire come mai la macchina non fa una certa operazione ho come l' impressione che sia leggermente meno comprensibile dagli utenti normali, se la mia convinzione e' errata vi pregherei di spiegarmi dove sbaglio, grazie

Inserita:

Anch'io concordo con "bellcar" l'utilizzo delle FB indicizzate è elegante ma al lato pratico ed in sede di start-up macchina lo vedo più difficile, anche per interventi futuri magari dopo 3-4 anni che si è fatta la macchina.

Inserita:

Non sottovaluterei nemmeno l'incremnto del tempo ciclo del PLC usado molti blocchi indicizzati.

Inserita:

Ciao a tutti, io faccio più diagnostica e manutenzione che programmazione, e per questo uso molto più spesso il KOP dell'AWL, e con lo schema a contatti basta mettere in serie alla condizione che ti serve un box "MOVE" che ti spedisce il valore voluto nella memoria (o DB o gruppo uscite) che vuoi.

Trovo che il KOP sia il migliore quando hai segmenti complicati e devi capire "a occhio" :blink: dove passa o non passa il tuo RLC.

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