verschiedene ergebnisse aus 0b 35 addieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Also der codeschnipsel ist aus meinem fc.
dort wird der betrag der geschwindigkeit berechnet. dieser betrag der geschwindigkeit steht in abhängigkeit von der zeit t, d.h. er wird in meiner formel aufgegriffen.

Dadurch dass der wert von 0b35 mit einfließt ist der fc ja auch zyklisch durchlaufend oder?

Wäre es vielleicht einfacher wenn ich meinen kompletten fc nehmen würde und in den ob 35 einfügen würde?
 
Also der codeschnipsel ist aus meinem fc.
dort wird der betrag der geschwindigkeit berechnet. dieser betrag der geschwindigkeit steht in abhängigkeit von der zeit t, d.h. er wird in meiner formel aufgegriffen.

das nächste mal einfach dazu schreiben

Dadurch dass der wert von 0b35 mit einfließt ist der fc ja auch zyklisch durchlaufend oder?

der ob35 wird zu bestimmten zeiten einmal durchlaufen, deine fc mit jedem cpu-zyklus

Wäre es vielleicht einfacher wenn ich meinen kompletten fc nehmen würde und in den ob 35 einfügen würde?

nein, denn du solltest den ob35 so klein wie möglich halten IMHO
aber schau dir nochmal meinen letzten beitrag an, da gibts code... beachte aber das help_flag nicht im temp_bereich deiner FC liegen kann...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
könntest du mir den code ein bisschen erläutern?
Für mich ist das absolutes neuland.
Ich hab mal gehört dass der akku irgendein zwischenspeicher ist aber was das mit meinem fc aus sich hat... -kein plan.
Was bedeutet denn diese 8.0e0000000+000?
 
könntest du mir den code ein bisschen erläutern?
Für mich ist das absolutes neuland.
Ich hab mal gehört dass der akku irgendein zwischenspeicher ist aber was das mit meinem fc aus sich hat... -kein plan.
Was bedeutet denn diese 8.0e0000000+000?

aber klar kann ich, wenn dir F1 zu weit weg ist :rolleyes:

Code:
      U     #TRIGGER             //berechnungsfreigae
      FP    #HELP_FLAG           //auf positive flanke prüfen
      SPN   _001                 //denn nur dann wollen wir rechnen
                                 //ansonsten springen wir zu label _001 und machen nichts
      L     #ACCU_1              //ACCU sind die variablen aus MEINEM baustein
      L     #ACCU_2              //bei dir könnte es geschwindigkeit eins bis
      +R                         //zwölfzig sein
      L     #ACCU_3              //egal
      +R                         //die addieren wir hier jedenfalls erstmal
      L     #ACCU_4
      +R    
      L     #ACCU_5
      +R    
      L     #ACCU_6
      +R    
      L     #ACCU_7
      +R    
      L     #ACCU_8                //letzter wert
      +R                           //addiert
      L     8.000000e+000          //und da es alles real zahlen waren und auch ne realzahl
      /R                           //rauskommen soll dividieren wir hier mit real anzahl der
      T     #OUTPUT                //summierten elemente und schreiben es in den output - fertig!
_001: NOP
 
Zuletzt bearbeitet:
so wie ich dich verstehe sind die akkus die einezelergebnisse.
problem ist aber dass ich keine feste anzahl von rechenschritten habe.
d.h. ich habe so viele rechenschritte wie "Zeit_pro_Umdrehung" durch 0,05s da ich in meinem ob35 immer 50ms dazuzähle.
d.h. bei 40 u/min hätte ich 30 Einzelergebnisse die ich summieren will
bei 20 u/min hätte ich 60 Einzelergebnisse
usw.

damit ändert sich ja auch die triggerzeit.
d.h. bei 40 u/min >>> höre nach 1,5s auf zu summieren
bei 20 u/min >>> höre nach 3s auf zu summieren
usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht mal ein anderer Vorschlag in Anlehnung an den Beitrag von Vierlagig :

