Canopen协议 (1):网络状态管理(NMT)

工控应用中,常常会遇到一些设备:电机或者其他传感器需要通过Can 这个硬件接口来通信,而且往往通信协议都是走的都是Canopen协议。自己当初搞的时候对协议也是云里雾里,为了大家不走歪路,早日走上人生巅峰,这里通过一个比较的例子(直接抓取Can总线上的报文)来理解canopen协议.

 

canopen协议 的话,文档方便大家可以去看CIA 301的文档,电机控制类的同学还需要看一下cia402 和厂家的canopen协议文档。

设备上电/复位后 ,完成自身硬件初始化后,会发出bootup报文

从而进入 图片中的Pre-operational状态,主机接收到这个报文,他就知道,喔,总线上有一个设备上线了,于是它就会通过SDO(Service data object)去配置一些东西,例如配置一下设备的PDO,然后才会通过NMT报文去切换设备的状态

我们这边先了解一下canopen的NMT 网络管理,下面这张图就是从cia301文档上面截下来的。

canopen的设备会有这几种状态,主机有权利根据实际情况去控制设备的状态。那怎么控制了?

答案就是通过NMT 协议。

 可能有小伙伴要问了,这个网络管理(NMT)在canoepn里面有啥用呢?

用一句通俗易懂的话来解释:

就是NMT网络管理控制着设备的状态,从而决定了该设备能使用网络的功能。可以看下CIA301文档的这图

这张图很清晰的解释了这种情况。像有时候面试的时候,面试官可能会问,PDO在那个状态能通信啊 ,SDO在是不是所有状态下都能通信啊?

看了这张图就能明白,PDO只能在设备处于Operational的状态下才能通信,SDO只有stoped状态下不能通信。

这也解释了上文提到的,设备发出bootup报文后进入Pre_operation状态后,我们主机需要用SDO去配置一些东西。

这边给一张can总线上的报文抓取图。设备为某个品牌的伺服电机

