Ob100 Frage / Thema Ampelsteurung

PrinzZ

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

ich muss momentan eine Ampelsteuerung programmieren mit einer CPU313.

Alles soweit ok, jetzt habe ich eine Frage:

Ich habe gelesen, der der OB100 ein OB ist, der beim Start ausgeführt wird.

Nun möchte ich, dass ich dieser bestimmte Schritte setzt.

Wie schreibe ich das in meinen OB rein?

So sieht mein Code aus im FB2, im AmplLightCtrl:

Code:
NW1 (Endzustand Ampel = Rot)
   U     #TI_TimeYlw.Q
      =     L      6.0
      U     L      6.0
      BLD   102
      R     #SR_set_yew
      U     L      6.0
      BLD   102
      R     #OI_AmplYlw
      U     L      6.0
      S     #SR_set_red
      NOP   0
      U     #SR_set_red
      S     #OI_AmplRed
      S     #OI_AmplIsRed
 
NW2 (Schaltzustand von Rot auf Rot/Gelb)
 U     #IC_RqstGrn
      UN    #IC_RqstBlnkYlw
      UN    #IC_RqstAmplOff
      U     #SR_set_red
      =     L      6.0
      U     L      6.0
      BLD   102
      R     #SR_set_red
      U     L      6.0
      S     #SR_set_redyew
      NOP   0
      U     #SR_set_redyew
      =     L      6.1
      U     L      6.1
      BLD   102
      R     #OI_AmplIsRed
      U     L      6.1
      BLD   102
      S     #OI_AmplYlw
      U     L      6.1
      =     L      6.2
      BLD   103
      CALL  #TI_TimeRedYlw
       IN:=L6.2
       PT:=T#3S
       Q :=
       ET:=#TimeRedYlwOut
      NOP   0
 
NW3(Schaltzustand von Rot/Gelb auf Grün)
  U     #SR_set_redyew
      U     #TI_TimeRedYlw.Q
      =     L      6.0
      U     L      6.0
      BLD   102
      R     #SR_set_redyew
      U     L      6.0
      S     #SR_set_grn
      NOP   0
      U     #SR_set_grn
      R     #OI_AmplRed
      R     #OI_AmplYlw
      S     #OI_AmplGrn
      S     #OI_AmplIsGrn
 
NW4 (Schaltzustand von Grün auf Gelb)
 U     #IC_RqstRed
      UN    #IC_RqstAmplOff
      UN    #IC_RqstBlnkYlw
      U     #SR_set_grn
      =     L      6.0
      U     L      6.0
      BLD   102
      R     #SR_set_grn
      U     L      6.0
      S     #SR_set_yew
      NOP   0
      U     #SR_set_yew
      =     L      6.1
      U     L      6.1
      BLD   102
      R     #OI_AmplIsGrn
      U     L      6.1
      BLD   102
      R     #OI_AmplGrn
      U     L      6.1
      BLD   102
      S     #OI_AmplYlw
      U     L      6.1
      =     L      6.2
      BLD   103
      CALL  #TI_TimeYlw
       IN:=L6.2
       PT:=T#3S
       Q :=
       ET:=
      NOP   0

Ich hoffe ihr könnt mir helfen.

Gruß Falk
 
IM OB100 würde ich bestimmte Merker/ DBX setzen und die dann in meinem Programm verarbeiten.

z.B Beim Anlauf muss die Ampel komplett, also alle Seiten zunächst gelb blinken oder rot anzeigen.
Diesen Merker würde ich im OB100 setzen und im Programm rücksetzen.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      UN    "DB_AmplLightCtrl".SR_set_red
      S     "DB_AmplLightCtrl".SR_set_red
      U     "DB_AmplLightCtrl".SR_set_redyew
      R     "DB_AmplLightCtrl".SR_set_redyew
      U     "DB_AmplLightCtrl".SR_set_grn
      R     "DB_AmplLightCtrl".SR_set_grn

So sieht es momentan aus, jedoch setzt er diese Schritte nicht.
 
Code:
      UN    "DB_AmplLightCtrl".SR_set_red
      S     "DB_AmplLightCtrl".SR_set_red
      U     "DB_AmplLightCtrl".SR_set_redyew
      R     "DB_AmplLightCtrl".SR_set_redyew
      U     "DB_AmplLightCtrl".SR_set_grn
      R     "DB_AmplLightCtrl".SR_set_grn
So sieht es momentan aus, jedoch setzt er diese Schritte nicht.

Du musst aufpassen, dass beim Wiederanlauf diese Merker nicht im ersten Zyklus überschrieben werden.
Daher würde ich im OB andere Merker verwenden und die erst nach dem ersten OB1 Durchlauf zurücksetzen.


bike
 
Code:
So sieht es momentan aus, jedoch setzt er diese Schritte nicht.[/QUOTE]

Hast du schonmal versucht die Schritte über Firstrun im OB1 auszulösen?

[CODE]      
L     #OB1_SCAN_1                 // Abfrage Erstdurchlauf OB1
L     B#16#3
<>I   
=     #INIT

Damit könntest du sicherstellen dass die gesetzten Werte nicht durch das Programm so schnell überschrieben werden bevor du es überhaupt siehst.
Am schluss der Kette würde ich einen Zähler incrementieren, dann siehst du dass ausgeführt wurde.
 
Das sehe ich auch so, wie Bike.
Der ganze kram hat nach meiner Meinung im OB100 gar nichts zu suchen - nur den angesprochenen Anlauf- (oder Init-)Merker setzen und das dann im zyklischen Programm auswerten - z.B. eine Schrittkette setzen oder oder oder ...
 
Zurück
Oben