Vai al contenuto
PLC Forum


Tempo Di Lavoro


texano

Messaggi consigliati

Salve, mi servirebbe un aiuto.

Ho una macchina dosatrice gestita da s7 300, con supervisione Wincc 5.1 sp.1, mi servirebbe, poter controllare il tempo che effettivamente la macchina gira, e quindi di conseguenza il tempo di fermo.

Mi potreste, gentilmente dare un suggerimento su come fare???

Sulla supervisione, ci sono due pulsanti start e stop, vorrei legare a loro, un temporizzatore o altro per il conteggio.

Grazie

Link al commento
Condividi su altri siti


Gianmario Pedrani

Secondo me la soluzione più semplice è crearsi 2 orologi con dei contatori, all'interno del programma plc, e poi visualizzare i secondi, minuti ,ore , giorni dentro la supervisione..

Link al commento
Condividi su altri siti

Salve,

esistono svariati esempi e tecniche su come realizzare un contatore di funzionamento.

Anche Siemens nella biblioteca di funzioni denominata "Standard library" ==> "System Function Blocks" offre le funzioni SFC2,3 e 4 per la realizzazione di un contaore di esercizio.

La spiegazione di queste SFC le trovi anche con l'aiuto in linea.

In alternativa se può andarti bene allego il codice sorgente da importare come sorgente esterna.

Il contatore delle ore arriva ad una gestione massima di 32766, dopodichè si resetta automaticamente.

Tuttavia con alcune semplici modifiche è possibile portare la capacità di conteggio delle ore in formato 32bit aumentando decisamente la capacità di conteggio.

Una volta compilata la funzione, quest'ultima deve essere richiamata in OB1 ed usare sempre di OB1 la variabile di sistema contenuta nei dati TEMP denominata OB1_PREV_CYCLE.

In defintiva il contaore sfrutta come clock di conteggio il tempo di ciclo impiegato dalla CPU per elaborare il programma. Evitando così l'impiego di temporizzatori o altro.

Ovviamente come detto all'inizio questo è un modo di operare. Sicuramente ve ne sono altri che certamente gli utenti del forum ti posteranno come possibile esempio.

FUNCTION_BLOCK "Contaore"
TITLE =
AUTHOR : C_ostro
FAMILY : Counters
VERSION : 0.1


VAR_INPUT
  OB1_PREV_CYCLE : INT; //ms
  Run_Stp : BOOL; //Run/Stop counter
  ResetCnt : BOOL; 
END_VAR
VAR_OUTPUT
  iSCnt : INT; //Seconds counter 
  iMCnt : INT; //Minutes counter
  iHCnt : INT; //Hours conter
END_VAR
VAR
  dmsCnt : DINT; //millisec. counter 
END_VAR
BEGIN
NETWORK
TITLE =

// Reset counters

      U     #ResetCnt; 
      SPB   RES; 

// Run/Stop counter

      U     #Run_Stp; 
      SPBN  END; 

// milliseconds counter

      L     #OB1_PREV_CYCLE; // From OB1 - millisec
      L     #dmsCnt; // Adding millisecs
      +D  ; 
      T     #dmsCnt; 
      L     L#1000; // 1000 ms = one second
      -D  ; 
      SPM   END; 
      T     #dmsCnt; // Start with rest value

// Increase seconds counter

      L     #iSCnt; 
      +     1; 
      T     #iSCnt; 
      L     60; 
      >=I ; 
      SPBN  END; 
      L     0; 
      T     #iSCnt; 

// Increase minutes counter

      L     #iMCnt; 
      +     1; 
      T     #iMCnt; 
      L     60; 
      >=I ; 
      SPBN  END; 
      L     0; 
      T     #iMCnt; 

// Increase hours counter

      L     #iHCnt; 
      +     1; 
      T     #iHCnt; 
      L     32766; 
      >=I ; 
      SPBN  END; 

// Reset mseconds-seconds-minutes-hours counters

RES:  L     0; 
      T     #dmsCnt; 
      T     #iSCnt; 
      T     #iMCnt; 
      T     #iHCnt; 
END:  SET ; 
      SAVE; 


END_FUNCTION_BLOCK

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Ho fatto una piccola modifica al codice, adesso la gestione delle ore di lavoro arriva fino a 2 miliardi e rotti appoggiando la variabile su di una DINT.

Se sei interessato all'esempio che ti ho postato in precedenza, lascialo perdere ed importa il seguente codice come sorgente esterna.

Per importare il codice devi semplicemente fare un copia di tutto il testo contenente la funzione.

