Günther Harm - Homepage

 

Anlage zu Aufgabe 2: Ablauf.FEH

     

 

PROGRAMM Ablauf-Steuerung

 

TYPE Steuerungsdatentyp = RECORD

                                                      Sensorstellung,

                                                      Aktorstellung    : ARRAY [0..3] OF BYTE

                                                      Sensorzahl,

                                                      Aktorzahl,

                                                      Maske,

                                                      Sensorlogik,

                                                      Aktorlogik,

                                                      Schrittzahl        : BYTE

                                                  END

        String14 = STRING [14]

        String40 = STRING [40]

        String75 = STRING [75]

VAR Steuerungsdaten : Steuerungsdatentyp

      Zykluszahl          : BYTE

      Antwort                : CHAR

 

PROCEDURE Claerkeybuffer

VAR Dummy : CHAR

BEGIN

  WHILE KEYPRESSED DO

      Dummy := READKEY

END

 

PROCEDURE dellines (von, bis : BYTE)

VAR I : BYTE

BEGIN

  FOR I := von TO bis DO

      BEGIN

          GOTOXY (1, I)

          CLREOL

      END

END

 

PROCEDURE color (tc, bc : WORD)

BEGIN

  Textcolor(tc)

  Textbackground (bc)

END

 

PROCEDURE Ueberschrift (Titel : STRING75)

VAR I,

      Rand : BYTE

BEGIN

  CLRSCR

  Rand := (80 - LENGTH (Titel)) DIV 2

  GOTOXY (Rand, 2)

  WRITE (Titel)

  GOTOXY (Rand, 3)

  FOR I := 1 TO LENGTH (Titel) DO

      WRITE ('*')

  GOTOXY (1, 5)

END

 

PROCEDURE Dateinamen_lesen (      Zeile    : BYTE

                                                              Ausgabe : String40

                                                      VAR Name      : String14)

VAR ch : CHAR

BEGIN

  Name := ''

  ch := #0

  GOTOXY (1, Zeile)

  WRITE (Ausgabe)

  WHILE ch < > #13 DO

      BEGIN

          ch := UPCASE (READKEY)

          IF ch < > #13 THEN

              BEGIN

                  WRITE (ch)

                  Name := Name + ch

              END

      END

  Name := 'A:'+ Name + '.DAT'

END

 

PROCEDURE Benutzerhinweise

