package v1
|
|
import (
|
"apsClient/constvar"
|
"apsClient/model/response"
|
_ "apsClient/model/response"
|
"apsClient/pkg/contextx"
|
"apsClient/pkg/ecode"
|
"apsClient/pkg/logx"
|
"apsClient/pkg/plc"
|
"apsClient/service"
|
"encoding/json"
|
"github.com/gin-gonic/gin"
|
)
|
|
type PlcApi struct{}
|
|
// GetProductProgress
|
// @Tags 获取动态数据
|
// @Summary 获取生产进度
|
// @Produce application/json
|
// @Success 200 {object} contextx.Response{data=response.ProductProgress} "成功"
|
// @Router /v1/plc/productProgress [get]
|
func (slf *PlcApi) GetProductProgress(c *gin.Context) {
|
ctx, ok := contextx.NewContext(c, nil)
|
if !ok {
|
return
|
}
|
|
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
|
}
|
ipAddr = plcConfig.Address
|
}
|
|
if startAddress == 0 || valueType == "" {
|
ctx.FailWithMsg(ecode.UnknownErr, "请先配置PLC")
|
return
|
}
|
|
conn, err := plc.NewModbusConnection(ipAddr)
|
defer conn.Close()
|
if err != nil {
|
ctx.FailWithMsg(ecode.UnknownErr, "连接plc失败")
|
logx.Errorf("GetProductProgress 连接plc失败: %v", err.Error())
|
return
|
}
|
|
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, "获取生产进度数据解析失败")
|
logx.Errorf("GetProductProgress 获取生产进度数据解析失败: %v, data: %v, valueType:%v", err.Error(), raw, valueType)
|
return
|
}
|
resp := response.ProductProgress{
|
FinishNumber: finishNumber,
|
}
|
ctx.OkWithDetailed(resp)
|
}
|