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;
}
}
/****************************** 请求事件 ******************************/
}