test_modbus_tcp_matser.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #include "stdio.h"
  2. #include "string.h"
  3. #include "board.h"
  4. #include "small_modbus.h"
  5. #include "board_virtualIO.h"
  6. static small_modbus_t modbus_tcp_master = {0};
  7. //#define MODBUS_PRINTF(...)
  8. //#define MODBUS_PRINTF(...) modbus_debug((&modbus_tcp_master),__VA_ARGS__)
  9. #define MODBUS_PRINTF(...) modbus_debug_info((&modbus_tcp_master), __VA_ARGS__)
  10. static uint8_t temp_buff[256];
  11. static void test_modbus_tcp_master_thread(void *param)
  12. {
  13. int rc = 0;
  14. small_modbus_t *smb_master = param;
  15. modbus_init(smb_master, MODBUS_CORE_TCP,
  16. modbus_port_rtsocket_create(MODBUS_DEVICE_MASTER, "192.168.1.98", "502")); // init modbus TCP mode
  17. MODBUS_PRINTF("modbus master\n");
  18. int count_ok = 0;
  19. int count_err = 0;
  20. int index = 0;
  21. while (1)
  22. {
  23. modbus_connect(smb_master);
  24. MODBUS_PRINTF("modbus connect\n");
  25. while (modbus_tcp_status(smb_master) == MODBUS_OK) // loop query
  26. {
  27. rt_thread_mdelay(30);
  28. modbus_error_recovery(smb_master);
  29. modbus_set_slave(smb_master, 1);
  30. rc = modbus_read_input_bits(smb_master, 0, 8, temp_buff); // modbus_read_input_bits
  31. rt_kprintf("modbus_read_input_bits:%d\n", rc);
  32. if (rc >= MODBUS_OK)
  33. {
  34. for (index = 0; index < 8; index++)
  35. {
  36. rt_kprintf("[%d]", dio_get_val(temp_buff, index));
  37. }
  38. rt_kputs("\n\r");
  39. count_ok++;
  40. }
  41. else
  42. {
  43. count_err++;
  44. if (rc == MODBUS_ERROR_READ)
  45. {
  46. break; // disconnect
  47. }
  48. }
  49. rt_thread_mdelay(30);
  50. modbus_error_recovery(smb_master);
  51. modbus_set_slave(smb_master, 1);
  52. rc = modbus_write_bits(smb_master, 0, 8, temp_buff); // modbus_write_bits
  53. rt_kprintf("modbus_write_bits:%d\n", rc);
  54. if (rc >= MODBUS_OK)
  55. {
  56. count_ok++;
  57. }
  58. else
  59. {
  60. count_err++;
  61. if (rc == MODBUS_ERROR_READ)
  62. {
  63. break; // disconnect
  64. }
  65. }
  66. rt_thread_mdelay(30);
  67. modbus_error_recovery(smb_master);
  68. modbus_set_slave(smb_master, 1);
  69. rc = modbus_read_bits(smb_master, 0, 8, temp_buff); // modbus_read_bits
  70. rt_kprintf("modbus_read_bits:%d\n", rc);
  71. if (rc >= MODBUS_OK)
  72. {
  73. for (index = 0; index < 8; index++)
  74. {
  75. rt_kprintf("[%d]", dio_get_val(temp_buff, index));
  76. }
  77. rt_kputs("\n\r");
  78. count_ok++;
  79. }
  80. else
  81. {
  82. count_err++;
  83. if (rc == MODBUS_ERROR_READ)
  84. {
  85. break; // disconnect
  86. }
  87. }
  88. rt_thread_mdelay(30);
  89. modbus_error_recovery(smb_master);
  90. modbus_set_slave(smb_master, 1);
  91. rc = modbus_read_input_registers(smb_master, 0, 8, (uint16_t *)temp_buff); // modbus_read_input_registers
  92. rt_kprintf("modbus_read_input_registers:%d\n", rc);
  93. if (rc >= MODBUS_OK)
  94. {
  95. for (index = 0; index < 8; index++)
  96. {
  97. rt_kprintf("[%d]", aio_get_val((uint16_t *)temp_buff, index));
  98. }
  99. rt_kputs("\n\r");
  100. count_ok++;
  101. }
  102. else
  103. {
  104. count_err++;
  105. if (rc == MODBUS_ERROR_READ)
  106. {
  107. break; // disconnect
  108. }
  109. }
  110. rt_thread_mdelay(30);
  111. modbus_error_recovery(smb_master);
  112. modbus_set_slave(smb_master, 1);
  113. rc = modbus_write_registers(smb_master, 0, 8, (uint16_t *)temp_buff); // modbus_write_registers
  114. rt_kprintf("modbus_write_registers:%d\n", rc);
  115. if (rc >= MODBUS_OK)
  116. {
  117. count_ok++;
  118. }
  119. else
  120. {
  121. count_err++;
  122. if (rc == MODBUS_ERROR_READ)
  123. {
  124. break; // disconnect
  125. }
  126. }
  127. rt_thread_mdelay(30);
  128. modbus_error_recovery(smb_master);
  129. modbus_set_slave(smb_master, 1);
  130. rc = modbus_read_registers(smb_master, 0, 8, (uint16_t *)temp_buff); // modbus_read_registers
  131. rt_kprintf("modbus_read_registers:%d\n", rc);
  132. if (rc >= MODBUS_OK)
  133. {
  134. for (index = 0; index < 8; index++)
  135. {
  136. rt_kprintf("[%d]", aio_get_val((uint16_t *)temp_buff, index));
  137. }
  138. rt_kputs("\n\r");
  139. count_ok++;
  140. }
  141. else
  142. {
  143. count_err++;
  144. if (rc == MODBUS_ERROR_READ)
  145. {
  146. break; // disconnect
  147. }
  148. }
  149. rt_thread_mdelay(3000);
  150. } // loop query
  151. MODBUS_PRINTF("modbus disconnect\n");
  152. modbus_disconnect(smb_master); // disconnect
  153. }
  154. }
  155. int test_modbus_tcp_master(void)
  156. {
  157. rt_thread_t tid;
  158. tid = rt_thread_create("master", test_modbus_tcp_master_thread, &modbus_tcp_master, 2048, 20, 10);
  159. if (tid != RT_NULL)
  160. rt_thread_startup(tid);
  161. return 0;
  162. }
  163. // mshÃüÁîÐÐÆô¶¯
  164. #if defined(RT_USING_FINSH) && defined(FINSH_USING_MSH)
  165. #include <finsh.h>
  166. MSH_CMD_EXPORT(test_modbus_tcp_master, test modbus_tcp_master);
  167. #endif