在开发Modbus程序的过程中,也可以发现经常需要使用诸如Modbus Poll和Modbus Slave等辅助调试工具,

用于验证MODBUS通讯消息是否正确。但是,Modbus Poll和Modbus Slave都属于共享软件,

价格都在百美元左右,在未购买的情况下有时间或功能限制,怎么办呢?

其实,我们完全可以开发自己的MODBUS辅助调试工具。

那么先定一个小目标,开发一个简化版的Modbus Poll,能够方便调试MODBUS通讯,

支持RTU模式和TCP模式,支持以下最常用MODBUS功能码,如:

²  01: Read coil status 读线圈状态

²  02: Read input status 读输入状态

²  03: Read holding register读保持寄存器

²  04: Read input registers 读输入寄存器

²  05: Force single coil 强制单线圈

²  06: Preset single register 预置单(保持)寄存器

²  15: Force multiple coils 强制写多线圈

²  16: Preset multiple registers 预置写多个(保持)寄存器

RTU模式下,支持设置串口参数,如串口号、波特率、数据位、停止位、校验位等;TCP模式下,支持设置IP地址和端口号。

另外,如果采用图形化界面,则将花较大的篇幅过多关注于GUI部分的代码编写,

为了不影响关注重点,这里采用命令行方式开发,假设程序命名为modpoll.exe,命令行设定规则如下:

modpoll.exe [--debug] [-m {rtu|tcp}] [-a<slave-addr=1>] [-c<read-no>=1]

[-r<start-addr>=100] [-t<f-type>] [-o<timeout-ms>=1000]

[{rtu-params|tcp-params}] serialport|host [<write-data>]

命令行各参数的意义如下:

l   [--debug]:设置为debug模式,在debug模式下,将以十六进制方式打印通信数据。

l   [-m {rtu|tcp}]:选择RTU或TCP模式,如-mrtu,-mtcp等。

l   [-a<slave-addr=1>]:从设备地址,省略则默认为1。

l   [-c<read-no>=1]:读/写寄存器的个数,省略则默认为1。

l   [-r<start-addr>=100]:寄存器起始地址,省略则默认起始地址为100。

l   [-t<f-type>]:功能码的取值,范围是0x01/0x02/0x03/0x04/0x05/0x06/0x0F/0x10。

l   [-o<timeout-ms>=1000]:设置超时毫秒数,省略则默认为1000毫秒。

l   [{rtu-params|tcp-params}]:设置串口或者TCP配置参数:

RTU模式下,包括

b<baud-rate>=9600      波特率,缺省默认为9600

d{7|8}<data-bits>=8    数据位,缺省默认为8

s{1|2}<stop-bits>=1    停止位,缺省默认为

p{none|even|odd}=even  校验位,缺省默认为even偶校验

TCP模式下,为p<port>=502,设置端口号。

l   serialport|host:设置串口号或者IP地址,如COM1, COM2 ..或127.0.0.1等。

l   [<write-data>]:写功能码的情况下,需写入的数据,多个数据的情况下中间用空格隔开,可以为十进制或者16进制。

具体使用方法举例如下:

ü   写数据(TCP方式):modpoll --debug -mtcp -t0x10 -r0 -p1502 127.0.0.1 0x01 0x02 0x03

ü   写数据(RTU方式):modpoll --debug -mrtu -t0x06 -r10 -b19200 COM3 0x33

ü   读数据(TCP方式):modpoll --debug -mtcp -t0x03 -r0 -c3 -p1502 127.0.0.1

ü   读数据(RTU方式):modpoll --debug -mrtu -t0x03 -r0 -c3 -b19200 COM3

至此,软件功能需求基本分析完毕,下面开始具体开发过程。

待续。。。

Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 1的更多相关文章

  1. Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 2

    接上一篇文章的内容. 看了前面需求提到的复杂的命令行解析功能,很多人立马开始发怵,其实大可不必. 我们都知道,Linux下的程序往往都提供了复杂的命令行参数处理机制,因为这是与 其他程序或用户进行交互 ...

  2. Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 3

    Modbus-RTU 一.数据分析       两个设备(单片机)通讯,用的是Modbus协议.      在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如: 说明: OX[20]   代表是 ...

  3. 推荐一本书:清华出版的《Modbus软件开发实战指南》

    前言: 最近在研究Modbus开发,如果只是简单的了解了一些modbus基础知识,但是不够系统和全面. 其实,modbus虽然比较简单,但是如果不注意有很多坑,特别是寄存器的位数,大小端处理,浮点数, ...

  4. 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章

    从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章  如何使用本书 1.1  本书的参考资料 本书参考资料为:<STM32 ...

  5. Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)

    Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...

  6. .Net RabbitMQ实战指南——客户端开发

    开发中关键的Class和Interface有Channel.Connection.ConnectionFactory.Consumer等,与RabbitMQ相关的开发工作,基本上是围绕Connecti ...

  7. Prism开发人员指南5-WPF开发 文档翻译(纯汉语版)

    2014四月       Prism以示例和文档的形式帮助你更简单的设计丰富灵活易维护的WPF程序.其中使用的设计模式体现了一些重要的设计原则,例如分离关注点和松耦合,Prism帮助你利用松耦合组件设 ...

  8. Prism开发人员指南5-WPF开发 Developer's Guide to Microsoft Prism Library 5.0 for WPF (英汉对照版)

    April 2014 2014四月   Prism provides guidance in the form of samples and documentation that help you e ...

  9. JFinal极速开发实战-业务功能开发-通用表单验证器

    提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...

随机推荐

  1. delphi 获取硬盘序列号、cpu号、bios号、网卡号

    delphi 获取硬盘 序列号 function GetIdeNum: String; type TSrbIoControl = packed record HeaderLength : ULONG; ...

  2. mySQL内存及虚拟内存优化设置

    为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...

  3. Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)

    Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维护,根据MIT许可证发布,支持 Wind ...

  4. 第一个shell脚本 结合计划任务下载远程文件

    思路: 进入/usr/local/apache2/htdocs/ipa/  循环读取 /root/shell/wget/down.txt  每次一行,每一行直接就是一条命令,直接 $line 就可以执 ...

  5. js原生继承之——组合式继承实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. gcd-函数

    在网上看到了这个函数 int gcd(int a,int b){if(a==0) return b; if(b==0) return a; return gcd(b,a%b);} 是求最大公约数的 有 ...

  7. 第五组UI组件:ProgressBar及其子类

    ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件,它还派生了两个常用的组件:SeekBar和RatingBar.ProgressBar及其子类在用上十分相似,只 ...

  8. win8解决“telnet不是内部或外部命令”问题

    http://jingyan.baidu.com/article/870c6fc330c18ab03ee4be4f.html 打开“控制面板”里的“程序”选项. 点击“程序和功能”下的“启用或关闭wi ...

  9. SoapUI:入门实例

    这一章中我们要掌握如下内容: 1)         构建项目: 2)         运行单个请求: 3)         构建测试用例: 4)         接口之间传递参数,组织测试步骤: 5) ...

  10. 【python基础】之list列表

    python提供了一个被称为列表的数据类型,他可以存储一个有序的元素集合. 记住:一个列表可以存储任意大小的数据集合.列表是可变对象,有别于字符串str类,str类是不可变对象. 1.创建一个列表 l ...