Division von INT Zahlen

@Vierlagig: Hätte ich geahnt, dass um so ein simples Problem eine so heiße Debatte entbrennt, hätte ich die Frage lieber nicht gestellt ;-). Ich glaube das Problem liegt z.T. daran, dass ich einfach nur T #Variable und nicht T MB #Variable geschrieben habe. Dadurch hat er alles in die Variable geschrieben, die komplette 32 Bit aus dem Akku.

@Johnij: Nein ich bin keine Frau, der Nick stammt aus einem SciFi-Roman von Lem.
 
Wen das Ergebnis bei Honest Annie 1103364096 ist, muss Arc_next_Nr ein Longint sein.

ist doch wurscht ob du da ein INT oder ein DINT lädst, solange es in den wertebereich von INT passt, was 49 definitiv tut. wenn du eine größere zahl nimmst wird diese als negativ gewertet, das könnte zu ungewünschten ergebnissen führen!

/I interessiert der AKKU1-H und der AKKU2-H vor der division nicht, es werden nur die 16bit der INT-Zahl ausgwertet PUNKT!

@johnij: dann lies du v**lpf**t*N!
 
@ vierlagig

Probiers auch mal aus. Lädst Du das Ergebnis in ein Doppelwort ist das Ergebnis so wie ichs gepostet habe.


Edit:

Weil irgendwo ja nun auch der Divisionsrest bleiben muss...
 
Zuletzt bearbeitet:
@Vierlagig: Hätte ich geahnt, dass um so ein simples Problem eine so heiße Debatte entbrennt, hätte ich die Frage lieber nicht gestellt ;-). Ich glaube das Problem liegt z.T. daran, dass ich einfach nur T #Variable und nicht T MB #Variable geschrieben habe. Dadurch hat er alles in die Variable geschrieben, die komplette 32 Bit aus dem Akku.

du kannst nicht MB #Variable schreiben, wenn schon MB [#variable] aber selbst dann ... MB ist übrigens kein INT, nur ein byte und eine INT zahl hat 2 byte, also ein wort also im schlimmsten fall ein MW
 
Mein Gott....

Der Wert Arc_Next_Nr ist ein Doppelwort. (zumindest bei dem angegebenen Ergebnis)

Das Beispiel:

L 5
L 3
/I
T MD X (Oder von mir aus T ArcNextNR)

führt nach anschließendem Laden
von ArcNextNr zu einem Ergebnis von 20001.
Wo ist Dein Problem? 2 im HW für den Rest, 1 als Ergebnis.


ist doch klar, dass im MD100 etwas verwirrendes steht, wird ja als DINT gewertet, schaust du dir aber MW100 und MW102 an, hast du REST und QUOTIENT

und da liegt ja auch das Problem. Wenn er es als Doppelwort (Dint) deklariert hat, ist der Wert halt nicht der, den er erwartet.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo ist Dein Problem? 2 im HW für den Rest, 1 als Ergebnis.

1. ich versteh dein problem nicht
2. solltest du die darstellungsform angeben ... deine ist HEX, wir reden hier von INT, vielleicht DINT, maximal DEZIMAL!
3. das einzige problem, dass bei einer verwendung eines doppelwortes auftreten könnte ist die interpretation als negative zahl oder andere
... aber nach ein paar zyklen kommt definitiv 0 raus!
 
Hallo,
ich habe eine Frage zur Division von INT Zahlen.

Mein Programm sieht so aus:
Code:
L     #ARC_NEXT_NR
L     2
/I                //Teile durch 2 
T     #ARC_NEXT_NR

Die Variable soll durch 2 geteilt und das Ergebnis in die Variable geschrieben werden. Dabei kommt jedoch nur Murks raus. Die SPS errechnet jedoch bei #ARC_NEXT_NR=49 ein Ergebnis von "1103364096". Ich hätte aber gerne 24 (Zahlen hinterm Komma wegschneiden).

