Step 7 ungerade Startadresse für String

mitchih

Level-2
Beiträge
806
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe folgendes Problem:

Ich habe einen RFID Chip der via DP an anlagen ausgelsen wird.

Dieser hat schon feste informationen:

Byte 0= Status
Ab Byte 1 wird ein Stringmit mx Lanege 10 geschrieben.

Nun möchte ich das symbolisch aufbauen.

Wenn ich nun jedoch nun einen DB Deklariere

So ist ja das Statusbyte ab Adresse 0.0
Der String Startet aber ab adresse 2.0 trotz des Bytes.

Wenn ich nun die Daten 1:1 Schreibe sind meine String informationen ja um 1 Byte verschoben.

Hat jemand gerade einen Trick auf lager wie ich das umschiffen kann?

Danke für eure Tips
 
Die eigentlichen Zeichen eines S7-String stehen immer ab Byte 2, denn in Byte 0 steht die max. Länge und in Byte1 die tatsächliche Länge des String.
Der RFID wird einen normalen String liefern bzw. er liefert das so, wie du das spezifiziert hast. evtl. geht da etwas in SCL mit dem AT-Befehl, ansonsten muß man absolut adressieren oder indirekt mit Pointer und entprechend umkopieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die eigentlichen Zeichen eines S7-String stehen immer ab Byte 2, denn in Byte 0 steht die max. Länge und in Byte1 die tatsächliche Länge des String.
Der RFID wird einen normalen String liefern bzw. er liefert das so, wie du das spezifiziert hast. evtl. geht da etwas in SCL mit dem AT-Befehl, ansonsten muß man absolut adressieren oder indirekt mit Pointer und entprechend umkopieren.

Hallo,

nein der RFID liefert einen "Step7" String also mit den 2 bytes für max und tatsächliche Länge voran.

Problem ist genau meine absolute Adressierung, das mag ich nicht und wollte ich eigentlich vermeiden.

Bekomme ich das Absolut hin, wenn ich den String aus den Datentypen manuell baue ? Als 2 Byte und dann 10 Char Aber wenn ich das in den Struct packe will er ja wieder bei 2 anfangen.

Gruß
michih
 
Moin,
egal was du tust, Klassik und auch TIA setzen einen neuen Datentyp immer auf eine gerade Byte-Adresse im DB. Ich würde an deiner Stelle schauen ob du entweder die HW-Konfig deines RFID-Readers anpassen kannst (z.B. Leseergebnis nach vorne und dahinter das Statusbyte oder z.B. ein Dummy-Byte auf Byte 1 setzen kannst ), oder das Ganze Byteweise in z.B. ein Array of Byte einlesen und dann erst in einen Symbolisch korrekt sortierten DB umladen.
 
Du könntest
- in HW Konfig die RFID auf ungerade E-Adressen im Prozessabbild (PAE) projektieren (z.B. E 101)
- in einem DB Strukturen deklarieren:
Code:
RFID_1  : STRUCT
 dummy0	: BYTE : B#16#0 //Alignment Vor-Byte
 Status	: BYTE : B#16#0
 Data   : STRING[10] : ''
END_STRUCT
- und dann mit SFC20 BLKMOV ab Adresse E - 1 (z.B. E 100) in die DB-Strukturen kopieren:
Code:
      CALL  "BLKMOV"
       SRCBLK :=P#E 100.0 BYTE 14
       RET_VAL:=#tempInt
       DSTBLK :="MyDB".RFID_1

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PS: die projektierte E-Adresse muß keine ungerade Adresse sein (sieht aber besser aus). Entscheidend ist nur, daß BLKMOV ab der Adresse 1 Byte vorher (E-Adresse - 1) kopiert.

Harald
 
Oder Daten in einen Empfangsbuffer holen und dann in den eigentlichen DB mit dem Aufbau (zB im FB) umkopieren ...
 
Zurück
Oben