Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 1
在开发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的更多相关文章
- Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 2
接上一篇文章的内容. 看了前面需求提到的复杂的命令行解析功能,很多人立马开始发怵,其实大可不必. 我们都知道,Linux下的程序往往都提供了复杂的命令行参数处理机制,因为这是与 其他程序或用户进行交互 ...
- Modbus软件开发实战指南 之 开发自己的Modbus Poll工具 - 3
Modbus-RTU 一.数据分析 两个设备(单片机)通讯,用的是Modbus协议. 在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如: 说明: OX[20] 代表是 ...
- 推荐一本书:清华出版的《Modbus软件开发实战指南》
前言: 最近在研究Modbus开发,如果只是简单的了解了一些modbus基础知识,但是不够系统和全面. 其实,modbus虽然比较简单,但是如果不注意有很多坑,特别是寄存器的位数,大小端处理,浮点数, ...
- 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章
从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章 如何使用本书 1.1 本书的参考资料 本书参考资料为:<STM32 ...
- Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)
Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...
- .Net RabbitMQ实战指南——客户端开发
开发中关键的Class和Interface有Channel.Connection.ConnectionFactory.Consumer等,与RabbitMQ相关的开发工作,基本上是围绕Connecti ...
- Prism开发人员指南5-WPF开发 文档翻译(纯汉语版)
2014四月 Prism以示例和文档的形式帮助你更简单的设计丰富灵活易维护的WPF程序.其中使用的设计模式体现了一些重要的设计原则,例如分离关注点和松耦合,Prism帮助你利用松耦合组件设 ...
- 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 ...
- JFinal极速开发实战-业务功能开发-通用表单验证器
提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...
随机推荐
- js架构设计模式——MVC,MVP 和 MVVM 的图示及简单明了的区别说明
MVC,MVP 和 MVVM 的图示 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理 ...
- js原生设计模式——6复杂对象的构建—Builder建造者模式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 持续集成的一些讨论(CI)
如何保证程序开发的新功能降低BUG,那就是需要他们自己写用测试工具来写测试用例,包括Mocha(JS).Junit(Java).GTest(C++):而上传到SVN或者GIT后,又如何保证能跟原有的功 ...
- MyBatis 一对多关联查询
sqlxml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC ...
- line-height系列——定义和工作原理总结
一.line-height的定义和工作原理总结 line-height的属性值: normal 默认 设置合理的行间距. number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距li ...
- [JQuery]serialize()和serializeArray()
1.serialize()把表单的值序列化成字符串 <html> <head> <script src="http://libs.baidu.com/jquer ...
- swift2.0 字符串,数组,字典学习代码
swift 2.0 改变了一些地方,让swift变得更加完善,这里是一些最基本的初学者的代码,里面涉及到swift学习的最基本的字符串,数组,字典和相关的操作.好了直接看代码吧. class View ...
- Android jni 编程3(对基本类型一维整型数组的操作)总结版
主要学习资料:黑马程序员的NDK方法使用(生产类库so) jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...
- TFS应用经验-大型项目数据仓库抽取导致的TFS应用无法访问
在超过千人使用的TFS生产环境中,每天周期性出现无法正常查看工作项白板.无法签入代码.无法进行自动化构建.无法进行报表数据的查看等情况,真是一个让人焦灼的问题.作为TFS平台支持和运维的团队,也想进了 ...
- SVM入门(一)
近来,了解了一下SVM(支持向量机 support vector machine)的原理.顺便把自己理解的内容整理一下. 不讲背景啦,直接切入主题. 一.什么是支持向量机 好比说,我们现在在一 ...