Как я могу получить правильные значения из COM-порта - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь прочитать строку с какого-то оборудования. и получить цифры в Int. так что это может быть использовано. строка, которая в настоящее время входит, является "a01y2345z". первые цифры - это канал, а последние четыре - это значение.

stringstream Channel_ss;
stringstream Data_ss;

SetCommMask(handle, EV_RXCHAR);

DWORD dwEventMask;
WaitCommEvent(handle, &dwEventMask, NULL);

char TempChar;
char SerialBuffer[512];
DWORD NoBytesRead;

for (int i = 0; i < 13; i++) {
    ReadFile(handle, &TempChar, sizeof(TempChar), &NoBytesRead, NULL);
    SerialBuffer[i] = TempChar;
    if (SerialBuffer[0] == 'a') {
        for (int j = 0; j < 13; j++) {
            if (isdigit(SerialBuffer[j])) {
                Channel_ss.put(SerialBuffer[j]);
                if (j == 2) {
                    Chan = stoi(Channel_ss.str());
                    Channel_ss.str(string());
                }
            }
        }
        if (SerialBuffer[3] == Secondc) {
            for (int k = 0; k < 4; k++) {
                if (isdigit(SerialBuffer[k])) {
                    Data_ss.put(SerialBuffer[k]);
                    if (k == 4) {
                        Val[&Chan] = stoi(Data_ss.str());
                        Data_ss.str(string());
                    }
                }
            }
        }
    }
    string PrintChan = to_string(Chan);
    string PrintVal = to_string(Val[&Chan]);
    cout << "Channel : " << PrintChan << " Value : " << PrintVal << endl;
}

Я пытаюсь вывести его на экран. Канал: 01 Значение: 2345, и текущий результат:

CreateFileA -> Успешно выполнен GetCommState -> Успешновыполнено SetCommState -> успешно выполнено SetCommTimeouts -> успешно выполнено Канал: 0 Значение: 0 Канал: 0 Значение: 0 Канал: 4 Значение: 4 Канал: 4 Значение: 4 Канал: 4 Значение: 4 Канал: 4 Значение: 4 Канал: 204Значение: 204 Канал: 2604 Значение: 2604 Канал: 26704 Значение: 26704 Канал: 26704 Значение: 26704 Канал: 26704 Значение: 26704 Канал: 267004 Значение: 267004 Канал: 2670704 Значение: 2670704

...