通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

VIP通讯接口应用笔记3:使用W5500实现Modbus TCP服务器
  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。1、应用需求  在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。  为了实现基于W5500的Modbus TCP服务器,我们必先须基于W550
开通可读全文 ·5.4k 人阅读
最低0.47元/天 解锁文章

  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。

1、应用需求

  在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。

  为了实现基于W5500的Modbus TCP服务器,我们必先须基于W5500实现一个TCP服务器。W5500本身是带硬件协议栈的,但却并不带TCP服务器。不过在我们前面的关于外设驱动库的系列文章中已经封装了W5500的驱动,其中就带有一个TCP服务器,我们可以直接采用就可以了。

  其次我们要在TCP服务器的基础上实现Modbus TCP协议。关于Modbus协议栈,我们以前的文章就讲述过Modbus通讯协议栈的开发问题。而且我们已经将我们开发的Modbus通讯协议栈开源。其中已经封装了Modbus TCP服务器对象,所以我们直接采用这一Modbus通讯协议栈就可以了。

  有了驱动和协议栈,我们还需要考虑应用层面的具体问题,而且也只需要考虑应用层面的具体问题。这里就看出我们前面封装外设驱动和Modbus通讯协议栈的价值所在了。关于应用层面的问题我们主要需要重点考虑几个问题:

  第一,数据的存储类型及地址范围。我们知道Modbus协议常见的数据类型有4种。我们需要考虑在系统中需要使用到的类型及地址,这将决定Modbus协议数据处理回调函数的实现。

  第二,网络配置问题,我们需要通过网络访问这台下位机就需要要为其配置网络。这存在静态配置,动态配置和系统自动分配的问题。作为服务器,我们一般不会希望让系统自动分配。所以我们需要考虑的是如何方便使用者为其分配地址的问题。

  第三,并发访问的问题。挂载在网络上的服务器肯定面临多个客户端来访问的问题。W5500可以实现8个Socket,而Modbus TCP通用的默认端口号是502,当然也可以使用其它端口,只要不冲突就好。所以我们可以考虑使用不同的Socket和不同的端口号来实现并发访问。

2、功能设计

  我们分析了基于W5500实现Modbus TCP服务器的需求。我们现在从硬件和软件两个方面来分析器功能的实现。

2.1、硬件功能设计

  我们知道W5500带有硬件协议栈,集成有以太网控制器和物理层,所以对外我们只需要实现以太网变压器和硬件接口就好了。但与控制器部分的连接则采用SPI接口,除此之外还需要提供中断输入和模式设定的相关接口。在这里我们设计器硬件连接如下:

  在上图中,我们将中断输入引入到MCU的GPIO端口,而模式设定PMODE0、PMODE1、PMODE2均通过电阻上拉到电源。对于W5500来说PMODE0、PMODE1、PMODE2均为高电平表示开启全部功能,所以我们直接拉高而不是引入到MCU引脚来控制。

2.2、软件功能设计

  从需求来说,软件的功能非常简单,就是实现一个Modbus TCP服务器。但实际上,如我们前面所描述的那样,软件需要考虑的问题还是比较多的。从功能实现上主要有3个方面需要考虑:

  第一,实现TCP服务器,这个服务器用于在系统中轮询处理,从W5500获取数据和发送数据给W5500都需要通过这部分来实现。

  第二,TCP服务器得到数据后,我们需要解析数据,并根据解析的上位数据决定进一步的动作,还需要生成返回信息。这部分对应功能就是Modbus TCP服务器的实现。

  第三,根据Modbus TCP服务器解析出的Modbus消息,需要决定下一步的动作,这个具体动作根据功能码的不同可能有不同需求,所以我们需要根据具体的要求实现不同功能码的动作。

  根据上述的设计,我们可以简单的将需要实现的软件功能图示如下:

  上图中,因为W5500的TCP服务器以及Modbus TCP协议栈的相关函数我们都做了封装,所以它们之间的调用都将以回调函数的方式实现。除了上述的软件实现外,还需要注意必要的初始化配置。

3、应用实现

  根据我们前面的设计,接下来我们考虑一下这一需求的具体实现过程。我们将这一过程分为4个部分来分别描述。

