安捷伦GPIB线在Delphi下的IO读取问题 ( 积分: 200 )

  • 主题发起人 主题发起人 gmshello
  • 开始时间 开始时间
G

gmshello

Unregistered / Unconfirmed
GUEST, unregistred user!
安捷伦GPIB线在Delphi下的IO读取问题,我们现在用的是53132计数器,GPIB线可以通过USB口来连接安捷伦仪器的GPIB口实现电脑对安捷伦仪器的IO读写控制,现在不知道怎样通过Delphi来实现电脑对安捷伦仪器的IO读写控制,望各位大侠帮我看看!!!!!!!!
 
应该有相应的指令文档.没有的话就安装 WinDriver 用USB 跟踪功能探测出相应数据
 
在VC 60中给的例程如下

#include <stdio.h> /* used for printf() */

#pragma warning( push )
#pragma warning( disable : 4192 )
#pragma warning( disable : 4786 )

#include <comdef.h> /* used for Native C++ compiler COM support */
#include <conio.h> /* used for getch */

// import IO library
#import "C:/Program Files/Common Files/Agilent/IOLibraries/AgtIOUtils.dll"

#pragma warning( pop )

using namespace AgilentIOUtilsLib;

int main(int argc, char* argv[])
{

CoInitialize(0);
try
{
int i; /* Used for loop counter */
HRESULT hr;
/* smart pointer to iomanager interface */
IIOManagerPtr ioMgr(__uuidof(AgtIOManager) );
IIOPtr ioPtr; /* smart pointer to IO interface (This could be IIOGPIBPtr instead)*/
ioPtr = ioMgr->ConnectToInstrument ("GPIB::3"); /* set GPIB address to 3 */
_variant_t strVar; /* VARIANT returned from instr queries */
int samples=10; /* Number of measurements to take */
_bstr_t freq; /* Frequency string */
hr = ioPtr->Output("*RST");
hr = ioPtr->Output("*CLS");
hr = ioPtr->Output("*SRE 0"); /* Clear service request enable register */
hr = ioPtr->Output("*ESE 0"); /* Clear event status enable register */
hr = ioPtr->Output(":STAT:PRES"); /* Preset enable registers and transition
filters for operation and questionable
status structures */
hr = ioPtr->Output(":FUNC 'FREQ 3'"); /* Make a frequency measurement */
hr = ioPtr->Output(":FREQ:ARM:STAR:SOUR IMM"); /* These 2 lines enable the */
hr = ioPtr->Output(":FREQ:ARM:STOP:SOUR TIM"); /* TIME arming mode*/
hr = ioPtr->Output(":FREQ:ARM:STOP:TIM .1"); /* 0.1 second gate time */
hr = ioPtr->Output(":INIT:CONT ON"); /* take continuous measurements */
printf("Measuring Frequency.../n/n");
for (i = 0; i < samples; i++)
{
strVar = ioPtr->Query (":FETCH:FREQUENCY?");
printf("Freq %i: %S",i+1,strVar.bstrVal);
}
// printf("/nPress a key to continue/n");
getch();
}
catch (_com_error &e)
{
_bstr_t dsp = e.Description();
_bstr_t emsg = e.ErrorMessage();
printf ("COM Exception occurred during processing!/nDescription::%s/nMessage::%s/n",
(char *) dsp, (char *) emsg);
}
CoUninitialize();
return

其中ConnectToInstrument(widestring:olevariant)和output(widestring:olevariant)中的是olevariant类型,如果在Delphi中应怎样实现啊
 
不是很明显了?在那个 dll 中,是个 com 吧,照着翻译就是了。
 
能帮帮我吗
我不知道怎么把它转换成Delphi可识别的程序,成功200分都给你
谢谢了
 
我以前也做过的,你是哪个公司的啊,你可以 用 c++ 封装成 COM+ 然后用 delphi 调用,
直接用 delphi 调用比较麻烦, agilent 只有 vb vc 的例子程序,不过你可以到他们网站
上找 delphi 的代码,
我的 mail :fanronghua@126.com
 
To fanronghua:
我注册了Agilent的DLL,然后在Delphi中安装了它的控件后就可以象C++中一样用了。
 
我操,这个世界没有天理了~~~~~ MD,老虎不发威,当我是病猫, 先骂人的倒有理了 我可是从来不主动得罪人的 谁要是欺负人,那就不客气了 明天把这个工具开个源,叫大家都来用用 请问你们有什么拿的出手的?自己写的东西? 说出来叫大爷我长长见识? 别不会是一群耍嘴皮子的废物吧?
 
后退
顶部