【发布时间】: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