Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Beschleunigunssensor liefert keine eindeutigen Werte

  1. #1
    Registriert seit
    04.03.2011
    Beiträge
    13
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe einen Beschleunigungssensor, welcher einen Messwertbereich von +-50 g (Erdbeschleunigung) erfassen kann. Dieser ist an eine Beckhoffklemme KS3001 angeschlossen und die SPS ist eine CX1010.

    Ich habe den Sensor über eine Teststrecke in einem Behälter fahren lassen und Messwerte aufgenommen und mit Excel visualisiert. Siehe Dateianhang Zwischenablage.

    Leider ergibt sich bei jeder Messfahrt eine komplett neue Grafik mit anderen Beschleunigungsspitzen. Eigentlich wollte ich anhand der Beschleunigungen Fehler/zu harte Stöße in der Anlage erkennen. Beispielsweise wenn eine Förderrolle fehlt und Behälter sehr unsanft durchgefördert wird.

    Nach langem Überlegen habe ich mir gedacht, dass vielleicht ein Fehler in der Programmierung vorliegt. Programmierung als code.txt siehe Anhang.

    In der Programmierung habe ich eine If-Schleife(i = 1 bis 5) die hochzählt und die Erfassten Sensorwerte in ein Array (Array [1] bis [5]) schreibt. Anschließend wird das Array in String umgewandelt und gespeichert. Daraufhin wird die If-Schleife wieder aufgerufen usw...
    Ist an dieser Vorgehensweise etwas falsch?

    Ich weiß, dass das ein bisschen viel ist, aber wenn jemand eine Idee hat, wäre ich sehr dankbar.

    Gruß Gluttony
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Beschleunigunssensor liefert keine eindeutigen Werte  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    ich habe da ein Verständnisproblem mit deinem Vorhaben.
    In welchem Verhältnis steht das dargestellte Diagramm zu der Aussage, dass du (nur) 5 Werte aufzeichnest ?
    In welchem Intervall liesst du den Sensor ein ?
    Da ich nicht so der Beckhoff-Mann bin - ist die genannte Klemme die Richtige für den Sensor (wegen des Auflösungsbereichs) ?

    Ich würde da in etwa so machen :
    Während der gesammten Aufzeichnungszeit in einem sehr kurzen Intervall (<= 2 ms) den Sensor abfragen und in ein entsprechend groß dimensioniertes Array einlesen. Wie lange dauert dein Mess-Vorgang ?

    Gruß
    Larry

  3. #3
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard

    Man kann anhand der Grafik nichts sehen, denn es fehlt die Skalierung.

    50g ist zuviel. Du wirst damit wohl in erster linie das Sensorauschen messen. Beschleunigungen in unserer Welt spielen sich in der Regel bis 1g ab.

    Bei einer guten Messung auf einem Wagen, solltest du am Anfang der Fahrt eine Art Rechteck haben und natürlich das selbe mit anderem Vorszeichen auch am Ende der Fahrt.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Zitat Zitat von drfunfrock Beitrag anzeigen
    Beschleunigungen in unserer Welt spielen sich in der Regel bis 1g ab.
    Na ... Na ...
    Ich kenne die Aufgabe zwar nicht aber dem kann ich trotzdem widersprechen - sorry ...
    Also 10 g werden normalerweise spielend erreicht ...

  5. #5
    Gluttony ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2011
    Beiträge
    13
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das mit den 5 Werten habe ich so gemacht, damit die Werte vom Sensor ins Array geschrieben werden und dann die Werte des Arrays 1-5 in einen String geschrieben werden, der dann in eine TXT-Datei gespeichert wird.

    Damit das ganze fortläuft, rufe ich die If-Schleife erneut auf usw.
    Der Zeitraum für eine ganze Messung soll später bis zu einer Stunde gehen.
    ---
    Die genannte KS3001 wurde mir von Beckhoff selbst empfohlen, sie weist zwar nicht beste Auflösung auf, sollte aber ausreichen.
    ---

    Das Sensorrauschen ist ziemlich gering, dass die Nulllinie nicht bei Null liegt, geht auf das Offset des Beschleunigungssensors zurück.
    Bei den kürzeren Messfahrte oder beim Reinzoomen in meine Excel-Tablle sind die Anfahr und Abbremsbeschleunigungs-Rechtecke eindeutig zu erkennen.
    ---
    10 g sind locker drin, in der Grafik die ich angehängt habe, haben wir sogar bis über 40 g Beschleunigungsspitzen.



    Ich glaube mitlerweile, dass ein Fehler mit der If-Schleife zusammenhängen kann, aber ich habe da nicht genung Programmierkenntnisse um das zu beurteilen.
    Muss die If-Schleife für das Einlesen der Werte in Array höher gestellt werden, also nicht nur 5 sondern vielleicht 50 bevor "gespeichert" wird.

    Gruß gluttony
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Gluttony (05.08.2011 um 12:07 Uhr)

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    In welchem Verhältnis steht das dargestellte Diagramm zu der Aussage, dass du (nur) 5 Werte aufzeichnest ?
    In welchem Intervall liesst du den Sensor ein ?
    Ich wiederhole meine Fragen von eben (siehe oben) ...

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Gluttony Beitrag anzeigen
    Ich glaube mitlerweile, dass ein Fehler mit der If-Schleife zusammenhängen kann, aber ich habe da nicht genung Programmierkenntnisse um das zu beurteilen.
    Muss die If-Schleife für das Einlesen der Werte in Array höher gestellt werden, also nicht nur 5 sondern vielleicht 50 bevor "gespeichert" wird.
    Das Schreiben der Daten kann durchaus mehr als einen Programmzyklus dauern. So wie es jetzt programmiert ist, wird aber weiterhin jeden Zyklus lang die Variable "Datensatz" neu beschrieben, d.h. auch während der Inhalt in die Textdatei geschrieben wird.

    Ich würde es folgendermaßen machen.
    Einen ausreichend großen Puffer anlegen der die Zeit überbrückt die für das Schreiben der Datei benötigt wird.
    Also z.B. 1 Sekunde lang im Puffer1 halten, wenn Puffer1 voll, evtl. in einem Puffer2 umkopieren.

    Dann kann quasi parallel die Messwertaufzeichnung in den Puffer1 laufen, und im anderen Schritt dazu parallel das Erstellen der Textdatei mit den Daten aus Puffer2.

  8. #8
    Gluttony ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2011
    Beiträge
    13
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    In welchem Intervall liesst du den Sensor ein ?
    Der Sensor wird immer eingelesen, ich glaub ich verstehe die Frage nicht richtig.

    Mein Programmcode in ganz kurz:

    IF i<5 THEN
    i:=i+1;
    Beschleunigung := INT_TO_REAL(Beschleunigungssensor_1)
    WertinArray[i]:= Beschleunigung;
    IF i=5 THEN
    i:=0;
    END_IF


    Datensatz := REAL_TO_STRING(WertinArray[1]); + alle weiteren Werte in Array 2-5
    und deren Speicherung als "Datensatz" in Datei.
    --------
    Nach Thomas seiner Aussage, würde ich sagen, dass meine Messwerte teilweise überschrieben werden, während sie gespeichert werden.

    Ich dachte, dass die SPS immer erst einmal durchläuft, also wird WertinArray[1] erst wieder überschrieben, wenn es auch gespeichert wurde. Warum sollte die If-Schleife direkt neu starten, bevor die Werte des Arrays in den "Datensatz" kopiert wurden?

    Gruß von einem verwirrten Gluttony

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Gluttony Beitrag anzeigen
    Ich dachte, dass die SPS immer erst einmal durchläuft, also wird WertinArray[1] erst wieder überschrieben, wenn es auch gespeichert wurde. Warum sollte die If-Schleife direkt neu starten, bevor die Werte des Arrays in den "Datensatz" kopiert wurden?
    Was ist eine If-Schleife?

    Bei dir wird das Array WertinArray jeden Zyklus mit einem neuen Wert versorgt.
    Der String Datensatz enthält ebenfalls in jedem Zyklus die aktuellen Werte aus dem Array, auch wenn diese gar nicht zum Schreiben benötigt werden.

    Wenn 5 Werte in dem Array sind triggerst du den Schreibvorgang an.
    Dieses hast du ja in einer Schrittkette eingebaut, mit FB_FileOpen, FB_FileWrite und FB_FileClose.
    Diese Funktionen brauchen aber garantiert länger als einen Zyklus bis sie fertig sind. Darum fragst du ja als Weiterschaltbedingung auch die Busy-Flags der Funktionen ab.

    Mal angenommen fbOpenLogFile() braucht 10 Zyklen (ich weiß nicht wie lange es dauert aber bestimmt mehr als 1) gehen dir an dieser Stelle schonmal 10-arraysize (also 5) = 5 Messwerte verloren.
    Die Dauer der anderen Aufrufe von fbWriteLogFile() und fbCloseLogFile() kommen dann noch obendrauf.

    Wie oben schon von mir geschrieben, brauchst du einen entsprechend großen Puffer der diese Zeiten überbrückt. Und während fbWriteLogFile() aufgerufen wird, dürfen die Werte die geschrieben werden nicht verändert werden, sonst ist der zeitliche Ablauf in der Datei nicht mehr gegeben, und du hast so wie du es jetzt hast bei jedem Logfile ein komplett anderes Bild.

    Die CX Steuerung hat doch Speicher satt. Ich würde erstmal ordentlich im Ram puffern und z.B. nach 100 Werten oder im festen Zeitraster die Datei schreiben.

  10. #10
    Gluttony ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2011
    Beiträge
    13
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die ausfühliche Erklärung!

    Ich würde erstmal ordentlich im Ram puffern und z.B. nach 100 Werten oder im festen Zeitraster die Datei schreiben
    Okay, also hilft es auch nichts, wenn ich mein Array erweitern würde von 5 auf 50, da die Werte während des letztendlichen Schreibens einfach schon überschrieben/aktualisiert wurden.

    Also muss ich die Werte im Array im Ram zwischenspeichern, Puffern, wie du gesagt hast,...
    aber ich weis nicht wie und das ist ziemlich bitter. Gib mir bitte einen Denkanstoss.

Ähnliche Themen

  1. Buskoppler liest und schreibt keine Werte
    Von buddd im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 20.09.2011, 17:26
  2. FILETIME liefert UTC?
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 27.06.2010, 14:10
  3. FM350-1 nach Überlauf keine Werte mehr
    Von Mecki im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.11.2009, 11:44
  4. Wer liefert SIM-CARD
    Von Lipperlandstern im Forum Stammtisch
    Antworten: 9
    Letzter Beitrag: 15.12.2008, 10:40
  5. LibNodave 0.8.4 - daveConnectPLC liefert Rückgabewert 4
    Von Nuecke im Forum Hochsprachen - OPC
    Antworten: 58
    Letzter Beitrag: 29.05.2008, 13:32

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •