package modbusx import ( "apsClient/model/common" ) func ReadByRTU(c *common.RTUConfig, address uint16, quantity uint16) (data []byte, err error) { address-- cli := getModbusRTUConnection(c) data, err = cli.ReadHoldingRegisters(address, quantity) dealRTUErr(err, c.SerialName) if err != nil { cli = getModbusRTUConnection(c) data, err = cli.ReadHoldingRegisters(address, quantity) dealRTUErr(err, c.SerialName) } return } func WriteByRTU(c *common.RTUConfig, address uint16, value int, endian string, length int) (err error) { address-- var bytesVal []byte bytesVal = intToBytes(value, endian, length) cli := getModbusRTUConnection(c) _, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal) dealRTUErr(err, c.SerialName) if err != nil { cli = getModbusRTUConnection(c) _, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal) dealRTUErr(err, c.SerialName) } return err } func dealRTUErr(err error, serialName string) { if err != nil { unsetModbusRTUConnection(serialName) //失败则删除缓存的连接 } }