You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

262 lines
11 KiB
C#

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;
}
}
}