学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
项目中解决的问题
最近遇到一个使用stm32单片机多路采集信号的项目,还需要在上位机进行波形的查看,信号算法的处理,初步定为使用labview编写上位机程序进行处理。下面是我学习的笔记。
LabVIEW中提供了两个直接访问底层设备的VI,即In Port.vi和Out Port.vi,这两个VI提供直接对I/O端口进行读写操作的功能,利用这一功能,可以实现简单的单点数据采集功能。
I/O端口函数包括两个函数:读端口函数节点(In Port.vi)和写端口函数节点(Out Port.vi),这两个节点位于【函数选板】→【互连接口】→【I/O端口】子选板。
In Port.vi的功能是从一个指定的16位I/O端口地址读取一个有符型整数,这个节点仅识别16位的端口地址,
address输入端口:通过该端口指定16位的I/O端口地址。
data read输出端口//:该端口返回从指定端口地址读取的数据。In Port.vi是一个多态性的VI,即该VI可以返回1个字节(byte,8 bits)、两个字节或4个字节的数据。用户可以通过In Port.vi的图标下端的下拉菜单(多态VI选择器)选择返回数据的类型。
不能使用In Port.vi从内存的随机位置读取数据,这点需要用户注意。Out Port.vi的功能是向一个指定的16位I/O端口地址写入一个有符型整数,这个节点仅接受16位的端口地址。
address输入端口:通过该端口指定16位的I/O端口地址。write value输入端口//:设置写入指定端口的数值。该VI也是一个多态性的VI,用户同样可以通过VI图标的下拉菜单(多态VI选择器)选择写入数据的类型。
对于结构、功能简单的数据采集设备,直接读写端口能够提高数据的传输速率。但是对于那些结构复杂、功能繁多的数据采集设备,使用直接端口读写方式控制设备会变得比较复杂而且容易出错,维护、修改也比较困难。
LabVIEW的自带例程里面提供了一个使用In Port.vi和Out Port.vi读写LPT并行口的实例Parallel Port Read and Write Loop.vi,该实例位于…\National Instruments\LabVIEW 8.2\examples\portaccess\parallel port examples.llb目录下面,用户可以参考。
在LabVIEW中有很多处理事件的方法,它们中的大部分都涉及并行执行路径问题,所谓并行执行路径就是每一条路径都负责一件顺序或非顺序(事件驱动)事件。因为LabVIEW采用了固有的并行运行方式,用户可以创建任意重并行循环或VI,它们会以某种分时共享的方式进行运行。但是在处理同一时刻发生的事件,以及避免冲突和错乱的执行过程时,就需要应用到程序的同步化技术。
LabVIEW具有很多强大的同步化功能,且有标准的技术可以处理并行程序设计与事件处理过程中所遇到的问题,如轮询(Polling)技术、通知器操作技术(Notification)、集合点技术(Rendezvous)、事件发生技术(Occurrence)等。与这些同步技术有关的各种节点位于【函数选板】→【编程子选板】→【同步】子选板。
其中,事件发生技术也是一种同步机制,它允许LabVIEW程序的并行部件之间在事件发生时相互通知对方,它实际上是一种软件触发器。使用事件的主要原因是避免查询操作,从而减少系统开销。
LabVIEW中的事件发生技术包括3个事件发生函数,分别为Generate Occurrence(事件发生)、Wait on Occurrence(等待事件发生)和Set Occurrence(设置事件发生)