110 lines
3.1 KiB
C#
110 lines
3.1 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 连接并接收 PLC 的信息
|
|
/// </summary>
|
|
[Component]
|
|
public class ConnectPlcServe(AppTcpDao tcpDao, BaseConveyDataHandler conveyDataHandler)
|
|
{
|
|
private readonly AppTcpDao _tcpDao = tcpDao;
|
|
private readonly BaseConveyDataHandler _conveyDataHandler = 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 连接PLC服务
|
|
/// </summary>
|
|
public void ConnectPlc()
|
|
{
|
|
Task.Factory.StartNew(() =>
|
|
{
|
|
List<AppTcp>? 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 收到信息时的处理
|
|
/// </summary>
|
|
/// <param name="tcpServe"></param>
|
|
/// <param name="Msg"></param>
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/****************************** 请求事件 ******************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|