在运动控制应用中,我如何从板载内存中将数据流盘到上位机中?



主要软件:
主要软件版本: 5.2
主要软件修正版本: N/A
次要软件: N/A

问题: 我有一个用来做高速捕获的板载程序。当发送一个触发的时候,板载的程序通过编码器捕获位置并把信息存在变量中。我希望建立一个包含所有位置信息的数组但是并没有足够的板载变量来做这个。我想将这些数据流盘到主机中(比如通过LV,LW/CVI, VB, VC++)并在主机中建立数组,可以这样操作么?

解答:

这种情况的处理办法是使用运动控制器的返回数据缓冲器(RDB),通过这个可以将一些信息存储在寄存器中并通过希望的编程语言读取。在LabVIEW中处理的方法概括如下:

 --- 在板载程序中---

  1. 获取数据并将其存储在一个变量中,这个变量的输入是'returnVector' ,指向板载变量。
  2. 之后调用'Read Variable' 函数,'returnVector'输入数据类型是"xFF"(x是16进制的意思,FF是十进制的255),这会通知板载的程序将数据放在RDB中。
  3. 继续程序的其他流程。


注意:如果您不希望使用板载变量进行存储,可以在采集函数中(比如读取高速的捕获)将 'returnVector' 的输入设置为 "xFF"。

--- 在labVIWE编程中 ---

  1. 放置一个while循环的结构。
  2. 放置 'Read Return Data Buffer' 函数。输出是一个数组,获得控制器中队列输出的数据。
  3. 应该注意一下数据的类型;RDB是16位的数据,但是在某些情况下,返回的数据是32位。NI-Motion驱动会将32位数据分成两个分开的16位单元。对于64位宽的数据,会将其分成四个连续的单元。


    一旦您读取RDB,它将被刷新这些单元会被重置位0。这意味着在while循环的下一次操作中,当您调用 'Read Return Data Buffer' 函数并且板载程序还没有发送任何数据的时候,您会读到一系列的数据0。您可以通过比较单元的值来解决这个问题。如果读到的数据时0,忽略本次循环并继续下一个循环直到获得新的数据。

    其他的情况是数据出队列的速度快于您读取数据的速度。在这种情况下,数据在数组中的存储方式将和FIFO类似,这样新过来的数据在第一个单元中,之前的数据被放在后面的单元中。您需要核对数据结束的地址从而读取所有的值。

    这种向主机流盘的方法是唯一的,并且在某些应用下是有价值的。在大多数情况下,板载变量的数量已经足够来存储所有的数据并且一旦运动程序结束后数据可以从主机中读回。
     


相关链接:

附件:





报告日期: 04/16/2003
最近更新: 08/09/2011
文档编号: 2WFDG8XL