• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

6314GPIB写命令

关于6314的问题想请教,
我用VC编写了测试6314GPIB命令的小程序,运行第一次可以控制,但运行第二次就不能向仪器写命令了这是什么原因呢?
我写的程序调用的是VISA自带的例子,我只用了
viopen();
viwrite();
这两个函数而已,通过viwrite()向6314写命令,程序第一次可以正常运行,退出程序后,在打开程序时,提示viwrite()出错.
Chroma提供的CVI驱动我也调用了,还是有同样的问题,
我想是在退出时处理不正确吧,
不知6314在退出时要做什么特殊处理才不影响再次DOWNLOAD.
以下是我用VC写的程序:
#include
#include
#include
#include
#include "visa.h"
static ViUInt32  rcount;
static unsigned char data[1024];
static ViStatus status;
static ViSession defaultRM;
static ViSession inst;
static char stringinstruct[1024];
int main(void)
{
status = viOpenDefaultRM (&defaultRM);
status = viOpen (defaultRM, "GPIB::7::INSTR", VI_NULL, VI_NULL, &inst);
    strcpy (stringinstruct,"*IDN?\n");
    status = viWrite (inst, (ViBuf)stringinstruct,strlen(stringinstruct), &rcount);
status = viRead (inst, data, 3000, &rcount);
cout< strcpy (stringinstruct,"CONFigure:REMote OFF");
status = viWrite (inst, (ViBuf)stringinstruct,strlen(stringinstruct), &rcount);
    status = viClose (inst);
    status = viClose (defaultRM);
    return 0;
}
全部回复(9)
正序查看
倒序查看
wolf2008
LV.3
2
2008-05-19 08:30
可否將程序提供出來,供參考一下呢?
0
回复
marsyax
LV.1
3
2008-05-19 12:00
是否在退出時沒有復原6314?
0
回复
owen.zhao
LV.4
4
2008-05-19 14:40
1、問題描述簡單了些,幫不上什麼忙.
2、Chroma有提供6310 的Visa驅動,自己調用gpid的方式已很少用了.
3、控制儀器選驅動盡量順序是:IVI  VISA  GPIB/COM.
0
回复
owen.zhao
LV.4
5
2008-05-19 20:54
1. 描述还不是很清楚, 提示viWrite()出错是什么?
2. 不过出错的原因是退出时没有viClose.
3. 顺序(visa例):
  a. viOpenDefaultRM
   b. viOpen
   c. viWrite/viRead
   d. viClose
0
回复
owen.zhao
LV.4
6
2008-05-19 20:54
1. 描述还不是很清楚, 提示viWrite()出错是什么?
2. 不过出错的原因是退出时没有viClose.
3. 顺序(visa例):
  a. viOpenDefaultRM
   b. viOpen
   c. viWrite/viRead
   d. viClose
0
回复
kiko
LV.5
7
2008-05-22 17:32
你使用LV編寫該程序,太好了;你可以從Chroma網站上下載Chroma 免費提供的LV 驅動,那裡面就有你要的資料﹒
0
回复
owen.zhao
LV.4
8
2008-05-22 19:41
@kiko
你使用LV編寫該程序,太好了;你可以從Chroma網站上下載Chroma免費提供的LV驅動,那裡面就有你要的資料﹒
1. 严格的说,楼主的流程直通从上到下,没有基本逻辑判断, 个人认为还算不上真正的程序, :-) 一起努力吧!
调用一个函数比较好的方法如下,才能即时跟踪错误,:
if ((status = viOpenDefaultRM (&defaultRM)) < 0)
  return status;

2. "REMote OFF"没实际意义, 好像只针对Rs232.
0
回复
2008-05-22 23:54
@owen.zhao
1.严格的说,楼主的流程直通从上到下,没有基本逻辑判断,个人认为还算不上真正的程序,:-)一起努力吧!调用一个函数比较好的方法如下,才能即时跟踪错误,:if((status=viOpenDefaultRM(&defaultRM))<0)  returnstatus;2."REMoteOFF"没实际意义,好像只针对Rs232.
我发的程序只是想说明我看到的现象,并不是完整的程序,
有条件的话,可以在VC运行上面的程序观察一下是否看到一样的现象
用NI提供的VISA软件可以随意DOWNLOAD,为什么我写的这段小程序就不行呢
请针对这个问题展开讨论
0
回复
owen.zhao
LV.4
10
2008-05-26 10:32
@warlosetemp
我发的程序只是想说明我看到的现象,并不是完整的程序,有条件的话,可以在VC运行上面的程序观察一下是否看到一样的现象用NI提供的VISA软件可以随意DOWNLOAD,为什么我写的这段小程序就不行呢请针对这个问题展开讨论
最後一貼
int main(void)

{
if ((status = viOpenDefaultRM (&defaultRM)) < 0) {
printf("Could not open a session to the VISA Resource Manager!\n");      
return status;
}

    if ((status= viOpen (defaultRM, "GPIB::7::INSTR", VI_NULL, VI_NULL, &inst))<0 {
printf ("An error occurred opening a session !\n");
return status;
}

if ((status = viWrite (inst, "*IDN?", 5, &numInstrs)) < 0){
printf ("An error occurred write command!\n");
return status;
}
if ((status = viScanf (instrSession, "%*[^,],%*[^,],%*[^,],%[^\n]", istringinstruct)) < 0)
printf ("An error occurred read command!\n");
return status;
    }
    else
printf("%s \n",stringinstruct;)  

    status = viClose (inst);
    status = viClose (defaultRM);  

    printf ("\nHit enter to continue.");
    fflush(stdin);
    getchar();

    return 0;  
}
0
回复