5.4. SDI-12 Protocol#

Protocol Overview#

The VX60 surface velocity radar supports communication via the SDI-12 (Serial Data Interface at 1200 baud) protocol. The instrument responds to standard SDI-12 measurement commands by returning measured surface velocity and related data, and, in addition to standard measurement commands, the device implements a set of custom SDI-12 commands that allow users to read and modify internal configuration parameters, retrieve diagnostic information, and execute specific service operations such as restoring factory default settings.

In the command tables below, a represents the device address. CR and LF denote carriage return / line feed pair which is sent at the end of each response. The response contains no space character – in the table below the spaces are inserted between response elements to improve readability only.

Standard SDI-12 Commands#

Device Address Query#

Device will identify by returning its SDI-12 address. The factory default address is 0.

Request

Response

Example

?!

a CR LF

?!
0

Ping Sensor#

The device will return its address if the address in the request matches the device address. This command is used to verify that the device is active, at a given address, and responding to requests.

Request

Response

Example

a!

a CR LF

0!
0

Change Address#

The device will reconfigure to change its SDI-12 device address, and will respond with the new address. All subsequent requests to the device should be addressed to the new address. Take care when changing address, if improperly set on multi-sensor bus this can cause address collision.

Request

Response

Example

aAb!

b CR LF

0A5!
5

Get Device Identification#

The device will respond with its identification information:

  • 13 = SDI protocol version 1.3

  • GEOLUXVX60 = device name

  • fff = current firmware version

Request

Response

Example

aI!

a13GEOLUXVX60  fff CR LF

0I!
013GEOLUXVX60  100

Verify Device#

This command is executed in two steps. First, the master sends the command aV! to initiate the verification procedure. The device responds with a standard SDI-12 service request indicating that after 000 seconds one value will be available for retrieval.

The master must then issue the aD0! command to read the available value. The device responds with a single measurement representing the instrument’s operational status:

  • 0 = not ready

  • 1 = ready

Request

Response

Example

aV!

aD0!
a00001 CR LF

as CR LF
0V!
000001
0D0!
01

Perform Measurement#

This command instructs the instrument to start a measurement cycle. Upon receiving aM!, the device immediately responds with the required warm-up time in seconds and the total number of measurement values that will be available once the measurement is completed.

After the specified warm-up time has elapsed, the master should retrieve the measurement results using the aD0!, aD1!, etc. commands as needed, until all reported values have been read.

If a CRC checksum is required to ensure data integrity, the aMC! command shall be used instead of aM!. This command functions identically to aM!, but the instrument appends a CRC checksum to each data response. The checksum in the response allows the master to verify the consistency and correctness of the transmitted values.

The Geolux VX60 returns 8 values, in the following order:

  1. Absolute surface velocity, in selected measurement unit

  2. Direction flag (1 incoming, -1 outgoing, 0 no flow)

  3. SNR, in dB

  4. Forward tilt angle, in degrees

  5. Side tilt angle, in degrees

  6. Device temperature, in °C

  7. Device relative humidity, in %

  8. Device error status bitmask:
    Bit 0 = forward tilt angle error
    Bit 1 = side tilt angle error
    Bit 2 = radar co-processor update failed
    Bit 3 = radar co-processor not responding
    Bit 4 = radar co-processor needs to be updated
    Bit 5 = tilt sensor is not working
    Bit 6 = radar self-calibration failed
    Bit 7 = DFP data corrupt, needs reset
    Bit 8 = standby mode is active
    Bit 9 = radar is initializing

Request

Response

Example

aM! or aMC!

aD0!

aD1!
asss8 CR LF

a velocity dir snr fwdtilt CR LF

a sidetilt temp rhum status CR LF
0M!
00158
… after 15 seconds …
0D0!
0+1.023+1+47+61.23
0D1!
0-0.12+22.35+38.1+0

Perform Concurrent Measurement#

The aC! command operates similarly to the previously described aM! command, with the key difference being that it enables concurrent measurements. After receiving aC!, the instrument responds with the required processing time and the number of values that will be available.

Unlike aM!, the instrument does not hold the SDI-12 bus during the measurement process. This allows other SDI-12 devices on the same bus to perform measurements simultaneously. Once the indicated processing time has elapsed, the master can retrieve the results using the aD0!, aD1!, etc., commands, in the same manner as for aM!.

In accordance with the SDI-12 specification for concurrent commands, the response to aC! uses two digits to indicate the number of measurement values that will be returned.

If a CRC checksum is required to ensure data integrity, the aCC! command shall be used instead of aC!. This command functions identically to aC!, but the instrument appends a CRC checksum to each data response. The checksum in the response allows the master to verify the consistency and correctness of the transmitted values.

