From b4a86051e9bf4888fd5d01c12232a26f3874e03b Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期四, 17 十月 2024 21:30:18 +0800 Subject: [PATCH] 完善epc读取楼层 --- service/nvcs.go | 166 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 140 insertions(+), 26 deletions(-) diff --git a/service/nvcs.go b/service/nvcs.go index 3e21a84..6c331de 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() { @@ -98,9 +100,9 @@ address := "192.168.10.253:50000" err := A1SendFrame(frame, address) if err != nil { - logger.Debug("The floor has been calibrated.") - } else { logger.Warn(err.Error()) + } else { + logger.Debug("The floor has been calibrated.") } } } @@ -185,6 +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 { // 鍒涘缓涓�涓紦鍐插尯鏉ュ瓨鍌ㄦ帴鏀剁殑鏁版嵁 @@ -216,9 +240,6 @@ elevator := data.Elevator[0] - // 璁板綍鐢垫杩愯鐘舵�� - ElevatorRunState = elevator.Status.RunDir - var runStateStr string if config.NVCSConf.RunState { if elevator.Status.RunDir == RunUp { @@ -232,38 +253,56 @@ runStateStr = "" } - // 璁剧疆osd 鏍煎紡 "1F涓� 鍥� 鏋�" - if config.NVCSConf.OSD != "" { - floorText := fmt.Sprintf("%s%s %s", data.Elevator[0].Status.FloorName, runStateStr, config.NVCSConf.OSD) - - // 璋冪敤hik api 灏嗘枃瀛楁坊鍔犲埌osd鐨勫乏涓嬭 - AddFloorToOSD(floorText) - } - // correct floor when elevator stopped. - if ElevatorRunState == 0 { - A1CorrectFloor() - } else { - RunningCorrectTaskId = "" + //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" } - var d = models.Positions{ - DeviceId: elevator.Name, - Pos: elevator.Status.FloorName, - RunDir: elevator.Status.RunDir, - CreateTime: time.Now().Unix(), - TimeString: time.Now().Format("2006-01-02 15:04:05"), + ElevatorRunState = elevator.Status.RunDir + ElevatorRunFloor = elevator.Status.FloorName + if config.RFIDConf.ReadFloor && rfidReader.EPCData != "" { + ElevatorRunFloor, _ = rfid.Parse2Floor(rfidReader.EPCData) + logger.Debug("rfid read epc floor %s", ElevatorRunFloor) + if elevator.Status.RunDir == RunStop && ElevatorRunFloor != elevator.Status.FloorName { + logger.Warn("A floor error has occurred rfid epc %s, nvcs floor %s", ElevatorRunFloor, elevator.Status.FloorName) + } } - err = d.Save() - if err != nil { - logger.Warn("Device position update error:%s", err.Error()) + // 璁剧疆osd 鏍煎紡 "1F涓� 鍥� 鏋�" + if config.NVCSConf.OSD != "" { + floorText := fmt.Sprintf("%s%s %s", ElevatorRunFloor, runStateStr, config.NVCSConf.OSD) + + // 璋冪敤hik api 灏嗘枃瀛楁坊鍔犲埌osd鐨勫乏涓嬭 + AddFloorToOSD(floorText) } + + go func() { + var d = models.Positions{ + DeviceId: elevator.Name, + Pos: ElevatorRunFloor, + RunDir: ElevatorRunState, + CreateTime: time.Now().Unix(), + TimeString: time.Now().Format("2006-01-02 15:04:05"), + } + + err = d.Save() + if err != nil { + logger.Warn("Device position update error:%s", err.Error()) + } + }() } } @@ -359,6 +398,9 @@ iRunState = RunDown } + ElevatorRunState = iRunState + ElevatorRunFloor = req.State.Floor + //// 宸插埌鏈�涓嬪眰 //if req.State.Floor == A2BottomFloor { // runState = "涓�" @@ -402,11 +444,83 @@ } } +type A3ElevatorData struct { + Id string `json:"id"` + Time string `json:"time"` + Total int `json:"total"` + Status int `json:"status"` + Floor int `json:"floor"` +} + +func NVCSA3WebServer() { + r := gin.Default() + + r.POST("/", func(c *gin.Context) { + var req A3ElevatorData + var runState string + var iRunState int + + err := c.BindJSON(&req) + if err != nil { + c.JSON(http.StatusBadRequest, nil) + return + } + + iRunState = req.Status + ElevatorRunState = req.Status + ElevatorRunFloor = fmt.Sprintf("%dF", req.Floor) + logger.Debug("Received A2 report data %+v", req) + + // 璁板綍鐢垫杩愯鐘舵�� + if iRunState == RunUp { + runState = "涓�" + } else if iRunState == RunDown { + runState = "涓�" + } + + if !config.NVCSConf.RunState { + runState = "" + } + + if config.NVCSConf.OSD != "" { + floorText := fmt.Sprintf("%dF%s %s", req.Floor, runState, config.NVCSConf.OSD) + + // 璋冪敤hik api 灏嗘枃瀛楁坊鍔犲埌osd鐨勫乏涓嬭 + AddFloorToOSD(floorText) + } + + var d = models.Positions{ + DeviceId: req.Id, + Pos: fmt.Sprintf("%dF", req.Floor), + RunDir: iRunState, + CreateTime: time.Now().Unix(), + TimeString: time.Now().Format("2006-01-02 15:04:05"), + } + + err = d.Save() + if err != nil { + logger.Warn("Device position update error:%s", err.Error()) + } + + c.JSON(http.StatusOK, "ok") + }) + + err := r.Run(fmt.Sprintf(":%s", config.NVCSConf.Port)) + if err != nil { + logger.Warn("Start NVCS WebServer error, %s", err.Error()) + } +} + func StartNVCSServer() { if config.NVCSConf.Model == "A1" { go NVCSA1UDPServer() } + if config.NVCSConf.Model == "A2" { go NVCSA2WebServer() } + + if config.NVCSConf.Model == "A3" { + go NVCSA3WebServer() + } } -- Gitblit v1.8.0