Vielen Dank für jeden konstruktiven Beitrag.

Ich benutze momentan:
312C
Step 7 V5.33
Um mal auf die Eingangsfrage zurückzukommen....
Klar ist inzwischen, dass es sich bei der Variable von HonestAnnie nicht um eine 16 Bit Integer sondern um eine 32 Bit Doppelinteger handelt.

der code müsste hier also lauten:

Code:
L     #ARC_NEXT_NR
L     L#2
/D
T     #ARC_NEXT_NR

Dann funktioniert das auch...;)
 
Wenn irgendjemand hingeht, eine Variable als Dint deklariert, und

5 mittels /I durch 3 teilt, ist das Ergebnis, sofern er es in einem Dint abspeichert, nicht 1.

Um mehr gehts doch garnicht. Ob irgendwann mal 0 rauskommt ist für die Diskussion der letzten 10 Posts doch völlig nebensächlich.


Edit:

OHGN hats ja auch gerade geschrieben, wie richtig geht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Klar ist inzwischen, dass es sich bei der Variable von HonestAnnie nicht um eine 16 Bit Integer sondern um eine 32 Bit Doppelinteger handelt.

glaub ich nicht, dass das klar ist... aber möglich!

Um mehr gehts doch garnicht. Ob irgendwann mal 0 rauskommt ist für die Diskussion der letzten 10 Posts doch völlig nebensächlich.

nein, war es nicht, denn es war die ausgangssitution "da müßte doch wenigstens null rauskommen" stand da irgendwo ...

@honestannie: welchen datentyp hat denn nun deine nummer?

mit SRW 1 funktioniert das nämlich auch nur, solange der dividend <= 32767 ist
 
... wollt ja schon aufhören aber:

Wie kommst Du an Dein Ergebnis von

-> 1103364096 :confused:

Passt normalerweise nicht in 2 Byte ???
 
@ HonestAnnie !!

Böse !

In deinem Eingangsposting hast Du

/I

gepostet.

Das Ergebnis ->1103364096

bekommt man aber zufälligerweise genau dann, wenn man

L 49
L 2
/R
T IntErgebnis

rechnet. Kann es sein, dass das /I ein /R war?

Wenns wirklich nicht so war, bitte ich um Entschuldigung und verneige mich vor dem Gott des Zufalls....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe eine Frage zur Division von INT Zahlen.

Mein Programm sieht so aus:
Code:
L     #ARC_NEXT_NR
L     2
/I                //Teile durch 2 
T     #ARC_NEXT_NR

Die Variable soll durch 2 geteilt und das Ergebnis in die Variable geschrieben werden. Dabei kommt jedoch nur Murks raus. Die SPS errechnet jedoch bei #ARC_NEXT_NR=49 ein Ergebnis von "1103364096". Ich hätte aber gerne 24 (Zahlen hinterm Komma wegschneiden).

Vielen Dank für jeden konstruktiven Beitrag.

Ich benutze momentan:
312C
Step 7 V5.33

das Ergebnis "1103364096". :confused::confused::confused:

Das mit

L X_Int
L 2 (oder Srw 1)
/I
T L X_Int


muss das richtige Ergebnis liefern.

Wenn das Zyklisch aufgerufen ist--> 0

und wenn:
U X_Bool
FP Var_Shit
= Var_sch
U Var_sch
SPBN End

L X_Int
L 2 (oder Srw 1)
/I
T L X_Int
End: NOP 1


denn hat man wie gesagt das richtige Resultat (<>0)


johnij
 
@johnij:

1. code-tags!!!
2. T L x_int wird wohl nicht funktionieren
3. das da 0 rauskommt bestrittest du erst noch, freu mich für dich, dass es bei dir angekommen ist - herzlichen glückwunsch!
4.
Code:
*
        = Var_sch 
        U Var_sch
kann man weg lassen, da fühlt man sich nur Va_rscht

@honestannie:

screenshot!
 
Zurück
Oben