Skip to main content

Baumer Sensor Module

Description

The "baumer" module enables the digital connection of BPIK or BPIV2 sensors from Baumer GmbH.

BPIK and BPIV2 are smart sensors that have been specially developed for railway applications and combine several functions in a single sensor. In addition to the absolute angle of rotation, angular velocity and acceleration, sensor temperature, and 3-axial acceleration values, the sensors perform vibration analyses directly and provide status information on flat spots, bearing damage, or track condition.

The sensors are connected via a unidirectional, serial RS485 connection, which is connected to the smartRAIL or smartMini system via a converter1 using USB. Depending on the model, the sensors can provide data packets of varying lengths and information. A description of the data frames of the connected sensor is therefore required.

The Baumer module receives the sensor data frames, extracts the time information, and verifies the checksum. The data is then forwarded to the FmProducer module. The FmProducer module extracts the individual sensor data from the data frames.

JSON configuration example (demo)

The following section shows a demo configuration of the module.

In this example, a sensor data frame length of 26 bytes is expected. This may vary depending on the sensor type or sensor firmware.

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

The corresponding configuration of the FmProducer module for reading the signal values from the sensor's data frames:

{
"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": "Temperature",
"offset": 0,
"physicalUnit": "°C",
"scale": 0.01,
"bufferSize": 10240,
"absoluteTolerance": 0.5
}
],
"fmd": "baumer"
},
"factory": "fmproducer",
"module": "Baumer_Producer"
}
important

The data samples come from the sensor with a high sampling rate fsens=12kHzf_{sens} = 1 \dots 2 kHz.

To optimize the performance of data acquisition, it is important to set the cacheSize for the fast raw data channels so that new samples are published in the smartCORE at approximately 10 Hz intervals.

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

On the other hand, the bufferSIze should be selected so that approximately 510s5 \dots 10 s of data can be stored in the smartCORE channel. Gaps in the OSF files indicate that the bufferSize is too small.

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

Since, with the exception of temperature, each sample differs from the previous one in all channels and plays a role in the subsequent evaluation, the OnChange filter can be switched off with the option noFilter = true.

For temperature, setting absoluteTolerance = 0.5 can significantly thin out the data, especially since the measured temperature changes only slowly.

tip

If several sensors need to be connected, a corresponding module pair consisting of baumer and fmproducer must be created and configured for each one. The sensors can be identified by the names given to the modules.

Module parameters

Parameter nameRequiredData typeUseful value rangeDefaultDescription
devPathYesIntegerDevice path of the sensor's USB port in the Linux OS.2
frameSizeNoInteger>= 826Size (in bytes) of the data packet containing the measured values sent by the sensor.
baudrateNoInteger115200, 230400, 460800, 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 35000001000000Baud rate of the serial USB connection to the sensor.

Module information

InformationValue
AuthoroptiMEAS Measurement and Automation Systems GmbH
Since smartCORE2.10
Module typeProducer
Dependencies-

Footnotes

  1. We have had good experiences with this 4-channel RS485 module from WaveShare. It is important that an FTDI chipset is used and that the hardware supports a bit rate of up to 1 MBaud.

  2. The path can be determined using ls /dev/serial/by-id/ or dmesg in the terminal on the device.