【嵌入式】Libmodbus之RTU模式Slave端程序示例

00. 目录

文章目录

    • 00. 目录
    • 01. 开发RTU Slave端程序流程
    • 02. RTU Slave端程序示例
    • 03. RTU Slave端程序说明
    • 04. 预留
    • 05. 附录

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. 附录

源程序下载:RTU模式Slave端程序.rar


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部