Проблемы с высокой скоростью передачи данных через последовательный порт - PullRequest
0 голосов
/ 09 января 2019

Я использую пирометры Optris серии CT. С точки зрения аппаратного обеспечения они используют интерфейс USB, а с точки зрения программного обеспечения они используют связь через COM-порт. Раньше я работал с более старыми версиями этих пирометров, и все было хорошо. Но теперь у меня есть новое устройство, и мой код (C ++ .NET) теперь работает с ним. Используя Free USB анализатор, я вижу, что данные отправляются на устройство, но они не реагируют ни на какие команды.

То, что я уже проверил (внимательно!):

  1. Я использую правильные цифровые команды
  2. Я использую правильные настройки последовательного порта, и порт открывается
  3. Оба программных продукта производителя работают нормально! Итак, устройство, кабели и прочее в порядке
  4. Служба поддержки Optris сказала мне, что с точки зрения разработчика ничего не изменилось по сравнению с предыдущими устройствами

Единственное, что отличает старые устройства от новых, это скорость передачи данных. Раньше это было 9600, а теперь это 115200. Так что, похоже, проблема может быть в этом.

Вот также части моего кода:

В конструкторе класса:

sp = gcnew SerialPort(ComPort, 115200, Parity::None, 8, StopBits::One);

Когда я начинаю приобретать:

sp->DtrEnable = true;
sp->DataReceived += gcnew SerialDataReceivedEventHandler(this, &Pyrometer::OnDataReceived);
sp->BaseStream->Flush();
ThreadPool::QueueUserWorkItem(gcnew WaitCallback(this, &Pyrometer::callBack), sp);

В обратном вызове:

Thread::Sleep(500);
sp->Write(gcnew array<wchar_t> {0x52, 0x01, 0x53}, 0, 3); // Burst mode

Я также пытался увеличить время пробуждения - безрезультатно.

Кто-нибудь знает, в чем может быть проблема? Я потерял много времени на эту проблему. Большое спасибо!

1 Ответ

0 голосов
/ 11 января 2019

В конце концов я нашел удивительное решение. Я изменил порт устройства с COM4 на COM3 (как в системе, так и в коде). И это начало работать. Раньше он не работал даже с остановленными антивирусами и брандмауэрами. Кажется, это ошибка в Windows, или я даже не знаю, что это было. Это так странно.

...