From 89e641d91e5e7bb3e77db7e066e32db68139868e Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 27 十一月 2023 10:40:19 +0800
Subject: [PATCH] plc连接状态存储按设备存储
---
pkg/plccom/plccom.go | 32 ++++++++++++++++++++++++++++----
1 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/pkg/plccom/plccom.go b/pkg/plccom/plccom.go
index eca7403..43e2b9b 100644
--- a/pkg/plccom/plccom.go
+++ b/pkg/plccom/plccom.go
@@ -19,11 +19,18 @@
// MakeReadProtocol 鍒涘缓璇诲彇鏁版嵁鐨勫崗璁�
MakeReadProtocol(addr string) []byte
+ // MakeReadProtocolBits 鍒涘缓璇诲彇鏁版嵁鐨勫崗璁�
+ MakeReadProtocolBits(bits int, addr string) []byte
+
// MakeWriteProtocol 鍒涘缓鍐欏叆鏁版嵁鐨勫崗璁�
MakeWriteProtocol(addr string, value int) []byte
+ MakeWriteProtocolBits(bits int, addr string, ival int) []byte
+
// ParseReadValue 瑙f瀽浠庤澶囪鍙栫殑鍊�
ParseReadValue(data []byte) int
+
+ ParseReadValueBits(data []byte) int
// ParseWriteValue 瑙f瀽鍐欏叆璁惧鐨勭粨鏋滐紝骞惰繑鍥炵粨鏋滃拰鏄惁鎴愬姛
ParseWriteValue(data []byte) (int, bool)
@@ -49,13 +56,19 @@
return protocol, nil
}
-func ReadPLC(deviceType, url, label string) (val int, err error) {
+func ReadPLC(deviceType, url, label string, length int) (val int, err error) {
protocol, err := LoadProtocol(deviceType)
if err != nil {
return 0, err
}
addr := protocol.ConvertLabelToAddress(label)
- proto := protocol.MakeReadProtocol(addr)
+ var proto []byte
+ if length == 1 {
+ proto = protocol.MakeReadProtocol(addr)
+ } else {
+ proto = protocol.MakeReadProtocolBits(length*16, addr)
+ }
+
bp := base64.StdEncoding.EncodeToString(proto)
fullUrl := fmt.Sprintf("%v?proto=%v", url, bp)
resp, err := http.Get(fullUrl)
@@ -69,7 +82,12 @@
logx.Errorf("ReadPLC base64.StdEncoding.DecodeString failed: %v, data: %v", err, string(body))
return 0, err
}
- val = protocol.ParseReadValue(data)
+ if length == 1 {
+ val = protocol.ParseReadValue(data)
+ } else {
+ val = protocol.ParseReadValueBits(data)
+ }
+
fmt.Println("read PLC:", val)
return val, nil
@@ -91,7 +109,13 @@
return err
}
addr := protocol.ConvertLabelToAddress(label)
- proto := protocol.MakeWriteProtocol(addr, val)
+ var proto []byte
+ if val < 65536 {
+ proto = protocol.MakeWriteProtocol(addr, val)
+ } else {
+ proto = protocol.MakeWriteProtocolBits(32, addr, val)
+ }
+
bp := base64.StdEncoding.EncodeToString(proto)
resp, err := http.Post(url, "text/plain", strings.NewReader(bp))
if err != nil {
--
Gitblit v1.8.0