:Modbus Poll,Modbus Slave这个例子分别设定主机和从机的端口为虚拟COM1、COM2,读写设置对话框中选择起始地址999,数量4的运行结果。修改从机数据,主机会马上得到响应。可修改的数据范围在-32767~32767,有负号16位整数。3,两台微机之间串口测试测试环境:都是XP32系统,一台机器运行Poll,一台运行Slave,中间用DB9串口线连接。主机端2-RXD,3-TXD,5-GND。两端DB9的RS232通讯线线序:2-3,3-2,5-5。操作:两边分别用F3设定连接参数:串口,串口1,9600band,8数据位,Even校验(偶校验),1停止位,RTU模式,其它缺省。主机端未正确连接,会给出提示通讯开始,主机端显示:TX=35,Err=0,ID=1,F=03,SR=1000ms。意思是,发送35次命令,错误次数,从机ID,功能号,轮询间隔。如果通讯出错,会在窗口第二行显示错误信息使用Display菜单的"Communication Traffic"命令,可以显示出当前发送命令和接受的数据。主机改变通讯功能,快捷键F8,令功能为4,读输入寄存器,然后在从机的10个寄存器上点击鼠标,输入每个寄存器的新值,则,在主机上会读取到这个新的寄存器值。注意:手头的USB转串口线不好使,转换出的串口再接DB9交叉线,连T61扩展坞上的串口,通讯不对。连AVR板子也不对。需要弄两台带串口的机器(或者带2个串口的台式机)进行此测试。——从机板上的MAX232芯片坏了,真闷。换个芯片,这条线也OK!4,微机与AVR单片机之间串口测试:读输入寄存器测试环境:微机运行Poll,AVR MEGA88运行移植后的代码,串口连线同上。AVR代码:串口用9600bps,even校验,1停止位,RTU模式,SlaveID=1,其它未改变。Poll设置:F3呼出连接对话框,设定9600bps同单片机波特率。F8呼出读写对话框,设定SlaveID=1;功能=4,地址=999,数量=4,扫描频率=1000ms,其它未变。界面显示出AVR寄存器内容,通讯无错误提示。换用9600/11400/19200/38400/115200bps波特率,通讯正常。因为Poll没有57600/230400等设置,这些波特率未测。AVR在该时钟下最高可达230400bps,无差错。数据分析:TX: 01 04 03 E7 00 04 41 BA 01-从设备地址,04-功能号,0x03E7=999,0x0004-读出寄存器个数,CRC校验RX: 01 04 08 00 01 00 02 00 03 00 04 BC CE 01-从设备地址,04-功能号,08-返回字节数,四个数分别是1,2,3,4,CRC校验对应的测试程序如下:* ----------------------- Defines ------------------------------------------*/#define REG_INPUT_START 1000 // 任意设置,最小=1#define REG_INPUT_NREGS 4#define REG_HOLDING_START 1000 // 与上述同地址也是可以的#define REG_HOLDING_NREGS 130#define REG_COILS_START 1000#define REG_COILS_SIZE 16static USHORT usRegInputStart = REG_INPUT_START;static USHORT usRegInputBuf[REG_INPUT_NREGS];static USHORT usRegHoldingStart = REG_HOLDING_START;static USHORT usRegHoldingBuf[REG_HOLDING_NREGS];static unsigned char ucRegCoilsBuf[REG_COILS_SIZE / 8];#define SlaveAddress 0x01 // 从设备站号#define BaudRate 9600 // 串口波特率#define ComPort 0 // 串口号,0/1#define Parity MB_PAR_EVEN // 校验方式void main(void){ const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC }; eMBErrorCode eStatus; eStatus = eMBInit( MB_RTU, SlaveAddress, ComPort, BaudRate, Parity ); eStatus = eMBSetSlaveID( 0x34, TRUE, ucSlaveID, 3 ); // 设置从机的信息,比如控制器版本、运行状态指示等。如果主机不需要,则可删除。 sei( ); // Enable the Modbus Protocol Stack. eStatus = eMBEnable( ); for( ;; ) { // Call the main polling loop of the Modbus protocol stack. ( void )eMBPoll( ); usRegInputBuf[0] = 01; usRegInputBuf[1] = 02; usRegInputBuf[2] = 03; usRegInputBuf[3] = 04; }}出现的问题:用不同AVR数据测试时,发现AVR代码有下列问题:设置的地址要比实际demo.c中设定的地址少一个。比如,demo.c中起始地址1000,但测试时Poll只能设定999,否则测试出错。该问题的根源在mbfuncinput.c中,解析出变量地址usRegAddress之后有个++动作,人为将其增加1。其它函数如mbfuncholding.c也是如此。参看Modbus协议的定义:从零开始寻址寄存器,比如寻址输入寄存器1-16,则输入为0-15。真是奇怪啊!自此可以看出,DEMO.C中定义的输入寄存器起始地址最小为1,此时才能满足Master要求的输入寄存器=0。协议里规定,如果通讯出错,则返回数据格式为:01 84 xx CRC2字节这里xx表示错误码:xx=01 02 03 04,其中02-无效的数据地址本文来源:http://blog.sina.com.cn/s/blog_49352090010138e7.htmlmodbus poll 教程:http://wenku.baidu.com/view/529e2dd3b14e852458fb5756.htmlmodbus 通讯协议 实例:http://wenku.baidu.com/view/ab6be234f111f18583d05ad3.htmlmodbus通讯视屏实例:http://v.youku.com/v_show/id_XMjk4Nzc2NTY0.html
Android ModbusTCP测试工具 modbus测试软件有哪些
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android软件测试Monkey测试工具
前言:最近开始研究Android自动化测试方法,对其中的一些工具、方
android 测试工具 ide 应用程序 -
软件测试工具有哪些(软件测试常用的工具都有哪些)
一、一个从事软件测试行业十年的老司机列出以下与软件测试相关的工具:1.操作系统: Linux:vmware、xshell 、xftp 、ssh2.数据库:
软件测试工具 测试工程师 软件测试 测试开发 python -
modbus协议的常用测试工具
在工作中经常会遇到modbus的设备,而大部分是modbus rtu通信协议,接下来就说明modbus的设备可以怎么进行测试。1,m
测试工具 stm32 单片机 数据 调试工具 -
校园网三层架构拓扑图
先看下整体拓扑图 1、VLAN及IP地址规划 VLAN号 VLAN名称 IP网段 默
校园网三层架构拓扑图 链路 IP 上行链路