From 602d118cbe5d5a6910766c3e83208f09c0ba0bb6 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 24 八月 2023 21:57:05 +0800 Subject: [PATCH] 增加设置生产总量接口 --- api/v1/plc.go | 92 +++++++++++++++++++++++++--------------------- 1 files changed, 50 insertions(+), 42 deletions(-) diff --git a/api/v1/plc.go b/api/v1/plc.go index 3f8238d..c6a98a6 100644 --- a/api/v1/plc.go +++ b/api/v1/plc.go @@ -6,18 +6,15 @@ _ "apsClient/model/response" "apsClient/pkg/contextx" "apsClient/pkg/ecode" - "apsClient/pkg/logx" - "apsClient/pkg/plc" "apsClient/service" - "encoding/binary" - "fmt" "github.com/gin-gonic/gin" + "github.com/spf13/cast" ) type PlcApi struct{} // GetProductProgress -// @Tags 鑾峰彇鍔ㄦ�佹暟鎹� +// @Tags 鐢熶骇鏁伴噺 // @Summary 鑾峰彇鐢熶骇杩涘害 // @Produce application/json // @Success 200 {object} contextx.Response{data=response.ProductProgress} "鎴愬姛" @@ -34,45 +31,56 @@ 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 - } - ipAddr = fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port) + finishNumber, err := service.PlcRead(plcConfig, constvar.PlcStartAddressTypeFinishNumber) + if err != nil { + ctx.FailWithMsg(ecode.UnknownErr, "璇诲彇鏁版嵁澶辫触锛岃妫�鏌lc閰嶇疆") + return + } + totalNumber, err := service.PlcRead(plcConfig, constvar.PlcStartAddressTypeTotalNumber) + if err != nil { + ctx.FailWithMsg(ecode.UnknownErr, "璇诲彇鏁版嵁澶辫触锛岃妫�鏌lc閰嶇疆") + return } resp := new(response.ProductProgress) - if startAddress == 0 || valueType == "" { - ctx.OkWithDetailed(resp) - logx.Warnf("璇峰厛閰嶇疆PLC") - return - } - conn, err := plc.NewModbusConnection(ipAddr) - if err != nil { - ctx.OkWithDetailed(resp) - logx.Errorf("GetProductProgress 杩炴帴plc澶辫触: %v", err.Error()) - return - } - defer conn.Close() - - rawData, err := plc.ReadHoldingRegister(conn, startAddress, dataLength) - if err != nil { - ctx.OkWithDetailed(resp) - logx.Errorf("GetProductProgress 鑾峰彇plc鏁版嵁澶辫触: %v", err.Error()) - return - } - resp.FinishNumber = int(binary.BigEndian.Uint16(rawData)) - if err != nil { - ctx.OkWithDetailed(resp) - logx.Errorf("GetProductProgress 鑾峰彇鐢熶骇杩涘害鏁版嵁瑙f瀽澶辫触: %v, data: %v, valueType:%v", err.Error(), rawData, valueType) - return - } + resp.FinishNumber = cast.ToInt(finishNumber) + resp.TotalNumber = cast.ToInt(totalNumber) 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 + } + + taskData, code := service.NewTaskService().GetTask() + if code != ecode.OK { + ctx.Fail(code) + return + } + + if taskData.Order == nil { + ctx.FailWithMsg(ecode.UnknownErr, "褰撳墠娌℃湁寰呯敓浜у伐鍗�") + return + } + + plcConfig, code := service.NewDevicePlcService().GetDevicePlc() + if code != ecode.OK { + ctx.FailWithMsg(ecode.UnknownErr, "璇峰厛閰嶇疆PLC") + return + } + + err := service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeFinishNumber, taskData.Order.Amount.IntPart()) + if err != nil { + ctx.FailWithMsg(ecode.UnknownErr, "璁剧疆澶辫触锛岃妫�鏌lc閰嶇疆") + return + } + ctx.Ok() +} -- Gitblit v1.8.0