hitlhs 发表于 2009-5-15 21:40:46

VISA应用求助

我基于VISA用VB。NET编写的以下的语句
status = visa32.viPrintf(vi, ":read:chp:chp?" & vbLf)
status = visa32.viPrintf(vi, "*wai" & vbLf)
status = visa32.viScanf(vi, "%f", sult)
TextBox7.Text = CStr(sult)
其中sult是double类型数据
问题:返回的数据为0,即sult为0
可我用串口调试工具结果正常,请大虾们帮帮忙,在下感激不尽
我自已学得是status = visa32.viScanf(vi, "%f", sult)出了问题

3no 发表于 2009-5-16 10:15:09

你跟一下程序,看看status得到的是什么值,还有串口调试可以的话,下面数据是一直在发送还是怎么,考虑下流程是否正确?

hitlhs 发表于 2009-5-16 13:23:43

status得到的是状态代码,用于判断程序执行是否出错。用I/O口调试就得出结果:-7.47850000E+001

hitlhs 发表于 2009-5-16 13:24:14

2# 3no
status得到的是状态代码,用于判断程序执行是否出错。用I/O口调试就得出结果:-7.47850000E+001

3no 发表于 2009-5-16 15:38:01

4# hitlhs

不是很清楚你下面是怎么回的数据,用串口调试是直接打开就可以收到数据,还是需要下发一个命令,如果有多的串口或是机器,可以试试把回来的先分根出来,接到另外一个串口上,公用2、3脚,那个串口用串口调试收,这边用你的程序收。

hitlhs 发表于 2009-5-16 19:06:36

5# 3no
串口调试打开就可以直接收到数据,不用再发布命令。仪器和接口也只是一个,完整的程序如下:
      status = visa32.viOpenDefaultRM(defrm)
      status = visa32.viOpen(defrm, "gpib0::18::instr", 0, 0, vi)
      status = visa32.viPrintf(vi, "*cls" & vbLf)
      status = visa32.viPrintf(vi, "*rst" & vbLf)
      status = visa32.viPrintf(vi, "syst:comm:serial,syst:comm:gpib" & vbLf)
      result = Val(TextBox1.Text)
      status = visa32.viPrintf(vi, "sens:freq:cent %fMHz" & vbLf, result)
      result = Val(TextBox2.Text)
      status = visa32.viPrintf(vi, "sens:freq:span %fkHZ" & vbLf, result)
      result = Val(TextBox4.Text)
      status = visa32.viPrintf(vi, "sens:pow:rf:att %fdB" & vbLf, result)

      If CheckedListBox1.GetItemChecked(0) = True Then
            status = visa32.viPrintf(vi, ":read:chp:chp?" & vbLf)
            status = visa32.viPrintf(vi, "*wai" & vbLf)
            status = visa32.viScanf(vi, "%f", sult)
            TextBox7.Text = cstr(sult)
      End If
页: [1]
查看完整版本: VISA应用求助