From a699ff979c84d024ca33fb1139224258f278319f Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 20 十月 2023 11:32:23 +0800
Subject: [PATCH] debug
---
pkg/plc/modbusx/modbus.go | 28 ++++++++++++++++++++++------
1 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/pkg/plc/modbusx/modbus.go b/pkg/plc/modbusx/modbus.go
index 4bb3b64..2d323ec 100644
--- a/pkg/plc/modbusx/modbus.go
+++ b/pkg/plc/modbusx/modbus.go
@@ -1,28 +1,44 @@
package modbusx
import (
- "encoding/json"
+ "encoding/binary"
"sync/atomic"
)
func Read(ipAddr string, address uint16, quantity uint16) (data []byte, err error) {
+ address--
cli := getModbusConnection(ipAddr)
data, err = cli.ReadHoldingRegisters(address, quantity)
dealErr(err, ipAddr)
+ if err != nil {
+ cli = getModbusConnection(ipAddr)
+ data, err = cli.ReadHoldingRegisters(address, quantity)
+ dealErr(err, ipAddr)
+ }
return
}
-func Write(ipAddr string, address uint16, value interface{}) (err error) {
- bytesVal, err := json.Marshal(value)
- if err != nil {
- return err
- }
+func Write(ipAddr string, address uint16, value int) (err error) {
+ address--
+ var bytesVal []byte
+ bytesVal = intToBytes(value)
cli := getModbusConnection(ipAddr)
_, err = cli.WriteMultipleRegisters(address, uint16(len(bytesVal)), bytesVal)
dealErr(err, ipAddr)
return err
}
+func intToBytes(value int) (data []byte) {
+ if value <= 1<<16 {
+ data = make([]byte, 2)
+ binary.BigEndian.PutUint16(data, uint16(value))
+ } else {
+ data = make([]byte, 4)
+ binary.BigEndian.PutUint32(data, uint32(value))
+ }
+ return
+}
+
func dealErr(err error, ipAddr string) {
if err != nil {
unsetModbusConnection(ipAddr) //澶辫触鍒欏垹闄ょ紦瀛樼殑杩炴帴
--
Gitblit v1.8.0