优化启动流程

master
lhiven 2 years ago
parent a0b14cef04
commit 04e3e394e4

@ -24,104 +24,104 @@ namespace Rs.MotionPlat.Commom
SysConfigParam.Init();
int errNum = 0;
//Task.Run(() => {
#region 初始化固高卡
ErrorCode errCode = GugaoPulseCardManager.Instance.Init();
if (errCode > ErrorCode.Ok)
{
errNum++;
MessageQueue.Instance.Warn($"Gugao motion card load fail {errCode}");
LogHelper.Debug($"Gugao motion card load fail {errCode}");
}
else
{
MessageQueue.Instance.Insert("Gugao motion card load success");
}
#endregion
#region 初始化固高卡
ErrorCode errCode = GugaoPulseCardManager.Instance.Init();
if (errCode > ErrorCode.Ok)
{
errNum++;
MessageQueue.Instance.Warn($"Gugao motion card load fail {errCode}");
LogHelper.Debug($"Gugao motion card load fail {errCode}");
}
else
{
MessageQueue.Instance.Insert("Gugao motion card load success");
}
#endregion
#region 初始化ztm卡
errCode = ZtmCardManager.Instance.Init();
if (errCode > ErrorCode.Ok)
{
errNum++;
MessageQueue.Instance.Warn($"rs motion card load fail {errCode}"); return;
}
else
{
MessageQueue.Instance.Insert("rs motion card load ok");
#region 初始化ztm卡
errCode = ZtmCardManager.Instance.Init();
if (errCode > ErrorCode.Ok)
{
errNum++;
MessageQueue.Instance.Warn($"rs motion card load fail {errCode}"); return;
}
else
{
MessageQueue.Instance.Insert("rs motion card load ok");
}
#endregion
}
#endregion
#region 初始化IO
IoManager.Instance.Init();
#endregion
#region 初始化IO
IoManager.Instance.Init();
#endregion
#region 链接相机
//链接相机
ECameraErrorCode ceCode = HikCamera.Instance.Init();
if (ceCode > ECameraErrorCode.Ok)
{
errNum++;
MessageQueue.Instance.Warn(ceCode.ToString());
}
else
{
MessageQueue.Instance.Insert("Camera load ok!");
#region 链接相机
//链接相机
ECameraErrorCode ceCode = HikCamera.Instance.Init();
if (ceCode > ECameraErrorCode.Ok)
int ret = HikCamera.Instance.SetReverseX("upCamera", EDir.Y, false);
ret += HikCamera.Instance.SetReverseX("upCamera", EDir.X, false);
if (ret != 0)
{
errNum++;
MessageQueue.Instance.Warn(ceCode.ToString());
MessageQueue.Instance.Warn("Camera init error");
}
else
ret = 0;
ret = HikCamera.Instance.SetReverseX("downCamera", EDir.X, true);
ret += HikCamera.Instance.SetReverseX("downCamera", EDir.Y, false);
if (ret != 0)
{
MessageQueue.Instance.Insert("Camera load ok!");
int ret = HikCamera.Instance.SetReverseX("upCamera", EDir.Y, false);
ret += HikCamera.Instance.SetReverseX("upCamera", EDir.X, false);
if (ret != 0)
{
MessageQueue.Instance.Warn("Camera init error");
}
ret = 0;
ret = HikCamera.Instance.SetReverseX("downCamera", EDir.X, true);
ret += HikCamera.Instance.SetReverseX("downCamera", EDir.Y, false);
if (ret != 0)
{
MessageQueue.Instance.Warn("Camera init error");
}
ret = HikCamera.Instance.StartGrab("upCamera");
if (ret != 0)
{
MessageQueue.Instance.Warn("Camera init error");
}
ret = HikCamera.Instance.StartGrab("locationCamera");
if (ret != 0)
{
MessageQueue.Instance.Warn("Camera init error");
}
ret = HikCamera.Instance.StartGrab("scanCamera");
if (ret != 0)
{
MessageQueue.Instance.Warn("Camera init error");
}
MessageQueue.Instance.Warn("Camera init error");
}
#endregion
//使能所有轴卡
AxisControl.AllEnable();
SafeControl.Instance.Init();
NozzleManager.Init();
TestCenter.Instance.Init();
TrayPointManager.LoadPoint();
AxisControl.AllStop();
if (errNum==0)
ret = HikCamera.Instance.StartGrab("upCamera");
if (ret != 0)
{
MessageQueue.Instance.Insert("Init finished");
MessageQueue.Instance.Warn("Camera init error");
}
else
ret = HikCamera.Instance.StartGrab("locationCamera");
if (ret != 0)
{
MessageQueue.Instance.Insert("Init fail");
MessageQueue.Instance.Warn("Camera init error");
}
Ops.On("上下气缸电磁阀原位");
Ops.Off("上下气缸电磁阀动位");
Ops.Off("下左相机光源触发");
Ops.Off("下右相机光源触发");
Ops.Off("上相机光源触发");
ret = HikCamera.Instance.StartGrab("scanCamera");
if (ret != 0)
{
MessageQueue.Instance.Warn("Camera init error");
}
}
#endregion
//使能所有轴卡
AxisControl.AllEnable();
SafeControl.Instance.Init();
NozzleManager.Init();
TestCenter.Instance.Init();
TrayPointManager.LoadPoint();
AxisControl.AllStop();
if (errNum == 0)
{
MessageQueue.Instance.Insert("Init finished");
}
else
{
MessageQueue.Instance.Insert("Init fail");
}
Ops.On("上下气缸电磁阀原位");
Ops.Off("上下气缸电磁阀动位");
Ops.Off("下左相机光源触发");
Ops.Off("下右相机光源触发");
Ops.Off("上相机光源触发");
TurnoverSlotOffset.Init();
MonitorSystemButton.Instance.Start();
//});
@ -130,17 +130,18 @@ namespace Rs.MotionPlat.Commom
public static void Start()
{
TakeTrayFlow.Instance.Start();
StockManager.Instance.Start();
Task.Run(() => {
MachineManage.Instance.MachineStatus = EMachineStatus.Working;
TakeTrayFlow.Instance.Start();
StockManager.Instance.Start();
WorkEnvironment.Instance.Ready();
if (WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne())
{
WorkFlow.Instance.Start();
TurnoverFlow.Instance.Start();
MachineManage.Instance.RunState = ERunState.Waiting;
MachineManage.Instance.MachineStatus = EMachineStatus.Working;
MachineManage.Instance.SetCenterMachineStatus(ERunStatus.Started);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
MachineManage.Instance.SetLocalMachineStatus(EMachineStatus.Working);
}
});
}

