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/apacheplc4x" "apsClient/service" "github.com/gin-gonic/gin" "github.com/spf13/cast" "time" ) type PlcApi struct{} // GetProductProgress // @Tags 生产数量 // @Summary 获取生产进度 // @Produce application/json // @Param object body request.SendProcessParams true "查询参数" // @Success 200 {object} contextx.Response{data=response.ProductProgress} "成功" // @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 { 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) }