verschiedene ergebnisse aus 0b 35 addieren

Zuviel Werbung?
-> Hier kostenlos registrieren
... jede Lade- und Transfer-Operation kostet natürlich Zeit ... Das Code-Beispiel oben sollte in 5ms ohne weiteres bearbeitet werden können - auch mit anschließender Daten-Archivierung ...

Stell doch bitt mal deinen OB35 hier ein ... nur so zum Spaß ...
Um 10 ms zum "Überlauf" zu bringen mußt du eigentlich noch ein bißchen mehr aufgefahren haben ...
 
Hier mein ob35

Code:
  U(    
      L     "DB_V-Messung".Zeit
      L     "DB_V-Messung".Zeit_fuer_Umdrehung
      <R    
      )     
      U     "Motor Ein"
      SPBNB _001
      L     "DB_V-Messung".Zeit
      L     5.000000e-002
      +R    
      T     "DB_V-Messung".Zeit
_001: NOP   0

      U(    
      O(    
      L     "DB_V-Messung".Zeit
      L     "DB_V-Messung".Zeit_fuer_Umdrehung
      >=R   
      )     
      ON    "Motor Aus"
      )     
      SPBNB _002
      L     0.000000e+000
      T     "DB_V-Messung".Zeit
_002: NOP   0

Code:
 L     6.283185e+000
      L     "DB_V-Messung".Zeit_fuer_Umdrehung
      /R    
      T     #Winkelgeschwindigkeit      // w= (2*PI)/T 


      L     #Winkelgeschwindigkeit
      SQR   
      T     #SQR_Winkelgeschw


      L     #Winkelgeschwindigkeit
      L     "DB_V-Messung".Zeit
      *R    
      T     #Winkelgroesse             


      L     #Winkelgroesse
      L     2.000000e+000
      *R    
      T     #Winkelgroesse_2           

      L     #Winkelgroesse
      SIN   
      T     #Sinus


      L     -5.000000e-001
      L     #SQR_Winkelgeschw
      *R    
      L     #Sinus
      *R    
      T     #Beschleunigung_Teil_1


      L     #Winkelgroesse_2
      COS   
      T     #Cosinus

      L     1.666667e-001               //(r²/a)
      L     #SQR_Winkelgeschw
      *R    
      L     #Cosinus
      *R    
      T     #Beschleunigung_Teil_2


      L     #Beschleunigung_Teil_1
      L     #Beschleunigung_Teil_2
      +R    
      T     #Beschleunigung

      L     #Beschleunigung
      ABS   
      T     #Betrag_Beschleunigung

