Modbus测试工具.docx

上传人:b****6 文档编号:8019570 上传时间:2023-05-12 格式:DOCX 页数:6 大小:109.13KB
下载 相关 举报
Modbus测试工具.docx_第1页
第1页 / 共6页
Modbus测试工具.docx_第2页
第2页 / 共6页
Modbus测试工具.docx_第3页
第3页 / 共6页
Modbus测试工具.docx_第4页
第4页 / 共6页
Modbus测试工具.docx_第5页
第5页 / 共6页
Modbus测试工具.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Modbus测试工具.docx

《Modbus测试工具.docx》由会员分享,可在线阅读,更多相关《Modbus测试工具.docx(6页珍藏版)》请在冰点文库上搜索。

Modbus测试工具.docx

Modbus测试工具

Modbus测试工具

Modbus测试工具 :

Modbus Poll,Modbus Slave

(2012-03-2215:

26:

59)

转载▼

分类:

电子技术

1,简介

  

网站地址:

该网站提供了几个软件工具,可以运行于windows2000/XP/Vista/7环境下,用来测试和仿真Modebus设备。

∙ModbusPoll :

Modbus主机仿真器,用于测试和调试Modbus从设备。

该软件支持ModbusRTU、ASCII、TCP/IP。

∙ModbusSlave:

 Modbus从设备仿真器,可以仿真32个从设备/地址域。

每个接口都提供了对EXCEL报表的OLE自动化支持。

∙WSMBT :

Modbus主设备的.NET控件,支持C#,VB,managedC++语言,支持ModbusTCP/IP。

∙WSMBS:

Modbus主设备的.NET控件,支持C#,VB,managedC++语言,支持ModbusRTU/ASCII。

∙MBAXP:

一个易用的ActiveX控件,支持Excel,VisualBasic,VisualC++,Delphi等。

支持Modbus RTU/ASCII和ModbusTCP/IP

2,功能

ModbusPoll是一个主机仿真器,用来帮助开发人员测试Modbus从设备,或者其它MOdbus协议的测试和仿真。

它支持多文档接口,即,可以同时监视多个从设备/数据域。

每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。

你可以从任意一个窗口读写寄存器和线圈。

如果你想改变一个单独的寄存器,简单地双击这个值即可。

或者你可以改变多个寄存器/线圈值。

提供数据的多种格式方式,比如浮点、双精度、长整型(可以字节序列交换)。

状态条显示错误信息。

如果你是一个从设备开发者,你可以通过"testcenter" 菜单,组织并发送你自己的测试字符串,并以16进制形式检查从设备返回的结果。

为VB,EXCEL等提供了OLE自动化接口。

可以用OLE接口解析和显示Modbus数据,然后送

06:

Presetsingleregister预置单寄存器

∙15:

Forcemultiplecoils 强制多线圈

∙16:

Presetmultipleregisters预置多寄存器

∙17:

ReportslaveID     报告从设备ID

∙22:

Maskwriteregister  屏蔽写寄存器

∙23:

Read/Writeregisters 读/写寄存器

2,一台微机,虚拟串口测试

安装虚拟串口软件,VSPD6.0,运行vspdconfig.exe,可一次建立两个串口,如COM1和COM2,并且两个串口已经虚拟连接。

使用F8呼出读写设置,F5呼出连接端口。

都用缺省,即可通讯。

这个例子分别设定主机和从机的端口为虚拟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菜单的"CommunicationTraffic"命令,可以显示出当前发送命令和接受的数据。

∙主机改变通讯功能,快捷键F8,令功能为4,读输入寄存器,然后在从机的10个寄存器上点击鼠标,输入每个寄存器的新值,则,在主机上会读取到这个新的寄存器值。

注意:

手头的USB转串口线不好使,转换出的串口再接DB9交叉线,连T61扩展坞上的串口,通讯不对。

连AVR板子也不对。

需要弄两台带串口的机器(或者带2个串口的台式机)进行此测试。

——从机板上的MAX232芯片坏了,真闷。

换个芯片,这条线也OK!

4,微机与AVR单片机之间串口测试:

读输入寄存器

测试环境:

微机运行Poll,AVRMEGA88运行移植后的代码,串口连线同上。

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:

010403E7000441BA      01-从设备地址,04-功能号,0x03E7=999,0x0004-读出寄存器个数,CRC校验

RX:

0104080001000200030004BCCE 01-从设备地址,04-功能号,08-返回字节数,四个数分别是1,2,3,4,CRC校验

对应的测试程序如下:

*-----------------------Defines------------------------------------------*/

#defineREG_INPUT_START1000//任意设置,最小=1

#defineREG_INPUT_NREGS4

#defineREG_HOLDING_START1000//与上述同地址也是可以的

#defineREG_HOLDING_NREGS130

#defineREG_COILS_START  1000

#defineREG_COILS_SIZE   16

staticUSHORT usRegInputStart=REG_INPUT_START;

staticUSHORT usRegInputBuf[REG_INPUT_NREGS];

staticUSHORT usRegHoldingStart=REG_HOLDING_START;

staticUSHORT usRegHoldingBuf[REG_HOLDING_NREGS];

staticunsignedcharucRegCoilsBuf[REG_COILS_SIZE/8];

#defineSlaveAddress0x01//从设备站号

#defineBaudRate9600//串口波特率

#defineComPort0//串口号,0/1

#defineParity MB_PAR_EVEN //校验方式

voidmain(void)

{

  constUCHAR  ucSlaveID[]={0xAA,0xBB,0xCC}; 

  eMBErrorCode  eStatus;

 

   eStatus=eMBInit(MB_RTU,SlaveAddress,ComPort,BaudRate,Parity);

  eStatus=eMBSetSlaveID(0x34,TRUE,ucSlaveID,3);//设置从机的信息,比如控制器版本、运行状态指示等。

如果主机不需要,则可删除。

  sei( );

   //EnabletheModbusProtocolStack. 

  eStatus=eMBEnable( );

  for(;;)

  {

    //CallthemainpollingloopoftheModbusprotocolstack.

    (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。

协议里规定,如果通讯出错,则返回数据格式为:

0184xxCRC2字节

这里xx表示错误码:

xx=01020304,其中02-无效的数据地址

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2