|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Converters;
|
|
|
|
|
using Rs.Framework;
|
|
|
|
|
using Rs.MotionPlat.Commom;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using static System.Windows.Forms.AxHost;
|
|
|
|
|
|
|
|
|
|
namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
public class TestCenter
|
|
|
|
|
{
|
|
|
|
|
TcpClientHelper client = new TcpClientHelper("127.0.0.1",2048);
|
|
|
|
|
SchedulingResult schedulResult = new SchedulingResult();
|
|
|
|
|
SchedulingMaterial sm;
|
|
|
|
|
public event Action<string> ReciveTaskEvent;
|
|
|
|
|
public event Action<string> ReplayTaskEvent;
|
|
|
|
|
private TestCenter() {
|
|
|
|
|
client.OnConnected += Client_OnConnected;
|
|
|
|
|
client.OnDisconnected += Client_OnDisconnected;
|
|
|
|
|
client.DataRecived += Client_DataRecived;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int slotIndex = 0;
|
|
|
|
|
|
|
|
|
|
private void SwitchStatus(SchedulingStatusInfo ssi)
|
|
|
|
|
{
|
|
|
|
|
switch (ssi.Type)
|
|
|
|
|
{
|
|
|
|
|
case SchedulingStatusInfo.InfoType.State:
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.RunStatus:
|
|
|
|
|
WorkFlow.Instance.Start();
|
|
|
|
|
TurnoverFlow.Instance.Start();
|
|
|
|
|
TakeTrayFlow.Instance.Start();
|
|
|
|
|
StockManager.Instance.Start();
|
|
|
|
|
MachineManage.Instance.RunState = ERunState.Waiting;
|
|
|
|
|
MachineManage.Instance.RunStatus = ERunStatus.Started;
|
|
|
|
|
MachineManage.Instance.MachineStatus = EMachineStatus.Working;
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.RunMode://手动自动
|
|
|
|
|
MachineManage.Instance.RunMode = (ERunMode)Enum.Parse(typeof(ERunMode), ssi.Info.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.InitializeState:
|
|
|
|
|
if(ssi.Info==EInitializeState.Initializing.ToString())
|
|
|
|
|
{
|
|
|
|
|
MonitorSystemButton.Instance.ButtonPressed(ESystemButton.ResetPressed);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.AssignMode:
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.Temperature:
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.AirPressure:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
client.Send("发送:"+ssi.ToString());
|
|
|
|
|
}
|
|
|
|
|
private void Client_DataRecived(System.Net.Sockets.Socket socket, byte[] data)
|
|
|
|
|
{
|
|
|
|
|
string msg=Encoding.UTF8.GetString(data);
|
|
|
|
|
//LogHelper.TestCenterLog("接收:"+msg);
|
|
|
|
|
ReciveTaskEvent?.Invoke(msg);
|
|
|
|
|
Scheduling schedule = JsonConvert.DeserializeObject<Scheduling>(msg);
|
|
|
|
|
EInstruction eInstructioneInstruction = schedule.Instruction;
|
|
|
|
|
switch (eInstructioneInstruction)
|
|
|
|
|
{
|
|
|
|
|
case EInstruction.InquireSiloStatus:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.InquireConnectionInfo:
|
|
|
|
|
SchedulingConnectionInfo info = JsonConvert.DeserializeObject<SchedulingConnectionInfo>(msg);
|
|
|
|
|
info.Type = SchedulingConnectionInfo.EType.Scheduling;
|
|
|
|
|
client.Send(info.ToString());
|
|
|
|
|
LogHelper.Debug(info.ToString());
|
|
|
|
|
ReplayTaskEvent?.Invoke(info.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.LoadAndUnload:
|
|
|
|
|
LogHelper.TestCenterLog("接收:" + msg);
|
|
|
|
|
MachineManage.Instance.RunState = ERunState.Busying;
|
|
|
|
|
sm = JsonConvert.DeserializeObject<SchedulingMaterial>(msg);
|
|
|
|
|
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());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.CancelLoadAndUnload:
|
|
|
|
|
//schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID };
|
|
|
|
|
client.Send(schedule.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.InquireStatus:
|
|
|
|
|
SchedulingStatusInfo statusInto=JsonConvert.DeserializeObject<SchedulingStatusInfo>(msg);
|
|
|
|
|
switch (statusInto.Type)
|
|
|
|
|
{
|
|
|
|
|
case SchedulingStatusInfo.InfoType.State:
|
|
|
|
|
statusInto.Info = MachineManage.Instance.RunState.ToString();// ERunState.Waiting.ToString();
|
|
|
|
|
//MessageQueue.Instance.Insert(statusInto.Info);
|
|
|
|
|
//File.AppendAllText("c://runstate.txt",statusInto.Info.ToString()+"\r\n");
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.RunStatus:
|
|
|
|
|
statusInto.Info = MachineManage.Instance.RunStatus.ToString();// ERunStatus.Started.ToString();
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.RunMode:
|
|
|
|
|
statusInto.Info = MachineManage.Instance.RunMode.ToString();
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.InitializeState:
|
|
|
|
|
statusInto.Info = MachineManage.Instance.InitializeState.ToString();// EInitializeState.Initialized.ToString();
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.AssignMode:
|
|
|
|
|
statusInto.Info = EAssignMode.Normal.ToString();
|
|
|
|
|
break;
|
|
|
|
|
case SchedulingStatusInfo.InfoType.Temperature:
|
|
|
|
|
statusInto.Info = "22";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
client.Send(statusInto.ToString());
|
|
|
|
|
LogHelper.Debug(statusInto.ToString());
|
|
|
|
|
ReplayTaskEvent?.Invoke(statusInto.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.SwitchStatus:
|
|
|
|
|
SchedulingStatusInfo switchStatus=JsonConvert.DeserializeObject<SchedulingStatusInfo>(msg);
|
|
|
|
|
SwitchStatus(switchStatus);
|
|
|
|
|
//MachineManage.Instance.MachineStatus= EMachineStatus.
|
|
|
|
|
//if (ss.TryConvertInfoTo<ERunMode>(out ERunMode runMode))
|
|
|
|
|
// MachineManage.Instance.RunMode = runMode;
|
|
|
|
|
//client.Send(ss.ToString());
|
|
|
|
|
//ReplayTaskEvent?.Invoke(ss.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.ClearAlarm:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.GetRecipeList:
|
|
|
|
|
SchedulingResult sr = JsonConvert.DeserializeObject<SchedulingResult>(msg);
|
|
|
|
|
sr.Message = "Default";
|
|
|
|
|
client.Send(sr.ToString());
|
|
|
|
|
ReplayTaskEvent?.Invoke(sr.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.SetRecipe:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.GetCurrentRecipe:
|
|
|
|
|
SchedulingResult srcur = JsonConvert.DeserializeObject<SchedulingResult>(msg);
|
|
|
|
|
srcur.Message = "Default";
|
|
|
|
|
client.Send(srcur.ToString());
|
|
|
|
|
ReplayTaskEvent?.Invoke(srcur.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.TurnoverReady:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.ChangeState:
|
|
|
|
|
SchedulingResult cs = JsonConvert.DeserializeObject<SchedulingResult>(msg);
|
|
|
|
|
client.Send(cs.ToString());
|
|
|
|
|
ReplayTaskEvent?.Invoke(cs.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.ShowMessage:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.CloseMessage:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.MachineButtonDown:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.MachineButtonUp:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.TrayProductRange:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.ClearTrayProductRange:
|
|
|
|
|
schedulResult = JsonConvert.DeserializeObject<SchedulingResult>(msg);
|
|
|
|
|
client.Send(schedulResult.ToString());
|
|
|
|
|
ReplayTaskEvent?.Invoke(schedulResult.ToString());
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.RequestSwitchTray:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.BeginSwitchTray:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.MoveScanner:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.InquireMoveScannerState:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.SetAlarms:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.CancelAlarms:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.IsLastBeforeTray:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.EndInput:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.TakingError:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.CancelTakingError:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.Rearrange:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.RearrangeResult:
|
|
|
|
|
break;
|
|
|
|
|
case EInstruction.ScanBarcode:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 断开连接
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="obj"></param>
|
|
|
|
|
private void Client_OnDisconnected(System.Net.Sockets.Socket obj)
|
|
|
|
|
{
|
|
|
|
|
MessageQueue.Instance.Insert($"中控断开连接");
|
|
|
|
|
LogHelper.TestCenterLog("中控断开连接");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 连接成功
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="obj"></param>
|
|
|
|
|
private void Client_OnConnected(System.Net.Sockets.Socket obj)
|
|
|
|
|
{
|
|
|
|
|
LogHelper.TestCenterLog("中控连接成功");
|
|
|
|
|
MessageQueue.Instance.Insert($"中控连接成功");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static TestCenter instance;
|
|
|
|
|
public static TestCenter Instance
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if(instance==null)
|
|
|
|
|
{
|
|
|
|
|
instance = new TestCenter();
|
|
|
|
|
}
|
|
|
|
|
return instance;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Init()
|
|
|
|
|
{
|
|
|
|
|
client.Connect();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool LoadResult()
|
|
|
|
|
{
|
|
|
|
|
string content = LoadAndUnloadTask.Instance.GetLoadString();
|
|
|
|
|
return client.Send(content) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool LoadTestLoadResult()
|
|
|
|
|
{
|
|
|
|
|
string content = LoadAndUnloadTask.Instance.GetTestLoadString();
|
|
|
|
|
return client.Send(content) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool LoadTestUnLoadResult()
|
|
|
|
|
{
|
|
|
|
|
string content = LoadAndUnloadTask.Instance.GetTestUnLoadString();
|
|
|
|
|
return client.Send(content) > 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|