BEGIN

  Ueberschrift ('Benutzerhinweise)

  !!!!Hinweis für die Bearbeitung: Geben Sie für die Benutzung dieses

                                                                    Programms die folgenden Hinweise!!!!

  Art der Steuerung (sequentiell/kombinatorisch)

 

  Maximalzahl der Aktoren

 

  Maximalzahl der Sensoren

 

  Anschluß der Aktoren an Port?? bis Port?? (Name/Nummer)

 

  Anschluß der Sensoren an Port?? bis Port?? (Name/Nummer)

 

  Anschluß eines Notaus-Sensors an Port?7

 

  Erklä rung der Bedeutung von Schrittzahl

                                                          Zykluszahl

                                                          Logikanpassung für Sensorik und Aktorik

 

  REPEAT UNTIL KEPRESSED

 

PROCEDURE Zykluszahl_lesen (VAR Zykluszahl : BYTE)

BEGIN

  GOTOXY (1, 6)

  WRITE ('Bitte geben Sie die Anzahl der Steuerungsdurchlä ufe ein: ')

  READ (Zykluszahl)

  GOTOXY (1, 7)

END

 

PROCEDURE speichern

VAR  f          : FILE OF Steuerungsdatentyp

        Name    : String14

        Wy        : BYTE

        Fehler : INTEGER

BEGIN

  Wy := WHEREY + 1

  Dateinamen_lesen (Wy, 'Bitte geben Sie den Dateinamen ein: ', Name)

  ASSIGN (f, Name)

  {$I-}

  REWRITE (f)

  {$I+}

  Fehler := IORESULT

  IF Fehler < > 0 THEN

      BEGIN

          Clearkeybuffer

          WRITELN

          WRITE ('Fehler Nr. ',Fehler,' aufgetreten! Weiter: Taste!')

          REPEAT UNTIL KEYPRESSED

          EXIT

      END

  WRITE (f, Steuerungsdaten)

  CLOSE (f)

END

 

PROCEDURE  laden

VAR  f          : FILE OF Steuerungsdatentyp

        Name    : String14

        Wy        : BYTE

        Fehler : INTEGER

BEGIN

  Wy := WHEREY + 1

  Dateinamen_lesen (Wy, 'Bitte geben Sie den Dateinamen ein: ', Name)

  ASSIGN (f,Name)

  {$I-}

  RESET (f)

  {$I+}

  Fehler := IORESULT

  IF Fehler < > 0 THEN

      BEGIN

          Clearkeybuffer

          WRITELN

          WRITE ('Fehler Nr. ',Fehler,' aufgetreten! Weiter: Taste!')

          REPEAT UNTIL KEYPRESSED

          EXIT

      END

  READ (f, Steuerungsdaten)

  CLOSE (f)

END

 

 

PROCEDURE Tabelleneingabe

VAR Antwort  : CHAR

      Eingabe,

      I              : BYTE

BEGIN

  color (white, black)

  Ueberschrift ('Sequentielle Steuerung')

  WITH Steuerungsdaten DO

      BEGIN

          GOTOXY (1,4)

          WRITE ('BITTE EINGEBEN:')

          GOTOXY (1,6)

          WRITE ('Für Aktorlogik : High-aktiv        Eingabe: 00 ')

          GOTOXY (1,8)

          WRITE ('Für Aktorlogik : Low-aktiv          Eingabe: $FF ')

          GOTOXY (50,7)

          WRITE ('> > > > ')

          READ (Aktorlogik)

          GOTOXY (1,9)

          WRITE ('^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^ø^')

          GOTOXY (1,10)

          WRITE ('Für Sensorlogik : High-aktiv      Eingabe: 00 ')

          GOTOXY (1,12)

          WRITE ('Für Sensorlogik : Low-aktiv        Eingabe: $FF ')

          GOTOXY (50,11)

          WRITE ('> > > > ')

          READ (Sensorlogik)

          GOTOXY (1,13)

          WRITE ('Anzahl der Aktoren : ')

          READLN (Eingabe)

          Sensorzahl :=  2 * Eingabe

          Maske := 1

          FOR I := 1 TO Sensorzahl DO

              Maske := Maske * 2

          Maske :=  Maske - 1

          WRITE ('Anzahl der Arbeitsschritte: ')

          READLN (Schrittzahl)

          WRITELN ('------------------------')

          For I := 0 to Schrittzahl - 1 DO

              BEGIN

                  WRITE ('Aktorwert [',I,'] : ')

                  READLN (Aktorstellung [I])

                  WRITE ('Sensorwert [',I,'] : ')

                  READLN (Sensorstellung[I])

              END

  END

  Clearkeybuffer

  WRITE ('Sollen die Daten gespeichert werden? (J/N) ')

  Antwort := UPCASE (READKEY)

  IF Antwort = 'J' THEN

      speichern

  ELSE

      dellines (8, 10)

 

 

PROCEDURE Verarbeitung

VAR Schritt,

      Sensoren : BYTE

      Sensorwert,

      Stoppwert,

      Aktorwert                  : BYTE

BEGIN

  WITH Steuerungsdaten DO

    BEGIN

          FOR Z := 1 TO ?????? DO

              BEGIN

                  FOR  ???? := 0 TO Schrittzahl - 1 DO

                      BEGIN

                          PORT [$300] := Aktorstellung [Schritt] XOR Aktorlogik

                          REPEAT

                              Sensorwert := (PORT [$300] XOR Sensorlogik) AND Maske

                              Stoppwert :=  (PORT [$300] XOR Sensorlogik) AND $??

                              IF Stoppwert = 128 THEN

                                  BEGIN

                                      WRITELN

                                      WRITELN ('Steuerungsabbruch durch Notschalter!')

                                      EXIT

                                  END

                          UNTIL(Sensorwert = Sensorstellung [Schritt]) OR KEYPRESSED

                      END

              END

    END

END

 

BEGIN  {Hauptprogramm}

  color (white, black)

  Benutzerhinweise

  Ueberschrift ('Sequentielle Steuerung')

  Zykluszahl_lesen

  WRITE ('Wollen Sie Steuerungsdaten von der Diskette laden? (J/N)')

  Antwort := UPCASE (READKEY)

  IF Antwort = 'j' THEN

      laden

  ELSE

      Tabelleneingabe

  Verarbeitung

END

 

 

Zurück zur Startseite