Modbus TCP协议的主站示例代码
时间: 2023-08-02 18:08:31 浏览: 61
以下是一个使用Modbus TCP协议的主站示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <modbus/modbus.h>
#define SERVER_ADDRESS "127.0.0.1"
#define SERVER_PORT 502
#define SLAVE_ID 1
#define START_ADDRESS 0
#define NUM_REGISTERS 10
int main() {
modbus_t *ctx;
uint16_t tab_registers[NUM_REGISTERS];
// 创建 Modbus TCP 上下文
ctx = modbus_new_tcp(SERVER_ADDRESS, SERVER_PORT);
if (ctx == NULL) {
fprintf(stderr, "Failed to create Modbus TCP context\n");
return -1;
}
// 连接到 Modbus TCP 从站
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Failed to connect to Modbus TCP slave: %s\n", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
// 设置从站ID
modbus_set_slave(ctx, SLAVE_ID);
// 写入保持寄存器的值
for (int i = 0; i < NUM_REGISTERS; ++i) {
tab_registers[i] = i + START_ADDRESS;
}
int rc = modbus_write_registers(ctx, START_ADDRESS, NUM_REGISTERS, tab_registers);
if (rc == -1) {
fprintf(stderr, "Failed to write registers: %s\n", modbus_strerror(errno));
modbus_close(ctx);
modbus_free(ctx);
return -1;
}
printf("Registers written successfully!\n");
// 断开 Modbus TCP 连接
modbus_close(ctx);
modbus_free(ctx);
return 0;
}
```
在上面的示例代码中,我们首先创建了一个 Modbus TCP 上下文,并设置了服务器地址和端口号。然后,我们连接到 Modbus TCP 从站,并设置从站ID。接下来,我们使用 `modbus_write_registers` 函数将一组连续寄存器的值写入到从站的保持寄存器中。最后,我们断开了 Modbus TCP 连接。
请注意,您需要安装 `libmodbus` 库,并在编译时链接该库。您可以根据自己的需求修改服务器地址、端口号、从站ID、起始地址和寄存器数量。
这只是一个基本的示例,您可以根据Modbus主站的具体要求进行扩展和修改。希望对您有所帮助!