【问题标题】:Serial communication crashes in LabVIEWLabVIEW中的串行通信崩溃
【发布时间】:2017-11-29 03:44:16
【问题描述】:

我正在使用 LabVIEW(7.0 版)通过串行连接控制设备。它使用 USB 连接,并作为虚拟串行端口安装在计算机上(运行 Windows XP)。当我的程序发送命令时,我的设备有时会崩溃,并且在超时之前它无法接受任何更多的输入(设备本身也停止工作)。

我使用Portmon 查看了串行端口流量。每当设备崩溃时,串行驱动程序就会四次发送我使用我的程序发送的命令,而不是一次,中间有一个 IOCTL_SERIAL_GET_COMMSTATUS 命令。我看不到最后一个命令返回了什么,但我认为之前的通信中发生了一些事情。我认为我的端口配置并不完全正确,但我不知道如何或为什么。每次我想向设备写入内容时,我都会打开和关闭与设备的连接。

为了完整起见:它的波特率为 9600,8 位,无奇偶校验,1 个停止位,无流量控制。我知道这些参数的正确设置取决于设备,但制造商没有提供任何推荐的设置。

【问题讨论】:

  • 除了 Portmon,您还可以使用 NI I/OTrace -- digital.ni.com/public.nsf/allkb/… 获得串行通信的 LabVIEW 透视图。以红色显示的行表示错误情况。
  • 为了帮助您,您需要提供更具体的信息。您连接到什么设备,您使用什么驱动程序,您能否发布您的 labview 代码的摘录,即使按照建议它可能不是问题。您是否有其他程序使用相同的驱动程序没有此问题。
  • @D.J.Klomp 具体来说,该设备是一个射频发生器(由 WindFreak 制造,型号为 SynthUSBii)。它包含一个 ATmega32U2 微控制器。正如我在下面所描述的,在每个命令中添加一个回车符解决了我的问题,因此它不依赖于控制设备的程序。我意识到这个问题可能有点过于具体,无法在这里处理,因为我猜它很大程度上取决于微控制器的编程方式。
  • 很高兴您的问题得到了解决。看到这解决了我猜你使用了错误的终止字符的问题。 Labview 标准使用换行符(\n 或 0xA)作为终止字符。尝试将此切换为回车符(0xD),看看是否不需要添加额外的 CR。一些串行设备需要换行和回车才能发送。比你这样做的方式是正确的,因为labview不支持发送多个终止字符。

标签: serial-port labview


【解决方案1】:

驱动程序是某种DLL?如果是这样,这很可能是问题的根源,您可能需要联系驱动程序的作者。 LabVIEW 确实存在崩溃错误,但迄今为止,简单通信应用程序中最常见的崩溃源是有错误的第三方 DLL。

换句话说,我怀疑这是一个 LabVIEW 问题,如果你编写一个 C 程序来与这个驱动程序对话,你也会遇到同样的困难。我只知道您在此处发布的有关您的系统的内容,但是经过多年追查此类问题后,我将从设备制造商/驱动程序作者开始。

如果您有相反的证据,请分享。

【讨论】:

  • 如果我使用程序通过串行直接与我的设备通信,如果我一个接一个地快速发送多个命令,它也会崩溃。我发现如果我在每个命令的末尾添加一个回车,就不会发生这种情况。当我将回车添加到我的 LabVIEW 程序发送的命令中时,这个问题就解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
相关资源
最近更新 更多