Request

Response

Example

aC! or aCC!

aD0!

aD1!
asss08 CR LF

a velocity dir snr fwdtilt CR LF

a sidetilt temp rhum status CR LF
0C!
001508
… after 15 seconds …
0D0!
0+1.023+1+47+61.23
0D1!
0-0.12+22.35+38.1+0

Custom (Extended) SDI-12 Commands Specific for VX60#

Maximum Velocity Threshold#

Sets / gets the upper bound for valid surface velocity measurements. Velocity readings above this threshold are rejected. The numeric value parameter is interpreted in the unit set by aXGMVU!. See Maximum Velocity for the detailed setting description.

Mode

Request

Response

Example

Get

aXGMVL!

a value CR LF

0XGMVL!
0+16

Set

aXGMVL value!

a value CR LF

0XGMVL+15!
0+15

Maximum Velocity Unit#

Gets / sets the physical unit used by aXGMVL! command. See Maximum Velocity for the detailed setting description. The units are represented by the numerical value as follows:

  • 0 = mm/s

  • 1 = m/s

  • 2 = mph

  • 3 = km/h

  • 4 = ft/s

  • 5 = ft/min

  • 6 = cm/s

Mode

Request

Response

Example

Get

aXGMVU!

a value CR LF

0XGMVU!
0+1

Set

aXGMVU value!

a value CR LF

0XGMVU+6!
0+6

Direction Filter#

Gets / sets the direction filter configuration. See Direction Filter for the detailed setting description.

  • 0 = measure both directions

  • 1 = incoming flow only

  • 2 = outgoing flow only

Mode

Request

Response

Example

Get

aXGDFT!

a value CR LF

0XGDFT!
0+0

Set

aXGDFT value!

a value CR LF

0XGDFT+2!
0+2

Filter Length#

Gets / sets the number of seconds used for internal smoothing. Higher values reduce noise but increase response lag. See Filter Length for the detailed setting description. The valid range is between 1 and 120.

Mode

Request

Response

Example

Get

aXGFLN!

a value CR LF

0XGFLN!
0+1

Set

aXGFLN value!

a value CR LF

0XGFLN+20!
0+20

Velocity Output Unit#

Gets / sets the unit used for the velocity value in the SDI-12 measurement response, NMEA and on Modbus output. See Output Unit for the detailed setting description. The units are represented by the numerical value as follows:

  • 0 = mm/s

  • 1 = m/s

  • 2 = mph

  • 3 = km/h

  • 4 = ft/s

  • 5 = ft/min

  • 6 = cm/s

Mode

Request

Response

Example

Get

aXGUNT!

a value CR LF

0XGUNT!
0+1

Set

aXGUNT value!

a value CR LF

0XGUNT+0!
0+0

Beam Width#

Gets / sets the radar beam width pattern. Wide beam covers a larger area; narrow beam is more focused and rejects off-axis targets. See Beam Width for the detailed setting description.

  • 0 = wide

  • 1 = narrow

Mode

Request

Response

Example

Get

aXGRBW!

a value CR LF

0XGRBW!
0+0

Set

aXGRBW value!

a value CR LF

0XGRBW+1!
0+1

Beam Position#

Gets / sets the near or far measurement zone placed along the radar beam used for target detection. See Beam Position for the detailed setting description.

  • 0 = near

  • 1 = far

Mode

Request

Response

Example

Get

aXGBOF!

a value CR LF

0XGBOF!
0+0

Set

aXGBOF value!

a value CR LF

0XGBOF+1!
0+1

DFP Enable#

Gets / sets the enable status of Dynamic Flow Profiler algorithm, which tracks and accumulates flow history for improved accuracy in low-flow conditions. See Dynamic Flow Profiler for the detailed setting description.

  • 0 = disabled

  • 1 = enabled

Mode

Request

Response

Example

Get

aXGDFP!

a value CR LF

0XGDFP!
0+0

Set

aXGDFP value!

a value CR LF

0XGDFP+1!
0+1

Minimum Valid Distance#

Gets / sets the minimum valid distance to water surface. Reflections detected closer than this distance are ignored. Use this parameter to exclude near-field returns e.g., mounting hardware, bridge elements, or other objects close to the sensor. See Minimum Distance for the detailed setting description. The corresponding measurement unit is set by aXGDU0!.

Mode

Request

Response

Example

Get

aXGDZ0!

a value CR LF

0XGDZ0!
0+0

Set

aXGDZ0 value!

a value CR LF

0XGDZ0+1!
0+1

Minimum Valid Distance Unit#

