一、实验过程:
实验使用上位机modbus调试精灵作为主机,两个dsp28335核心板为从机,分别编号为1号从机,2号从机;主机与从机通信使用modbus rtu协议,RS232串行接口,通过设置不同的设备地址来访问不同的从机,若访问成功则调试精灵通讯状态提示通讯正常。
二、modbus调试精灵

modbus调试精灵功能:
1.通讯参数设置:可设置串行通信的通信参数
2.此软件可发送三个命令 06(hex)写单寄存器 、10(hex)写多寄存器、03(hex)读寄存器 来对通信进行测试
三、 modbus通信帧格式
1、写寄存器区: 发送命令06
写单个模拟量寄存器(保持寄存器):
计算机发送命令:[设备地址] [命令号06] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11] [06] [00] [01] [00] [03] [CRC低] [CRC高]
意义如下:
<1>设备地址:表示想和哪一个设备通讯。
<2>命令号:写模拟量的命令号固定为06。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模拟量寄存器的地址。
<4>下置的数据高8位,低8位:表明需要下置的模拟量数据。比如例子中就把1号寄存器的值设为3。
<5>CRC校验:是从开头一直校验到此之前。此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。
<6>注意此命令一条只能下置一个模拟量的状态。
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。
2、读寄存器区: 发送命令03
读可读写模拟量寄存器(保持寄存器):
计算机发送命令:[设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][03][00][6B][00][03][CRC低][CRC高]
意义如下:
<1>设备地址和上面的相同。
<2>命令号:读模拟量的命令号固定为03。
<3>起始地址高8位、低8位:表示想读取的模拟量的起始地址(起始地址为0)。比如例子中的起始地址为107。
<4>寄存器数高8位、低8位:表示从起始地址开始读多少个模拟量。例子中为3个模拟量。注意,在返回的信息中一个模拟量需要返回两个字节。
设备响应:[设备地址] [命令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位]
例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
意义如下:
<1>设备地址和命令号和上面的相同。
<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的值。例子中返回了3个模拟量的数据,因为一个模拟量需要2个字节所以共6个字节。
<3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的高8位和低8位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。例子中返回的值分别是555,0,100。
<4>CRC校验同上。
3、写多寄存器区: 发送命令10 (hex)
写寄存器区: 发送命令10
写多个模拟量寄存器(保持寄存器):
计算机发送命令:[设备地址] [命令号10] [需下置的寄存器起始地址高8位] [低8位] [需下置的寄存器数高8位] [低8位] [字节个数] [数据1高8位] [低8位]…[数据n高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][10][00][01][00][03][CRC低][CRC高]
意义如下:
<1>设备地址表示想和哪一个设备通讯。
<2>命令号:写模拟量的命令号固定为10。
<3>需下置的寄存器起始地址高8位,低8位:表明了需要下置的模拟量寄存器的起始地址。
<4>需下置的寄存器数高8位,低8位:表明了需要下置的模拟量寄存器的数量。
<5>需下置的字节个数。
<6>下置的数据高8位,低8位。
<7> CRC校验同上。
设备响应:[设备地址] [命令号10] [寄存器起始地址高8位] [低8位] [寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][10][00][01][00][03][ CRC低][CRC高]
意义如下:
<1>设备地址和命令号和上面的相同。
<2>寄存器的起始地址高8位,低8位。
<3>寄存器的数量高8位,低8位。
<4>CRC校验同上。
四、使用资源:
一号从机:
①tms320f28335 SCIB模块 :
(芯片18脚GPIO9第三功能SCITXDB即 SCIB 的TXD
芯片20脚GPIO11第三功能SCIRXDB即 SCIB 的RXD )
二号从机:
①tms320f28335 SCIB模块 :
(芯片62脚GPIO18第三功能SCITXDB即 SCIB 的TXD
芯片63脚GPIO19第三功能SCIRXDB即 SCIB 的RXD )
②max3232电平转换模块
③usb转串口线
④上位机modbus调试精灵
五、实验结果:
主机与一号从机通信结果:

主机与二号从机通信结果:

六、调试方法及问题总结
1.首先进行modbus点对点通信协议调试
此阶段遇到的问题为:如何判断一帧数据的结束,通过查找资料,及参考协议,最终利用帧间的3.5个字符间隔时间来进行帧结束的判断。
2.进行modbus主从多机通信
使用 设备地址 区别各从机,从机设备接收到主机数据帧后进行解析,如果符合自己的地址,则返回应答,否则不予应答。
此阶段遇到的问题为:多个从机挂在总线上,返回应答信号时冲突,经思考将程