Serial port LabVIEW中的串行通信崩溃

Serial port LabVIEW中的串行通信崩溃,serial-port,labview,Serial Port,Labview,我使用LabVIEW(7.0版)通过串行连接控制设备。它使用USB连接,并作为虚拟串行端口安装在计算机上(运行Windows XP)。当我的程序发送命令时,我的设备不时会崩溃,并且在超时之前,它无法接受更多的输入(设备本身也停止工作) 我已经研究了使用的串行端口流量。每当设备崩溃时,串行驱动程序都会发送我使用程序发送的命令四次,而不是一次,中间是IOCTL_serial_GET_COMMSTATUS命令。我看不到最后一个命令返回什么,但我假设在前面的通信中发生了一些事情。我认为我的端口配置不完全

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

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


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

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

换句话说,我怀疑这是一个LabVIEW问题,如果你编写一个C程序来与这个驱动程序对话,你也会遇到同样的困难。我只知道你在这里发布的关于你的系统的信息,但是在多年的研究之后,我会从设备制造商/驱动程序作者开始


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

除了Portmon,您还可以使用NI I/OTrace--获得串行通信的LabVIEW透视图。显示为红色的行表示错误情况。为了帮助您,您需要提供更具体的信息。你连接到什么设备,你使用什么驱动程序,你可以发布你的labview代码的摘录,即使这可能不是问题所在。您是否有另一个程序使用相同的驱动程序没有此问题。@D.J.Klomp具体来说,该设备是一个射频发生器(由WindFreak制造,型号为SynthUSBii)。它包含一个ATmega32U2微控制器。正如我在下面所描述的,向每个命令添加回车符解决了我的问题,因此它不依赖于控制设备的程序。我意识到这个问题可能有点太具体了,不能在这里讨论,因为我想它很大程度上取决于微控制器的编程方式。很高兴你的问题得到了解决。看到这解决了问题,我猜您使用了错误的终止字符。Labview标准使用换行符(\n或0xA)作为终止字符。尝试将其切换为回车字符(0xD),并查看是否不需要添加额外的CR。某些串行设备需要换行和回车才能发送。因为labview不支持发送多个终止字符,所以这种方法是正确的。如果我使用一个程序通过串行方式直接与我的设备通信,如果我一个接一个地快速发送多个命令,它也会崩溃。我发现,如果在每个命令的末尾添加回车符,则不会发生这种情况。当我将回车添加到LabVIEW程序发送的命令时,这个问题得到了解决。