Step 7 AWL-Programm verstehen

cyborg93

Level-2
Beiträge
35
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin gerade an der Migration einer alten Maschine von S7-300 (Step 7 v5.7) auf TIA V17). Dabei bin ich auch nachfolgende Funktion gestoßen die ja so nich 1:1 in TIA Portal übertragbar ist und ich leider nicht ganz verstehe.
Vorallem die Anweisung: L LB 2

FUNCTION FC 127 : VOID
TITLE =Datum/Uhrzeit Synchronisation OP-SPS
//Beschreibung: Synchronisation von Datum und Uhrzeit zwischen Bediengerät und SPS
//--------------------------------------------------------------------------------
//intern aufgerufene Bausteine: SFC0, SFC1
//--------------------------------------------------------------------------------
//Eingänge: BerZ_TP : Bereichszeiger-DB Flexible TP
//
//Ausgänge: keine
//
//--------------------------------------------------------------------------------
//Version Datum Bearbeiter Änderungen
//0.1 06.10.2010 Frio Erstellung
AUTHOR : Frio
FAMILY : BD
NAME : Koord_Fl
VERSION : 0.1


VAR_INPUT
BerZ_TP : BLOCK_DB ; //Bereichszeiger-DB Flexible TP
END_VAR
VAR_TEMP
T_Ret_Val : INT ;
SPS_DT : DATE_AND_TIME ;
SET_SPS : DATE_AND_TIME ;
END_VAR
BEGIN
NETWORK
TITLE =DB öffnen

AUF #BerZ_TP;

NETWORK
TITLE =Datum/Uhrzeit der SPS in Bereichszeiger eintragen

