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 }