Step 7 AWL etwas eingerostet und kleine Verständnisprobleme

vollmi

Level-3
Beiträge
5.776
Reaktionspunkte
1.709
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin gerade daran älteren AWL Code zu entschlüsseln um einen Fehler zu finden. Der befindet sich nicht hier, allerdings versuche ich trotzdem die Gedankengänge auch der nicht gerade betroffenen Codestellen zu verstehen.
Was machen hier die ersten drei Codezeilen. Normalerweise packe ich sowas ja ein O( oder U( ein. um eine neue Verknüpfung zu starten.
Da hier ein U #Telegramm1 folgt, gehe ich davon aus dass ==1 erfüllt sein muss und auch Telegramm1 True sein muss. Gehe ich da richtig in der Annahme?
Startet ==I eine neue Verknüpfung oder führt das eine offene Verknüpfung weiter?

Sehe ich das richtig dass das POP nur den Zweck hat, dass man das L PEB 336 nicht nochmal tippen muss um das Copy and Paste zu erleichtern?

Code:
      L     PEB  336
      L     1
      ==I   
      U     #Telegramm1
      SPBN  T21
      L     PEW  338
      T     "SGK I/O"._DBW_38_0
      L     PEW  340
      T     "SGK I/O"._DBW_40_0
      L     PEW  342
      T     "SGK I/O"._DBW_42_0
//..
      SPA   T22

T21:  POP   
      L     2
      ==I   
      U     #Telegramm2
      SPBN  T22
      L     PEW  338
      T     "SGK I/O"._DBW_58_0
      L     PEW  340
      T     "SGK I/O"._DBW_60_0
//..
T22:  NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke das hast du aber auch schon gemacht :D

This appears to be Siemens Step 7 PLC (Programmable Logic Controller) code written in Statement List (STL/AWL) format. Let me break down what this code is doing:


Main Structure:


  • The code handles two different telegram types based on a comparison value
  • It uses conditional jumps (SPBN) to route execution to different telegram handlers

Code Flow:


  1. Initial Setup:
    • L PEB 336 - Load input byte 336 into accumulator
    • L 1 - Load constant 1
    • ==I - Compare for equality (integer)
    • U #Telegramm1 - AND with local variable Telegramm1
    • SPBN T21 - Jump to T21 if result is FALSE (Skip if not Branch)
  2. Telegram Type 1 Handler:
    • Reads process input words (PEW) 338, 340, 342
    • Transfers them to data block words (DBW) in "SGK I/O" data block at offsets 38, 40, 42
    • Calls subroutine T22 with SPA T22
  3. T21 Label (Telegram Type 2):
    • POP - Remove top value from stack
    • Similar structure: compares with value 2
    • Routes to T22 if condition is false
    • Handles different data mapping (DBW offsets 58, 60, etc.)
  4. T22 Label:
    • NOP 0 - No operation (placeholder or end point)

Purpose:This code appears to be part of a communication handler that processes different telegram formats based on an identifier in PEB 336, mapping input data to specific locations in a data block called "SGK I/O". It's commonly used in industrial automation for handling different message types from field devices or communication protocols.
 
Da hier ein U #Telegramm1 folgt, gehe ich davon aus dass ==1 erfüllt sein muss und auch Telegramm1 True sein muss. Gehe ich da richtig in der Annahme?
Startet ==I eine neue Verknüpfung oder führt das eine offene Verknüpfung weiter?
startet neue Verknüpfung (weil: setzt /ER = 1 und übernimmt Vergleichsergebnis direkt in VKE)
U( oder O( braucht man, wenn der Vergleich eine bestehende Verknüpfung fortführen soll

Sehe ich das richtig dass das POP nur den Zweck hat, dass man das L PEB 336 nicht nochmal tippen muss um das Copy and Paste zu erleichtern?
ja
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tatsächlich nicht. Da ich dachte das der Stil eher unkonventionell ist
Oft sieht man halt Vergleichsoperationen zwischen "U(" ")". Ist ein Relikt aus S5-Zeiten und der Umschaltung AWL <-> Kop/Fup.
Anstelle von POP wurde oft auf TAK verwendet.
Du hast halt einen etwas moderneren AWL-Code. :)
 
Ja, ich nutze auch noch immer Klammern bei Vergleichsoperationen. Da braucht dann wirklich keiner mehr fragen ;-)
Und TAK wäre auch mein Befehl gewesen statt POP.
 
Zurück
Oben