Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 46421

Step 7 Problem mit Pointer

$
0
0
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:

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

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

Viewing all articles
Browse latest Browse all 46421


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>