分类

编程工具

LabWindows/CVI 2013破解版

LabWindows/CVI 2013破解版 免费版

大小:572 MB

语言:英文系统:WinXP, Win7, Win8, Win10, WinAll

类别:编程工具时间:2017-07-09

  labwindows cvi 2013是一款可以帮助您开发前端设备,内置多线程的开发模块,可以根据控制设备运行的方案以及设备控制的流程,定制不同的编程计划,让你可以将完成对控制系统地方开发,本软件在应用开发方面也具备一定的优势,主要针对高级的模块化仪器进行开发、也可以对控制器的某个部件进行开发,让您可以从全方面的控制系统来构建设备编程的框架,从而让管理人员可以利用LabWindows/CVI 2013构建一个多线程数据采集驱动系统,这样在设备运行的时候就会变得简单多了。

LabWindows/CVI 2013破解版 免费版

软件功能

  LabWindows/CVI 的功能强大在于它提供了丰富的函数库。利用这些库函数除可实现常规的程序设计外,还可实现更加复杂的数据采集和仪器控制系统的开发。

  数据采集。IVI库、GPIB/GPIB 488.2库、NI-DAQmx库、传统的NI-DAQ库、RS-232库、VISA库、VXI库以及NI-CAN库。

  数据分析。格式化IO库、分析库以及可选的高级分析库。

  GUI库。使用LabWindows/CVI 的用户界面编辑器可以创建并编辑图形用户界面(GUI),而使用LabWindows/CVI 的用户界面库函数可以在程序中创建并控制GUI。此外,LabWindows/CVI为GUI 面板的设计,准备了许多专业控件,如:曲线图控件、带状图控件、表头、旋钮和指示灯等,以适应测控系统软件开发的需求,利用这些控件可以设计出专业的测控程序界面。

  网络和进程间通信库。动态数据交换(DDE)库、TCP库、ActiveX库、Internet库、DIAdem连接库、DataSocket库等。

  除此之外,用户可以在CVI中使用ANSI C库中的全部标准函数。

软件特色

  通过SetTableCellRangeVals函数,尽量同时更新多个单元格。这样便能降低大批量更新单元格时的开销(overhead)。若用户希望每次更新一个单元格(例如:用户或许希望更新拥有不同数据类型的某一行),可使用SetTableCellAttribute(...,ATTR_CTRL_VAL,...)函数,而非SetTableCellVal函数。

  注: 只有当表格不是面板上的活动控件(active control)时,才会产生差异。因此,如果表格是活动控件(active control),您便需要通过编程,在更新该表格之前先激活另一控件,然后再激活该表格。用此方法更新表格,直至用户在下次调用ProcessDrawEvents之后,更新才会被显示出来。这十分适合用户进行重复升级。

  PXI是业界标准的基于PC的开放式自动化测试平台,提供了高性能的模块化仪器,包括7½位直流、26 GHz射频、集成式定时和同步功能,以及适用于验证和生产测试的高吞吐量。

  CompactRIO是高级控制与监测应用的理想选择。 借助于可重配置I/O (RIO) FPGA技术,它将坚固的嵌入式架构与实时处理和工业I/O模块相结合。

使用方法

  线程锁技术

  在程序初始化的时候,调用CmtNewLock函数来为每个需要保护的数据集合创建线程锁。这个函数返回一个句柄,用户可以使用它在后续的函数调用中指定线程锁。在访问由锁保护的数据和代码前,线程必须调用CmtGetLock函数来获取线程锁。在访问数据后,线程必须调用CmtReleaseLock函数来释放线程锁。在同一个线程中,可以多次调用CmtGetLock(不会对后续调用产生阻塞),但是用户每一次调用CmtGetLock都需要调用一次CmtReleaseLock来释放。在程序退出时,调用CmtDiscardLock函数来释放线程锁资源。下面的代码演示了如何使用LabWindows/CVI Utility Library中的线程锁来保护全局变量。

LabWindows/CVI 2013破解版 免费版

  LabWindows/CVI Utility Library中的头文件中包含了一些宏,它们提供了配合Utility Library函数使用的类型安全的封装函数。除了提供类型安全,这些宏还帮助避免了多线程编程中的其它两个常见错误。这些错误是在访问数据后忘记释放锁对象,或者是在前面没有获取锁对象时试图释放锁对象。使用DefineThreadSafeScalarVar和DefineThreadSafeArrayVar宏来创建线程安全变量和类型安全的函数供使用和访问。如果需要从多个源文件中访问线程安全变量,请在include(.h)文件中使用DeclareThreadSafeScalarVar或者DeclareThreadSafeArrayVar宏来创建访问函数的声明。DefineThreadSafeScalarVar (datatype, VarName, maxGetPointerNestingLevel)宏创建以下访问函数:

