Modbus: fix writing bool values (#12972)
This commit is contained in:
parent
22498e1637
commit
f25c0eece6
3 changed files with 17 additions and 6 deletions
|
|
@ -174,12 +174,20 @@ func (m *Modbus) writeFunc() (func(float64) error, error) {
|
|||
return func(val float64) error {
|
||||
val *= m.scale
|
||||
|
||||
switch {
|
||||
case op.FuncCode == gridx.FuncCodeWriteSingleRegister:
|
||||
switch op.FuncCode {
|
||||
case gridx.FuncCodeWriteSingleCoil:
|
||||
var uval uint16
|
||||
if val != 0 {
|
||||
uval = 0xFF00
|
||||
}
|
||||
_, err = m.conn.WriteSingleCoil(op.Addr, uval)
|
||||
return err
|
||||
|
||||
case gridx.FuncCodeWriteSingleRegister:
|
||||
_, err = m.conn.WriteSingleRegister(op.Addr, uint16(val))
|
||||
return err
|
||||
|
||||
case op.FuncCode == gridx.FuncCodeWriteMultipleRegisters:
|
||||
case gridx.FuncCodeWriteMultipleRegisters:
|
||||
b, err := encode(val)
|
||||
if err == nil {
|
||||
_, err = m.conn.WriteMultipleRegisters(op.Addr, op.Length, b)
|
||||
|
|
|
|||
|
|
@ -182,8 +182,8 @@ func (mb *Connection) ReadCoils(address, quantity uint16) ([]byte, error) {
|
|||
return mb.ReadCoilsWithSlave(mb.slaveID, address, quantity)
|
||||
}
|
||||
|
||||
func (mb *Connection) WriteSingleCoil(address, quantity uint16) ([]byte, error) {
|
||||
return mb.WriteSingleCoilWithSlave(mb.slaveID, address, quantity)
|
||||
func (mb *Connection) WriteSingleCoil(address, value uint16) ([]byte, error) {
|
||||
return mb.WriteSingleCoilWithSlave(mb.slaveID, address, value)
|
||||
}
|
||||
|
||||
func (mb *Connection) ReadInputRegisters(address, quantity uint16) ([]byte, error) {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ func (r Register) Length() (uint16, error) {
|
|||
case strings.Contains(enc, "64"):
|
||||
return 4, nil
|
||||
default:
|
||||
return 0, fmt.Errorf("invalid register encoding: %s", enc)
|
||||
return 0, fmt.Errorf("invalid register length: %s", enc)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -171,6 +171,9 @@ func (r Register) EncodeFunc() (func(float64) ([]byte, error), error) {
|
|||
enc := strings.ToLower(r.encoding())
|
||||
|
||||
switch {
|
||||
case strings.HasPrefix(enc, "bool"):
|
||||
fallthrough
|
||||
|
||||
case strings.HasPrefix(enc, "int") || strings.HasPrefix(enc, "uint"):
|
||||
return r.encodeToBytes(func(v float64) uint64 {
|
||||
return uint64(v)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue