Step 5 S5 Problem Zähler Wertbereich über 65535

Hüpfer

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi erstmal, ich bin was S5 angeht ziemlicher Laie, und habe folgendes Problem
ich möchte an einer S5 ( ausgelesen AG100U 95C ) einen "zähler" ( Speicher in MW übergabe an lauer in DW ) nutzen jenseits der 16 Bit, Wertbereich über 100 000 .
S5 komuniziert mit einer Lauer PCS 095 welche Doppeldatenworte kann und wo der Wert angezeigt werden soll.
Doppelwortverarbeitung geht aber bei der S5 Steuerung nicht, Ich habe noch nicht rausgekriegt wie der Overflow abgefragt und dann der Übertrag gemacht werden soll
( es sollen pro Zählung 80 dazukommen ) und den Wert auf 2 Merkerworte verteilen kann. Wäre es mit Multiplikation einfacher..?
Hilfe wäre schön
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum 64000?
Ich würde, wenn "Zähler" 1 >= 256:
1 auf "Zähler" 2 addieren und 256 von "Zähler" 1 subtrahieren.
Wenn die beiden INT zusammengefasst werden und z.B. das Ergebnis in MD 0 stehen soll:
MD 0 löschen
L W "Zähler" 1 nach MW 2 kopieren
L W "Zähler" 2 nach MW 1 kopieren

PS: habe die Grenze von "Zähler" 1 absichtlich an die ByteGrenze gelegt - das erspart Schieberei von "Zähler" 2 beim Zusammenführen!
 
Zuletzt bearbeitet:
Hier ein beispiel mit Dataworte DW0 = wert welche addiert wurde , DD2 = wert fur HMI DW2 = High Word von DD2 , DW3= Low Word von DD2
In Beispiel ist DB3 DD2 die HMI wert, In Step5 ist das normal DW2 und DW3
Diese code muste Sie in ein FB eintragen i.vm. der spunge nach OK

