Startadresse über Pointer bei Lokalem Datenstruct

TheBadFrog

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi komme irgendwie nicht weiter.

Ich habe mit in einem FB ein lokales Datenstruct "Status" in den STAT Variablen angelegt.
Dort sind enthalen
0-0.7 Bits
1.0 Datenlänge (Byte)
2.0-90.0 Nutzdaten

Ich möchte nun die Nutzdaten Entnehmen, hierzu benötige ich die Anfangsadresse der Nutzdaten

Habe es so Versucht, haut aber nicht hin:cry:

L P##Status (Anfangsadresse laden)
T #Laufparameter (nötig für Schleife zum Auslesen der Daten)
LAR! #Laufparameter
+AR! P#2.0 (offset 2 Byte)
TAR1 #Laufparameter

Was mache ich falsch?:confused:


Gruß TheBadFrog
 
Hallo,
warum machst du es nicht so :
Code:
L P##Status (Anfangsadresse laden)
L P#2.0
+D
T #Laufparameter   // muss vom Typ DWORD sein
LAR1
Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
auch eine Möglichkeit:
Code:
LAR1 P##Status  // Anfangsadresse laden
+AR1 P#2.0    // offset 2 Byte
TAR1 #Laufparameter // Datentyp DWORD
Soll der Baustein multiinstanzfähig sein, musst du noch das AR2 dazu addieren.
 
Hallo LL, hallo Hohlkörper,

erst einmal vielen Dank für die sehr schnelle Hilfestellung!

Das sieht nun bei mir schon mal teilweise gut aus......
Leider passen die Daten nicht immer.

Mein Lokaldatenstruckt liegt direkt am Record parameter des SFC 14
Die Daten aus dem Lokaldatenbereich (sind einzelne Bytes) passen leider nicht immer!
Kann es sein das meine Daten zum Einlesezeitpunkt nicht aktuell sind?
Habe gerade nicht viel in meiner 315 2 DP die Zykluszeit liegt zwischen 1 und 2 ms!

Teste nun mal den gleichen Ablauf mit einem Vorbelegten Struckt!

Oder ich habe noch eine Bock in meinem Ablauf drin!

Wenn ich eine Konstante weggschreibe wird diese "richtig" und in richtiger Anzahl in meinen DB weggeschrieben.
Prohlem liegt also im Zugriff auf die Lokaldaten!

Gruß TheBadFrog
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi LL,

habe nun die Lokaldaten direkt angepsrochen
L #Status.Receive Data[0]
T #aktuelles_Byte

L #ReceivenächstesByte
SLD 3
L DW#16#84000000 // Kennung DB

OD
LAR1
L #aktuelles_Byte
T B(AR1,P0.0)
L #Receive_nächstesByte //Position im DB weiter Rücken
+ 1
T #Receive_nächstesByte
L #Status.Receive Data[1]
.......................
So habe ich es dann halt mit allen 8 Byte Nutzdaten gemacht
Die Werte im DB haben dann zu denen die ich an die Serielle Schnittstelle verschickt habe gepasst......
Also lags an meiner Verarbeitung der Lokaldaten.....


Wollte im Vorfeld die Lokaldaten über einen Pointer auslesen, dies funktionierte aber nur ein Weile........:-|

Event. habe ich einen Offset des AR1 vergessen, oder hätte ich das AR1 sichern und nach dem Funktion zurückschreiben müssen?:confused:

Gruß TheBadFrog

P.S. nun gehtes in die andere Richtung (Daten aus dem DB entnehmen und an das Elektronikmodul schicken......wieder Stückweise mit maximaler Nutzdatenbreite von 8 Byte verschicken
 
Zurück
Oben