From cf96f6bc1fb484fde16bd5ed6d49534c96958022 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 25 九月 2023 15:43:12 +0800 Subject: [PATCH] fix --- api/v1/plc.go | 130 +++++++++++++++++++++++++++++-------------- 1 files changed, 88 insertions(+), 42 deletions(-) diff --git a/api/v1/plc.go b/api/v1/plc.go index bec602d..85624bd 100644 --- a/api/v1/plc.go +++ b/api/v1/plc.go @@ -1,80 +1,126 @@ package v1 import ( + "apsClient/conf" "apsClient/constvar" + "apsClient/model/request" "apsClient/model/response" _ "apsClient/model/response" "apsClient/pkg/contextx" "apsClient/pkg/ecode" "apsClient/pkg/logx" - "apsClient/pkg/plc" + "apsClient/pkg/plc/apacheplc4x" "apsClient/service" - "encoding/json" "github.com/gin-gonic/gin" + "github.com/spf13/cast" + "time" ) type PlcApi struct{} // GetProductProgress -// @Tags 鑾峰彇鍔ㄦ�佹暟鎹� +// @Tags 鐢熶骇鏁伴噺 // @Summary 鑾峰彇鐢熶骇杩涘害 // @Produce application/json +// @Param object body request.SendProcessParams true "鏌ヨ鍙傛暟" // @Success 200 {object} contextx.Response{data=response.ProductProgress} "鎴愬姛" -// @Router /v1/plc/productProgress [get] +// @Router /v1/plc/productProgress [post] func (slf *PlcApi) GetProductProgress(c *gin.Context) { + var params request.GetProductProgress + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + finishNumber, _ := service.PlcCacheGet(params.Channel, constvar.PlcCacheKeyFinishNumber) + totalNumber, _ := service.PlcCacheGet(params.Channel, constvar.PlcCacheKeyTotalNumber) + resp := new(response.ProductProgress) + resp.FinishNumber = cast.ToInt(finishNumber) + resp.TotalNumber = cast.ToInt(totalNumber) + + plcStatus := 1 //鏂紑杩炴帴 + isConnect := service.PlcIsConnect() + if isConnect { + lastUpdateTime := service.FinishUpdateTimeGet(params.Channel) + if time.Now().Unix()-cast.ToInt64(lastUpdateTime) < conf.Conf.PLC.StandbyTime { //鐢熶骇 + plcStatus = 2 + } else { + plcStatus = 3 //寰呮満 + } + } + resp.PlcStatus = plcStatus + + ctx.OkWithDetailed(resp) +} + +// SetProductNumber +// @Tags 鐢熶骇鏁伴噺 +// @Summary 璁剧疆鐢熶骇鎬婚噺 +// @Produce application/json +// @Success 200 {object} contextx.Response{} "鎴愬姛" +// @Router /v1/plc/setProductNumber [post] +func (slf *PlcApi) SetProductNumber(c *gin.Context) { ctx, ok := contextx.NewContext(c, nil) if !ok { return } + ctx.Ok() +} +// GetProductProgressRealTime +// @Tags 鐢熶骇鏁伴噺 +// @Summary 瀹炴椂鑾峰彇鐢熶骇杩涘害 +// @Produce application/json +// @Success 200 {object} contextx.Response{data=response.ProductProgress} "鎴愬姛" +// @Router /v1/plc/productProgressRealTime [post] +func (slf *PlcApi) GetProductProgressRealTime(c *gin.Context) { + ctx, ok := contextx.NewContext(c, nil) + if !ok { + return + } + var finishNumber, totalNumber int64 plcConfig, code := service.NewDevicePlcService().GetDevicePlc() if code != ecode.OK { - ctx.FailWithMsg(ecode.UnknownErr, "璇峰厛閰嶇疆PLC") return } - - var startAddress int - var valueType string - var dataLength int - var ipAddr string - - for _, pc := range plcConfig.Details { - if pc.FieldName == constvar.PlcStartAddressTypeFinishNumber { - startAddress = pc.StartAddress - valueType = pc.Type - dataLength = pc.Length + for _, addressItem := range plcConfig.Details { + if addressItem.FieldName == constvar.PlcStartAddressTypeFinishNumber { + value, err := service.PlcReadDirect(plcConfig, addressItem.StartAddress, addressItem.Length, addressItem.Type) + if err != nil { + logx.Infof("plc read finish number err: %v", err) + continue + } + finishNumber = cast.ToInt64(value) + logx.Infof("plc read finish number: %v", finishNumber) + break } - ipAddr = plcConfig.Address } - if startAddress == 0 || valueType == "" { - ctx.FailWithMsg(ecode.UnknownErr, "璇峰厛閰嶇疆PLC") - return + for _, addressItem := range plcConfig.Details { + if addressItem.FieldName == constvar.PlcStartAddressTypeTotalNumber { + value, err := service.PlcReadDirect(plcConfig, addressItem.StartAddress, addressItem.Length, addressItem.Type) + if err != nil { + logx.Infof("plc read total number err: %v", err) + continue + } + totalNumber = cast.ToInt64(value) + logx.Infof("plc read total number: %v", totalNumber) + break + } } + resp := new(response.ProductProgress) + resp.FinishNumber = cast.ToInt(finishNumber) + resp.TotalNumber = cast.ToInt(totalNumber) - conn, err := plc.NewModbusConnection(ipAddr) - defer conn.Close() - if err != nil { - ctx.FailWithMsg(ecode.UnknownErr, "杩炴帴plc澶辫触") - logx.Errorf("GetProductProgress 杩炴帴plc澶辫触: %v", err.Error()) - return + plcStatus := 1 //鏂紑杩炴帴 + isConnect := apacheplc4x.IsConnect() + if isConnect { + if resp.FinishNumber > 0 { //鐢熶骇 + plcStatus = 2 + } else { //寰呮満 + plcStatus = 3 + } } + resp.PlcStatus = plcStatus - raw, err := plc.ReadHoldingRegister(conn, startAddress, dataLength) - if err != nil { - ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇plc鏁版嵁澶辫触") - logx.Errorf("GetProductProgress 鑾峰彇plc鏁版嵁澶辫触: %v", err.Error()) - return - } - var finishNumber int - err = json.Unmarshal(raw, &finishNumber) - if err != nil { - ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇鐢熶骇杩涘害鏁版嵁瑙f瀽澶辫触") - logx.Errorf("GetProductProgress 鑾峰彇鐢熶骇杩涘害鏁版嵁瑙f瀽澶辫触: %v, data: %v, valueType:%v", err.Error(), raw, valueType) - return - } - resp := response.ProductProgress{ - FinishNumber: finishNumber, - } ctx.OkWithDetailed(resp) } -- Gitblit v1.8.0