step5 Analogwert nominiert einlesen, FB Problem

kafrank

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und Guten Tag,
habe ein Problem mit einem Funktionsbaustein, der nach einem Umbau aufgetreten ist
und bitte um eure Hilfe. Zuerst ein paar Fakten:
Steuerung 135U CPU 928

Nun zum Problem:
habe am Eingang DW29 einen Rohwert anliegen der von einer Messung 0-300l/s erzeugt wird,
möchte diesen skaliert weiter verarbeiten (DW31).
Habe bei einem Eingangswert größer > 256l/s, bekomme ich aber am Ausgang DW31
einen Überlauf, und dieser fängt wieder bei 0 an zu schreiben. (Schiebefunktion SRW ?)
Habe den FB angehängt, mit der bitte ob jemand mal einen Blick darauf werfen könnte,
und mein Problem entdeckt...
Habe mit der Programmierung von FB`s leider sehr wenig zu tun, und komme mit den
Befehlen nicht so ganz klar....
Vielen Dank im voraus, Gruß Frank


;
SPA FB 100
NAME: AE
EING: DW 29
ANFW: KF +0
ENDW: KF +300
WERT: DW 31
BU : M 6.1
BUE : M 6.2
***

FB 100
;
NAME: AE
BEZ : EING EW
BEZ : ANFW DKF
BEZ : ENDW DKF
BEZ : WERT AW
BEZ : BU ABI
BEZ : BUE ABI
L =EING
SRW 6
L KF +64
>=F
SPB =M001
= =BU
LW =ANFW
T =WERT
BEB
M001: L =EING
SRW 6
L KF +320
<=F
SPB =M002
= =BUE
LW =ENDW
T =WERT
BEB
M002: L =EING
SRW 6
L KF +64
-F
LW =ENDW
XF
SRW 8
LW =ANFW
+F
T =WERT
BE
 
Hallo welche Umbauten wurden denn vorgenommen ?
habe mal kommentiert was ich weiß

Code:
SPA FB 100
NAME: AE 
EING: DW 29
ANFW: KF +0
ENDW: KF +300
WERT: DW 31
BU : M 6.1
BUE : M 6.2
***

FB 100
;
NAME: AE 
BEZ : EING EW     
BEZ : ANFW DKF
BEZ : ENDW DKF
BEZ : WERT AW
BEZ : BU ABI
BEZ : BUE ABI
L =EING                 //Lade Eingangswort
SRW 6                   // schiebe rechts um 6 bit
L KF +64                //lade Festpunktkonstante dezimal +64
>=F                      //vergleiche auf größer gleich 
SPB =M001            // wenn bdingung erfüllt prüfe ab m001 den Überlauf
= =BU                   //bei Bedingung nicht erfüllt, setze Fehlerbit BU ( vermutlich Bereichsunterschreitung )
LW =ANFW            //lade den Anfangswert
T =WERT               //transfer nach Ausgang 
BEB                      //  beende bedingt  [COLOR=#ff0000]( warum ??? VKE muß bis hierher 0 sein, ergo wird das VKE nie 1 )
[/COLOR]M001: L =EING       //Sprungmarke wenn keine Bereichsunterschreitung auftritt //Lade Eingangswort
SRW 6                  //siehe oben
L KF +320             // siehe oben
<=F                     //vergleiche auf kleiner gleich 
SPB =M002           //bei Bedingung nicht erfüllt, setze Fehlerbit BUE ( vermutlich Bereichsueberschreitung)
= =BUE                 //setze Fehlerbit BUE
LW =ENDW            // lade den Endwert
T =WERT              //transfer nach Ausgang 
BEB                      //  beende bedingt  ( warum ??? VKE muß bis hierher 0 sein, ergo wird das VKE nie 1 )
M002: L =EING        //siehe oben
SRW 6                   //siehe oben
L KF +64                //subtrahiere vom Eingangswort welches um 6 Stellen nach rechts geschoben wurde 64
-F                        //subtrahiere vom Eingangswort welches um 6 Stellen nach rechts geschoben wurde 64
LW =ENDW             //lade Endwert
XF                        // [COLOR=#ff0000]kenne ich nicht 
[/COLOR]SRW 8                  // schiebe nach recht um 8 Stellen
LW =ANFW            // lade den Anfangswert
+F                        //addition Konstante Festpunkt 
T =WERT               //transfer nach WERT
BE                        // beende

nach dem fehlerbild zu urteilen, fährst du in eine Bytegrenze. Außerdem frage ich mich, wenn du einen Überlauf bekommst, sollte dieser
doch mit dem Endwert beschrieben werden.

Es sind aber bestimmt noch einige S5 Gurus unterwegs, würde mich auch interessieren.

gruß thomas
 
Zurück
Oben