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

本文详细介绍了如何开发一个TCP Slave端程序,包括设置TCP连接信息、启用调试模式、分配内存、监听端口、接收并响应客户端请求等步骤。提供了一个完整的C语言程序示例,并强调了在启动Slave端程序后,再启动Master端程序进行通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

00. 目录

01. 开发TCPSlave端程序流程

在这里插入图片描述

02. TCP Slave端程序示例

程序示例

#include <stdio.h>

#ifndef _MSC_VER
#include <unistd.h>
#endif

#include <stdlib.h>
#include <errno.h>

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

源程序下载:TCP模式Slave程序示例.rar

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧海一笑-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值