Du machst dir einen DB-Messwerte in dem du Platz lässt für die max-. Anzahl von Messwerten. In diesen DB trägst du den aktuellen Messwert an der ersten freien Stelle ein und erhöhst den Eintrag-Zähler. Wenn deine Fahrt abgeschlossen ist, dann machst du eine Komplett-Auswertung und löscht den DB wieder. Hier brauchst du dann auch nicht das Trigger-Intervall im OB35 mitzurechnen ...
Hieraus ergibt sich noch zusätzlich die Möglichkeit, die aufgenommenen Messwerte auf einer entsprechenden Visu darzustellen.

Vielleicht wäre das ja etwas für dich für die Zukunft.

Gruß
LL

@Vierlagig:
Die Variante mit dem ABS-Befehl kannte ich noch nicht ... Da habe ich dann auch noch etwas dazu gelernt ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich versteh leider schon wieder nicht.
Du machst dir einen DB-Messwerte in dem du Platz lässt für die max-. Anzahl von Messwerten. In diesen DB trägst du den aktuellen Messwert an der ersten freien Stelle ein und erhöhst den Eintrag-Zähler.
Da müsste ja dann jedes Ergebnis ein eingendes Doppelwort in meinem DB haben oder versteh ich das falsch?
Wie müsste ich das dann adressieren?
 
Es funktioniert:D
Ich hab die sache allerdings anders gelöst.
Ich habe mich an einen anderen Tipp von dir erinnert, den ich bisher noch nicht umsetzen konnte.
http://www.sps-forum.de/showthread.php?t=18030&page=2

v=s/t

Wenn alles so einfach wäre...

Danke für deine Mühe mir die variante mit dem db zu erklären, aber ich glaube das ist mir im Moment noch etwas zu hoch.
Das was Volker da zu vermitteln versuchte sind für mich böhmische dörfer.
ich hab kein wort verstanden.
allerdings hat mich der ehrgeiz jetzt gepackt.
da werd ich mich wohl mal näher mit beschäftgen.
http://www.sps-forum.de/showthread.php?t=18030&page=2

 
Zuviel Werbung?
-> Hier kostenlos registrieren
... allerdings hat mich der ehrgeiz jetzt gepackt.
da werd ich mich wohl mal näher mit beschäftgen.

Das ist gut ...

Danke für deine Mühe mir die variante mit dem db zu erklären, aber ich glaube das ist mir im Moment noch etwas zu hoch.
Das was Volker da zu vermitteln versuchte sind für mich böhmische dörfer.
ich hab kein wort verstanden.

Wenn du damit loslegst, dann erklären sich warscheinlich viele Sachen von selbst und die anderen fragst du dann. Dann wird das schon was. Der Beitrag von Volker ist eigentlich schön gemacht ... aber denk dran ... Rom wurde auch nicht an einem Tag erbaut ...

Gruß
LL
 
ich hab mich jetzt das wochenende etwas mit diesen pointern beschäftigt.
Nun möchte ich einen Fc programmieren in dem ich festlegen, dass die einzelergebnisse die ich immer abhängig von db10.dbd0 errechne auf ein eigenes dbd im db "Daten" geschoben werden. z.B.
ergebnis 1--> dbd0
ergebnis 2--> dbd4
uws.
bis mein zyklus einmal durch ist.
Wenn dann alle Einzelergenisse auf meinem DB sind kann ich dann ja die Auswertung ohne probleme fahren.

Ich habe jetzt schon einen kleinen teil programmiert, doch jetzt komme ich nicht weiter wie ich mit den pointern umgehen muss.

Wie kann ich das anstellen das mein einzelergebniss immer auf das nächste freie dbd schiebe.
Ich habe mir gedacht ich zähle immer weiter mittels #Pointerwertigkeit bis ich einmal durch bin.
Wie würdet ihr an dieser Stelle jetzt weiter machen?

Code:
      L     0.000000e+000
      L     DB10.DBD    0
      ==R   
      SPBNB ende
      L     0
      T     #Pointerwertigkeit
