关于modbus rtu通讯调试过程的那些事1
接上一个帖子【S7-200smart主站与s7-1200从站的Modbus rtu通讯】,https://www.ad.siemens.com.cn/club/bbs/post_1950172_50_0_1.html#anch,
主要说明了创建一个系统,需要s7-1200作为modbus rtu通讯的从站,与s7-200smart 作为主站的modbus rtu通讯,并在帖子中详细说明了创建的过程和步骤,以及数据交换的过程。
Modbus rtu通讯指令工作过程,图示1:

Modbus rtu通讯数据的交换,图示2:

通讯说明概要:
S7-1200 从站创建有DB3.DBD0 ~ DB3.DBD76(总计20个real数据长度)的数据区,供主站s7-200smart作为主站读、写,读、写的数据存放在VD100 ~VD176的数据区,数据隐射是对应关系的。
S7-200smart主站指令详解:
MBUS_CTRL主站初始化指令。
其中,指令管脚:
输入:
EN:使能管脚,一般应用时用常ON;
Mode:通讯模式启动使能端,0为PPI工作模式、1为modbus rtu工作模式;
Baud:通讯频率设置,波特率bps;
Parity:校验位设置,0 = 无校验,1 = 奇校验,2 = 偶校验;
Port:通讯接口,对于s7-200smart本机集成口为prot0,设置 = 0,扩展信号板CM01,则填写为1;
Timeout:超时时间设置,就是主站发送时间请求,到接收到从站数据后的全过程周期时间,单位ms;
输出:
Done:MBUS_CTRL通讯初始化完成标志位,当初始化完成后,该位为1;
Error:通讯初始化错误状态,正常完成时为0,其它数据值,根据具体的报警数据对应排查。
MBUS_MSG通讯指令。
其中,指令管脚:
输入:
EN:通讯指令使能管脚,当出现多条指令应用时,只能是其中一条有效;
First:主站读、写请求管脚,需要用沿脉冲触发;
Slave:读、写从站的站地址,管脚数据范围可以从1 ~247选取;
RW:数据读、写请求, 0 = 读、1 = 写;
Addr:从站数据的地址对应,自0字头到4字头,分别对应从站的数字量输出、输入、模拟量和保持寄存器数据区域;
Count:读、写从站数据的长度指定,其中0字头和1字头对应关系为位单位,3字头和4字头对应关系为一个字;
DataPtr:读、写数据的存放区域;
输出:
Done:通讯读、写完成标志位,当通讯指令完成后的本周期,该根据会有一次ON的过程;
Error:通讯指令完成的状态值,其中0表示无错误,其它数值根据手册对应相应的错误描述。
用户根据实际相应及从站的硬件特性,配置匹配的管脚数据调用。
案例程序,图示:

MBUS_CTRL指令:
EN:SM0.0长on;
Mode:通讯口故障模式,0 = ppi模式,1 = modbus rtu模式;
Baud:通讯波特率,bps,9600,数据4800 ~115200选取;
Parity:校验,0无校验,数字0 ~2选取;
Port:通讯接口指定,0本机集成通讯口;
Timeout:通讯数据全过程周期时间,1000ms;
Done:通讯初始化完成标志位,位数据存放,正常完成后,该位一直为1;
Error:初始化完成错误状态值,字节数据存放。
MBUS_MSG指令:
EN:通讯指令使能端;
First:数据请求触发端,脉冲信号触发;
Slave:从站站地址,=5 ,对应于读、写从站5#;
RW:读、写选择,0,表示读取从站数据;
Addr:从站的数据区域指定,40001,指从站的保持寄存器区;
Count:读、写从站的数据长度,40,表示读取从站40001开始的40个字长度;
DataPtr:读、写从站数据存放的寄存器区,对应于Addr、Count管脚的指定及从站所需的数据长度;
Done:读、写从站数据完成标志位,当MBUS_MSG指令读、写完成后,该管脚会有一次ON的过程。
Error:错误状态值,0表示没有错误。
MBUS_CTRL指令相对容易理解,根据具体的从站通讯特性选取即可,而MBUS_MSG指令是根据通讯需要调用。程序的本意是,当通讯初始化完成后的第二个工作周期,由SM0.1D的NC逻辑首次触发MSG指令,等待MSG完成后,有Done完成标志位作自循环无限自触发。
Modbus rtu通讯过程中,有一个便利的调试软件,叫串口调试软件,该软件目前种类较多,但是,大多都有相似之处的。
串口调试软件举例说明:
SSCOM V5.13.1的串口调试软件,软件界面,图示:

1) 打开串口调试软件,先根据主、从站通讯模式,设置匹配的通讯参数,图示:

2) 设置完成后,打开串口调试软件,图示:

3) 如果选定是人工手动方式数据的,那么,可以在发送编辑区,写入发送字符数据,图示:

根据案例,假设我需要读取从站s7-1200数据区2个real长度数据,发送编辑区输入:05 03 00 00 00 04的发送请求的数据。
4) 发送和接收到s7-1200从站数据,图示:

发送数据:
05:表示数据发送给从站是5#站点;
03:读取从站的功能码,读取5#从站寄存器数据;
00 00:数据区起始区;
00 04:读取数据的长度,04表示读取从站4个字长8个字节的数据。
从站返回数据:
05:表示从站5#返回的;
03:表示由03发送后返回来的寄存器数据;
08:表示数据长度8个字节byte;
3F 80 00 00:返回的第一个数据;
40 0C CC CD:返回的第二个数据;
03 2D:CRC16校验码,调试软件自动根据返回的数据计算得到的。
5) 对应于s7-1200的从站,数据区,图示:

通讯成功后,数据是能够对应一致的。利用串口调试软件测试通讯,相当于软件替代了一个s7-200smart作为主站的功能。
用串口调试软件的优势的成本轻,人为造成通讯故障的概率少,适合modbus rtu及其它通讯的初级阶段调试。