这一次我们封装Modbus TCP Client应用。同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能。我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用。

对于TCP客户端我们主要实现的功能有两个:其一是生成访问TCP服务器的命令,总共支持8中功能码。其二是对TCP服务器端返回的信息进行解析并根据结果进行各种操作,同样也是支持8中功能吗的操作。具体软件访问结构如下:

1、访问命令的生成

客户端作为主动交互端,需要向服务器发各种操作请求命令。所以对于TCP客户端来说,首先要生成访问服务器的命令。生成命令只需要按标准的协议格式来生成即可,目前我们只支持前面提到的8个功能码。

/*生成访问服务器的命令*/

uint16_t CreateAccessServerCommand(ObjAccessInfo objInfo,void *dataList,uint8_t *commandBytes)

这样在开发具体的客户端应用时只需要调用这个函数来生成访问服务器的命令就可以了。

2、响应信息的解析

如前一节所述,服务器收到命令后,根据命令进行处理并生成响应信息返回给客户端。客户端接到命令后首先要对响应信息进行解析,解析的过程其实与服务器端是一致的。所不同的是,不需要再根据解析结果生成响应信息了。

/*解析收到的服务器相应信息*/

void ParsingServerRespondMessage(uint8_t *recievedMessage)

这样在开发客户端应用时,我们调用这一函数来解析响应信息就可以了。

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};

如此,TCP客户端的封装就完成了,当然具体的数据处理部分需要在开发具体应用是才能确定。

最新文章

  1. Make 命令教程
  2. 【blade04】用面向对象的方法写javascript坦克大战
  3. MySQL操作类(本人自己写的)
  4. OC中的指针
  5. 初探Docker
  6. 即时通讯(IM-instant messager)
  7. App上架审核指南翻译
  8. it小小鸟心得
  9. android 中 ColorDrawable dw = new ColorDrawable(0x3ccccccc),关于颜色定义的总结
  10. Delphi实现WebService带身份认证的数据传输
  11. muduo网络图书馆评测
  12. 《深入理解Java虚拟机》——Java内存区域与内存溢出异常
  13. 【转】Java方向如何准备技术面试答案(汇总版)
  14. 1079. Total Sales of Supply Chain (25) -记录层的BFS改进
  15. MATLAB-卡尔曼滤波简单运用示例
  16. ASP.NET Core 从 gitlab-ci 环境变量读取配置
  17. 在 Ali Kubernetes 系统中,我们这样实践混沌工程
  18. TensorFlow入门教程集合
  19. python可视化基础
  20. 本地RUN Page时报无法显示该网页

热门文章

  1. vim 配置一:
  2. 【游记】THUWC2018踹线记
  3. solr集群SolrCloud(solr+zookeeper)windows搭建
  4. /*+ hint*/用法,该如何解决
  5. localStorage用法
  6. 美团面试-canvas实现放射图
  7. Django学习手册 - pycharm 安装/建立第一个网站hello world
  8. QR二维码原理(一)
  9. CF1099F Cookies
  10. Python3-高阶函数、闭包