网站建设理论网站开发 思维导图

pingmian/2025/10/8 17:45:39/文章来源:
网站建设理论,网站开发 思维导图,那个网站可以做攻略,flash网站策划书Modbus RTU 与 Modbus TCP 的区别 一般在工业场景中#xff0c;使用 Modbus RTU 的场景更多一些#xff0c;Modbus RTU 基于串行协议进行收发数据#xff0c;包括 RS232/485 等工业总线协议。采用主从问答式#xff08;master / slave#xff09;通信。 与 Modbus TCP 不…Modbus RTU 与 Modbus TCP 的区别 一般在工业场景中使用 Modbus RTU 的场景更多一些Modbus RTU 基于串行协议进行收发数据包括 RS232/485 等工业总线协议。采用主从问答式master / slave通信。 与 Modbus TCP 不同的是RTU 没有报文头 MBAP 字段但是在尾部增加了两个 CRC 检验字节CRC16因为网络协议中自带校验所以在 TCP 协议中不需要使用 CRC 校验码。 RTU 和 TCP 的总体使用方法基本一致只是在创建 Modbus 对象时有所不同。TCP 需要传入网络socket 信息而 RTU 需要传入串口相关信息。 特点 通信 采用主从问答式master / slave通信由主机发起一问一答。 设置串口参数 波特率9600 数据位8 停止位1 无流控 协议格式地址码 功能码 数据 校验码 Modbus RTU 数据帧包含地址码、功能码、数据、校验码。 地址码 从机 ID 功能码 同 Modbus TCP 数据: 起始地址、数量、数据 CRC 校验码 两个字节对 地址码、功能码、数据 进行校验可以通过函数自动生成 报文详解 链接至另一博主放心跳转 以 03 功能码为例 主机 —— 从机 从机 —— 主机 模拟器的安装、配置、使用 实际硬件产品成本较高可以使用一系列 Modbus 软件模拟器进行数据模拟从而分析 Modbus RTU 协议。 所用工具 Modbus Slave、vspd 虚拟串口、UartAssist 串口调试工具、虚拟机 安装与配置 一vspd 虚拟串口的安装 1将压缩包解压后双击 vspd.exe 文件进行安装 2打开软件添加 COM1 和 COM2 端口用完之后记得删除端口 3打开设备管理器出现如下图所示即可 4可以汉化将 Cracked 下的文件复制到软件安装目录即可。 二虚拟机绑定端口 1VMware 虚拟机注意不是 ubuntu在系统关机必须是关机状态挂起不行状态下 点击虚拟机 —— 设置 —— 硬件 —— 添加串行端口添加 COM1 2添加完成后第一次使用需要将电脑重启 3重启之后打开虚拟机点击虚拟机 —— 可移动设备 —— 串行端口 —— 连接 4在终端输入dmesg|grep tty查看对应的设备文件其中默认的会有 ttyS0 文件 其余一个ttyS1 或 ttyS2就是虚拟串口对应的设备文件。 三测试通信 1Windows 下打开串口调试工具选择好串口 COM2 —— COM1设置对应的波特率 2以下步骤在虚拟机下完成在虚拟机安装 minicom 软件sudo apt-get install minicom 3在终端执行 sudo minicom -s 选择 Serial port setup 4设置设备文件波特率关闭流控按 Ctrl 相应字母 5回车保存修改选择 Save setup as dfl 6可以在以下界面输入字符查看串口助手的显示情况 7测试通信终端输入不可见 8退出Ctrl A然后按 Z在弹出的界面里输入X即可退出。 四将 Modbus Slave 模拟器作为 RTU 设备的从机 虚拟机绑定 COM1 端口Modbus Slave 连接 COM2 端口虚拟机通过编程测试串口通信 五可能遇到的问题 虚拟串口完成主机与 vmware 下虚拟机进行串口通信 VSPD 虚拟串口工具 —— 从此告别硬件串口调试 vmware 虚拟机检测不到 vspd 虚拟串口问题 链接至其他博主放心跳转 Modbus 库 库的安装 安装与配置 1在 linux 中解压压缩包tar -xvf libmodbus-3.1.7.tar.gz 2进入源码目录创建文件夹存放头文件、库文件 cd libmodbus-3.1.7 mkdir install 3执行脚本 configure进行安装配置指定安装目录 ./configure--prefix$PWD/install 4执行 make 和 make install make // 编译make install // 安装5执行完成后会在 install 文件夹下产生对应的头文件、库文件。 使用 1、一般操作 gcc xxx.c -I ./install/include/modbus -L ./install/lib -lmodbus ./a.out-I 后需要指定出头文件的路径大写的i -L 后需要指定库的路径 -l : 后需要指定库名小写的L 2、要想编译方便可以将头文件和库文件放到系统路径下 sudo cp install/include/modbus/*.h /usr/include sudo cp install/lib/* -r /lib -d 后期编译时就可以直接 gcc xxx.c -lmodbus 头文件默认搜索路径/usr/include、/usr/local/include 库文件默认搜索路径/lib、/usr/lib 函数接口 0x01modbus_read_bits int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); 功能读取线圈状态可读取多个连续线圈的状态对应功能码为0x01 参数ctx Modbus实例addr 寄存器起始地址nb 寄存器个数dest 得到的状态值0x02modbus_read_input_bits int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); 功能读取输入状态可读取多个连续输入的状态对应功能码为0x02 参数ctx Modbus 实例addr 寄存器起始地址nb 寄存器个数dest 得到的状态值 返回值成功返回nb的值0x03modbus_read_registers int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); 功能读取保持寄存器的值可读取多个连续保持寄存器的值对应功能码为0x03 参数ctx Modbus 实例addr 寄存器起始地址nb 寄存器个数dest 得到的寄存器的值 返回值成功读到寄存器的个数失败-10x04modbus_read_input_registers int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);功能读输入寄存器的值可读取多个连续输入寄存器的值对应功能码为0x04 参数ctx Modbus 实例addr 寄存器起始地址nb 寄存器个数dest 得到的寄存器的值 返回值成功读到寄存器的个数失败-10x05modbus_write_bit int modbus_write_bit(modbus_t *ctx, int addr, int status);功能写入单个线圈的状态对应功能码为0x05 参数ctx Modbus 实例addr 线圈地址status 线圈状态 返回值成功0失败-10x06modbus_write_register int modbus_write_register(modbus_t *ctx, int addr, int value);功能写入单个寄存器对应功能码为0x06 参数 ctx Modbus 实例addr 寄存器地址value 寄存器的值 返回值成功0失败-10x0Fmodbus_write_bits int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *src);功能写入多个连续线圈的状态对应功能码为15 参数ctx Modbus 实例addr 线圈地址nb 线圈个数src 多个线圈状态 返回值成功0失败-10x10modbus_write_registers int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *src);功能写入多个连续寄存器对应功能码为16 参数ctx Modbus 实例addr 寄存器地址nb 寄存器的个数src 多个寄存器的值 返回值成功0失败-1编程流程 1创建实例modbus_new_tcp / modbus_new_rtu modbus_t *modbus_new_tcp(const char *ip, int port); 功能以 TCP 方式创建 Modbus 实例并初始化 参数ip ip 地址port 端口号 返回值成功Modbus 实例失败NULLmodbus_t *modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);功能用于创建一个用于 Modbus RTU 通信的 modbus_t 结构体实例 参数device 要打开的串口设备的路径例如/dev/ttyUSB0baud 波特率如 9600、19200 等parity 校验位可选值N - 无校验、E - 偶校验、O - 奇校验data_bit 数据位常用值为 8stop_bit 停止位常用值为 1返回值成功Modbus 实例失败NULL2设置从机地址modbus_set_slave int modbus_set_slave(modbus_t *ctx, int slave); 功能设置从机ID 参数ctx Modbus 实例slave 从机 ID 返回值成功0失败-13建立连接modbus_connect int modbus_connect(modbus_t *ctx); 功能和从机slave建立连接 参数ctx Modbus 实例 返回值成功0失败-14各种操作见函数接口 5关闭套接字modbus_close void modbus_close(modbus_t *ctx); 功能关闭套接字 参数ctxModbus 实例6释放实例modbus_free void modbus_free(modbus_t *ctx); 功能释放 Modbus 实例 参数ctxModbus 实例练习 // 和 Slave 通信读保持寄存器的三个值#include stdio.h #include modbus.h #include stdlib.h #include string.h #include modbus-rtu.hint main(int argc, char const *argv[]) { if (argc ! 3){printf(Please input %s ip port. \n, argv[0]);return -1;}modbus_t *ctx;ctx modbus_new_tcp(argv[1], atoi(argv[2]));// ctx modbus_new_rtu(/dev/ttyS1, 9600, N, 8, 1);if (ctx NULL){perror(Failed to modbus_new_tcp); // Failed to modbus_new_rtureturn -1;}if (modbus_set_slave(ctx, 1) 0){perror(Failed to modbus_set_slave);return -1;}if (modbus_connect(ctx) 0){perror(Failed to modbus_connect);return -1;}uint16_t dest[32] {};if (modbus_read_registers(ctx, 0, 3, dest) 0){perror(Failed to modbus_read_registers);return -1;}for (int i 0; i 3; i)printf(%#x , dest[i]);putchar(10);for (int i 0; i 3; i)printf(%d , dest[i]);putchar(10);modbus_close(ctx);modbus_free(ctx);return 0; }运行结果如下 注意 1、使用 Modbus TCP 协议时将 slave 的 connect 设置为“Modbus TCP/IP”。 2、使用 Modbus RTU 协议时将 slave 的 connect 设置为“Serial Port”。 小目标 编程实现采集传感器数据和控制硬件设备传感器和硬件通过 slave 模拟。 传感器2个光线传感器、加速度传感器x \ y \ z 硬件设备2个LED灯、蜂鸣器。 要求 1、多任务编程多线程、多进程 2、循环 1s 采集一次数据并将数据打印至终端 3、同时从终端输入指令控制硬件设备 0 1LED 灯开 0 0LED 灯关 1 1蜂鸣器开 1 0蜂鸣器关 // 同步实现#include stdio.h #include modbus.h #include stdlib.h #include string.h #include pthread.h #include unistd.h #include semaphore.hmodbus_t *ctx; sem_t sem1, sem2;void *collector(void *arg){uint16_t *dest (uint16_t *)arg;while (1){sleep(5);sem_wait(sem1);if (modbus_read_registers(ctx, 0, 4, dest) 0){perror(Failed to modbus_read_registers);return NULL;}for (int i 0; i 4; i)printf(%d , dest[i]);putchar(10);sem_post(sem2);}pthread_exit(0); }void *control(void *arg){uint8_t writer[2];while (1){sem_wait(sem2);printf(Please set status of LED or BUZZER: );for (int i 0; i 2; i)scanf(%hhu, writer[i]);modbus_write_bit(ctx, writer[0], writer[1]);sem_post(sem1);}pthread_exit(0); }int main(int argc, char const *argv[]) { if (argc ! 3){printf(Please input %s ip port. \n, argv[0]);return -1;}ctx modbus_new_tcp(argv[1], atoi(argv[2]));if (ctx NULL){perror(Failed to modbus_new_tcp);return -1;}if (modbus_set_slave(ctx, 1) 0){perror(Failed to modbus_set_slave);return -1;}if (modbus_connect(ctx) 0){perror(Failed to modbus_connect);return -1;}uint16_t dest[32] {};pthread_t tid1, tid2;sem_init(sem1, 0, 1);sem_init(sem2, 0, 0);if (pthread_create(tid1, NULL, collector, dest)){perror(Failed to create a thread named collector);return -1;}pthread_detach(tid1);if (pthread_create(tid2, NULL, control, NULL)){perror(Failed to create a thread named input);return -1;}pthread_detach(tid2);while (1);modbus_close(ctx);modbus_free(ctx);return 0; }实现效果如下

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

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

