Я пытаюсь написать библиотеку для чтения данных с последовательного устройства, Датчик газа Mipex-02. К сожалению, мой код, похоже, не открывает последовательное соединение должным образом, и я не могу понять, почему.
Полный исходный код доступен на GitHub, в частности, вот конфигурация последовательного соединения:
MipexSensor::MipexSensor(string devpath) {
if (!check_dev_path(devpath))
throw "Invalid devpath";
this->path = devpath;
this->debugout_ = false;
this->sensor.SetBaudRate(SerialStreamBuf::BAUD_9600);
this->sensor.SetCharSize(SerialStreamBuf::CHAR_SIZE_8);
this->sensor.SetNumOfStopBits(1);
this->sensor.SetParity(SerialStreamBuf::PARITY_NONE);
this->sensor.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);
this->last_concentration = this->last_um = this->last_ur = this->last_status = 0;
cout << "Connecting to "<< devpath << endl;
this->sensor.Open(devpath);
}
Я думаю, что значение перечислений здесь достаточно очевидно. Значения взяты из инструкции по эксплуатации:
Характеристики UART:
обменный курс — 9600 бод,
8-битное сообщение,
1 стоповый бит,
без проверки на паритет
Сначала я использовал перехват для проверки, и он работал отлично. Но когда я попытался подключиться к устройству напрямую, я ничего не мог прочитать. светодиод RX мигает на устройствах, поэтому программе удается что-то отправить, но, в отличие от перехвата, светодиод TX никогда не мигает.
Поэтому я не знаю, отправляет ли он данные неправильно, не отправляет ли он все это, и я даже не могу прослушать соединение, поскольку это происходит только тогда, когда перехват не находится в середине. Командная строка Interceptty interceptty -s 'ispeed 9600 ospeed 9600 -parenb -cstopb -ixon cs8' -l /dev/ttyUSB0
(параметры -s передаются в stty), что теоретически соответствует параметрам, установленным в коде.
Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …