68 lines
2.3 KiB
Go
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
|
|
}
|