From bc0b7e914a378b2c40f9d2ec2470b61a19c18288 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 11 八月 2023 17:05:02 +0800
Subject: [PATCH] 修改上报的数据结构, 添加plc查询接口

---
 collector/device.go |   41 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/collector/device.go b/collector/device.go
index 9812adc..9de3d33 100644
--- a/collector/device.go
+++ b/collector/device.go
@@ -10,7 +10,8 @@
 )
 
 func getDeviceList() ([]msg.PLCDevice, error) {
-	responseBody, err := util.HttpPost(config.Options.ApsDeviceWebApi, nil)
+	token, _ := util.CreateToken()
+	responseBody, err := util.HttpPost(config.Options.DeviceListWebApi, nil, token)
 	if err != nil {
 		logger.Warn("get device list from aps error:%s", err.Error())
 		return nil, err
@@ -32,16 +33,16 @@
 func HandleDeviceUpdate(message []byte) error {
 	var device msg.PLCDevice
 
+	logger.Debug("receive device update msg: %s", string(message))
+
 	err := json.Unmarshal(message, &device)
 	if err != nil {
 		logger.Error("unmarshal device update msg error:%s", err.Error())
 		return err
 	}
 
-	if task, ok := mapTask.Load(device.DeviceID); ok {
-		// 瀛樺湪鐨勪换鍔�, 鍏堝仠姝㈡帀, 鐒跺悗閲嶆柊寮�鍚竴涓�
-		task.(collectorProc).cancel()
-	}
+	// 鍏堝仠鎺夋鍦ㄦ墽琛岀殑浠诲姟
+	stopTask(&device)
 
 	// 鍒ゆ柇鏄惁鏄噸鏂板惎鍔ㄧ殑鐘舵��, 鍚姩涓�涓柊鐨勪换鍔�
 	if device.Status == 0 {
@@ -50,3 +51,33 @@
 
 	return nil
 }
+
+func HandleDeviceReadRequest(device *msg.PLCDevice) *msg.PLCResponse {
+	procCache, ok := tasksStore.Load(device.DeviceID)
+	if ok {
+		if procCache.(*collectorProc).device.DeviceIP == device.DeviceIP {
+			return plc4xRequest(procCache.(*collectorProc))
+		}
+	}
+
+	plcConnection, err := NewModbusConnection(device.DeviceIP)
+	if err != nil {
+		logger.Warn("error connecting to PLC: %s, ip: %s", device.DeviceName, device.DeviceIP)
+
+		// 涓婃姤璁惧绂荤嚎
+		return &msg.PLCResponse{
+			DeviceID:   device.DeviceID,
+			DeviceName: device.DeviceName,
+			DeviceIP:   device.DeviceIP,
+			Online:     false,
+		}
+	}
+
+	proc := collectorProc{
+		device:  device,
+		cancel:  nil,
+		plcConn: &plcConnection,
+	}
+
+	return plc4xRequest(&proc)
+}

--
Gitblit v1.8.0