Code:
  UN    "Motor Ein"
      BEB   


      L     #Pointerwertigkeit
      L     1
      +I    
      T     #Pointerwertigkeit

      L     #Pointerwertigkeit
      L     300
      >I    
      BEB   

      AUF   "Beschleunigungsmessung"
      L     #Pointerwertigkeit
      SLD   5
      LAR1  
      L     #Betrag_Beschleunigung
      T     DBD [AR1,P#0.0]

      L     P#0.0
      T     #Pointerwertigkeit_1

      L     0
      T     "DB_V-Messung".Summe_Momentanbeschl

      L     300
M010: T     #Zaehler

      L     DBW [#Pointerwertigkeit_1]
      L     "DB_V-Messung".Summe_Momentanbeschl
      +D    
      T     "DB_V-Messung".Summe_Momentanbeschl

      L     #Pointerwertigkeit
      L     P#2.0
      +D    
      T     #Pointerwertigkeit
      L     #Zaehler
      LOOP  M010

      L     "DB_V-Messung".Zeit_fuer_Umdrehung
      L     "DB_V-Messung".Zeit
      >R    
      SPBN  M020

      L     0
      T     #Pointerwertigkeit
M020: NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vorschlag:
Im 3. Netzwerk summierst du in jedem Zyklus die Momentan-Beschleunigung auf. Das ist m.E. Unsinn. Du könntest Beim "Start Messung" die Summe auf "0" setzen und jeden neuen Wert des OB35 drauf rechnen. Dadurch erhälst du das gleiche Ergebnis, sparst aber enorm Zykluszeit.
Probier das doch einmal ...

Gruß
LL
 
"Start Messung" heisst für mich der Beginn eines Verfahr-Hubes.
Eine "Messung" würde nach meinem Verständnis für einen Hub oder ggf. auch für einen Hin- und Rückhub gelten.

Hier würde ich mir eine Einschalt-(Start-)Flanke bilden und mit dieser die Grund-Bedinegungen herstellen (Pointer auf 1, Summe auf 0, ...). Nun kann die Messung losgehen - du liest einen Wert nach dem anderen ein, berechnest die Beschleunigung und speicherst die Werte in deinen DB als Liste und addierst deinen Summenwert auf. Wenn du nun den Durchschnitt brauchst (auch zwischendurch), dann brauchst du nur den Summenwert durch die Anzahl der gebuchten Einträge teilen ... Soweit klar ...?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja genau das hab ich mir ja schon so gedacht.
was mir nur gedanken macht ist dass die pointerwertigkeit immer nach jedem zyklus ja auf null gesetzt wird. Aber das lässt sich realisieren indem ich abfrage ob eintagzähler auf 300, dann dividiere.
 
Ich glaube, wir philosophieren noch ein wenig aneinander vorbei ...:twisted:

Wieso setzt du den Pointer nach jedem OB-Aufruf wieder auf "0" ?
Du wolltest doch eine Liste vollschreiben - oder nicht ? Dann jedenfalls müßtest du den Pointer für den nächsten Aufruf in der Messung erhalten ...

Gruß
LL
 
sorry,
ich war missverständlich.
Mit einem Zyklus meinte ich eine Umdrehung meiner Kurbelwelle also bis der Pointer auf 300 erhöht ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK ...
Dann meinen wir beide das Gleiche ...
Ich bin mal auf deine Ergebnisse gespannt ...

Da du dich mit solchen Sachen beschäftigst ... hast du schon mal über SCL nachgedacht ? Da würde das Thema sehr viel eleganter zu lösen gehen ...

Gruß
LL
 
Ich kenne SCL leider überhaupt nicht.
Hab davon noch nichts gehört.
Da werd ich mich wohl mal informieren.
 
Wenn du vor Hochsprachen keine Angst hast, dann wäre das für dein laufendes Ding eine 1A-Alternative.
Vieles, was du jetzt kompliziert über Pointer löst, würde dir dann abgenommen werden. Ich mache deralei nur noch so ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi
ich stehe wieder mal vor einem problem.
Ich hatte jetzt die netzwerke so umstrukturiert, dass ich der meinung war es müsste passen und habe beim simulieren bemerkt dass die weckalarmzeit von ob35 noch auf den 5ms eingestellt war. Um dies zu ändern musste ich meine Hardwareauswahl aktualisieren, da ich im betrieb eine neuere Cpu in der hw festgelegt hatte und mein S7 zu Hause ja nicht auf dem neusten stand ist.
Also habe ich alles aktualisiert und wollte gerade weiter mache, doch jetzt habe ich festgestellt, dass in der hw meines projekts plötzlich gar keine cpu mehr ist und meine ob´s und fc´s somit auch verschwunden sind. Gibts ne möglichkeit das wieder herzustellen?
Vorher wurde mir bei der CPU so n gelbes Fragezeigen angezeigt. Jetzt ist alles weg.
Hast du irgendeinen Link parat, bei dem ich mich mal über scl informieren könnte. Ich hab schon im Netz geschaut aber ich finde leider nichts.
 
Hallo Stift,
zu dem von dir gestellten Problem habe ich keine Lösung. Für die Zukunft vielleicht den Vorschlag (hört sich blöd an, weiss ich) der regelmässigen Archivierung ...

Auch zum Thema SCL kann ich dir keine wirklich schönen Links anbieten.
Allerdings ist das Thema hier im Forum sehr reichlich angegangen worden.
Das du das zusätzlich käuflich erwerben musst, weisst du sicherlich. Ich habe für mich (meinen Betrieb) diese Anschaffung niemals auch nur eine Sekunde bereut. Es geht damit doch einiges eleganter - aber auch SCL-Scripts haben so ihre Tücken.

Ich kann dir dazu nur anbieten, dir auf gezielte Fragen zu antworten.
Vielleicht grundsätzlich :
SCL ist eine Script-Sprache, die ein Mischmasch zwischen VB und Pascla / Delphi darstellt. Alles, was du in SCL erstellst, wird letztlich in einen (stinknormalen) Step7-Code umgewandelt. Der Vorteil (aus meiner Sicht) ist, dass du dir bei Schleifen und ARRAY-Operationen, aber auch bei größeren Formeln, keine so große Arbeit mehr mit der Umsetzung machen musst.

Ich hoffe, ich konnte wieder ein bisschen Verwirrung stiften ...
Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

auch wenn ich noch nicht ganz kapiert habe worum es genau geht:

So wie du das machst ist es erstens ungenau, zweitens frisst es extrem viel Speicher bei 1Wert/5ms.
Ungenau ist es deshalb weil du den Istwert im Zyklus, die Auswertung aber im OB35 machst. Richtig wäre es die Berechnung im Zyklus zu machen und genau im Moment der Bearbeitung die beiden Werte Zeit/Ist-Wert zu übernehmen, oder aber auch im ob35 den Ist-Wert abzufragen, und zwar nicht aus dem DB, sondern von da wo er kommt (PEW,PED, Profibus o.Ä.)
Hängt aber davon ab was man mit den Werten hinterher machen möchte, und auch wie gross das Programm insgesamt mal werden wird.
Was nützt dir die Auflösung von 5ms wenn deine Zykluszeit 30ms beträgt, und du somit eh nur jeden 6 Zylus einen "frischen" Ist-Wert bekommst?

Davon ab sollte man bei der Benutzung vom OB35 noch ein paar andere Sachen beachten, wie z.B. sichern von AR1, AR2 und ggf. auch DB-Register. Sonst kann das eine nette Fehlersuche geben.

Torsten
 
Hi, es geht weiter mit meinem Programm
Ich hab wieder einen Fehler im OB35
Laut diagnosepuffer hab ich eine unterbrechungsstelle im anwenderprogramm. Was heist n das?
Das Programm hat ein paar sekunden funktioiert und ist dann wieder in stop. Meine längste zykluszeit beträgt 311ms.
 
Zuletzt bearbeitet:
ich würd den code auf ne endlos-schleife prüfen ... falsche oder nicht erfüllte abbruch-/ausstiegsbedingung
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab folgendes netzwerk mal programmiert aber irgendwie bin ich völlig raus. Ich bin mir nicht sicher ob das stimmt:
Code:
         L P#4.0
         T #Pointerwertigkeit_1
 
         L 0
         T #Summe_Beschleunigung
 
         L 300
M020: T #Zähler
 
         L #Summe_Beschleunigung
         +R
         T #Summe_Beschleunigung
 
         L #Pointerwertigkeit_1
         L P#8.0
         +R
         T #Pointerwertigkeit_1
         L #Zähler
         Loop M020

Ich glaub das ganze ist ziemlicher käse oder?
Das netzwerk ist ein auszug aus meinem ob35 und soll die funktion erfüllen dass die dbd0 - dbd300 aus dem db11 addiert werden.
 
also an dem obigem netzwerk liegt es schon mal nicht.
das hab ich jetzt gelöscht.
warum kompliziert wenn s auch einfach geht.
nochmal zur zykluszeit:
als taktzeit für meinen ob35 habe ich 10ms eingestellt.
die gemessene kürzeste zykluszeit beträgt 10ms
ebenso die letzte zykluszeit.
die längste zykluszeit beträgt allerdings 237ms.
liegt vielleicht daran dass mein ob35 zu groß ist?
 
... das deutet für mich auf die Auswertung hin ...
Wie auch immer ... du musst die Zykluszeit-Überwachung in der HW-Konfig-CPU-Zyklus entsprechend hoch legen ...

Du wolltest auch mal dein Programm (OB35) hier einstellen. Ich denke, wir sind da jetzt an einem Punkt, wo es schwer ist, etwas pauschal zu sagen ...

Gruß
LL
 
Zurück
Oben