Fatto questo, apri con NotePad per esempio nel desktop di windows, un file che chiamerai per esempio texano.

Quindi incolla il codice copiato nel nuovo file di testo chiamato texano e salva il tutto.

Adesso rinomina il file texano con estensione .awl, per cui da texano.txt diventerà texano.awl.

Apri S7,seleziona la cartella "sorgenti" e clicca con il tasto destro del mouse, nella nuova finestra, seleziona "inserisci nuovo oggetto", quindi scegli "sorgente esterna".

A questo punto devi cercare il percorso in cui è stato salvato il file texano.awl e confermare con apri.

Fatto questo nella cartella sorgenti troverai il file appena importato, quindi fai doppio click sul medesimo e ti si aprirà il codice sorgente della funzione FB5.

dal menu "File" clicca su "Compila" se non viene segnalato nessun errore durante la compilazione, allora ti troverai nella cartella "Blocchi" la funzione FB5.

Accertati prima di eseguire il "Compila" di non aver già presente una FB5, altrimenti ti viene sovrascritta.

Adesso si tratta di creare il DB di istanza da assegnare alla FB5, e richiamare quest'ultima nell'OB1 per le ragione già dette nel post precedente.

FUNCTION_BLOCK FB 5

TITLE =

AUTHOR : C_ostro

FAMILY : Meter

VERSION : 0.1

VAR_INPUT

OB1_PREV_CYCLE : INT ; //ms

Run_Stp : BOOL ; //Run/Stop counter

ResetCnt : BOOL ;

END_VAR

VAR_OUTPUT

iSCnt : INT ; //Seconds counter

iMCnt : INT ; //Minutes counter

iHCnt : DINT ; //Hours conter

END_VAR

VAR

dmsCnt : DINT ; //millisec. counter

END_VAR

BEGIN

NETWORK

TITLE =

// Reset counters

U #ResetCnt;

SPB RES;

// Run/Stop counter

U #Run_Stp;

SPBN END;

// milliseconds counter

L #OB1_PREV_CYCLE; // From OB1 - millisec

L #dmsCnt; // Adding millisecs

+D ;

T #dmsCnt;

L L#1000; // 1000 ms = one second

-D ;

SPM END;

T #dmsCnt; // Start with rest value

// Increase seconds counter

L #iSCnt;

+ 1;

T #iSCnt;

L 60;

>=I ;

SPBN END;

L 0;

T #iSCnt;

// Increase minutes counter

L #iMCnt;

+ 1;

T #iMCnt;

L 60;

>=I ;

SPBN END;

L 0;

T #iMCnt;

// Increase hours counter

L #iHCnt;

+ L#1;

T #iHCnt;

L L#2147483647;

>=D ;

SPBN END;

// Reset mseconds-seconds-minutes-hours counters

RES: L 0;

T #dmsCnt;

T #iSCnt;

T #iMCnt;

T #iHCnt;

END: SET ;

SAVE ;

END_FUNCTION_BLOCK

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Secondo me, come ho già avuto modo di dire in altre discussioni, il modo più semplice per fare un contaore è fare un... contasecondi.

Basta incrementare una DWORD (quando sono vere le condizioni che richiedono l'attivazione del conteggio) sul fronte di salita del merker di sistema con frequenza 1Hz.

In questo modo si è già fatto un contasecondi che (considerando anche il segno) arriva a circa 68 anni di funzionamento ininterrotto.

Direi che si potrebbe tranquillamente evitare di gestire l'overflow.

Se poi si vuole la visualizzazione in hh:mm:ss, già molti supervisori la gestiscono automaticamente.

Nel caso si volessero invece gestire le tre variabili nel plc, piuttosto che incrementare i secondi, ogni 60 secondi incrementare 1 minuto, ogni 60 minuti incrementare 1 ora, è più semplice partire da un unico conteggio in secondi e poi, con poche istruzioni /D e MOD (resto della divisione), scomporre in ore, minuti, secondi.

Esempio:

      L     #Sec                        //Secondi totali
      L     L#3600
      /D    
      T     #hh                         //Ore

      L     #Sec                        //Secondi totali
      L     L#3600
      MOD   
      T     #Tmp                        //Resto in secondi dopo calcolo ore
      L     60
      /I    
      T     #mm                         //Minuti

      L     #Tmp                        //Resto in secondi dopo calcolo ore
      L     L#60
      MOD   
      T     #ss                         //Secondi

Le operazioni tengono conto del segno, quindi, come detto sopra, il conteggio massimo gestibile è di 2147483647 secondi totali, corrispondenti a 596523 ore, 14 minuti e 7 secondi (circa 68 anni).

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