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 ReciveTaskEvent; public event Action 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(msg); EInstruction eInstructioneInstruction = schedule.Instruction; switch (eInstructioneInstruction) { case EInstruction.InquireSiloStatus: break; case EInstruction.InquireConnectionInfo: SchedulingConnectionInfo info = JsonConvert.DeserializeObject(msg); info.Type = SchedulingConnectionInfo.EType.Scheduling; client.Send(info.ToString()); LogHelper.Debug(info.ToString()); ReplayTaskEvent?.Invoke(info.ToString()); break; case EInstruction.LoadAndUnload: LogHelper.Debug("接收:" + msg); MachineManage.Instance.RunState = ERunState.Busying; sm = JsonConvert.DeserializeObject(msg); schedulResult = new SchedulingResult() { Instruction = sm.Instruction, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID }; string buffer = schedulResult.ToString(); client.Send(buffer); LogHelper.Debug(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(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(msg); SwitchStatus(switchStatus); //MachineManage.Instance.MachineStatus= EMachineStatus. //if (ss.TryConvertInfoTo(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(msg); sr.Message = "Default"; client.Send(sr.ToString()); ReplayTaskEvent?.Invoke(sr.ToString()); break; case EInstruction.SetRecipe: break; case EInstruction.GetCurrentRecipe: SchedulingResult srcur = JsonConvert.DeserializeObject(msg); srcur.Message = "Default"; client.Send(srcur.ToString()); ReplayTaskEvent?.Invoke(srcur.ToString()); break; case EInstruction.TurnoverReady: break; case EInstruction.ChangeState: SchedulingResult cs = JsonConvert.DeserializeObject(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(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; } } /// /// 断开连接 /// /// private void Client_OnDisconnected(System.Net.Sockets.Socket obj) { MessageQueue.Instance.Insert($"中控断开连接"); LogHelper.Debug("中控断开连接"); } /// /// 连接成功 /// /// private void Client_OnConnected(System.Net.Sockets.Socket obj) { LogHelper.Debug("中控连接成功"); 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; } } }