相关文章

深圳做营销网站制作湖北移动官网网站建设

目录 1、call 2、apply 3、bind 4、三者异同 1、call call 函数调用 :1、让函数执行 2、改变函数this指向 参数: 第一个参数是this指 向,第二个参数开始传递给函数的实参 函数名.call(this指…

月刊可以用什么网站做惠州网站模板建站

java单词按字典排序最终的记录字典,或者:我们记录的最常见单词是什么? 日志文件是调试应用程序的最常用方法,当解决错误时,它们肯定可以引导我们朝正确的方向发展。 但是,大多数日志文件每天都会增加一百万…

网站建设天猫店广东网站备案审核时间

CUDA程序错误检测 所有CUDA的API函数都有一个类型为cudaError_t的返回值&#xff0c;代表了一种错误信息&#xff1b;只有返回cudaSuccess时&#xff0c;才是成功调用。 cudaGetLastError()用来检测核函数的执行是否出错cudaGetErrorString()输出错误信息 #include <stdi…

天津交通网站建设WordPress免费小说主题

正题 题目链接:https://www.luogu.com.cn/problem/CF570D 题目大意 nnn个点的一棵树&#xff0c;每个节点有字母&#xff0c;每次询问一个节点xxx的子树中深度为kkk的所有点的字母能否经过重排构成一个回文串。 解题思路 首先把每个字母的奇偶状压一下 然后方法比较多&#x…

三门峡 网站建设农村自建房设计图效果图

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…

网站主机空间家装软装设计 上海

上面的意思是 警告&#xff1a;fread&#xff08;&#xff09;&#xff1a;长度参数必须大于0 在PHP中&#xff0c;fread() 函数用于从打开的文件中读取数据。该函数的原型如下&#xff1a; string fread ( resource $handle , int $length ) 其中&#xff0c;$handle 参数是…

网站开发 海淀宁波方正建设监理网站

目录 六、区间 48. 汇总区间 ① 49. 合并区间 ② 50. 插入区间 ② 51. 用最少数量的箭引爆气球 ② 七、栈 52. 有效的括号 ① 53. 简化路径 ② 54. 最小栈 ② 55. 逆波兰表达式求值 ② √- 56. 基本计算器 ③ 六、区间 48. 汇总区间 ① 给定一个 无重复元素 的 …

网站建设发布ps科技感seo提高网站排名

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; 神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文1.网络发展1.1.背景1.2.类型 2.网络协议2.1.什么是协议2.2.协议…

wordpress做网站教程关键词优化是怎么做的

在互联网技术不断发展的现在&#xff0c;鸿蒙操作系统的出现标志着是能技术领域的一次重大突破&#xff0c;鸿蒙作为华为推出的一代操作系统&#xff0c;鸿蒙不仅达代表了自主创新的力量&#xff0c;还因为独特的分布式架构和全场景适配能力而备受关注。随着鸿蒙生态的不断完善…

如何管理网站域名平面设计好就业吗

学习视频参考 1 面向对象的三大特征 1.1 封装 1.1.1 目的 隐藏实现细节&#xff0c;实现模块化。 1.1.2 特性 访问权限&#xff1a; public&#xff1a;可以给所有对象访问。protected&#xff1a;仅对子类开放。private&#xff1a;仅对自己开放&#xff0c;可以通过友元…

怎么才能成功做网站山西建设工程协会网站

SSH隧道 简介 SSH隧道是一种通过SSH协议在两个网络节点之间建立安全通信的技术。它可以用于多种用途&#xff0c;包括加密和保护敏感数据传输、绕过防火墙限制、远程访问内部服务等。 应用&#xff1a; 端口转发&#xff1a;SSH隧道可以将本地端口转发到远程主机上&#xf…

做网站的证书html指令代码大全

目录 引言&#xff1a;Docker Nacos 单个部署1.1 什么是 Docker&#xff1f;Docker 的概念和工作原理Docker 为什么受到广泛应用和认可 1.2 什么是 Nacos&#xff1f;Nacos 的核心功能和特点Nacos 在微服务架构中的作用 1.3 Docker 单个部署 Nacos Docker Nacos 集成部署总结&a…

商务网站创建多少钱可做设计任务的网站

1、Jmeter:概述 1.1 是什么&#xff1f; Jmeter是Apache公司使用Java 开发的一款测试工具 1.2 为什么&#xff1f; 高效、功能强大 模拟一些高并发或多次循环等特殊场景 1.3 怎么用&#xff1f; 下载安装 1、下载jmeter&#xff0c;解压缩2、安装Java环境&#xff08;jmet…

凡科网站怎么做链接网站设计形式

手头有比较多的技术书籍&#xff0c;弃之可惜&#xff0c;放之惭愧&#xff0c;借助空闲时间&#xff0c;先草读&#xff0c;再demo整理。 unix环境高级编程 草读简单整理&#xff0c;为下一步整理细节技术点做准备。 &#xff08;仅个人笔记&#xff09; 15&#xff1a;进程…

怎么做网站流量统计分析济南科技市场做网站

据可信度较高的消息源透露&#xff0c;2020 年的《使命召唤》将是《黑色行动》的重启作。而据之前的报道&#xff0c;《黑色行动》开发商 Treyarch 正在开发今年的《使命召唤》&#xff0c; Sledgehammer Games 和 Raven Software 负责辅助工作。该项目代号为“宙斯”&#xff…

网站的开发公司倒闭对网站使用地方旅游网站建设方案

目标&#xff1a;layui 实现点击按钮添加一行解决方案&#xff1a;方案1、table 是用转换静态表格的方式创建的&#xff0c;写一个button&#xff0c;每次点击按钮&#xff0c;就添加一个 标签&#xff1b;方案2、table 是用方法渲染的方式创建的&#xff0c;写一个button,每次…

淘宝网站建设类目网站加油站

标签分配 部分内容参考自&#xff1a;https://www.bilibili.com/video/BV1ge41117va 简单介绍一些特点&#xff0c;主要结合动态标签分配的一个实例来看 从更高抽象的层面理解 assign&#xff1a; 所有用于最终检测的特征图上的所有 point 都具备学习并预测目标的能力&#xf…

网站怎么做图片动态图片不显示了app store应用商店下载

UrlRewriter 是微软封装好了的一个URL重写组件。使用它可以让我节约很多自已开发的时间。 好了&#xff0c;开始讲述我的应用经验&#xff0c;这只是很菜鸟的经验&#xff0c;高手就不用看了。 第一步&#xff0c;请从此下载此组件。解压&#xff0c;把UrlRewriter.dll copy到你…

青岛冠通市政建设有限公司网站网站搭建

文章目录 1. 配置反向代理1.1 前置准备1.2 代理服务器配置1.3 真实服务器配置1.4 客户机配置 2. Tomcat 多实例部署2.1 部署JDK2.2 设置JDK环境变量2.3 部署Tomcat服务2.4 路径启动 3. Nginx联动Tomcat实现动静分离、负载均衡3.1 基本原理3.2 前置准备3.3 配置nginx1实现四层代…

邹平做网站wordpress 注册侧边栏

笔记整理 | 朱珈徵&#xff0c;天津大学硕士。链接&#xff1a;https://arxiv.org/pdf/2009.11692.pdf动机尽管生成式预训练语言模型在一系列文本生成任务上取得了成功&#xff0c;但在生成过程中需要对基础常识知识进行推理的情况下&#xff0c;它们仍然会受到影响。现有的方法…