作者 | 主题 |
---|---|
迷失中原 侠圣 经验值: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个设备,一样很容易控制的。
生命不息,奋斗不止!
|