Modbus server, Modbus client, Calculator and Logger

The calculator outputs some signals to the DDS bus, the modbus server reads these and writes to its registers. The modbus client reads from the modbus server and outputs to the dds bus. Some signals are read from DDS by the modbus client written to the modbus server. The modbus server publishes these signals to DDS on 'Roundtrip_X' topics. The logger reads from the dds bus and writes to file.

Todo:
Must be updated to new modbus components.

signal_generator.yml

Options:
PeriodMs: 1000
Constants:
k1: 0.1
NAN: .nan
INF: .inf
InputSignals:
OutputSignals:
# - { Type: Uint64Val , Topic: TestCounter, Partition: }
- { Type: Uint16Val , Topic: TestCounter, Partition: }
- { Type: Int8Val , Topic: In_int8 , Partition: }
- { Type: Int16Val , Topic: In_int16 , Partition: }
- { Type: Int32Val , Topic: In_int32 , Partition: }
- { Type: Int64Val , Topic: In_int64 , Partition: }
- { Type: Uint8Val , Topic: In_uint8 , Partition: }
- { Type: Uint16Val , Topic: In_uint16 , Partition: }
- { Type: Uint32Val , Topic: In_uint32 , Partition: }
- { Type: Uint64Val , Topic: In_uint64 , Partition: }
- { Type: DoubleVal , Topic: In_double , Partition: }
- { Type: FloatVal , Topic: In_float , Partition: }
- { Type: BoolVal , Topic: In_bool , Partition: }
- { Type: BoolVal , Topic: In_i8neg , Partition: }
- { Type: BoolVal , Topic: In_i16pos , Partition: }
- { Type: BoolVal , Topic: In_i32neg , Partition: }
- { Type: BoolVal , Topic: In_ui16neg , Partition: }
- { Type: BoolVal , Topic: In_true , Partition: }
- { Type: BoolVal , Topic: In_false , Partition: }
- { Type: Int16Val , Topic: In_intToScldDbl, Partition: }
- { Type: DoubleVal , Topic: In_NaN , Partition: }
- { Type: DoubleVal , Topic: In_inf , Partition: }
- { Type: DoubleVal , Topic: In_infneg , Partition: }
- { Type: Float3 , Topic: In_float3 , Partition: }
TempValues:
- tmp1
Expressions:
- tmp1 = tmp1 + 1
- TestCounter.val = tmp1
- In_int8.val = -12
- In_int16.val = -1024
- In_int32.val = -1048576
- In_int64.val = -31234456789
- In_uint8.val = 210
- In_uint16.val = 35000
- In_uint32.val = 4123456789
- In_uint64.val = 5123456789
- In_double.val = 3.141592
- In_float.val = 627.1
- In_bool.val = 1.0
- In_i8neg.val = In_int8.val < 0
- In_i16pos.val = In_int16.val > 0
- In_i32neg.val = In_int32.val < 0
- In_ui16neg.val = TestCounter.val < 0
- In_true.val = 1.0
- In_false.val = 0.0
- In_intToScldDbl.val= 32767
- In_NaN.val = NAN
- In_inf.val = INF
- In_infneg.val = -INF
- In_float3.x = 112.1
- In_float3.y = 223.2
- In_float3.z = 334.3

modbus_server.yml

