今日记录一些smallmodbus 创建新的slave 从机 的过程,以及使用的关键点.

目录

创建新的从机对应操作函数与buffer

创建新的从机线程与操作代码:

slave使用的要点:

完整的slave代码:

能正常通信:


创建新的从机对应操作函数与buffer

最主要的部分就是从 board_virtual.c 文件抽象新建出新的从机对应的操作函数:

可以看到,他原本就包含一系列线圈buffer以及对这些buffer的操作函数:

后续操作就是直接复制他们函数的本体,然后直接更改其调用的buffer 以及 宏定义最大下标的名称,就行了。

最终 为了额外定义出一个slave 底层操作的函数与数组宏:

而复制改写的函数与数组 、宏 效果如下:(写在 board_virtual.h 文件)

例举其对应函数,对照修改对比如下:

其余函数 与 数组 、 宏 基本都是如此修改 就行了:

新增这些操作函数后,给新定义的从机实例进行调用就行了,一般是在从机回调函数:

创建新的从机线程与操作代码:

slave使用的要点:

1. 从机的线程要与给它填充buffer的线程分开

2. 定义modbus的地址在从机回调函数中 同时 注意数组下标的计算

3.write写线圈函数是给主机master用的,从机更新线圈与寄存器是update

4.修改地址范围同步修改board_virtual.c文件中定义的数组最大下标宏

5.modbus_slave_wait_handle();函数最后一个传参,不能调用MODBUS_WAITFO_REVER词根,否则从机只会回复一次! 要使用MODBUS_WAITFO_NO

6.

完整的slave代码:

这段需要注意以下,我这个G4_485_EN();函数用于485使能脚,但这里我用的TTL通信,所以注释了对使能脚的操作!

对线程的创建是有俩个线程,一个是slave线程,一个是flush更新寄存器的线程

最后别忘了在主函数main.c初始化线程:

能正常通信:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917872.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917872.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917872.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】Transformer Feed-Forward Layers Are Key-Value Memories

Transformer Feed-Forward Layers Are Key-Value Memories 原文摘要 研究背景与问题: 前馈层占Transformer模型参数总量的2/3,但其功能机制尚未得到充分研究 核心发现:提出前馈层实质上是键值存储系统 键:这里的键与训练数据中出…

昇思+昇腾开发板:DeepSeek-R1-Distill-Qwen-1.5B 模型推理部署与 JIT 优化实践

目录 引言 模型推理部署 环境准备 安装 MindSpore 查看当前 mindspore 版本 安装 MindNLP 模型与分词器加载 导入必要的库 加载分词器 加载模型 对话功能实现 设置系统提示词 构建对话历史输入 推理函数实现 交互界面实现 推理JIT优化 基础环境安装 JIT 优化配置…

用phpstudy安装php8.2后报错:意思是找不到php_redis.dll拓展时

1.地址:https://pecl.php.net/package/redis/6.2.0/windows 2.下载3.解压后复制php_redis.dll到phpstudy_pro\Extensions\php\php8.2.9nts\ext目录 4.打开php.ini,加上 extension_dir “D:\software\phpstudy_pro\Extensions\php\php8.2.9nts\ext”

开源列式分布式数据库clickhouse

这里写自定义目录标题开源列式OLAP数据库clickhouseclickhouse使用 ClickHouse 的场景如何理解行式存储和列式存储clickhouse-go开源列式OLAP数据库clickhouse OLAP (分析型):专为快速扫描、聚合、分析海量数据设计。OLTP (事务型):专为处理大量短事务&…

Java Stream API 详解(Java 8+)

1. Stream 操作分类Stream 操作分为两类:中间操作(Intermediate Operations)返回新的 Stream,可以链式调用(如 filter, map, sorted, distinct)。惰性求值:只有遇到终止操作时才会执行。终止操作…

「源力觉醒 创作者计划」_文心大模型4.5系列开源模型, 从一行代码到一个生态:聊聊开源战略那些事儿,顺便扯扯文心大模型 4.5 的使用心得

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录从一行…

算法专题(二)回文链表

