技术论坛

 关于MODBUS通讯一点小心得,欢迎探讨

返回主题列表
作者 主题
迷失中原
侠圣

经验值:2476
发帖数:385
精华帖:5
楼主    2017-08-14 18:02:43
主题:关于MODBUS通讯一点小心得,欢迎探讨

对于MODBUS通讯,如果能够采用自由口的话,会灵活很多。

第一,采用定时中断,不要采用定时器轮训。采用19200波特率,发送8个字节不会超5ms,一个来回20错错有余。因此定时中断时间设定为25或者20ms,完全可以完成一个发送任务。


第二,对于有读有写的通讯任务,一定要对写数据进行变化检测处理发送,即写数据有变化再发送,可以提高系统通讯速度。


第三,分配统一设备的优先级。比如读取变频器电流和写频率。当需要写频率时候,可以直接跳过电流读取,从而保证整个数据通讯数量一致(不会有太大增加),提高时效。


第四,自由口MODBUS通讯,不要做超时判断和重复发送,浪费时间。如果8个数据(含4个写任务),完全可以在120MS完成周期通讯。也就是说通过优化尽可能缩短整个通讯周期。当发送数据后,定时中断25ms,时间到无条件执行下一次发送。所有设备返回数据斗会存在中转区,通过中转区数据分析,包括地址、校验码等,判断数据是否正确及采用;若未返回数据则延时判断。


第五、对于长时间掉线设备,可以不用间歇性性查询。本系统最大优势就是,无论设备是否断线,通讯周期永远是一样的(排除写任务的差异导致周期变化),断线对本系统基本没有影响。



第六、个人不建议使 通讯进行启停累操作,包括读取运行状态。通讯控制启停存在风险,远没有IO迅速可靠;通讯读取运行状态,比如运行、故障,性价比太低,却要占用大量的读任务,DI模块可比模拟量便宜多了。读写仪表参数、写变频器频率、读电流、温度等还是很不错的。


第七、定时中断的时间不能设置太少,否则通讯异常。可以根据串口软件监控测试。


总之,发送就只管发送,时间到了你就发送;接收就只管接收,只需要把接收储存起来就可以;数据分析的就只数据分析,解析数据并给结果:正确或者断线;发送之前的数据处理也是一样,决定发送哪个设备以及需要发送的数据。虽然程序独立,但是逻辑控制却环环相扣。只要搭建一个清新明了的框架,就是再增加100个设备,一样很容易控制的。


生命不息,奋斗不止!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。