Step 7 Zähler von 16bit auf 32bit ändern

Frozengun

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

ich möchte mich kurz vorstellen. Mein Name ist Sebastian und vor ca. 13 Jahren habe ich in meiner Mechatroniker Ausbildung ein paar Basiskenntnisse in Step 7 sammeln können. Nun wollte ich mich wieder etwas fit machen. Will im Haus nach und nach alles an die S7 hängen und somit ein paar dezentrale Lösungen ablösen. Folgende Sache beschäftigt mich etwas:

U "Gaszähler" // Flankeneineingang
FP M 46.0 //Flankenmerker
SPBN M001 //keine Flanke = nicht addieren
L DB2.DBD 0 //Doppelwort Laden
L 1
+D
T DB2.DBD 0
ITD // wandelt eine Ganzzahl 16>32bit
DTR // wandelt eine Ganzzahl > Gleitpunkt
L 1.000000e+002 //lädt den Faktor in den Akku
/R // dividiert
T MD 47 //überträgt nach MD
M001: NOP 0


Diesen AWL Code habe ich erstellt, aus einigen Versuchen und andere Anregungen aus Foren. Wie man sieht, zähle ich Impulse aus einem Gaszähler und speichere sie in einem Datenbaustein ab. Nun habe ich wohl das Problem, dass ich wohl mit 16bit Ganzzahlen arbeite und demnach bei 32768 Schluss ist. ITD wandelt ja von 16bit nach 32bit, aber wie arbeite ich generell auf 32bit Basis?

Wäre wirklich Klasse wenn ihr mir helfen könntet, hänge da schon etwas länger.

Vielen Dank!

Liebe Grüße Sebastian
 
du arbeitest ja schon mit dint (also 32bit). du kannst also das itd weglassen.
der korrektheit halber solltest du aber auch die 1 als dint laden. also L L#1
 
Code:
      U     "Gaszähler"                 // Flankeneineingang
      FP    M     46.0                  //Flankenmerker
      SPBN  M001                        //keine Flanke = nicht addieren
      L     DB2.[COLOR="#0000FF"]DBD[/COLOR]    0                [COLOR="#0000FF"]//32-Bit Zählerstand laden[/COLOR]
      L     1
      [COLOR="#0000FF"]+D[/COLOR]                                [COLOR="#0000FF"]//32-Bit Addition[/COLOR]
      T     DB2.[COLOR="#0000FF"]DBD[/COLOR]    0                [COLOR="#0000FF"]//neuen 32-Bit Zählerstand speichern[/COLOR]
[COLOR="#FF0000"]//    ITD                               // das ITD löschen![/COLOR]
      DTR                               // wandelt eine 32-Bit-Ganzzahl > Gleitpunkt
      L     1.000000e+002               //lädt den Faktor in den Akku
      /R                                // dividiert
      T     MD    47                    //überträgt nach MD
M001: NOP   0
Hallo Sebastian,

Du zählst schon 32 Bit, erkennbar daran daß der Zählerstand in einem DBD liegt und mit +D inkrementiert wird.
Das ITD mußt Du aus dem Code löschen, weil es nur die unteren 16-Bit des 32-Bit-Zählwertes auswertet.

Harald
 
Wow, super! Vielen Dank für die vielen aufschlussreichen Antworten! Eigentlich ganz einfach wenn man es so aufbereitet sieht. Habe es geändert und es zählt noch brav weiter :)
 
Zurück
Oben