摘 è¦ï¼šä»‹ç´¹äº†åœ¨VBå’ŒLabview平臺下,利用Labview的強大儀器驅(qÅ«)動和實驗儀器圖形顯示ã€VBçš„å¯è¦–化編程完æˆå‹å¥½çš„用戶界é¢é€²è¡Œæ··åˆç·¨ç¨‹ï¼Œå¯¦ç¾(xià n)了應用系統(tÇ’ng)的無縫集æˆï¼Œè±å¯Œäº†è»Ÿä»¶çš„æ¸¬é‡åŠŸèƒ½ï¼Œç¸®çŸäº†ç¨‹åºçš„開發(fÄ)周期。
é—œ(guÄn)éµè©žï¼šVB;虛擬儀器 ;自動化控制;數(shù)據(jù)采集
ABSTRACT:The article introducethe characteristic of LabVIEW,the development. In addition, it analyzes three methods to automatization of the instrument with computer by using LabVIEW language and VB here.From the example of E5262A,it is a good way to integrative design of data acquisition,data processing and analyse.
KEYWORDS:VB,Virtual Instrument(VI);Automatization ;Data Acquisition
1 引言
  虛擬儀器(簡稱為VI)的開發(fÄ)ç’°(huán)境有很多,但NIå…¬å¸çš„LabVIEW最為著å。LabVIEWä¸åŒäºŽåŸºäºŽæ–‡æœ¬çš„編程語言(如Fortranå’ŒC),是一種圖形編程語言——通常稱為G編程語言,其編程éŽç¨‹æ˜¯é€šéŽåœ–形符號æè¿°ç¨‹åºçš„行為。LabVIEW使用的是科å¸å®¶å’Œå·¥ç¨‹å¸«å€‘所熟悉的術(shù)語,還使用了很易于è˜åˆ¥çš„æ§‹(gòu)é€ G語言的圖形符號,å³ä½¿å…·æœ‰å¾ˆå°‘編程經(jÄ«ng)é©—çš„äººä¹Ÿèƒ½å¸æœƒä½¿ç”¨LabVIEW。而VB作為å¯è¦–化編程工具,ä¸åƒ…簡單容易上手,而且功能強大,å¯ä»¥é–‹ç™¼(fÄ)å‹å¥½çš„用戶使用界é¢ï¼ŒåŒæ™‚通éŽActiveX控件ã€DLL(動態(tà i)éˆæŽ¥åº«ï¼‰ç‰å¤šç¨®æ–¹æ³•實ç¾(xià n)與其他軟件的è¯(lián)åˆé–‹ç™¼(fÄ)。
  Microsoft把所有以COM為基礎(chÇ”)的技術(shù)çµ±(tÇ’ng)稱為ActiveX技術(shù)。自動化是大多數(shù)ActiveX技術(shù)的基礎(chÇ”),它å¯ä½¿è§£é‡‹æ€§çš„å®èªžè¨€ï¼ˆå¦‚VBï¼‰èƒ½å¤ åœ¨ä¸äº†è§£æ‡‰ç”¨ç¨‹åº?qÅ«)å´¿F(xià n)細節(jié)的情æ³ä¸‹æŽ§åˆ¶è‡ªå‹•化å°è±¡ã€‚Labview實ç¾(xià n)了ActiveX自動化æœå‹™æ”¯æŒï¼Œåœ¨VB下通éŽActiveX自動化接å£å¯å°‡Labview作為Visual Basic語言的一個ActiveX部件調(dià o)用。
  本文以Agilentå…¬å¸çš„E5262A儀器為例,通éŽLabviewå’ŒVBæ··åˆç·¨ç¨‹ï¼Œå¯¦ç¾(xià n)了多種數(shù)據(jù)采集和自動化控制系統(tÇ’ng)。