Options:
PeriodMs: 1000
ModbusSetup:
Type: TcpServer
Port: 50011
InputRegisterMinSize: 100
HoldingRegisterMinSize: 200
BitInputRegisterMinSize: 100 # TODO: This keyword doesn't feel intuitive as it doesn't mirror the 'Table' option
BitHoldingRegisterMinSize: 100 # TODO: This keyword doesn't feel intuitive as it doesn't mirror the 'Table' option
ParameterPacks:
RegAndByteOrder:
Table: HoldingRegister
BigEndianWordOrder: False
FloatInputs:
Table: InputRegister
Type: FloatVal
ModbusType: float
BoolBitInWord:
Table: InputRegister
Type: BoolVal
ModbusType: bit
BoolBit:
Table: BitInput
Type: BoolVal
DDSToModbus:
TestCounter: { Index: 0, Type: Uint16Val, ModbusType: uint16, ParameterPacks: RegAndByteOrder }
TestCounter: { Index: 1, Type: Uint16Val, ModbusType: uint16, ParameterPacks: RegAndByteOrder }
In_int8: { Index: 2, Type: Int8Val, ModbusType: int8, ParameterPacks: RegAndByteOrder }
In_int16: { Index: 3, Type: Int16Val, ModbusType: int16 , ParameterPacks: RegAndByteOrder }
In_int32: { Index: 4, Type: Int32Val, ModbusType: int32, ParameterPacks: RegAndByteOrder }
In_int64: { Index: 6, Type: Int64Val, ModbusType: int64, ParameterPacks: RegAndByteOrder }
In_uint8: { Index: 10, Type: Uint8Val, ModbusType: uint8, ParameterPacks: RegAndByteOrder }
In_uint16: { Index: 11, Type: Uint16Val, ModbusType: uint16, ParameterPacks: RegAndByteOrder }
In_uint32: { Index: 12, Type: Uint32Val, ModbusType: uint32, ParameterPacks: RegAndByteOrder }
In_uint64: { Index: 14, Type: Uint64Val, ModbusType: uint64, ParameterPacks: RegAndByteOrder }
# # One index gap here - NB! Reading value form this address under ModbusToDDS!
In_double: { Index: 19, Type: DoubleVal, ModbusType: double, ParameterPacks: RegAndByteOrder }
In_float: { Index: 0, ParameterPacks: FloatInputs, BigEndianWordOrder: False }
# Insert some endianness checks etc here
In_double: { Index: 23, Type: DoubleVal, ModbusType: double, Table: HoldingRegister, BigEndianWordOrder: True }
In_double: { Index: 27, Type: DoubleVal, ModbusType: double, Table: HoldingRegister, BigEndianWordOrder: False }
In_float: { Index: 2, ParameterPacks: FloatInputs, BigEndianWordOrder: False, BigEndianByteOrder: False }
In_float: { Index: 4, ParameterPacks: FloatInputs, BigEndianWordOrder: False, BigEndianByteOrder: True }
In_float: { Index: 6, ParameterPacks: FloatInputs, BigEndianWordOrder: False }
In_float: { Index: 8, ParameterPacks: FloatInputs, BigEndianWordOrder: True }
# Check scaler
In_intToScldDbl: { Index: 31, Type: Int16Val, ModbusType: int16, Table: HoldingRegister }
In_intToScldDbl: { Index: 32, Type: Int16Val, ModbusType: int16, Table: HoldingRegister }
In_double: { Index: 33, Type: DoubleVal, Table: HoldingRegister, ModbusType: uint16, Range: [0, 10] }
In_double: { Index: 34, Type: DoubleVal, Table: HoldingRegister, ModbusType: uint16, Range: [0, 10] }
# Bool values on Input Register
In_bool: { Index: 50+0, ParameterPacks: BoolBitInWord }
In_i8neg: { Index: 50+1, ParameterPacks: BoolBitInWord }
In_i16pos: { Index: 50+2, ParameterPacks: BoolBitInWord }
In_i32neg: { Index: 50+3, ParameterPacks: BoolBitInWord }
In_ui16neg: { Index: 50+4, ParameterPacks: BoolBitInWord }
In_false: { Index: 50+5, ParameterPacks: BoolBitInWord }
In_true: { Index: 50+6, ParameterPacks: BoolBitInWord }
In_false: { Index: 50+7, ParameterPacks: BoolBitInWord }
In_true: { Index: 50+8, ParameterPacks: BoolBitInWord }
In_false: { Index: 50+9, ParameterPacks: BoolBitInWord }
In_true: { Index: 50+10, ParameterPacks: BoolBitInWord }
In_false: { Index: 50+11, ParameterPacks: BoolBitInWord }
In_true: { Index: 50+12, ParameterPacks: BoolBitInWord }
In_false: { Index: 50+13, ParameterPacks: BoolBitInWord }
In_true: { Index: 50+14, ParameterPacks: BoolBitInWord }
In_true: { Index: 50+15, ParameterPacks: BoolBitInWord }
# Bool values on Discrete Input
In_bool: { Index: 0, ParameterPacks: BoolBit }
In_i8neg: { Index: 1, ParameterPacks: BoolBit }
In_i16pos: { Index: 2, ParameterPacks: BoolBit }
In_i32neg: { Index: 3, ParameterPacks: BoolBit }
In_ui16neg: { Index: 4, ParameterPacks: BoolBit }
In_false: { Index: 5, ParameterPacks: BoolBit }
In_true: { Index: 6, ParameterPacks: BoolBit }
In_false: { Index: 7, ParameterPacks: BoolBit }
In_true: { Index: 8, ParameterPacks: BoolBit }
In_false: { Index: 9, ParameterPacks: BoolBit }
In_true: { Index: 10, ParameterPacks: BoolBit }
In_false: { Index: 11, ParameterPacks: BoolBit }
In_true: { Index: 12, ParameterPacks: BoolBit }
In_false: { Index: 13, ParameterPacks: BoolBit }
In_true: { Index: 14, ParameterPacks: BoolBit }
In_true: { Index: 15, ParameterPacks: BoolBit }
# TODO scale and offset
In_NaN: { Index: 51, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: double }
In_NaN: { Index: 55, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: float }
In_NaN: { Index: 57, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int16 }
In_NaN: { Index: 58, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint16 }
In_NaN: { Index: 59, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int32 }
In_NaN: { Index: 61, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint32 }
In_inf: { Index: 63, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: double }
In_inf: { Index: 67, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: float }
In_inf: { Index: 69, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int16 }
In_inf: { Index: 70, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint16 }
In_inf: { Index: 71, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int32 }
In_inf: { Index: 73, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint32 }
In_infneg: { Index: 75, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: double }
In_infneg: { Index: 79, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: float }
In_infneg: { Index: 81, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int16 }
In_infneg: { Index: 82, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint16 }
In_infneg: { Index: 83, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int32 }
In_infneg: { Index: 85, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint32 }
# Multiple fields
In_float3:
Type: Float3
Fields:
x: { Index: 40, Table: HoldingRegister, ModbusType: float, BigEndianWordOrder: False }
y: { Index: 42, Table: HoldingRegister, ModbusType: float, BigEndianWordOrder: False }
z: { Index: 44, Table: HoldingRegister, ModbusType: float, BigEndianWordOrder: False }
In_float3:
Type: Float3
Fields:
x: { Index: 140, Table: HoldingRegister, ModbusType: int16, Scale: 0.001, Offset: 100 }
y: { Index: 141, Table: HoldingRegister, ModbusType: int16, Scale: 0.001, Offset: 200 }
z: { Index: 142, Table: HoldingRegister, ModbusType: int16, Scale: 0.001, Offset: 330 }
ModbusToDDS:
Roundtrip_true1: { Index: 0, Type: BoolVal, Table: BitHolding }
Roundtrip_true2: { Index: 1, Type: BoolVal, Table: BitHolding }
Roundtrip_true3: { Index: 2, Type: BoolVal, Table: BitHolding }
Roundtrip_false1: { Index: 10, Type: BoolVal, Table: BitHolding }
Roundtrip_false2: { Index: 11, Type: BoolVal, Table: BitHolding }
Roundtrip_false3: { Index: 12, Type: BoolVal, Table: BitHolding }
Roundtrip_TestCounter: { Index: 18, Type: Uint16Val, Table: HoldingRegister }
##

modbus_client.yml

Options:
PeriodMs: 1000
ModbusSetup:
Type: TcpClient
Ip: 127.0.0.1
Port: 50011
SlaveId: 0
MaxConnectionAttempts: 5
ReconnectionDelaySecs: 3
ParameterPacks:
RegAndByteOrder:
Table: HoldingRegister
BigEndianWordOrder: False
FloatInputs:
Table: InputRegister
Type: FloatVal
ModbusType: float
BoolBitInWord:
Table: InputRegister
Type: BoolVal
ModbusType: bit
BoolBit:
Table: BitInput
Type: BoolVal
ModbusToDDS:
Out_TestCounter: { Index: 0, Type: Uint16Val, ModbusType: uint16, ParameterPacks: RegAndByteOrder }
Out_TestCounter1: { Index: 1+0, Type: Uint8Val, ModbusType: uint8, ParameterPacks: RegAndByteOrder }
Out_TestCounter2: { Index: 1+8, Type: Uint8Val, ModbusType: uint8, ParameterPacks: RegAndByteOrder }
Out_int8: { Index: 2, Type: Int8Val, ModbusType: int8, ParameterPacks: RegAndByteOrder }
Out_int16: { Index: 3, Type: Int16Val, ModbusType: int16, ParameterPacks: RegAndByteOrder }
Out_int32: { Index: 4, Type: Int32Val, ModbusType: int32, ParameterPacks: RegAndByteOrder }
Out_int64: { Index: 6, Type: Int64Val, ModbusType: int64, ParameterPacks: RegAndByteOrder }
Out_uint8: { Index: 10, Type: Uint8Val, ModbusType: uint8, ParameterPacks: RegAndByteOrder }
Out_uint16: { Index: 11, Type: Uint16Val, ModbusType: uint16, ParameterPacks: RegAndByteOrder }
Out_uint32: { Index: 12, Type: Uint32Val, ModbusType: uint32, ParameterPacks: RegAndByteOrder }
Out_uint64: { Index: 14, Type: Uint64Val, ModbusType: uint64, ParameterPacks: RegAndByteOrder }
Out_double: { Index: 19, Type: DoubleVal, ModbusType: double, ParameterPacks: RegAndByteOrder }
Out_double_BEWO: { Index: 23, Type: DoubleVal, ModbusType: double, Table: HoldingRegister, BigEndianWordOrder: True }
Out_double_LEWO: { Index: 27, Type: DoubleVal, ModbusType: double, Table: HoldingRegister, BigEndianWordOrder: False }
Out_float: { Index: 0, ParameterPacks: FloatInputs, BigEndianWordOrder: False }
Out_float_LEBO: { Index: 2, ParameterPacks: FloatInputs, BigEndianWordOrder: False, BigEndianByteOrder: False }
Out_float_BEBO: { Index: 4, ParameterPacks: FloatInputs, BigEndianWordOrder: False, BigEndianByteOrder: True }
Out_float_LEWO: { Index: 6, ParameterPacks: FloatInputs, BigEndianWordOrder: False }
Out_float_BEWO: { Index: 8, ParameterPacks: FloatInputs, BigEndianWordOrder: True }
Out_intToScldDbl: { Index: 31, Type: DoubleVal, Scale: 0.01, ModbusType: int16, Table: HoldingRegister }
Out_intToScldDbl_offset: { Index: 32, Type: DoubleVal, Scale: 0.01, Offset: 1000, ModbusType: int16, Table: HoldingRegister }
Out_doubleInt16: { Index: 33, Type: Uint16Val, ModbusType: uint16, Table: HoldingRegister }
Out_doubleInt16Float: { Index: 34, Type: FloatVal, ModbusType: uint16, Range: [0, 10], Table: HoldingRegister }
# Multiple fields
Out_float3:
Type: Float3
Fields:
x: { Index: 40, Table: HoldingRegister, BigEndianWordOrder: False, ModbusType: float }
y: { Index: 42, Table: HoldingRegister, BigEndianWordOrder: False, ModbusType: float }
z: { Index: 44, Table: HoldingRegister, BigEndianWordOrder: False, ModbusType: float }
Out_float3_scaled:
Type: Float3
Fields:
x: { Index: 140, Table: HoldingRegister, ModbusType: int16, Scale: 0.001, Offset: 100 }
y: { Index: 141, Table: HoldingRegister, ModbusType: int16, Scale: 0.001, Offset: 200 }
z: { Index: 142, Table: HoldingRegister, ModbusType: int16, Scale: 0.001, Offset: 330 }
Out_bool_in_word: { Index: 50+0, ParameterPacks: BoolBitInWord }
Out_i8neg_in_word: { Index: 50+1, ParameterPacks: BoolBitInWord }
Out_i16pos_in_word: { Index: 50+2, ParameterPacks: BoolBitInWord }
Out_i32neg_in_word: { Index: 50+3, ParameterPacks: BoolBitInWord }
Out_ui16neg_in_word: { Index: 50+4, ParameterPacks: BoolBitInWord }
Out_false1_in_word: { Index: 50+5, ParameterPacks: BoolBitInWord }
Out_true1_in_word: { Index: 50+6, ParameterPacks: BoolBitInWord }
Out_false2_in_word: { Index: 50+7, ParameterPacks: BoolBitInWord }
Out_true2_in_word: { Index: 50+8, ParameterPacks: BoolBitInWord }
Out_false3_in_word: { Index: 50+9, ParameterPacks: BoolBitInWord }
Out_true3_in_word: { Index: 50+10, ParameterPacks: BoolBitInWord }
Out_false4_in_word: { Index: 50+11, ParameterPacks: BoolBitInWord }
Out_true4_in_word: { Index: 50+12, ParameterPacks: BoolBitInWord }
Out_false5_in_word: { Index: 50+13, ParameterPacks: BoolBitInWord }
Out_true5_in_word: { Index: 50+14, ParameterPacks: BoolBitInWord }
Out_true6_in_word: { Index: 50+15, ParameterPacks: BoolBitInWord }
Out_bool: { Index: 0, ParameterPacks: BoolBit }
Out_i8neg: { Index: 1, ParameterPacks: BoolBit }
Out_i16pos: { Index: 2, ParameterPacks: BoolBit }
Out_i32neg: { Index: 3, ParameterPacks: BoolBit }
Out_ui16neg: { Index: 4, ParameterPacks: BoolBit }
Out_false1: { Index: 5, ParameterPacks: BoolBit }
Out_true1: { Index: 6, ParameterPacks: BoolBit }
Out_false2: { Index: 7, ParameterPacks: BoolBit }
Out_true2: { Index: 8, ParameterPacks: BoolBit }
Out_false3: { Index: 9, ParameterPacks: BoolBit }
Out_true3: { Index: 10, ParameterPacks: BoolBit }
Out_false4: { Index: 11, ParameterPacks: BoolBit }
Out_true4: { Index: 12, ParameterPacks: BoolBit }
Out_false5: { Index: 13, ParameterPacks: BoolBit }
Out_true5: { Index: 14, ParameterPacks: BoolBit }
Out_true6: { Index: 15, ParameterPacks: BoolBit }
# Topic appendix here reflects the ModbusType used in the transmission. Floating point types should
# result in the original value being transmitted (ie. nan, inf or -inf). Integer types should result
# in truncation to either type max or type min.
Out_NaN_double: { Index: 51, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: double }
Out_NaN_float: { Index: 55, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: float }
Out_NaN_int16: { Index: 57, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int16 }
Out_NaN_uint16: { Index: 58, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint16 }
Out_NaN_int32: { Index: 59, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int32 }
Out_NaN_uint32: { Index: 61, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint32 }
Out_inf_double: { Index: 63, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: double }
Out_inf_float: { Index: 67, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: float }
Out_inf_int16: { Index: 69, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int16 }
Out_inf_uint16: { Index: 70, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint16 }
Out_inf_int32: { Index: 71, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int32 }
Out_inf_uint23: { Index: 73, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint32 }
Out_infneg_double: { Index: 75, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: double }
Out_infneg_float: { Index: 79, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: float }
Out_infneg_int16: { Index: 81, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int16 }
Out_infneg_uint16: { Index: 82, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint16 }
Out_infneg_int32: { Index: 83, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: int32 }
Out_infneg_uint32: { Index: 85, Table: InputRegister, BigEndianWordOrder: True, Type: DoubleVal, ModbusType: uint32 }
# Do not configure these signals on the server side - included to check (Bit)InputRegisterMinSize
Out_dummybool: { Index: 49, ParameterPacks: BoolBit }
Out_dummy: { Index: 99, Type: Uint16Val, Table: InputRegister }
DDSToModbus:
Out_true1: { Index: 0, Type: BoolVal, Table: BitHolding }
Out_true2: { Index: 1, Type: BoolVal, Table: BitHolding }
Out_true3: { Index: 2, Type: BoolVal, Table: BitHolding }
Out_false1: { Index: 10, Type: BoolVal, Table: BitHolding }
Out_false2: { Index: 11, Type: BoolVal, Table: BitHolding }
Out_false3: { Index: 12, Type: BoolVal, Table: BitHolding }
Out_bool: { Index: 99, Type: BoolVal, Table: BitHolding } # Do not read this on server - included to test BitHoldingRegisterMinSize
Out_TestCounter: { Index: 18, Type: Uint16Val, Table: HoldingRegister }
Out_TestCounter: { Index: 199, Type: Uint16Val, Table: HoldingRegister } # Do not read this on server - included to test HoldingRegisterMinSize

