赞
踩
libmodbus库提供了许多示例代码,用于演示如何使用该库进行Modbus通信。以下是一个简单的libmodbus库示例,用于从Modbus从站读取保持寄存器(holding registers)的值:
- #include <stdio.h>
- #include <stdlib.h>
- #include <modbus.h>
-
- int main(void) {
- modbus_t *ctx;
- uint16_t tab_reg[32];
- int rc;
- int i;
-
- ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
- if (ctx == NULL) {
- fprintf(stderr, "Unable to create the libmodbus context\n");
- return -1;
- }
-
- modbus_set_debug(ctx, TRUE);
- modbus_set_slave(ctx, 1);
-
- if (modbus_connect(ctx) == -1) {
- fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
- modbus_free(ctx);
- return -1;
- }
-
- rc = modbus_read_registers(ctx, 0, 10, tab_reg);
- if (rc == -1) {
- fprintf(stderr, "%s\n", modbus_strerror(errno));
- return -1;
- }
-
- for (i=0; i < rc; i++) {
- printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
- }
-
- modbus_close(ctx);
- modbus_free(ctx);
-
- return 0;
- }
这个示例代码使用libmodbus库创建一个RTU模式的Modbus主站,连接到一个串行端口(/dev/ttyUSB0)。然后,它尝试从从站设备(地址为1)的起始地址为0的保持寄存器中读取10个连续的寄存器值。最后,它将读取到的值打印到控制台。请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。确保在编译和运行此示例之前,已经正确安装了libmodbus库并将其包含在你的项目中。此外,请根据实际情况更改串行端口和其他相关参数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。