wcs_server_s7_baoying/WcsMain/Business/Convey/ConnectPlcServe.cs

110 lines
3.1 KiB
C#
Raw Permalink Normal View History

2024-06-20 09:23:01 +08:00
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;
}
}
/****************************** 请求事件 ******************************/
}