ende: NOP   0

      L     #Pointerwertigkeit
      L     1
      +I    
      T     #Pointerwertigkeit

      AUF   "Daten"
      L     #Pointerwertigkeit
      SLD   3                           //pointer erzeugen
      LAR1                              //in das Adressregister laden
      L     #Ergebnis
      T     DBB [AR1,P#0.0]
 
Code:
 L     0.000000e+000
      L     DB10.DBD    0
      ==R   
      SPBNB ende
      L     0
      T     #Pointerwertigkeit
      L 20
      t # loopconter
ende: NOP   0
 
      L     #Pointerwertigkeit
      L     1
      +I    
      T     #Pointerwertigkeit
 
      AUF   "Daten"
      L     #Pointerwertigkeit
      SLD   [COLOR=red]5  [/COLOR]                        //pointer erzeugen [COLOR=red]SLD 5(ist wie mal 4)[/COLOR]
      LAR1                              //in das Adressregister laden
      L     #Ergebnis
      T     DB[COLOR=red]B [/COLOR][AR1,P#0.0] [COLOR=red]// sollte das nicht DBD heißen?? real und byte vertragen sich glaub ich nicht so recht[/COLOR]
[COLOR=#ff0000]    L #loopcounter[/COLOR]
[COLOR=#ff0000]    L 1[/COLOR]
[COLOR=#ff0000]    -I[/COLOR]
[COLOR=#ff0000]    T #loopcounter[/COLOR]
[COLOR=#ff0000]    L 1[/COLOR]
[COLOR=#ff0000]    >=I[/COLOR]
[COLOR=#ff0000]    SPB ende[/COLOR]

probier das mal.denke das sollte funktionieren.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwo steckt anscheinend noch ein Fehler.
Ich wollte den Code mal ausprobieren aber die CPU geht sofort in stop. Sobald ich obigen code wieder entferne funktioniert wieder alles.
 
wie viele werte mußt du in den db speichern??
bzw. wie viele dbd hast du im DB10?
bei dem code werden 20 dbd beschrieben.wenn es die nicht gibt,geht die cpu in stop

L 0.000000e+000
L "SPS_Forum".DB_VAR
==R
SPB ende
L 0
T #Pointerwertigkeit
ende: NOP 0
L #Pointerwertigkeit
L 1
+I
T #Pointerwertigkeit
AUF "SPS_Forum"
L #Pointerwertigkeit
SLD 5 //pointer erzeugen SLD 5(ist wie mal 4)
LAR1 //in das Adressregister laden
L #Ergebnis
T DBD [AR1,P#0.0] // sollte das nicht DBD heißen?? real und byte vertragen sich glaub ich nicht so recht
L 20
L #Pointerwertigkeit
<=I
SPBN end1
L 0
T #Pointerwertigkeit
end1: NOP 0
also wenn ich einen DB erzeuge mit 20 DBD (adresse 0.0 bis 80.0) dann funktioniert es.
 
Zuletzt bearbeitet:
Fehler entdeckt!
Ich hab nicht 20 DBD erstellt sonden nur DBD mit den Adressen 0.0 bis 20.0!
Dankeschön
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, also ich hab jetzt letzte woche das mit dem pointer in einem test-programm ausprobiert und das hat ja einwandfrei geklappt.
Nun habt ihr mir doch empfohlen dass ich meine einzelergebnisse auf den db mittels eines pointers legen soll um die durchschnittsgeschwindigkeit zu errechnen.
Mein problem ist nun dass ich bemerkt habe, dass wenn ich eine umdrehungsfrequenz von 10 1/min habe ich 240 dbd vom datentyp real bräuchte um alle einzelergebnisse zu speichern.
Ist das nicht ein bisschen viel?
In der Step 7 hilfe habe ich leider nicht gefunden wieviele dbd ein datenbaustein maximal haben kann.
 
Mein problem ist nun dass ich bemerkt habe, dass wenn ich eine umdrehungsfrequenz von 10 1/min habe ich 240 dbd vom datentyp real bräuchte um alle einzelergebnisse zu speichern.
Ist das nicht ein bisschen viel ?

Die üblichen Kurven, die ich so erfasse, haben normalerweise 200 bis 400 Einträge. Das schaffst du m.E. mit jeder der 300er CPU's. Außerdem ist diese Datenmenge auch noch nicht zu groß als Belastung für die Daten-Übertragung zur Visu.

Wenn du Platz sparen möchtest, dann könntest du noch überlegen, ob du wirklich unbedingt REAL-Zahlen brauchst, oder ob du mit INT's nicht genauso gut bedient bist ...

Gruß
LL
 
Zurück
Oben