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
 
  |