2 程åºè¨(shè)計
  程åºè¨(shè)計以VB作為編程界é¢ï¼ŒåŒæ™‚調(dià o)用Labview的圖形顯示控件,而動態(tà i)éˆæŽ¥åº«å‰‡è¦ä½¿ç”¨Winçš„Kernel32.dll,以åŠLabviewçš„Gpib32.dllã€Visa32.dllã€å„€å™¨é©…(qÅ«)å‹•å®‰è£æ™‚生æˆçš„E5260_32.dllç‰ã€‚ç¨‹åºæµç¨‹åœ–如下圖所示。
  首先安è£å„€å™¨è‡ªå‹•的驅(qÅ«)動庫,接å£ä¸€èˆ¬é‡‡ç”¨é€šç”¨çš„GPIB標準,ä¸åƒ…數(shù)據(jù)ã€å‘½ä»¤å‚³è¼¸é€Ÿåº¦å¿«ï¼Œè€Œä¸”一張GPIBå¡èƒ½å¤ åŒæ™‚控制最多16臺儀器。儀器驅(qÅ«)動安è£åŽï¼Œæœƒç”Ÿæˆä¸€å€‹ä»¥å„€å™¨ç‚ºåçš„DLL文件。å¯ä»¥åˆ©ç”¨Labviewçš„MAXé€²è¡ŒæŽ¥å£æŽƒæï¼Œç™¼(fÄ)ç¾(xià n)æ–°å¢žåŠ çš„å„€å™¨ã€‚å®‰è£LabviewåŽï¼Œåœ¨ç³»çµ±(tÇ’ng)目錄下有g(shù)pib32.dll文件。
  其次當電腦ä¸å®‰è£äº†LabviewåŽï¼Œåœ¨VB的工程引用ä¸é¸å–所需è¦çš„庫文件,其ä¸åŒ…括了Agilentçš„VISA庫文件;在控件引用ä¸ï¼Œé¸ä¸National Instrumentå…¬å¸çš„CWï¼ˆæ³¢å½¢é¡¯ç¤ºï¼‰ç‰æŽ§ä»¶;Microsoft的通用å°è©±æŽ§ä»¶ã€‚這樣就å¯ä»¥ç›´æŽ¥ä½¿ç”¨NIå…¬å¸Labview的控件了。在VB工程ä¸ï¼Œæ·»åŠ å„€å™¨çš„å‹•æ…‹(tà i)éˆæŽ¥åº«ï¼ˆDLLï¼‰è²æ˜Žï¼ŒåŒ…括將è¦ä½¿ç”¨çš„常é‡å—符ã€GPIBã€VISA接å£åº«å‡½æ•¸(shù)ã€å„€å™¨ï¼ˆE5262A)庫函數(shù)ã€ä»¥åŠç³»çµ±(tÇ’ng)çš„Kernel32庫函數(shù)ç‰ç‰ã€‚如:Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Longç‰ç‰ã€‚
  程åºè¨(shè)計ä¸é¦–先出ç¾(xià n)ç”¨æˆ¶é¸æ“‡ç•Œé¢ï¼Œé¸æ“‡æ‰€éœ€è¦çš„æ¸¬é‡æ–¹å¼ï¼Œé€²å…¥ä¸‹ä¸€ç•Œé¢ï¼Œå¡«å¯«æ¸¬é‡åƒæ•¸(shù),程åºé€²è¡Œå„€å™¨åˆå§‹åŒ–ï¼Œæ ¹æ“š(jù)é€å…¥?yún)?shù)進行測試,測試çµ(jié)果由Labview控件顯示,用戶指定文件ä¿å˜ä¿¡æ¯å°‡æ•¸(shù)據(jù)ä¿å˜åˆ°æ–‡ä»¶ä¸ã€‚
  VBè‡ªå¸¶äº†æ™‚é˜æŽ§ä»¶Timer,但時間é‡ç´šæ˜¯æ¯«ç§’ï¼Œå¿«é€Ÿæ¸¬é‡æˆ–者åå¾©åˆ‡æ›æ¸¬é‡ç‹€æ…‹(tà i)æ™‚ä¸æ–¹ä¾¿ï¼Œç¨‹åºä¸é‡‡ç”¨äº†Winçš„API函數(shù),通éŽèª¿(dià o)用Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)函數(shù)ï¼Œæ›´åŠ æ–¹ä¾¿çš„å°ç¨‹åºé€²è¡ŒæŽ§åˆ¶ã€‚
  E5262數(shù)據(jù)采集和自動測é‡è¦æ±‚:測é‡ä¸€èˆ¬ç‚ºä¸‰æ¥µç®¡çš„電壓電æµè®ŠåŒ–曲線和æ¼é›»æµï¼Œå› æ¤è¦åŠ å…¥è¼¸å…¥é›»å£“å€¼ä¸€ã€é›»å£“二作為兩者間的電壓值,如使用共發(fÄ)射極時,å¯ä»¥æ¸¬é‡ä¸åŒVce電壓值時,Vbeçš„é›»æµæ›²ç·šã€‚å³å…ˆå›ºå®šVce的電壓值,改變Vbe值,得到ä¼å®‰æ›²ç·šã€‚
