Step 7 Schrankensteuerung

Frank2728

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

ich muss eine Schrankensteuerung für ein Parkhaus programmieren:

Getrennte Ein- und Ausfahrt, vor- und hinter einer Schranke je eine Induktionsschleife (Abstand ist so, daß ein Auto beim Drüberfahren für eine kurze Zeit beide aktiviert). Die Schranken haben oben und unten einen Öffner als Endschalter, und je zwei Motoren für öffnen und schließen.

Es soll eine Anzeige geben für die Zahl der freien Parkplätze und eine Ampel, die rot wird wenn kein Platz mehr frei ist. Die Schranke an der Einfahrt soll nur aufgehen, wenn noch Platz ist.

Ich hab es soweit fertig, bei der Simulation läuft es auch. Ich bin mir nur nicht sicher, ob das alles so ist, wie Professoren das üblicherweise haben wollen ;). Wo ich besonders Bedenken habe:

- Der Zähler mit den Sprüngen drin, passt das so (auch für den Fall, daß der "rückwärts" und "vorwärts"-Befehl gleichzeitig kommt)?

- Die FB3 und FB4 haben keine STAT-Variablen, es hätte also auch ein FC gereicht - ist das problematisch, wenn man es lässt? (Oder gibt es die Möglichkeit, nachträglich einen FB in einen FC umzuwandeln, ohne daß man alles abtippen muss?)

Ich setzt hier mal den OB1 und den Zähler hin, wäre schön, wenn da jemand mal einen Blick drauf werfen kann:



Code:
 CALL  "Einfahrt" , DB1
       Schleife1:="Se1"
       Schleife2:="Se2"
       Auto_rein:=#rein

      CALL  "Ausfahrt" , DB2
       Schleife3:="Se3"
       Schleife4:="Se4"
       Auto_raus:=#raus

      CALL  "Zähler" , DB5
       rueckwaerts     :=#rein
       vorwaerts       :=#raus
       Zaehlerstand_out:=#Zaehlerstand
       Parkplatz_voll  :=#voll

      CALL  "Schranke Einfahrt" , DB3
       Parkplatz_voll:=#voll
       Schleife1     :="Se1"
       Schalter_oben :="So1"
       Schleife2     :="Se2"
       Schalter_unten:="Su1"
       schliessen    :="M1_zu"
       oeffnen       :="M1_auf"


      CALL  "Schranke Ausfahrt" , DB4
       Schleife3     :="Se3"
       Schalter_oben :="So2"
       Schleife4     :="Se4"
       Schalter_unten:="Su2"
       oeffnen       :="M2_auf"
       schliessen    :="M2_zu"


      U     #voll
      =     "H4"
      UN    #voll
      =     "H3"

      L     #Zaehlerstand
      T     "Anzeige"

Code:
      L     #Zaehlerstand
      U     #rueckwaerts
      SPB   M001
      U     #vorwaerts
      SPB   M002
      SPA   M003
M001: L     1
      -I    
      SPA   M003
M002: L     1
      +I    
      SPA   M003

M003: T     #Zaehlerstand_out
      T     #Zaehlerstand

      L     #Zaehlerstand
      L     0
      <=I   
      =     #Parkplatz_voll
Unbenannt.jpg
 
ich weiss zwar nicht "wie Professoren das üblicherweise haben wollen" .

Aber es fehlen jegliche Kommentare. Kommentare geben den Gedanken beim programmieren wieder.

Also nicht
AUF DB1 // DB 1 öffnen


Und, was genau ist "Se1" ?
Sicher ein Sensor, aber welcher genau?

SPB M001 hier kann man auch bessere "Kürzel" verwenden
-> SPB ZaeR // Zähler Rückwärts


- Der Zähler mit den Sprüngen drin, passt das so (auch für den Fall, daß der "rückwärts" und "vorwärts"-Befehl gleichzeitig kommt)?
mach es halt separat:
++1 wenn einer rein fährt
und
--1 wenn einer raus fährt