LabWindows/CVI 2013破解版 免费版

  如果需要对变量值进行设定而不需要考虑其当前值,那么请调用SetVarName函数。如果需要获得变量的当前值,请调用GetVarName函数。需要了解的一点是,在GetVarName从内存中读出变量值后而在其将变量值返回给你前,变量的值是有可能改变的。

  下面的代码显示了如何使用线程安全变量作为前面例子中提到的计数变量。

LabWindows/CVI 2013破解版 免费版

  检测对GetPointerToVarName的不匹配调用

  可以通过DefineThreadSafeScalarVar和DefineThreadSafeArrayVar的最后一个参数(maxGetPointerNestingLevel),来指定最大数目的嵌套调用。通常可以把这个参数设为0,这样GetPointerToVarName在检测到同一线程中对GetPointerToVarName的两次连续调用而中间没有对ReleasePointerToVarName进行调用时,就会报出一个运行错误。例如,下面的代码在第二次执行的时候会报出run-time error的错误,因为它忘记了调用ReleasePointerToCount函数。

LabWindows/CVI 2013破解版 免费版

  如果代码中必须对GetPointerToVarName进行嵌套调用时,那么可将maxGetPointerNestingLevel参数设为一个大于零的整数。例如,下面的代码将maxGetPointerNestingLevel参数设定为1,因此它允许对GetPointerToVarName进行一级嵌套调用。

LabWindows/CVI 2013破解版 免费版

  使用LabWindows/CVI Utility Library的线程安全队列,可以在线程间安全地传递数据。当需要用一个线程来采集数据而用另一个线程来处理数据时,这种技术非常有用。线程安全队列在其内部处理所有的数据锁定。通常说来,应用程序中的辅助线程获取数据,而主线程在数据可用时读取数据然后分析并/或显示数据。下面的代码显示了线程如何使用线程安全队列将数据传递到另外一个线程。在数据可用时,主线程利用回调函数来读取数据。

LabWindows/CVI 2013破解版 免费版

主要优势

  由于LabWindows/CVI的异步定时器仪器驱动使用Windows多媒体定时器来实现异步定时器回调函数,所以用户可指定的最小间隔是随使用的计算机不同而变化的。如果用户指定了一个比系统可用的最大分辨率还小的时间间隔,那么可能会产生不可预知的行为。不可预知的行为通常发生在设定的时间间隔小于10ms时。同时,异步定时器仪器驱动使用一个多媒体定时器线程来运行单个程序中注册的所有异步定时器回调函数。所以,如果用户希望程序并行地执行多个函数,那么NI公司推荐使用LabWindows/CVI Utility Library中的线程池函数来代替异步定时器函数。

  LabWindows/CVI的GPIB/GPIB 488.2库中,可以调用ibnotify来注册事件发生时GPIB/GPIB 488.2库调用的回调函数。你可以为每一个电路板或器件指定一个回调函数。可以为事件指定调用的回调函数。GPIB/GPIB 488.2库会创建用于执行回调函数的线程。

  在LabWindows/CVI的虚拟仪器软件构架 (VISA) 库中,你可以调用viInstallHandler函数来注册多个事件句柄(回调函数)用于在特定的ViSession 中接收VISA事件(I/O完成、服务请求等等)类型。VISA库通常创建独立的线程来执行回调函数。VISA可能会对一个进程中的所有回调函数使用同一个线程,或者对每个ViSession 使用单独的线程。你需要为某个指定的事件类型调用viEnableEvent函数以通知VISA库调用已注册的事件句柄。

  在LabWindows/CVI VXI库中,每个中断或回调函数类型都有自己的回调注册和使能函数。例如,为了接收NI-VXI中断,你必须调用SetVXIintHandler和EnableVXIint函数。VXI库使用自己创建的独立线程来执行回调函数。对于同一进程中所有的回调函数,VXI都使用相同的线程。

∨ 展开

网友评论

我要跟帖
取消
所有评论 共 0