Gets / sets the measurement unit used by minimum valid distance parameter (aXGDZ0!). See Minimum Distance for the detailed setting description. The valid units are:

  • 0 = mm

  • 1 = cm

  • 2 = m

  • 3 = ft

  • 4 = in

Mode

Request

Response

Example

Get

aXGDU0!

a value CR LF

0XGDU0!
0+2

Set

aXGDU0 value!

a value CR LF

0XGDU0+1!
0+1

Maximum Valid Distance#

Gets / sets the maximum valid distance to water surface. Reflections detected beyond this distance are ignored. Use this parameter to exclude far-field returns outside the intended measurement zone e.g., opposite bank, structures, or background targets. See Maximum Distance for the detailed setting description. The corresponding measurement unit is set by aXGDU1!.

Mode

Request

Response

Example

Get

aXGDZ1!

a value CR LF

0XGDZ1!
0+30

Set

aXGDZ1 value!

a value CR LF

0XGDZ1+5!
0+5

Maximum Valid Distance Unit#

Gets / sets the measurement unit used by maximum valid distance parameter (aXGDZ1!). See Maximum Distance for the detailed setting description. The valid units are:

  • 0 = mm

  • 1 = cm

  • 2 = m

  • 3 = ft

  • 4 = in

Mode

Request

Response

Example

Get

aXGDU1!

a value CR LF

0XGDU1!
0+2

Set

aXGDU1 value!

a value CR LF

0XGDU1+3!
0+3

RS-232 Baud Rate#

Gets / sets the baud rate of the RS-232 serial interface. The change takes effect immediately. See RS-232 Baud Rate for the detailed setting description. The valid values for baud rates are:

  • 0 = 4800

  • 1 = 9600

  • 2 = 14400

  • 3 = 19200

  • 4 = 38400

  • 5 = 57600

  • 6 = 115200

Mode

Request

Response

Example

Get

aXGSBD!

a value CR LF

0XGSBD!
0+6

Set

aXGSBD value!

a value CR LF

0XGSBD+1!
0+1

Modbus Baud Rate#

Gets / sets the baud rate of the RS-485/Modbus serial interface. The change takes effect immediately. See RS-485 Baud Rate for the detailed setting description. The valid values for baud rates are:

  • 0 = 4800

  • 1 = 9600

  • 2 = 14400

  • 3 = 19200

  • 4 = 38400

  • 5 = 57600

  • 6 = 115200

Mode

Request

Response

Example

Get

aXGMBD!

a value CR LF

0XGMBD!
0+1

Set

aXGMBD value!

a value CR LF

0XGMBD+6!
0+6

Modbus Device ID#

Gets / sets the Modbus RTU slave address. Must be unique on the RS485 bus. See Modbus ID for the detailed setting description. The accepted value range for Modbus RTU slave address is 1 - 247.

Mode

Request

Response

Example

Get

aXGMID!

a value CR LF

0XGMID!
0+1

Set

aXGMID value!

a value CR LF

0XGMID+10!
0+10

Modbus Serial Line Parity#

Gets / sets the serial line parity for RS-485 / Modbus connection. The change takes place immediately. See Modbus Parity for the detailed setting description. The valid values are:

  • 0 = none

  • 1 = odd

  • 2 = even

Mode

Request

Response

Example

Get

aXGMPA!

a value CR LF

0XGMPA!
0+2

Set

aXGMPA value!

a value CR LF

0XGMPA+0!
0+0

Modbus Serial Line Stop Bits#

Gets / sets the number of stop bits for the serial line of RS-485 / Modbus connection. The change takes place immediately. See RS-485 Stop Bits for the detailed setting description. The valid values are:

  • 0 = one

  • 1 = two

Mode

Request

Response

Example

Get

aXGMSB!

a value CR LF

0XGMSB!
0+0

Set

aXGMSB value!

a value CR LF

0XGMSB+1!
0+1

Disable NMEA Output#

Gets / sets the parameter that disables NMEA sentence output on RS-232. The valid values are:

  • 0 = NMEA enabled

  • 1 = NMEA disabled

Mode

Request

Response

Example

Get

aXGNMA!

a value CR LF

0XGNMA!
0+0

Set

aXGNMA value!

a value CR LF

0XGNMA+1!
0+1

Analog Output Minimum Value#

Gets / sets the surface velocity measurement value that corresponds to the minimum output on the analog current interface (4 mA). See 4 - 20 mA Minimum Value for the detailed setting description. The measurement unit is set by aXGAU0!.

Mode

Request

Response

Example

Get

aXGAV0!

a value CR LF

0XGAV0!
0+0

Set

aXGAV0 value!

a value CR LF

0XGAV0+0.1!
0+0.1

Analog Output Minimum Unit#

