IN SCL auf dbx zugreifen

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute ich möchte in einem SCL Baustein indirekt auf ein Bit zugreifen.

Also ich habe eine Variable vom Typ BLOCK_DB diese lautet : Ziel_DB

ich möchte jetzt sowas machen:

Ziel_DB.DBXZieloffset.Bit := TRUE

geht nicht, weil er mir sagt ungültige Variable, welchen Datentyp braucht man denn da?
 
In dem Fall geht das nur absolut, da ja zur Erstellungszeit der SCL-Quelle nicht bekannt ist, welcher DB angetragen wird.

Ziel_DB.DBX1.3 := TRUE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Doch, geht. Die Syntax ist nur etwas anders:
Code:
VAR_INPUT
     Ziel_DB : BLOCK_DB;
END_VAR
VAR
    Byte_Index : INT;
    Bit_Index : INT;
    x : BOOL;
END_VAR
    
Byte_Index := 2;
Bit_Index := 3;    
x := Ziel_DB.DX[Byte_Index, Bit_Index];

Wenn deine Datenbausteinnummer vom Typ Integer sein sollte, muss du diesen vorher in den Typ BLOCK_DB konvertieren, z.B. so:

WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Nr)).DX...
 
Ja stimmt, variabler Zugriff geht natürlich, aber auch da ist der Zugriff ja leider nicht symbolisch. :|
 
Hallo Zusammen,
ich habe ein ähnliches Problem.

Als CPU ist seine S7 300 verbaut. Programmiert wird mit TIA V13

Test.png

Kann mir jemand sagen wieso er mir den Aufruf des Block_DB (#DB_Nr.DX) das DX rot markiert? als Fehler sagt er mir ungültige Array Variable.

Exakt das gleiche Programm läuft mit dem Simatic Manager ohne Probleme
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In TIA muß man nun runde Klammern verwenden (DX ist ja kein Array sondern Operandenkennzeichen einer Adresse): #DB_NR.DX(#T_i,#T_i2)
TIA Hilfe > Index > Indirekte Adressierung > Indirektes Adressieren von Datenbausteinen (S7-300, S7-400)

PS:
Exakt das gleiche Programm läuft mit dem Simatic Manager ohne Probleme
Du könntest den funktionierenden Ausdruck aus SCL classic als Quelle exportieren und in TIA importieren, da sollte TIA die Schreibweisen anpassen.

Harald
 
Zuletzt bearbeitet:
Zurück
Oben