TIA indirekte Adressierung AWL in SCL

SPS27

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
kann mir bitte einer dabei helfen diesen AWL Code in SCL umzuschreiben (bin ein Anfänger und habe niemandem den ich fragen kann).
In dem Code handelt es sich um eine Indirekte Adressierung. Es werden Daten aus einem Datenbaustein in diesen FC-Baustein reingeschrieben, gespeichert und verarbeitet (siehe Bild).

Gruß
Ibo

1646131859606.png
 
Diese AWL Code ist ein alten Stil von programmieren mit Zeiger und Absolut-Offset Adressen. Es fordert die Offsets von die Limits bekannt sind.
Heutzutage wurde man alles symbolisch und mit Anwenderspezifsierte Datentypen machen.

Die Variabeln StatusHH, StatusH, StatusL, StatusLL sind vermutlich Ausgänge. Aber die sind nur als Temps deklariert ?
Abhängig von was mit die Ausgänge passieren soll, konnte sie als OUT pins deklariert werden, oder sie konnte Bestand von ein Shared-DB sein, eventuell dieselbe wie #GW_Data.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo JesperMP,
ich wollte den Beitrag nicht mit vielen Bildern vollstopfen, daher habe ich ein Teil des Codes weggelassen. Hier ist der zweite Teil des Codes. Die Variablen StatusHH, StatusH, StatusL und StatusLL sind Temps. Damit setzen wir die Variablen, die wir in der Anwenderspezifizierten-Datenstrukture definiert haben.

1646136782247.png
 
Ok. Es gibt viele Wege. Einer wäre:

Erstelle ein Datetyp 'UDT_GW_Data'.
Etwa wie
Code:
Kanal : STRUCT
  GW: STRUCT
    HH : REAL ;
    H : REAL ;
    L : REAL ;
    LL : REAL ;
  END_STRUCT;
  ENAB : // "ena" ist ein Kennwort
    HH : BOOL ;
    H : BOOL ;
    L : BOOL ;
    LL : BOOL ;
  END_STRUCT ;
  STATUS :
    HH : BOOL ;
    H : BOOL ;
    L : BOOL ;
    LL : BOOL ;
  END_STRUCT ;
END_STRUCT ;

Dann erstelle ein Shared DB, mit die Variablen delariert durch die Datentyp
Erwa wie
Code:
Kanal : ARRAY[1..20] OF UDT_GW_Data ;

Wenn du die einzelne Kanäle in den DB mit die FC oder FB mittels ein IO PIN verbindest, Dann kannst du in SCL schreiben
Code:
IF (#Value > #Kanal.GW.HH) AND #Kanal.ENAB.HH THEN
  #Kanal.STATUS.HH := TRUE ; // enstspricht das Setzen in die AWL code
END_IF ;
 
Zurück
Oben