使用C语言和modbus库实现的modbus-rtu示例代码
时间: 2023-09-02 15:09:00 浏览: 61
以下是一个使用C语言和modbus库实现的modbus-rtu示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <modbus.h>
#define SERVER_ID 1
#define SERVER_ADDRESS "/dev/ttyUSB0"
#define BAUDRATE B9600
#define DATA_BITS 8
#define PARITY 'N'
#define STOP_BITS 1
int main() {
modbus_t *ctx;
uint16_t tab_reg[32];
int rc;
// Create a new modbus context
ctx = modbus_new_rtu(SERVER_ADDRESS, BAUDRATE, PARITY, DATA_BITS, STOP_BITS);
// Set the slave ID
modbus_set_slave(ctx, SERVER_ID);
// Connect to the server
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(ctx);
exit(EXIT_FAILURE);
}
// Read the holding registers
rc = modbus_read_registers(ctx, 0, 32, tab_reg);
if (rc == -1) {
fprintf(stderr, "Read failed: %s\n", modbus_strerror(errno));
modbus_close(ctx);
modbus_free(ctx);
exit(EXIT_FAILURE);
}
// Print the values
for (int i = 0; i < rc; i++) {
printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
}
// Close the connection and free the context
modbus_close(ctx);
modbus_free(ctx);
return 0;
}
```
该示例程序使用modbus库连接到一个modbus-rtu服务器,并读取其前32个保持寄存器的值。在使用该示例程序之前,您需要确保已经安装了modbus库,并且设置了正确的串行通信参数。