From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
现在使用两台电脑通过GPIB相互通信,但每次通信必须得一方write,一方同时read才能通信成功。
我现在想要起一个类似监听的事件,只要对方有信息发送过来,我这边就能捕获到,但是并不成功,见附件。
GpibInterface中有Listen这个事件可以用,但是只要执行就会报错,提示未实现该事件,但实际并没有进去。
代码如下:
GpibInterface theGPIBInterface = new GpibInterface("GPIB0");//打开本地的接口进行设置
theGPIBInterface.EnableEvent(Ivi.Visa.EventType.GpibTalk);
theGPIBInterface.EnableEvent(Ivi.Visa.EventType.GpibListen);
theGPIBInterface.SendRemoteLocalCommand(Ivi.Visa.GpibInterfaceRemoteLocalMode.AssertRen);
var rmSession = new ResourceManager();//与Non-Controler进行write和read
var resources = rmSession.Find("(ASRL|GPIB|TCPIP|USB)?*");
Regex theGPIBRegex = new Regex(@"GPIB(\d)::(?<value>\d+)::INSTR");
string theGPIBTarget = resources.FirstOrDefault(x => theGPIBRegex.IsMatch(x));
MessageBasedSession mbSession = (MessageBasedSession)rmSession.Open(theGPIBTarget);
//mbSession.RawIO.Write("hello");
theGPIBInterface.Listen += TheGPIBInterface_Listen;
已解决! 转到解答。
我这里是用一台PC当作Controler起监听,另外一台PC当作Non-Controler做GPIB设备模拟器。和你的情况可能不太一样,你是要用一个Controler同时监听、控制两个Non-Controler么?
你好,最后解决了两台电脑用GPIB卡通讯的问题吗?
我现在也是用两台电脑两块GPIB卡直接连起来通讯,发送数据的时候总是返回 EADDR 的错误,我也是按照下面的这篇文章来的几乎每个细节我都检查过了,但就是发送数据报错(EADDR )。
https://digital.ni.com/public.nsf/allkb/321A97B3D0D4ECCA86256E62004A0CD5
解决了,当时也是研究了很久,我在附件上传了核心代码,用C#写的,你可以参考下。
附件里面我用C#写了分别作为Controller和NonController起监听的核心代码,可以参考下。
另外调试的时候可以借助NI的工具先调试NonController的代码,能收到消息就成功。再调试Controller的代码,用于发送信息和接收NonController回传的信息。
当时我也是研究了好久,希望对你有用。
控制端读取数据分两种,走的是不同的道。
一种是字符串,Controller使用device自带的write和readstring就可以进行正常的数据写读,Non-Controller对应使用board的readstring和write进行正常读写。
一种是STB,由Non-Controller发送,Controller只能接收,接收的代码我之前的附件有提供,即Notify函数内的代码;
通信时注意超时时间,用NI的软件调试会更方便。