3327|1

1310

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

【 ST NUCLEO-H743ZI测评】建立一个modbus/TCP的从站 [复制链接]

       MODBUS通讯协议因为具有公开、无版权要求,易于部署以及维护的特点,所以应用较为广泛。围绕着测评NUCLEO-H743这一主题,在以太网基础上实现modbus通讯协议,也就是modbus/TCP,建立一个从站。本帖是在已经能够在nucleo-h7上建立一个cyclonetcp的TCP server基础上开展的。
定义一个结构体型变量ModbusServerSettings modbusServerSettings;


通过modbusServerGetDefaultSettings(&modbusServerSettings);将变量设置为默认配置,

modbusServerSettings.interface = &netInterface[0];
modbusServerSettings.port = 502;
modbusServerSettings.lockCallback = modbusServerLockCallback;//null
modbusServerSettings.unlockCallback = modbusServerUnlockCallback;//null
modbusServerSettings.readCoilCallback = modbusServerReadCoilCallback;
modbusServerSettings.writeCoilCallback = modbusServerWriteCoilCallback;
modbusServerSettings.readRegCallback = modbusServerReadRegCallback;
modbusServerSettings.writeRegValueCallback = modbusServerWriteRegCallback;
以上内容分别是将网卡驱动,MODBUS从站(tcp server)端口,上锁/解锁操作(解决临界访问),读写coil与register函数
以上6个函数需要用户根据协议自己实现。通过modbusServerInit初始化modbus的TCP server然后modbusServerStart开启mosbus/tcp server,因为是基于freertos,modbusServerStart函数创建了一个modbusServerTask任务,这个任务会将以太网传输的数据进行解析,
modbusServerProcessConnectionEvents调用了modbusServerProcessRequest,处理来自于主站的命令。modbusServerProcessRequest将根据modbus的功能码进行读写线圈/寄存器操作,如下图所示。



以读线圈为例,modbusServerProcessReadCoilsReq将调用modbusServerReadCoil函数,代码如下图


从而,回到了给本文开头结构体变量赋值的那个用户需要实现的函数了。


这样,主要就可以读取地址为5,4,54的“线圈变量”的值了,对应的灯0,1,按键的状态,这里我想说的是,以上三个变量,我是通过三个I/O输入的电平高低来实现的。当我们需要采集数据,比如电压信号时,就需要用到modbus的“寄存器型变量”了。


本帖简单介绍了在NUCLEO-H7上实现了mosbus/TCP的从站,粗略地讲解了数据的流向,其中MBAP header与事件等与mosbus/TCP中密切相关的内容并没有被提及,只是想让使用者能够快速上手。涉及到的一些除应用层的源码,都在https://github.com/Oryx-Embedded/CycloneTCP/tree/master/modbus此处可以见到,希望此贴对您有帮助。






此内容由EEWORLD论坛网友54chenjq原创,如需转载或用于商业用途需征得作者同意并注明出处


此帖出自stm32/stm8论坛
点赞 关注
个人签名

RTEMS

 

回复
举报

1310

帖子

3

TA的资源

一粒金砂(高级)

沙发
 
因为太水,很少发帖,我将对帖子内容进行整理再公开。
此帖出自stm32/stm8论坛
 
个人签名

RTEMS

 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表