现在有很多的Modbusu开源通讯库,比如 easyModus,Nmodbus4。可以基于快速搭建Modbus 通讯程序。但是问题也很多,其中一个重要的是通讯的稳定性很差。经常连接一会就会莫名的挂掉。
经过几天的研究,发现采用如下方法,通讯稳定性有了很大的提高。目前最长的通讯连接时间将近1天。当然这个还不够,还需要继续研究。把通讯一次稳定时间持续到至少1周才算合格。
废话不说,核心方法为:
通讯故障定位,再根据具体的故障原因,具体处理,增强软件的鲁棒性!
具体分类如下:
1 故障来源:System。
解决方法:自重启软件。
2 故障来源:NModbus4 或 mscorlib
故障原因:“正在中止线程 或是 ”由于线程退出,或应用程序请求,已中止 I/O 操作“
解决方法: 判断当前串口状态,如果已经关闭,则打开。
判断ModbusSlave 是否为空引用, 如果为空引用,则新实例化一个ModBus从站服务器。
如果不为空,则将当前从站赋空引用,再实例化一个ModBus从站服务器。
3 判断当前的故障原因 是否包含 ”正在中止线程"或 "线程退出"
如果包含,则重新创立新线程。线程中运行ModBus从站服务器。
故障原因1、2、3处理逻辑结构
IF 1 THEN
{
}
ELSE
{
IF 2 THEN
{
}
IF 3 THEN
{
}
}
备注:千万不要轻易新开线程!!!