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

cancel
Showing results for 
Search instead for 
Did you mean: 

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

Solved!
Go to solution

现在使用两台电脑通过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 Kudos
Message 1 of 12
(666 Views)

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

0 Kudos
Message 2 of 12
(187 Views)

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

0 Kudos
Message 3 of 12
(179 Views)

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

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

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

0 Kudos
Message 4 of 12
(156 Views)

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

0 Kudos
Message 5 of 12
(131 Views)

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

0 Kudos
Message 6 of 12
(126 Views)
Solution
Accepted by topic author hygyh

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

 

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

 

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

0 Kudos
Message 7 of 12
(124 Views)

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

0 Kudos
Message 8 of 12
(119 Views)

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

0 Kudos
Message 9 of 12
(102 Views)

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

 

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

 

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

 

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

0 Kudos
Message 10 of 12
(100 Views)