mb_sample_tcp_master.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * mb_sample_tcp_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_TCP_MASTER
  11. #define DBG_TAG "mb.tcp.master"
  12. #define DBG_LVL DBG_LOG
  13. #include <rtdbg.h>
  14. static const mb_backend_param_t mb_bkd_prm = {
  15. .tcp.host = "192.168.43.62", //主机地址
  16. .tcp.port = 60000 //端口号
  17. };
  18. static void mb_sample_read_regs(mb_inst_t *hinst)
  19. {
  20. if (mb_connect(hinst) < 0)//连接失败, 延时返回
  21. {
  22. LOG_E("modbus connect fail.");
  23. return;
  24. }
  25. u16 regs[64];
  26. int addr = 4000;
  27. int nb = 29;
  28. int total = mb_read_regs(hinst, addr, nb, regs);
  29. if (total <= 0)
  30. {
  31. LOG_E("modbus read register fail.");
  32. return;
  33. }
  34. LOG_D("modbus read register success.");
  35. for (int i=0; i<total; i++)
  36. {
  37. LOG_D("addr : %d, value : %d", addr + i, regs[i]);
  38. }
  39. }
  40. static void mb_sample_thread(void *args)//线程服务函数
  41. {
  42. mb_inst_t *hinst = mb_create(MB_BACKEND_TYPE_TCP, &mb_bkd_prm);
  43. RT_ASSERT(hinst != NULL);
  44. //mb_set_slave(hinst, 1);//修改从机地址, 默认地址为1, 可根据实际情况修改
  45. //mb_set_prot(hinst, MB_PROT_RTU);//修改通信协议类型, TCP后端默认使用MODBUS-TCP通信协议
  46. //mb_set_tmo(hinst, 500, 15);//修改超时时间, 应答超时500ms(默认300ms), 字节超时15ms(默认32ms)
  47. while(1)
  48. {
  49. mb_sample_read_regs(hinst);
  50. rt_thread_mdelay(1000);
  51. }
  52. }
  53. static int mb_sample_tcp_master_startup(void)
  54. {
  55. rt_thread_t tid = rt_thread_create("mb-tcp-master", mb_sample_thread, NULL, 2048, 5, 20);
  56. RT_ASSERT(tid != NULL);
  57. rt_thread_startup(tid);
  58. return(0);
  59. }
  60. INIT_APP_EXPORT(mb_sample_tcp_master_startup);
  61. #endif