Gets / sets the measurement unit for the value set by aXGAV0! command. See 4 - 20 mA Minimum Value for the detailed setting description. The valid units are:

  • 0 = mm/s

  • 1 = m/s

  • 2 = mph

  • 3 = km/h

  • 4 = ft/s

  • 5 = ft/min

  • 6 = cm/s

Mode

Request

Response

Example

Get

aXGAU0!

a value CR LF

0XGAU0!
0+1

Set

aXGAU0 value!

a value CR LF

0XGAU0+4!
0+4

Analog Output Maximum Value#

Gets / sets the surface velocity measurement value that corresponds to the maximum output on the analog current interface (20 mA). See 4 - 20 mA Maximum Value for the detailed setting description. The measurement unit is set by aXGAU1!.

Mode

Request

Response

Example

Get

aXGAV1!

a value CR LF

0XGAV1!
0+16

Set

aXGAV1 value!

a value CR LF

0XGAV1+10!
0+10

Analog Output Maximum Unit#

Gets / sets the measurement unit for the value set by aXGAV1! command. See 4 - 20 mA Maximum Value for the detailed setting description. The valid units are:

  • 0 = mm/s

  • 1 = m/s

  • 2 = mph

  • 3 = km/h

  • 4 = ft/s

  • 5 = ft/min

  • 6 = cm/s

Mode

Request

Response

Example

Get

aXGAU1!

a value CR LF

0XGAU1!
0+1

Set

aXGAU1 value!

a value CR LF

0XGAU1+3!
0+3

Configure Power Management Mode (Automatic SDI-12 Sleep)#

Gets / sets the automatic SDI-12 sleep mode parameter. When sleep is enabled, the device enters low-power standby between SDI-12 transactions. When disabled, the sensor runs continuously and is ready at all times. See Power Management for the detailed setting description. The valid parameters are:

  • 0 = sleep enabled

  • 1 = sleep disabled (continuous scanning)

Mode

Request

Response

Example

Get

aXGCON!

a value CR LF

0XGCON!
0+1

Set

aXGCON value!

a value CR LF

0XGCON+0!
0+0

Configure Operation Mode#

Gets / sets the operation mode parameter. When the operation mode is set to standby, the device will go to standby mode. In standby mode, it will communicate on all communication interfaces, but the radar transmitters will be turned off to reduce the power, and the instrument will not be making any measurements. See Operation Mode for the detailed setting description. The accepted values are:

  • 0 = off (normal operation)

  • 1 = on (standby operation)

Mode

Request

Response

Example

Get

aXGMUT!

a value CR LF

0XGMUT!
0+0

Set

aXGMUT value!

a value CR LF

0XGMUT+1!
0+1

Configure Fixed Mounting Angle#

Override measured pitch angle with a fixed value (degrees). Changing this parameter will affect the reported velocity as cosine correction behaviour will be changed. Use this parameter only during tow-tank testing. Set 0 to use real measured angle. The accepted value range for fixed angle is 0 - 89.

Mode

Request

Response

Example

Get

aXGFIX!

a value CR LF

0XGFIX!
0+0

Set

aXGFIX value!

a value CR LF

0XGFIX+1!
0+1

Show Data on Error#

Continue reporting velocity data even when angle errors are detected.

  • 0 = clear velocity on error (send 0 as velocity instead of the measured value)

  • 1 = keep velocity

Mode

Request

Response

Example

Get

aXGSDE!

a value CR LF

0XGSDE!
0+0

Set

aXGSDE value!

a value CR LF

0XGSDE+1!
0+1

Perform Soft Reset#

Restarts the device firmware. All settings are retained (stored in non-volatile memory). The device will be unresponsive for a few seconds after issuing this command.

Request

Response

Example

aXGRST!

a CR LF

0XGRST!
0

Reset DFP#

Clears all accumulated DFP history data. Use this after a significant change in site conditions or sensor placement.

Request

Response

Example

aXGRDP!

a CR LF

0XGRDP!
0

Factory Reset#

Restores all settings to their factory defaults and restarts the device. This is irreversible.

Request

Response

Example

aXGFAC!

a CR LF

0XGFAC!
0

Wake Up#

This command wakes the device from SDI-12 sleep mode and keeps it awake for approximately 1 minute.

Use this command when the automatic SDI-12 sleep mode is enabled (set with aXGCON+0!) and temporary access to the device is required. While awake, RS-232 and RS-485/Modbus interfaces remain active, allowing a connection to be established with the PC configuration application. After the timeout period expires, the device automatically returns to sleep mode if no further activity is detected.

Request

Response

Example

aXGLWU!

a CR LF

0XGLWU!
0