diff --git a/device/commManage.go b/device/commManage.go index 427829c..9b0a054 100644 --- a/device/commManage.go +++ b/device/commManage.go @@ -80,58 +80,58 @@ func CommunicationManageDel(){ //log.Printf("funName %s\n", cmd.funName) - for k,v := range DeviceInterfaceMap[cmd.interfaceID].DeviceNodeAddrMap{ - if v == cmd.deviceAddr{ + for k,v := range DeviceInterfaceMap[cmd.interfaceID].DeviceNodeMap{ + if v.Addr == cmd.deviceAddr{ log.Printf("index is %d\n",k) //--------------组包--------------------------- - //txBuf := DeviceInterfaceMap[cmd.interfaceID].DeviceNodeMap[k].GetDeviceRealVariables() - //log.Printf("tx buf is %+v\n",txBuf) + txBuf := DeviceInterfaceMap[cmd.interfaceID].DeviceNodeMap[k].GenerateGetRealVariables(v.Addr) + log.Printf("tx buf is %+v\n",txBuf) //---------------发送------------------------- - //setting.SerialInterface.SerialPort[cmd.interfaceID].Write(txBuf) + setting.SerialInterface.SerialPort[cmd.interfaceID].Write(txBuf) //---------------等待接收---------------------- //阻塞读 - //rxBuf := make([]byte, 256) - //rxTotalBuf := make([]byte,0) - //rxBufCnt := 0 - //rxTotalBufCnt := 0 - //timeOut,_ := strconv.Atoi(setting.SerialInterface.SerialParam[cmd.interfaceID].Timeout) - //timer := time.NewTimer(time.Duration(timeOut)*time.Millisecond) - //for { - // select{ - // //是否正确收到数据包 - // case <-DeviceInterfaceMap[cmd.interfaceID].DeviceNodeMap[k].ProcessRx(rxChan,rxTotalBuf,rxTotalBufCnt): - // { - // log.Println("rx ok") - // //通信帧延时 - // interval,_ := strconv.Atoi(setting.SerialInterface.SerialParam[cmd.interfaceID].Interval) - // time.Sleep(time.Duration(interval)*time.Millisecond) - // goto Loop - // } - // //是否接收超时 - // case <-timer.C: - // { - // log.Println("rx timeout") - // //通信帧延时 - // interval,_ := strconv.Atoi(setting.SerialInterface.SerialParam[cmd.interfaceID].Interval) - // time.Sleep(time.Duration(interval)*time.Millisecond) - // goto Loop - // } - // //继续接收数据 - // default: - // { - // rxBufCnt,_ = setting.SerialInterface.SerialPort[cmd.interfaceID].Read(rxBuf) - // if rxBufCnt > 0{ - // rxTotalBufCnt += rxBufCnt - // //追加接收的数据到接收缓冲区 - // rxTotalBuf = append(rxTotalBuf,rxBuf[:rxBufCnt]...) - // //清除本地接收数据 - // rxBufCnt = 0 - // log.Printf("rxbuf %+v\n",rxTotalBuf) - // } - // } - // } - //} - //Loop: + rxBuf := make([]byte, 256) + rxTotalBuf := make([]byte,0) + rxBufCnt := 0 + rxTotalBufCnt := 0 + timeOut,_ := strconv.Atoi(setting.SerialInterface.SerialParam[cmd.interfaceID].Timeout) + timer := time.NewTimer(time.Duration(timeOut)*time.Millisecond) + for { + select{ + //是否正确收到数据包 + case <-DeviceInterfaceMap[cmd.interfaceID].DeviceNodeMap[k].AnalysisRx(v.Addr,v.VariableMap,rxTotalBuf,rxTotalBufCnt): + { + log.Println("rx ok") + //通信帧延时 + interval,_ := strconv.Atoi(setting.SerialInterface.SerialParam[cmd.interfaceID].Interval) + time.Sleep(time.Duration(interval)*time.Millisecond) + goto Loop + } + //是否接收超时 + case <-timer.C: + { + log.Println("rx timeout") + //通信帧延时 + interval,_ := strconv.Atoi(setting.SerialInterface.SerialParam[cmd.interfaceID].Interval) + time.Sleep(time.Duration(interval)*time.Millisecond) + goto Loop + } + //继续接收数据 + default: + { + rxBufCnt,_ = setting.SerialInterface.SerialPort[cmd.interfaceID].Read(rxBuf) + if rxBufCnt > 0{ + rxTotalBufCnt += rxBufCnt + //追加接收的数据到接收缓冲区 + rxTotalBuf = append(rxTotalBuf,rxBuf[:rxBufCnt]...) + //清除本地接收数据 + rxBufCnt = 0 + log.Printf("rxbuf %+v\n",rxTotalBuf) + } + } + } + } + Loop: } } } @@ -158,15 +158,15 @@ func CommunicationManageAddEmergencyTest(){ func CommunicationManagePoll(){ - //cmd := CommunicationCmd{} - // - //for i:=0;i 0{ + aParam.Code = "0" + aParam.Message = "" + aParam.Data = device.DeviceNodeTypeMap.DeviceNodeType + }else{ + aParam.Code = "1" + aParam.Message = "nodeTypeCnt is 0" + aParam.Data = device.DeviceNodeTypeMap.DeviceNodeType + } + - aParam.Code = "0" - aParam.Message = "" - aParam.Data = device.DeviceInterfaceParamMap.DeviceNodeTypeMap sJson, _ := json.Marshal(aParam) diff --git a/httpServer/routerWeb.go b/httpServer/routerWeb.go index 43854d6..bd8853c 100644 --- a/httpServer/routerWeb.go +++ b/httpServer/routerWeb.go @@ -11,8 +11,6 @@ func RouterWeb() http.Handler { router := gin.Default() //router := gin.New() - //router.Use(gin.Logger()) - loginRouter := router.Group("/api/v1/system/") { loginRouter.POST("/login",apiLogin) @@ -125,3 +123,5 @@ func RouterWeb() http.Handler { return router } + + diff --git a/plugin/wdt200.go b/plugin/wdt200.go index 63af11c..28f8758 100644 --- a/plugin/wdt200.go +++ b/plugin/wdt200.go @@ -6,6 +6,7 @@ import ( "log" "strconv" "sync" + "time" ) type DeviceNodeTemplate struct{ @@ -111,7 +112,9 @@ func GenerateGetRealVariables(sAddr string) []byte{ return requestAdu } -func AnalysisRx(sAddr string,rxBuf []byte,rxBufCnt int) bool{ +func AnalysisRx(sAddr string,variables []api.VariableTemplate,rxBuf []byte,rxBufCnt int) chan bool{ + + status := make(chan bool,1) addr,_ := strconv.Atoi(sAddr) @@ -119,32 +122,33 @@ func AnalysisRx(sAddr string,rxBuf []byte,rxBufCnt int) bool{ for { if index < rxBufCnt{ if rxBufCnt < 4{ - return false + return status } crc := crc16(rxBuf[0:len(rxBuf)-2]) expect := binary.LittleEndian.Uint16(rxBuf[len(rxBuf)-2:]) if crc != expect{ - return false + return status } - if rxBuf[0] != byte(addr){ - return false + return status } if rxBuf[1] != 0x03{ - return false + return status } if rxBuf[2] != 4{ - return false + return status } log.Println("processRx ok") - //timeNowStr := time.Now().Format("2006-01-02 15:04:05") + timeNowStr := time.Now().Format("2006-01-02 15:04:05") - return true + variables[0].TimeStamp = timeNowStr + status<-true + return status }else{ break } index++ } - return false + return status } \ No newline at end of file diff --git a/plugin/wdt200.so b/plugin/wdt200.so index ea3363e..530965c 100644 Binary files a/plugin/wdt200.so and b/plugin/wdt200.so differ diff --git a/selfpara/deviceNodeManage.json b/selfpara/deviceNodeManage.json index 8eb23e6..d9b37c1 100755 --- a/selfpara/deviceNodeManage.json +++ b/selfpara/deviceNodeManage.json @@ -1 +1 @@ -{"DeviceInterfaceParam":[{"InterfaceID":0,"PollPeriod":60,"OfflinePeriod":180,"DeviceNodeCnt":0,"DeviceNodeMap":[],"DeviceAddrMap":[],"DeviceTypeMap":[]},{"InterfaceID":1,"PollPeriod":60,"OfflinePeriod":180,"DeviceNodeCnt":0,"DeviceNodeMap":[],"DeviceAddrMap":[],"DeviceTypeMap":[]}],"DeviceNodeTypeMap":[{"templateID":0,"templateName":"wdt","templateType":"wdt200","templateMessage":"风机盘管控制器"}]} \ No newline at end of file +{"DeviceInterfaceParam":[{"InterfaceID":0,"PollPeriod":60,"OfflinePeriod":180,"DeviceNodeCnt":2,"DeviceAddrMap":["1","2"],"DeviceTypeMap":["wdt200","wdt200"]},{"InterfaceID":1,"PollPeriod":60,"OfflinePeriod":180,"DeviceNodeCnt":0,"DeviceAddrMap":null,"DeviceTypeMap":null}]} \ No newline at end of file diff --git a/selfpara/deviceNodeType.json b/selfpara/deviceNodeType.json new file mode 100755 index 0000000..d8b5db1 --- /dev/null +++ b/selfpara/deviceNodeType.json @@ -0,0 +1 @@ +{"DeviceNodeType":[{"templateID":0,"templateName":"风机盘管控制器","templateType":"wdt200","templateMessage":""}]} \ No newline at end of file