You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.9 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Admin.Core.Common;
using Admin.Core.PlcServer;
using System.Timers;
namespace Admin.Core.RunPlc
{
/// <summary>
/// 扫码器初始化
/// </summary>
public class RunPlcService : IRunPlcService
{
System.Timers.Timer timer = new System.Timers.Timer(5000);//创建定时器设置间隔时间为5000毫秒
#region 构造函数
public RunPlcService()
{
StartSiemensPlcServer();//西门子
}
#endregion
#region 心跳
public Task StartPlcAsync()
{
timer.Elapsed += new System.Timers.ElapsedEventHandler(ExecSiemensHeartTask);
timer.AutoReset = true;//设置是执行一次false还是一直执行(true)
timer.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它
timer.Start();//timer.Start()的内部原理还是设置timer.Enabled = true;
return Task.CompletedTask;
}
private static void StartSiemensPlcServer()
{
var allPlcServices = Appsettings.app<PlcModel>("PLCServer").ToList();
foreach (var item in allPlcServices)
{
PlcModel model = new PlcModel();
model.Id = item.Id;
model.EquipName = item.EquipName;
model.IP = item.IP;
model.Port = item.Port;
model.plc = new SiemensPlc(item.IP, item.Port);
PlcHelper.siemensList.Add(model);
}
}
#endregion
#region 心跳检测
private async void ExecSiemensHeartTask(object? sender, ElapsedEventArgs e)
{
foreach (var item in PlcHelper.siemensList)
{
if (await item.plc.Read("M100"))
{
item.IsConnect = true;
item.plc.IsConnected = true;
//Console.WriteLine(item.melsecPlc.ReadBool("M100"));
//Console.WriteLine($"{item.EquipName}:PLC连接成功");
}
else
{
if (item.plc.IsConnected == false)
{
item.IsConnect = false;
//Console.WriteLine($"{item.EquipName}:PLC连接失败");
System.GC.Collect();
bool r = item.plc.Connect(item.IP, item.Port);
if (r)
{
item.plc.IsConnected = r;
item.IsConnect = r;
}
else
{
item.plc.IsConnected = r;
item.plc.DisConnect();
}
}
}
}
}
#endregion
}
}