当前位置:   article > 正文

【MODBUS】libmodbus库从Modbus从站读取值_libmodbus串口读取数据

libmodbus串口读取数据

libmodbus库提供了许多示例代码,用于演示如何使用该库进行Modbus通信。以下是一个简单的libmodbus库示例,用于从Modbus从站读取保持寄存器(holding registers)的值:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <modbus.h>
  4. int main(void) {
  5. modbus_t *ctx;
  6. uint16_t tab_reg[32];
  7. int rc;
  8. int i;
  9. ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
  10. if (ctx == NULL) {
  11. fprintf(stderr, "Unable to create the libmodbus context\n");
  12. return -1;
  13. }
  14. modbus_set_debug(ctx, TRUE);
  15. modbus_set_slave(ctx, 1);
  16. if (modbus_connect(ctx) == -1) {
  17. fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
  18. modbus_free(ctx);
  19. return -1;
  20. }
  21. rc = modbus_read_registers(ctx, 0, 10, tab_reg);
  22. if (rc == -1) {
  23. fprintf(stderr, "%s\n", modbus_strerror(errno));
  24. return -1;
  25. }
  26. for (i=0; i < rc; i++) {
  27. printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
  28. }
  29. modbus_close(ctx);
  30. modbus_free(ctx);
  31. return 0;
  32. }

这个示例代码使用libmodbus库创建一个RTU模式的Modbus主站,连接到一个串行端口(/dev/ttyUSB0)。然后,它尝试从从站设备(地址为1)的起始地址为0的保持寄存器中读取10个连续的寄存器值。最后,它将读取到的值打印到控制台。请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。确保在编译和运行此示例之前,已经正确安装了libmodbus库并将其包含在你的项目中。此外,请根据实际情况更改串行端口和其他相关参数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/566160
推荐阅读
相关标签
  

闽ICP备14008679号