Hello everyone!
First, thanks to Chris for his reply in my PR, so here I am!
Issue:
1 When I read 400006:BOOL[1], it will get the last bit of 400006(2bytes).
Here is the source code:
github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model/DataItem.go
case dataType == ModbusDataType_BOOL && numberOfValues == uint16(1): // BOOL
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint16("reserved", 15); _err != nil {
return nil, errors.Wrap(_err, "Error parsing reserved field")
}
// Simple Field (value)
value, _valueErr := readBuffer.ReadBit("value")
if _valueErr != nil {
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
return values.NewPlcBOOL(value), nil
2 When I read 400006:BOOL[2], I get 400006 and 400007, the first two bits
of a total of 4 bytes.
Source code:
github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model/DataItem.go
case dataType == ModbusDataType_BOOL: // List
// Array Field (value)
var value []api.PlcValue
for i := 0; i < int(numberOfValues); i++ {
_item, _itemErr := readBuffer.ReadBit("value")
if _itemErr != nil {
return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
}
value = append(value, values.NewPlcBOOL(_item))
}
readBuffer.CloseContext("DataItem")
return values.NewPlcList(value), nil
I thought it was 400006:BOOL[1] to get the 2nd bit of 400006, but the "[1]"
match in the regular is "quantity". So, I'm not sure how to fix this
problem correctly. Let's discuss it here.
github.com/apache/plc4x/plc4go/internal/plc4go/modbus/FieldHandler.go
generalFixedDigitAddressPattern :=
`(?P<address>\d{4,5})?(:(?P<datatype>[a-zA-Z_]+))?(\[(?P<quantity>\d+)])?$`