我正在尝试在运行Raspian Buster的Raspberry Pi上使用libmodbus通过FTDI USB到串行适配器来设置半双工RS-485通信。运行ls / dev /时,我的FTDI适配器显示为ttyUSB0。
我尝试了以下示例代码:
#include <modbus.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(void) {
modbus_t *ctx = modbus_new_rtu("/dev/ttyUSB0", 19200, 'N', 8, 1);
if (ctx == NULL) {
fprintf(stderr, "Unable to create the libmodbus context\n");
return 0;
}
if (modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485) == -1) {
fprintf(stderr, "Error setting the serial port as RS-485\n");
fprintf(stderr, "errno: %d\n (EBADF == 9)", errno);
modbus_free(ctx);
return 0;
}
}
与gcc test1.c -I/usr/include/modbus -lmodbus
一起编译。而且即使我使用errno
运行此代码,我也将9
命名为EBADF
或sudo
。
您的问题有一个非常简单的解决方案:只需不设置MODBUS_RTU_RS485
,很可能您就不需要它。