Step 7 Zeitversetztes Öffnen von Ventilen

Zuviel Werbung?
-> Hier kostenlos registrieren
Doch, hier brauche ich es, weil ich das Ventil auch noch zusätzlich manuell steuern will.

Code:
      o     db210.dbx    0.1             [B]*** das ist käse, gehört natürlich weg ***[/B]
 
Zuletzt bearbeitet:
Achtung: Da werden Timer mehrmals abgefragt - der Timerzustand kann sich zwischen den Abfragen ändern!
Wenn Timerzustände mehrmals verwendet werden sollen, dann muß ein "Prozessabbild" des Timers gebildet werden, d.h. den Timerzustand auf einen Merker kopieren und danach nur den Merker verwenden.

Harald

Danke für deinen Hinweis. Und ich dachte, ich wäre endlich fertig?!

Aber es geht doch ohne, oder?
 
Kleiner als 10ms geht bei den Hardwaretimern in den 300-er ohnehin nicht.
Das ist dann auch die kleinste Einheit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man das bei den 300er über "Umwege" lösen?
Ich würde es nicht als Umweg bezeichnen:
@linuxluder,

das Verwenden von Merkern und auch der S5-Timer ist nicht mehr wirklich zeitgemäß. Bei der S7-1200 gibt es z.B. letztere schon nicht mehr.

Du solltest den Baustein mal als gekapselten FB (warum FB und nicht FC?) erstellen.
Dabei musst Du dann auch überlegen, welche Merker durch statische Variablen ersetzt werden müssen, welche auch temporär sein können, wie man die IEC-Timer als Multiinstanz einfügt und wie Du Zeitvorgaben sowie Ein-/Ausgänge über die Bausteinschnittstelle übergibst.
Insgesamt ein wirklich schönes Übungsprojekt.
:cool:
 
@linuxluder,

das Verwenden von Merkern und auch der S5-Timer ist nicht mehr wirklich zeitgemäß. Bei der S7-1200 gibt es z.B. letztere schon nicht mehr.

Du solltest den Baustein mal als gekapselten FB (warum FB und nicht FC?) erstellen.
Dabei musst Du dann auch überlegen, welche Merker durch statische Variablen ersetzt werden müssen, welche auch temporär sein können, wie man die IEC-Timer als Multiinstanz einfügt und wie Du Zeitvorgaben sowie Ein-/Ausgänge über die Bausteinschnittstelle übergibst.
Insgesamt ein wirklich schönes Übungsprojekt.
Also das hier, komplett ohne "Einweisung" anzugehen, dafür fehlt mir im Moment die Zeit. Bitte versteht mich nicht falsch, ihr habt mir auch eure Zeit geschenkt, aber für meine Zwecke würde ich das mit Kanonen auf Spatzen schießen.

Was die Zykluszeit angeht:

zykluszeit.jpg

Ist das viel oder wenig? Ich kann das schlecht beurteilen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
3ms mittlere, das ist nicht so schlecht.
Das heißt aber auch, dass du, selbst wenn du in jedem Zyklus die Uhrzeit OB 1 ausliest und mit der Differenz zum letzten Zyklus arbeitest und nicht mit Timern, höchstens alle 6ms sichere Signalwechsel erzeugen kannst.
Und auch dann hast du immer eine Streuung von 3ms. Wenn du FC/FB hast, die du nur manchmal im Programm umspringst, kann die Zykluszeit auch schwanken, dann wird es noch unsicherer. Die 18ms für die längste Zykluszeit sind der sicherste Wert für eine Abschätzung, d.h. im schechtesten Fall kannst du über einen Timer alle 40ms einen Ausgang sicher ein- und auch wieder ausschalten.

Wenn du mit deinen Zeiten irgendwelche Ausgänge schaltest, bedeutet das schon jetzt, dass deine kleinste Zeiteinheit von 10ms auch mal 13ms sein kann, denn wenn die Zeit nun gerade am Zyklusanfang abläuft, dauert es 3ms, bis die SPS dies nach außen "rausgibt". Aber auch deine Aktoren haben in der Regel eine Zeit x, bis sie dann schalten. Die Frage stellt sich, was du eigentlich schalten willst, dass du es genauer als 10ms (bzw. 10ms-Differenz) benötigst?
 
Es geht um die Tropfenfotographie.
Das Magnetventil liefert in einem bestimmten Abstand zwei Tropfen die auf eine Wasseroberfläche fallen. Währen der eine Tropfen "zurückspringt", soll der andere auf ihn drauffallen. Gleichzeitig löst dann die Kamera mit Blitz aus -> Hochgeschwindigkeitaufnahme.
Die SPS ist dafür nicht perfekt und dafür habe ich sie ja nicht, aber ich dachte, ich versuchs mal so, statt mir ein "fertiges" Gerät für spezielle diese sog. Tropfen-auf-Tropfen-Bilder zu kaufen.
 
Also das hier, komplett ohne "Einweisung" anzugehen, dafür fehlt mir im Moment die Zeit. ..., aber für meine Zwecke würde ich das mit Kanonen auf Spatzen schießen.
Ist nicht so schlimm, wie es vielleicht klingt und sind ganz sicher keine Kanonen.

Wenn Du doch mal etwas Zeit über hast, kannst Du Dir die folgende Quelle in Deinem Projekt anlegen und einen freien FB mit dem Namen "Ventile" in der Symboltabelle anlegen.
Anschließend übersetzen, um die Quelle als Baustein einzufügen:
Code:
FUNCTION_BLOCK "Ventile"
TITLE =
VERSION : 0.1


VAR_INPUT
  Start : BOOL ;    
  Stop : BOOL ;    
END_VAR
VAR_OUTPUT
  V1 : BOOL ;    
  V2 : BOOL ;    