0 00000 01->06        8   2B  40  60  00  06  00  00  00      15.746900 R
0 00000 80->00        0                                       15.746900 R
0 00000 81->05        8   60  40  60  00  00  00  00  00      15.749880 R
0 00000 01->06        8   2B  40  60  00  07  00  00  00      15.751080 R
0 00000 81->05        8   60  40  60  00  00  00  00  00      15.752700 R
0 00000 01->06        8   2B  40  60  00  0F  01  00  00      15.753980 R
0 00000 81->05        8   60  40  60  00  00  00  00  00      15.755770 R
0 00000 80->00        0                                       15.756620 R
0 00000 01->06        8   2F  60  60  00  03  00  00  00      15.756970 R
0 00000 81->05        8   60  60  60  00  00  00  00  00      15.759780 R
0 00000 01->06        8   23  FF  60  00  00  00  00  00      15.760980 R
0 00000 81->05        8   60  FF  60  00  00  00  00  00      15.763540 R
0 00000 01->06        8   23  83  60  00  50  02  00  00      15.764730 R
0 00000 80->00        0                                       15.766610 R
0 00000 81->05        8   60  83  60  00  00  00  00  00      15.767550 R
0 00000 01->06        8   23  84  60  00  50  02  00  00      15.768740 R
0 00000 81->05        8   60  84  60  00  00  00  00  00      15.771560 R
0 00000 01->06        8   2B  40  60  00  0F  01  00  00      15.772750 R
0 00000 81->05        8   60  40  60  00  00  00  00  00      15.774890 R
0 00000 01->06        8   23  00  18  01  80  01  00  80      15.776080 R
0 00000 80->00        0                                       15.776680 R
0 00000 81->05        8   60  00  18  01  00  00  00  00      15.779920 R
0 00000 01->06        8   2F  00  18  02  0A  00  00  00      15.781120 R
0 00000 81->05        8   60  00  18  02  00  00  00  00      15.783250 R
0 00000 01->06        8   2F  00  1A  00  00  00  00  00      15.784530 R
0 00000 81->05        8   60  00  1A  00  00  00  00  00      15.786580 R
0 00000 80->00        0                                       15.786660 R
0 00000 01->06        8   23  00  1A  01  10  00  3F  60      15.787940 R
0 00000 81->05        8   60  00  1A  01  00  00  00  00      15.789900 R
0 00000 01->06        8   23  00  1A  02  10  00  41  60      15.791270 R
0 00000 81->05        8   60  00  1A  02  00  00  00  00      15.793230 R
0 00000 01->06        8   23  00  1A  03  10  00  0B  70      15.794600 R
0 00000 81->05        8   60  00  1A  03  00  00  00  00      15.796560 R
0 00000 80->00        0                                       15.796650 R
0 00000 01->06        8   23  00  1A  04  08  00  61  60      15.797930 R
0 00000 81->05        8   60  00  1A  04  00  00  00  00      15.799890 R
0 00000 01->06        8   2F  00  1A  00  04  00  00  00      15.801250 R
0 00000 81->05        8   60  00  1A  00  00  00  00  00      15.803300 R
0 00000 01->06        8   23  00  18  01  80  01  00  00      15.804580 R
0 00000 81->05        8   60  00  18  01  00  00  00  00      15.806630 R
0 00000 80->00        0                                       15.806720 R
0 00000 01->06        8   23  01  18  01  80  02  00  80      15.808000 R
0 00000 81->05        8   60  01  18  01  00  00  00  00      15.809960 R
0 00000 01->06        8   2F  01  18  02  01  00  00  00      15.811320 R
0 00000 81->05        8   60  01  18  02  00  00  00  00      15.813290 R
0 00000 01->06        8   2F  01  1A  00  00  00  00  00      15.814650 R
0 00000 81->05        8   60  01  1A  00  00  00  00  00      15.816610 R
0 00000 80->00        0                                       15.816700 R
0 00000 01->06        8   23  01  1A  01  10  00  09  70      15.817980 R
0 00000 81->05        8   60  01  1A  01  00  00  00  00      15.820030 R
0 00000 01->06        8   23  01  1A  02  20  00  0A  70      15.821310 R
0 00000 81->05        8   60  01  1A  02  00  00  00  00      15.823360 R
0 00000 01->06        8   2F  01  1A  00  02  00  00  00      15.824640 R
0 00000 81->05        8   60  01  1A  00  00  00  00  00      15.826680 R
0 00000 80->00        0                                       15.826770 R
0 00000 01->06        8   23  01  18  01  80  02  00  00      15.827960 R
0 00000 81->05        8   60  01  18  01  00  00  00  00      15.830010 R
0 00000 01->06        8   23  02  18  01  80  03  00  80      15.831290 R
0 00000 81->05        8   60  02  18  01  00  00  00  00      15.833340 R
0 00000 01->06        8   2F  02  18  02  02  00  00  00      15.834620 R
0 00000 81->05        8   60  02  18  02  00  00  00  00      15.836670 R
0 00000 80->00        0                                       15.836670 R
0 00000 01->06        8   2F  02  1A  00  00  00  00  00      15.837950 R
0 00000 81->05        8   60  02  1A  00  00  00  00  00      15.840000 R
0 00000 01->06        8   23  02  1A  01  10  00  78  60      15.841280 R
0 00000 81->05        8   60  02  1A  01  00  00  00  00      15.843320 R
0 00000 01->06        8   23  02  1A  02  10  00  03  70      15.844600 R
0 00000 81->05        8   60  02  1A  02  00  00  00  00      15.846650 R
0 00000 80->00        0                                       15.846740 R
0 00000 01->06        8   23  02  1A  03  10  00  0F  70      15.848020 R
0 00000 81->05        8   60  02  1A  03  00  00  00  00      15.849980 R
0 00000 01->06        8   2F  02  1A  00  03  00  00  00      15.851340 R
0 00000 81->05        8   60  02  1A  00  00  00  00  00      15.853390 R
0 00000 01->06        8   23  02  18  01  80  03  00  00      15.854670 R
0 00000 80->00        0                                       15.856640 R
0 00000 81->05        8   60  02  18  01  00  00  00  00      15.856720 R
0 00000 01->06        8   23  03  18  01  80  04  00  80      15.858090 R
0 00000 81->05        8   60  03  18  01  00  00  00  00      15.860050 R
0 00000 01->06        8   2F  03  18  02  FE  00  00  00      15.861410 R
0 00000 81->05        8   60  03  18  02  00  00  00  00      15.863380 R
0 00000 01->06        8   23  03  18  01  80  04  00  00      15.864740 R
0 00000 80->00        0                                       15.866620 R
0 00000 81->05        8   60  03  18  01  00  00  00  00      15.866790 R
0 00000 01->06        8   23  00  14  01  00  02  00  80      15.868070 R
0 00000 81->05        8   60  00  14  01  00  00  00  00      15.870120 R
0 00000 01->06        8   2F  00  14  02  64  00  00  00      15.871400 R
0 00000 81->05        8   60  00  14  02  00  00  00  00      15.873450 R
0 00000 01->06        8   2F  00  16  00  00  00  00  00      15.874730 R
0 00000 80->00        0                                       15.876600 R
0 00000 81->05        8   60  00  16  00  00  00  00  00      15.876770 R
0 00000 01->06        8   23  00  16  01  20  00  83  60      15.878050 R
0 00000 81->05        8   60  00  16  01  00  00  00  00      15.880100 R
0 00000 01->06        8   23  00  16  02  20  00  84  60      15.881380 R
0 00000 81->05        8   60  00  16  02  00  00  00  00      15.883430 R
0 00000 01->06        8   2F  00  16  00  02  00  00  00      15.884710 R
0 00000 80->00        0                                       15.886670 R
0 00000 81->05        8   60  00  16  00  00  00  00  00      15.886760 R
0 00000 01->06        8   23  00  14  01  00  02  00  00      15.888120 R
0 00000 81->05        8   60  00  14  01  00  00  00  00      15.890090 R
0 00000 01->06        8   23  01  14  01  00  03  00  80      15.891370 R
0 00000 81->05        8   60  01  14  01  00  00  00  00      15.893410 R
0 00000 01->06        8   2F  01  14  02  01  00  00  00      15.894690 R
0 00000 80->00        0                                       15.896660 R
0 00000 81->05        8   60  01  14  02  00  00  00  00      15.896740 R
0 00000 01->06        8   2F  01  16  00  00  00  00  00      15.898110 R
0 00000 81->05        8   60  01  16  00  00  00  00  00      15.900070 R
0 00000 01->06        8   23  01  16  01  20  00  FF  60      15.901350 R
0 00000 81->05        8   60  01  16  01  00  00  00  00      15.903400 R
0 00000 01->06        8   2F  01  16  00  01  00  00  00      15.904760 R
0 00000 80->00        0                                       15.906640 R
0 00000 81->05        8   60  01  16  00  00  00  00  00      15.906730 R
0 00000 01->06        8   23  01  14  01  00  03  00  00      15.908090 R
0 00000 81->05        8   60  01  14  01  00  00  00  00      15.910050 R
0 00000 01->06        8   23  02  14  01  00  04  00  80      15.911420 R
0 00000 81->05        8   60  02  14  01  00  00  00  00      15.913380 R
0 00000 01->06        8   2F  02  14  02  01  00  00  00      15.914750 R
0 00000 80->00        0                                       15.916620 R
0 00000 81->05        8   60  02  14  02  00  00  00  00      15.916800 R
0 00000 01->06        8   2F  02  16  00  00  00  00  00      15.918080 R
0 00000 81->05        8   60  02  16  00  00  00  00  00      15.920040 R
0 00000 01->06        8   23  02  16  01  10  00  40  60      15.921400 R
0 00000 81->05        8   60  02  16  01  00  00  00  00      15.923450 R
0 00000 01->06        8   2F  02  16  00  01  00  00  00      15.924730 R
0 00000 80->00        0                                       15.926610 R
0 00000 81->05        8   60  02  16  00  00  00  00  00      15.926780 R
0 00000 01->06        8   23  02  14  01  00  04  00  00      15.928060 R
0 00000 81->05        8   60  02  14  01  00  00  00  00      15.930110 R
0 00000 01->06        8   2B  00  23  03  96  00  00  00      15.931390 R
0 00000 81->05        8   60  00  23  03  00  00  00  00      15.933440 R
0 00000 01->06        8   2F  00  23  04  06  00  00  00      15.934720 R
0 00000 80->00        0                                       15.936680 R
0 00000 81->05        8   60  00  23  04  00  00  00  00      15.936760 R
0 00000 01->06        8   2F  00  23  02  01  00  00  00      15.938040 R
0 00000 81->05        8   60  00  23  02  00  00  00  00      15.940090 R

主机通过SDO开始去配置一些我们想要设置的东西。这部分涉及SDO下回讲吧

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值