LabCVI常见问题及解决方法.doc_第1页
LabCVI常见问题及解决方法.doc_第2页
LabCVI常见问题及解决方法.doc_第3页
LabCVI常见问题及解决方法.doc_第4页
LabCVI常见问题及解决方法.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LabCVI常见问题及解决方法1. 使用CVI9.0调用由VC+6.0编写的DLL,该DLL在VC中调用是可以的,输出方式也是C语言的。但是在CVI中调用该DLL时,总是提示missing prototype,如何解决?答:设置BUILD OPTION在options-Build optionsc language options中取消Require function prototypes的检测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中如何实现多窗口显示?答:在创建窗口面板时需要设置窗口属性为浮动型窗口,使用LoadPanel和DisplayPanel函数加载和显示窗口,窗口使用完成后需要使用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 (stringi, DAQmx_Dev_ProductType, ProductType, 100);10. CVI中如何访问SQL数据库?答:可以有2种方法:1是使用NI的数据库连接工具包。在ODBC数据源中建立DSN。DSN需要和你的数据库文件关联。设置好后就可以在程序中使用NI提供的函数进行调用了。2是使用ActiveX方式进行调用。11. 如何在VC中调试用CVI编写的DLL?答:首先应有VC写的调用程序。在CVI中需要进行的设置:在Specify External Process中选择调用dll的可执行文件。配置Target Settings为Debug,选择dll的目录为可执行文件所在的目录。就可以VC调试CVI的DLL,调试时,会自动进入CVI环境。12. 在CVI中生成DLL时,是否可以将其他的DLL(或LIB)加入到工程中来?答:库文件可以直接加入工程中,然后直接使用函数名就可以了。DLL文件可以像通常的DLL调用一样的方式进行调用分为静态调用和动态调用。13. 有时候在NI网站上下载的CVI范例有些是没有h文件,只有C文件、uir文件和prj文件等,当打开运行时,CVI会提示没有找到*.h文件,是否要自己找,那怎么办呢?答:当打开范例时,我们可以新建一个uir文件,把原来程序面板上的控件复制并粘贴到新面板上,接着动手点击:CodeGenerateAll 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_COMMIT和EVENT_VAL_CHANGED事件,这样在回调函数中就会出现执行两个不同的代码的情况。21. CVI中如何实现系统托盘图标?答:在CVI中可以通过Programmers 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占用率?答:可以在OptionsEnviroment中进行设置,将Sleep Policy设置为Sleep More。或者在程序中进行设置,设置函数为:SetSleepPolicy (VAL_SLEEP_MORE)。25. 在CVI中如何实现将当前面板参数作为下次程序运行的缺省值使用?答:一般情况下可以使用文件将各参数保存下来,在下次调用面板时再调用这些参数。也可以使用CVI自带的函数SavePanelState和RecallPanelState。26. CVI中如何实现进度条功能?答:CVI中可以使用slide控件实现进度条功能。也可以使用Programmers Toolbox里带的函数来创建进度条。27. CVI中的TUI文件?答:TUI文件实际上是UIR文件的文本版本,在使用时同UIR文件的调用方式相同。28. CVI中使用控件的Tab顺序功能时如何略过某些控件?答:将控件改变为Indicator控件,在CVI中Tab顺序是略过显示控件的;2、将控件灰掉,CVI会略过灰掉的控件;3、将下一个控件作为活动控件,从而略过一个控件。29. 如何在CVI中实现Flash文件的播放?答:首先需要安装FLASH PLAYER的ActiveX控件。在PANEL上面添加ActiveX控件,在向导中添加SHOCKWAVEFLASH控件。然后使用CVI的自动生成程序框架代码,在向导中会自动生成相应的FP文件。可以根据FP文件提供的函数进行编程了。GetObjHandleFromActiveXCtrl获得ActiveX控件的句柄,ShockwaveFlashObjects_IShockwaveFlashSetMovie设置要播放的文件ShockwaveFlashObjects_IShockwaveFlashPlay播放文件ShockwaveFlashObjects_IShockwaveFlashStop停止播放30. CVI中如何实现颜色选择对话框?答:可以使用ColorChangePopup。具体例子代码:static ColorChangeEntry sEntry; static ListType colorList = 0; static int iResult; colorList = ListCreate(sizeof(ColorChangeEntry); sE = 1 Color; sEntry.color = VAL_RED; sEntry.defaultColor = VAL_BLUE; ListInsertItem(colorList, &sEntry, END_OF_LIST); sE = 2 Color; sEntry.color = VAL_GREEN; sEntry.defaultColor = VAL_BLUE; ListInsertItem(colorList, &sEntry, END_OF_LIST);sE = 3 Color; sEntry.color = VAL_BLUE; sEntry.defaultColor = VAL_YELLOW; ListInsertItem(colorList, &sEntry, END_OF_LIST); iResult = ColorChangePopup(颜色选择, colorList, 1, 0,0); ListDispose(colorList);31. CVI中如何使用UDP协议?答:CVI中没有带有关于UDP协议的fp文件,需要使用winsock来写。32. CVI下如何编写多线程程序?答:可以使用函数模版中的Utility Library目录下的函数,首先用CmtNewThreadPool (int Maximum_Number_of_Threads, int *Pool_Handle)函数创建一个线程池(也可以使用程序默认的线程池),然后使用CmtScheduleThreadPoolFunction (int Pool_Handle, ThreadFunctionPtr Thread_Function, void *Thread_Function_Data, int *Thread_Function_ID)函数来指定每个线程的回调函数,以实现不同的操作。最后,记住一定要在结束程序的时候调用CmtDiscardThreadPool (int Pool_Handle)函数释放这些线程的系统资源。33. 在LabWindows/CVI中如何将自己编写的函数放在函数模版中,使它可以像函数模版中原有的函数那样使用?答:先新建一个Function Tree,然后在这个Function Tree下新建一个Instrument,并在这个Instrument下建立函数分类(将函数分类管理),再建立一个Function Panel,在上面添加输入输出控件和帮助信息,(如果这个函数没有使用到数采硬件,那么在Option下面将IVI/VXIplug&play Style前的勾去掉)然后选择Tools下的Generate New Source for Fuction Tree,最后只要在自动生成的*.c文件中添加函数的代码并保存,然后就可以像函数面板中的其他函数一样调用了。(下次使用LabWindows/CVI时需要重新载入)34. 在没有.LIB和.H文件时,CVI怎么调用DLL?答:使用SDK中的LoadLibary和GetProcAddress以及FreeLibrary可以实现动态DLL的调用。35. CVI可以做不规则界面吗?答:这是可以的,可以使用SDK函数实现,VC等编程语言实际上是使用SDK封装后的函数,使用SDK函数编程比较麻烦。36. 如何处理PANEL的最大化和最小化问题?答:有EVENT_PANEL_SIZE事件可以获得,然后可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论