using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Lebai.SDK;
using Lebai.SDK.Dtos;
using Robotc;
using BPA.Helper;
using TaskStatus = Lebai.SDK.Dtos.TaskStatus;
using BPASmartClient.Peripheral;
using BPASmartClient.Model;
using BPASmartClient.LebaiRobot;
using BPASmartClient.Model.乐白机器人;
using static BPA.Helper.EventBus;
namespace BPASmartClient.Lebai
{
public class LebaiRobot : BasePeripheral
{
///
/// 抓手上传感器输入位索引
///
public int HandSensor { get; set; }
///
/// 输出信号量索引
///
public int OutputSingalValue { get; set; }
protected override void InitStatus()
{
status["Connected"] = false;
status["HandSensor"] = 0;
status["OutputSingalValue"] = 0;
}
public override void Start()
{
LebaiHelper.GetInstance.Connect(communicationPar.IPAddress);
TaskManage.GetInstance.StartLong(() => { LebaiHelper.GetInstance.Reconnect(communicationPar.IPAddress); Thread.Sleep(5000); }, "机器人重连检测");
TaskManage.GetInstance.StartLong(() =>
{
IsConnected = LebaiHelper.GetInstance.IsConnected;
status["RobotIsConnected"] = LebaiHelper.GetInstance.IsConnected;
status["RobotOK"] = LebaiHelper.GetInstance.GetValueAsync().Ok;
status["RobotValue"] = LebaiHelper.GetInstance.GetValueAsync().Value;
if (LebaiHelper.GetInstance.robotData != null) status["RobotMode"] = (ELebaiRModel)LebaiHelper.GetInstance.robotData.RobotMode.Mode;
status["RobotValue1"] = LebaiHelper.GetInstance.GetValueAsync(1).Value;
status["LeibaiGetTcpInput"] = LebaiHelper.GetInstance.GetTcpInput(0);
status["LeibaiGetInput1"] = LebaiHelper.GetInstance.GetInput(0);
status["LeibaiGetInput2"] = LebaiHelper.GetInstance.GetInput(1);
status["LeibaiGetInput3"] = LebaiHelper.GetInstance.GetInput(2);
status["LeibaiGetInput4"] = LebaiHelper.GetInstance.GetInput(3);
if (LebaiHelper.GetInstance.robotData != null) status["RobotMode"] = LebaiHelper.GetInstance.robotData.RobotMode.Mode;
LebaiHelper.GetInstance.GetRobotModeStatus();
Thread.Sleep(10);
}, "获取乐白机器人数据");
}
public override void Stop()
{
}
public override void Init()
{
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
});
//获取机器人信号
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
if (@event is LebaiRobot_GetInputEvent getInput)
{
callBack.Invoke(LebaiHelper.GetInstance.GetInput(getInput.Pin));
}
});
//获取Tcp信号
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
if (@event is LebaiRobot_GetTCPInputEvent getTCPInput)
{
callBack?.Invoke(LebaiHelper.GetInstance.GetTcpInput(getTCPInput.Pin));
}
});
//机器人输入信号
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
if (@event is LebaiRobot_SetValueEvent SetValueEvent)
{
callBack?.Invoke(LebaiHelper.GetInstance.SetValue(SetValueEvent.RobotSetValue));
}
});
//控制机器人
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
if (@event is LebaiRobot_LebaiControlEvent lebaiControlEvent)
{
switch (lebaiControlEvent.LebaiControl)
{
case "启动":
LebaiHelper.GetInstance.StartRobot();
break;
case "启动示教":
LebaiHelper.GetInstance.StartTeachMode();
break;
case "停止示教":
LebaiHelper.GetInstance.EndtTeachMode();
break;
case "急停":
LebaiHelper.GetInstance.EStopRobot();
break;
case "暂停":
LebaiHelper.GetInstance.pauseMode();
break;
case "恢复":
LebaiHelper.GetInstance.resumeMode();
break;
default:
break;
}
}
});
//选择机器人场景
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
if (@event is LebaiRobot_LebaiSenceEvent lebaiSenceEvent)
{
LebaiHelper.GetInstance.Scene(lebaiSenceEvent.LebaiSence);
}
});
EventBus.GetInstance.Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
if (@event == null) return;
if (@event is LebaiRobot_SetOutPutEvent lebaiOutputEvent)
{
LebaiHelper.GetInstance.SetOutput(lebaiOutputEvent.Value, lebaiOutputEvent.Pin);
}
});
InitStatus();
Start();
MessageLog.GetInstance.Show("乐白机器人初始化完成");
}
public override void WriteData(string address, object value)
{
}
}
}