Zum Hauptinhalt springen

Baumer Sensor Modul

Beschreibung

Das "baumer" Modul ermöglicht die digitale Anbindung von BPIK oder BPIV2 Sensoren der Firma Baumer GmbH.

BPIK und BPIV2 sind smarte Sensoren, die speziell für Bahnanwendungen entwickelt wurden und im Sensor bereits mehrere Funktionen vereinen. Neben dem absoluten Drehwinkel, der Winkelgeschwindigkeit und -beschleunigung, der Sensortemperatur und 3-axialen Beschleunigungswerten, führen die Sensoren direkt Schwingungsanalysen aus und liefern Statusinformationen zu Flachstellen, Lagerschäden oder dem Gleiszustand.

Die Sensor-Anbindung erfolgt über eine unidirektionale, serielle RS485 Verbindung, die über einen Umsetzer1 per USB am smartRAIL oder smartMini System angeschlossen wird. Die Sensoren können je nach Ausführung Datenpakete mit unterschiedlicher Länge und Informationen bereitstellen. Eine Beschreibung der Datenframes des angeschlossenen Sensors wird daher benötigt.

Das Baumer Modul empfängt die Sensordatenframes, extrahiert die Zeitinformation und verifiziert die Prüfsumme. Dann werden die Daten an das FmProducer Modul weitergeleitet. Das FmProducer Modul extrahiert die einzelnen Sensordaten aus den Datenframes.

JSON-Konfigurationsbeispiel (Demo)

Der folgende Abschnitt zeigt eine Demo-Konfiguration des Moduls.

In diesem Beispiel wird eine Länge der Sensor-Datenframes von 26 Byte erwartet. Dies kann je nach Sensortyp bzw. Sensorfirmware variieren.

{
"config": {
"devPath": "/dev/serial/by-id/usb-FTDI_USB__-__Serial_Converter_FT8LB8Z8-if02-port0",
"frameSize": 26,
"baudrate":1000000
},
"module": "baumer",
"factory": "baumer"
}

Die dazugehörige Konfiguration des FmProducer Moduls, um die Signalwerte aus den Datenframes des Sensors auszulesen:

{
"config": {
"addressSpec": "AscendingFirstBit",
"channelPrefix": "Baumer.",
"channels": [
{
"bitLength": 16,
"bitOffset": 128,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "AccX",
"offset": 0,
"physicalUnit": "g",
"noFilter": true,
"scale": 0.0001220703125,
"bufferSize": 10240,
"cacheSize": 200
},
{
"bitLength": 16,
"bitOffset": 144,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "AccY",
"offset": 0,
"physicalUnit": "g",
"cacheSize": 200,
"noFilter": true,
"bufferSize": 10240,
"scale": 0.0001220703125
},
{
"bitLength": 16,
"bitOffset": 160,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "AccZ",
"offset": 0,
"physicalUnit": "g",
"scale": 0.0001220703125,
"noFilter": true,
"bufferSize": 10240,
"cacheSize": 200
},
{
"bitLength": 16,
"bitOffset": 96,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "AngAcc",
"offset": 0,
"physicalUnit": "rpm/s",
"scale": 0.3051757813,
"noFilter": true,
"bufferSize": 10240,
"cacheSize": 200
},
{
"bitLength": 16,
"bitOffset": 112,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "AngOscAmp",
"offset": 0,
"physicalUnit": "rpm",
"scale": 0.002861022949,
"noFilter": true,
"bufferSize": 10240,
"cacheSize": 200
},
{
"bitLength": 24,
"bitOffset": 72,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "AngSpeed",
"offset": 0,
"physicalUnit": "rpm",
"scale": 0.0007152557373,
"noFilter": true,
"bufferSize": 10240,
"cacheSize": 200
},
{
"bitLength": 24,
"bitOffset": 48,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "unsigned",
"messageKey": 0,
"name": "Pos",
"offset": 0,
"physicalUnit": "°",
"scale": 0.00002145767212,
"cacheSize": 200,
"noFilter": true,
"bufferSize": 10240
},
{
"bitLength": 16,
"bitOffset": 176,
"byteOrder": "littleendian",
"dataType": "double",
"imageType": "signed",
"messageKey": 0,
"name": "Temperatur",
"offset": 0,
"physicalUnit": "°C",
"scale": 0.01,
"bufferSize": 10240,
"absoluteTolerance": 0.5
}
],
"fmd": "baumer"
},
"factory": "fmproducer",
"module": "Baumer_Producer"
}
important

Die Datensamples kommen vom Sensor mit einer hohen Abtastrate fsens=12kHzf_{sens} = 1 \dots 2 kHz.

Um die Performance der Datenerfassung zu optimieren ist es wichtig, die cacheSize für die schnellen Rohdatenkanäle so einzustellen, dass ungefähr im 10 Hz Takt die Veröffentlichung neuer Samples in den smartCORE erfolgt.

cacheSize=fsensor10Hz\text{cacheSize} = \dfrac{f_{sensor}}{10 Hz}

Andererseits ist die bufferSIze so zu wählen, dass ca. 510s5 \dots 10 s Daten im smartCORE-Kanal vorgehalten werden können. Lückende Daten in den OSF-Dateien weisen auf eine zu kleine bufferSize hin.

bufferSize=fsens5s\text{bufferSize}=f_{sens}\cdot 5 s

Da bis auf die Temperatur bei allen Kanälen jedes Sample sich vom Vorgänger unterscheidet und in der nachfolgenden Auswertung ein Rolle spielt, kann das OnChange-Filter mit der Option noFilter = true abgeschaltet werden.

Bei der Temperatur kann durch Einstellen der absoluteTolerance = 0.5 eine erhebliche Ausdünnung der Daten erzielt werden, zumal sich die gemessene Temperatur nur langsam ändert.

tipp

Falls mehrere Senoren angeschlossen werden müssen, ist für jeden ein entsprechendes Modulpaar aus baumer und fmproducer zu erzeugen und zu konfigurieren. Über die Namensgebung der Module können die Sensoren identifiziert werden.

Modulparameter

ParameternameErforderlichDatentypSinnvoller WertebereichDefaultBeschreibung
devPathJaIntegerDevice-Path des USB-Ports des Sensors im Linux OS.2
frameSizeNeinInteger>= 826Größe (in Bytes) des Datenpaketes mit den Messwerten, das der Sensor verschickt.
baudrateNeinInteger115200, 230400, 460800, 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 35000001000000Baudrate der seriellen USB-Verbindung zum Sensor.

Modulinformationen

InformationenWert
AutoroptiMEAS Measurement and Automation Systems GmbH
seit smartCORE2.10
ModultypProducer
Abhängigkeiten-

Footnotes

  1. Wir haben mit diesem 4 kanaligen RS485 Modul der Firma WaveShare gute Erfahrungen gemacht. Wichtig ist, dass ein FTDI-Chipsatz eingesetzt wird und bis 1 MBaud Bitrate von der Hardware unterstützt werden.

  2. Der Pfad kann mit ls /dev/serial/by-id/ oder dmesg im Terminal auf dem Gerät ermittelt werden.