Files
bj_power/bj_power_mes/internal/robot/clean_line.go
T

68 lines
2.3 KiB
Go

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
}