Eingangskarte +-10V Sensor +-4V ?

Gluttony

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten morgen,

ich habe eine analoge Eingangskarte KS3001 (+-10V und 12Bit Auflösung) und einen Beschleunigungssensor mit einem Messbereich von +-4V und einer Empfindlichkeit von 40mV/g. Bei der Steuerung handelt es sich um eine Beckhoff CX1010.

Wie kann ich die Eingangskarte in TwinCat einstellen, dass sie den Messbereich des Sensors mit +-4V auch erfasst? Ich möchte die erfassten und auf die Beschleunigung g umgerechneten Werte in eine txt-Datei schreiben.

Leider kommen nur große positive Zahlen heraus, wenn ich den Analogeingang auslese. Ich nehme an, dass ich Probleme damit habe, dass die Werte als WORD erfasst werden.

Hoffe ihr könnt mir weiterhelfen.

Gruß Gluttony
 
... ich bin zwar nicht der Beckhoff-Mensch - aber die Sensor-Art kenne ich.
Mit einer Standard-Analogkarte wird das nichts. Ich weiß aber, dass Beckhoff für solche Sensoren auch Karten hat - da würdest du dann auch hinreichend genau messen können.

Ansonsten müßtest du einen Messverstärker dazwischen schalten, der dir den Pegel anpasst - wobei 12 Bit Auflösung ist für eine Schwingungs-Messung auch nicht der Bringer ...

Was hast du überhaupt vor ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ansonsten müßtest du einen Messverstärker dazwischen schalten, der dir den Pegel anpasst - wobei 12 Bit Auflösung ist für eine Schwingungs-Messung auch nicht der Bringer ...

Was hast du überhaupt vor ?

Ich möchte mit dem Sensor Erschütterungen auf einer Förderstrecke erfassen und in einer Logfile speichern. Da ich momentan nicht weiß, wie groß die Erschütterungen ausfallen, wurde mir ein Vergleichssensor Messbereich bis zu +-100g zugeschickt, mit dem +-4V.

Das 12 Bit nicht wirklich der Bringer ist, hat mir auch die Firma gesagt, die mir den Sensor geschickt hat.

Aber zum Feststellen der typisch in der Anlage auftretenden Beschleunigungen würde eine analoge +-10V Eingangskarte ausreichen, um den geeigneten Messbereich für den letztendlichen Sensor wählen zu können. So hat man mir das zumindest gesagt.

Ich nehm an, dass ich die Probleme mit dem Auslesen daher rühren, dass das 12.Bit für die Vorzeichenbestimmung benutzt wird. Da ich den Sensor jedoch über ein WORD auslese 16Bit , wird das mit dem Vorzeichen jedoch nicht mehr berücksichtigt und deswegen ergeben sich die großen Werte.

Gibt es da keine Möglichkeit?
 
Ähh ...
Dez. 1 = Hex 0001
Dez. -1 = Hex FFFF

Du mußt den Wert schon so einlesen, wie er ist ...
Welche Abtastrate hat denn deine Karte ? Also wie viele Messungen pro Sekunde kannst du aufnehmen ? Wie wertest du den Sensor denn überhaupt aus (im Programm) ? Du kannst die Messwerte eines Schwingungssensors nicht mit denen einer Füllstands-Messung o.ä. vergleichen ...
 
Hier der bestreffende Auszug aus meinem Programm.
der Timer1 lässt die Schleife alle 35ms ablaufen. Und die Werte werden momentan jede Sekunde in eine TXT-Datei geschrieben.

VAR_GLOBAL
Beschleunigungssensor_1 AT %IW1:WORD;
Beschleunigung:REAL;
END_VAR

.........
IF Timer1.Q THEN
Beschleunigung := WORD_TO_REAL (Beschleunigungssensor_1);
.........

Ich will den Eingang so auswerten, dass ich die positiven und negativen Spannungen vom Sensor an die Eingangskarte auch angezeigt bekomme. Diese möchte ich dann später einfach auf die Beschleunigung g umrechen.

