fix(inputs.modbus): Check number of register for datatype (#13485)
This commit is contained in:
parent
577db893e2
commit
c459d7b8ff
|
|
@ -224,12 +224,30 @@ func (c *ConfigurationOriginal) validateFieldDefinitions(fieldDefs []fieldDefini
|
||||||
return fmt.Errorf("invalid byte order %q and address '%v' in %q - %q", item.ByteOrder, item.Address, registerType, item.Name)
|
return fmt.Errorf("invalid byte order %q and address '%v' in %q - %q", item.ByteOrder, item.Address, registerType, item.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for the request size corresponding to the data-type
|
||||||
|
var requiredAddresses int
|
||||||
|
switch item.DataType {
|
||||||
|
case "INT8L", "INT8H", "UINT8L", "UINT8H", "UINT16", "INT16", "FLOAT16-IEEE":
|
||||||
|
requiredAddresses = 1
|
||||||
|
case "UINT32", "INT32", "FLOAT32-IEEE":
|
||||||
|
requiredAddresses = 2
|
||||||
|
|
||||||
|
case "UINT64", "INT64", "FLOAT64-IEEE":
|
||||||
|
requiredAddresses = 4
|
||||||
|
}
|
||||||
|
if requiredAddresses > 0 && len(item.Address) != requiredAddresses {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"invalid address '%v' length '%v'in %q - %q, expecting %d entries for datatype",
|
||||||
|
item.Address, len(item.Address), registerType, item.Name, requiredAddresses,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// search duplicated
|
// search duplicated
|
||||||
if len(item.Address) > len(removeDuplicates(item.Address)) {
|
if len(item.Address) > len(removeDuplicates(item.Address)) {
|
||||||
return fmt.Errorf("duplicate address '%v' in %q - %q", item.Address, registerType, item.Name)
|
return fmt.Errorf("duplicate address '%v' in %q - %q", item.Address, registerType, item.Name)
|
||||||
}
|
}
|
||||||
} else if len(item.Address) != 1 {
|
} else if len(item.Address) != 1 {
|
||||||
return fmt.Errorf("invalid address'%v' length'%v' in %q - %q", item.Address, len(item.Address), registerType, item.Name)
|
return fmt.Errorf("invalid address '%v' length '%v'in %q - %q", item.Address, len(item.Address), registerType, item.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
invalid address
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
[[inputs.modbus]]
|
||||||
|
name = "Device"
|
||||||
|
slave_id = 1
|
||||||
|
timeout = "1s"
|
||||||
|
controller = "tcp://localhost:502"
|
||||||
|
|
||||||
|
holding_registers = [
|
||||||
|
{ name = "data", byte_order = "DCBA", data_type = "UINT64", scale=0.01, address = [0, 1]}
|
||||||
|
]
|
||||||
Loading…
Reference in New Issue