From 5220cfff6d68f24875c5ce832bbe4541b9fe6639 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 08 十二月 2023 10:26:38 +0800
Subject: [PATCH] 使用雪花算法生成表id,解决数据同步表相同记录id不一致问题
---
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 93f8644..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", err)
- return nil, err
+ unsetModbusRTUConnection(serialName) //澶辫触鍒欏垹闄ょ紦瀛樼殑杩炴帴
}
- defer h.Close()
- cli = modbus.NewClient(h)
- return
}
--
Gitblit v1.8.0