@ -365,7 +365,15 @@ namespace Rs.MotionPlat.Commom
/// <summary>
/// 多功能仓
/// </summary>
Multifunction
Multifunction,
/// <summary>
/// 待测空盘
/// </summary>
EmptyInput,
/// <summary>
/// 已测空盘料仓
/// </summary>
EmptyOutput
}
public enum EMultifunctionType
{
@ -431,7 +439,11 @@ namespace Rs.MotionPlat.Commom
/// <summary>
/// 切回上一个
/// </summary>
Previous
Previous,
/// <summary>
/// 回收料盘
/// </summary>
Recycle
}
public enum ESiloStatus

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Flow
{
/// <summary>
/// 报警常量
/// </summary>
public class AlarmConstID
{
/// <summary>
/// Tray盘取料失败报警
/// </summary>
public const int TrayTakeFailAlarm = 1;
/// <summary>
/// 周转盘取料失败报警
/// </summary>
public const int TurnoverTakeFailAlarm = 2;
/// <summary>
/// 测试盘取料失败报警
/// </summary>
public const int TestTakeFailAlarm = 3;
/// <summary>
/// 周转盘放料失败报警
/// </summary>
public const int TurnoverDumpFailAlarm = 4;
/// <summary>
/// 测试盘放料失败报警
/// </summary>
public const int TestDumpFailAlarm = 5;
/// <summary>
/// Empty1满料报警
/// </summary>
public const int Empty1FullAlarm = 6;
/// <summary>
/// Input盘缺料报警
/// </summary>
public const int InputNullAlarm = 7;
/// <summary>
/// OK盘满料报警
/// </summary>
public const int OkFullAlarm = 8;
/// <summary>
/// NG盘满料报警
/// </summary>
public const int NgFullAlarm = 9;
/// <summary>
/// 多功能盘满料报警
/// </summary>
public const int MultiFullAlarm = 10;
/// <summary>
/// Empty2缺料报警
/// </summary>
public const int Empty2NullAlarm = 11;
}
}

@ -13,6 +13,7 @@ namespace Rs.MotionPlat.Flow
protected bool b_IsRun = false;
protected bool b_IsStop = true;
private Task mainTask;
protected string logInfo = "";
protected int stopWaitTime = 10;
protected int sleepTime = 10;
public BaseFlow() {

@ -92,5 +92,32 @@ namespace Rs.MotionPlat.Flow
public EAssignMode AssignMode { get; set; } = EAssignMode.Normal;
public bool NeedRestoreMove { get; set; } = false;
/// <summary>
/// 设置返回中控的运行状态
/// </summary>
/// <param name="status"></param>
public void SetCenterMachineStatus(ERunStatus status)
{
RunStatus= status;
}
/// <summary>
/// 设置本地运行状态
/// </summary>
/// <param name="status"></param>
public void SetLocalMachineStatus(EMachineStatus status)
{
MachineStatus= status;
}
/// <summary>
/// 设置上下料的状态
/// </summary>
/// <param name="status"></param>
public void SetLoadUnloadStatus(ERunState status)
{
RunState= status;
}
}
}

