using WcsMain.Business.Convey.DataHandler; using WcsMain.Common; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.Enum.General; using WcsMain.Enum.Tcp; using WcsMain.Tcp.Client; using WcsMain.Tcp.Entity; using WcsMain.Tcp.Entity.Message; using WcsMain.WcsAttribute.AutoFacAttribute; namespace WcsMain.Business.Convey; /// /// 连接并接收 PLC 的信息 /// [Component] public class ConnectPlcServe(AppTcpDao tcpDao, BaseConveyDataHandler conveyDataHandler) { public void SetBaseAction() { CommonTool.PlcTcpClient = new PlcTcpClient(); CommonTool.PlcTcpClient.SetConnecting((tcpData) => ConsoleLog.Info($"{tcpData} 正在连接")); CommonTool.PlcTcpClient.SetConnectFailAction((tcpData, ex) => ConsoleLog.Warning($"{tcpData} 连接失败,参考信息:{ex.Message}")); CommonTool.PlcTcpClient.SetConnectSuccess((tcpData) => ConsoleLog.Success($"{tcpData} 连接成功")); CommonTool.PlcTcpClient.SetConnectOffline((tcpData) => ConsoleLog.Warning($"{tcpData} 失去连接")); CommonTool.PlcTcpClient.GetMessage(GetMessage); } /// /// 连接PLC服务 /// public void ConnectPlc() { Task.Factory.StartNew(() => { List? tcps = default; while (true) { tcps = tcpDao.Query(new AppTcp { TcpStatus = (int)TrueFalseEnum.TRUE, TcpType = (int)TcpType.PLC }); if (tcps != default) break; Thread.Sleep(5000); continue; } if (tcps.Count == 0) return; CommonTool.PlcTcpClient.SetBaseTcpServe(tcps); CommonTool.PlcTcpClient.Connect(); }, TaskCreationOptions.LongRunning); } /// /// 收到信息时的处理 /// /// /// private void GetMessage(TcpServeConnectionData tcpServe, string msg) { ConsoleLog.Tcp($"{tcpServe} 收到信息:{msg}"); MsgHeader? header = CommonTool.PlcTcpClient.GetMsgHeader(msg); if(header == default) { return; } switch(header.MsgType) { case "SEND": GetRequest(tcpServe, header, msg); return; case "RESP": GetResponse(); return; default: return; } } /***************************** 请求和响应事件 *****************************/ private void GetResponse() { } private void GetRequest(TcpServeConnectionData tcpServe, MsgHeader header, string msg) { switch(header.MsgTag) { case "GTROUTER": // plc向WCS请求路向 ---- 箱式线 conveyDataHandler.GetRouter(tcpServe.DisplayName, msg); return; } } /****************************** 请求事件 ******************************/ }