【求教】VBnet开发GPIB_VISA_SCPI控制示波器程序不起作用
vb.net吧
全部回复
仅看楼主
level 1
蓝梦妖蝶 楼主
想用VBnet做一个控制安捷伦示波器的程序,编译通过了但是实际不起作用。
visa32.dll也加入了。
用安捷伦的Command Expert可以控制。说明接口没有问题。
但是程序就是没反应。
程序很简单就是一个读设备ID的测试程序。但是没有读数也不报错。求大神指点指点。
代码如下。
Option Explicit On
Imports System.Text
Imports System
Imports System.IO.Ports '串口
Imports System.Windows.Forms
Imports System.IO '打开文件
Public Class Form1
' - Resource Template Functions and Operations ----------------------------
Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long
Declare Function viGetDefaultRM Lib "VISA32.DLL" Alias "#128" (sesn As Long) As Long
Declare Function viFindRsrc Lib "VISA32.DLL" Alias "#129" (ByVal sesn As Long, ByVal expr As String, vi As Long, retCount As Long, ByVal desc As String) As Long
Declare Function viFindNext Lib "VISA32.DLL" Alias "#130" (ByVal vi As Long, ByVal desc As String) As Long
Declare Function viOpen Lib "VISA32.DLL" Alias "#131" (ByVal sesn As Long, ByVal viDesc As String, ByVal mode As Long, ByVal timeout As Long, vi As Long) As Long
Declare Function viClose Lib "VISA32.DLL" Alias "#132" (ByVal vi As Long) As Long
Declare Function viGetAttribute Lib "VISA32.DLL" Alias "#133" (ByVal vi As Long, ByVal attrName As Long, attrValue As Long) As Long
Declare Function viSetAttribute Lib "VISA32.DLL" Alias "#134" (ByVal vi As Long, ByVal attrName As Long, ByVal attrValue As Long) As Long
Declare Function viStatusDesc Lib "VISA32.DLL" Alias "#142" (ByVal vi As Long, ByVal status As Long, ByVal desc As String) As Long
Declare Function viLock Lib "VISA32.DLL" Alias "#144" (ByVal vi As Long, ByVal lockType As Long, ByVal timeout As Long, ByVal requestedKey As String, ByVal accessKey As String) As Long
Declare Function viUnlock Lib "VISA32.DLL" Alias "#145" (ByVal vi As Long) As Long
Declare Function viEnableEvent Lib "VISA32.DLL" Alias "#135" (ByVal vi As Long, ByVal eventType As Long, ByVal mechanism As Integer, ByVal context As Long) As Long
Declare Function viDisableEvent Lib "VISA32.DLL" Alias "#136" (ByVal vi As Long, ByVal eventType As Long, ByVal mechanism As Integer) As Long
Declare Function viDiscardEvents Lib "VISA32.DLL" Alias "#137" (ByVal vi As Long, ByVal eventType As Long, ByVal mechanism As Integer) As Long
Declare Function viWaitOnEvent Lib "VISA32.DLL" Alias "#138" (ByVal vi As Long, ByVal inEventType As Long, ByVal timeout As Long, outEventType As Long, outEventContext As Long) As Long
' - Basic I/O Operations --------------------------------------------------
Declare Function viRead Lib "VISA32.DLL" Alias "#256" (ByVal vi As Long, ByVal Buffer As String, ByVal count As Long, retCount As Long) As Long
Declare Function viWrite Lib "VISA32.DLL" Alias "#257" (ByVal vi As Long, ByVal Buffer As String, ByVal count As Long, retCount As Long) As Long
Declare Function viAssertTrigger Lib "VISA32.DLL" Alias "#258" (ByVal vi As Long, ByVal protocol As Integer) As Long
Declare Function viReadSTB Lib "VISA32.DLL" Alias "#259" (ByVal vi As Long, status As Integer) As Long
Declare Function viClear Lib "VISA32.DLL" Alias "#260" (ByVal vi As Long) As Long
' - Formatted and Buffered I/O Operations ---------------------------------
Declare Function viSetBuf Lib "VISA32.DLL" Alias "#267" (ByVal vi As Long, ByVal mask As Integer, ByVal bufSize As Long) As Long
Declare Function viFlush Lib "VISA32.DLL" Alias "#268" (ByVal vi As Long, ByVal mask As Integer) As Long
Declare Function viBufWrite Lib "VISA32.DLL" Alias "#202" (ByVal vi As Long, ByVal Buffer As String, ByVal count As Long, retCount As Long) As Long
Declare Function viBufRead Lib "VISA32.DLL" Alias "#203" (ByVal vi As Long, ByVal Buffer As String, ByVal count As Long, retCount As Long) As Long
Declare Function viVPrintf Lib "VISA32.DLL" Alias "#270" (ByVal vi As Long, ByVal writeFmt As String, params As Long) As Long
Declare Function viVSPrintf Lib "VISA32.DLL" Alias "#205" (ByVal vi As Long, ByVal Buffer As String, ByVal writeFmt As String, params As Long) As Long
Declare Function viVScanf Lib "VISA32.DLL" Alias "#272" (ByVal vi As Long, ByVal readFmt As String, params As String) As Long
Declare Function viVSScanf Lib "VISA32.DLL" Alias "#207" (ByVal vi As Long, ByVal Buffer As String, ByVal readFmt As String, params As Long) As Long
Declare Function viVQueryf Lib "VISA32.DLL" Alias "#280" (ByVal vi As Long, ByVal writeFmt As String, ByVal readFmt As String, params As Long) As Long
' - Memory I/O Operations -------------------------------------------------
Declare Function viIn8 Lib "VISA32.DLL" Alias "#273" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, val8 As Byte) As Long
Declare Function viOut8 Lib "VISA32.DLL" Alias "#274" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal val8 As Byte) As Long
Declare Function viIn16 Lib "VISA32.DLL" Alias "#261" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, val16 As Integer) As Long
Declare Function viOut16 Lib "VISA32.DLL" Alias "#262" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal val16 As Integer) As Long
Declare Function viIn32 Lib "VISA32.DLL" Alias "#281" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, val32 As Long) As Long
Declare Function viOut32 Lib "VISA32.DLL" Alias "#282" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal val32 As Long) As Long
Declare Function viMoveIn8 Lib "VISA32.DLL" Alias "#283" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal length As Long, buf8 As Byte) As Long
Declare Function viMoveOut8 Lib "VISA32.DLL" Alias "#284" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal length As Long, buf8 As Byte) As Long
Declare Function viMoveIn16 Lib "VISA32.DLL" Alias "#285" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal length As Long, buf16 As Integer) As Long
Declare Function viMoveOut16 Lib "VISA32.DLL" Alias "#286" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal length As Long, buf16 As Integer) As Long
Declare Function viMoveIn32 Lib "VISA32.DLL" Alias "#287" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal length As Long, buf32 As Long) As Long
Declare Function viMoveOut32 Lib "VISA32.DLL" Alias "#288" (ByVal vi As Long, ByVal accSpace As Integer, ByVal offset As Long, ByVal length As Long, buf32 As Long) As Long
Declare Function viMove Lib "VISA32.DLL" Alias "#200" (ByVal vi As Long, ByVal srcSpace As Integer, ByVal srcOffset As Long, ByVal srcWidth As Integer, ByVal destSpace As Integer, ByVal destOffset As Long, ByVal destWidth As Integer, ByVal srcLength As Long) As Long
Declare Function viMapAddress Lib "VISA32.DLL" Alias "#263" (ByVal vi As Long, ByVal mapSpace As Integer, ByVal mapOffset As Long, ByVal mapSize As Long, ByVal accMode As Integer, ByVal suggested As Long, address As Long) As Long
Declare Function viUnmapAddress Lib "VISA32.DLL" Alias "#264" (ByVal vi As Long) As Long
Declare Sub viPeek8 Lib "VISA32.DLL" Alias "#275" (ByVal vi As Long, ByVal address As Long, val8 As Byte)
Declare Sub viPoke8 Lib "VISA32.DLL" Alias "#276" (ByVal vi As Long, ByVal address As Long, ByVal val8 As Byte)
Declare Sub viPeek16 Lib "VISA32.DLL" Alias "#265" (ByVal vi As Long, ByVal address As Long, val16 As Integer)
Declare Sub viPoke16 Lib "VISA32.DLL" Alias "#266" (ByVal vi As Long, ByVal address As Long, ByVal val16 As Integer)
Declare Sub viPeek32 Lib "VISA32.DLL" Alias "#289" (ByVal vi As Long, ByVal address As Long, val32 As Long)
Declare Sub viPoke32 Lib "VISA32.DLL" Alias "#290" (ByVal vi As Long, ByVal address As Long, ByVal val32 As Long)
' - Shared Memory Operations ----------------------------------------------
Declare Function viMemAlloc Lib "VISA32.DLL" Alias "#291" (ByVal vi As Long, ByVal memSize As Long, offset As Long) As Long
Declare Function viMemFree Lib "VISA32.DLL" Alias "#292" (ByVal vi As Long, ByVal offset As Long) As Long
' - Interface Specific Operations -----------------------------------------
Declare Function viGpibControlREN Lib "VISA32.DLL" Alias "#208" (ByVal vi As Long, ByVal mode As Integer) As Long
Declare Function viVxiCommandQuery Lib "VISA32.DLL" Alias "#209" (ByVal vi As Long, ByVal mode As Integer, ByVal devCmd As Long, devResponse As Long) As Long
' - Attributes ------------------------------------------------------------
’以上为声明。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim status As Long
Dim defrm As Long
Dim vi As Long
Dim strRes As String
Dim strRes1 As String
Dim strRes2 As String
Dim actual As Long
status = viOpenDefaultRM(defrm) '打开资源管理器
status = viOpen(defrm, "GPIB0::7::INSTR", 0, 0, vi) '打开仪器VI
status = viVPrintf(vi, "*IDN?" + vbCrLf, 0) '请求设备ID
System.Threading.Thread.Sleep(10)‘延时’
status = viVScanf(vi, "%t", strRes) '返回设备ID
TextBox1.Text = strRes '显示ID
status = viClose(vi) '关闭仪器vi
status = viClose(defrm) '关闭资源管理器
End Sub
End Class
2018年04月26日 08点04分 1
level 1
蓝梦妖蝶 楼主
声明部分有点多。见谅
2018年04月26日 08点04分 2
level 1
蓝梦妖蝶 楼主
设备地址"GPIB0::7::INSTR"是验证过的,因为安捷伦Command Expert就是用的这个地址。
2018年04月26日 08点04分 3
level 1
蓝梦妖蝶 楼主
感觉是VISA的程序没有起作用。加了几个打印。vi的程序都跳过了。但是又没有报错,不知道是哪里的问题。
2018年04月26日 11点04分 4
level 1
蓝梦妖蝶 楼主
求大神解答
2018年04月26日 11点04分 5
level 11
尝试把函数调用放到me.invoke里面看看,以前有一个顾客,好的是摄像头的,也是不报错,啥提示都没有,搞进去就可以了
2018年04月26日 18点04分 6
level 10
long在vb6中为4字节,integer在vb6中为2字节。
而在VBNET中long为8字节,integer为4字节。
将所有API声明中的long换成integer,将integer换成short。
另外,如果vb6的API声明的参数中忽略了byval传值,默认为byref传址操作,所以一个参数没有声明byval的时候,你就将参数的声明设置为byref。
2018年04月26日 23点04分 7
可能问题并不在此呢。没有用。
2018年04月27日 07点04分
大神啊,真成功了。是我只改了byref没改integer。改了integer就好了。佩服佩服。
2018年04月27日 10点04分
level 1
蓝梦妖蝶 楼主
我把VISA32.DLL放bin目录和debug目录下,调试时会报:
无法在 DLL“VISA32.DLL”中找到名为“viOpenDefaultRM”的入口点。
但是直接运行生成的exe却没事。这是为什么?
2018年04月27日 06点04分 8
添加引用时显示“未能添加对“visa.dll”的引用,请确保此文件可访问并且是一个有效的程序集或com组件。”PS:我用VISA32.DLL是网上下的。
2018年04月27日 06点04分
装了NI-VISA驱动,调试不出错了。但还是不能连接。
2018年04月27日 09点04分
level 1
蓝梦妖蝶 楼主
托管调试助手 "PInvokeStackImbalance":“对 PInvoke 函数“VISA!VISA.Form1::viOpen”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
2018年04月27日 09点04分 9
很奇怪,为什么报错是viopen开始。而不是第一个viOpenDefaultRM
2018年04月27日 10点04分
level 2
问题解决吗?我也遇到类似问题!
2018年11月04日 04点11分 10
什么问题?要用string的时候,赋个初值试试
2018年11月05日 05点11分
1