einfache Frage zu AWL

iLink

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

da ich bisher hauptsächlich FUP und ST (CoDeSys) programmiert habe, bin ich mir jetzt gerade etwas unsicher, was AWL (S7) betrifft. Für das Projekt muss es aber AWL sein. :(

Es geht um eine ganz einfache Mittelwertbildung zweier Analogwerte (Niveau Wasserstand zweier Behälter), der nur dann gebildet werden darf, wenn der keiner der beiden den Status Revision hat. Sonst muss der Wasserstand des jeweils nicht auf Revision stehenden Behälters direkt in den Mittelwert kopiert werden.

Ich dachte jetzt, dass das einfach so zu lösen ist:
Code:
      U     "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      U     "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      L     "DB Analogwerte".rTest.rIW_WK1
      L     "DB Analogwerte".rTest.rIW_WK2
      +R    
      L     2.000000e+000
      /R    
      T     "DB Analogwerte".rTest.rIW_WK12

      UN    "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      U     "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      L     "DB Analogwerte".rTest.rIW_WK2
      T     "DB Analogwerte".rTest.rIW_WK12

      U     "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      UN    "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      L     "DB Analogwerte".rTest.rIW_WK1
      T     "DB Analogwerte".rTest.rIW_WK12

Darf ich den 2. und 3. Block für die Revisionsfälle mit in dem Netzwerk haben, oder müssen die jeweils in ein separates Netzwerk?

Wenn ich den ersten Block in FUP programmiere und in AWL konvertiere, erhalte ich zusätzlich Klammern und Sprungmarken. Sind die alle notwendig?
Code:
      U(    
      U     "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      U     "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      SPBNB _001
      L     "DB Analogwerte".rTest.rIW_WK1
      L     "DB Analogwerte".rTest.rIW_WK2
      +R    
      T     #rHM_WK1_plus_WK2
      UN    OV
      SAVE  
      CLR   
_001: U     BIE
      )     
      SPBNB _002
      L     #rHM_WK1_plus_WK2
      L     2.000000e+000
      /R    
      T     "DB Analogwerte".rTest.rIW_WK12
_002: NOP   0

Sind vielleicht dumme Fragen, aber wie gesagt mir fehlt die AWL-Erfahrung :D
 
Hi,
Lade- und Transferbefehle sind nicht vom VKE abhängig.
Daher muss man ggf überspringen wenn man nicht alle Befehle durchführen möchte.
Wenn man es selber in AWL programmiert und nicht von FUP nach AWL konvertiert,
dann sieht es aber längst nicht so schlimm aus.
Jetzt sind bei dir die notwendigen Befehle für die "Bildbausteine" FUP mit drin,
die man sich teilweise sparen kann wenn man direkt in AWL programmiert und nicht auf FUP konvertieren können möchte.

Gruß
Toki
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Toki0604 hat recht und du siehst ja selbst das die Umschaltung aus FUP nach AWL Sprunganweisungen eingefügt hat (im Vergleich zu deinem selbsterstellten AWL-Code), prinzipiell kannst du alles in einem NW machen. Die einfache Logik sieht doch so aus:
Code:
Mod1: 
U Bedingung 1 
U Bedingung 2
SPBN Mod2

 L Dies
 T nach Das
 SPA Ende

Mod2: 
U Bedingung 1
Un Bedingung 2
SPBN Modx

L Jenes
T nach Das
SPA Ende

Modx: ....
Ende: NOP 0
 
Zuletzt bearbeitet:
Vielen Dank. Das waren wichtige Infos. Also brauch ich die Sprungbefehle / Marken. Kann aber aber auf die umständliche Verschachtelung von FUP verzichten.
 
Ganz schick sieht es so aus:

Code:
      L     "DB Analogwerte".rTest.rIW_WK1
      L     "DB Analogwerte".rTest.rIW_WK2
      +R
      L     2.000000e+000
      /R
      U     "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      U     "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      SPB   AVER
      L     "DB Analogwerte".rTest.rIW_WK2
      UN    "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      U     "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      SPB   AVER
      L     "DB Analogwerte".rTest.rIW_WK1
      U     "DB Meldungen".bTest.bSTAT_WK1_Betrieb
      UN    "DB Meldungen".bTest.bSTAT_WK2_Betrieb
      SPB   AVER
      L     0.0000e+000
AVER: T     "DB Analogwerte".rTest.rIW_WK12

Du lädst schon mal die Berechnung in den Akku1 und wenn die Bedingung stimmt, springst Du zu der Zeile, wo das Ergebnis aus dem Akku1 geholt wird. Das L 0.0 mache ich immer, um unerwartete Bedingungen abzufangen und einen definierten Wert zu schreiben. Ist bei diesem Beispiel z.B. möglich, wenn beide Behälter im Status Revision stehen. Das ist sozusagen ein Default-Wert.
 
Zurück
Oben