Modbus 通讯常见问题

这里不介绍过多Modbus的原理和理论,我也不熟悉。废话少说,直接开始常见问题。 1、 接线问题:现在大部分采用两线制(四线制较少用,这里不介绍)接线方式,采用 屏蔽双绞线。大部分厂家的接线端子标识为:A、B,但是由于各厂家之间的有可能采用的规范不太一样,有的A是正极,有的B是正极,再加上有第三方设备接线混乱,正负经常接反。通讯之前干两件事: a) 第三方设备,也就是从站线接好,用万用表量线间电压,通常会量到1~5V(个 别的会到8V)的电压,没有电压,通讯肯定不通,检查线路和接线,以及第三方设备; b) 量到电压,判断正负,接到主站设备对应端子上来。 2、 信号源问题:确认线路正常,通讯配置及读取地址正确,通讯还是不通,有可能就 是信号源的问题。信号源的问题通常是信号衰减或者有干扰源。Modbus通讯的理论距离是1200M,距离越长,信号衰减越厉害,加上有一些电缆质量较差,衰减更厉害。干扰源就不用介绍了。解决的方法如下: a) 信号衰减:更换质量更好的电缆,或者在通讯电缆中间加中继器(优点可以延 长Modbus通讯的理论距离,缺点是需要供电); b) 干扰源:最理想的方法是排除干扰源(比较艰难)。也可以尝试更换屏蔽效果 更好的电缆,尽量减少和供电电缆放到一起。另外,有些设备Modbus接线端子没有终端电阻,可以在电缆两端各并联一个终端电阻(电阻为120欧,哪端如果有,就不用加了,具体有没有查看设备样本,一般都会有说明)。 3、 通讯配置:主从站配置(波特率、数据位数、停止位数、奇偶校验)一致就可以, 不多说了。 4、 通讯地址:这个是问题最多的,下面我把自己碰到问题列出来及解决方法列出来, 供大家参考。 a) 地址偏移:有时会发现第三方设备给你的地址表和你自己读取的不一致,甚至 是读不出来,你可以尝试往前或往后读一位,比如说,地址是40001,你可以尝试读取40000或者40002;

b) 读取数量:有一些设备寄存器较小,读太多和通讯错误;还有一些设备,主站 读取数量必须与从站一致,比如说,16位模拟量有三个,你就只能读取三个,数字量有7位,你只能读取7位。由于部分厂家设备数字量读取只能是整个字读取,也就是只能读取16位的整数倍数,所以从站不够16位整数倍的,可以在从站设备上用一些没有意义的数补够16位。 c) 从站并联:通常情况下,相同设备可以采用并联的方式,最后通过一根电缆接 到主站通讯卡上。这种方式的优点:占用较少通讯接口,节省电缆;缺点:设备过多,通讯速率下降,而且并联中有通讯失败的从站,对正常通讯的从站设备影响更为明显。 注意:主站通讯接口对从站并联数目有限制,不同厂家的设备,数目不尽相同,而且在要求的数目范围内,也有可能有部分通讯不正常,所以条件允许的话,尽量减少一个接口并联较多从站设备。 d) 主从站数据不一致:有时会发现通讯正常,但是数据与从站数据不一致,除了 检查上面提到的地址偏移问题,还要检查数据格式是否正确。比如32位模拟量是否需要前16位与后16位进行反转。数字量打包后排序是从1到16,还是从16到1。还有部分人将数字量是打包成8位,再打包成16位,有可能需要将前8位和后8位反转。 e) 数据转换:通讯中,经常为了提高精度,从站设备数据经常会乘以10或者100, 所以通讯过来之后,主站在显示的时候,需要相应的除以10或者100;还有部分设备编程时没有做数据处理,通讯过来的数字都是原始数,比如,西门子S7-200通讯过来的一个量程为0~1.0MPa压力点,但是通讯上来的数是6400~32000,这时就需要做相应的变换。 实际的调试过程中,遇到过各种奇怪的现象。这里把我的经验和大家分享,希望对大家 有所帮助。说的不当或错误的地方,请你指出。

你可能感兴趣的:(通信协议)