CANopen系列文章【1】--SYNC

来源:互联网 发布:在中国的外国人 知乎 编辑:程序博客网 时间:2024/06/04 00:40

一个CANopen网络中,

  (1)只有一个站点发送SYNC

(2)发送SYNC的为生产者,接收SYNC的为消费者,就是说符合生产/消费模型

(3)  不一定让主站发送SYNC,从站也可以。

(4)對象字典中Index 1005 & 1006是指的主站發送SYNC的COD-ID和時間, 1007指的是窗口,(博主接触的资料是SYNC的50%或75%作为窗口)

----------------明天继续---------------------

(5)SYNC同步什么情况下用到?[本博主答道]答案:至少伺服驱动器用到。据说伺服对实时性要求较高。

(6)[学无止境2013]想让主站来发SYNC报文,是主站一上电就发出SYNC报文呢,还是待主站发现有从机接入后再发送SYNC报文?

第一种方法是不管有没有从机接入,我主机都一直发送SYNC报文,这两种哪一个思路是正确的?

[YUANFANG] 上一个贴子里已经讨论过了,你可以考虑,主站在上电时加载从站配置的时候,如果发现有从站使用同步PDO,就开始发,当然,你也可以等到有同步PDO的从站连接正常后再发,就是稍麻烦一点,所有的做法都可以,只要保证需要SYNC信号的时候有,就行  

(7)学无止境2013,如果有的从机有,有的从机没有,那主机发SYNC报文好呢还是不发呢?
遇到这种情况一般都怎么处理,采取什么办法和对策,请远方指点。

远方,如果有些从站的PDO是配置成同步模式,你就一定要发SYNC,不然PDO没法启动啊,就算目前的配置,所以PDO都没有使用SYNC模式,你也可以发SYNC,不影响数据交换,因为SYNC报文只是提供一个同步信号而已,需要的时候用,不需要就不用  

(8)远方说不要用远程帧,协议不推荐

(9)ODD_SYNC_COB_ID       0x00000080L    /*index 0x1005*/     //if bit30=0, node produces SYNC 只接受,不发送

(10)

---------------------------------question----------

对CANopen使用有一段时间了,有一个问题,请问高手或者版主,不知道如何实现SYNC同步,即通过周期发送SYNC消息后触发,同步得到PDO数据。
同步(通过接收SYNC对象实现同步)

--------------answer----------

简单的来说,CANOPEN里的同步实现方法,就是使用PDO把控制数据发送给每一个从站,但因为是同步模式,每个收到PDO控制命令的从站,都只是把命令暂时保存起来,当所有的从站命令都发送完毕后,主站才会送出SYNC广播报文,所有支持同步传输模式的从站,在收到SYNC报文后,大家一起开始执行之前保存好的控制命令,这就是同步机制  

(11)------------question-------------

另外加上一个问题 就是SYNC同步,比如我让两个驱动器同步,给两个驱动顺序赋值完,主动的发一个SYNC信号,这样可以吧?SYNC不需要是周期性的吧?就是每次我对所有从节点赋值完 就发一个SYNC。这样应该没有问题吧?

---------anser------------

SYNC周期永远都不会变,速度的变化与SYNC周期没有关系,速度曲线是由你的上位控制器算出来的,按SYNC周期取点送给伺服即可

如果你要做这方便的开发,就要潜心研究一下,没有那么简单 

(12):SYNC一定要通过对象字典设置成固定周期的吗?答案:是。

问:
那么比如两轴进行插补,有加减速,在加速阶段周期应该越来越小吧?时刻变化的,那这个SYNC周期怎么办?------------------------------------------------answer----------------------------------------------------------

 1。同步周期应该是恒定的,它基本上就是系统通信部分的节拍了,节拍乱了,一切都是浮云了。
2。不要把通信协议和实际的应用混在一起,按照你的最高应用需求去设计通信周期。
3。涉及到数控系统,插补、加减速和通信周期是没有任何关系的,速度的高低可并不意味着通信周期的大小。

(13)--------------

请问如果在402插补模式下,如果遇到其他紧急报文的发送,延迟了SYNC的发送,怎么处理?谢谢 

----------------answer-----------------------

可以在通讯周期上为紧急报文设计一个发送时间窗,避开SYNC.不光紧急报文,其它的SDO PDO也都可能会使SYNC延迟,即这些帧已经先产生了并且已经放到CAN控制器的发送队列,甚至可能已经开始上载到总线上,你不可能把它拉下来吧,这种情况可能会带来百微秒级的延时,更坏的情况,先产生的低优先级的比如SDO一直竞争不到总线的控制权,将高优先级的SYNC堵在后面,这样SYNC的发送延迟可能会更久。这样看来你的SYNC要么忍受,要么避开。选择避开的话,就需要规规划你的通信周期,在一个通信周期上分时段,哪一段留给实时通信,哪一段留给非实时通信,更详细的,那一段分给SYNC,哪一段分给EMCY,哪一段分给PDO。可以看看DS301协议,有一段这方面介绍。  

(14)在从站可配置为SYNC producer时,如果把该从站配置为SYNC producer,在整个can网络处于Operational状态时,如果主站检测到该从站异常,主站应该采取哪些异常处理措施???

答案:winshton-这个是你的错误处理程序需要关心的问题,跟协议栈无关,协议栈只负责提供错误检测机制,由你的上层错误处理程序查询到这个异常,然后是应该停掉整个网络的通讯还是忽略这个错误,继续指定一个节点作为sync producer,这些都由你来决定,如果这个节点很重要,出现异常后整个系统瘫痪(例如作为整个系统闭环控制的反馈),不能正常工作,那么就可能要把网络切换到停止状态,更换板卡维修... 

问:如果从站Object 1005h Default value 为80000080h
Object 1006h设为0,是不是从站也是一个SYNC对象的消费者。?

答案:
1.1005h生成SYNC的控制位是第30位,所以你想说的是40000080h吧。
2.我不赞同你的理解,1005h和1006h共同决定是否产生SYNC,有一个条件不满足就不能够成为SYNC的生产者,但这两个条件是有区别的,1005是基本条件,是控制SYNC的开关,而1006只是个限制条件,如果它为0的话,SYNC的周期将无意义,因此要限制它。你描述的情况可以这样说,1005决定了这个节点是SYNC生产者,但是1006的设置对于产生SYNC是个笑话,周期为0是不可能实现的。



1 0
原创粉丝点击