嵌入式开源库之libmodbus学习笔记
socat
- 安装
sudo apt-get install socat - 创建终端
socat -d -d pty,b115200 pty,b115200 - 查看终端
ls /dev/pts/
minicom
- 安装
sudo apt-get install minicom - 链接虚拟终端
sudo minicom -D /dev/pts/3 - 以十六进制显示
minicom -D /dev/pts/1 -H - 设置波特率
minicom -D /dev/pts/1 -b B115200 - 设置回显
Ctrl+A->Z->E - 设置自动换行
Ctrl+A->W - 清屏
Ctrl+A->C - 退出
Ctrl+A->X
交叉编译
- 生成配置文件
./autogen.sh - 配置
./configure --host=arm-linux-gnueabihf --prefix=$(pwd)/__install - 编译
make(如果遇到C++版本问题请升级交叉编译器) - 安装
make install - 查看生成的库文件类型
file libmodbus.so.5.1.0
libmodbus.so.5.1.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=d30e9af8a0ccc675f8549abbfa88e8df5574b196, with debug_info, not stripped - 将库文件放到开发板的库文件目录下
cd /usr/lib
mv /root/libmodbus.so.5.1.0 ./ - 创建软连接
ln -s libmodbus.so.5.1.0 libmodbus.so.5
./libmodbus.exe: /lib/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found (required by ./libmodbus.exe)
Ubuntu编译
/usr/bin/ld: 找不到 -lmodbus collect2: error: ld returned 1 exit status
./a.out: error while loading shared libraries: libmodbus.so.5: cannot open shared object file: No such file or directory
将库文件的路径添加到 /etc/ld.so.conf 文件中,并运行 sudo ldconfig 命令来更新库缓存。例如,如果库文件位于 /home/lux/OpenSource/libmodbus/__install/lib 目录中,您可以将以下行添加到 /etc/ld.so.conf 文件的末尾:
/home/lux/OpenSource/libmodbus/__install/lib
保存文件后,运行 sudo ldconfig 命令。
测试
tcp_client
#include "modbus_tcp.hpp"
#include <unistd.h>int main(int argc, char *argv[])
{uint8_t read_buffer[1024];uint8_t write_buffer[1024];uint16_t read_buffer_16[3];uint16_t write_buffer_16[1024];uint8_t ret = 0;modbus::modbus_tcp modbus("192.168.2.200",60000); //创建一个modbus_tcp对象for (int i = 0; i < 10; i++){ret = modbus.read_coil_status(0x0000, 5, read_buffer);//00 01 00 00 00 06 01 01 67 89 00 05 if (ret > 0){printf("read_coil_status:%d\r\n",ret);for (int j = 0; j < ret; j++){printf("%02x ",read_buffer[j]);}printf("\r\n");}usleep(1000*100);ret = modbus.read_input_status(0x0000, 5, read_buffer);//00 01 00 00 00 06 01 01 67 89 00 05 if (ret > 0){printf("read_input_status:%d\r\n",ret);for (int j = 0; j < ret; j++){printf("%02x ",read_buffer[j]);}printf("\r\n");}usleep(1000*100);ret = modbus.read_holding_register(0x0000, 5, read_buffer_16);//00 01 00 00 00 06 01 01 67 89 00 05if (ret > 0){printf("read_holding_register:%d\r\n",ret); for (int j = 0; j < ret; j++){printf("%02x ",read_buffer_16[j]);}printf("\r\n");}usleep(1000*100);ret = modbus.read_input_register(0x0000, 5, read_buffer_16);//00 01 00 00 00 06 01 04 67 89 00 05 if (ret > 0){printf("read_input_register:%d\r\n",ret);for (int j = 0; j < ret; j++){printf("%02x ",read_buffer_16[j]);}printf("\r\n");}usleep(1000*100);// printf("write_single_coil:%d\r\n",modbus.write_single_coil(0x0000, 0x1234));// usleep(1000*100);// printf("write_single_register:%d\r\n",modbus.write_single_register(0x0000, 0x1234));//0x06:写单个保持寄存器: 00 01 00 00 00 06 01 06 67 89 12 34// usleep(1000*100);// printf("write_multiple_coil:%d\r\n",modbus.write_multiple_coil(0x0000, 5, write_buffer));//0x0F(15):写多个线圈: 00 01 00 00 00 08 01 0F 67 89 00 05 01 1F// usleep(1000*100);// printf("write_multiple_registers:%d\r\n",modbus.write_multiple_registers(0x0000, 5, write_buffer_16));//0x10(16):写多个保持寄存器: 00 01 00 00 00 11 01 10 67 89 00 05 0A 00 00 00 00 00 00 00 00 00 05 // usleep(1000*100);}usleep(1000*500);
}
modbus_slave

