From 7a19301f6972e0b81490e57200a634e4e3731a4c Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期四, 17 十月 2024 01:42:23 +0800
Subject: [PATCH] 完善rfid读取楼层

---
 service/nvcs.go |   59 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/service/nvcs.go b/service/nvcs.go
index d7579ce..848ebcd 100644
--- a/service/nvcs.go
+++ b/service/nvcs.go
@@ -2,6 +2,7 @@
 
 import (
 	"bytes"
+	"context"
 	"encoding/binary"
 	"encoding/hex"
 	"encoding/json"
@@ -73,6 +74,7 @@
 )
 
 var ElevatorRunState int
+var ElevatorRunFloor string
 var RunningCorrectTaskId string
 
 func A1CorrectFloor() {
@@ -185,7 +187,28 @@
 
 	logger.Info("UDP server listening on port %s...", port)
 
+	rfidReader := rfid.NewReader(config.RFIDConf.DevName, 115200, 5)
+	if config.RFIDConf.ReadFloor {
+		defer rfidReader.CloseSerial()
+
+		err := rfidReader.OpenSerial()
+		if err != nil {
+			logger.Error("open rfid. %s", err.Error())
+			return
+		}
+
+		ctx, _ := context.WithCancel(context.Background())
+
+		go func() {
+			err := rfidReader.ReadEPCData(ctx)
+			if err != nil {
+				logger.Error("rfid read. %s", err.Error())
+			}
+		}()
+	}
+
 	var lastFloor int
+	var lastSaveTime int64
 	// 鏃犻檺寰幆绛夊緟鎺ユ敹鏁版嵁
 	for {
 		// 鍒涘缓涓�涓紦鍐插尯鏉ュ瓨鍌ㄦ帴鏀剁殑鏁版嵁
@@ -239,27 +262,38 @@
 		}
 
 		// correct floor when elevator stopped.
-		if elevator.Status.RunDir == 0 {
-			go A1CorrectFloor()
-		} else {
-			RunningCorrectTaskId = ""
-			if lastFloor == elevator.Status.Floor {
-				continue
-			}
+		//if elevator.Status.RunDir == 0 {
+		//	go A1CorrectFloor()
+		//} else {
+		//	RunningCorrectTaskId = ""
+		//}
+
+		if lastFloor == elevator.Status.Floor && (time.Now().Unix()-lastSaveTime < 2) {
+			continue
 		}
+		lastFloor = elevator.Status.Floor
+		lastSaveTime = time.Now().Unix()
 
 		// 绋嬪簭閮ㄧ讲鍦ㄨ澶囩, 瀛楃鍙犲姞鍣ㄤ笂鎶ョ殑鍚嶇О鍏佽涓虹┖. 鍦ㄤ簯绔�, 鍚嶇О蹇呴』涓庢憚鍍忔満鐩稿悓
 		if elevator.Name == "" {
 			elevator.Name = "1"
 		}
 
-		lastFloor = elevator.Status.Floor
+		ElevatorRunState = elevator.Status.RunDir
+		ElevatorRunFloor = elevator.Status.FloorName
+		if config.RFIDConf.ReadFloor && rfidReader.EPCData != "" {
+			ElevatorRunFloor, _ = rfid.Parse2Floor(rfidReader.EPCData)
+
+			if ElevatorRunFloor != elevator.Status.FloorName {
+				logger.Warn("rfid epc %s, nvcs floor %s", ElevatorRunFloor, elevator.Status.FloorName)
+			}
+		}
 
 		go func() {
 			var d = models.Positions{
 				DeviceId:   elevator.Name,
-				Pos:        elevator.Status.FloorName,
-				RunDir:     elevator.Status.RunDir,
+				Pos:        ElevatorRunFloor,
+				RunDir:     ElevatorRunState,
 				CreateTime: time.Now().Unix(),
 				TimeString: time.Now().Format("2006-01-02 15:04:05"),
 			}
@@ -364,6 +398,9 @@
 			iRunState = RunDown
 		}
 
+		ElevatorRunState = iRunState
+		ElevatorRunFloor = req.State.Floor
+
 		//// 宸插埌鏈�涓嬪眰
 		//if req.State.Floor == A2BottomFloor {
 		//	runState = "涓�"
@@ -430,6 +467,8 @@
 		}
 
 		iRunState = req.Status
+		ElevatorRunState = req.Status
+		ElevatorRunFloor = fmt.Sprintf("%dF", req.Floor)
 		logger.Debug("Received A2 report data %+v", req)
 
 		// 璁板綍鐢垫杩愯鐘舵��

--
Gitblit v1.8.0