我正试图编写一个c程序来读取晨星太阳保护程序MPPT的数据。
这是我在网上找到的简单程序。但是我的程序无法从寄存器中读取数据。
#include <stdlib.h>
#include <errno.h>
#include "src/modbus.h"
int main(void)
{
modbus_t *ctx;
uint16_t tab_reg[64];
int rc;
int i;
ctx = modbus_new_rtu("/dev/ttyS0", 115200, 'N',8,1);
if (ctx == NULL) {
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);
}这对我不管用。我收到以下错误消息:
坏文件描述符
发布于 2013-10-11 20:49:40
结果是试图从错误的串口读取。
读取/dev/ttyS3 3的操作正常。
后来我意识到串行端口来自/dev/ttyS0 0 ./dev/ttyS9
发布于 2013-08-09 03:01:58
通过阅读来自LibModBus的文档,我认为你错过了给连接的一个电话。
试着在读取寄存器之前连接:
ctx = modbus_new_rtu("/dev/ttyS0", 115200, 'N',8,1);
if (ctx == NULL) {
fprintf(stderr, "Creation failed: %s\n", modbus_strerror(errno));
return -1;
}
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}此外,由于进一步的错误条件,在退出之前,请记住modbus_close和modbus_free上下文。例如:
rc = modbus_read_registers(ctx, 0, 10, tab_reg);
if (rc == -1) {
fprintf(stderr, "%s\n", modbus_strerror(errno));
modbus_close(ctx);
modbus_free(ctx);
return -1;
}https://stackoverflow.com/questions/18137527
复制相似问题