移植Modbus TCP二

上次推送,给大家移植了lwip协议栈,我们这次移植modbus TCP就是基于这个网络协议栈,lwip协议栈是开源的应用非常广泛的TCP协议栈。特别是在嵌入式上。不清楚的可以参考之前的文章。

一张表看懂uIP和lwIP的区别

uIP和LwIP背后的那个牛逼男人

1. 摘要

本篇笔记主要介绍,在freeRTOS下,如何移植Modbus TCP通讯,采用lwip TCP/IP协议栈。采用IAR 8.32开发环境

2. 准备工作

1), 熟悉freeModbus开源协议栈和例程

2), 熟悉Modbus 协议数据单元

3), 复习上一次关于lwip协议栈的移植

3. 动手移植

这次主要基于上此推送过的移植好的lwip工程,直接移植freeModbus源码包,完成Modbus TCP因为Modbus RTU已经讲过很多次了,这次主要讲Modbus TCP。

首先准备好freeModbus 源码包,添加到工程里,上次我们是以ST的板子为例,这次手边没有ST的板子,只有NXP的 FRDM-K64F板子,我们就以这个板子为例,过程都一样,不管是谁家的板子。

添加modbus和port分组,将源码包含进来,同时别忘记设置路径

使能 TCP

移植修改最多的就是port下的文件,如果对freemodbus不是很熟悉的话,可以看看源码包里面的例程和对应的移植。这里直接拷贝源码包里面TCP对应移植下的port文件夹直接复制到工程,然后修改。

因为我们是基于freeRTOS系统,系统不同这个函数内容不同,但作用都一样

继续修改port文件夹下的文件,直至编译无错误,开始创建Modbus TCP任务,使用freeRTOS的任务创建函数动态创建一个任务,注释掉我们之前验证TCP协议栈的任务 tcpecho,

完成Mobdus TCP任务函数,主要初始化,使能,打开端口,打开端口,这里填写0或者502都可以,填写0,内部同样会转换为502使用,因为标准规定502端口留给Modbus TCP使用

完成应用层的函数,就是实现读写保持寄存器,输入寄存器,线圈等函数,这里不一一列举了。

编译无误后,下载到开发板,可以开启DHCP,也可以直连,我这里采用电脑直接连接,板子的IP是192.168.1.102,将电脑和板子设置到同一个网段192.168.1.108,使用modbus tcp测试软件测试

链接上会在黑框提示,并显示,我们来测试一下读取保持寄存器

也可以给一些模拟值测试,这里不在赘述,也可以用modscan测试一下

证明移植成功,随后就可以根据自己的应用添加更多实际应用,如读取ADC,控制继电器,控制电机等等。

posted @ 2021-04-22 08:59  温柔的熊  阅读(724)  评论(0编辑  收藏  举报