modbus_rtu_test.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "modbus_rtu_test.h"
  2. #include "modbus.h"
  3. #include "stdio.h"
  4. #include "string.h"
  5. #define RS485_RE GET_PIN(G, 8)
  6. static void test_thread(void *param)
  7. {
  8. uint16_t tab_reg[64] = {0};
  9. modbus_t *ctx = RT_NULL;
  10. ctx = modbus_new_rtu("/dev/uart2", 115200, 'N', 8, 1);
  11. modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
  12. modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP);
  13. modbus_set_slave(ctx, 3);
  14. modbus_connect(ctx);
  15. modbus_set_response_timeout(ctx, 0, 1000000);
  16. int num = 0;
  17. while (1)
  18. {
  19. memset(tab_reg, 0, 64 * 2);
  20. int regs = modbus_read_registers(ctx, 0, 20, tab_reg);
  21. printf("-------------------------------------------\n");
  22. printf("[%4d][read num = %d]", num, regs);
  23. num++;
  24. int i;
  25. for (i = 0; i < 20; i++)
  26. {
  27. printf("<%#x>", tab_reg[i]);
  28. }
  29. printf("\n");
  30. printf("-------------------------------------------\n");
  31. rt_thread_mdelay(5000);
  32. }
  33. //7-关闭modbus端口
  34. modbus_close(ctx);
  35. //8-释放modbus资源
  36. modbus_free(ctx);
  37. }
  38. static int rtu_test_init(void)
  39. {
  40. rt_pin_mode(RS485_RE, PIN_MODE_OUTPUT);
  41. rt_thread_t tid;
  42. tid = rt_thread_create("test",
  43. test_thread, RT_NULL,
  44. 2048,
  45. 12, 10);
  46. if (tid != RT_NULL)
  47. rt_thread_startup(tid);
  48. return RT_EOK;
  49. }
  50. INIT_APP_EXPORT(rtu_test_init);