1、源代码class Solution {public boolean isPalindrome(ListNode head) {ListNode fasthead,slowhead; //快慢指针都在头结点//快指针走2步,慢指针走一步。//双数快指针最后是null,单数快指针下一位是nullwhile(fast!null && fast.next!null){f…

2025《艾诺提亚失落之歌》逆向工程解包尝试

前言 想开发一下光明之魂,看能不能解包《艾诺提亚失落之歌》的模型。 之前写了(https://blog.csdn.net/weixin_42875245/article/details/148616547?spm1001.2014.3001.5501) 沿用这个思路进行逆向工程解包。 文章目录请添加图片描述前言…

JVM 03 类加载机制

JVM 将字节码二进制流加载到内存称为类加载。 什么时候加载类 new 实例化对象。而对象所属类还没被加载。读取/设置类的静态非常量字段,常量字段在常量池。调用类的静态方法。类初始化,优先初始化父类。虚拟机启动时,先加载用户指定的主类。 …

STM32H7+FreeRTOS+LwIP移植EtherCAT开源主站SOEM

代码下载什么的就不多说了,直接看需要移植修改的代码。 1、osal.c修改 /******************************************************************************* * *** **** *** *** …

VijosOJ:中文信息学竞赛的二十年开源之路

VijosOJ:中文信息学竞赛领域的老牌开源在线判题系统 在中文编程教育与信息学竞赛的发展历程中,在线判题系统(OJ)扮演了至关重要的角色。它们不仅是选手训练的 “战场”,更是知识传递与社区交流的枢纽。VijosOJ&#x…

QPainter::CompositionMode解析

基本概念目标(Destination):已经存在的像素。源(Source):要绘制的新像素。组合模式:决定源和目标如何混合。总结SourceOver:源绘制在目标之上。DestinationOver:目标绘制在源之上。Clear:二者重叠区域被清空…

对接钉钉审批过程记录(C#版本)

钉钉开放平台:API总览 - 钉钉开放平台 按照开放平台操作指引,进入到钉钉开发者后台:开发者后台统一登录 - 钉钉统一身份认证,进行应用创建。 按照开放平台指引下载钉钉SDK(新版)。 在vs引入钉钉dll文件。 获…

AFSIM入门教程03.03:更新所有依赖库版本

系列索引:AFSIM入门教程索引 上一篇中更新了tiff库版本,本文将更新所有使用到的依赖库版本。 失败了 依赖库 首先获取哪些库被使用了。打开源码目录,搜索# Configure the 3rd_party,可以看到调用第三方库的代码。 官方提供的…

完美解决hive external表中csv字段内容含“,“逗号的问题

为解决hive表中csv字段内容含","逗号的问题,网上几乎都是说要用org.apache.hadoop.hive.serde2.OpenCSVSerde。 使用方法为: 1、mysql导出时,加一个ENCLOSED BY ‘"’, 示例: mysql -h 10.16.0.10 -P …

【Git】修改本地和远程的分支名称

其原理是: 对于本地:可直接修改分支名称;对于远程:不可直接重命名分支,所以应该将修改好名称的分支以新分支的形式推送上远程仓库,之后将新分支与远程新分支关联,之后可选择删除旧分支# 例子&am…

ubuntu24.04安装selenium、chrome、chromedriver

实验环境:kaggle notebook、colab notebook1、安装chrome!wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb!sudo dpkg -i google-chrome-stable_current_amd64.deb!sudo apt-get install -f!export QT_QPA_PLATFORMoffscreen!sudo…

西门子PLC基础指令6:读取时钟指令、设置时钟指令、使能含义与注意

读/写指令 1. 读取时钟 指令 READ_RTCREAD_RTC (RTC 全称是 Real - Time Clock,即实时时钟 )指令的主要作用是将 CPU 内部实时时钟(RTC)的当前日期和时间信息读取出来,并存储到以指定字节地址(图…

GeoTools 结合 OpenLayers 实现缓冲区分析

前言❝ 缓冲区分析是地理信息系统(GIS)空间分析的核心功能之一。它通过围绕点、线或面等地理实体,自动生成指定距离(或宽度)的等距区域(缓冲区)。该功能为量化空间邻近度、评估影响范围、识别潜…

SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现

SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现 前言 上一篇文章 我写的关于SpringBoot整合t-io是websocket实时通信的文章中我们可以了解到 websocket是双向通信的,而且需要TCP连接的支持,今天在这里我要说的SSE(Server-Sent Events) 是一个单项通信的消息实时推…