Vai al contenuto
PLC Forum


Uso dei Sottoprogrammi - STEP7-Micro/Win32


Messaggi consigliati

Inserito:

Un saluto a tutto il forum

Programmando capita spesso di dover fare uso di sottoprogrammi che possano poi essere richiamati più volte dal programma principale per situazioni analoghe

Programmando con STEP7-Micro/Win32 ho notato però che se all'interno del sottoprogramma c'è un temporizzatore (ad es. T34) allora questa variabile (globale) non può essere utilizzata dai vari sottoprogrammi ma assume giustamente il valore presente nell'ultimo sottoprogramma in esecuzione.

Esiste un modo per mettere una variabile temporizzatore in un sottoprogramma che vada per conto suo in ciascun sottoprogramma????

Ciao a tutti


Inserita: (modificato)

Ciao eleinsar.

Credo che si possa fare qualcosa con i puntatori (& e *) ma per adesso non so dirti altro, non ho sottomano ne' il soft ne' i manuali.

Modificato: da JumpMan
Inserita:

visto e considerato che all'interno non puoi creare variabili di tipo s5#time e nemmeno

temporizzatori (parlo del s7200) l'unica cosa che puoi fare e':

-usare internamente il clock di sistema sm0.5 ed usarlo sul fronte di salita

per incrementare le word che userai come accumulatore del timer

-usando la comparazione >= tra preset e accumulatore farai eseguire al plc

le istruzioni da te desiderate e quindi subito dopo azzerare l'accumulatore

il tutto contornato da bit e word di controllo

l'accumulare sara dichiarato come IN_OUT e dall'esterno gli passarai ad ogni chiamata

una word diversa ovviamente .

se poi fai come dice jumpman e usi i puntatori con & carichi l'indirizzo di una variabile in una doppiaword (dwx) o accu di sistema (AC0 AC1 ecc.)

e poi deindirizzi il contenuto della variabile puntata dal puntatore puoi sbizzarrirti

in casi complessi e particolari con un impegno minimo di codice (ma con un po impegno a livello mind)

prova comunque a crearti un sottoprogramma cosi:

(dichiarazioni):(FC1)

enable IN bool

preset IN int

accu_timer IN_OUT int

output out bool

codice:

network1

LD #enable

U SM0.5

EU

MOVW 1,#accu_timer

network2

LDW>= #accu_timer,preset

S #output

MOVW 0,#accu_timer

dall'esterno quando richiami il blocco sara cosi:

(nel main per esempio)

network 1

U e0.0 // condizione a tuo piacere

CALL FC1 , M0.0,MW10,MW12,Q0.0

questo semplice esempio se lo capisci ,sempre che sia stato chiaro, ti fa ragionare

e capire tante cose sui parametrizzati e di conseguenza far applicare la tua fantasia

nonche necessita su di esso sbizzarrendoti come meglio credi

ciao

walter

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