Linux c 开发-20 libmodbus增加支持rtu over tcp

手头使用的是libmodbus库,不支持rtu over tcp模式。看官方没有增加这个功能的打算,于是在现有tcp代码基础上重构了下,增加了rtu over tcp支持,目前简单使用没有问题。
代码放到
https://github.com/zhaogaojian/libmodbus_rtu_over_tcp
使用示例如下

modbus_t *ctx;
	uint16_t tab_reg[32] = {0};
	ctx = modbus_new_rtutcp("192.168.1.16", 5001); 
	modbus_set_debug(ctx, TRUE);				//设置debug模式
	modbus_set_slave(ctx, 1);		    //从机地址
	modbus_connect(ctx);
    	modbus_set_error_recovery(ctx,
                              MODBUS_ERROR_RECOVERY_LINK | MODBUS_ERROR_RECOVERY_PROTOCOL);
			      
	// struct timeval t;
	// t.tv_sec=0;
	// t.tv_usec=1000000;  //设置modbus超时时间为1000毫秒
	//modbus_set_response_timeout(ctx, 5, 1000000);
	//modbus_set_byte_timeout(ctx, 5, 1000000);
	while (1)
	{
		//printf("test\n");
		int regs = modbus_read_input_registers(ctx, 4252, 2, tab_reg);
		//printf("test1\n");
		// regs=modbus_write_register(mb,0x00,94);
		float f=modbus_get_float_abcd(tab_reg);	
		printf("%d %d %d %d %d %f\n", regs, tab_reg[0], tab_reg[1], tab_reg[2], tab_reg[3],f);
		sleep(3);
	}

	modbus_close(ctx);
	modbus_free(ctx);
	return 0;
posted @ 2022-02-18 16:15  zhaogaojian  阅读(852)  评论(0编辑  收藏  举报