z.B.
+4000 mV = +100g
bis
-4000 mV = -100g

Deiner Aussage mit dem Füllstandssensor entnehme ich, dass ich etwas grundsätzliches nicht verstanden habe. Ich weiß nur noch nicht was.
Wie wertet man denn so einen Sensor aus?

Ergängung: Der Sensor befindet sich in dem Behälter, welcher über die Strecke fährt und soll Stöße und Erschütterungen aufnehmen. Sind diese zu hoch, beispielsweise durch beschädigte Anlagenteile, so soll dies erfasst werden.

Gruß Gluttony
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich würde da so vorgehen :
Du nimmst in einem sehr kurzen Zeit-Raster (z.B. jede Millisekunde) die Werte in ein Array auf. Hast du das Array voll (z.B. 250 Werte) dann scannst du es und bildest vielleicht einen Mittelwert oder suchst nach dem größten Peak oder nach einer Menge von Peaks über einem bestimmten Pegel (oder oder) und machst daraus dann die Auswertung.
Nun wiederholst du das ganze wieder.

Das kurze Intervall (je schneller desto besser) ist der Garant das du wirklich die Schwingung und nicht nur irgend einen Wert aus einem Impuls (der von mir aus als Schwingung sogar dauernd ansteht) aufzeichnest und bewertest ...

Von solchen Sachen wie FFT (Fast Fourier Transformation) zur genauen Analyse der aufgezeichneten Schwingung und der beinhalteten Frequenzen will ich jetzt mal nicht sprechen - obwohl auch das machbar ist ...

Gruß
Larry
 
So hört sich das schonmal gut an, ich muss nun sehen, dass ich das mit dem Array hinbekomme.

Ich habe das momentan mit "meinem" Programm(ist eine Lösung zu einer anderen Fragestellung hier im Forum gewesen) so gelöst:

.....
Datensatz := REAL_TO_STRING(Beschleunigung);
Datensatz := CONCAT(Datensatz, '; ');
......
Datensatz := CONCAT(Datensatz, '$n');
....

Datensatz wird dann mit Hilfe von
FB_FileOpen
FB_FileWrite
FB_FileClose
auf der Festplatte gespeichert.
 
Mit 4V hast kannst du schon mal 1Bit streichen. Du hast dann theoretisch 11Bit wobei 1Bit das Vorzeichen abgibt. Dann kommt noch mal das Rauschen... Wenn du aber nur die Grössenordnung der Beschleunigung erfassen willst, dann ist das OK.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe den Sensor gerade nicht bei mir, aber ich glaube die Daten lagen in Zahlen ausgedrückt im Bereich von 61.000 bis 65.000.

Wie kann ich mir die Zahlen richtig anzeigen lassen mit Vorzeichen, damit ich sie speichern kann?

Gruß Gluttony
 
Für Beschleunigungssensoren gibt es diehttp://www.beckhoff.de/EL3632/.

Wenn du eine Analoge +/- 10V Klemme nimmst, musst du den Wert doch umrechnen:
Du bekommst ein WORD von der Klemme. (Wertebereich: 0 - 65535)
Der Messbereicht ist von -10V bis +10V.

Dann würde der Eingangswert von 0 einem Messwert von -10V entsprechen.
Der Eingangswert 65535 ist dann ein Messwert von +10V.

Über die Formel kannst dann den gemessenen Wert berechnen:

rInput := 65535.0 / iInput;
Messwert := -10V + ((+10V) - (-10V)) * rInput;
 
Ich nehm an, dass ich die Probleme mit dem Auslesen daher rühren, dass das 12.Bit für die Vorzeichenbestimmung benutzt wird. Da ich den Sensor jedoch über ein WORD auslese 16Bit , wird das mit dem Vorzeichen jedoch nicht mehr berücksichtigt und deswegen ergeben sich die großen Werte.
Ähmmm ... der Datentyp der Eingangsprozessdaten ist "INT", also mit Vorzeichen. Dein WORD ist grundsätzlich vorzeichenlos. Wieso nimmst du nicht den Datentyp, der vorgeben wird?
Und es sind bei Beckhoff grundsätzlich 16 Bit für analoge Eingangsdaten (außer Sonderklemmen). Wenn die Klemme 12 Bit hat, wird intern interpoliert auf 16 Bit. Das Ergebnis ist dann einfach nur "grober".

