SCL direkter Zugriff auf DB Daten möglich?

Hallo
Hier zwei Beispiele mit Zugriffsarten auf Datenbausteine aus einem Siemens Kurs
S_Bit := DB6.DX[i_byte,i_bit];
S_Bit := Daten.DX[i_byte,i_bit];

i_byte und i_bit sind Konstanten, INT-Variablen oder INT-Ausdrücke

Somit würde ich es einmal so versuchen:
DB12.Data.Wert_1 := DB100.[IN_Data_1]; //IN_Data_1 als Datentyp INT
 
Sollte funktionieren

Hallo,
also ich habe das mal gehabt, aber du musst meines Wissens symbolisch programmieren

8<--------------- Schnippelschnapp--------------------

VAR_INPUT
ForderPuls: BOOL;
ArbeitsAdresse: INT;
MaxBit: INT;
END_VAR

VAR_TEMP
Bitnummer: INT;
Product: BOOL;
END_VAR

IF Forderpuls= true THEN
Product:=false;
FOR BitNummer:= 0 TO MaxBit BY 1 DO
IF takt_licht.licht[ArbeitsAdresse].Led[Bitnummer] = true THEN
Product:=true;
BitNummer:= MaxBit;
END_IF;
END_FOR;
takt_prod.product[ArbeitsAdresse]:=true;
END_IF;
END_FUNCTION
 
Hallo,

Onkel Dagobert schrieb:
...der vollqualifizierte Zugriff auf Strukturen wie "DB12.Motordaten.Strom", wie wir ihn unter AWL kennen, ist meines Wissens bei SCL nicht möglich...
Upps,
jetzt habe ich es mal kurz probiert. Und siehe da, es geht doch! Zumindest ohne Index, also etwa so wie "SCHLEIFE := HMI_M3V_UNI_1.UNI.HMI.BILD_SOLL".

@MiAdLG
wie sieht denn die Datenstruktur deines Beispiels aus? "ArbeitsAdresse" und "Bitnummer" sind Indexe von Arrays, oder?

Gruss, Onkel
 
@plc_t

Es geht genau so, wie du es machen willst.
Array aus UDTxx im DB definieren, dann kannst du so zugreifen wie du das willst.

PS: sowas geht auch: Wert := DWORD_TO_DINT(WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Nr)).DD[StartP+((I-1)*4)]);

Wert: DINT
DB_Nr: INT
StartP: INT
I: INT
 
Danke Euch allen,

werde es die Tage probieren. Denke, ich werde es so kodieren wie es Ralle macht, dann den AWL-Code öffnen und neu abtippen. Dann möchte ich denjenigen sehen, der das Programm umschreibt. :lol:

pt
 
Zurück
Oben