Datenspeicherung im DB in zeitlichen Intervallen

Das MW 20 fängt bei Inhalt 0 an.

VL zählt eins dazu und speichert es nicht wieder ab, deswegen wird nur ein DBWort beschrieben.

Behaupte ich jetzt mal einfach so.

L MB 20
+ 1
T MB 20

könnte glaube ich helfen.
 
Zuletzt bearbeitet:
Das MW 20 fängt bei Inhalt 0 an.

VL zählt eins dazu und zieht später wieder ab, deswegen wird nur ein DBWort beschrieben.

Es fehlt die Initialisierung des MW 20.

Behaupte ich jetzt mal einfach so.

wah? wo zieh ich was ab? siehst du dich noch?

ja, MB20 fängt bei null an, pro takt einen drauf, bei 9 knallen wir es auf -1, dadurch beim nächsten takt 0 ...

man könnte es auf -1 für den ersten start initialisieren, sehe aber keine notwendigkeit dafür...
 
Der Grundaufbau ist von so einem Übungsprojekt zum Analogbaustein und der Rest ist dazu gebastelt^^

IM FC1 ist der FC105 drin und im FC2 der FC106


FC1
Code:
 U     M      4.0
      =     L      4.0
      BLD   103
      U     E      0.1
      SPBNB M001
      CALL  "SCALE"
       IN     :=PEW292
       HI_LIM :=1.000000e+001
       LO_LIM :=0.000000e+000
       BIPOLAR:=L4.0
       RET_VAL:=MW102
       OUT    :=MD104
M001: NOP   0


      L     MD   104
      T     MW    30
FC2
Code:
      U     M      4.0
      =     L      3.0
      BLD   103
      U     E      0.0
      SPBNB _001
      CALL  "UNSCALE"
       IN     :=MD104
       HI_LIM :=1.000000e+001
       LO_LIM :=0.000000e+000
       BIPOLAR:=L3.0
       RET_VAL:=MW108
       OUT    :=PAW288
_001: NOP   0
FC3

Vielleicht habt ihre gelich ein paar Verbesserungsvorschläge
 
Ja.

Code:
U M 0.5
FP M 10.0
SPBN M001
L MB 20
+ 1
[COLOR=red]T MB 20
[/COLOR]L 16
*I 
LAR1 
AUF DB 10
L MW 30
T DBW [AR1,P#0.0]
L MB 20
L 9
==I 
SPBN M001
L -1
T MB 20
M001: NOP 0

Siehe oben.

griele Füße dtsclipper
 
Ah jetzt klappt es, fast.
Er schreibt jetzt so wie er soll aber so bald er durch ist und oben wieder anfangen müsste geht die S7 in Stop
 
Ok jetzt funktioniert alles .

aber eine Frage hab ich jetzt noch: Wenn ich jetzt den Code nochmal benutzen will, was muss ich alles ändern damit das funktioniert?
Ich vermute mal das was ich Blau makiert habe aber was noch.

Code:
  U M 0.5 
FP M 10.0 
SPBN M001 
[COLOR=Blue]L MB 21 [/COLOR]
+ 1 [COLOR=red]
[COLOR=Blue]T MB 2[/COLOR][/COLOR][COLOR=Blue]1[/COLOR]
L 16 
*I  
LAR1  
[COLOR=Blue]AUF DB 12 [/COLOR]
[COLOR=Blue]L MW 50 [/COLOR]
T DBW [AR1,P#0.0] 
[COLOR=Blue]L MB 21 [/COLOR]
L 9 
==I  
SPBN M001 
L -1 
[COLOR=Blue]T MB 21 [/COLOR]
M001: 
NOP 0
 
Zuletzt bearbeitet:
Wenn's im gleichen Baustein sein soll, bitte auch die Sprungmarke (M001).
 
.. zumindestens lässt sich die -1 so nicht da rein laden. Da der TE Anfänger ist, wollte ich nicht mit AKKU1 L-H und L-L (oder doch andersrum?) anfangen, deswegen diese etwas unvollständige Behauptung.

Funktionieren eigentlich INT-Vergleiche mit einem negative belegten Byte?
Wenn ich es kurz überschlage eher nicht, oder täusche ich mich?
 
Funktionieren eigentlich INT-Vergleiche mit einem negative belegten Byte?
Wenn ich es kurz überschlage eher nicht, oder täusche ich mich?
Jaaa! So 'rum wird ein Schuh 'draus.
INT-Vergleiche auf negative signed-BYTE funktionieren nicht und auch INT-Arithmetik funktioniert nicht wie erwartet.
Wenn man will, daß bei Addition einer +1 auf signed-BYTE -1 eine 0 wird, dann muß man INC 1 benutzen (bei INT-Addition erhält man 256 statt 0).
Das ist auch der Grund, warum der Code von VL höchstwahrscheinlich zum CPU-Stop wegen Zugriffsfehler/Bereichlängenüberschreitung führt.
So sollte der Code aussehen (oder statt MB20 besser überall MW20 benutzen):
Code:
U M 0.5
FP M 10.0
SPBN M001
L MB 20
[COLOR="Red"]INC 1[/COLOR]
T MB 20
L 16
*I
LAR1
AUF DB 10
L MW 30
T DBW [AR1,P#0.0]
L MB 20
L 9
==I
SPBN M001
L -1
T MB 20
M001: NOP 0

Harald
 
Nach dem das Programm jetzt nun einwandfrei läuft bin ich ein bisschen am erweitern. :wink:
Wollte jetzt kein neuen Thread aufmachen aber meine zwei Fragen:
Wie kreige ich den am besten den Max Wert herraus und gibt es eine Möglichkeit den Mittelwert einfacher zu ermitteln als meine jetztige Version:
Code:
      AUF   DB    10
      L     DBW    0
      L     DBW    2
      +I    
      L     DBW    4
      +I    
      L     DBW    6
      +I    
      L     DBW    8
      +I    
      L     DBW   10
      +I    
      L     DBW   12
      +I    
      L     DBW   14
      +I    
      L     DBW   16
      +I    
      L     DBW   18
      +I    
      L     DBW   20
      +I    
      L     DBW   22
      +I    
      L     DBW   24
      +I    
      L     DBW   26
      +I    
      L     DBW   28
      +I    
      L     DBW   30
      +I    
      L     DBW   32
      +I    
      L     DBW   34
      +I    
      L     DBW   36
      +I    
      L     DBW   38
      +I    

      L     20
      /I    
      T     MB    50
 
Hallo,

Das ganze über eine Schleife laufen lassen (weniger Code)

und das Ergebnis nicht unbedingt in ein Byte rammen, eher Word.
 
Könntest du mir das vielleicht erklären?^^
Bin ja noch am Anfang der S7 Welt
 
Zuletzt bearbeitet:
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…