Step 7 SCL Zugriff auf externen DB (Adresse)

IVA_PS

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

ich nutze gerade den betrieblichen Leerlauf für etwas Eigenfortbildung; und da der Masochismus keine Grenzen kennt, ist Step7 SCL dran.

Folgende Funktion hatte ich gebastelt:
Code:
FUNCTION_BLOCK FB4

TITLE = 'SCL_BOOL_PARSER'
VERSION : '1.0'
AUTHOR  : 'PS'
NAME    : 'BOOL_PARS'
FAMILY  : 'PARSER'

VAR_INPUT
  end : INT;
END_VAR


VAR
    reset BOOL;
    i, cnt, zaehler INT;
    DB_VAR : ARRAY[0..100] OF BOOL;   
END_VAR

  i:=0; cnt:=0;
  
IF reset THEN
    FOR i:=0 TO end DO
        DB_VAR[i]:= FALSE;
    END_FOR;
    reset:=0;
ELSE
    FOR i:=0 TO end DO
        IF DB_VAR[i] = TRUE THEN
            cnt := cnt + 1;
        END_IF;
    END_FOR;
END_IF;
 zaehler:=cnt;
 
END_FUNCTION_BLOCK

Zählt mir im Instanz-DB die Bools aus.

Jetzt möchte ich das Ganze aber auf einen externen DB anwenden und da fehlt es mir an der Syntax.
Folgendes kam bisher dabei heraus:

Code:
FUNCTION_BLOCK FB5

TITLE = 'SCL_BOOL_PARSER'
VERSION : '1.0'
AUTHOR  : 'PS'
NAME    : 'BOOL_PARS'
FAMILY  : 'PARSER'

VAR_INPUT
  Datenlaenge, QuellOffset : INT;
  Quell_DB : WORD;  
END_VAR
 

VAR_OUTPUT
Anzahl : INT;
END_VAR

VAR
    reset  : BOOL;
    i, cnt : INT;   
END_VAR

i   := 0; 
cnt := 0;
Datenlaenge := Datenlaenge + Quelloffset; 

IF reset THEN
    FOR i:=0 TO Datenlaenge  DO
        QUELL_DB.DBX[i] := FALSE;
            [U][I][B]END_FOR;[/B][/I][/U]
    reset:=0;
ELSE
    FOR i:=0 TO Datenlaenge DO
        IF QUELL_DB.DBX[i] := TRUE THEN
            cnt := cnt + 1;
        END_IF;
    END_FOR;
END_IF;
 Anzahl:=cnt;
 
END_FUNCTION_BLOCK

Für die markierte Zeile erhalte ich folgenden Fehler:
[...]
Fehlerhafe Variable, der Punkt ist nicht zulässig.
[...]
Bezieht sich auf "QUELL_DB.DBX := FALSE;"

Bin ich hier im falsche Datentyp Märchen oder wie bekomme ich sonst Zugriff auf die Variable/Datenposition?
 
Ich kann es jetzt nicht nachstellen - ich habe es aber so in Erinnerung, dass du dir deine Adresse so gar nicht zusammenbasteln DARFST ...
Wie wäre es denn, wenn du als Übergabe-Parameter den DB selbst nimmst (und natürlich auch als Typ). Dann kannst du nämlich auch wieder vollsymbolisch auf alle Inhalte dessen zugreifen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ginge das dann über den Block Befehl?
Code:
Quell_DB : BLOCK_DB;

Aus der Hilfe zum Block-Datentyp werde ich nicht schlau, um variabel auf die Adressen zuzugreifen. Hier fehlt mir ein kurzes Syntax-Beispiel.
 
erhalte ich folgenden Fehler:
[...]
Fehlerhafe Variable, der Punkt ist nicht zulässig.
[...]
Bezieht sich auf "QUELL_DB.DBX := FALSE;"

Bin ich hier im falsche Datentyp Märchen oder wie bekomme ich sonst Zugriff auf die Variable/Datenposition?

Code:
MyDB.DX[Byteadresse, Bitnummer] := FALSE;
BoolVar := MyDB.DX[Byteadresse, Bitnummer];
siehe: Hilfe zu Step7 > Bausteine programmieren mit S7-SCL > Globale Daten > Datenbausteine > Indizierter Zugriff auf Datenbausteine

Harald
 
Zuletzt bearbeitet:
Zurück
Oben