@ -12,6 +12,7 @@ namespace Rs.AutoDischarge.V3.Flow
enum ETrayTestStep
{
,
,
,
,
,
@ -99,7 +100,6 @@ namespace Rs.AutoDischarge.V3.Flow
IAxis StockFlow = null;
IAxis StockZ=null;
Stopwatch timer = new Stopwatch();
string loginfo = "";
public override void Run()
{
@ -110,6 +110,7 @@ namespace Rs.AutoDischarge.V3.Flow
{
if (NeedUnload)
{
logInfo = $"{stockNo} 料仓收到下料任务";
Status = ETrayStatus.Unloading;
//下料
IoManager.Instance.WriteOut($"{stockNo}号料仓斜推气缸", 0);
@ -119,7 +120,7 @@ namespace Rs.AutoDischarge.V3.Flow
Step = ETrayTestStep.;
}
else if (NeedLoad)
else if (NeedLoad && (Status!= ETrayStatus.Loading))
{
if(!Ops.IsOn($"{stockNo}号料仓料盘到位光电检测") || m_bWholeLoad==false)
{
@ -137,6 +138,7 @@ namespace Rs.AutoDischarge.V3.Flow
}
else
{
NeedLoad = false;
Msg.ShowError($"检测到{stockNo}号料仓处有料盘,不能重复送料盘");
MessageQueue.Instance.Warn($"检测到{stockNo}号料仓处有料盘,不能重复送料盘");
LogHelper.Debug($"检测到{stockNo}号料仓处有料盘,不能重复送料盘");
@ -144,6 +146,9 @@ namespace Rs.AutoDischarge.V3.Flow
}
}
break;
case ETrayTestStep.:
break;
case ETrayTestStep.:
StockFlow.MoveOffset(SysConfigParam.GetValue<double>("HighSpeedDistance"), GlobalVar.WholeSpeed);
@ -315,10 +320,10 @@ namespace Rs.AutoDischarge.V3.Flow
else
{
timer.Stop();
loginfo = $"料仓{stockNo}上料未到位,请手动处理后,点击确定";
MessageQueue.Instance.Warn(loginfo);
LogHelper.Debug(loginfo);
Msg.ShowError(loginfo);
logInfo = $"料仓{stockNo}上料未到位,请手动处理后,点击确定";
MessageQueue.Instance.Warn(logInfo);
LogHelper.Debug(logInfo);
Msg.ShowError(logInfo);
timer.Restart();
}
break;

@ -16,7 +16,7 @@ namespace Rs.MotionPlat.Flow
{
public class TestCenter
{
TcpClientHelper client = new TcpClientHelper("127.0.0.1",2048);
TcpClientHelper client = new TcpClientHelper("10.86.15.67",2048);
SchedulingResult schedulResult = new SchedulingResult();
SchedulingMaterial sm;
public event Action<string> ReciveTaskEvent;
@ -80,25 +80,16 @@ namespace Rs.MotionPlat.Flow
switch (eInstructioneInstruction)
{
case EInstruction.InquireSiloStatus:
InquireSiloStatus(json);
break;
case EInstruction.RequestSwitchTray:
break;
case EInstruction.InquireConnectionInfo:
SchedulingConnectionInfo info = JsonConvert.DeserializeObject<SchedulingConnectionInfo>(json);
info.Type = SchedulingConnectionInfo.EType.Scheduling;
client.Send(info.ToString());
//LogHelper.Debug(info.ToString());
ReplayTaskEvent?.Invoke(info.ToString());
InquireConnectionInfo(json);
break;
case EInstruction.LoadAndUnload:
LogHelper.Debug("recive:" + json);
MachineManage.Instance.RunState = ERunState.Busying;
sm = JsonConvert.DeserializeObject<SchedulingMaterial>(json);
schedulResult = new SchedulingResult() { Instruction = sm.Instruction, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
string buffer = schedulResult.ToString();
client.Send(buffer);
LogHelper.TestCenterLog(buffer);
LoadAndUnloadTask.Instance.Add(sm);
MessageQueue.Instance.Insert(sm.Instruction.ToString());
ReplayTaskEvent?.Invoke(schedulResult.ToString());
LoadAndUnload(json);
break;
case EInstruction.CancelLoadAndUnload:
//schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
@ -184,8 +175,6 @@ namespace Rs.MotionPlat.Flow
client.Send(schedulResult.ToString());
ReplayTaskEvent?.Invoke(schedulResult.ToString());
break;
case EInstruction.RequestSwitchTray:
break;
case EInstruction.BeginSwitchTray:
break;
case EInstruction.MoveScanner:
@ -221,6 +210,68 @@ namespace Rs.MotionPlat.Flow
}
private void LoadAndUnload(string json)
{
LogHelper.Debug("recive:" + json);
MachineManage.Instance.RunState = ERunState.Busying;
sm = JsonConvert.DeserializeObject<SchedulingMaterial>(json);
schedulResult = new SchedulingResult() { Instruction = sm.Instruction, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
string buffer = schedulResult.ToString();
client.Send(buffer);
LoadAndUnloadTask.Instance.Add(sm);
//MessageQueue.Instance.Insert(sm.Instruction.ToString());
//ReplayTaskEvent?.Invoke(schedulResult.ToString());
}
/// <summary>
/// 查询 状态
/// </summary>
/// <param name="json"></param>
private void InquireConnectionInfo(string json)
{
SchedulingConnectionInfo info = JsonConvert.DeserializeObject<SchedulingConnectionInfo>(json);
info.Type = SchedulingConnectionInfo.EType.Scheduling;
TestCenter.instance.Send(info);
}
/// <summary>
/// 查询料仓状态
/// </summary>
/// <param name="json"></param>
private void InquireSiloStatus(string json)
{
SchedulingSilo inquireSilo = JsonConvert.DeserializeObject<SchedulingSilo>(json);
switch (inquireSilo.SiloType)
{
case SchedulingSiloBase.ESiloType.ToBeTested:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.Passed:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.Failed:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.Multifunction:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
case SchedulingSiloBase.ESiloType.EmptyInput:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;// StockManager.Instance.GetStockStatus(EStockType.Empty1);
break;
case SchedulingSiloBase.ESiloType.EmptyOutput:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;
break;
}
TestCenter.instance.Send(inquireSilo);
//查询料仓状态
}
/// <summary>
/// 请求切盘
/// </summary>
private void RequestSwitchTray(string json)
{
}
/// <summary>
/// 断开连接
/// </summary>
@ -282,6 +333,12 @@ namespace Rs.MotionPlat.Flow
return client.Send(content);
}
public int Send(Scheduling scheduing)
{
string content = JsonConvert.SerializeObject(scheduing, new StringEnumConverter());
return Send(content);
}
public void EndInput()
{
Scheduling s = new Scheduling();

@ -38,6 +38,7 @@ namespace Rs.MotionPlat.Flow
}
public void Ready()
{
step = EStockCheckStep.Input;
EnvReadyOkEvent.Reset();
Task.Run(() =>
{

@ -121,7 +121,6 @@ namespace Rs.MotionPlat.Flow
int needGrabNum = 0;//需要拍照的吸嘴数量
int reGrabCount = 0;//重拍次数
ErrorCode errCode = ErrorCode.Ok;
string logInfo = "";
List<TurnoverInfo> testLoadList = new List<TurnoverInfo>();
List<TurnoverInfo> testUnLoadList = new List<TurnoverInfo>();
public override void Run()
@ -129,7 +128,7 @@ namespace Rs.MotionPlat.Flow
switch (flowStep)
{
case EWorkFlowStep.:
if (LoadAndUnloadTask.Instance.Count > 0)
if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk)
{
if(LoadAndUnloadTask.Instance.CanRunTask())
{
@ -179,7 +178,7 @@ namespace Rs.MotionPlat.Flow
curSlotPoint = null;
if (curTask.FromType == TurnoverType.Turnover)
{
logInfo = $"吸嘴{curTask.FromIndex + 1} 去周转盘 {curTask.FromIndex + 1} 号穴位取料";
logInfo = $"吸嘴 {curNozzle.NozzleIndex} 去周转盘 {curTask.FromIndex + 1} 号穴位取料";
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTask.FromIndex + 1, EPointType.RUN);
MessageQueue.Instance.Insert(logInfo);
LogHelper.Debug(logInfo);

@ -152,6 +152,7 @@
<Compile Include="DebugMove.designer.cs">
<DependentUpon>DebugMove.cs</DependentUpon>
</Compile>
<Compile Include="Flow\AlarmConstID.cs" />
<Compile Include="Flow\AxisControl.cs" />
<Compile Include="Flow\BaseFlow.cs" />
<Compile Include="Flow\HomeFlow.cs" />

Loading…
Cancel
Save