From 30c549c7e4d63ab3ea5bd0a7cfd69fa89339df33 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 18 九月 2023 19:46:27 +0800 Subject: [PATCH] 增加重试,地址-1 --- api/v1/plc.go | 73 +++++++++++++++++++++++++++++++----- 1 files changed, 63 insertions(+), 10 deletions(-) diff --git a/api/v1/plc.go b/api/v1/plc.go index a837e7a..6a6392f 100644 --- a/api/v1/plc.go +++ b/api/v1/plc.go @@ -7,9 +7,9 @@ _ "apsClient/model/response" "apsClient/pkg/contextx" "apsClient/pkg/ecode" - "apsClient/pkg/plc" + "apsClient/pkg/logx" + "apsClient/pkg/plc/apacheplc4x" "apsClient/service" - "fmt" "github.com/gin-gonic/gin" "github.com/spf13/cast" ) @@ -35,15 +35,9 @@ resp.FinishNumber = cast.ToInt(finishNumber) resp.TotalNumber = cast.ToInt(totalNumber) - plcConfig, code := service.NewDevicePlcService().GetDevicePlc() - if code != ecode.OK { - return - } plcStatus := 1 //鏂紑杩炴帴 - ipAddr := fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port) - - conn, err := plc.GetModbusConnection(ipAddr) - if err == nil && conn.IsConnected() { + isConnect := service.PlcIsConnect() + if isConnect { if resp.FinishNumber > 0 { //鐢熶骇 plcStatus = 2 } else { //寰呮満 @@ -68,3 +62,62 @@ } 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 { + return + } + 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 + } + } + + 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) + + plcStatus := 1 //鏂紑杩炴帴 + isConnect := apacheplc4x.IsConnect() + if isConnect { + if resp.FinishNumber > 0 { //鐢熶骇 + plcStatus = 2 + } else { //寰呮満 + plcStatus = 3 + } + } + resp.PlcStatus = plcStatus + + ctx.OkWithDetailed(resp) +} -- Gitblit v1.8.0