Schaltplan fehlt auch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Senator hat eigentlich schon alles geschrieben.
Kleine Anmerkung zu den Kommentaren.
Man kann durchaus Symbolnamen ein und abkürzen. Aber ein aussagekräftiger Symbolkommentar erspart auch schon sehr viel Codekommentierung und verringert Kommentierungsfehler bei CodeCopyandpaste.

Wenn man von FB zu FC oder von FC zu FB wechseln will, geht das am einfachsten wenn man eine Quelle draus macht die Kopf und Fusszeile entsprechend anpasst, den Adress und Datentyp in der Symboltabelle für den Baustein ebenfalls anpassen und wieder generieren.

Und dann halt zu testen alles austesten. Parkhaus komplett füllen. Zählstände mal überschreiben und schauen was passiert wenn da unmögliche Zahlen drin stehen (ggf vorher mal die Fehlerbehandlung überdenken) etc.
 
Danke erstmal. O.k., ein paar Kommentare werd ich dann noch dazuschreiben (stimmt, auf sowas legen die Profs ja meistens wert).

Die symbolischen Namen für die globalen Variablen sind in der Aufgabenstellung vorgegeben: Se1 - Se4: Schleifen in der Reihenfolge des Durchfahrens (Einfahrt vor und nach der Schranke, Ausfahrt vor und nach Schranke), Su: Schalter unten, So: Schalter oben (Nummer bezieht sich auf die Schranke, 1=Einfahrt, 2=Ausfahrt), M: Motor.

Also wenn es nicht gradezu "verboten" ist, dass ein FB keine STAT-Variable enthält, würde ich es so lassen.

Nur beim Zähler bin ich mir nicht so sicher. Was heißt "getrennt"? Also einen eigenen FB für vorwärts und Rückwärts? Aber der Stand muß ja auch dann transferiert werden, wenn keiner rein- oder rausfährt, damit die Anzeige funktioniert und von Anfang an den Startwert anzeigt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der Richtungsauswertung ist alles o.k., das ist das Gleiche geblieben wie im letzten Praktikum "Ampelsteuerung".
Beim Zähler hab ich jetzt noch einen Transfer zur Ausgangsvariablen eingefügt, damit der Startwert gleich angezeigt wird, auch wenn noch keiner reingefahren ist. Simulation läuft. Ich verstehe nur noch nicht ganz, wie es ist, falls beide Eingänge (vorwärts und rückwärts) zugleich gesetzt sind, ob das dann Probleme geben könnte. Hier mal der neue Zähler:

Code:
L     #Zaehlerstand
      T     #Zaehlerstand_out
      L     1
      UN    #rueckwaerts
      SPB   M001
      -I    
      SPA   M002

M001: UN    #vorwaerts
      SPB   M003
      +I    

M002: T     #Zaehlerstand_out
      T     #Zaehlerstand

M003: L     #Zaehlerstand
      L     0
      <=I   
      =     #Parkplatz_voll
Wenn "rueckwaerts" gesetzt ist, wird die Abfrage auf "vorwaerts" ja übersprungen und gar nicht erreicht. Oder reicht es aus, wenn das im nächsten Zyklus passiert?
 
Darum trennt man das.
Man prüft das Bit vorwärts und zählt gegebenenfalls eins hoch. Danach prüft man das Bit rückwärts und zählt gegebenenfalls eins zurück.
Wenn beide Bit gleichzeitig kommen (unwahrscheinlich das es ja Flanken sein müssen aber möglich) dann wird im gleichen Zyklus 1 addiert und gleich wieder 1 subtrahiert.
 
In der Schulung ist halt alles sehr theoretisch.
Da hat man in der Regel keine Autofahrer, die sich im Schrankenbereich plötzlich alles anders überlegen und z.B. entgegengesetzt der eigentlich vorgesehenen Fahrtrichtung den Schrankenbereich verlassen.
In der Praxis muss man sich dann plötzlich damit rumschlagen.
 
Zurück
Oben