package robot import ( "context" "fmt" "log/slog" "time" "bj_power_mes/internal/preload" ) // RequestCleaningLoading 发送清洗线上料请求(PLC M1146.3 = true)。 // 清洗线上料前先发送信号 func (c *Controller) RequestCleaningLoading(ctx context.Context) error { addr := preload.GetMAddress("CleaningRequestLoading") slog.Info("发送清洗线上料请求", "address", addr.Addr.String()) err := c.plcClient.WriteBool(addr.Address(), true) if err != nil { slog.Error("发送清洗线上料请求信号失败", "address", addr.Address(), "error", err) return err } return nil } // CloseRequestCleaningLoading 关闭清洗线上料请求(PLC M1146.3 = false)。 // 清洗线上料后关闭信号 func (c *Controller) CloseRequestCleaningLoading(ctx context.Context) error { addr := preload.GetMAddress("CleaningRequestLoading") slog.Info("关闭清洗线上料请求", "address", addr.Address()) err := c.plcClient.WriteBool(addr.Address(), false) if err != nil { slog.Error("关闭清洗线上料请求信号失败", "address", addr.Addr.String(), "error", err) return err } return nil } // WaitCleaningReady 等待清洗线就绪信号(PLC M1146.1 = true)。 // 清洗线上料前必须等待此信号,表示流水线有位置可以放入工件。 func (c *Controller) WaitCleaningReady(ctx context.Context) error { addr := preload.GetMAddress("CleaningReady") slog.Info("等待清洗线就绪信号", "address", addr.Addr.String()) if err := c.WaitSignal(ctx, addr, true, false); err != nil { return fmt.Errorf("等待清洗线就绪信号失败: %w", err) } return nil } func (c *Controller) StartupCleanLine(ctx context.Context) error { addr := preload.GetMAddress("CleaningStartup") if err := c.plcClient.WriteBool(addr.Addr.String(), true); err != nil { return fmt.Errorf("发送启动信号 %s 失败: %w", "CleaningStartup", err) } time.AfterFunc(2*time.Second, func() { _ = c.plcClient.WriteBool(addr.Addr.String(), false) }) return nil } func (c *Controller) IsCleanLineDone(ctx context.Context) (bool, error) { addr := preload.GetMAddress("CleaningDone") result, err := c.plcClient.ReadBool(addr.Addr.String()) if err != nil { return false, fmt.Errorf("读取清洗线完成信号 %s 失败: %w", "CleaningDone", err) } return result, nil }