NI-VISA通信的调用
VISA是一种用来与各种仪器总线进行通信的高级应用编程接口,可用来对USB、GPIB、串口、VXI、PXI和以太网系统进行配置、编程和调试
下面是一些资料:
1.NI-VISATM Programmer Reference Manual
2.NI-VISA™ User Manual
原版rsVISA用到的dll和h头文件
简单的封装了下, 完整库代码和调用示例, 请看楼下8楼.
import win.ui; /*DSG{{*/ mainForm = win.form(text="aardio工程15";right=613;bottom=424) mainForm.add( button={cls="button";text="Button";left=52;top=39;right=197;bottom=83;z=1}; button2={cls="button";text="Button";left=53;top=112;right=198;bottom=156;z=2} ) /*}}*/ import console console.open() //ViStatus int32 //ViPSession uint32 //ViAttr ViUInt32 var dll = ..raw.loadDll("\res\RsVisa32.dll"); viOpenDefaultRM = dll.api("viOpenDefaultRM","int(INT&)" ); viFindRsrc = dll.api("viFindRsrc","INT(INT,string,INT&,INT&,string&)" ); viOpen = dll.api("viOpen","int(INT,string,INT,INT,INT&)" ); viSetAttribute = dll.api("viSetAttribute","int(INT,INT,INT)" ); viWrite = dll.api("viWrite","int(INT,string,INT,INT&)" ); viRead = dll.api("viRead","int(INT,string&,INT,INT&)" ); viClose = dll.api("viClose","int(INT)" ); var status,defaultRM = viOpenDefaultRM(0); console.log( status,defaultRM ) console.log( viFindRsrc( defaultRM,"*?",0,0,raw.buffer(100) ) ) var instr; mainForm.button.oncommand = function(id,event){ status,instr = viOpen( defaultRM,"ASRL1::INSTR",0,5000,0 ); console.log("viOpen", status,instr ) status = viSetAttribute(instr,0x3FFF001A,5000); console.log("viSetAttribute", status ) /* Set serial port settings as needed*/ /* Defaults = 9600 Baud, no parity, 8 data bits, 1 stop bit*/ status = viSetAttribute(instr, 0x3FFF0021, 2400); console.log("viSetAttribute1", status ) status = viSetAttribute(instr, 0x3FFF0022, 8); console.log("viSetAttribute2", status ) /* Set this attribute for binary transfers, skip it for this text example */ status = viSetAttribute(instr, 0x3FFF00B3, 2); console.log("viSetAttribute3", status ) status = viSetAttribute(instr, 0x3FFF0018, 0x0d); console.log("viSetAttribute3", status ) status = viSetAttribute(instr, 0x3FFF0038, 1); console.log("viSetAttribute4", status ) } mainForm.button2.oncommand = function(id,event){ status,retCount = viWrite(instr, '*IDN?', 6, 0); console.log("viWrite", status,retCount ) status,getstr,retCount = viRead(instr, raw.buffer(200,'\0'), 200, 0); console.log("viRead", status,getstr,retCount ) } mainForm.onClose = function(hwnd,message,wParam,lParam){ if(instr){ status = viClose(instr); console.log("viClose", status ) } if(defaultRM){ status = viClose(defaultRM); console.log("viClose", status ) } } mainForm.show(); return win.loopMessage();
这里的示例都是使用的RSVisa.dll, RS和NI只是一点点区别, 实际上都是用的ivi的visa.lib进行的封装, 文档可以完全相互参考.
RS提供的visa测试软件功能更简洁,而且可以显示每一步所使用的代码, 更方便调试.
从测试软件里可以得到很多信息, 这些代码都是我们今后需要在程序里调用的, 具体的参数功能还是需要看看文档了解下.
我下面弄个动态图, 具体来演示下:
从图上可知: 我最后读取到的波特率和设置波特率的代码应该如下:
mainForm.button3.oncommand = function(id,event){ console.log( "viGetAttribute,BAUD 设置前:",viGetAttribute(instr,0x3FFF0021/*VI_ATTR_ASRL_BAUD*/,0) ) status = viSetAttribute(instr, 0x3FFF0021/*VI_ATTR_ASRL_BAUD*/, 115200); console.log( "viGetAttribute,BAUD 设置后:",viGetAttribute(instr,0x3FFF0021/*VI_ATTR_ASRL_BAUD*/,0) ) }
上面aardio的代码和列表里显示的一模一样.
2021-09-08 22:26 更新:
增加几个常用函数
2021-09-09 14:22 更新:
修正dll函数中几处错误
研究visa发现, 其实很多时候并不需要那么多的函数来使用, 为了对aardio中使用更友好, 我在RS官方示例基础上, 对dll进行了二次封装, 只保留了9个函数.
VisaRsrc VisaGetRsrcString VisaInit VisaClose VisaSetAttr VisaGetAttr VisaWrite VisaRead VisaClear
VISADllEx.dll 下载:
VISADllEx的vs2015工程源码下载:
这里我用串口进行了visa的模拟,
特别注意: 串口初始化完成, 默认波特率是9600 , 8,0,0,1 , 接收中断默认是接收到'\n'即"0x0A"字符, 如果你的设备不是默认配置, 那么就使用 VisaSetAttr() 对设备进行属性设置, 改变波特率和结束符符号.
至于属性是哪个, 可以参考楼上的方式找到.
aardio中调用示例如下:
import win.ui; /*DSG{{*/ mainForm = win.form(text="dlltest";right=446;bottom=259) mainForm.add( button={cls="button";text="write";left=26;top=84;right=278;bottom=148;z=1}; button2={cls="button";text="read";left=26;top=171;right=278;bottom=235;z=2}; button3={cls="button";text="VisaGetAttr";left=298;top=84;right=429;bottom=148;z=4}; button4={cls="button";text="VisaClear";left=298;top=168;right=429;bottom=232;z=5}; edit={cls="edit";text="*IDN?";left=26;top=34;right=278;bottom=69;edge=1;z=3} ) /*}}*/ import console console.open() var dll = ..raw.loadDll("\res\VISADllEx.dll","VISADllEx"); VisaRsrc = dll.api("VisaRsrc","int()" ); VisaGetRsrcString = dll.api("VisaGetRsrcString","string(INT)" ); VisaInit = dll.api("VisaInit","bool(string)" ); VisaClose = dll.api("VisaClose","bool()" ); VisaWrite = dll.api("VisaWrite","bool(string)" ); VisaRead = dll.api("VisaRead","string(WORD)" ); VisaSetAttr = dll.api("VisaSetAttr","bool(INT,INT)" ); VisaGetAttr = dll.api("VisaGetAttr","INT(INT)" ); VisaClear = dll.api("VisaClear","bool()" ); var count = VisaRsrc(); console.log( count ) for(i=0;count-1;1){ console.dump( VisaGetRsrcString(i) ) } console.log(VisaInit("ASRL1::INSTR")) mainForm.button.oncommand = function(id,event){ console.log(VisaWrite(mainForm.edit.text)) } mainForm.button2.oncommand = function(id,event){ //0=默认读取1024个数据, 其他数字为读取数量 console.log(VisaRead(0)) } mainForm.onClose = function(hwnd,message,wParam,lParam){ VisaClose() } mainForm.button3.oncommand = function(id,event){ console.log( VisaGetAttr(0x3FFF0021/*VI_ATTR_ASRL_BAUD*/) ) } mainForm.button4.oncommand = function(id,event){ VisaClear(); } mainForm.show(); return win.loopMessage();
visa在labview中连续使用的时候, 一般是这样
红色部分是获取串口缓冲池中有多少个数据字节数, 将这个字节数给读取函数 , 意思就是将缓冲池中所有的数据读出来.
那么代码中要用
#define VI_ATTR_ASRL_AVAIL_NUM (0x3FFF00ACUL)
这个属性来获取缓冲池内数据字节数.
var num = VisaGetAttr(0x3FFF00AC); var retStr = VisaRead(num);
顺便说下, visa有个不是bug的bug , 一直未改善
设置接收中断字节 和 中断使能功能的bug
当你使用下面二个属性想要设置 不使用 中断字节码
#define VI_ATTR_TERMCHAR (0x3FFF0018UL)
#define VI_ATTR_TERMCHAR_EN (0x3FFF0038UL)
你必须也要设置这个属性
#define VI_ATTR_ASRL_END_IN (0x3FFF00B3UL)
它们三个配合使用才能取消中断字节码的中断功能.......
status = viSetAttribute(instr, 0x3FFF0018, 0x0a); status = viSetAttribute(instr, 0x3FFF0038, 0); status = viSetAttribute(instr, 0x3FFF00B3, 0);
封装了个简单的库 , 下面是库代码和调用示例:
VISADllEx.aardio
//VISA通信库 class VISADllEx{ ctor( ){ ..table.gc(this,"close"); }; FindRsc = function(){ var stringList={}; var count = VisaFindRsrc(); if(count!=0){ for(i=0;count-1;1){ var str = VisaGetRsrcString(i); ..table.push(stringList,str); } return stringList; } return null; }; open = function(deviceName){ return VisaInit(deviceName); }; writeString = function(str){ return VisaWrite(str); }; readString = function(len){ if(len!=null){ return VisaRead(len); } return VisaRead(0); }; setAttr = function(k,v){ return VisaSetAttr(k,v); }; getAttr = function(k){ return VisaGetAttr(k); }; close = function(){ VisaClose(); }; } namespace VISADllEx{ _dll = ..raw.loadDll($"\res\VISADllEx.dll"); VisaFindRsrc = _dll.api("VisaRsrc","int()" ); VisaGetRsrcString = _dll.api("VisaGetRsrcString","string(INT)" ); VisaInit = _dll.api("VisaInit","bool(string)" ); VisaClose = _dll.api("VisaClose","bool()" ); VisaWrite = _dll.api("VisaWrite","bool(string)" ); VisaRead = _dll.api("VisaRead","string(WORD)" ); VisaSetAttr = _dll.api("VisaSetAttr","bool(INT,INT)" ); VisaGetAttr = _dll.api("VisaGetAttr","INT(INT)" ); VisaClear = _dll.api("VisaClear","bool()" ); } /**intellisense() VISADllEx = 基于RSVisa通信扩展库 VISADllEx() = !VISADllExLib. end intellisense**/ /**intellisense(!VISADllExLib) FindRsc() = 成功:返回找到的设备系列号列表,\n失败返回null open(.(设备标识码) = 打开设备\n返回值 成功:true,失败:false close() = 关闭设备 writeString(.(字符) = 写入字符码\n返回值 成功:true,失败:false readString(.(字节数) = 读取字符\n返回值 成功:true,失败:false setAttr(.(名称,属性值) = 设置属性\n名称:_VI_ATTR_开头 属性值:_VI_开头或者直接输入数值\n返回值 成功:true,失败:false getAttr(.(名称) = 读取属性\n名称:_VI_ATTR_开头 end intellisense**/ // 常量提示 /**intellisense() _VI_ATTR_RSRC_CLASS=@0xBFFF0001/*_VI_ATTR_RSRC_CLASS*/ _VI_ATTR_RSRC_NAME=@0xBFFF0002/*_VI_ATTR_RSRC_NAME*/ _VI_ATTR_RSRC_IMPL_VERSION=@0x3FFF0003/*_VI_ATTR_RSRC_IMPL_VERSION*/ _VI_ATTR_RSRC_LOCK_STATE=@0x3FFF0004/*_VI_ATTR_RSRC_LOCK_STATE*/ _VI_ATTR_MAX_QUEUE_LENGTH=@0x3FFF0005/*_VI_ATTR_MAX_QUEUE_LENGTH*/ _VI_ATTR_USER_DATA_32=@0x3FFF0007/*_VI_ATTR_USER_DATA_32*/ _VI_ATTR_FDC_CHNL=@0x3FFF000D/*_VI_ATTR_FDC_CHNL*/ _VI_ATTR_FDC_MODE=@0x3FFF000F/*_VI_ATTR_FDC_MODE*/ _VI_ATTR_FDC_GEN_SIGNAL_EN=@0x3FFF0011/*_VI_ATTR_FDC_GEN_SIGNAL_EN*/ _VI_ATTR_FDC_USE_PAIR=@0x3FFF0013/*_VI_ATTR_FDC_USE_PAIR*/ _VI_ATTR_SEND_END_EN=@0x3FFF0016/*_VI_ATTR_SEND_END_EN*/ _VI_ATTR_TERMCHAR=@0x3FFF0018/*_VI_ATTR_TERMCHAR*/ _VI_ATTR_TMO_VALUE=@0x3FFF001A/*_VI_ATTR_TMO_VALUE*/ _VI_ATTR_GPIB_READDR_EN=@0x3FFF001B/*_VI_ATTR_GPIB_READDR_EN*/ _VI_ATTR_IO_PROT=@0x3FFF001C/*_VI_ATTR_IO_PROT*/ _VI_ATTR_DMA_ALLOW_EN=@0x3FFF001E/*_VI_ATTR_DMA_ALLOW_EN*/ _VI_ATTR_ASRL_BAUD=@0x3FFF0021/*_VI_ATTR_ASRL_BAUD*/ _VI_ATTR_ASRL_DATA_BITS=@0x3FFF0022/*_VI_ATTR_ASRL_DATA_BITS*/ _VI_ATTR_ASRL_PARITY=@0x3FFF0023/*_VI_ATTR_ASRL_PARITY*/ _VI_ATTR_ASRL_STOP_BITS=@0x3FFF0024/*_VI_ATTR_ASRL_STOP_BITS*/ _VI_ATTR_ASRL_FLOW_CNTRL=@0x3FFF0025/*_VI_ATTR_ASRL_FLOW_CNTRL*/ _VI_ATTR_RD_BUF_OPER_MODE=@0x3FFF002A/*_VI_ATTR_RD_BUF_OPER_MODE*/ _VI_ATTR_RD_BUF_SIZE=@0x3FFF002B/*_VI_ATTR_RD_BUF_SIZE*/ _VI_ATTR_WR_BUF_OPER_MODE=@0x3FFF002D/*_VI_ATTR_WR_BUF_OPER_MODE*/ _VI_ATTR_WR_BUF_SIZE=@0x3FFF002E/*_VI_ATTR_WR_BUF_SIZE*/ _VI_ATTR_SUPPRESS_END_EN=@0x3FFF0036/*_VI_ATTR_SUPPRESS_END_EN*/ _VI_ATTR_TERMCHAR_EN=@0x3FFF0038/*_VI_ATTR_TERMCHAR_EN*/ _VI_ATTR_DEST_ACCESS_PRIV=@0x3FFF0039/*_VI_ATTR_DEST_ACCESS_PRIV*/ _VI_ATTR_DEST_BYTE_ORDER=@0x3FFF003A/*_VI_ATTR_DEST_BYTE_ORDER*/ _VI_ATTR_SRC_ACCESS_PRIV=@0x3FFF003C/*_VI_ATTR_SRC_ACCESS_PRIV*/ _VI_ATTR_SRC_BYTE_ORDER=@0x3FFF003D/*_VI_ATTR_SRC_BYTE_ORDER*/ _VI_ATTR_SRC_INCREMENT=@0x3FFF0040/*_VI_ATTR_SRC_INCREMENT*/ _VI_ATTR_DEST_INCREMENT=@0x3FFF0041/*_VI_ATTR_DEST_INCREMENT*/ _VI_ATTR_WIN_ACCESS_PRIV=@0x3FFF0045/*_VI_ATTR_WIN_ACCESS_PRIV*/ _VI_ATTR_WIN_BYTE_ORDER=@0x3FFF0047/*_VI_ATTR_WIN_BYTE_ORDER*/ _VI_ATTR_GPIB_ATN_STATE=@0x3FFF0057/*_VI_ATTR_GPIB_ATN_STATE*/ _VI_ATTR_GPIB_ADDR_STATE=@0x3FFF005C/*_VI_ATTR_GPIB_ADDR_STATE*/ _VI_ATTR_GPIB_CIC_STATE=@0x3FFF005E/*_VI_ATTR_GPIB_CIC_STATE*/ _VI_ATTR_GPIB_NDAC_STATE=@0x3FFF0062/*_VI_ATTR_GPIB_NDAC_STATE*/ _VI_ATTR_GPIB_SRQ_STATE=@0x3FFF0067/*_VI_ATTR_GPIB_SRQ_STATE*/ _VI_ATTR_GPIB_SYS_CNTRL_STATE=@0x3FFF0068/*_VI_ATTR_GPIB_SYS_CNTRL_STATE*/ _VI_ATTR_GPIB_HS488_CBL_LEN=@0x3FFF0069/*_VI_ATTR_GPIB_HS488_CBL_LEN*/ _VI_ATTR_CMDR_LA=@0x3FFF006B/*_VI_ATTR_CMDR_LA*/ _VI_ATTR_VXI_DEV_CLASS=@0x3FFF006C/*_VI_ATTR_VXI_DEV_CLASS*/ _VI_ATTR_MAINFRAME_LA=@0x3FFF0070/*_VI_ATTR_MAINFRAME_LA*/ _VI_ATTR_MANF_NAME=@0xBFFF0072/*_VI_ATTR_MANF_NAME*/ _VI_ATTR_MODEL_NAME=@0xBFFF0077/*_VI_ATTR_MODEL_NAME*/ _VI_ATTR_VXI_VME_INTR_STATUS=@0x3FFF008B/*_VI_ATTR_VXI_VME_INTR_STATUS*/ _VI_ATTR_VXI_TRIG_STATUS=@0x3FFF008D/*_VI_ATTR_VXI_TRIG_STATUS*/ _VI_ATTR_VXI_VME_SYSFAIL_STATE=@0x3FFF0094/*_VI_ATTR_VXI_VME_SYSFAIL_STATE*/ _VI_ATTR_WIN_BASE_ADDR_32=@0x3FFF0098/*_VI_ATTR_WIN_BASE_ADDR_32*/ _VI_ATTR_WIN_SIZE_32=@0x3FFF009A/*_VI_ATTR_WIN_SIZE_32*/ _VI_ATTR_ASRL_AVAIL_NUM=@0x3FFF00AC/*_VI_ATTR_ASRL_AVAIL_NUM*/ _VI_ATTR_MEM_BASE_32=@0x3FFF00AD/*_VI_ATTR_MEM_BASE_32*/ _VI_ATTR_ASRL_CTS_STATE=@0x3FFF00AE/*_VI_ATTR_ASRL_CTS_STATE*/ _VI_ATTR_ASRL_DCD_STATE=@0x3FFF00AF/*_VI_ATTR_ASRL_DCD_STATE*/ _VI_ATTR_ASRL_DSR_STATE=@0x3FFF00B1/*_VI_ATTR_ASRL_DSR_STATE*/ _VI_ATTR_ASRL_DTR_STATE=@0x3FFF00B2/*_VI_ATTR_ASRL_DTR_STATE*/ _VI_ATTR_ASRL_END_IN=@0x3FFF00B3/*_VI_ATTR_ASRL_END_IN*/ _VI_ATTR_ASRL_END_OUT=@0x3FFF00B4/*_VI_ATTR_ASRL_END_OUT*/ _VI_ATTR_ASRL_REPLACE_CHAR=@0x3FFF00BE/*_VI_ATTR_ASRL_REPLACE_CHAR*/ _VI_ATTR_ASRL_RI_STATE=@0x3FFF00BF/*_VI_ATTR_ASRL_RI_STATE*/ _VI_ATTR_ASRL_RTS_STATE=@0x3FFF00C0/*_VI_ATTR_ASRL_RTS_STATE*/ _VI_ATTR_ASRL_XON_CHAR=@0x3FFF00C1/*_VI_ATTR_ASRL_XON_CHAR*/ _VI_ATTR_ASRL_XOFF_CHAR=@0x3FFF00C2/*_VI_ATTR_ASRL_XOFF_CHAR*/ _VI_ATTR_WIN_ACCESS=@0x3FFF00C3/*_VI_ATTR_WIN_ACCESS*/ _VI_ATTR_RM_SESSION=@0x3FFF00C4/*_VI_ATTR_RM_SESSION*/ _VI_ATTR_VXI_LA=@0x3FFF00D5/*_VI_ATTR_VXI_LA*/ _VI_ATTR_MANF_ID=@0x3FFF00D9/*_VI_ATTR_MANF_ID*/ _VI_ATTR_MEM_SIZE_32=@0x3FFF00DD/*_VI_ATTR_MEM_SIZE_32*/ _VI_ATTR_MEM_SPACE=@0x3FFF00DE/*_VI_ATTR_MEM_SPACE*/ _VI_ATTR_MODEL_CODE=@0x3FFF00DF/*_VI_ATTR_MODEL_CODE*/ _VI_ATTR_SLOT=@0x3FFF00E8/*_VI_ATTR_SLOT*/ _VI_ATTR_INTF_INST_NAME=@0xBFFF00E9/*_VI_ATTR_INTF_INST_NAME*/ _VI_ATTR_IMMEDIATE_SERV=@0x3FFF0100/*_VI_ATTR_IMMEDIATE_SERV*/ _VI_ATTR_INTF_PARENT_NUM=@0x3FFF0101/*_VI_ATTR_INTF_PARENT_NUM*/ _VI_ATTR_RSRC_SPEC_VERSION=@0x3FFF0170/*_VI_ATTR_RSRC_SPEC_VERSION*/ _VI_ATTR_INTF_TYPE=@0x3FFF0171/*_VI_ATTR_INTF_TYPE*/ _VI_ATTR_GPIB_PRIMARY_ADDR=@0x3FFF0172/*_VI_ATTR_GPIB_PRIMARY_ADDR*/ _VI_ATTR_GPIB_SECONDARY_ADDR=@0x3FFF0173/*_VI_ATTR_GPIB_SECONDARY_ADDR*/ _VI_ATTR_RSRC_MANF_NAME=@0xBFFF0174/*_VI_ATTR_RSRC_MANF_NAME*/ _VI_ATTR_RSRC_MANF_ID=@0x3FFF0175/*_VI_ATTR_RSRC_MANF_ID*/ _VI_ATTR_INTF_NUM=@0x3FFF0176/*_VI_ATTR_INTF_NUM*/ _VI_ATTR_TRIG_ID=@0x3FFF0177/*_VI_ATTR_TRIG_ID*/ _VI_ATTR_GPIB_REN_STATE=@0x3FFF0181/*_VI_ATTR_GPIB_REN_STATE*/ _VI_ATTR_GPIB_UNADDR_EN=@0x3FFF0184/*_VI_ATTR_GPIB_UNADDR_EN*/ _VI_ATTR_DEV_STATUS_BYTE=@0x3FFF0189/*_VI_ATTR_DEV_STATUS_BYTE*/ _VI_ATTR_FILE_APPEND_EN=@0x3FFF0192/*_VI_ATTR_FILE_APPEND_EN*/ _VI_ATTR_VXI_TRIG_SUPPORT=@0x3FFF0194/*_VI_ATTR_VXI_TRIG_SUPPORT*/ _VI_ATTR_TCPIP_ADDR=@0xBFFF0195/*_VI_ATTR_TCPIP_ADDR*/ _VI_ATTR_TCPIP_HOSTNAME=@0xBFFF0196/*_VI_ATTR_TCPIP_HOSTNAME*/ _VI_ATTR_TCPIP_PORT=@0x3FFF0197/*_VI_ATTR_TCPIP_PORT*/ _VI_ATTR_TCPIP_DEVICE_NAME=@0xBFFF0199/*_VI_ATTR_TCPIP_DEVICE_NAME*/ _VI_ATTR_TCPIP_NODELAY=@0x3FFF019A/*_VI_ATTR_TCPIP_NODELAY*/ _VI_ATTR_TCPIP_KEEPALIVE=@0x3FFF019B/*_VI_ATTR_TCPIP_KEEPALIVE*/ _VI_ATTR_4882_COMPLIANT=@0x3FFF019F/*_VI_ATTR_4882_COMPLIANT*/ _VI_ATTR_USB_SERIAL_NUM=@0xBFFF01A0/*_VI_ATTR_USB_SERIAL_NUM*/ _VI_ATTR_USB_INTFC_NUM=@0x3FFF01A1/*_VI_ATTR_USB_INTFC_NUM*/ _VI_ATTR_USB_PROTOCOL=@0x3FFF01A7/*_VI_ATTR_USB_PROTOCOL*/ _VI_ATTR_USB_MAX_INTR_SIZE=@0x3FFF01AF/*_VI_ATTR_USB_MAX_INTR_SIZE*/ _VI_ATTR_PXI_DEV_NUM=@0x3FFF0201/*_VI_ATTR_PXI_DEV_NUM*/ _VI_ATTR_PXI_FUNC_NUM=@0x3FFF0202/*_VI_ATTR_PXI_FUNC_NUM*/ _VI_ATTR_PXI_BUS_NUM=@0x3FFF0205/*_VI_ATTR_PXI_BUS_NUM*/ _VI_ATTR_PXI_CHASSIS=@0x3FFF0206/*_VI_ATTR_PXI_CHASSIS*/ _VI_ATTR_PXI_SLOTPATH=@0xBFFF0207/*_VI_ATTR_PXI_SLOTPATH*/ _VI_ATTR_PXI_SLOT_LBUS_LEFT=@0x3FFF0208/*_VI_ATTR_PXI_SLOT_LBUS_LEFT*/ _VI_ATTR_PXI_SLOT_LBUS_RIGHT=@0x3FFF0209/*_VI_ATTR_PXI_SLOT_LBUS_RIGHT*/ _VI_ATTR_PXI_TRIG_BUS=@0x3FFF020A/*_VI_ATTR_PXI_TRIG_BUS*/ _VI_ATTR_PXI_STAR_TRIG_BUS=@0x3FFF020B/*_VI_ATTR_PXI_STAR_TRIG_BUS*/ _VI_ATTR_PXI_STAR_TRIG_LINE=@0x3FFF020C/*_VI_ATTR_PXI_STAR_TRIG_LINE*/ _VI_ATTR_PXI_SRC_TRIG_BUS=@0x3FFF020D/*_VI_ATTR_PXI_SRC_TRIG_BUS*/ _VI_ATTR_PXI_DEST_TRIG_BUS=@0x3FFF020E/*_VI_ATTR_PXI_DEST_TRIG_BUS*/ _VI_ATTR_PXI_IS_EXPRESS=@0x3FFF0240/*_VI_ATTR_PXI_IS_EXPRESS*/ _VI_ATTR_PXI_SLOT_LWIDTH=@0x3FFF0241/*_VI_ATTR_PXI_SLOT_LWIDTH*/ _VI_ATTR_PXI_MAX_LWIDTH=@0x3FFF0242/*_VI_ATTR_PXI_MAX_LWIDTH*/ _VI_ATTR_PXI_ACTUAL_LWIDTH=@0x3FFF0243/*_VI_ATTR_PXI_ACTUAL_LWIDTH*/ _VI_ATTR_PXI_DSTAR_BUS=@0x3FFF0244/*_VI_ATTR_PXI_DSTAR_BUS*/ _VI_ATTR_PXI_DSTAR_SET=@0x3FFF0245/*_VI_ATTR_PXI_DSTAR_SET*/ _VI_ATTR_PXI_ALLOW_WRITE_COMBINE=@0x3FFF0246/*_VI_ATTR_PXI_ALLOW_WRITE_COMBINE*/ _VI_ATTR_TCPIP_HISLIP_OVERLAP_EN=@0x3FFF0300/*_VI_ATTR_TCPIP_HISLIP_OVERLAP_EN*/ _VI_ATTR_TCPIP_HISLIP_VERSION=@0x3FFF0301/*_VI_ATTR_TCPIP_HISLIP_VERSION*/ _VI_ATTR_TCPIP_HISLIP_MAX_MESSAGE_KB=@0x3FFF0302/*_VI_ATTR_TCPIP_HISLIP_MAX_MESSAGE_KB*/ _VI_ATTR_TCPIP_IS_HISLIP=@0x3FFF0303/*_VI_ATTR_TCPIP_IS_HISLIP*/ _VI_ATTR_JOB_ID=@0x3FFF4006/*_VI_ATTR_JOB_ID*/ _VI_ATTR_EVENT_TYPE=@0x3FFF4010/*_VI_ATTR_EVENT_TYPE*/ _VI_ATTR_SIGP_STATUS_ID=@0x3FFF4011/*_VI_ATTR_SIGP_STATUS_ID*/ _VI_ATTR_RECV_TRIG_ID=@0x3FFF4012/*_VI_ATTR_RECV_TRIG_ID*/ _VI_ATTR_INTR_STATUS_ID=@0x3FFF4023/*_VI_ATTR_INTR_STATUS_ID*/ _VI_ATTR_STATUS=@0x3FFF4025/*_VI_ATTR_STATUS*/ _VI_ATTR_RET_COUNT_32=@0x3FFF4026/*_VI_ATTR_RET_COUNT_32*/ _VI_ATTR_BUFFER=@0x3FFF4027/*_VI_ATTR_BUFFER*/ _VI_ATTR_RECV_INTR_LEVEL=@0x3FFF4041/*_VI_ATTR_RECV_INTR_LEVEL*/ _VI_ATTR_OPER_NAME=@0xBFFF4042/*_VI_ATTR_OPER_NAME*/ _VI_ATTR_GPIB_RECV_CIC_STATE=@0x3FFF4193/*_VI_ATTR_GPIB_RECV_CIC_STATE*/ _VI_ATTR_RECV_TCPIP_ADDR=@0xBFFF4198/*_VI_ATTR_RECV_TCPIP_ADDR*/ _VI_ATTR_USB_RECV_INTR_SIZE=@0x3FFF41B0/*_VI_ATTR_USB_RECV_INTR_SIZE*/ _VI_ATTR_USB_RECV_INTR_DATA=@0xBFFF41B1/*_VI_ATTR_USB_RECV_INTR_DATA*/ _VI_ATTR_PXI_RECV_INTR_SEQ=@0x3FFF4240/*_VI_ATTR_PXI_RECV_INTR_SEQ*/ _VI_ATTR_PXI_RECV_INTR_DATA=@0x3FFF4241/*_VI_ATTR_PXI_RECV_INTR_DATA*/ _VI_READ_BUF=@0x1/*_VI_READ_BUF*/ _VI_WRITE_BUF=@0x2/*_VI_WRITE_BUF*/ _VI_READ_BUF_DISCARD=@0x4/*_VI_READ_BUF_DISCARD*/ _VI_WRITE_BUF_DISCARD=@0x8/*_VI_WRITE_BUF_DISCARD*/ _VI_IO_IN_BUF=@0x10/*_VI_IO_IN_BUF*/ _VI_IO_OUT_BUF=@0x20/*_VI_IO_OUT_BUF*/ _VI_IO_IN_BUF_DISCARD=@0x40/*_VI_IO_IN_BUF_DISCARD*/ _VI_IO_OUT_BUF_DISCARD=@0x80/*_VI_IO_OUT_BUF_DISCARD*/ _VI_FLUSH_ON_ACCESS=@0x1/*_VI_FLUSH_ON_ACCESS*/ _VI_FLUSH_WHEN_FULL=@0x2/*_VI_FLUSH_WHEN_FULL*/ _VI_FLUSH_DISABLE=@0x3/*_VI_FLUSH_DISABLE*/ _VI_TMO_IMMEDIATE=@0x0/*_VI_TMO_IMMEDIATE*/ _VI_TMO_INFINITE=@0xFFFFFFFF/*_VI_TMO_INFINITE*/ _VI_NO_LOCK=@0x0/*_VI_NO_LOCK*/ _VI_EXCLUSIVE_LOCK=@0x1/*_VI_EXCLUSIVE_LOCK*/ _VI_SHARED_LOCK=@0x2/*_VI_SHARED_LOCK*/ _VI_LOAD_CONFIG=@0x4/*_VI_LOAD_CONFIG*/ _VI_NO_SEC_ADDR=@0xFFFF/*_VI_NO_SEC_ADDR*/ _VI_ASRL_PAR_NONE=@0x0/*_VI_ASRL_PAR_NONE*/ _VI_ASRL_PAR_ODD=@0x1/*_VI_ASRL_PAR_ODD*/ _VI_ASRL_PAR_EVEN=@0x2/*_VI_ASRL_PAR_EVEN*/ _VI_ASRL_PAR_MARK=@0x3/*_VI_ASRL_PAR_MARK*/ _VI_ASRL_PAR_SPACE=@0x4/*_VI_ASRL_PAR_SPACE*/ _VI_ASRL_STOP_ONE=@0xA/*_VI_ASRL_STOP_ONE*/ _VI_ASRL_STOP_ONE5=@0xF/*_VI_ASRL_STOP_ONE5*/ _VI_ASRL_STOP_TWO=@0x14/*_VI_ASRL_STOP_TWO*/ _VI_ASRL_FLOW_NONE=@0x0/*_VI_ASRL_FLOW_NONE*/ _VI_ASRL_FLOW_XON_XOFF=@0x1/*_VI_ASRL_FLOW_XON_XOFF*/ _VI_ASRL_FLOW_RTS_CTS=@0x2/*_VI_ASRL_FLOW_RTS_CTS*/ _VI_ASRL_FLOW_DTR_DSR=@0x4/*_VI_ASRL_FLOW_DTR_DSR*/ _VI_ASRL_END_NONE=@0x0/*_VI_ASRL_END_NONE*/ _VI_ASRL_END_LAST_BIT=@0x1/*_VI_ASRL_END_LAST_BIT*/ _VI_ASRL_END_TERMCHAR=@0x2/*_VI_ASRL_END_TERMCHAR*/ _VI_ASRL_END_BREAK=@0x3/*_VI_ASRL_END_BREAK*/ _VI_STATE_ASSERTED=@0x1/*_VI_STATE_ASSERTED*/ _VI_STATE_UNASSERTED=@0x0/*_VI_STATE_UNASSERTED*/ _VI_STATE_UNKNOWN=@0xFFFFFFFF/*_VI_STATE_UNKNOWN*/ _VI_BIG_ENDIAN=@0x0/*_VI_BIG_ENDIAN*/ _VI_LITTLE_ENDIAN=@0x1/*_VI_LITTLE_ENDIAN*/ _VI_GPIB_REN_DEASSERT=@0x0/*_VI_GPIB_REN_DEASSERT*/ _VI_GPIB_REN_ASSERT=@0x1/*_VI_GPIB_REN_ASSERT*/ _VI_GPIB_REN_DEASSERT_GTL=@0x2/*_VI_GPIB_REN_DEASSERT_GTL*/ _VI_GPIB_REN_ASSERT_ADDRESS=@0x3/*_VI_GPIB_REN_ASSERT_ADDRESS*/ _VI_GPIB_REN_ASSERT_LLO=@0x4/*_VI_GPIB_REN_ASSERT_LLO*/ _VI_GPIB_REN_ASSERT_ADDRESS_LLO=@0x5/*_VI_GPIB_REN_ASSERT_ADDRESS_LLO*/ _VI_GPIB_REN_ADDRESS_GTL=@0x6/*_VI_GPIB_REN_ADDRESS_GTL*/ _VI_GPIB_ATN_DEASSERT=@0x0/*_VI_GPIB_ATN_DEASSERT*/ _VI_GPIB_ATN_ASSERT=@0x1/*_VI_GPIB_ATN_ASSERT*/ _VI_GPIB_ATN_DEASSERT_HANDSHAKE=@0x2/*_VI_GPIB_ATN_DEASSERT_HANDSHAKE*/ _VI_GPIB_ATN_ASSERT_IMMEDIATE=@0x3/*_VI_GPIB_ATN_ASSERT_IMMEDIATE*/ _VI_GPIB_HS488_DISABLED=@0x0/*_VI_GPIB_HS488_DISABLED*/ _VI_GPIB_HS488_NIMPL=@0xFFFFFFFF/*_VI_GPIB_HS488_NIMPL*/ _VI_GPIB_UNADDRESSED=@0x0/*_VI_GPIB_UNADDRESSED*/ _VI_GPIB_TALKER=@0x1/*_VI_GPIB_TALKER*/ _VI_GPIB_LISTENER=@0x2/*_VI_GPIB_LISTENER*/ end intellisense**/
mainform.aardio调用示例:
import win.ui; /*DSG{{*/ mainForm = win.form(text="aardio工程15";right=251;bottom=375) mainForm.add( button={cls="button";text="write";left=28;top=26;right=209;bottom=79;z=1}; button2={cls="button";text="read";left=28;top=93;right=209;bottom=146;z=2}; button6={cls="button";text="setAttr";left=28;top=205;right=209;bottom=258;z=3}; button7={cls="button";text="getAttr";left=28;top=278;right=209;bottom=331;z=4} ) /*}}*/ import console console.open() import VISADllEx; var inst = VISADllEx(); console.dump( inst.FindRsc() ) console.log( inst.open("ASRL1::INSTR") ) mainForm.button.oncommand = function(id,event){ console.log( inst.writeString("123456") ); } mainForm.button2.oncommand = function(id,event){ console.log( inst.readString() ); } mainForm.button6.oncommand = function(id,event){ console.log( inst.setAttr(0x3FFF0021/*_VI_ATTR_ASRL_BAUD*/,115200) ) } mainForm.button7.oncommand = function(id,event){ console.log( inst.getAttr(0x3FFF0021/*_VI_ATTR_ASRL_BAUD*/) ) } mainForm.show(); return win.loopMessage();
完整工程下载:
RS所有资料下载:
链接:https://pan.baidu.com/s/12KrwqWhmNDr1ghNJoTx9Mw
提取码:yh3q
新增:
包含了vc运行时的VISADLLEx.dll
替换下工程里面的res目录里面的dll即可
登录后方可回帖
使用rsVISA也是一样的,有些仪器USB hid需要安装visa驱动。之前看到的还没时间研究
https://www.rohde-schwarz.com.cn/driver-pages/remote-control/3-visa-and-tools_231388.html#media-gallery-7