using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using S7.Net;
using System.Threading;
namespace readDB
{
class ReConnect
{
Plc p ;
ClaDB1 dbRe; int dbunba;
public bool iscon { get; set; }
/// <summary>
/// 读取DB块Class
/// </summary>
/// <param name="plc">PLC实力对象</param>
/// <param name="db1">PLC DB块属性的类的实力对象</param>
/// <param name="dbNuba">DB块号</param>
public ReConnect(Plc plc, ClaDB1 db1,int dbNuba)
{
p = plc;
dbRe = db1;
dbunba = dbNuba;
}
public void GetDB()
{
Task.Run(() =>
{
while (true )
{
if (p.IsConnected == false)//如果连接没有打开,就把它打开
{
try { p.Open(); }
catch { }
}
if (p .IsConnected )//连接正常的情况下,读取DB块数据
{
try { p.ReadClass(dbRe, dbunba); iscon = true; }
catch { }
}
else//连接中断后,重新尝试连接
{
iscon = false;
p.Close();
Thread.Sleep(2000);
try { p.Open(); }
catch { }
}
//Console.WriteLine(dbRe.a1);
//Console.WriteLine(dbRe.a2);
//Console.WriteLine(dbRe.a3);
//Console.WriteLine(iscon);
Thread.Sleep(100);
}
});
}
}
}
S7.netpuls掉线重连
于 2023-06-04 23:35:59 首次发布
该代码示例展示了一个C#类,用于处理与PLC的连接并实现自动重连功能。当PLC连接断开时,程序会尝试重新打开连接并读取DB块数据。类接受PLC对象、DB块类实例和DB块号作为参数,使用异步任务持续检查并恢复连接状态。
摘要由CSDN通过智能技术生成