Vai al contenuto
PLC Forum


Subroutines In S7-200 - come passare timer e contatori


Messaggi consigliati

Inserito:

Salve a tutti,

Sto facendo un favore ad un amico elettricista che si sta cimentando in una piccola automazione con un S7-200.

Ci sono un po' di motori da gestire in modo pressochè analogo l'uno all'altro, e siccome ho visto che l'S7-200 accetta il passaggio di parametri alle subroutines, volevo farne una unica per tutti, una sorta di FB, così è utile anche per lui che vuole imparare a programmare.

Il problema è che devo introdurre dei timer e dei contatori nella gestione di ciascun motore.

Perciò credo proprio che dovrò passare alla subroutine il puntatore al timer e/o contatore, ma non conosco bene la sintassi dell'S7-200.

Sto facendo il programma in KOP, per renderlo comprensibile all'amico...

Qualcuno può darmi delucidazioni in merito alla sintassi del passaggio dei puntatori, così non perdo più tempo del dovuto?

Grazie e a buon rendere.


Inserita:

La pecca dei puntatori del 200 è che non possono esser usati per indicizzare richiami di contatori e temporizzatori, possono essere usati solo per leggerne il valore (per saperne di più digita “indirizzamento indiretto” sull’indice dell’.) ;) .

La lacuna è stata colmata con la nuova versione di Microwin 4.0 che introduce una nuova interessante funzione di temporizzazione basata su un contatore interno da 1 ms, con la quale puoi costruirti tutti i timer che vuoi (servono 2 DWORD per ogni timer). :)

  • 1 month later...
Inserita:

Alla fine, mi sono costruito da solo i timer, semplicemente incrementando ad ogni chiamata della subroutine una variabile di tipo INT, definita come IN/OUT, del valore di millisecondi impiegati dall'ultimo ciclo logica (valore depositato in SMW22). Poi si tratta di fare un semplice confronto.

Va molto bene e non mi complica le cose più di tanto.

Grazie e ciao!

TRUNC

Inserita:

Bella idea (davvero, non è ironia)

Però ha le sue pecche...i tuoi timer non contano mai più di 32,767 secondi (ma qui basta usare una DINT).... se il plc ha un tempo di ciclo molto veloce l’errore può anche essere molto grande, per esempio del 50% se ha un t.ciclo medio di 1.5ms, ma anche del 90% (se lavora a 1.9ms).... se invece lavora sui 10ms lo scarto massimo sarà inferiore (circa 10%).

Ciao

  • 4 weeks later...
Inserita:
Però ha le sue pecche...i tuoi timer non contano mai più di 32,767 secondi (ma qui basta usare una DINT).... se il plc ha un tempo di ciclo molto veloce l’errore può anche essere molto grande, per esempio del 50% se ha un t.ciclo medio di 1.5ms, ma anche del 90% (se lavora a 1.9ms).... se invece lavora sui 10ms lo scarto massimo sarà inferiore (circa 10%).

Fortunatamente, tutti i tempi che mi servono sono nell'ordine dei decimi di secondo, ben inferiori ai 32,767 secondi (è stata la prima condizione che ho verificato).

Riguardo all'errore, effettivamente ho un tempo ciclo di circa 10-11ms, quindi rientro nel 10% calcolato da te, a cui, però, occorre sommare un'ulteriore componente assoluta <= al tempo di ciclo logica.

Per fortuna non ho bisogno di precisione estrema.

Certo, è una soluzione che presuppone una serie di condizioni per essere utilizzata, ma evita molti problemi di programmazione.

A questo punto mi chiedo, però, quali riferimenti prendano i timer veri e propri...

Non è che, per caso, siano anche questi soggetti allo stesso errore dei miei?

Se così non fosse, vuol dire che essi prendono come riferimento un tempo di ciclo logica più preciso, e allora sorge spontanea la domanda: perchè in SMW22 non ci depositano questo invece di quello grossolano in millisecondi?

Valli a capire, quelli della Siemens...

TRUNC

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