Negative Werte begrenzen

cboerm

Level-1
Beiträge
58
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Einrichtung, die mir einen Wert von -100 bis +100 ausgibt. Ich möchte diese Werte nun gerne auf -50 bis +50 begrenzen.

In Positiver Richtung klappt das auch ganz gut. Nur in die negative Richtung nicht.

Kann mit einer Helfen?

Bsp.Code:

L MD 54
L 50
>I
SPBN rest
L 50
T MD 54
rest: L MD 54
L -50
<I
SPBN bla
L -50
T MD 54
bla: NOP 0

Gruß
cboerm
 
Hallo,
ersetzt doch mal deine "I"'s durch "D"'s.
Also >D und <D - du vergleichst ja DINT's und nicht INT's ...

Gruß
Larry
 
Das liegt daran, dass Du mit Doppelworten arbeitest, Deine Zahlenwerte für den Vergleich aber nur als Wort lädst.
Probier mal:

Code:
L MD 54
[B][COLOR=red]L L#50[/COLOR][/B]
[COLOR=red]>D[/COLOR]
SPBN rest
[B][COLOR=red]L L#50[/COLOR][/B]
T MD 54
rest: L MD 54
[COLOR=red][B]L L#-50[/B][/COLOR]
[COLOR=red]<D[/COLOR]
SPBN bla
[B][COLOR=red]L L#-50[/COLOR][/B]
T MD 54
bla: NOP 0
 
Zuletzt bearbeitet:
... ich bin mir da jetzt nicht sicher ... meine aber mich erinnern zu können, dass eine Zahl beim Laden generell als DINT im Akku abgebildet wird. Ich kann das jetzt gerade nicht testen ...
Wenn dem so ist dann würde der "L L# " nur dann benötigt werden wenn die Zahl die INT-Größe (positiv oder negativ) überschreitet ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich bin mir da jetzt nicht sicher ... meine aber mich erinnern zu können, dass eine Zahl beim Laden generell als DINT im Akku abgebildet wird. Ich kann das jetzt gerade nicht testen ...
Wenn dem so ist dann würde der "L L# " nur dann benötigt werden wenn die Zahl die INT-Größe (positiv oder negativ) überschreitet ...

Gruß
Larry

grundsätzlich könnte man im wertebereich -100...100 mit INT arbeiten...
den rest kann ich im moment auch nicht beantworten ... bei mir läuft grad wieder der alte kampf step7 vs. vista :sw13:
 
Danke für eure schnelle Hilfe!

Ich habe die Lösung von vierlagig und Larry Laffer benutzt. Es läuft super.

Das ist echt ein super Forum. Macht weiter so.

Gruß
cboerm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na dann komm ich wohl zu spät.
Aber deine Lösung von dem 1.Thread war gar nicht so falsch!
Ich hab mal folgendes probiert:
Code:
      L     0
      T     MD    60     //MD60 löschen

      L     MD    54
      L     50
      >I    
      SPBN  rest
      L     50
      T     MD    60      //wenn MD54 größer als 50 ist, schreibe 50 in MD60
rest: L     MD    54
      L     -50
      <I    
      SPBN  bla
      L     -50
      T     MD    60     //wenn MD54 kleiner als -50 ist, schreibe -50 in MD60
bla:  NOP   0

Dat funktioniert zumindest mit dem Simulator.
 
P.S.: wenn ich einen Integer-Vergleicher benutze, dann interessiert das linke wort im akku nicht.

Er vergleicht bei dem Integer-Vergleicher nur das rechte wort aus den beiden akkus als integerzahl.

Code:
L     -50
L     L#-50
==I   
==     M      0.0
Der M0.0 ist 1, da die beiden rechten wörter der beiden akkus identisch sind.

Gruß wolder
 
und was sagst du nun hierzu :ROFLMAO:
das sollte verdeutlichen warum man sowas unterlassen sollte
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    3,9 KB · Aufrufe: 36
Zuviel Werbung?
-> Hier kostenlos registrieren
Da sind wir aber ausserhalb des integers!
Und wenn ich mich recht erinnere, dann will der Thread-ersteller nur Zahlen von -100 bis +100 benutzen....

Wobei die beiden Zahlen ein identisches Bitmuster haben!
Dann sind wir aber bei den Zahlensystemen bzw. -formaten.
Wollen wir da wirklich hin?!
 
Zuletzt bearbeitet:
schon. aber in dem prog auch

Code:
rest: L MD 54
L -50
<I
wer sagt denn, das md54 nur im intergerbereich liegen wird

entweder man vergleich auf D
oder man arbeitet mit MW54
 
ich habe eine Einrichtung, die mir einen Wert von -100 bis +100 ausgibt.
Natürlich würde ich auch sagen, dass er nur mit MW arbeiten sollte, da er nur im Integerbereich arbeitet. Zumindest sagt er das.

Er hats ja geändert und jetzt läufts ja. Also alles gut.

MFG wolder
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist schon schön was hier so alles geschrieben wird, dabei ist die Erklärung ja so einfach ;)

Bei INT steht das Vorzeichen in Bit 7, bei DINT in BIT 15 und genau deswegen sollte man schon sauber programmieren

wie Volker schon sagt,
"entweder man vergleich auf D
oder man arbeitet mit MW54"

Und dann natürlich auch mit L#
 
Ist schon schön was hier so alles geschrieben wird, dabei ist die Erklärung ja so einfach ;)

Bei INT steht das Vorzeichen in Bit 7, bei DINT in BIT 15 und genau deswegen sollte man schon sauber programmieren

wie Volker schon sagt,
"entweder man vergleich auf D
oder man arbeitet mit MW54"

Und dann natürlich auch mit L#
Mein lieber Freund,

wenn Du mir nun erklärst, wo bei der Integerzahl mit dem Bitmuster FFFF bzw. beim DINT mit dem Muster FFFF FFFF das Vorzeichen steht, dann darfst Du weiterhin behaupten: "das ist doch so einfach"!
 
:ROFLMAO:
FFFF ist ja eigentlich nur eine andere Darstellungsart, nämlich HEX-Darstellung was dem Binären 1111 1111 1111 1111 entspricht bzw. dem Integerwert -1, wobei im Integerformat immernoch das ganz linke Bit das Vorzeichenbit ist.

Dementsprechend ist das linke Bit aus dem ganz linken F immer noch das Vorzeichenbit bei FFFF sowie auch bei FFFF FFFF.

Au sch..., ich war ja gar nicht gemeint.

gruß wolder
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit dem Wertebereich stimmt nicht ganz. Es sollte nur ein Beispiel sein. Der Tatsächliche Wertebereich beträgt -9000 bis 9500.

Wusste nicht das es für so große Aufregung sorgt.


Nochmal Danke an alle die sich an diesem Thread geäußert haben.
 
Zurück
Oben