//ab DBB46 im DT-Format
CALL SFC 1 (
RET_VAL := #T_Ret_Val,
CDT := #SPS_DT);

L LB 2;
T DBB 46;
L LB 3;
T DBB 47;
L LB 4;
T DBB 48;
L LB 5;
T DBB 49;
L LB 6;
T DBB 50;
L LB 7;
T DBB 51;
L LB 8;
T DBB 52;
L LB 9;
T DBB 53;
NETWORK
TITLE =Datum Uhrzeit SPS in Bereichszeiger eintragen

L DBB 46;
T DBB 10;
L DBB 47;
T DBB 11;
L DBB 48;
T DBB 12;
L DBB 49;
T DBB 13;
L DBB 50;
T DBB 14;
L DBB 51;
T DBB 15;
L 0;
T DBB 16;
L DBB 53;
L B#16#F;
UW ;
T DBB 17;
NETWORK
TITLE =Stellbefehl SPS --> OP

U DBX 54.2;
FP DBX 54.3;
= DBX 54.4;

U DBX 35.0;
FP DBX 54.6;
= DBX 54.7;

O DBX 54.4;
O DBX 54.7;
SPBN B1;

L 1;
T DBW 56;

B1: NOP 0;
NETWORK
TITLE =Anlauf OP --> Uhrzeit von SPS an OP

U( ;
L DBW 38;
L 0;
==I ;
) ;
U( ;
L DBW 56;
L 1;
==I ;
) ;
SPB M11;

U( ;
L DBW 38;
L 0;
==I ;
) ;
U( ;
L DBW 56;
L 6;
==I ;
) ;
SPB M12;
SPA M13;

M11: NOP 0;
//Uhrzeit OP stellen
L 14;
T DBW 38;
L DBB 13;
T DBB 41;
L DBB 14;
T DBB 42;
L DBB 15;
T DBB 43;
SPA M13;

M12: NOP 0;
//Datum OP stellen
L 15;
T DBW 38;
L DBB 17;
T DBB 41;
L DBB 12;
T DBB 42;
L DBB 11;
T DBB 43;
L DBB 10;
T DBB 44;

CLR ;
= DBX 54.2;
L 0;
T DBW 56;
M13: NOP 0;
NETWORK
TITLE =Hochzählen Stellzähler

U( ;
L DBW 56;
L 0;
>I ;
) ;
U M 2.5;
FP DBX 54.5;
SPBN Z1;
L DBW 56;
L 1;
+I ;
T DBW 56;
Z1: NOP 0;
NETWORK
TITLE =Datum und Uhrzeit von OP zu SPS

U DBX 54.0;
U( ;
L DBW 56;
L 0;
==I ;
) ;
FP DBX 54.1;
SPBN M2;
L DBW 38;
L 0;
<>I ;
SPB M2;
L 41;
T DBW 38;

L 111;
T DBB 23;
T DBB 32;

M2: NOP 0;

U DBX 54.0;
U( ;
L DBW 38;
L 0;
==I ;
) ;
U( ;
L DBB 23;
L 111;
<>I ;
) ;
U( ;
L DBB 32;
L 111;
<>I ;
) ;
FP DBX 55.0;
SPBN M3;

L DBB 32;
T LB 10;
L DBB 31;
T LB 11;
L DBB 30;
T LB 12;
L DBB 23;
T LB 13;
L DBB 24;
T LB 14;
L DBB 25;
L 1;
+I ;
T LB 15;
L DBB 29;
T LB 17;

CALL SFC 0 (
PDT := #SET_SPS,
RET_VAL := #T_Ret_Val);

U DBX 54.0;
R DBX 54.0;

M3: NOP 0;
END_FUNCTION
 
Moin cyborg93,

"L LB 2" bedeutet: Lade lokales Byte 2

Guck mal im VAR_TEMP-Bereich. Darin sind die Variablen auch absolut adressiert. LB 2 ist da dann das zweite Byte.

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
da wird der DT in seine einzelnen komponenten zerlegt. beginnt bei dir ab lb 2 da vorher noch der retval ist (temp-bereich)

Code:
CALL  SFC    1
       RET_VAL:=MW240
       OUT0   :=#ag_jetzt_datum_zeit    //LB 0 bis 7; typ: dt
      NOP   0
//variablen liegen im hex-format vor

      L     LB     0            //LB 12 im OB1
      T     DB80.DBB   10               //jahr

      L     LB     1            //13
      T     DB80.DBB   11               //monat

      L     LB     2            //14
      T     DB80.DBB   12               //tag

      L     LB     3            //15
      T     DB80.DBB   13               //stunde

      L     LB     4            //16
      T     DB80.DBB   14               //minute

      L     LB     5            //17
      T     DB80.DBB   15               //sekunde

      L     LB     6            //18
      T     DB80.DBB   16               //milisekunden (zehntel und hundertstel)

      L     LB     7            //19
      T     DB80.DBB   17               //linke tetrade: milisekunden (tausendstel); rechte tetrade: wochentag 1=sonntag
 
ich bin gerade an der Migration einer alten Maschine von S7-300 (Step 7 v5.7) auf TIA V17). Dabei bin ich auch nachfolgende Funktion gestoßen die ja so nich 1:1 in TIA Portal übertragbar ist und ich leider nicht ganz verstehe.
Vorallem die Anweisung: L LB 2
Was daran ist nicht in TIA übertragbar? Geht es Dir um die Warnungen, daß bei den direkt adressierten Zugriffen auf die TEMP-Lokalbytes "LB x" die Adressen nicht durch eine Variable belegt sind?

Das hier
//ab DBB46 im DT-Format
CALL SFC 1 (
RET_VAL := #T_Ret_Val,
CDT := #SPS_DT);

L LB 2;
T DBB 46;
L LB 3;
T DBB 47;
L LB 4;
T DBB 48;
L LB 5;
T DBB 49;
L LB 6;
T DBB 50;
L LB 7;
T DBB 51;
L LB 8;
T DBB 52;
L LB 9;
T DBB 53;
... kannst Du für TIA so umschreiben:
Code:
//ab DBB46 im DT-Format
      CALL  RD_SYS_T
         date_type:=Date_And_Time
         RET_VAL :=#T_Ret_Val
         OUT     :=#SPS_DT

//Variante 1:
      LAR1  P##SPS_DT     
      L LB [ AR1 , P#0.0 ]       //%LB2
      T     %DBB46
      L LB [ AR1 , P#1.0 ]       //%LB3
      T     %DBB47
      L LB [ AR1 , P#2.0 ]       //%LB4
      T     %DBB48
      L LB [ AR1 , P#3.0 ]       //%LB5
      T     %DBB49
      L LB [ AR1 , P#4.0 ]       //%LB6
      T     %DBB50
      L LB [ AR1 , P#5.0 ]       //%LB7
      T     %DBB51
      L LB [ AR1 , P#6.0 ]       //%LB8
      T     %DBB52
      L LB [ AR1 , P#7.0 ]       //%LB9
      T     %DBB53

//oder alternativ Variante 2:
      LAR1  P##SPS_DT     
      L LD [ AR1 , P#0.0 ]       //%LB2 .. %LB5
      T     %DBD46
      L LD [ AR1 , P#4.0 ]       //%LB6 .. %LB9
      T     %DBD50

Harald
 
Hallo Cyborg93,

bei mir ist es schon lange her, das ich mit AWL zu tun hatte.
Deswegen kann ich dir nur den TIP geben, das manche AWL befehle von S7 nach TIA nicht funktionieren.
Die befehle wurden umbenannt. Welche es waren bekomme ich nicht mehr zusammen.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Deswegen kann ich dir nur den TIP geben, das manche AWL befehle von S7 nach TIA nicht funktionieren.
Welche es waren bekomme ich nicht mehr zusammen.
Du hattest im Editor vermutlich die Standard-Einstellung "Englische Mnemonik" bzw. "International" drin stehen.
Dann muss man die Befehle natürlich anders eintippen "A" statt "U", "JC" statt "SPB"......

Steht diese auf deutsch, dann sollte es schon 1:1 funktionieren.

Einstellungen:
1675332418349.png
 
Zuletzt bearbeitet:
L DBB 25;
L 1;
+I ;

T LB 15;
hier fehlt noch Schreiben eines Wertes in LB16
L DBB 29;
T LB 17;

CALL SFC 0 (
PDT := #SET_SPS,
RET_VAL := #T_Ret_Val);
In dem schlampigen Original-Code sind auch noch Programmierfehler drin, die (vermutlich) im ungünstigen Fall zum STOP der CPU führen können.
- Die bedingungslose und ungeprüfte Addition von 1 auf die Sekunden (warum?) kann zu ungültigen oder zu großen BCD-Werten führen. Zulässig: BCD#0 .. BCD#59
- Das LB16 in der DATE_AND_TIME-Variable wird nicht beschrieben und kann deshalb einen ungültigen BCD-Wert für die Millisekunden enthalten. Zulässig: BCD#0 .. BCD#99

Harald
 
Zurück
Oben