TIA POKE-Befehl in SCL bei optimierten Bausteinen

PLC1

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

ich habe eine Frage zum POKE-/PEEK-Befehl in SCL (TIA V15.1).

Hierzu folgender Codeausschnitt:

POKE(area := 16#84, // Auswahl DB
dbNumber := (DINT Variable), //DB Nummer
byteOffset := 4, //Adresse??
value := PEEK_BYTE(area := 16#84, dbNumber := (DINT Variable), byteOffset := 4));

Mein Problem ist nun, dass ich die "Adresse" (byteOffset) des DB´s nicht verstehe.
Im Infosystem steht bei byteOffset: "Adresse, die geschrieben wird"
Was heißt das genau in Bezug auf obiges Beispiel Adresse: 4? Welche Variable wird im DB adressiert?
Mich wundert es zusätzlich, dass bei Aktivierung des optimierten Bausteinzugriffs kein Syntax-Fehler kommt.

Für eure Hilfe wäre ich sehr dankbar

mfg
PLC1
 
Moin,
früher, in der nicht optimierten Welt, hatte jede Variable bspw. in einem DB eine für den Anwender sichtbare Adresse. Und diesen Byteoffset, also den additiven Offset zur Startadresse der ersten Variable im DB, kannst du dort angeben. In deinem Fall wird ab Adresse 4.0 ein Byte gelesen (Peek_Byte) und via Poke wiederum auch in Adresse 4.0 geschrieben. - macht so zwar kein Sinn, ist aber so.
Diese Adressen machen aber natürlich nur Sinn, wenn man auch eine Adresse im DB adressieren kann -> also nur, wenn man nicht optimiert arbeitet.
Das steht auch so in der Hilfe:
Mit der Anweisung "Speicheradresse schreiben" schreiben Sie eine Speicheradresse ohne Angabe eines Datentyps in einen Standard-Speicherbereich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort. So in der Art dachte ich mir das auch schon. Ich war mir nur unsicher, da kein Syntax-Fehler kommt, obwohl ich den optimierten Zugriff aktiviert habe. Eigentlich sollte das Programm die Adresse 4 nicht kennen und demnach ein Fehler generieren?
D.h. auch wenn das Programm übersetzbar ist, wird mir der Codeabschnitt mit dieser Konfiguration keine Aktion ausführen können:confused:
 
Übersetzbar ist es, weil ja beim übersetzen noch nix schief geht. Erst wenn die SPS den Code ausführt. Gleiches gilt, wenn du dort eine DB-Nummer angibst, die nicht existiert. Ich weis nicht, ob andere Compiler sowas checken würden. Heißt also selbst aufpassen was man tut ;)
Verwendung des Speicherbereichs 16#84: DB
Wenn Sie als Speicherbereich einen Datenbaustein verwenden und dieser bei der Erstellung des Programmcodes noch nicht bekannt ist, dann haben Sie die Möglichkeit, den EN-/ENO-Mechanismus zu verwenden, um mögliche Zugriffsfehler zu erkennen.
Das könnte ich mir auch vorstellen, um zu prüfen, ob man im optimierten Speicher stochert. Weis aber nicht, ob der ENO dann auch zuschlägt - müsste man mal testen.
 
Zuletzt bearbeitet:
Zurück
Oben