From e77e66d681cd2676675d194211f171744e23b479 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 14 九月 2023 19:05:54 +0800
Subject: [PATCH] 从云端获取plc配置和plc地址
---
nsq/msg_handler.go | 67 +++++++++++++++++++++------------
model/common/common.go | 34 +++++++++++++++--
model/device_plc.go | 1
3 files changed, 73 insertions(+), 29 deletions(-)
diff --git a/model/common/common.go b/model/common/common.go
index 8a8783a..5eafc0d 100644
--- a/model/common/common.go
+++ b/model/common/common.go
@@ -1,6 +1,9 @@
package common
-import "github.com/shopspring/decimal"
+import (
+ "apsClient/constvar"
+ "github.com/shopspring/decimal"
+)
// 鎺掔▼浠诲姟涓嬪彂
type (
@@ -62,9 +65,32 @@
DeviceId string
}
ResponsePlcAddress struct {
- KeyData []byte
- AddressData []byte
- DeviceId string
+ KeyData []byte
+ AddressData []byte
+ DeviceId string
+ PlcAddressList []*PlcAddress
+ PlcConfig PlcConfig
+ }
+
+ PlcConfig struct {
+ Brand string `gorm:"type:varchar(191);comment:PLC鍝佺墝" json:"brand"`
+ Method constvar.PlcMethod `gorm:"type:varchar(191);comment:鎺ュ彛鏂瑰紡" json:"method"`
+ Address string `gorm:"type:varchar(191);comment:PLC鍦板潃" json:"address"` //plc ip鍦板潃锛� method = modbusTCP鐢�
+ Port int `gorm:"type:int(11);comment:绔彛" json:"port"` //plc 绔彛鍙凤紝 method = modbusTCP鐢�
+ BaudRate int `gorm:"type:int(11);comment:娉㈢壒鐜�" json:"baudRate"` //涓插彛娉㈢壒鐜囷紝 method = serial鏃� 鐢�
+ SerialName string `gorm:"type:int(11);comment:涓插彛鍚嶇О" json:"serialName"` //涓插彛鍚嶇О锛宮ethod = serial鏃� 鐢�
+ IsOpen bool `gorm:"type:tinyint(1);comment:鏄惁寮�鍚�" json:"isOpen"`
+ Detail string `gorm:"type:varchar(2048);comment:鏁版嵁璇︽儏" json:"-"`
+ Details []*PlcAddress `gorm:"-" json:"details"`
+ }
+
+ PlcAddress struct {
+ DeviceID string `json:"deviceID"` // 璁惧id
+ Position int `json:"position"` // 鐢熶骇浣嶇疆锛屼竴涓満鍣ㄥ彲鑳芥湁澶氫釜鏈轰綅锛岄渶瑕佸垎鍒厤缃畃lc鍦板潃
+ StartAddress int `json:"startAddress"` // 鏁版嵁璧峰鍦板潃
+ Length int `json:"length"` // 鏁版嵁闀垮害
+ Type string `json:"type"` // 鏁版嵁绫诲瀷
+ FieldName constvar.PlcStartAddressType `json:"fieldName"` // 瀵瑰簲绯荤粺瀛楁锛屽畬鎴愰噺鎴栨�婚噺
}
)
diff --git a/model/device_plc.go b/model/device_plc.go
index e02d2a7..d2690ea 100644
--- a/model/device_plc.go
+++ b/model/device_plc.go
@@ -33,6 +33,7 @@
}
DevicePlcAddress struct {
+ Position int `json:"position"` // 鏁版嵁璧峰鍦板潃
StartAddress int `json:"startAddress"` // 鏁版嵁璧峰鍦板潃
Length int `json:"length"` // 鏁版嵁闀垮害
Type constvar.PlcStartAddressValueType `json:"type"` // 鏁版嵁绫诲瀷
diff --git a/nsq/msg_handler.go b/nsq/msg_handler.go
index 36b5b9a..5237309 100644
--- a/nsq/msg_handler.go
+++ b/nsq/msg_handler.go
@@ -11,6 +11,7 @@
"apsClient/utils/file"
"encoding/json"
"fmt"
+ "github.com/mitchellh/mapstructure"
"github.com/spf13/cast"
"gorm.io/gorm"
"strings"
@@ -123,33 +124,49 @@
Topic: slf.Topic,
Message: data,
}
- if len(resp.KeyData) == 0 || len(resp.AddressData) == 0 {
- return nil
- }
- //鍐欏叆鍒版枃浠�
- err = file.WriteFile(fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataKeyFileName), resp.KeyData)
- if err != nil {
- return err
- }
- err = file.WriteFile(fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataValueFileName), resp.AddressData)
- if err != nil {
- return err
- }
- //鍐欏叆鍒板唴瀛�
- keyString := string(resp.KeyData)
- addressString := string(resp.AddressData)
+ if len(resp.KeyData) != 0 && len(resp.AddressData) != 0 {
+ //鍐欏叆鍒版枃浠�
+ err = file.WriteFile(fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataKeyFileName), resp.KeyData)
+ if err != nil {
+ return err
+ }
+ err = file.WriteFile(fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataValueFileName), resp.AddressData)
+ if err != nil {
+ return err
+ }
+ //鍐欏叆鍒板唴瀛�
+ keyString := string(resp.KeyData)
+ addressString := string(resp.AddressData)
- keys := strings.Split(keyString, "\n")
- addresses := strings.Split(addressString, "\n")
- if len(keys) != len(addresses) {
- logx.Error("plc address message error: key length not equal address length")
- return nil
+ keys := strings.Split(keyString, "\n")
+ addresses := strings.Split(addressString, "\n")
+ if len(keys) != len(addresses) {
+ logx.Error("plc address message error: key length not equal address length")
+ return nil
+ }
+ for i := 0; i < len(keys); i++ {
+ key := strings.ReplaceAll(keys[i], "\r", "")
+ address := cast.ToInt(strings.ReplaceAll(addresses[i], "\r", ""))
+ plc_address.Set(key, address)
+ logx.Infof("plc address set ok: key:%v, address:%v", key, address)
+ }
}
- for i := 0; i < len(keys); i++ {
- key := strings.ReplaceAll(keys[i], "\r", "")
- address := cast.ToInt(strings.ReplaceAll(addresses[i], "\r", ""))
- plc_address.Set(key, address)
- logx.Infof("plc address set ok: key:%v, address:%v", key, address)
+
+ var record model.DevicePlc
+ err = mapstructure.Decode(resp.PlcConfig, &record)
+ if err != nil {
+ logx.Infof("decode from PlcAddressList to DevicePlc Details err:%v", err)
+ }
+ err = mapstructure.Decode(resp.PlcAddressList, &record.Details)
+ if err != nil {
+ logx.Infof("decode from PlcAddressList to DevicePlc Details err:%v", err)
+ }
+ detail, err := json.Marshal(record.Details)
+ record.Detail = string(detail)
+ record.Id = 1
+ err = model.NewDevicePlcSearch().SetId(record.Id).Save(&record)
+ if err != nil {
+ return err
}
return nil
}
--
Gitblit v1.8.0