[align=center]

圖1ã€PNP三極管示æ„圖[/align]
ã€€ã€€æ ¹æ“š(jù)å¯¦é©—è¦æ±‚è¨(shè)計數(shù)據(jù)采集模å¼ç‚ºä»¥ä¸‹å¹¾ç¨®ï¼š
  模å¼1:固定通é“一,二的電壓,å³å›ºå®šVceã€Vbe值,測é‡é›»æµIbe。
  模å¼1:固定通é“二的輸出電壓,å³å›ºå®šVceï¼Œä»¥ä¸‰è§’æ³¢å½¢æ–¹å¼æ”¹è®Šé€šé“一(å³Vbe)的輸出電壓,測é‡é›»æµIbe。
  模å¼2:固定通é“一的輸出電壓,å³å›ºå®šVbe,以三角波形改變通é“二(å³Vce)的輸出。測é‡é›»æµIbe。
[align=center]

圖2 ç¨‹åºæµç¨‹åœ–[/align]
  數(shù)據(jù)ä¿å˜æ ¼å¼è¦(guÄ«)范為數(shù)據(jù)åºåˆ—號ã€å¯¦é©—日期ã€é‡‡é›†æ™‚é–“ã€é€šé“一電壓值ã€é€šé“二電壓值ã€é‡‡é›†é›»æµå€¼ã€‚
  主è¦ç¨‹åºä»£ç¢¼èªªæ˜Žï¼š
  ReDim OnePeroI((CInt((vdmax - vdmin) / vdstep)) * CInt(tspotcount.Text)) //æ ¹æ“š(jù)æ¸¬é‡æ•¸(shù)據(jù)è¦æ±‚å‹•æ…‹(tà i)分é…空間
  For vg = vgmin To vgmax Step vgstep //進行三角波電壓輸出循環(huán)
  For vd = vdmin To vdmax Step vdstep//進行三角波電壓輸出循環(huán)
  If Option1.value = True Then //åˆ¤æ–·ä½¿ç”¨é€šé“æ¸¬é‡é¡žåž‹
  If Combo1.ListIndex = 0 Then//判斷輸入類型,電æµé‚„是電壓
  ret = age5260_force(vi, pins(0), age5260_VF_MODE, 2, vd, idcomp, 0)
  End If
  End If
  If RunorStop = True Then //是å¦è¢«ç”¨æˆ¶å¼·è¡Œçµ‚æ¢æ¸¬é‡
  test_stopmeas //儀器è¨(shè)置清零
  Exit Sub //退出
  Else
  spot_meas //進行測é‡
  OnePeroI(CurrentIndex) = meas //ä¿å˜æ•¸(shù)據(jù)到數(shù)組
  Sleep Sleeptime //å»¶é²ï¼ŒæŽ§åˆ¶é‡‡ç”¨é€Ÿçއ
  End If
  CWGraph1.PlotY OnePeroI //Labview控件顯示圖形
  Next vd//通é“循環(huán)
  CWGraph1.ClearData //圖形更新
  Next vg//通é“循環(huán)
3 測試實例ã€çµ(jié)果和討論
[align=center]

