58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package robot
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"bj_power_mes/internal/plc"
|
|
"bj_power_mes/internal/preload"
|
|
)
|
|
|
|
// StartScanCode 启动扫码
|
|
// workpieceType 工件类型
|
|
// round 扫码轮次
|
|
func (c *Controller) StartScanCode(ctx context.Context, workpieceType int, round int) error {
|
|
return c.executeAction(ctx, "StartScanCode",
|
|
newArg(int8(workpieceType)),
|
|
newArg(int8(round)),
|
|
newArg(int16(round)),
|
|
newArg(int32(0)),
|
|
)
|
|
}
|
|
|
|
// ReadScanCodeData 读取扫码数据
|
|
// 返回PLC中32字节的扫码内容,按ASCII字符串解释;读取失败返回错误
|
|
func (m *Manager) ReadScanCodeData(ctx context.Context) (string, error) {
|
|
pc := m.plcManager.GetPlc()
|
|
if pc == nil {
|
|
return "", plc.ErrNotConnect
|
|
}
|
|
|
|
addr := preload.GetMAddress("ScanCodeData")
|
|
bs, err := pc.Read(addr.Address(), 32)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
// 去除尾部的\x00
|
|
i := len(bs)
|
|
for i > 0 && bs[i-1] == 0 {
|
|
i--
|
|
}
|
|
result := string(bs[:i])
|
|
return strings.TrimSpace(result), nil
|
|
}
|
|
|
|
// ClearScanCodeData 清除扫码数据
|
|
func (m *Manager) ClearScanCodeData(ctx context.Context) error {
|
|
pc := m.plcManager.GetPlc()
|
|
if pc == nil {
|
|
return plc.ErrNotConnect
|
|
}
|
|
|
|
addr := preload.GetMAddress("ScanCodeData")
|
|
if err := pc.Write(addr.Address(), make([]byte, 32)); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|