相关文章:
嵌入式开源库之libmodbus学习笔记
socat 安装sudo apt-get install socat创建终端 socat -d -d pty,b115200 pty,b115200查看终端 ls /dev/pts/ minicom 安装 sudo apt-get install minicom链接虚拟终端 sudo minicom -D /dev/pts/3以十六进制显示 minicom -D /dev/pts/1 -H设置波特率 minicom -D /dev/pts/1…...
Spring MVC 中的数据验证技术
一、前言 在Web开发中,数据验证是不可或缺的一部分。Spring MVC 框架提供了强大的数据验证支持,可以帮助我们轻松地对用户提交的数据进行验证。 二、实现 Spring MVC 使用 JSR-303 验证规范(Hibernate Validator 是其参考实现)…...
windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error
问题描述 今天在学习nginx时,想在hosts配置一个nginx的域名映射,但是发现访问nginx服务的ip时可以访问通,在dos命令窗口ping配置的域名映射也可以ping通,但是一旦在浏览器通过http请求访问配置的hosts域名映射时却出现 500 Inter…...
如何将图片转为ico格式
这里主要是记录一个网站,如果你有更好的办法欢迎留言~ ico简介 ICO(Icon)是一种用于表示图标的文件格式,常用于Windows操作系统中。ICO格式的图片通常用于表示应用程序、文件夹、网站等的图标。 ICO文件可以包含多个图标&#x…...
ElasticSearch - 基于 JavaRestClient 操作索引库和文档
目录 一、RestClient操作索引库 1.1、RestClient是什么? 1.2、JavaRestClient 实现创建、删除索引库 1.2.1、前言 1.2.1、初始化 JavaRestClient 1.2.2、创建索引库 1.2.3、判断索引库是否存在 1.2.4、删除索引库 1.3、JavaRestClient 实现文档的 CRUD 1.3…...
【人脸质量评估】MagFace:一个既可以用作人脸识别,又可以用作人脸质量评估的方法
论文题目:《MagFace: A Universal Representation for Face Recognition and Quality Assessment》-CVPR2021 论文地址:https://arxiv.org/abs/2103.06627v4 代码地址:https://github.com/IrvingMeng/MagFace...
FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持
目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…...
智能驾驶、智能家居、智能工业中的 AI 关键基础设施,半导体厂商恩智浦的角色是什么?
我们来看一条七年前的真实新闻报道,2016 年《福布斯》在报道中提到“2020 年会有 1000 万台的自动驾驶汽车”。然而 2023 年的现在,真正实现 L4 级别自动驾驶的汽车,仍然远远没有达到这个预测的数量。 另一边,数据显示,…...
APScheduler包——python tornado框架中实现定时任务
介绍: APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。同时…...
BASH shell脚本篇3——字符串处理
这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能…...
【SSL】用Certbot生成免费HTTPS证书
1. 实验背景 服务器:CentOS7.x 示例域名: www.example.com 域名对应的web站点目录: /usr/local/openresty/nginx/html 2. 安装docker # yum -y install yum-utils# yum-config-manager --add-repo https://download.docker.com/linux/ce…...
报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist
Linux大小写区分,导致部署项目时MySQL出现错误 问题原因:找不到Teacher这张表。因为在windows下的mysql表名不区分大小写,所以在windows下运行项目没问题。在linux中,mysql会区分大小写,所以sql语句表名用大写的就会找…...
.NET的PLC帮助类
TCP和UDP协议: TCP(传输控制协议)和UDP(用户数据报协议)是TCP/IP协议簇中的两种核心协议。它们在传输层上提供数据传输服务,但具有不同的特性和功能。 TCP协议是一种提供可靠、面向连接的字节流服务的传输协…...
Linux中nfs:failed: Operation not supported
先给出思路: 一个简单粗暴的方式:卸载重装排除未知问题,步骤如下: 一、在 Linux 上卸载 NFS 服务器,步骤: 停止 NFS 服务: sudo service nfs-kernel-server stop如果您使用的是不同的发行版&am…...
ElasticSearch映射与模板介绍
一、前言 前面有相关系列文章介绍了ES的基本概念和各种版本SDK的使用,ES现在已升级到8.5版本,有些概念和SDK用法都有很大变化,后续ES相关的文章会以8.3版本为基准介绍一些实际中应用需要掌握的概念以及一些比较实际的例子。 二、映射 ES环…...
通过 Azure 日志分析加强云安全
Microsoft Azure 云服务在安全日志存储、访问、可伸缩性、降低成本和易于部署方面提供了巨大的优势,因此在企业中很受欢迎。 Microsoft Azure 日志记录工具(如 Log360)可帮助管理 Azure 云基础结构中所有设备和应用程序(如虚拟机…...
[H5动画制作系列 ]变量,帧频,监听器等的生命周期基础测试
模式:按照上述抓图,actions层,1帧,写初始化代码,10帧写返回代码到2帧代码,2-10帧之间一直循环。1帧及10帧代码如下: 如果程序在1-10之间循环,会反复创建变量i,多个监听器等。所以,第一帧最好执行一次即可,程序在2-10帧之间一直循环。...
基于SpringBoot的服装生产管理系统的设计与实现
目录 前言 一、技术栈 二、系统功能介绍 登录界面的实现 系统主界面的实现 用户管理模块的实现 人事安排管理模块的实现 工资管理模块的实现 考勤管理模块的实现 样板管理模块的实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本协力服装厂服装生…...
动态内存操作(2)
接上一篇文章http://t.csdn.cn/1ONDq,这次我们继续讲解关于动态内存的相关知识。 一、常见的动态内存错误 1.对NULL指针进行解引用操作 #include<stdio.h> #include<stdlib.h> #include<limits.h> int main() {int* p (int*)malloc(INT_MAX/4);…...
Windows-Delphi 窗口置顶
露从今夜白,月是故乡明。 1.Delphi将窗口置顶 if topHwnd <> 0 thenbeginSetWindowPos(topHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);tmr1.Enabled : True;end; 其中topHwnd是目标窗口的句柄。 2.窗口取消置顶 if topHwnd <> 0 th…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
