zhangzengfei
2024-10-17 7a19301f6972e0b81490e57200a634e4e3731a4c
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)
      // 记录电梯运行状态