LabCVI常见问题及解决方法
1. 使用CVI9.0调用由VC++6.0编写的DLL,该DLLVC中调用是可以的,输出方式也是C语言的。但是在CVI中调用该DLL时,总是提示missing prototype,如何解决?
答:设置BUILD OPTION
options->Build options
c language options中取消Require function prototypes的检测
c语言listinsert函数2. CVI中如何向设计好的word表格中添加文字和数据?
答:先在表格中需要添加文字和数据的地方做一个书签,在CVI中打开该文档后,使用Word_GetProperty (currSelHandle, NULL, Word_SelectionBookmarks, CAVT_OBJHANDLE, &rangeHandle);获得书签信息,然后再向该书签处添加文字。
3. CVI中如何将波形图控件的图片放到剪贴板中?
答:首先使用GetCtrlDisplayBitmap (panel, FORCEPANEL_GRAPH, 1, &bitmap);获得波形图控件的图片,然后使用ClipboardPutBitmap (bitmap);将图片放入到剪贴板中。
4. CVI中是否支持指向函数的指针,如何实现?
答:可以实现,如下例:
int(*pmax)(int a, int b);
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
5. CVI中如何使用非NI公司的硬件产品?该公司提供了一个fp文件。
答:一般来说通常可以调用产品销售商提供的动态链接库,有些大公司也提供fp文件,该文件可以直接使用,就可以达到使用硬件的目的了。在使用前,可以直接将该文件添加入项目中,也可以在Library中定制fp文件的加载。
6. CVI中如何实现多窗口显示?
答:在创建窗口面板时需要设置窗口属性为浮动型窗口,使用LoadPanelDisplayPanel函数加载和显示窗口,窗口使用完成后需要使用DiscardPanel销毁。
7. CVI中如何实现让程序只运行一个实例?
答:需要使用WindowsSDK函数:hWnd = FindWindow(NULL,"TestForSingle");
if(hWnd != NULL)
{
MessagePopup("Warnning","程序已经运行");
return 0;
}
8. CVI中如何实现打印表格功能(输出到打印机)?
答:利用CVI中的工具包Report Generation将表格转换Word文档后,使用NIReport_Print函数直接打印就可以了,如果需要设置打印机则需要使用函数:ConfigurePrinter来配置打印机
9. CVI中如何实现自动识别系统中的NI数据采集产品?
答:首先使用DAQmxGetSystemInfoAttribute (DAQmx_Sys_DevNames, DeviceName, 10240);获得系统中的所有设备,具体的设备型号需要使用:DAQmxGetDeviceAttribute (string[i], DAQmx_Dev_ProductType, ProductType, 100);
10. CVI中如何访问SQL数据库?
答:可以有2种方法:1是使用NI的数据库连接工具包。在ODBC数据源中建立DSNDSN需要和你的数据库文件关联。设置好后就可以在程序中使用NI提供的函数进行调用了。2是使用ActiveX方式进行调用。
11. 如何在VC中调试用CVI编写的DLL?
答:首先应有VC写的调用程序。在CVI中需要进行的设置:在Specify External Process中选择调用dll的可执行文件。配置Target SettingsDebug,选择dll的目录为可执行文件所在的目录。就可以VC调试CVIDLL,调试时,会自动进入CVI环境。
12. CVI中生成DLL时,是否可以将其他的DLL(或LIB)加入到工程中来?
答:库文件可以直接加入工程中,然后直接使用函数名就可以了。DLL文件可以像通常的DLL调用一样的方式进行调用分为静态调用和动态调用。
13. 有时候在NI网站上下载的CVI范例有些是没有h文件,只有C文件、uir文件和prj文件等,当打开运行时,CVI会提示没有到*.h文件,是否要自己,那怎么办呢?
答:当打开范例时,我们可以新建一个uir文件,把原来程序面板上的控件复制并粘贴到新面板上,接着动手点击:Code>Generate>All code。这时CVI会提示要保存该未命名面板,当命名后,接着选择一个退出控件就可以生成代码了。此时已经有了相应的h文件了,然后把源C代码复制并覆盖新生成的C文件并且保存,再在刚保存的C文件里到调用之前
没有的那个h文件名将其修改过来就可以了。这时运行程序就不会再报没有h文件的错误了。
14. CVI8.5中,如何在同一板卡上的两个输出通道上同时输出不同频率的波型?
答:CVI多通道波型输出的编程方式与LabVIEW多通道波型输出的编程方式一样,都是把描述各个通道波型的一维数组合并成二维的数组,再通过写函数把二维数值输出。具体到CVI编程中,假设要输出两个不同频率的正弦波,首先要用两个sine wave函数,设置不同的频率,各产生一个一维数组,再将此两个一维数组合并成二维数组,通过DAQmxWriteAnalogF64函数将波型输出。例子可到我们的技术论坛,CVI板块下载。
15. CVI.fp文件的类属性近似C++中的类的概念么?
答:不是的,CVI中类仅说明文件在仪器驱动程序中的等级,指明其所处的层次,CVI中和C++中的类相近的概念可以理解为各种面板!
16. 如何在CVI中使用inp等低级函数?
答:CVI中是不能直接使用这种类型的函数对端口地址进行操作。需要使用CVILowLevelSupportDriverLoaded函数打开CVI对低级函数的支持。
17. 请问CVI中的事件驱动是指什么?
答:事件驱动是CVI应用程序和用户进行交互的核心原理,具体是指应用程序通过响应用户界面所发生的事件来执行代码、调用回调函数。这些事件可以是发生在面板上的对象或者是面板自身。使用LabWindows/CVI进行编程,可以生成事件驱动的代码。通过事件驱动代码,可以将用户界面中的控件连接到代码中的函数。每次对用户界面进行操作都会产生一个事件,LabWindows/CVI就会确定在何控件上发生了什么事件,如果对该控件有一个相应的回调函数,就会激活并运行该回调函数中的代码,进而响应事件。
18. 请问CVI中回调函数的参数分别有什么意义?
答:CVI中回调函数的第一个参数是控件所在的面板的句柄。第二个参数为产生事件的控件的标识符。第三个参数是所产生的事件。第四个参数是回调数据,这些回调数据被用来在回调函数之间传递数据。回调数据可以是任何类型的数据。第五和第六个参数随着事件的不同而不同。
19. LabWindows/CVI控件的四种模式有何区别?
答:1. Normal:这个控件可以由用户直接操作或者是通过编程来进行操作。但是只能够产生数值改变事件而不能产生COMMIT事件。 
2. Hot:这个控件可以由用户直接操作或者是通过编程来进行操作。用户的操作可以产生数值改变事件以及COMMIT事件。   
3. Validate:与Hot模式相似,但是CVI环境会检查面板上所有数值控件的值是否处于有效范围内,只有所有的值都有效才会产生COMMIT事件。如果有无效值存在就会弹出一个对话框,而不生成COMMIT事件。   
4. Indicator:只能做显示用,这个控件只能通过编程进行操作。用户对其的操作不会产生任何事件(没有回调函数)。
20. CVI中的事件驱动,在一个回调函数中会响应几个事件?
答:CVI中的事件,当控件响应一个鼠标按钮时它会产生几种事件,并在回调函数中执行
响应的代码。例如:当用鼠标点击开关时会产生EVENT_COMMITEVENT_VAL_CHANGED事件,这样在回调函数中就会出现执行两个不同的代码的情况。
21. CVI中如何实现系统托盘图标?
答:CVI中可以通过Programmer's Toolbox提供的System Tray Icons来实现系统托盘图标。将应用程序的图标放到托盘上去。
22. CVI中如何实现及时提示功能?(Tips)
答:CVI中为了实现Windows中当鼠标指针放到某个按钮控件上时自动出现提示,简单说明该按钮的功能。可以使用SetCtrlToolTipAttribute函数来实现该功能。
23. CVI中如何调用帮助文件?
答:CVI中调用帮助文件有两种方式。ShowHtmlHelp (, HH_DISPLAY_TOPIC, 0);SystemHelp ("", HELP_CONTENTS, 0, 0);可以根据自己编写的帮助文件来使用不同的函数。
24. 如何减少CVI程序的CPU占用率?
答:可以在Options-》Enviroment中进行设置,将Sleep Policy设置为Sleep More。或者在程序中进行设置,设置函数为:SetSleepPolicy (VAL_SLEEP_MORE)
25. CVI中如何实现将当前面板参数作为下次程序运行的缺省值使用?
答:一般情况下可以使用文件将各参数保存下来,在下次调用面板时再调用这些参数。也可以使用CVI自带的函数SavePanelStateRecallPanelState
26. CVI中如何实现进度条功能?
答:CVI中可以使用slide控件实现进度条功能。也可以使用Programmer's Toolbox里带的函数来创建进度条。
27. CVI中的TUI文件?
答:TUI文件实际上是UIR文件的文本版本,在使用时同UIR文件的调用方式相同。
28. CVI中使用控件的Tab顺序功能时如何略过某些控件?
答:将控件改变为Indicator控件,在CVITab顺序是略过显示控件的;2、将控件灰掉,CVI会略过灰掉的控件;3、将下一个控件作为活动控件,从而略过一个控件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。