通讯错误自动检测 点击:1013 | 回复:11



yhm644

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-06 11:05:49
楼主

请问如何异步检测通讯中断或通讯错误的事件



楼主最近还看过



刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:19帖 | 8241回
  • 年度积分:401
  • 历史总积分:28764
  • 注册:2005年3月09日
发表于:2017-06-06 11:30:08
1楼

是运动控制器与驱动器的通讯还是运动控制器与上位控制器(例如pc)的通讯?

 

在什么地方检测?运动控制器上还是上位控制器(比如pc)上?

 

什么型号的控制器?采用什么通讯方式?pci?rs232?ethernet?ethercat?

 

yhm644

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-06 12:45:35
2楼

B140 eth通讯,客户要求不能用查询

yhm644

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-06 12:46:33
3楼

是上位机检测,然后自动重连

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:19帖 | 8241回
  • 年度积分:401
  • 历史总积分:28764
  • 注册:2005年3月09日
发表于:2017-06-06 13:18:11
4楼

那么就在通讯出错的时候(比如超时)时关掉重新连接就是了,任何一个版本的API都会在通讯时反馈通讯信息的,通常是正常的,出错时可以得到出错信息,比如指令错误、通讯超时等等。

yhm644

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-06 14:07:49
5楼

通讯出错C#如何实现,不能通过上位机发指令的方式,需要异步的方式,也就是上位机什么也不发送,手册上说有#TCPERR程序,但B140不支持吧

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:19帖 | 8241回
  • 年度积分:401
  • 历史总积分:28764
  • 注册:2005年3月09日
发表于:2017-06-06 15:17:16
6楼

"不能通过上位机发指令的方式,需要异步的方式,也就是上位机什么也不发送,"

您这个要求,是不可能实现的。

要确认通讯有问题,也许可以不必实际发送什么。比如确认通讯网络通讯handle是否正常。galil本身的api没有提供在pc上查询handle的函数,只提供了查询控制器上handle的指令。

但是pc上的通讯handle正常,并不能确保通讯没有问题,真的要确认通讯正常,还是发点什么信息比较有谱。

 

“手册上说有#TCPERR程序,”

这个程序是用于控制器内部的,不是应用于上位机的。

 

yhm644

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-06 15:40:01
7楼

好的,谢谢刘工!有问题再请教。

yhm644

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-06 15:47:14
8楼

Galil上位机软件的帮助文档里有一句话是针对message事件的

top

C++

string Galil::message(int timeout_ms = 500)

VB Event

Sub onMessage(ByVal message As String)

C# Event

void onMessage(string message)

Returns unsolicited messages (MGs) sent from the controller. Traffic transmitted by the controller to the host can be categorized into two primary groups: solicited and unsolicited. Solicited bytes are responses from commands sent by the host. For example, a solicited message is an encoder position string returned from g.command("TPX"). Unsolicited messages are transmitted asynchronously and could be output from MG commands from a running program aboard the controller, asynchronous error messages, trace (TR1) output, or responses from commands in a controller-side DMC program (TP, RP, etc).

For Ethernet connections, the library will automatically open two Ethernet handles on the controller. One TCP handle for command-and-response traffic, and one UDP handle for asynchrounous data, including messages (MGs).

C++: If the host-side message queue is empty, message() will wait up to timeout_ms for a message. If none occur within timeout_ms, a timeout error will be thrown. If there are already messages in the queue when message() is called, the function will immediately return the contents. If a zero timeout is specified, no errors will be thrown; message() will simply return the waiting queue (even if it is empty, ""). A -1 timeout will cause message() to block until a message is received.

COM: There are no timeouts for the onMessage event. 

意思是对于c++如果超时就会抛出错误,下位机可以定时发送消息。这种方法可行吗。怎么检查这个抛出的错误。


刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:19帖 | 8241回
  • 年度积分:401
  • 历史总积分:28764
  • 注册:2005年3月09日
发表于:2017-06-07 14:00:41
9楼

意思是对于c++如果超时就会抛出错误,下位机可以定时发送消息。这种方法可行吗。

算是可行,但是没有什么意义。

首先,这种方式使用的handle,与pc想控制器发送指令所用的 handle不同。当然如果是物理原因导致的通讯中断,比如网线断了,两个handle所受的影响是一样的。

但如果是软件原因,比如病毒或者杀毒软件、防火墙之类的,则不一定。

其次,让下位机定时发送,还涉及到上位几和下位几的时间同步机制,虽然要求不高,也是个麻烦。

所以,还不如上位机自己经常发送个"TPA“之类的指令,看看是否出错。


yhm644

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2016年10月13日
发表于:2017-06-12 11:03:13
10楼

好的,谢谢您,只能建议客户这么做了。

蓝静0812

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 79回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2015年7月13日
发表于:2018-07-06 13:15:01
11楼

谢谢楼主!在攒积分中。。。


热门招聘
相关主题

官方公众号

智造工程师