【嵌入式】Libmodbus之RTU模式Slave端程序示例
发布日期:2021-06-29 20:52:07
浏览次数:2
分类:技术文章
本文共 1661 字,大约阅读时间需要 5 分钟。
00. 目录
文章目录
01. 开发RTU Slave端程序流程
02. RTU Slave端程序示例
程序示例
#include#ifndef _MSC_VER#include #endif#include #include #include "modbus.h"//从站地址 17#define SERVER_ID 17//RTU模式的Slave端程序int main(void){ int ret = 0; modbus_t* ctx = NULL; modbus_mapping_t* map = NULL; uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; //1. 设置串口信息 ctx = modbus_new_rtu("COM3", 9600, 'N', 8, 1); if (NULL == ctx) { fprintf(stderr, "Error: %s\n", modbus_strerror(errno)); return 1; } else { printf("设置串口信息成功\n"); } //2. 设置从机地址 ret = modbus_set_slave(ctx, SERVER_ID); if (-1 == ret) { printf("设置从机地址失败.. %s\n", modbus_strerror(errno)); modbus_free(ctx); return 1; } //设置调试模式 ret = modbus_set_debug(ctx, TRUE); if (-1 == ret) { printf("modbus_set_debug failed...\n"); modbus_free(ctx); return 1; } //3. 打开串口 ret = modbus_connect(ctx); if (-1 == ret) { fprintf(stderr, "打开串口失败: %s\n", modbus_strerror(errno)); modbus_free(ctx); return 1; } //4. 申请内存 存放寄存器数据 map = modbus_mapping_new(500, 500, 500, 500); if (NULL == map) { fprintf(stderr, "Error: mapping %s\n", modbus_strerror(errno)); modbus_free(ctx); return 1; } //5. 循环接受客户端请求,并且响应客户端 while (1) { memset(query, 0, sizeof(query)); //获取查询请求报文 ret = modbus_receive(ctx, query); if (ret >= 0) { //恢复响应报文 modbus_reply(ctx, query, ret, map); } else { printf("Connection close\n"); } } printf("Quit the loop: %s\n", modbus_strerror(errno)); //6. 释放内存 modbus_mapping_free(map); //7. 关闭设备 modbus_close(ctx); modbus_free(ctx); return 0;}
执行结果
03. RTU Slave端程序说明
先启动Slave端程序,然后在启动Master端程序。同时要使用虚拟串口设备虚拟串口。
04. 预留
05. 附录
源程序下载:
转载地址:https://dengjin.blog.csdn.net/article/details/116797671 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月05日 18时02分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
读书笔记之Windows窗体
2019-04-30
Point,Size,Rectangle结构
2019-04-30
C# 基本结构
2019-04-30
C#语言 图形界面编程(四) 尺寸、坐标、边界
2019-04-30
c# object sender,EventArgs e的一些讲解
2019-04-30
关于C#事件处理函数中的参数(object sender, EventArgs e)
2019-04-30
object sender,EventArgs e的一些讲解
2019-04-30
C#中使用XmlWriter写入XML数据
2019-04-30
C#鼠标按住标题移动时移动窗体
2019-04-30
存储过程中调用EXECUTE IMMEDIATE的“权限不足”问题
2019-04-30
G711 G723 G729线路占多少带宽问题
2019-04-30
针对文本文件单行连续多字符内容根据分隔符号转多行方法
2019-04-30
OPPO A37M刷机
2019-04-30
通过代理使用远程桌面(Mstcs)
2019-04-30
XP下安装VS2003 ,安装先决条件IIS后,提示未安装frontpage服务器扩展
2021-07-03
linux中的mail命令
2021-07-03
如何排除网络故障1:常见的问题和解决这些问题的工具
2021-07-03
Bypass交换机-确保关键链路的高可用性 (HA)
2021-07-03