STeuerung

Hechel

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich bin auf dem gebiet Simatic ziehmlich neu und bräuchte mal eure hilfe.
Undzwar geht es um folgendes:

Ich habe 2 Lichtschranken-Paare mit einem Abstand zueinander von 1 Meter.
Nun will ich über die SPS durch die Formel v=s/t die Geschwindigkeit ausrechnen. Wie müsste ich dies am besten in der SPS umsetzen ? Kann mir da jemand was schreiben ?

Freue mich über jede Hilfe die kommt.

Danke im Vorraus

lG
 
EINE Lösung wäre:
Lies bei jedem Ereigniss die Systemzeit aus und errechne die Differenz.
Wenn Du ein wenig suchst, dann findest Du hier im Forum einen passenden Baustein - war schon mehrmals Thema
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stell doch bitte mal deinen Lösungsansatz hier ins Forum und stelle dann dazu Fragen.
Von was willst du überhaupt die Geschwindigkeit messen und wie schnell ist das was du messen willst
 
Das Problem ist, dass ich keine Ahnung von Simatic bzw. von der programmierung habe. Es soll ein Fahrzeug gemessen werden. Wenn es zu schnell ist, z.b. die geschwindigkeit von 20km/h überschreitet, dass dann Magnete anziehen für 2s. und das Fahrzeug abbremsen.
 
1. Positive Flanke LS1
2. einen Time Variable Nullen
3. Solange auf diese Time Variable der OB1_prev_cycle addieren bis ...
4. sich Steigende Flanke an LS2 einstellt.

Die Time Variable entspricht der Zeit die das Objekt zwischen den LS gebraucht hat. Mit einer Ungenauigkeit von einem SPS-Zyklus

1m/TimeVariable ms muss dann eben noch in km/h umgerechnet werden.
 
Danke erstmal für eure hilfe, das weiß ich zu schätzen.
Wie ist denn die simatic aufgebaut ? Kann mir da jemand was schreiben in Programmiersprache ? Wäre euch sehr verbunden.
 
So mal einfach drauf los geschrieben ohne zu testen:

Code:
FUNCTION_BLOCK FB42
VAR_INPUT
  LS1         :BOOL;
  LS2         :BOOL;
  OB1PreCycle :INT;
END_VAR

VAR_OUTPUT
  Speed       :INT; (* m/h *)
END_VAR

VAR
  LS1old      :BOOL;
  LS2old      :BOOL;
  myTime      :TIME;
  myRun       :BOOL;
END_VAR

  (* Time Out wenn das Objekt nie LS2 erreicht hat. *)
  IF TIME_TO_DINT(myTime) > 20000 THEN 
    myRun := False;    
  END_IF;
  
  (* myTime hochzählen *)
  IF myRun THEN
    myTIME := myTime + DINT_TO_TIME(OB1PreCycle);    
  END_IF;

  (* Start erkannt *)
  IF LS1 AND NOT LS1old THEN
    myTime := DINT_TO_TIME(0);
    myRun  := TRUE;
  END_IF;

  (* Ziel erkannt *)    
  IF LS2 AND NOT LS2old THEN
    myRun  := FALSE;
    speed  := DINT_TO_INT(3600000 / TIME_TO_DINT(myTime));
  END_IF;

  (* Zustände Speichern *)  
  LS1old := LS1;
  LS2old := LS2;

END_FUNCTION_BLOCK

Eventuell die Variable myRun Nach außen (Var_Output) führen falls das von Interesse ist.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Zotos
Ist nur ne Vermutung aber SCL gehört nicht unbedingt zur Standardausstattung der meisten S7 Programmierer.
Ich glaube daher kaum, das er da was mit anfangen kann.

@Hechel
wenn du mit der S7 bis jetzt noch gar nichts anfangen kannst, dann arbeite doch ersteinmal die Siemens Ausbildungsunterlagen durch. Zumindest die Grundlagen.
Noch ne Frage: sind 20 km/h die höchste Geschwindigkeit die du messen willst?
 
Kann man dass denn irgendwie mal schnell umschreiben ? ^^ Denn ich würde es gerne mal testen, denn
genau sowas in die richtung habe ich gesucht, danke euch ;)
Nur eine bitte habe ich noch ^^
kann mir jemand die werte dort einsetzen ? Bzw. die Schaltung "funktionsfähig" machen ?
Hier mal die daten:
s=1m
t=?
v=? (Wenn 20km/h überschritten werden, sollen für 2 sec. magnete anziehen und wieder abfallen.)