Es gibt von Beckhoff übrigens auch Klemmen mit 16 Bit Auflösung und höherer Genauigkeit.

edit: Rechtschreibung verbessert ;-)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du eine Analoge +/- 10V Klemme nimmst, musst du den Wert doch umrechnen:
Du bekommst ein WORD von der Klemme. (Wertebereich: 0 - 65535)
Der Messbereicht ist von -10V bis +10V.

Dann würde der Eingangswert von 0 einem Messwert von -10V entsprechen.
Der Eingangswert 65535 ist dann ein Messwert von +10V.

:rolleyes::confused: ... möchtest du dir das nicht vielleicht lieber noch einmal überlegen ?
Wie schon gesagt bin ich kein Beckhoff-Programmierer - der Aufbau WORD / INT ist aber bei Beckhoff auch nicht anders wie bei allen anderen auf der Welt.

zur Erinnerung :
Dez. 1 = Hex 0001
Dez. -1 = Hex FFFF

... ansonsten siehe Beitrag von Trinitaucher ...
 
Super, sobald ich wieder am Sensor bin, probier ich das mit INT gleich mal aus, schon jetzt danke für die schnelle Hilfe.
Ich dachte einfach WORD wäre in diesem Fall das richtige.

Das mit dem Array hört sich sehr sinnvoll an, werde gleich mal im Forum die Suchfunktions darauf ansetzten, da ich noch nicht mit Arrays gearbeitet habe.

Gruß Gluttony
 
Zuletzt bearbeitet:
:rolleyes::confused: ... möchtest du dir das nicht vielleicht lieber noch einmal überlegen ?
Wie schon gesagt bin ich kein Beckhoff-Programmierer - der Aufbau WORD / INT ist aber bei Beckhoff auch nicht anders wie bei allen anderen auf der Welt.

Zitat:
zur Erinnerung :
Dez. 1 = Hex 0001
Dez. -1 = Hex FFFF
... ansonsten siehe Beitrag von Trinitaucher ...

WORD: 0 bis 65535; 16 Bit und entspricht einem UINT.
INT: -32768 bis +32767; 16 Bit und damit nicht unsigned.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ich war gestern noch am Beschleunigungssensor und das Umstellen auf INT hat funktioniert. Jetzt bekomme ich positive und negative Werte heraus.

Mir ist jetzt nur noch nicht klar, welche Einheit die Werte haben, meine Vermutung ist:

INT: +32767 bis -32768 entsprechen der möglichen Ausgangsspannung von +10 bis -10V

Mein Sensor hat einen Messbereich von +-4V demnach liegen die INT-Zahlen in
einem Bereich von +13.107 bis -13.107 (32.767 / 10V * 4V)?

Würde diese Annahme stimmen so entspricht
1V = 3.276,7
0,01V = 32,767
0,04V = 131,068 (müsste auch die Empfindlichkeit des Sensors von 40 mV pro g entsprechen)

Also ist ein Messwert den ich mit meiner Faust auf Tisch (Sensor in der Faust) mit INT = +5000 erziehlt habe gleich einer Spannung von 1,526V oder?

Wow dann hätte ich ja 38g erziehlt? Nicht ein bisschen viel?

Gruß Gluttony
 
Zuletzt bearbeitet:
@TE:
Ich denke, du hast den dreisatz korrekt umgesetzt ...

@Neals:
probier es einfach mal aus ...

Gruß
Larry
 
Ich war wieder an meinem Beschleunigungssensor und habe es ausprobiert...

.. es funktioniert, besten Dank!

Gruß Gluttony
 
Zurück
Oben