添加项目文件。

This commit is contained in:
Administrator
2026-08-04 18:36:40 +08:00
parent 16fb9e4f5a
commit a2ecbc795d
616 changed files with 149853 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
using PLCCommunication.PLCType.Omron;
using System;
using System.Threading.Tasks;
namespace WindowsService1
{
public class PLCWrapper
{
private OmronFinsNet _plc;
public bool _plcIsConnected;
private readonly string _ipAddress;
private readonly int _port;
private readonly int _maxReconnectAttempts;
private readonly int _reconnectDelay;
public PLCDataReader _dataReader;
public PLCWrapper(string ipAddress, int port, int maxReconnectAttempts = 3, int reconnectDelay = 5000)
{
_ipAddress = ipAddress;
_port = port;
_maxReconnectAttempts = maxReconnectAttempts;
_reconnectDelay = reconnectDelay;
}
public async Task<bool> ConnectAsync()
{
try
{
_plc = new OmronFinsNet
{
IpAddress = _ipAddress,
Port = _port
};
var connectResult = await Task.Run(() => _plc.ConnectServer());
_plcIsConnected = connectResult.IsSuccess;
if (_plcIsConnected)
{
_dataReader = new PLCDataReader(GetPLCClient());
Logger.WriteInfo("PLC连接成功");
}
else
{
Logger.WriteInfo("PLC连接失败");
}
return _plcIsConnected;
}
catch (Exception ex)
{
Logger.WriteError($"PLC连接失败: {ex.Message}");
return false;
}
}
public void Disconnect()
{
if (_plcIsConnected)
{
_plc.ConnectClose();
_plcIsConnected = false;
Logger.WriteInfo("与PLC断开连接");
}
}
public OmronFinsNet GetPLCClient()
{
if (!_plcIsConnected || _plc == null)
{
throw new InvalidOperationException("PLC 未连接或未初始化。请先调用 ConnectAsync()。");
}
return _plc;
}
public async Task<bool> ReconnectAsync()
{
if (_plcIsConnected)
{
Logger.WriteInfo("PLC已连接,无需重连");
return true;
}
for (int attempt = 1; attempt <= _maxReconnectAttempts; attempt++)
{
Logger.WriteInfo($"尝试重新连接PLC,第 {attempt} 次尝试");
if (await ConnectAsync())
{
Logger.WriteInfo("PLC重新连接成功");
return true;
}
if (attempt < _maxReconnectAttempts)
{
await Task.Delay(_reconnectDelay);
}
}
Logger.WriteError($"PLC重新连接失败,已尝试 {_maxReconnectAttempts} 次");
return false;
}
public bool IsConnected()
{
return _plcIsConnected;
}
}
}