【嵌入式】Libmodbus之TCP模式Slave端程序示例
发布日期:2021-06-29 20:52:07 浏览次数:2 分类:技术文章

本文共 1719 字,大约阅读时间需要 5 分钟。

00. 目录

文章目录

01. 开发TCPSlave端程序流程

在这里插入图片描述

02. TCP Slave端程序示例

程序示例

#include 
#ifndef _MSC_VER#include
#endif#include
#include
#include "modbus.h"//TCP模式的Slave端程序int main(void){
int ret = 0; int sockfd = -1; modbus_t* ctx = NULL; modbus_mapping_t* map = NULL; uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; //1. 设置串口信息 ctx = modbus_new_tcp("192.168.1.90", 10086); if (NULL == ctx) {
fprintf(stderr, "Error: %s\n", modbus_strerror(errno)); return 1; } else {
printf("设置TCP信息成功\n"); } //2. 设置调试模式 ret = modbus_set_debug(ctx, TRUE); if (-1 == ret) {
printf("modbus_set_debug failed...\n"); modbus_free(ctx); return 1; } //3. 申请内存 存放寄存器数据 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; } //4. 开始监听端口 sockfd = modbus_tcp_listen(ctx, 1); if (-1 == sockfd) {
printf("modbus_tcp_listen failed...\n"); modbus_free(ctx); return 1; } //5. 接受客户端连接 ret = modbus_tcp_accept(ctx, &sockfd); if (-1 == ret) {
printf("modbus_tcp_accept failedl: %s\n", modbus_strerror(errno)); modbus_free(ctx); return 1; } //6. 循环接受客户端请求,并且响应客户端 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"); modbus_close(ctx); //等待下一个客户端连接 modbus_tcp_accept(ctx, &sockfd); } } printf("Quit the loop: %s\n", modbus_strerror(errno)); //6. 释放内存 modbus_mapping_free(map); //7. 关闭设备 modbus_close(ctx); modbus_free(ctx); return 0;}

执行结果

在这里插入图片描述

03. TCP Slave端程序说明

先启动Slave端程序,然后在启动Master端程序。

04. 预留

05. 附录

源程序下载:

转载地址:https://dengjin.blog.csdn.net/article/details/116803752 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【博客】博客资源汇总
下一篇:【嵌入式】Libmodbus之TCP模式Master端程序示例

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月25日 00时01分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章