3.1、系统的初始化

  在实现具体的功能之前,我们需要对硬件以及软件环境做必要的初始化配置。具体到这里就是对W5500作必要的软硬件配置,包括接口、网络以及回调函数等。具体实例代码如下:

/* 以太网通讯配置 */
void McEthernetConfiguration(void)
{
   
   
  uint8_t mac[6]={
   
   0x01, 0x08, 0xdc,0x00, 0xab, 0xcd}; //本地Mac地址
  uint8_t ip[4]={
   
   192, 168, 1, 190};          //本地IP地址
  uint8_t sn[4]={
   
   255,255,255,0};           //子网掩码
  uint8_t gw[4]={
   
   192, 168, 1, 1};           //网关地址
  uint8_t dns[4]={
   
   0,0,0,0};              //DNS服务器地址
  
  /* 以太网使用GPIO初始化 */
  GPIO_Init_Configuration();
  
  /* SPI1端口初始化 */
  SPI1_Init_Configuration();
  
  /*W5500对象初始化函数*/
  W5500Initialization
VIP 基于STM32F407+W5500的freemodbus tcp移植与实现 开通可读全文·8.7k 阅读·8 点赞·75 收藏 阅读全文

相关推荐

W5500+STM32F103C8T6进行TCP通信(modbus)

一路生花一、w5500资料二、modbus通信三、从机代码四、总结五、参考 一、w5500资料 w5500的资料就放在下面了,单纯的客户端和其他模式上面有教程 https://www.aliyundrive.com/s/enPnnZgNtpE 二、modbus通信 Modbus RTU通信时使用的数据帧结构如下图,而Moubus TCP通信的数据帧和这个稍微不一样,没有crc检验,因为tcp本就是一种可靠传输协议 这里是Modbus TCP数据帧 公共功能码定义 三、从机代码

junseven164的博客 5768

STM32+modbus+W5500网络通信

文章目录一、modbus二、W5500三、代码实现四、实现五、参考 一、modbus Modbus RTU通信时使用的数据帧结构如下图,而Moubus TCP通信的数据帧和这个稍微不一样,没有crc检验,因为tcp本就是一种可靠传输协议 功能码 作用 01 读取线圈状态 02 读取输入状态 03 读取保持寄存器 04 读取输入寄存器 05 强置单线圈 06 预置单寄存器 07 读取异常状态 08 回送诊断校验 09 编程(只用于484) 0A 控询

伊木子曦的博客 2149

[STM32F103C8T6]W5500+Modbus TCP(HAL库)

本章节是博主学习Modbus TCP所写的一篇文章Modbus TCP是Modbus的一个分支,主要用到网口通信的,在工业上也用的很频繁,我们公司最近的项目就是用的W5500+modbus TCP来和PC端的上位机通信和交互的。虽然这个项目不是我在写代码,但是我都学了Modbus RTU了,那我也抽空学习一下Modbus TCP吧。本次的Modbus TCP不是博主写的,是一个大佬开源的一个W5500写的一个Mobus TCP代码,我在这个基础上自己写了主机读从机多个数据,和主机写从机寄存器的函数。

sinat_58149788的博客 4081

W5500.Modbus_TCP参考例程.zip

W5500.Modbus_TCP参考例程

STM32+W5500 Modbus-TCP协议功能实现

。。。。。。。STM32+W5500 Modbus-TCP协议功能实现

w5500模块客户端服务器源代码

w5500模块TCP服务器客户端源代码 内涵51和stm32程序及w5500中文手册

w5500TCP server解决有时连接断开问题

w5500TCP server解决有时连接断开问题,可以保持客户端和服务器端一直通信

STM32驱动w5500移植FreeModbus实现ModbusTCP

首先我们下载FreeModbus源码,然后放到自己的工程中,新建一个MODBUS_TCP和PORT_TCP文件夹,然后将相关文件复制到里面,如下图所示: 然后修改porttcp中的代码: 首先定义一个数组用于接收数据: static UCHAR aucTCPBuf[MB_TCP_BUF_SIZE]; //接收缓冲区 然后在xMBTCPPortInit中初始化socket连接,然后监听端口。 BOOL xMBTCPPortInit( USHORT usTCPPort ) { BOOL bOkay = FALSE; // 侦听端口 Modbus-TCP 端口 soc

硬件测试入门--环路响应(Bode)测试

环路分析的一个重要作用就是分析开关电源的稳定性。扫频测试原理主要是给开关电源电路注入一个频率变化的正弦信号,测量开关电源在频域上的特性,通过分析穿越频率、增益裕度和相位裕度来判断环路是否稳定,可以为电子工程师设计稳定的控制电路提供直观的数据。开关电源的稳定性关系到整个应用系统的可靠性,利用伯德图可以看出在不同频率下系统增益的大小和相位。通过伯德图来对开关电源的环路稳定性进行判断和分析已经成为评估开关电源可靠性必不可少的方法。

songninging的博客 1万+

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6206

计算机视觉(相机标定;内参;外参;畸变系数)

目录 一、预备知识 1、坐标系变换过程(相机成像过程) (1)相机坐标系转换为图像坐标系(透视投影变换遵循的是针孔成像原理) (2)齐次坐标的引入原因:(为什么引入齐次坐标???) 2、内参与外参矩阵的构成 3、畸变参数 二、相机标定 1、张正友标定法(光学标定)及其求解思路 2、求解内参矩阵与外参矩阵的思路: (1)计算内参与外参矩阵的乘积M (2)求解内参矩阵A (3)求解外参矩阵(R1 R2 T) 三、参数优化 1、L-M算法 2、相机标定步骤 四、相关代码及其实验结.

QYJ_WORKHARDING的博客 6万+

计算机模拟爆破过程,基于LSDYNA岩石爆破模拟建模分析

原标题:基于LSDYNA岩石爆破模拟建模分析 Ls Dyna岩石爆破模拟仿真作者:dyna_focus擅长领域:dyna/abaqus/hypermesh一、 数值模型的建立1.1 单元及算法的选择岩石,炸药,空气都采用solid164实体单元。岩石采用常应力实体单元,该种单元属于纯粹的lagrange算法,该种算法单元网格附着在材料上,随着材料的流动而产生单元网格的变形,但是在结构变形巨大时,有...

weixin_29494379的博客 7292

2024 年 9 月青少年软编等考 C 语言三级真题解析

2024 年 9 月青少年软编等考 C 语言三级真题解析。

发布少儿编程考级的真题和优秀竞赛题解析,以及一些讲义。 1731

【Java 实战】通过Redis实现购物车功能

以上就是今天要讲的内容,本文仅仅简单介绍了如何通过Redis实现购物车功能,以上方法亲测有效,希望能给大家一个参考。

~~~~~~~BUG FLY~~~~~~~~~ 9966

Unreal使用nDisplay制作裸眼3D(9宫格)

摘要: nDisplay是虚幻引擎的分布式实时渲染技术,可将内容同步输出到多个显示设备(如LED墙、投影仪等),构建沉浸式可视化系统。其核心功能包括:分布式渲染(支持多台设备协同处理高分辨率内容)、空间透视校正(通过追踪观众动态调整画面几何关系)以及虚拟拍摄应用。配置时需设置集群组件(Cluster、Host、Node、Viewport)定义渲染逻辑,空间组件(nDisplayScreen、ViewPoint)确定投影关系。文中以9宫格配置为例,详细演示了从工程创建到影片渲染合成的全流程,最终通过多视口合成

TxNet 599

YOLOv11改进策略【SPPF】| 将特征金字塔池化修改为:SPPCSPC,提升模型的特征提取能力和计算效率。

本文记录的是。YOLOv7中的SPPCSPC(Spatial Pyramid Pooling Cross Stage Partial Connections)模块是一种结合了(SPP)和(CSP)的改进结构,本文将其添加到YOLOv11中,

Limiiiing的博客 1814

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 文件系统应用笔记之一:FatFS在STM32F4上的移植
下一篇: 电机速度曲线规划2:S形速度曲线设计与实现

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
foxclever
博客等级 码龄19年 2933粉丝 182原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值