From d91a802e7aa2ad4075ed803b8ddc7536a91a0ef0 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 27 十月 2023 20:33:06 +0800 Subject: [PATCH] update --- pkg/plc/modbusx/modbusrtu.go | 63 +++++-------------------------- 1 files changed, 10 insertions(+), 53 deletions(-) diff --git a/pkg/plc/modbusx/modbusrtu.go b/pkg/plc/modbusx/modbusrtu.go index 0d40e43..253bc88 100644 --- a/pkg/plc/modbusx/modbusrtu.go +++ b/pkg/plc/modbusx/modbusrtu.go @@ -1,80 +1,37 @@ package modbusx import ( - "apsClient/constvar" "apsClient/model/common" - "apsClient/pkg/logx" - "github.com/goburrow/modbus" - "time" ) func ReadByRTU(c *common.RTUConfig, address uint16, quantity uint16) (data []byte, err error) { - address-- - cli, err := getModbusRTUConnection(c) - if err != nil { - return nil, err - } + cli := getModbusRTUConnection(c) data, err = cli.ReadHoldingRegisters(address, quantity) + dealRTUErr(err, c.SerialName) if err != nil { - cli, err = getModbusRTUConnection(c) - if err != nil { - return nil, err - } + cli = getModbusRTUConnection(c) data, err = cli.ReadHoldingRegisters(address, quantity) - } - if err != nil { - logx.Errorf("ReadByRTU ReadHoldingRegisters err:%v", err) + dealRTUErr(err, c.SerialName) } return } func WriteByRTU(c *common.RTUConfig, address uint16, value int) (err error) { - address-- var bytesVal []byte bytesVal = intToBytes(value) - - cli, err := getModbusRTUConnection(c) - if err != nil { - return err - } + cli := getModbusRTUConnection(c) _, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal) + dealRTUErr(err, c.SerialName) if err != nil { - cli, err = getModbusRTUConnection(c) - if err != nil { - return err - } + cli = getModbusRTUConnection(c) _, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal) - } - if err != nil { - logx.Errorf("WriteByRTU WriteMultipleRegisters err:%v", err) + dealRTUErr(err, c.SerialName) } return err } -func getModbusRTUConnection(c *common.RTUConfig) (cli modbus.Client, err error) { - // Modbus RTU/ASCII - h := modbus.NewRTUClientHandler(c.SerialName) - h.BaudRate = c.BaudRate - h.DataBits = c.DataBit - switch c.Parity { - case constvar.ParityEven: - h.Parity = "E" - case constvar.ParityOdd: - h.Parity = "O" - case constvar.ParityNull: - h.Parity = "N" - } - - h.StopBits = c.StopBit - h.SlaveId = 1 - h.Timeout = 5 * time.Second - - err = h.Connect() +func dealRTUErr(err error, serialName string) { if err != nil { - logx.Errorf("getModbusRTUConnection Connect err:%v, config: %+v", err, c) - return nil, err + unsetModbusRTUConnection(serialName) //澶辫触鍒欏垹闄ょ紦瀛樼殑杩炴帴 } - defer h.Close() - cli = modbus.NewClient(h) - return } -- Gitblit v1.8.0