logger.yml

Options:
PeriodMs: 1000
LogSetup:
Maxsamples: 10
CompressionLevel: 2
Directory: .
FilePrefix: Logs_
Title: Test logger
Origin: sintef
OriginType: ship
OriginId: IMOXXXXXX
Summary: Operational data from vessel testvessel
Signals:
- { Type: Uint16Val, Topic: TestCounter }
- { Type: Uint16Val, Topic: Out_TestCounter }
- { Type: Uint8Val , Topic: Out_TestCounter1 }
- { Type: Uint8Val , Topic: Out_TestCounter2 }
- { Type: Int8Val , Topic: In_int8 }
- { Type: Int8Val , Topic: Out_int8 }
- { Type: Int16Val , Topic: In_int16 }
- { Type: Int16Val , Topic: Out_int16 }
- { Type: Int32Val , Topic: In_int32 }
- { Type: Int32Val , Topic: Out_int32 }
- { Type: Int64Val , Topic: In_int64 }
- { Type: Int64Val , Topic: Out_int64 }
- { Type: Uint8Val , Topic: In_uint8 }
- { Type: Uint8Val , Topic: Out_uint8 }
- { Type: Uint16Val , Topic: In_uint16 }
- { Type: Uint16Val , Topic: Out_uint16 }
- { Type: Uint32Val , Topic: In_uint32 }
- { Type: Uint32Val , Topic: Out_uint32 }
- { Type: Uint64Val , Topic: In_uint64 }
- { Type: Uint64Val , Topic: Out_uint64 }
- { Type: DoubleVal , Topic: In_double }
- { Type: DoubleVal , Topic: Out_double }
- { Type: DoubleVal , Topic: Out_double_BEWO }
- { Type: DoubleVal , Topic: Out_double_LEWO }
- { Type: FloatVal , Topic: In_float }
- { Type: FloatVal , Topic: Out_float }
- { Type: FloatVal , Topic: Out_float_LEBO }
- { Type: FloatVal , Topic: Out_float_BEBO }
- { Type: FloatVal , Topic: Out_float_LEWO }
- { Type: FloatVal , Topic: Out_float_BEWO }
- { Type: Int16Val, Topic: In_intToScldDbl }
- { Type: DoubleVal, Topic: Out_intToScldDbl }
- { Type: DoubleVal, Topic: Out_intToScldDbl_offset }
- { Type: Uint16Val, Topic: Out_doubleInt16 }
- { Type: FloatVal, Topic: Out_doubleInt16Float }
- { Type: Float3 , Topic: In_float3 }
- { Type: Float3 , Topic: Out_float3 }
- { Type: Float3 , Topic: Out_float3_scaled }
- { Type: BoolVal , Topic: In_bool }
- { Type: BoolVal , Topic: Out_bool }
- { Type: BoolVal , Topic: In_i8neg }
- { Type: BoolVal , Topic: Out_i8neg }
- { Type: BoolVal , Topic: In_i16pos }
- { Type: BoolVal , Topic: Out_i16pos }
- { Type: BoolVal , Topic: In_i32neg }
- { Type: BoolVal , Topic: Out_i32neg }
- { Type: BoolVal , Topic: In_ui16neg }
- { Type: BoolVal , Topic: Out_ui16neg }
- { Type: BoolVal , Topic: In_true }
- { Type: BoolVal , Topic: In_false }
- { Type: BoolVal , Topic: Out_false1 }
- { Type: BoolVal , Topic: Out_false2 }
- { Type: BoolVal , Topic: Out_false3 }
- { Type: BoolVal , Topic: Out_false4 }
- { Type: BoolVal , Topic: Out_false5 }
- { Type: BoolVal , Topic: Out_true1 }
- { Type: BoolVal , Topic: Out_true2 }
- { Type: BoolVal , Topic: Out_true3 }
- { Type: BoolVal , Topic: Out_true4 }
- { Type: BoolVal , Topic: Out_true5 }
- { Type: BoolVal , Topic: Out_true6 }
- { Type: BoolVal , Topic: Out_bool_in_word }
- { Type: BoolVal , Topic: Out_i8neg_in_word }
- { Type: BoolVal , Topic: Out_i16pos_in_word }
- { Type: BoolVal , Topic: Out_i32neg_in_word }
- { Type: BoolVal , Topic: Out_ui16neg_in_word }
- { Type: BoolVal , Topic: Out_false1_in_word }
- { Type: BoolVal , Topic: Out_true1_in_word }
- { Type: BoolVal , Topic: Out_false2_in_word }
- { Type: BoolVal , Topic: Out_true2_in_word }
- { Type: BoolVal , Topic: Out_false3_in_word }
- { Type: BoolVal , Topic: Out_true3_in_word }
- { Type: BoolVal , Topic: Out_false4_in_word }
- { Type: BoolVal , Topic: Out_true4_in_word }
- { Type: BoolVal , Topic: Out_false5_in_word }
- { Type: BoolVal , Topic: Out_true5_in_word }
- { Type: BoolVal , Topic: Out_true6_in_word }
- { Type: DoubleVal , Topic: In_NaN }
- { Type: DoubleVal , Topic: Out_NaN_double }
- { Type: DoubleVal , Topic: Out_NaN_float }
- { Type: DoubleVal , Topic: Out_NaN_int16 }
- { Type: DoubleVal , Topic: Out_NaN_uint16 }
- { Type: DoubleVal , Topic: Out_NaN_int32 }
- { Type: DoubleVal , Topic: Out_NaN_uint32 }
- { Type: DoubleVal , Topic: In_inf }
- { Type: DoubleVal , Topic: Out_inf_double }
- { Type: DoubleVal , Topic: Out_inf_float }
- { Type: DoubleVal , Topic: Out_inf_int16 }
- { Type: DoubleVal , Topic: Out_inf_uint16 }
- { Type: DoubleVal , Topic: Out_inf_int32 }
- { Type: DoubleVal , Topic: Out_inf_uint32 }
- { Type: DoubleVal , Topic: In_infneg }
- { Type: DoubleVal , Topic: Out_infneg_double }
- { Type: DoubleVal , Topic: Out_infneg_float }
- { Type: DoubleVal , Topic: Out_infneg_int16 }
- { Type: DoubleVal , Topic: Out_infneg_uint16 }
- { Type: DoubleVal , Topic: Out_infneg_int32 }
- { Type: DoubleVal , Topic: Out_infneg_uint32 }
- { Type: BoolVal , Topic: Roundtrip_true1 }
- { Type: BoolVal , Topic: Roundtrip_true2 }
- { Type: BoolVal , Topic: Roundtrip_true3 }
- { Type: BoolVal , Topic: Roundtrip_false1 }
- { Type: BoolVal , Topic: Roundtrip_false2 }
- { Type: BoolVal , Topic: Roundtrip_false3 }
- { Type: Uint16Val, Topic: Roundtrip_TestCounter }