using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Team.FFFeederService.Interfaces;
using TeamAAS_VP.Models;
using TeamAAS_VP.Models.Feeder;
namespace TeamAAS_VP.Interfaces
{
public interface IRemoteCommandService : IDisposable
{
///
/// 是否正在执行命令
///
bool IsExecuting { get; }
///
/// 是否正在执行视觉命令
///
bool IsExecutingVisionCommand { get; }
///
/// 计时器计时通知事件
///
event EventHandler CycleTimingTicked;
///
/// Execute a remote command string
///
///
///
///
///
Task ExecuteAsync(string command, CancellationToken cancellationToken, Action callback);
///
/// 加载产品
///
///
///
///
Task LoadProductAsync(string productName, CancellationToken cancellationToken);
///
/// 通过产品编号获取产品名称
///
///
///
///
Task GetProductNameByNumberAsync(int productNumber, CancellationToken cancellationToken);
///
/// 通过产品名称获取产品编号
///
///
///
///
Task GetProductNumberByNameAsync(string productName, CancellationToken cancellationToken);
///
/// 获取当前产品名称
///
///
///
Task GetCurrentProductNameAsync(CancellationToken cancellationToken);
///
/// 获取当前产品编号
///
///
///
Task GetCurrentProductNumberAsync(CancellationToken cancellationToken);
///
/// 通过机器人编号和点位编号获取机器人点位信息
///
///
///
///
///
Task GetRobotPointInfoAsync(int robotNumber, int pointNumber, CancellationToken cancellationToken);
///
/// 通过机器人编号和托盘编号、点编号获取机器人托盘点位信息
///
/// 机器人编号
/// 托盘编号
/// 点编号
///
///
Task GetRobotPalletPointInfoAsync(int robotNumber, int palletNumber, int pointNumber, CancellationToken cancellationToken);
///
/// 开始节拍计时
///
///
///
Task StartCycleTimingAsync(CancellationToken cancellationToken);
///
/// 停止节拍计时
///
///
///
Task StopCycleTimingAsync(CancellationToken cancellationToken);
///
/// 创建一条生产计数,传入计数项
///
///
///
///
Task CreateProductionCountAsync(string countItem, CancellationToken cancellationToken);
///
/// 获取当前生产计数
///
///
///
///
Task GetCurrentProductionCountAsync(string countItem, CancellationToken cancellationToken);
///
/// 重置生产计数
///
///
///
///
Task ResetProductionCountAsync(string countItem, CancellationToken cancellationToken);
///
/// 创建一条报警记录
///
///
///
///
///
Task CreateAlarmRecordAsync(string alarmCode, string alarmDescription, CancellationToken cancellationToken);
///
/// 创建一条运行信息记录
///
///
///
///
Task CreateOperationLogAsync(string logMessage, CancellationToken cancellationToken);
///
/// 获取当前产品指定编号的全局参数
///
///
///
///
///
Task GetGlobalParameterAsync(int parameterNumber, int itemIndex, CancellationToken cancellationToken);
///
/// 获取当前产品的运行速度
///
///
///
Task GetOperationSpeedAsync(CancellationToken cancellationToken);
///
/// 获取末端工具信息,传入流程触发命令和工具编号
///
///
///
///
///
Task GetToolParamAsync(string triggerCommand, int toolNumber, CancellationToken cancellationToken);
///
/// 获取流程参数信息,传入流程触发命令
///
///
///
///
Task GetProcessParamAsync(string triggerCommand, CancellationToken cancellationToken);
///
/// 执行清料任务
///
///
///
///
Task ExecuteClearMaterialTaskAsync(int taskNumber, CancellationToken cancellationToken);
///
/// 终止清料任务
///
///
///
///
Task StopClearMaterialTaskAsync(int taskNumber, CancellationToken cancellationToken);
///
/// 获取机器人是否进入调试模式
///
///
///
Task IsRobotInDebugModeAsync(int robotNumber, CancellationToken cancellationToken);
///
/// 执行视觉任务
///
/// 流程
/// 是否先振动
///
///
Task<(bool IsSucceed, string[] Response)> ExecuteVisionTaskAsync(ProcedureModel procedure, string[] items, CancellationToken cancellationToken);
///
/// 执行Feeder视觉引导任务
///
///
///
///
///
///
Task<(bool IsSucceed, string[] Response)> ExecuteFeederVisionTaskAsync(IVoiceCoilMotorFeeder feeder, ProcedureModel procedure, string[] items, CancellationToken cancellationToken);
///
/// 执行普通视觉任务
///
///
///
///
///
Task<(bool IsSucceed, string Response)> ExecuteNormalVisionTaskAsync(ProcedureModel procedure, string[] items, CancellationToken cancellationToken);
///
/// 执行相机拍照
///
///
///
///
///
bool ExecutePhoto(int index, ProcedureModel procedure, Dictionary InputTerminal, out CogToolBlockTerminalCollection outputCollection);
///
/// 执行相机拍照获取单个点位结果
///
///
///
///
///
///
///
///
Task<(bool IsSucceed, double X, double Y, double U)> ExecutePhotoGetSinglePoint(ProcedureModel procedure, Dictionary InputTerminal, double[] robotCoord, CancellationToken cancellationToken, int positionIndex, string remark);
///
/// 执行相机拍照获取单个点位结果,并且返回图像和图形
///
///
///
///
///
///
Task<(bool IsSucceed, double X, double Y, double U, ICogImage Image, CogGraphicCollection Graphic)> ExecutePhotoGetSinglePointWithImage(ProcedureModel procedure, Dictionary InputTerminal, double[] robotCoord, CancellationToken cancellationToken);
///
/// 获取需要输出项
///
///
///
///
///
(bool IsSucceed, string ErrMsg, Dictionary Output) GetVisionOutput(ProcedureModel procedure, CogToolBlockTerminalCollection outputCollection, double[] robotPos);
///
/// Feeder拍照前,执行Feeder
///
///
///
///
///
///
///
Task ExecuteFeederForPhotoBefore(IVoiceCoilMotorFeeder Feeder, ProcedureModel procedure, bool doVibrateFirst, bool doCaptureFirst, CancellationToken cancellationToken);
///
/// Feeder拍照后,拍照失败时,执行Feeder
///
///
///
///
///
Task ExecuteFeederForPhotoLater(IVoiceCoilMotorFeeder Feeder, ProcedureModel procedure, CancellationToken cancellationToken);
///
/// 执行Feeder料仓供料及振动集合
///
///
///
///
///
///
Task ExecuteFeederStockWorks(IVoiceCoilMotorFeeder feeder, FeederStockWorks works, CancellationToken cancellationToken, bool isUpdateParame = true);
///
/// 执行料仓振动任务
///
///
///
///
///
Task ExecuteFeederStockWorksOnly(IVoiceCoilMotorFeeder feeder, FeederStockWork[] works, CancellationToken cancellationToken);
///
/// 执行Feeder振动任务
///
///
///
///
///
///
Task ExecuteFeederWorkOnly(IVoiceCoilMotorFeeder feeder, FeederWork[] works, CancellationToken cancellationToken, bool isUpdateParame = true);
///
/// 执行Feeder振动集合
///
///
///
///
///
///
Task ExecuteFeederWorks(IVoiceCoilMotorFeeder feeder, FeederWorks works, CancellationToken cancellationToken, bool isUpdateParame = true);
///
/// 在拍照前设置光源亮度和打开光源
///
/// 流程模型
///
Task SetLightBeforePhoto(ProcedureModel procedure);
///
/// 在拍照后关闭光源
///
/// 流程模型
///
Task TurnOffLightAfterPhoto(ProcedureModel procedure);
///
/// 获取复检结果
///
Task<(bool IsSucceed, string distance)> ExecutePhotoGetDistance(int index, ProcedureModel procedure, Dictionary InputTerminal, double[] robotCoord, CancellationToken cancellationToken, int positionIndex, string remark);
}
}