圖3 基于Labviewå’ŒVB儀器采集自動化控制界é¢[/align]
  程åºåœ¨Labview7.1å’ŒVB6.0軟件下,系統(tÇ’ng)為Windows XPé‹è¡Œæ¸¬è©¦é€šéŽã€‚儀器使用的是Agilentå…¬å¸çš„E5262A,實驗測é‡çš„æ˜¯ä¸‰æ¥µç®¡åœ¨ä¸åŒå壓下的電æµå€¼æ›²ç·šï¼Œç¨‹åºä¸å¯ä»¥ç”±è‡ªå®šç¾©çš„函數(shù)è¨(shè)置任æ„形狀的輸出電壓值。çµ(jié)果表明程åºä¸èƒ½å¿«é€Ÿçš„自動化測é‡é‡‡é›†æ•¸(shù)據(jù),將采集的ä¸åŒå°æ¯”åœ–å½¢å¯¦æ™‚é¡¯ç¤ºï¼Œé‚„èƒ½å¤ é€²è¡Œåˆæ¥çš„æ•¸(shù)據(jù)處ç†ï¼Œæ¥µå¤§çš„æ–¹ä¾¿äº†å¯¦é©—的進行。
4 çµ(jié)æŸèªž
  本文的創(chuà ng)新點:
  (1)進行基于VBå’ŒLabviewçš„è¯(lián)åˆæ··åˆç·¨ç¨‹ï¼Œï¼Œåˆ©ç”¨Labview的強大儀器驅(qÅ«)動和實驗儀器圖形顯示ã€VBçš„å¯è¦–化編程完æˆå‹å¥½çš„用戶界é¢é€²è¡Œæ··åˆç·¨ç¨‹ï¼Œå¯¦ç¾(xià n)了應用系統(tÇ’ng)的無縫集æˆï¼Œè±å¯Œäº†è»Ÿä»¶çš„æ¸¬é‡åŠŸèƒ½ï¼Œç¸®çŸäº†ç¨‹åºçš„開發(fÄ)周期。
  (2)充分的利用了AcitiveX控件和DLL(動態(tà i)éˆæŽ¥åº«ï¼‰ç‰å¤šç¨®æ–¹æ³•,ä¸åƒ…èƒ½å¤ æ»¿è¶³å¯¦é©—æ¸¬é‡è¦æ±‚,還增強了儀器的測é‡åŠŸèƒ½ï¼Œå……åˆ†çš„ç™¼(fÄ)æ®äº†è™›æ“¬å„€å™¨ç·¨ç¨‹çš„強大能力。
  (3)程åºä¸å¯ä»¥é€šéŽè‡ªå·±é–‹ç™¼(fÄ)的函數(shù)進行數(shù)據(jù)處ç†ï¼Œåœ¨æ¸¬é‡é¡¯ç¤ºå˜å„²æ•¸(shù)據(jù)çš„åŒæ™‚ï¼Œå°‡åˆæ¥çµ(jié)果也計算顯示出來,這樣ä¸åƒ…直觀的監(jiÄn)控測é‡ç³»çµ±(tÇ’ng)ï¼Œé‚„èƒ½éš¨æ™‚æ ¹æ“š(jù)çµ(jié)æžœé€²è¡Œåƒæ•¸(shù)的調(dià o)整。
åƒè€ƒæ–‡ç»
  [1]畢虎,律方æˆï¼ŒæŽç‡•é’,æŽå’Œæ˜Ž.Labviewä¸è¨ªå•數(shù)據(jù)庫的幾種ä¸åŒæ–¹æ³•.微計算機信æ¯ï¼Œ2006,1-1:131-134。
  [2]å³è‹—,許江寧,繆繡è¯ï¼Œç´€å…µ.基于Labviewçš„è¨(shè)備驅(qÅ«)動程åºé–‹ç™¼(fÄ)技術(shù)ç ”ç©¶.微計算機信æ¯ï¼Œ2006,2-1:153-155。
  [3]毛建æ±.基于Labview的單片機數(shù)據(jù)采集系統(tÇ’ng)çš„è¨(shè)計.微計算機信æ¯ï¼Œ2006,3-2:41-42。
  [4]呍剿ž—ï¼ŒæŽæ¸…峰,楊è¯å‹‡.基于Labviewçš„AC1077數(shù)據(jù)采集å¡çš„é©…(qÅ«)å‹•.微計算機信æ¯ï¼Œ2006,1-1:121-123。