Неверные значения печатаются в файл. Программа связи последовательного порта - PullRequest
0 голосов
/ 08 октября 2011

Предполагается, что этот код отправляет команду в COM3, отправляет ответ в файл, затем читает определенное количество символов из COM5 и записывает его в файл. Странные значения печатают.

Я думаю, что слишком долго смотрю на код. Любая помощь будет потрясающей.

#include <Windows.h>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
int main()
{
    ofstream myfile;
    myfile.open ("example.txt", 'w');

    HANDLE hSerial = CreateFile("COM3",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    HANDLE hSerial2 = CreateFile("COM5",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

    if(hSerial==INVALID_HANDLE_VALUE)
        std::cout << "Insert error message";

    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength=sizeof(dcbSerialParams);

    if (!GetCommState(hSerial, &dcbSerialParams)) 
        std::cout << "Insert error message";

    dcbSerialParams.BaudRate=CBR_9600;
    dcbSerialParams.ByteSize=8;
    dcbSerialParams.StopBits=ONESTOPBIT;
    dcbSerialParams.Parity=NOPARITY;

    if (!SetCommState(hSerial,&dcbSerialParams))
        std::cout << "Insert error message";


    COMMTIMEOUTS timeouts={0};
    timeouts.ReadIntervalTimeout=50;
    timeouts.ReadTotalTimeoutConstant=50;
    timeouts.ReadTotalTimeoutMultiplier=10;
    timeouts.WriteTotalTimeoutConstant=50;
    timeouts.WriteTotalTimeoutMultiplier=10;
    if(!SetCommTimeouts(hSerial, &timeouts))
        std::cout << "Insert error message";


int i = 0;
while(i < 10)
{
char szBuff[50+1] = {0};
char lzBuff[400] = {0};
char wzBuff[14] = {"AT+CSQ\r"};

DWORD dZBytesRead = 0;
DWORD dwBytesRead = 0;


if(!WriteFile(hSerial, wzBuff, 7, &dZBytesRead, NULL))
    std::cout << "Write error";

if(!ReadFile(hSerial, szBuff, 50, &dwBytesRead, NULL))
    std::cout << "Read Error";

if(!ReadFile(hSerial2, lzBuff, 400, &dZBytesRead, NULL))
    std::cout << "Read Error";


std::string test2 = std::string(lzBuff).substr(300,10);
//std:: cout << szBuff;
if(dwBytesRead > 9)
{
    std::string test = std::string(szBuff).substr(8,3);
    myfile << test <<endl << endl << endl;

std::cout << test << endl;
}

if(dZBytesRead > 200)
{
    std::string test2 = std::string(lzBuff).substr(1,10);
    myfile << test2 << '\n' << '\n';

}

Sleep(500);
i++;
}

myfile.close();
return 0;
}

1 Ответ

1 голос
/ 08 октября 2011

Когда у меня COM-порты выплевывают странные символы, обычно это происходит из-за несоответствия скорости передачи.

Вы должны позвонить SetCommState на hSerial2, чтобы убедиться, что он имеет ту же скорость передачи данных, что и hSerial.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...