linux串口通信 接收信息不完整 讀取不全


類似這種 ready.o是我用來讀取串口信息的一個程序 執行結果如下:

[root@localhost testPlc]# ./ready.o 
0       02
1       30
2       30
3       46
4       46
5       31
6       03
7       32
8       bd

按照通信協議,串口應返回的的是

0       02
1       30
2       30
3       46
4       46
5       31
6       03
7       32
8       31
9       38

並且其他幾個指令,也是與通信協議所要求的返回的位數不同,並且最后一位也有是錯誤的,使用串口助手有沒有問題。所以推測是接收區只有8位,然后代碼里的接收buffer設置為128,所以應該是底層的原因,所以采用了select進行等待,最終實現了完整讀取串口信息
代碼示例:

void SetBench(unsigned char *msg, unsigned char *recv) {
    fd_set fs_read;
    int fd = nFd;
//nFd是串口句柄
    unsigned char buf[16] = {0};

    struct timeval time;
    FD_ZERO(&fs_read);
    FD_SET(fd, &fs_read);

    time.tv_sec = 2;
    time.tv_usec = 0;
    write(fd, msg, strlen(msg));

    while (select(fd + 1, &fs_read, NULL, NULL, &time) > 0) {
        len = read(fd, buf, sizeof(recv));
        if (8 == len) {
            strncpy(recv + count, buf, 8);
            count += 8;
        }
        if (len > 0 && len < 8) {
            strncpy(recv + count, buf, len);
            count += len;
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM