mb_sample_rtu_master.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * mb_sample_rtu_master.c
  3. *
  4. * Change Logs:
  5. * Date Author Notes
  6. * 2024-04-02 qiyongzhong first version
  7. */
  8. #include "rtthread.h"
  9. #include "modbus.h"
  10. #ifdef MB_USING_SAMPLE_RTU_MASTER
  11. #define DBG_TAG "mb.rtu.master"
  12. #define DBG_LVL DBG_LOG
  13. #include <rtdbg.h>
  14. static const mb_backend_param_t mb_bkd_prm = {
  15. .rtu.dev = "uart1", //设备名
  16. .rtu.baudrate = 9600, //波特率
  17. .rtu.parity = 0, //校验位, 0-无, 1-奇, 2-偶
  18. .rtu.pin = -1, //控制引脚, <0 表示不使用
  19. .rtu.lvl = 0 //控制发送电平
  20. };
  21. static void mb_sample_read_regs(mb_inst_t *hinst)
  22. {
  23. if (mb_connect(hinst) < 0)//连接失败, 延时返回
  24. {
  25. LOG_E("modbus connect fail.");
  26. return;
  27. }
  28. u16 regs[64];
  29. int addr = 4000;
  30. int nb = 29;
  31. int total = mb_read_regs(hinst, addr, nb, regs);
  32. if (total <= 0)
  33. {
  34. LOG_E("modbus read register fail.");
  35. return;
  36. }
  37. LOG_D("modbus read register success.");
  38. for (int i=0; i<total; i++)
  39. {
  40. LOG_D("addr : %d, value : %d", addr + i, regs[i]);
  41. }
  42. }
  43. static void mb_sample_thread(void *args)//线程服务函数
  44. {
  45. mb_inst_t *hinst = mb_create(MB_BACKEND_TYPE_RTU, &mb_bkd_prm);
  46. RT_ASSERT(hinst != NULL);
  47. //mb_set_slave(hinst, 1);//修改从机地址, 默认地址为1, 可根据实际情况修改
  48. //mb_set_prot(hinst, MB_PROT_TCP);//修改通信协议类型, RTU后端默认使用MODBUS-RTU通信协议
  49. //mb_set_tmo(hinst, 500, 15);//修改超时时间, 应答超时500ms(默认300ms), 字节超时15ms(默认32ms)
  50. while(1)
  51. {
  52. mb_sample_read_regs(hinst);
  53. rt_thread_mdelay(1000);
  54. }
  55. }
  56. static int mb_sample_rtu_master_startup(void)
  57. {
  58. rt_thread_t tid = rt_thread_create("mb-rtu-master", mb_sample_thread, NULL, 2048, 5, 20);
  59. RT_ASSERT(tid != NULL);
  60. rt_thread_startup(tid);
  61. return(0);
  62. }
  63. INIT_APP_EXPORT(mb_sample_rtu_master_startup);
  64. #endif