串口波特率高的问题

时间:2019-01-09 14:41:48

标签: .net visual-c++ serial-port hardware

我正在使用CT系列的Optris高温计。就硬件而言,他们使用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 :(得分:0)

最终,我找到了一个令人惊讶的解决方案。我将设备的端口从COM4更改为COM3(在系统和代码中)。它开始起作用。以前,即使停止了防病毒和防火墙,它也无法正常工作。这似乎是Windows中的错误,或者我什至不知道那是什么。太奇怪了。