S5 - Addition von 32 bit zahlen

matziane

Level-1
Beiträge
120
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich möchte eine 32 Bit lange Zahl die in einem Datenbaustein steht immer um 1 addieren.
Mit den normalen Mitteln geht das, wie man es kennt, nur bis +32767, dann wird das ganz rechte bit um einen erhöht und durch das Vorzeichen habe ich nun die -32768 und dann rückwärts weiter bis -1.

Wie bekomme ich es hin, dass das ganze ohne Vorzeichen von statten geht und sich das ganze über 2 DW erstreckt.
Wie ich es kenne kann die S5 nur 16 Bit, denke mir aber, dass es da Tricks gibt das doch noch so hin zu bekommen.


Bin für jede Kreative Idee dankbar.
 
Es gab glaube ich FB dafür. Wenn es z.Bsp. um einfache Zählaufgaben ging, haben wir immer bis 9999 gezählt, bei 10000, dann die Variable auf Null und dafür eine 2. Variable um 1 erhöht. Dann hatte man also in Variable Eins die Zahlen 0...9999 und in Variable Zwei sie 10-Tausender. Das konnte man dann auch ganz nett auf einem Display anzeigen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hatte auch schon an den FB gedacht - bin mir da aber nicht so sicher ... Das müßte man aber aus der CPU herausholen können (wenn ...).

Ansonsten :
Low-Worte addieren - es wird ggf. ein Überlaufbit (frag aber bitte nicht, wie das heißt) gesetzt. Wenn ja, dann noch zusätzlich 1 zur High-Wort-Addition mit zuaddieren.
Das sollte es m.E. sein ...

Gruß
Larry
 
Ich mache dass bei ein 115U 943 mit der volgende code:

Code:
[COLOR=#333333][FONT=Consolas]A   DB3                     //DB van teller
[/FONT][/COLOR]L     DW    3                //LW teller 
L     0
<F
=    M255.0                 //LW is negatief
 
L     DW    0                //teller aantal
L     DW    3                //LW teller
+F
T     DW    3                //LW teller
 
UN    M255.0
SPB   OK                     //LW was positief ->klaar

L     DW    3
L     0
<F 
SPB   OK                     //LW is nog negatief ->klaar
 
L     DW    2                // HW teller 
L     1
+F                          //HW met 1 verhogen
T     DW 2
OK: NOP 0

Joop
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
auf so einer 115er CPU hatte ich das problem auch, musste dabei allerdings auch multiplizieren.
habe dazu die Gleikomma-FBs benutzt. die sind ein extra paket.
(natürlich sind die hintersten stellen dabei nicht mehr genau, bzw. existent.)

vielleicht gibt es die in einem "Museum" und LONG auch dazu.
wenn man das nicht mehr kaufen kann, müsste man es ja auch verschenken können.
das weiss ich aber nicht.
 
Hallo,
es handelt sich um eine S5-115U 945,

Von solchen FBs hatte ich auch schon gehört.
Sind die Standardmässig Online? Bei mir zumindest nicht :(
Ansonsten, woher bekommt man die?
 
Guten Morgen,
vielleicht habe ich ja einen grundlegenden Programmierfehler bei mir drin, da die Steuerung es nicht so tut wie ich es gern hätte.

Hier mal die Addition aus dem Programmcode wie ich sie verwende, sollte doch so funktionieren oder nicht.
Code:
L DD 0
L KF +1
+D
T DD 0

Wenn ich nun über den Bildbaustein in mein DW 1, kann da ja nur Wörter darstellen ein 32765 lade und hochaddieren lasse kommt nicht das gewünschte Ergebnis.
Stattdessen wie oben schon beschrieben 32766 -> 32767 -> -32768 -> 339 -> 340

Ich bin verwirrt :sad:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du addierst ein Doppelwort DD0, beobachtest aber mit DW1 nur den niederwertigen Teil des Doppelworts. Dein PG stellt 16-Bit Festpunkt immer als vorzeichen behafteten Wert dar. Daher wird Dein Ergebnis auch als negative Zahl dargestellt. Das ist aber nur eine Darstellungsweise. Das Ergebnis stimmt trotzdem. Beobachte mal das DD0 komplett.
 
arbeitest du den Code auch über einen Zykluswisch ab ??
im Prinzip ist das richtig was du machst aber denke daran, dass dein Zählmerker immer nur über eine Flanke sprich einmalig diesen Code abarbeitet.
Sonst zählt das wild weiter solange dein Zählmerke 1 ist

UN Zählmerker ( als Flankenwisch)
spb xxx

L DD0
L KF +1
+D
T DD0

xxx:
 
@peter(R) Jo, das mach ich so, davor ist noch diverser anderer Programmcode inklusive Flankenauswertung.
Ist zwar bei S5 etwas umständlich, aber es funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
U #E
UN #HM
= #FLA
U #E
= #HM

das war das Leben vor "FP", was im übrigen genauso ist, wie wenn Du eine Änderung eines Analogsignales erkennen möchtest:

L #ISTWERT
L #ALTWERT
<> R
= #Änderung
L #ISTWERT
T #ALTWERT
 
@borromeus
Vielen Dank für die Erläuterung der Flankenauswertung, werde das sicherlich auch mal so verwenden, da meine Flankenauswertung etwas komplizierter ist.

Aber was hat das mit der Addition von 32 bit Zahlen zu tun.
 
Zurück
Oben