Modbus库开发笔记:Modbus ASCII Master开发
这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的。同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能。我们将ASCII主站的功能封装为函数,以便在开发具体应用时调用。
对于ASCII主站我们主要实现的功能有两个:其一是生成访问RTU从站的命令,总共支持8中功能码。其二是对ASCII从站端返回的信息进行解析并根据结果进行各种操作,同样也是支持8中功能吗的操作。具体软件访问结构如下:

1、访问命令的生成
客户端作为主动交互端,需要向服务器发各种操作请求命令。所以对于ASCII主站来说,首先要生成访问服务器的命令。生成命令只需要按标准的协议格式来生成即可,目前我们只支持前面提到的8个功能码。
/*生成访问从站的命令*/
uint16_t CreateAccessAsciiSlaveCommand(ObjAccessInfo objInfo, void *dataList, uint8_t *commandBytes)
这样在开发具体的客户端应用时只需要调用这个函数来生成访问服务器的命令就可以了。
2、响应信息的解析
如前一节所述,服务器收到命令后,根据命令进行处理并生成响应信息返回给客户端。客户端接到命令后首先要对响应信息进行解析,解析的过程其实与服务器端是一致的。所不同的是,不需要再根据解析结果生成响应信息了。
/*解析收到的从站相应信息*/
void ParsingAsciiSlaveRespondMessage(uint8_t *recievedMessage, uint8_t *command,uint16_t rxLength)
这样在开发客户端应用时,我们调用这一函数来解析响应信息就可以了。
3、响应处理
对于解析出来的信息,我们需要根据情况实现操作,比如修改变量的值等,应为主要支持的操作码是8个,理论上对应的每种功能码都会有不同的操作,但事实上,由于写操作命令已经不需要做任何操作了,所以对应的操作实际上只有读操作的4种功能码。
/*处理读从站状态量返回信息,读线圈状态位0x01功能码*/
static void HandleReadCoilStatusRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)
/*处理读从站状态量返回信息,读输入状态位0x02功能码*/
static void HandleReadInputStatusRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)
/*处理读从站寄存器值的返回信息,读保持寄存器0x03功能码)*/
static void HandleReadHoldingRegisterRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)
/*处理读从站寄存器值的返回信息,读输入寄存器0x04功能码*/
static void HandleReadInputRegisterRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)
同样的,我们也定义一个函数指针数组来实现这些函数的调用:
void (*HandleServerRespond[])(uint8_t *,uint16_t,uint16_t)={HandleReadCoilStatusRespond, HandleReadInputStatusRespond, HandleReadHoldingRegisterRespond, HandleReadInputRegisterRespond};
到这里,ASCII主站的封装就完成了,当然具体的数据处理部分需要在开发具体应用是才能确定。
源代码可上Github下载:https://github.com/foxclever/Modbus
欢迎关注:

Modbus库开发笔记:Modbus ASCII Master开发的更多相关文章
- Hololens开发笔记之使用Unity开发一个简单的应用
一.Hololens概述 Hololens有以下特性 1.空间映射借助微软特殊定制的全息处理单元(HPU),HoloLens 实现了对周边环境的快速扫描和空间匹配.这保证了 HoloLens能够准确地 ...
- (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二
一.Java环境和Android SDK 1.安装JDK和JRE JRE会在JDK安装完成后自动出现安装界面. 安装完成后,设置环境变量 JAVA_HOME D:\Program Files\ ...
- [转] WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
以下文章来自 http://www.blogjava.net/jacally/articles/186655.html 现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了 ...
- (SenchaTouch+PhoneGap)开发笔记(1)开发环境搭建一
1.下载senchaTouch 2.下载senchaCMD 3.安装ruby(for windows ) 4.senchaCmd创建项目: 打开senchacmd,cd到senchaTouch的目录如 ...
- Modbus库开发笔记之六:Modbus RTU Master开发
这一节我们来封装最后一种应用(Modbus RTU Master应用),RTU主站的开发与TCP客户端的开发是一致的.同样的我们也不是做具体的应用,而是实现RTU主站的基本功能.我们将RTU主站的功能 ...
- Modbus库开发笔记之十一:关于Modbus协议栈开发的说明
对于Modbus协议栈的整个开发内容,前面已经说得很清楚了,接下来我们说明一下与开发没有直接关系的内容. 首先,关于我为什么开发这个协议栈的问题.我们的初衷只是想能够在开发产品时不用每次都重写这一部分 ...
- Modbus库开发笔记之一:实现功能的基本设计(转)
源: Modbus库开发笔记之一:实现功能的基本设计
- Modbus库开发笔记之十一:关于Modbus协议栈开发的说明(转)
源: Modbus库开发笔记之十一:关于Modbus协议栈开发的说明
- Modbus库开发笔记之二:Modbus消息帧的生成
前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根 ...
随机推荐
- PHP文件管理—实现网盘以及压缩包的功能操作
代码如下: 1.主页面file_zip.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- [C++]2-6 排列
/* 排列(Permutation) 用1,2,3,...,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3. 按照"abc def ...
- 转:MVC,MVP 和 MVVM 的图示
MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 作者: 阮一峰 日期: 201 ...
- 反射中的一个问题点:利用Method执行main方法特殊的地方
利用Method执行main方法 问题: 启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个m ...
- java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?
java程序中默认浮点形值常量是什么类型的 默认的所有的浮点型数值都是double型
- 实现Comet(服务器推送)的两种方式:长轮询和http流
Comet 是一种高级的Ajax技术,实现了服务器向页面实时推送数据的技术,应用场景有体育比赛比分和股票报价等. 实现Comet有两种方式:长轮询与http流 长轮询是短轮询的翻版,短轮询的方式是:页 ...
- 【Math for ML】线性代数之——向量空间
I. Groups 在介绍向量空间之前有必要介绍一下什么Group,其定义如下: 注意定义中的\(\bigotimes\)不是乘法,而是一种运算符号的统一标识,可以是乘法也可以是加法等. 此外,如果\ ...
- Zookeeper学习笔记3
客户端的操作 zkCli.sh 官方文档 ls / [zookeeper] get / cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = ...
- launch 文件的写法
1. launch文件的写法 ❀标签 ☺<node> 启动一个节点 ☺ <param> 设置参数服务器的参数 ☺ < ...
- Redis主从哨兵和集群搭建
主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王 ...