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.

NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

求助:Controler用C#如何起一个监听事件,监听Non-Controler发上来的信息

已解决!
转到解答

现在使用两台电脑通过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;

 

 

0 项奖励
1 条消息(共 12 条)
3,227 次查看

您好,请问这个问题后面您解决了吗?现在我也需要监听两个GPIB通信的设备消息内容,请问要怎么做才能实现,请帮忙给个解决办法,谢谢您了!

0 项奖励
2 条消息(共 12 条)
2,748 次查看

我这里是用一台PC当作Controler起监听,另外一台PC当作Non-Controler做GPIB设备模拟器。和你的情况可能不太一样,你是要用一个Controler同时监听、控制两个Non-Controler么?

0 项奖励
3 条消息(共 12 条)
2,740 次查看

你好,最后解决了两台电脑用GPIB卡通讯的问题吗?

我现在也是用两台电脑两块GPIB卡直接连起来通讯,发送数据的时候总是返回 EADDR 的错误,我也是按照下面的这篇文章来的几乎每个细节我都检查过了,但就是发送数据报错(EADDR )。

https://digital.ni.com/public.nsf/allkb/321A97B3D0D4ECCA86256E62004A0CD5

0 项奖励
4 条消息(共 12 条)
2,717 次查看

是的,想让两台设备自己通信,然后我在一边监听通讯消息

0 项奖励
5 条消息(共 12 条)
2,692 次查看

解决了,当时也是研究了很久,我在附件上传了核心代码,用C#写的,你可以参考下。

0 项奖励
6 条消息(共 12 条)
2,687 次查看
解答
接受人 hygyh

附件里面我用C#写了分别作为Controller和NonController起监听的核心代码,可以参考下。

 

另外调试的时候可以借助NI的工具先调试NonController的代码,能收到消息就成功。再调试Controller的代码,用于发送信息和接收NonController回传的信息。

 

当时我也是研究了好久,希望对你有用。

0 项奖励
7 条消息(共 12 条)
2,685 次查看

非常感谢!我先研究下,不懂还继续跟您请教,谢谢谢谢!

0 项奖励
8 条消息(共 12 条)
2,680 次查看

请问有控制端读取数据的代码吗?我这边控制端写数据能成功,但是读数据一直失败。

0 项奖励
9 条消息(共 12 条)
2,663 次查看

控制端读取数据分两种,走的是不同的道。

 

一种是字符串,Controller使用device自带的write和readstring就可以进行正常的数据写读,Non-Controller对应使用board的readstring和write进行正常读写。

 

一种是STB,由Non-Controller发送,Controller只能接收,接收的代码我之前的附件有提供,即Notify函数内的代码;

 

通信时注意超时时间,用NI的软件调试会更方便。

0 项奖励
10 条消息(共 12 条)
2,661 次查看