END_VAR
VAR
  Oeffnen1 : BOOL ;    
  Oeffnen2 : BOOL ;    
  Flankenmerker : BOOL ;    
  T71_Merker : BOOL ;    
  Oeffnen1_V1 : "TON";    
  Oeffnen2_V1 : "TON";    
  Schliessen_V1 : "TON";    
  Oeffnen2_V2 : "TON";    
  Schliessen_V2 : "TON";    
END_VAR
VAR_TEMP
  Umschalten : BOOL ;    
  V1_Offen : BOOL ;    
  V2_Starten : BOOL ;    
  V2_Offen : BOOL ;    
END_VAR

BEGIN
NETWORK
TITLE =

//      U     #Start                      // Ein-Schalter
//      UN    #Oeffnen2                   // nicht vor komplettem Durchlauf neu starten
//      S     #Oeffnen1                   // 1. Ein-Verzögerung starten

//      U     #Stop                       // Aus-Schalter
//      R     #Oeffnen1                   // 1. Öffnung ausschalten
//      R     #Oeffnen2                   // 2. Öffnung ausschalten

      U     #Start; // Ein-/Aus-Taster
      FP    #Flankenmerker; // Flankenmerker
      =     #Umschalten; // Flanke Taster

      U     #Umschalten; // bei Tastendruck (Flanke)
      X     #Oeffnen1; // 1. Öffnung invertieren
      UN    #Oeffnen2; // bei aktiver 2. Öffnung immer ausschalten
      =     #Oeffnen1; 

      U     #Umschalten; // bei Tastendruck immer
      R     #Oeffnen2; // 2. Öffnung abschalten


// Öffnung beenden / nächste Öffnung:

      U     #Schliessen_V1.Q; // V1 schliessen
      U     #Schliessen_V2.Q; // V2 schliessen
      U     #Oeffnen2; // 2. Öffnung
      R     #Oeffnen2; // 2. Öffnung rücksetzen

      U     #Schliessen_V1.Q; // V1 schliessen
      U     #Oeffnen1; // 1. Öffnung
      R     #Oeffnen1; // 1. Öffnung rücksetzen
      S     #Oeffnen2; // 2. Ein-Verzögerung starten


// Zeiten Öffnen
      CALL #Oeffnen1_V1 (
           IN                       := #Oeffnen1,
           PT                       := T#5S);

      CALL #Oeffnen2_V1 (
           IN                       := #Oeffnen2,
           PT                       := T#4S);

      U     #Oeffnen1_V1.Q; 
      O     #Oeffnen2; 
      =     #V2_Starten; 

      CALL #Oeffnen2_V2 (
           IN                       := #V2_Starten,
           PT                       := T#2S);

// Zeiten schliessn
      U     #Oeffnen1_V1.Q; 
      O     #Oeffnen2_V1.Q; 
      =     #V1_Offen; 

      CALL #Schliessen_V1 (
           IN                       := #V1_Offen,
           PT                       := T#2S);

      U     #Oeffnen2_V2.Q; 
      =     #V2_Offen; 

      CALL #Schliessen_V2 (
           IN                       := #V2_Offen,
           PT                       := T#8S);


// Ausgänge
      U     #V1_Offen; // V1 öffnen
      UN    #Schliessen_V1.Q; // V1 schliessen
      =     #V1; // V1

      U     #V2_Offen; // V2 öffnen
      UN    #Schliessen_V2.Q; // V2 schliessen
      =     #V2; // V2

END_FUNCTION_BLOCK
Deine Erweiterungen für's Panel habe ich da nicht mit drin.
Bei Deinen Fortschritten hier bin ich mir aber sicher, dass Du das ziemlich schnell selber hinbekommst.
 
In der SPS sollte möglichst nur das "Mini"-Zeitprogramm laufen. Dann hast du zum Test die minimale Zykluszeit.
Wenn man oft genug probiert, ist sicher irgendwann dann auch der genau richtige Zeitabstand "zufällig" dabei, um ein schönes Foto zu bekommen.
Kannst du das Foto dann mal hier einstellen? Von mir aus mit Wasserzeichen. :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Klar stelle ich hier ein Bild rein! Auf das freue ich mich ja schon die ganze Zeit. Nur habe ich bisher kein "vernünftiges" hinbekommen. Aber ich gebe nicht auf!

Und nochmal ein herzliches Dankeschön an alle, die mir hier auf die Sprünge helfen.
 
Leider noch kein TaT (Tropfen auf Tropfen), aber mal zu Verdeutlichung dieses Bild: Tropfen von unten trifft fast auf Tropfen von oben.

Wäre halt super, wenn man das ganze noch etwas präziser im ms-Bereich steuern könnte... :confused: So kann ich im Moment ganz schlecht beurteilen, woran es genau liegt, dass ich keinen TaT bekomme. Soll aber jetzt nicht zum Foto-Forum werden hier. ;)


tropfen_sps_forum.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, ich melde mich nochmal. Mit der SPS ging's, wie oben nachzulesen, wegen der zu langen Zykluszeiten nicht - leider.
Für ca. 30 € habe ich mir mit einem Arduino und ein paar Bauteilen eine Steuerung zusammengebastelt, mich in C/C++ und VB eingearbeitet e voilá, es klappt jetzt bestens. Durch die ms-genaue Ansteuerung kann man nun "in Serie" gehen. Für die Interessierten: unten seht man eine sog. Disc und einen eher klassischen TaT (Tropfen auf Tropfen). Ist einfach eine Frage der Einstellungen.

Dennoch nochmals herzlichen Dank an alle, die mir hier geholfen haben, allen voran hucki für seine geduldigen Anleitungen zum Coden!

Gruß aus Regensburg

Jo

tat_01.jpg


tatt_01.jpg
 
Zurück
Oben