Agilent IO库支持VISA编程,VISA是有IVI基金推出的一个虚拟仪器软件体系,目前主流的仪器生产厂家如Keysight(Agilent)和NI均支持该体系,两家公司的VISA驱动使用的是统一的软件调用接口函数,因此用VISA编写仪器控制软件可以在两家的硬件体系下运行。
其中Agilent IO库可以同时并存,但是要注意的是,安装完NI驱动后再安装Agilent IO库,Agilent 的visa.dll可能会覆盖NI的
visa.dll,造成Ni驱动无法使用,并存的办法是先安装Agilent IO库再安装NI的驱动,这样visa.dll就是用的Ni的,然后再NI驱动里面的VISA选项里面设置NiVisaTulip.dll生效,这样在驱动Agilent 硬件时NI VISA就会自动判断硬件类型,是NI硬件时直接调用NI驱动库,是Agilent硬件则调用Agilent IO库的VISA(agvisa32.dll),如果windows系统里的visa.dll是Agilent的则会直接调用agvisa32.dll,以上是正常使用并存库的办法。
经过实践,我在windows程序IVI目录下发现有个文件agvisa.bas(ktvisa.bas),也就是说也可以不设置NiVisaTulip.dll生效时直接使用Agilent IO库,这样的好处是只要安装了Agilent IO库就可以使用Agilent硬件和IO硬件(Agilent IO库是可以驱动NI硬件的,但NI驱动默认是关闭NiVisaTulip.dll的,即不能驱动Agilent硬件)。
但是问题来了,添加agvisa.bas后使用VISA函数时才发现,根本就无法控制仪器,经过仔细检查,原来是Agilent IO库里面的函数声明出错了,里面的函数参数居然全部是ByVal,这能用才有鬼了,把该使用引用传递的变量删除ByVal变成引用传递方式,立刻就正常使用了,没想到Agilent IO库居然还有这么大的BUG,估计Agilent根本就不想大家这么用,也没测试过就打包进IO库里面了,而且是连续多个版本均是如此,注意:Agilent IO库后续版本改成Keysight IO库,agvisa32.dll也改成了ktvisa32.dll,但是调用agvisa32.dll也没问题,因为为了保持兼容性,kesight IO库里面也有agvisa32.dll,其直接指向ktvisa32.dll,ktvisa32才是真正的驱动,调用agvisa32.dll完全没问题。