Step 7 AWL in KOP - Fehlersuche - Regeln lernen

tommylik

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

Ich habe folgenden AWL Schnipsel der Fehlerhaft ist da ich ihn nicht auf KOP oder FUP
umstellen kann. Ich habe schon einige Versuche gemacht die Klammern um zustellen.
Aber dann kommt bestimmt eine andere Funktion heraus.

Code:
      U(    
      UN    "+30BA01-B16TK"
      UN    "+30BA01-B31TK"
      O     
      U(    
      U     "+30BA01-B13TK"
      U     "+30BA01-B14TK"
      O(    
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_R
      U     "A_DB2002_BehData".x30BA01o.DONE
      )     
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R
      )     
      U     "+30BA01-B16TK"
      O     
      U(    
      U     "+30BA01-B29TK"
      U     "+30BA01-B30TK"
      O(    
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_V
      U     "A_DB2002_BehData".x30BA01u.DONE
      )     
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R
      )     
      U     "+30BA01-B31TK"
      )     
      U     "A_DB1221_TYP_DATA_SG01".x30R01.ANLAGENDATEN.Fach_leer
      U     "30R01_Aktu_Sequ_VL
      =     "Kein_BA"

Ich habe leider auch nur mit KOP zu tun gehabt und daher fällt es mir
schwer den Fehler zu finden. Außerdem weiß niemand was sich
der Programmierer gedacht hatte als er dies programmierte.

Könnte mir einer von Euch anhand dieses Schnippsels erklären wie
ich den Fehler finde.
Gibt es Klammerregeln die ich abarbeiten könnte, woran ich sofort erkennen
kann das es nicht so geschrieben wurde damit man auf KOP umstellen kann.

Gibt es vielleicht ein Tool das mir die helfen könnte oder ein gutes Buch.

Ich wäre Euch sehr Dankbar, da ich mich damit besser auskennen möchte.

Vielen Dank im voraus.

Tommylik
 
Jaja, diese "O("-Klammern und sonstige Angstklammern von AWL-Spezies ;)
Zum Umformen braucht man reichlich Erfahrung - schau Dir öfters mal an wie komplexe KOP-Netzwerke in AWL aussehen. Ein Tool gibt es m.W. nicht.

Ich meine, der für KOP/FUP-Darstellung korrekte Code ist so (die Leerzeilen sind nur zur besseren Verständlichkeit):
Code:
      U(

      UN    "+30BA01-B16TK"
      UN    "+30BA01-B31TK"

      O

      U(
      U     "+30BA01-B13TK"
      U     "+30BA01-B14TK"
      O
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_R
      U     "A_DB2002_BehData".x30BA01o.DONE
      )
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R
      U     "+30BA01-B16TK"

      O

      U(
      U     "+30BA01-B29TK"
      U     "+30BA01-B30TK"
      O
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_V
      U     "A_DB2002_BehData".x30BA01u.DONE
      )
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
      UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R
      U     "+30BA01-B31TK"

      )
      U     "A_DB1221_TYP_DATA_SG01".x30R01.ANLAGENDATEN.Fach_leer
      U     "30R01_Aktu_Sequ_VL
      =     "Kein_BA"

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier die Erklärung, wie ich auf die KOP-Lösung gekommen bin.

Ein AWL-Programm wird von oben nach unten abgearbeitet. Für die KOP-Lösung kann man den AWL-Code einfach nochmal in KOP von oben nach unten zusammenklicken, muß dabei aber bei schließenden Klammern aufpassen, wo der VKE-Strompfad geschlossen wird.

Bei Deinem speziellen Code kann ich den AWL-Code auch analysieren, um die falschen Klammern zu finden:
1.) von außen nach innen U-Sequenzen und U( entfernen (nicht relevante Anweisungen entfernen)
2.) O-Blöcke separieren (innerhalb der O-Blöcke müssen gleich viele öffnende und schließende Klammern sein)
3.) innerhalb der O-Blöcke ggf. wieder ab 1.)

Mit Einrückungen und Leerzeilen zur Strukturierung komme ich auf diese Ansicht:
Code:
[COLOR="#0000FF"]U([/COLOR]    
  UN    "+30BA01-B16TK"
  UN    "+30BA01-B31TK"

 O     

  U(    
[COLOR="#FF0000"]    U     "+30BA01-B13TK"
    U     "+30BA01-B14TK"
    O(    
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_R
      U     "A_DB2002_BehData".x30BA01o.DONE
    )     
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R[/COLOR]
  )     
  U     "+30BA01-B16TK"

 O     

  U(    
[COLOR="#FF0000"]    U     "+30BA01-B29TK"
    U     "+30BA01-B30TK"
    O(    
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_V
      U     "A_DB2002_BehData".x30BA01u.DONE
    )     
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R[/COLOR]
  )     
  U     "+30BA01-B31TK"
[COLOR="#0000FF"])     
U     "A_DB1221_TYP_DATA_SG01".x30R01.ANLAGENDATEN.Fach_leer
U     "30R01_Aktu_Sequ_VL"[/COLOR]
=     "Kein_BA"

Man sieht, daß die rot markierten Codeteile falsch geklammert sind (typische falsche "O("-Klammer), z.B.:
Code:
    U     "+30BA01-B29TK"
    U     "+30BA01-B30TK"
    O(    
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_V
      U     "A_DB2002_BehData".x30BA01u.DONE
    )     
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R

muß für KOP/FUP so formuliert werden:

    U(
      U     "+30BA01-B29TK"
      U     "+30BA01-B30TK"
     O    
      U     "S_DB0060_STG-DATEN_1".Nr[3005].ENDL_V
      U     "A_DB2002_BehData".x30BA01u.DONE
    )     
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_V
    UN    "S_DB0062_STG_SK_Signale".Nr_3005_SK_R
Die "U("-"Angst"klammer eine Ebene höher ist überflüssig (sie wird bei umschalten nach KOP-Ansicht und speichern automatisch entfernt).

Um zu prüfen ob die korrigierte Version genauso funktioniert wie die originale Version, kürze ich den Code etwas und brauche dadurch nur 8 Fälle zu testen:
Code:
// Code vorher:
//    U     #A
//    U     #B
//    O(
//      U     #C
//      U     #D
//    )
//    UN    #E
//    UN    #F

//Code gekürzt:
      U     #AB                 // #AB = #A UND #B
      O(
      U     #CD                 // #CD = #C UND #D
      )
      U     #EF                 // #EF = NOT(#E) UND NOT(#F)
      =     #Ergebnis_Org

//Korrigierter Code:
      U(
      O     #AB
      O     #CD
      )
      U     #EF
      =     #Ergebnis_Neu

//Vergleich:
      X     #Ergebnis_Org
      X     #Ergebnis_Neu
      =     #KorrekturFehler    // 1 wenn #Ergebnis_Org <> #Ergebnis_Neu

Harald
 
Hallo Harald,

entschuldige bitte die verspätete Antwort ich war noch mit meiner Familie im Urlaub.

Vielen Dank für deine Antwort. Deine Erklärung hat mir sehr geholfen.
Deine Übersetzung ist richtig da die Anlage genauso wie vorher läuft.

An Hand deiner Beispiele und Tips werde mal sehen was ich jetzt alleine hinbekomme.

Vielen Dank nochmal für deine Hilfe.

Mfg Tommylik
 
Zurück
Oben