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 }