总线/通信笔记2 —— Modbus TCP的使用

总线/通信笔记2 —— Modbus TCP的使用

  • 1. libmodbus库的使用
  • 2. Modbus TCP开发实践
  • 3. Modbus TCP多机通信应用案例

1. libmodbus库的使用

Step 1:初始化RTU/TCP指针

modbus_t *ctx;
ctx = modbus_new_tcp(“192.168.191.1”,502);

Step 2:初始化变量

uint16_t tab_reg[20];

Step 3:建立连接

modbus_connect(ctx);

Step 4:设置从站ID

rc = modbus_set_slave(ctx, SLAVE_ID);

Step 5:读写寄存器/数据

modbus_read_registers(ctx, IndexStart, IndexEnd, tab_reg);

Step 6:关闭连接

modbus_close(ctx);
modbus_free(ctx);

2. Modbus TCP开发实践

Step 1:新建工程

Step 2:将config.h、modbus.h等头文件以及modbus.dll、modbus.lib文件复制到工程目录下,如下图所示。
总线/通信笔记2 —— Modbus TCP的使用_第1张图片

Step 3:把modbus.h和modbus.lib文件添加到资源文件中,如下图所示:

总线/通信笔记2 —— Modbus TCP的使用_第2张图片
总线/通信笔记2 —— Modbus TCP的使用_第3张图片

剩下的不多说,直接上代码

#include 
#include 
#include 
#include
#include 
#include "modbus.h"


#define LOOP 1 //循环次数
#define SERVER_ID	1	//从端设备地址
#define ADDRESS_START 0  //测试寄存器起始地址
#define ADDRESS_END		99//测试寄存器结束地址



using namespace std;

int main(void)
{
	modbus_t *ctx;
	int rc;
	int nb=10;

	uint16_t tab_reg[20];

	/*TCP*/
	ctx = modbus_new_tcp("192.168.191.1",502);	//创建TCP类型的容器
//	modbus_set_debug(ctx, TRUE);				//设置debug模式

	if (modbus_connect(ctx) == -1)
	{
		fprintf(stderr, "Connection failed:%d\n", modbus_strerror(errno));
		modbus_free(ctx);
		return -1;
	}

	rc = modbus_read_registers(ctx, 0, nb, tab_reg);
	if (rc == -1)
	{
		fprintf(stderr, "%s\n", modbus_strerror(errno));
		return -1;
	}

	for (int i = 0; i < nb; i++)
	{
		printf("reg[%d]=%d \n", i, tab_reg[i]);
	}



	modbus_close(ctx);
	modbus_free(ctx);

	system("pause");
	return 0;
}

总线/通信笔记2 —— Modbus TCP的使用_第4张图片

3. Modbus TCP多机通信应用案例

留坑待填

你可能感兴趣的:(▶,运动控制,▶,机器人设计/研发)