Vielen Dank nochmal an euch, ihr seit klasse ;)

Greetz
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
SCL:
Code:
FUNCTION_BLOCK FB42
VAR_INPUT
  LS1         :BOOL;
  LS2         :BOOL;
  OB1PreCycle :INT;
END_VAR

VAR_OUTPUT
  Speed       :DINT; (* m/h *)
  Break       :BOOL;
END_VAR

VAR
  LS1old      :BOOL;
  LS2old      :BOOL;
  myTime      :TIME;
  myRun       :BOOL;
  myTON       :TON;
END_VAR

  (* Time Out wenn das Objekt nie LS2 erreicht hat. *)
  IF TIME_TO_DINT(myTime) > 20000 THEN 
    myRun := False;    
  END_IF;
  
  (* myTime hochzählen *)
  IF myRun THEN
    myTIME := myTime + DINT_TO_TIME(OB1PreCycle);    
  END_IF;

  (* Start erkannt *)
  IF LS1 AND NOT LS1old THEN
    myTime := t#0s;
    myRun  := TRUE;
    Speed  := 0;    
  END_IF;

  (* Ziel erkannt *)    
  IF LS2 AND NOT LS2old THEN
    myRun  := FALSE;
    Speed  := 3600000 / TIME_TO_DINT(myTime);    
  END_IF;

  myTON(IN:=(Speed > 20000), PT:=t#2s);
  Break := (NOT myTON.Q) AND (Speed > 20000);
      
  
  (* Zustände Speichern *)  
  LS1old := LS1;
  LS2old := LS2;

END_FUNCTION_BLOCK
generiertes AWL (Schnittstellen wie bei SCL bauen):
Code:
      SET   
      SAVE  
      =     L      0.1
      L     #myTime
      L     L#20000
      >D    
      SPBN  A7d0
      CLR   
      =     #myRun
A7d0: CLR   
      U     #myRun
      SPBN  A7d1
      L     #OB1PreCycle
      ITD   
      L     #myTime
      +D    
      T     #myTime
A7d1: CLR   
      U     #LS1old
      NOT   
      U     #LS1
      SPBN  A7d2
      L     T#0MS
      T     #myTime
      SET   
      =     #myRun
      L     L#0
      T     #Speed
A7d2: CLR   
      U     #LS2old
      NOT   
      U     #LS2
      SPBN  A7d3
      CLR   
      =     #myRun
      L     #myTime
      L     L#3600000
      TAK   
      /D    
      T     #Speed
A7d3: L     #Speed
      L     L#20000
      >D    
      =     #myTON.IN
      L     T#2S
      T     #myTON.PT
      +AR2  P#18.0
      UC    "TON"
      +AR2  P#8174.0
      U     #myTON.Q
      NOT   
      L     #Speed
      L     L#20000
      =     L      0.2
      >D    
      U     L      0.2
      =     #Break
      U     #LS1
      =     #LS1old
      U     #LS2
      =     #LS2old
      U     L      0.1
      SAVE  
      BE
 
Zuletzt bearbeitet:
danke euch vielmals.
kann ich jetzt den AWL-Code ohne weiteres in die SPS laden ?
Wofür stehen dort die Parameter ?

Greetz
 
Ok dann halt wieder das Projekt. Aber ich wünsche mir mehr Eigeninitiative von einem Fragesteller!
 

Anhänge

  • Speed.zip
    400,2 KB · Aufrufe: 7
besten dank. ich kann leider net mehr eigeninitiative bringen, da ich mich mit der materie kaum auskenne.
Danke euch aber trotzdem, ich melde mich nochmal.

lG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage an Zotos,

hast du das mit Codesys programmiert?

die programmiersprache gefällt mir ;-) hab nur S7 FUP,AWL und Graph gelernt aber dein Programm sieht eigentlich einfacher aus als wenn ich das mit awl....

Gruß Patrick
 
Bei der S7 nennt sich das SCL und ist in großen Teilen mit ST aus der IEC61131-3 Kompatibel.
Kannst ja mal schauen ob das bei Dir auch installiert ist (bei Step7 Professional ist es dabei).
 
Zurück
Oben