Code:
[COLOR=#2E8B57][FONT=Monaco]      AUF DB3                     //DB van teller  [/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     DW    3                //LW teller[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     0[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      <F    [/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      =    M255.0                 //LW is negatief[/FONT][/COLOR]

[COLOR=#2E8B57][FONT=Monaco]      L     DW    0                //teller aantal[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     DW    3                //LW teller[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      +F   [/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      T     DW    3                //LW teller[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      UN    M255.0[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      SPB   OK                     //LW was positief ->klaar[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     DW    3[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     0[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      <F    [/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      SPB   OK                     //LW is nog negatief ->klaar[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     DW    2                // HW teller[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      L     1[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      +F                             //HW met 1 verhogen[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]      T     DW    2[/FONT][/COLOR]
[COLOR=#2E8B57][FONT=Monaco]OK  :NOP 0
[/FONT][/COLOR]

In PDF datei dieser code in ein FB complett mit OB1 und DB , programm getesttet auf ein 115U CPU

Anhang anzeigen 000000000000048 20180707105306.pdf
 
Zuletzt bearbeitet:
Hallo, besten Dank für die Antworten, aber das Problem ist wie folgend beschrieben

Sprung Tralala
L MWX //gespeicherter Wert , 1Wort
L KF+80 // Wert erhöhe um 80
+F // addiere 80
T MWX // hier ist das Problem, was mache ich wenn ich in den Überlauf komme , überschreite ich nach Addition den Wert 32767 (Vrz. ), bzw 65535 ist der überzählige Wert verloren?
Tralala
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Sie in MW zahlen brauche Sie 2 MW's zb. MD2 = MW2 = High word und MW4 = Low word
Code:
Sprung Tralala
U M4.7     //LW = <0  Wert ab KH 8000
= M255.0
L MW4
L KF80
+F
T MW4
UN 255.0
SPB  Tralala
U  M4.7
SPB  Tralala
L MW2
L KF1
+F
T MW2
Tralala

MW 4 zahlt von KH 000 bis KH FFFF
wenn er wechselt von FFFF nach 0000 wurde MW2 mit 1 addiert. Die max positive zahl von MD2 = KH 7FFF FFFF = KF 2 147 483 647

EDIT: In Code M3.7 ersetzt durch M4.7 (= Bit 15 von MW4)
 
Zuletzt bearbeitet:
Ja ist klar die Abfrage ob das LW negativ ist ( also Überlauf ) und dann das Highword eins dazu addieren, aber was ist mit dem Rest ich addiere ja nicht 1 sondern 80 dazu
als Beispiel es befindet sich eine Stückzahl von 32700 im MW, der Rest ist dann 13, wie wird das berücksichtigt?

L MW4 // Wert ist 32700
L KF80
+F
T MW4 // Wort ist im Überlauf und negativ ( 16Bit =1 )
Abfrage on negativ
MW2 ein aufaddieren, soweit so klar

und wahrscheinlich MW 4 löschen?
oder vorher Rest ermitteln und dann in MW4 schreiben
 
Nein 32700 + 80 = 32780 aber in ein 16bits Word ist das ein negative Zahl aber wenn Sie sich zahlen bis de wert weiter positiver wurde musste Sie MW 2 mit 1 addieren. Wenn Sie meine Code eingeben könnte Sie durch zahlen bis 7FFF FFFF wenn Sie dann noch weiter geht wurde das MD2 negative.
MD 2 = M2.7 bis m2.0 M3.7 bis 3.0 M4.7...4.0 M5.7..5.0

Fehler in meine vorige Beitrag erstellt
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
und wahrscheinlich MW 4 löschen?
oder vorher Rest ermitteln und dann in MW4 schreiben
Nein!!! Nur das nicht! Finger weg von MW 4 !!!

Die Abhängigkeit des Übertrags von "Bit15-vorher" und "Bit15-nachher" ist mir etwas zu abenteuerlich.
Zwar nachvollziehbar, aber was passiert, wenn in der zu addierenden Zahl ebenfalls das Bit15=1 ist, diese also im Bereich 32768...65535 liegt bzw. im Bereich -1...-32768 (je nach Interpretation als INT oder UINT)?
Ohne die Möglichkeit, testen zu können, verlasse ich mich lieber darauf, dass der Herr Siemens das OV-Bit korrekt setzt und frage es mit SPO ab:
Code:
     L   MW 4   LoWord von "Zähler"
     L   MW 6   Summand
     +F         
     T   MW 4   LoWord von "Zähler"
     SPO =CRRY  Überlauf, wenn OV-Bit
     SPA =SKP   
CRRY L   MW 2   HiWord von "Zähler"
     L   KB 1   
     +F         
     T   MW 2   HiWord von "Zähler"
SKP  L   KB 0   falls erforderlich noch ...
     T   MW 6   ... Summand löschen
Gruss, Heinileini
 
Zuletzt bearbeitet:
Hi und Danke nochmal , wo ich auf dem Schlauch stehe ist : wird im Überlauffall ( und wo ) wird das Ergebnis hingeschrieben, oder bleibt es beim alten Wert

L MW 4 LoWord von "Zähler"
L MW 6 Summand
+F
T MW 4 LoWord von "Zähler" //Hier passt ja im Überlauffall nicht das Ergebnis hinein
SPO =CRRY Überlauf, wenn OV-Bit
SPA =SKP
CRRY L MW 2 HiWord von "Zähler"
L KB 1
+F
T MW 2 HiWord von "Zähler"
SKP L KB 0 falls erforderlich noch ...
T MW 6 ... Summand löschen
 
Das Ergebnis steht in MD2 alias MW2 und MW4 alias MB2 bis MB5.

Code:
     L   MW 4   LoWord von "Zähler" lesen
     L   MW 6   Summand lesen
     +F         beide addieren
     T   MW 4   LoWord von "Zähler" schreiben
     SPO =CRRY  Überlauf, wenn OV-Bit - weiter bei CRRY 
     SPA =SKP   kein Überlauf - weiter bei SKP
CRRY L   MW 2   HiWord von "Zähler" lesen
     L   KB 1   1 
     +F         draufaddieren
     T   MW 2   HiWord von "Zähler" schreiben
SKP  L   KB 0   falls erforderlich noch ...
     T   MW 6   ... Summand löschen

"falls erforderlich noch ... Summand löschen" bedeutet:

die beiden Befehle L KB 0 und T MW 6 sind "optional", d.h. je nachdem, wie Du die Befehle davor in Deinem Code verwendest, brauchst Du sie oder sie entfallen.

Fall A (die beiden Befehle entfallen):
Du durchläufst die Befehle nur, wenn der Summand aus MW 6 auch tatsächlich addiert werden soll.
In JoopBs KomplettBeispiel geschieht dies bei jeder steigenden Flanke des Merkers M 10.0 (s. in OB 1, bedingter Aufruf von FB 1).

Fall B (die beiden Befehle bleiben drin):
Die Addition wird in jedem ProgrammZyklus durchlaufen.
Es wird aber nur 0 addiert, es sei denn, Du schreibst Deinen Summand (z.B. 80) nach MW 6.
Dann wird dieser einmalig addiert - danach wird immer nur 0 addiert, bis Du wieder Deinen Summand (z.B. 80) nach MW 6 schreibst u.s.w. … .
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi und Danke nochmal , wo ich auf dem Schlauch stehe ist : wird im Überlauffall ( und wo ) wird das Ergebnis hingeschrieben, oder bleibt es beim alten Wert

L MW 4 LoWord von "Zähler"
L MW 6 Summand
+F
T MW 4 LoWord von "Zähler" //Hier passt ja im Überlauffall nicht das Ergebnis hinein
SPO =CRRY Überlauf, wenn OV-Bit
SPA =SKP
CRRY L MW 2 HiWord von "Zähler"
L KB 1
+F
T MW 2 HiWord von "Zähler"
SKP L KB 0 falls erforderlich noch ...
T MW 6 ... Summand löschen

Wenn man ein Word addiert hat man keine Uberlauf, zum best start die tasserechner von Windows 7 mit die einstellung programieren und die eingabe auf Dezimal und grosse Word
Mach die berechnung 409 * 80 =32720 ( 7EE0 Hex) darnach +80 = -32736 (=8020 hex) dan +80*409 = -16 (FFF0Hex) wen Sie nachmal +80 eingebe ist die auskumst +64 (=40 Hex) ( Aber Wenn Sie dasselbe macht in DW wurde nach die letste addierung das bit 16 (= bit 0 von HW) true.
Mach man derselbe eingabe mit die einstellung DWord bleibe die hex werte gleich bis der letste addierung da bekomst du 10040 Hex
Durch dass bit 15 von LW zu beobachten kan man kontrolieren of dass LW wechselt von negative nach positive und auf dass moment must man das HW mit 1 erhohen.
819x80.JPG820x80.JPG
 
@JoopB
Ich hatte bei Siemens in der TabellenHeft.pdf der 150U nachgesehen.
Anhang anzeigen S5-150U+F.pdf
Dort steht, DASS +F, -F, xF und :F das OV-Bit beeinflussen … aber dort steht nicht wann und wie.
Daraufhin habe ich unterstellt, dass eine Addition, deren Ergebnis zum Überlauf führt auch tatsächlich das OV-Bit setzt.
Überlauf heisst für mich auf jeden Fall, wenn ein höherwertiges (insbesondere nicht vorhandenes) Bit gesetzt werden müsste.
Anscheinend alles eine Frage der Interpretation bzw. "persönlichen Bedürfnisse" ;o)
Diese SiemensTabellenHeftchen waren mir jahrelang immer treue Begleiter, weil zuverlässig und kompakt, aber manchmal fehlen eben doch die Details.
Aber damals konnte ich testen und gucken, was wirklich passiert.

Deine ÜberlaufErkennung habe ich verstanden. Ich halte sie für eine Notlösung, weil sie einen Überlauf nicht zuverlässig erkennen muss, wenn Zahlen 32767 … 65535 addiert werden.
Wenn, wie hier im Fall des TE, "nur" jeweils 80 addiert wird, ist das natürlich kein Thema.

Also wieder zurück zur JoopB-basierten Version:

Code:
     ON  M 4.7  Bit15 von "Zähler" vor Addition     
     L   MW 4   LoWord von "Zähler"     
     L   MW 6   Summand (max 32767)
     +F         
     T   MW 4   LoWord von "Zähler"
     O   M 4.7  Bit15 von "Zähler" nach Addition
     SPB =SKP   
     L   MW 2   HiWord von "Zähler"
     L   KB 1   
     +F         
     T   MW 2   HiWord von "Zähler"
SKP  L   KB 0   falls erforderlich noch ...
     T   MW 6   ... Summand löschen
Den HilfsMerker braucht es nicht - das erledigt das Kurzzeitgedächtnis des VKE.
Für L KF+0 … L KF+255 kann man "sparsamer" schreiben L KB 0 … L KB 255 (2-Wort-MC5-Code ==> 1-Wort-MC5-Code).

Gruss, Heinileini

PS:
Der WindowsRechner ist OK, aber er sagt uns nicht, ob und wann S5 Überläufe erkennt ;o)
 
Zuletzt bearbeitet:
"Doppelwortverarbeitung geht aber bei der S5 Steuerung nicht" es gibt für SPS S5 (z.B. 90, 95, 100 usw.) besondere mathematische Bausteine (Gleitpunktarithmetik).
z.B. für Addition BIB=P71200-S 5017-A-1 Ich kann dir die Bausteine schicken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"Doppelwortverarbeitung geht aber bei der S5 Steuerung nicht" es gibt ... besondere mathematische Bausteine (Gleitpunktarithmetik).
Teils … teils … je nach "SprachRaum" der S5-CPU … ich habe bei S5 auch DoppelWortVerarbeitung kennengelernt und "praktiziert" - definitiv bei der 155-U - evtl. auch bei anderen CPUs - ich weiss es einfach nicht mehr.

Das erinnert mich an meinen Einstand in die S5-Programmierung, als ich zur Realisierung von "Adaptive Control" (Anpassung der VorschubGeschwingigkeit an die aktuelle FräsSpindelLeistungsAufnahme) in einer 8M mit einer 150-A (oder war's schon eine 150-K?) zuerst einige FBs für die GleitpunktArithmetik geschrieben und getestet habe.
Die sind aber leider nie wirklich zum Einsatz gekommen, weil das Thema "Adaptive Control" plötzlich wieder vom Tisch war. Schnüff.
Ich weiss auch nicht mehr, ob es damals für die CPU von Siemens (noch) keine entsprechenden FBs gab oder, ob nur ihr "AnschaffungsWiderstand" zu hoch war oder, ob der QuerEinsteiger-S5-Frischling auf die Probe gestellt werden sollte ...
 
Zurück
Oben