From 88da1e13a073e8b5656387a246d827593fbd6163 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 04 八月 2023 18:25:59 +0800
Subject: [PATCH] 添加设备查询,修改, 采集数据上报

---
 collector/collector.go |   83 ++++++++++++++++++++++++++++-------------
 1 files changed, 56 insertions(+), 27 deletions(-)

diff --git a/collector/collector.go b/collector/collector.go
index 15c6325..6a3f3f9 100644
--- a/collector/collector.go
+++ b/collector/collector.go
@@ -19,41 +19,66 @@
 }
 
 func InitTask() {
-	device := msg.PLCDevice{
-		Id:       "0",
-		Ip:       "192.168.1.188",
-		Address:  []int{17021},
-		Interval: 1,
+	//device := msg.PLCDevice{
+	//	DeviceID:   "0",
+	//	DeviceName: "test",
+	//	DeviceIP:   "192.168.1.188",
+	//	Brand:      "sim",
+	//	Method:     "modbus",
+	//	PortName:   "",
+	//	Frequency:  1,
+	//	Details: []*msg.PLCAddress{&msg.PLCAddress{
+	//		StartAddress: 17021,
+	//		Length:       1,
+	//		Type:         "int",
+	//		FieldName:    "count",
+	//	}},
+	//}
+
+	devices, err := getDeviceList()
+	if err != nil {
+		return
 	}
 
+	for idx, dev := range devices {
+		// 鍒ゆ柇璁惧鐘舵��, 濡傛灉閰嶇疆鏈紑鍚噰闆嗘暟鎹垨鍏朵粬鏂瑰紡, 鐜板湪鍋囪瀛楁status涓�0鏃朵唬琛ㄩ噰闆�
+		if dev.Status != 0 {
+			continue
+		}
+
+		addTask(&devices[idx])
+	}
+}
+
+func addTask(device *msg.PLCDevice) {
 	ctx, cancel := context.WithCancel(context.Background())
 	proc := collectorProc{
-		device: &device,
+		device: device,
 		cancel: cancel,
 	}
 
-	mapTask.Store(device.Id, &proc)
+	mapTask.Store(device.DeviceID, &proc)
 
-	go connectingDevice(ctx, &device)
+	go connectingDevice(ctx, device)
 }
 
 func connectingDevice(ctx context.Context, dev *msg.PLCDevice) {
 	plcResponse := msg.PLCResponse{
-		Id:     dev.Id,
-		Name:   dev.Name,
-		Ip:     dev.Ip,
-		Online: false,
+		DeviceID:   dev.DeviceID,
+		DeviceName: dev.DeviceName,
+		DeviceIP:   dev.DeviceIP,
+		Online:     false,
 	}
 
 	for {
 		select {
 		case <-ctx.Done():
-			logger.Warn("plc device %s, ip: %s, end of connecting.", dev.Name, dev.Ip)
+			logger.Warn("plc device %s, ip: %s, end of connecting.", dev.DeviceName, dev.DeviceIP)
 			return
 		default:
-			plcConnection, err := NewModbusConnection(dev.Ip)
+			plcConnection, err := NewModbusConnection(dev.DeviceIP)
 			if err != nil {
-				logger.Warn("error connecting to PLC: %s, ip: %s", dev.Name, dev.Ip)
+				logger.Warn("error connecting to PLC: %s, ip: %s", dev.DeviceName, dev.DeviceIP)
 				plcResponse.Online = false
 				msg.SendDeviceLiveData(&plcResponse)
 				time.Sleep(30 * time.Second)
@@ -68,35 +93,39 @@
 func runCollectionTask(ctx context.Context, dev *msg.PLCDevice, conn plc4go.PlcConnection) {
 	// 鍒涘缓modbusTCP杩炴帴, 寰幆鏌ヨ鏁版嵁骞朵笂鎶�
 	plcResponse := msg.PLCResponse{
-		Id:     dev.Id,
-		Name:   dev.Name,
-		Ip:     dev.Ip,
-		Online: true,
-		Data:   nil,
+		DeviceID:   dev.DeviceID,
+		DeviceName: dev.DeviceName,
+		DeviceIP:   dev.DeviceIP,
+		Online:     true,
 	}
 
 	for {
 		select {
 		case <-ctx.Done():
-			logger.Warn("plc device %s, ip: %s, end of collection.", dev.Name, dev.Ip)
+			logger.Warn("plc device %s, ip: %s, end of collection.", dev.DeviceName, dev.DeviceIP)
 			conn.Close()
 			return
 		default:
 			if !conn.IsConnected() {
-				logger.Warn("plc device %s, ip: %s, disconnected.", dev.Name, dev.Ip)
+				logger.Warn("plc device %s, ip: %s, disconnected.", dev.DeviceName, dev.DeviceIP)
 				return
 			}
 
 			// 鏍规嵁璁剧疆鐨勫湴鍧�鏌ヨ鏁版嵁锛屼笂鎶�
-			plcResponse.Data = make(map[int][]byte, 0)
 			plcResponse.Message = ""
-			for _, addr := range dev.Address {
-				result, err := ReadHoldingRegister(conn, addr)
+			for _, addr := range dev.Details {
+				result, err := ReadHoldingRegister(conn, addr.StartAddress, addr.Length)
 				if err != nil {
 					logger.Warn("plc device Read Holding Register error, %s", err.Error())
 					plcResponse.Message = err.Error()
 				} else {
-					plcResponse.Data[addr] = result
+					plcResponse.PLCData = append(plcResponse.PLCData, msg.PLCData{
+						StartAddress: addr.StartAddress,
+						Length:       addr.Length,
+						Type:         addr.Type,
+						FieldName:    addr.FieldName,
+						Data:         result,
+					})
 				}
 			}
 
@@ -106,7 +135,7 @@
 			}
 
 			// 闂撮殧鏃堕棿
-			time.Sleep(time.Duration(dev.Interval) * time.Second)
+			time.Sleep(time.Duration(dev.Frequency) * time.Second)
 		}
 	}
 }

--
Gitblit v1.8.0