Hallo Zusammen,
habe wieder mal ein Problem mit einem Pointer.
Und zwar lese ich über einen FB die Statuswörter von einem FU in einen DB ein.
Diesen Baustein habe ich erweitert, weil dieser mir bisher nur 2 Statuswörter vom Umrichter übergeben hat.
Er soll in Zukunft 6 Statutswörter einlesen und in den DB schreiben.
Für das Statuswort wurde unter Stat Variablen ein eigenes Struct (STW) angelegt.
Dieses besteht zu Beginn aus 16 Bits (einzelne Stautsmeldeungen) und 5 Integer Variablen.
Der Code sieht wie folgt aus:
Wenn ich das Programm als ganzes Laufen lassen, zeigen die Adressregister die richtigen Anfangsadressen an.
Von daher vermute ich, dass es an den Adressregistern nicht liegen kann.
Wenn ich die Erweiterung überspringe funktioniert das Ganze, mit der Erweiterung allerdings nicht.
Habe die Stellen, wo ich vermute das es hakt, rot kommentiert.
Wo liegt da genau mein Denkfehler?
Gruß
Holger
habe wieder mal ein Problem mit einem Pointer.
Und zwar lese ich über einen FB die Statuswörter von einem FU in einen DB ein.
Diesen Baustein habe ich erweitert, weil dieser mir bisher nur 2 Statuswörter vom Umrichter übergeben hat.
Er soll in Zukunft 6 Statutswörter einlesen und in den DB schreiben.
Für das Statuswort wurde unter Stat Variablen ein eigenes Struct (STW) angelegt.
Dieses besteht zu Beginn aus 16 Bits (einzelne Stautsmeldeungen) und 5 Integer Variablen.
Der Code sieht wie folgt aus:
Code:
NOP 0
//--- Umrichter-Status (STW) einlesen auf lokalen Merkerbereich
L #PeripherAddr // Übergebene Peripherieadresse
SLW 3 // Auf Bereichszeiger-Format bringen
LAR1 // Lade Peripherie-Eingangsadresse in AR1
L PED [AR1,P#8.0] // Lade Umrichter-STW aus Peripherie-Eingang in AKKU1
// 8 Byte Offset, da die Statuswörter 8 Bytes hinter dem Peripherieeingangswort liegen.
LAR1 P##STW // Lade lokale Adresse des Umrichter-Statusworts in AR1
T D [AR1,P#0.0] // Transferiere AKKU1 nach #STW
//*****************Erweiterung *****************\\
L #PeripherAddr //Erweiterung
SLW 3
LAR1
L PED [AR1,P#12.0] // 4 weitere Bytes Offset, da die Bytes 8-11 schon eingelesen wurden
LAR1 P##STW
T D [AR1,P#4.0] //Statuswort 3+4 übergeben
// die geladenen Wörter 4 Byte hinter dem Beginn von STW ablegen.
L #PeripherAddr //Erweiterung
SLW 3
LAR1
L PED [AR1,P#16.0] // 4 weitere Bytes Offset, da die Bytes 12-15 schon eingelesen wurden
LAR1 P##STW
T D [AR1,P#8.0] // Statuswort 5+6 übergeben
// die geladenen Wörter 8 Byte hinter dem Beginn von STW ablegen.
//*****************Erweiterung Ende*****************\\
LAR1 P##STW
L DW#16#0
<>D // Vergleich #STW 1. Datenwort auf <> "0"
= #BusOk // Kommunikation zum Umrichter ist möglich
Von daher vermute ich, dass es an den Adressregistern nicht liegen kann.
Wenn ich die Erweiterung überspringe funktioniert das Ganze, mit der Erweiterung allerdings nicht.
Habe die Stellen, wo ich vermute das es hakt, rot kommentiert.
Wo liegt da genau mein Denkfehler?
Gruß
Holger