Files
luban-lite-t3e-pro/packages/third-party/libmodbus/examples/modbus_rtu_test.c

68 lines
1.8 KiB
C
Raw Normal View History

2025-09-30 11:56:06 +08:00
#include "modbus_rtu_test.h"
#include "modbus.h"
#include "stdio.h"
#include "string.h"
#include "aic_hal_gpio.h"
#define RTS_PIN "PA.3"
#define GET_PIN(name) hal_gpio_name2pin(name)
#define RS485_RE GET_PIN(RTS_PIN)
int s_count = 0;
int f_count = 0;
static void test_thread(void *param)
{
uint16_t tab_reg[64] = {0};
modbus_t *ctx = RT_NULL;
ctx = modbus_new_rtu("/dev/uart2", 115200, 'N', 8, 1);
modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP);
modbus_set_slave(ctx, 3);
modbus_connect(ctx);
modbus_set_response_timeout(ctx, 0, 1000000);
modbus_set_debug(ctx, 1);
int num = 0;
while (1)
{
memset(tab_reg, 0, 64 * 2);
int regs = modbus_read_registers(ctx, 0, 20, tab_reg);
if (regs > 0) {
printf("successful:%d\n", ++s_count);
} else {
printf("fail:%d\n", ++f_count);
}
printf("-------------------------------------------\n");
printf("[%4d][read num = %d]", num, regs);
num++;
int i;
for (i = 0; i < 20; i++)
{
printf("<%#x>", tab_reg[i]);
}
printf("\n");
printf("-------------------------------------------\n");
rt_thread_mdelay(10);
}
//7-关闭modbus端口
modbus_close(ctx);
//8-释放modbus资源
modbus_free(ctx);
}
static int rtu_test_init(void)
{
rt_pin_mode(RS485_RE, PIN_MODE_OUTPUT);
rt_thread_t tid;
tid = rt_thread_create("test",
test_thread, RT_NULL,
2048,
12, 10);
if (tid != RT_NULL)
rt_thread_startup(tid);
return RT_EOK;
}
INIT_APP_EXPORT(rtu_test_init);