Protokoll für BVS

Montancy

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich benötige eine Hilfe für ein Programm und zwar muss ich ein kleines Protokoll schreiben für ein Lichtbildsensor, damit ich die Verschiedenen Typen aufrufen kann.

Der Hersteller schreibt folgendes vor ->



Der digitale Eingang "Auswählen" an Pin 1 gestattet das Auswählen der aktuell aktiven auf BVS laufenden Inspektion mittels eines definierten Protokolls.
Dieses Protokoll besteht aus einem "Prolog", gefolgt von den "Daten".
Der Prolog besteht aus 3 Impulsen mit einer minimalen Breite von 10 ms (Millisekunden) und einem Tastverhältnis von 50%.
Das Prologfenster soll maximal 80 ms dauern.Nach dem Senden
des definierten Prologs ist die Funktion "Auswählen" aktiviert.

Hinweis: Wenn es während des 80-ms-Prologfensters nicht genau 3 Impulse gibt, bleibt die "Auswahl" deaktiviert.
Nach Aktivieren der Funktion "Auswahl" startet der BVS ein 250 ms langes Zeitfenster. Während dieses Zeitraums zählt der BVS die an den Digitaleingang angelegten Impulse; die Anzahl der gezählten Impulse bezieht sich auf die Inspektionsnummer, welche aktiviert werden soll.



 
Hallo Montancy,

ich würde das Ganze im OB35 (Weckalarm) programmieren, da das Timing in diesem Falle schon fast an die Grenze einer normalen mittleren Siemens-SPS kommt. Für den OB35 habe ich in der Hardwarekonfig einen Intervall von 10ms eingestellt (unter Weckalarm), d.h. alle 10ms wird der OB35 aufgerufen und einmal abgearbeitet, unabhängig vom OB1. Ich habs mal so gelöst: Die nötige Impulsanzahl für die Programmnummer plus den Prolog wird berechnet und dieser Wert im OB 35 solange heruntergezählt, bis er Null ist.

Hier mal die Qelle eines kleinen FB, ich hab es mal recht ausführlich dargestellt:

Code:
FUNCTION_BLOCK FB 35
TITLE = Impulsausgabe
AUTHOR : Ralle
VERSION : 1.0


VAR_INPUT
  ProgrammNo : INT ;    
  Prolog : INT ;    
END_VAR
VAR_IN_OUT
  Start : BOOL ;    
  Imp_Ausgang : BOOL ;    
  Fertig : BOOL ;    
END_VAR
VAR
  Start_intern : BOOL ;    
  Impulszaehler : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =Reset Impuls-Ausgang, wenn Inakiv

      U     #Start; 
      SPB   STA1; 

      R     #Imp_Ausgang; 
      R     #Start_intern;

      BEA   ; 
NETWORK
TITLE =Starteinstellungen setzen bei Start

STA1: SET   ; 

      U     #Start; 
      UN    #Start_intern; 
      SPBN  KSTA; 

      L     #ProgrammNo; 
      L     #Prolog; 
      +I    ; 
      L     2; 
      *I    ; 
      T     #Impulszaehler; 

      SET   ; 
      S     #Start_intern; 
      R     #Imp_Ausgang; 
      R     #Fertig; 

KSTA: NOP   0; 
NETWORK
TITLE =Toggeln des Impulsausgangs

      U     #Start_intern; 
      X     #Imp_Ausgang; 
      =     #Imp_Ausgang; 
NETWORK
TITLE =Zählen der Imulse

      L     #Impulszaehler; 
      L     1; 
      -I    ; 
      T     #Impulszaehler; 
NETWORK
TITLE =Vergleich und Beenden bei 0

      L     #Impulszaehler; 
      L     0; 
      <=I   ; 
      S     #Fertig; 
      R     #Start; 
      R     #Imp_Ausgang; 
      R     #Start_intern; 
END_FUNCTION_BLOCK
Im Anhang findest du das ganze Programm mit Step7 archiviert.
 

Anhänge

  • Impulsausgabe.zip
    438 KB · Aufrufe: 8
Zuletzt bearbeitet:
Zurück
Oben