Labview如何判断RS232发送缓冲区中的数据已经发送完毕?

2019-07-17 18:16发布

如题,在labview 串口通讯中,write.vi返回成功并不代表数据已经发送完毕(write.vi 返回成功只是说明把数据写到数据缓冲区了,但没有真正发送完毕),有没有办法可以知道发送缓冲区中的数据已经发送完毕了?谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
fantek
2019-07-17 23:26
可参考VISA写入函数帮助中关于同步传输的描述:
依据不同的平台,数据传输可为同步或异步。右键单击节点,在快捷菜单中选择同步I/O模式»同步,可同步写入数据。
硬件设备同步传输数据时,调用线程在数据传输期间处于锁定状态。依据传输的速度,该操作可阻止其他需要调用线程的进程。但是,如应用程序需尽可能快地传输数据,同步执行操作可独占调用线程。
注:  在大多数应用程序中,与不多于4台仪器进行通行时使用同步调用可以获取更快的速度。与不少于5台仪器进行通信时,异步操作可使应用程序的速度显著提高。LabVIEW默认为异步I/O。

如果用异步传输模式,需要对VISA 写入缓冲区进行管理。可以用RS232的回环接线方式,测试你的发送和接收程序,如果有条件的话,可以用示波器观察。
如果想对windows下串口通信机制深入了解,可以参考如下资料:windows原理+serial driver 源码+16550d芯片资料(美国国家半导体公司)
可以用硬件流控或软件流控,解决发送数据覆盖或丢失的问题。

一周热门 更多>