├── .gitignore ├── CANopen_DS301_CN_image ├── 1.png ├── 10.png ├── 11.png ├── 16.png ├── 17.png ├── 18.png ├── 19.png ├── 2.png ├── 20.png ├── 21.png ├── 22.png ├── 23.png ├── 24.png ├── 25.png ├── 26.png ├── 27.png ├── 28.png ├── 29.png ├── 3.png ├── 30.png ├── 31.png ├── 32.png ├── 33.png ├── 34.png ├── 35.png ├── 36.png ├── 37.png ├── 38.png ├── 39.png ├── 4.png ├── 40.png ├── 41.png ├── 42.png ├── 43.png ├── 44.png ├── 45.png ├── 46.png ├── 47.png ├── 48.png ├── 49.png ├── 5.png ├── 50.png ├── 51.png ├── 52.png ├── 53.png ├── 54.png ├── 55.png ├── 56.png ├── 57.png ├── 58.png ├── 59.png ├── 6.png ├── 60.png ├── 61.png ├── 62.png ├── 63.png ├── 64.png ├── 65.png ├── 67.png ├── 68.png ├── 69.png ├── 7.png ├── 70.png ├── 71.png ├── 72.png ├── 73.png ├── 74.png ├── 75.png ├── 76.png ├── 8.png ├── 9.png ├── b1.png └── b2.png ├── README.md ├── SUMMARY.md ├── chapter1.md ├── chapter2.md ├── chapter3.md ├── chapter4.md ├── chapter5.md ├── chapter6.md ├── chapter7.1.md ├── chapter7.2.md ├── chapter7.3.md ├── chapter7.4.md ├── chapter7.5.md ├── chapter7.md └── chapter8.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Node rules: 2 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 3 | .grunt 4 | 5 | ## Dependency directory 6 | ## Commenting this out is preferred by some people, see 7 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 8 | node_modules 9 | 10 | # Book build output 11 | _book 12 | 13 | # eBook build output 14 | *.epub 15 | *.mobi 16 | *.pdf -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/1.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/10.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/11.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/16.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/17.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/18.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/19.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/2.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/20.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/21.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/22.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/23.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/24.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/25.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/26.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/27.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/28.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/29.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/3.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/30.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/31.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/32.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/33.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/34.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/35.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/36.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/37.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/38.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/39.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/4.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/40.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/41.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/42.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/43.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/44.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/45.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/46.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/47.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/48.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/49.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/5.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/50.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/51.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/52.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/53.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/54.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/55.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/56.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/57.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/58.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/59.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/6.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/60.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/61.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/62.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/63.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/64.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/65.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/67.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/68.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/69.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/7.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/70.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/71.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/72.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/73.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/74.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/75.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/76.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/8.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/9.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/b1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/b1.png -------------------------------------------------------------------------------- /CANopen_DS301_CN_image/b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winshton/canopen-ds301-cn/58d33d08eaaa2bc418a73995c6b9107ea7c626c4/CANopen_DS301_CN_image/b2.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 介绍 2 | ======= 3 | 4 | 接触CANopen有将近十年了,工作也多多少少与之有关,虽然做了这么多年,却谈不上精通,因为投入了颇多精力,所以感情比较深,鉴于这么多年也没有一份完整的协议翻译,而以之为基础的POWERLINK都成国家标准了,它娘却还不会说中文,遂下决心翻译主协议,前后历时三个多月将DS301翻译出来,也做了基本的校对,拿出来见人了,由于水平有限,好多地方译的力不从心,因此想将它开放出来,希望同行的小伙伴们一起把它译好,让CANopen入门的童鞋不再那么苦逼。 5 | 6 | 我会逐步将现有文档转到这里,以后的版本将在此修改。 7 | 家人住院,延迟更新,希望她快快好转。 8 | 9 | 获取原始PDF格式V02版本可访问我的博客:http://www.cnblogs.com/winshton/p/4917632.html 10 | 11 | #注译版本记录 12 | |**版本**|**译者**|**日期**|**备注**| 13 | |---|---|---|---| 14 | |V0.01|winshton|2015/10/28|创建| 15 | |V0.1|winshton|2015/12/9|初稿| 16 | |V0.2|winshton|2016/1/8|完成首次校对| 17 | |V0.3|winshton|2016/2/17|向Markdown格式转换,并再次校对| 18 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | * [介绍](README.md) 4 | * [适用范围](chapter1.md) 5 | * [参考资料](chapter2.md) 6 | * [缩写和定义](chapter3.md) 7 | * [建模](chapter4.md) 8 | * [物理层](chapter5.md) 9 | * [数据链路层](chapter6.md) 10 | * [应用层](chapter7.md) 11 | * [数据类型和编码规则](chapter7.1.md) 12 | * [通信对象](chapter7.2.md) 13 | * [网络初始化和系统boot-up](chapter7.3.md) 14 | * [对象字典](chapter7.4.md) 15 | * [通信协议规范](chapter7.5.md) 16 | * [附件A(更多信息)](chapter8.md) 17 | 18 | -------------------------------------------------------------------------------- /chapter1.md: -------------------------------------------------------------------------------- 1 | # 1. **适用范围** 2 | 3 | 本规范定义了CANopen应用层。包括数据类型、编码规则、对象字典以及CANopen通信服务协议。此外,本规范也定义了CANopen网络管理服务协议。 4 | 本规范规定了CANopen通信协议,例如物理层、通信对象标识符预定义连接集、应急对象(Emergency)、时间戳和同步通信对象。 5 | 6 | -------------------------------------------------------------------------------- /chapter2.md: -------------------------------------------------------------------------------- 1 | # 2. **参考资料** 2 | 3 | ## 2.1 **规范性引用** 4 | /EN61131-3/ EN 61131-3,可编程控制器——第3部分:编程语言 5 | /ISO7498-1/ ISO 7498-1,信息技术-开放系统互连-基本参考模型:基本模型 6 | /ISO8859/ ISO 8859,信息技术——8位单字节编码图形字符集 7 | /ISO11898-1/ ISO 11898-1,道路车辆——控制器区域网络(CAN)——第1部分:数据链路层和物理信令 8 | /ISO11898-2/ ISO 11898-2,道路车辆——控制器区域网络(CAN)——第2部分:高速介质访问单元 9 | /ISO11898-3/ ISO 11898-3,道路车辆——控制器区域网络(CAN)——第3部分:低速度、容错的介质相关接口。 10 | /ISO10646/ ISO 10646,信息技术-通用多八位编码字符集(UCS) 11 | 12 | ## 2.2 **信息参考** 13 | 14 | /IEEE754/ IEEE 754,标准的二进制的浮点运算 15 | /IEC62390/ IEC TR 62390,常规的自动化设备–协议的准则 16 | 17 | -------------------------------------------------------------------------------- /chapter3.md: -------------------------------------------------------------------------------- 1 | # 3. **缩写和定义** 2 | 3 | ## 3.1 **缩写** 4 | 5 | **ARQ** 自动重复请求 6 | 7 | **CAN**控制局域网 8 | 9 | **CAN ID** CAN标识符 10 | 11 | **COB** 通信对象 12 | 13 | **COB-ID** COB标识符 14 | 15 | **CRC** 循环冗余校验 16 | 17 | **CSDO** Client-SDO 18 | 19 | **DAM** 目的地址模式 20 | 21 | **FSA** 有限状态机 22 | 23 | **LLC** 逻辑链路控制 24 | 25 | **LSB** 最低位/字节 26 | 27 | **MAC** 介质访问控制 28 | 29 | **MDI** 介质相关接口 30 | 31 | **MPDO** 多路复用PDO 32 | 33 | **MSB** 最高位/字节 34 | 35 | **NMT** 网络管理 36 | 37 | **NODE-ID** 节点标识符 38 | 39 | **OSI** 开放系统互连 40 | 41 | **PDO** 过程数据对象 42 | 43 | **PLS** 物理层的信令 44 | 45 | **PMA** 物理介质连接 46 | 47 | **RPDO** 接收PDO 48 | 49 | **RTR** 远程传输请求 50 | 51 | **SAM** 源地址模式 52 | 53 | **SDO** 服务数据对象 54 | 55 | **SSDO** Server-SDO 56 | 57 | **SYNC** 同步对象 58 | 59 | **TPDO** 发送PDO 60 | ## 3.2 **定义** 61 | 62 | **标准帧** 63 | 64 | /ISO11898-1/中定义的最多可包含8个字节数据和11位标识符的消息 65 | 66 | **扩展帧** 67 | 68 | /ISO11898-1/中定义最多可包含8个字节数据和29位标识符的消息 69 | 70 | **CAN-ID** 71 | 72 | /ISO11898-1/中定义的 CAN 数据和远程帧标识符 73 | 74 | **COB-ID** 75 | 76 | 包含CAN-ID 和附加控制位的标识符 77 | 78 | **实体** 79 | 80 | 特指事物如人、地点、过程、概念、组织或事件 81 | 82 | **FSA** 83 | 84 | 若干计算行为组成的模式作为一个状态,一个启动状态,输入一个字母,映射输入符号和当前状态到下一状态的转换功能;以一个字符串输入作为启动状态的计算起始;依赖传递函数变换到新状态(译者注:无法按字面翻译,译者定义为表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型,即有限状态机)。 85 | 86 | **设备域** 87 | 88 | 1. 自动化系统中独立联网的物理实体,在特定的上下文和分隔符中使用自身接口执行指定的功能。 89 | 2. 在自动化系统中向其他实体执行控制、操纵和/或传感功能和相关接口的实体。 90 | 91 | **逻辑设备** 92 | 93 | 根据设备域模型所组织的一系列对象和行为, 描述了该设备的数据和行为使网络所理解。 94 | 95 | **Node-ID** 96 | 97 | 网络范围内每个CANopen设备的独特标识 98 | 99 | **对象** 100 | 101 | 封装了状态和行为有明确界限和身份的实体。 102 | 103 | **虚拟设备** 104 | 105 | 能够像域设备一样完成所属功能事件的软件实体。 106 | 107 | -------------------------------------------------------------------------------- /chapter4.md: -------------------------------------------------------------------------------- 1 | # 4. **建模** 2 | 3 | ## 4.1 **设备模型** 4 | 5 | 图1所示,设备域至少包含一个CANopen设备。其中每个CANopen设备至少带有一个包含数据链路层(见本章第6节)和物理层(见本章第5节)的网络接口、一个node-ID、至少一种通信状态机(FSA)。通信状态机不仅带有NMT从状态机(见7.3.2),还包括应急状态机(见7.2.7)等其他附加状态机。这些附加状态机定义于所谓的框架协议内,不属于本协议范围。一个CANopen设备至少包含一个多至8个逻辑设备,且不可分割于多个设备域。每个逻辑设备可包含一个逻辑设备状态机(可选)和多个虚拟设备。逻辑设备不可分割于多个CANopen设备。逻辑设备定义于所谓的设备协议中(见4.5.1),不在本协议的范围内。每个虚拟设备包含一个虚拟设备状态机且不可分割于多个逻辑设备。虚拟设备定义于所谓的应用协议(请参阅4.5.2),不在本协议范围内。设备域的最小化结构如图2所示。 6 | 7 | ![图1:设备域模型](./CANopen_DS301_CN_image/1.png) 8 | 9 | 图1:设备域模型 10 | 11 | ![图2:最小化设备域](./CANopen_DS301_CN_image/2.png) 12 | 13 | 图2:最小化设备域 14 | 15 | ## 4.2 **通信参考模型** 16 | 17 | ### 4.2.1 **简述** 18 | 19 | ![图3:通信参考模型](./CANopen_DS301_CN_image/3.png) 20 | 21 | 图3:通信参考模 22 | 23 | 通信概念符合ISO-OSI参考模型(图3左侧,见/ISO7498-1/)。 24 | 25 | ###4.2.2 **CANopen应用层** 26 | 27 | ####4.2.2.1 **概述** 28 | 29 | 应用层用来描述CANopen设备间配置和同步实时数据的机制。该功能在应用层中被分割为若干不同的逻辑服务对象。 服务对象提供特定的功能和所有相关的服务。在本协议的相关服务对象规范中进行具体描述。 30 | 31 | 通过调用应用层的服务对象接口来完成应用交互。协议提供的服务经由数据链路层实现交换数据。在本协议的服务对象相关协议规范中进行具体描述。 32 | 33 | ####4.2.2.2 **服务原语** 34 | 35 | 服务原语意指应用程序与应用程序之间交互。 有四种不同的原语: 36 | * 应用程序发起到应用层的服务请求。 37 | * 应用层向应用程序发送的通知,汇报一个应用层检测到的内部事件或者表明其收到一个服务请求。 38 | * 应用程序为接收到的一个汇报向应用层做出应答。 39 | * 应用层为收到应用程序的服务请求所作的响应确认。 40 | 41 | ####4.2.2.3 **应用层服务** 42 | 43 | ![图4:应用层服务](./CANopen_DS301_CN_image/4.png) 44 | 45 | 图4:应用层服务 46 | 47 | 应用层服务定义若干在和协同操作的应用程序间交换原语的特定服务对象。CANopen支持的应用层服务见图4所示。 48 | * 本地服务只涉及本地的服务对象。应用程序向本地服务对象发出请求,执行请求的服务对象在本地,而并不与远程对应的服务对象产生通信行为。 49 | * 发起的服务只涉及本地的服务对象。服务对象(即服务提供者)检测到一个事件但该事件并非一个请求服务。事件被通报给应用程序。 50 | * 一次无应答服务涉及一个或多个对等服务对象。应用程序向本地服务对象发出一个请求。此请求将被传送到远程对应的服务对象,每个对应服务对象都会将请求作为一个操作行为传递给所属应用程序。处理结果不返回。 51 | * 一次带应答服务只涉及远程对应的服务对象。应用程序向本地服务对象发出一个请求。此请求将传送到对应的远程服务对象, 对应的服务对象将其作为一个操作行为传递给所属应用程序。其产生应答回传给请求方应用程序。 52 | 53 | 无应答服务和应答服务统称为远程服务。 54 | 55 | ##4.3 **CANopen设备模型** 56 | 57 | ###4.3.1 **简述** 58 | 59 | CANopen 设备的结构如下(图5所示): 60 | * 通信–此功能单元提供通信对象和与之相应的通过底层网络结构传输数据的能力。 61 | * 对象字典–对象字典集合了设备上所有影响应用程序对象、通信对象和状态机行为的数据项。 62 | * 应用程序 - 应用程序包括与过程环境能够产生相互作用的设备功能。(译者注:这里的应用程序仅只参与通信过程,会对网络其他设备造成影响的关联设备功能实现) 63 | 64 | 因此,对象字典是通信对象和应用程序对象之间的接口。(译者注:理解这一点很重要) 65 | 66 | ![图5:CANopen设备模型](./CANopen_DS301_CN_image/5.png) 67 | 68 | 图5:CANopen设备模型 69 | 70 | ##4.4 **通信协议分类** 71 | 72 | ###4.4.1 **简述** 73 | 74 | 通信协议分类描述不同通信协议的原则和消息传输触发的可用模式。 75 | 76 | CANopen 通信协议支持同步和事件驱动的消息传输。通过同步传输使得网络范围内的协同数据采集和动作输出成为可能。同步传输依赖于预定义通信对象(译者注:主要是指支持预定义连接集的PDO)。同步传输遵循预定义的同步消息机制、事件驱动的消息传输可以在任何时间发起。 77 | 78 | 事件性质通信机制的基本属性要求定义通信的抑制时间。为保证网络上的低优先级通信对象不被饿死, 需要为通信对象设计抑制时间。即将通信对象定义两次传输服务间的最小时间间隔作为抑制时间。 79 | 80 | 就其功能,归纳出三种类型的通信协议模型 81 | * 主/从协议(见4.4.2) 82 | * 客户端/服务器协议(见4.4.3) 83 | * 生产者/消费者协议(见4.4.4) 84 | 85 | ###4.4.2 **主/从协议** 86 | 87 | 任意时刻CANopen网络中都仅存在一个设备以主设备身份执行特定功能。CANopen网络中所有其他的设备均为从设备。按协议规定,主设备会向被寻址从设备(们)发送请求,从设备(们)响应。图6定义了无应答的主/从协议模式。图7定义了带应答的主/从协议模式。 88 | 89 | ![图6:无应答的主/从通信协议](./CANopen_DS301_CN_image/6.png) 90 | 91 | 图6:无应答的主/从通信协议 92 | 93 | ![图7:带应答的主/从通信协议](./CANopen_DS301_CN_image/7.png) 94 | 95 | 图7:带应答的主/从通信协议 96 | 97 | ###4.4.3 **客户端/服务器协议** 98 | 99 | 单一客户和单一服务器之间的一种通信协议。客户端发送请求(上传/下载)触发服务器执行某项任务。在任务完成后服务器返回应答。图8定义了客户端/服务器协议模式。 100 | 101 | ![图8:客户端/服务器通信协议](./CANopen_DS301_CN_image/8.png) 102 | 103 | 图8:客户端/服务器通信协议 104 | 105 | ###4.4.4 **生产者/消费者协议-推/拉模式** 106 | 107 | 生产者/消费者协议涉及一个生产者和若干消费者(没有也可以)。推模式定义见图9,其特点是由生产者发起一个无确认的协议请求。拉模式的定义见图10,其特点是由生产者发起的需要确认的协议请求。 108 | 109 | ![图9:推模式](./CANopen_DS301_CN_image/9.png) 110 | 111 | 图9:推模式 112 | 113 | ![图10:拉模式](./CANopen_DS301_CN_image/10.png) 114 | 115 | 图10:拉模式 116 | 117 | ###4.4.5 **对象字典** 118 | 119 | 对象字典基本上是一组有序的、预定义范式的、经由网络可访问的接口。每个接口对象通过一个16位的索引和一个8位的子索引寻址。 120 | 121 | ##4.5 **网络系统模型** 122 | ###4.5.1 **设备协议** 123 | 设备协议是对一个逻辑设备(包含一个虚拟设备)对象字典的对象的描述。而描述包含了对象的功能和规格。功能描述定义了对象在对象字典内的行为。规格描述定义了对象应执行或可执行的CANopen网络访问,以及依赖于什么样的访问方法。 124 | 125 | ###4.5.2 **应用协议** 126 | 应用协议是对虚拟设备对象字典及其对象的描述,并且适配网络中所有CANopen设备(译注:接入CANopen网络的所有设备都要支持)。功能描述定义了对象在对象字典内的行为。规格描述定义了对象应执行或可执行的CANopen网络访问,以及索引和子索引是怎么样被访问的。 127 | 128 | [页首](#jump) 129 | -------------------------------------------------------------------------------- /chapter5.md: -------------------------------------------------------------------------------- 1 | #5 **物理层** 2 | 3 | ##5.1 **OSI参考模型** 4 | 5 | 根据OSI参考模型,物理层(如图11所示)被分为三个子层: 6 | * 介质相关接口 7 | * 物理介质连接 8 | * 物理信令 9 | 10 | ![图11: 物理层参考模型](./CANopen_DS301_CN_image/11.png) 11 | 12 | 图11: 物理层参考模型 13 | 14 | ##5.2 **介质相关接口** 15 | 介质相关接口不属于本文范畴。 16 | 17 | ##5.3 **物理介质连接** 18 | 支持CANopen设备连接的物理介质应满足通用高速两线制差分信号传输协议/ISO11898-2/要求。 19 | 20 | 备注:可以使用其他物理介质接入技术如/ISO11898-3/。 21 | 22 | 根据/ISO11898-2/规定使用的高速收发器VCAN_H和VCAN_L最大等级应达到+16V。CANopen设备之间的电隔离可选。建议使用误连接耐压等级在30V以上的收发器。 23 | ##5.4 **物理信令** 24 | 25 | 位编码/解码和同步应符合/ISO11898-1/规范定义。 26 | 27 | 位定时应符合/ISO11898-1/规范的要求,建议参照表1的定义(总线长度范围估计见表2)。至少支持一种表中所列速度,建议都支持。 28 | 29 | ![表1:推荐位定时设置](./CANopen_DS301_CN_image/b1.png) 30 | 31 | 表1:推荐位定时设置 32 | 33 | ![表2:总线长度预估置](./CANopen_DS301_CN_image/b2.png) 34 | 35 | 表2:总线长度预估 36 | 37 | 注1:总线长度的估计是基于建议位置的采样点。 38 | 39 | 总线长度的估计基于传播延迟时间为5ns/m。延迟时间要考虑到所使用控制器、CAN收发器、以及光耦合器(可选)。 40 | 41 | -------------------------------------------------------------------------------- /chapter6.md: -------------------------------------------------------------------------------- 1 | #6 **数据链路层** 2 | ##6.1 **简述** 3 | 所述的网络应基于/ISO11898-1/的数据链路层及其子层。 4 | ##6.2 **CAN帧类型** 5 | 本规范基于11位CAN-ID帧。不要求支持29位标识符的CAN扩展帧。 6 | 7 | 注:由于某些应用要求使用29位扩展帧,如果所有CANopen设备都支持扩展帧,网络才可以运行在该模式下。 8 | 9 | -------------------------------------------------------------------------------- /chapter7.1.md: -------------------------------------------------------------------------------- 1 | ##7.1 **数据类型和编码规则** 2 | ###7.1.1 **数据类型和编码规则简述** 3 | 了在网络上交换有意义的数据,必须保证数据格式为生产者和消费者所识别。本规范提供基于此概念的数据类型。 4 | 5 | 编码规则定义了数据所表达值的类型和传输语义。值以位序列的形式表达。位序列以字节为传输单元。各数据类型的编码风格均为小端模式。 6 | 7 | 应用程序通常请求的都是基本数据类型。使用复合数据类型机制,可以通过扩展可用数据类型表来实现。例如一些常用的数据类型定义如“Visible String”或“Time of Day”(参见7.1.6.3和7.1.6.5)。本文对复合数据类型的定义从技术角度一般取其应用含义,如“DEFTYPES”而不是“DEFSTRUCTS”。 8 | 9 | ###7.1.2 **数据类型定义** 10 | 数据类型定义由数据值和数据类型编码之间的关系决定。类型定义的命名中体现数据类型。数据语法和数据类型定义如下(见/EN61131-3/)。 11 | 12 | data_definition ::= type_name data_name 13 | type_definition ::= constructor type_name 14 | constructor ::= compound_constructor|basic_constructor 15 | compound_constructor ::= array_constructor|structure_constructor 16 | array_constructor ::=‘ARRAY’‘[‘length‘]’‘OF’type_name 17 | structure_constructor ::=‘STRUCT’‘OF’component_list 18 | component_list ::= component{‘,’component} 19 | component ::= type_name component_name 20 | basic_constructor ::=‘BOOLEAN’| 21 | ‘VOID’bit_size| 22 | ‘INTEGER’ bit_size| 23 | ‘UNSIGNED’ bit_size| 24 | ‘REAL32’| 25 | ‘REAL64’| 26 | ‘NIL’ 27 | bit_size ::=‘1’|‘2’|<...>|‘64’ 28 | length ::= positive_integer 29 | data_name ::= symbolic_name 30 | type_name ::= symbolic_name 31 | component_name ::= symbolic_name 32 | symbolic_name ::= letter{[‘_’](letter|digit)} 33 | positive_integer ::=(‘1’|‘2’|<...>|‘9’){digit} 34 | letter ::=‘A’|‘B’|<...>|‘Z’|‘a’|‘b’|<...>|‘z’ 35 | digit ::=‘0’|‘1’|<...>|‘9’ 36 | 37 | 不要使用递归定义。 38 | 39 | type_definition定义使用basic(res.~compound)数据类型的结构体称为basic_constructor (res.~compound_constructor)。 40 | 41 | ###7.1.3 **位序列** 42 | ####7.1.3.1 **位序列定义** 43 | 一位的值为0或1。一个位序列b是一个包含0或更多位的有序组。如果位序列b包含多于0位,可以用$$b_j$$(j>0)表示b0,...,bn-1中的位,其中n是正整数。 44 | 45 | 因而有: 46 | 47 |
$$b = b_0 b_1 ... b_{n-1}$$
48 | 49 | 叫做一个长度为|b| = n的位序列。长度为0的空序列用$$\varepsilon$$表示。 50 | 51 | 例:10110100b、1b、101b等都是位序列。 52 | 53 | 对下面位序列的翻转操作(﹁) 54 | 55 |
$$b = b_0 b_1 ... b_{n-1}$$
56 | 位序列翻转 57 |
$$﹁b = ﹁b_0 b_1 ... ﹁b_{n-1}$$
58 | 这里﹁0 = 1,﹁1 = 0。 59 | 60 | 位序列的基本操作是连接。 61 | 62 | $$a = a_0 ... a_{m-1}$$和$$b = b_0 ... b_{n-1}$$的位序列a和b连接ab表示为 63 | $$ab = a_0 ... a_{m-1} b_0 ... b_{n-1}$$ 64 | 65 | 例如:(10)(111) = 10111是10和111的连接。 66 | 67 | 以下为任意的位序列a和b的连接: 68 | 69 |
$$|ab| = |a| + |b|$$
70 | 和 71 |
$$\varepsilon a = a\varepsilon= a$$
72 | 73 | ####7.1.3.2 **位序列的传输语法** 74 | 75 | 为了跨网络传输,位序列被标记为字节序列。这里和以下的十六进制表示法用于字节表达。让$$b = b_0 ...b_{n-1}$$的位序列中n<64。k为非负整数,8(k-1)$$b_7、b_6、...b_0、b_15、...、b_8、...$$ 78 | 79 | | **八位码** | **1.** | **2.** | **k.** | 80 | | -- | -- | -- | -- | 81 | | | b7...b0 | b15...b8 | b8k-1...b8k-8 | 82 | 83 | 图12:位序列的传输语法 84 | 85 | 例如: 86 | 87 | 位9 ... 位0 88 | 89 | 10b 0001b 1100b 90 | 91 | 2h 1h Ch 92 | 93 | = 21Ch 94 | 95 | 位序列b = b0 .. b9 = 0011 1000 01b表示UNSIGNED10的值21Ch,转换为两个八位字节传输: 96 | 1Ch和02h。 97 | 98 | ###7.1.4 **基本数据类型** 99 | ####7.1.4.1 **简述** 100 | 基本数据类型“type_name”与其创建字符相同(aka Symbolic_name),例如: 101 | 102 | BOOLEAN BOOLEAN 103 | 104 | 是BOOLEAN数据类型的的类型定义。 105 | ####7.1.4.2 **NIL** 106 | 基本数据类型NIL表示$$\varepsilon$$。 107 | ####7.1.4.3 **Boolean** 108 | 基本数据类型BOOLEAN的值为TRUE或FALSE。该值表示的位序列的长度为1。值为TRUE(res.FALSE)代表的位序列是1(res.0)。 109 | ####7.1.4.4 **Void** 110 | 基本数据类型VOIDn表示长度为n的位序列。类型为VOIDn的数据值是未定义的。类型为VOIDn的位序列数据中的位要么显式指定,要么标记为“随意”。 111 | 112 | 数据类型VOIDn常用于保留字段和复合结构数据对齐的字节边界。 113 | 114 | ####7.1.4.5 **Unsigned Interger** 115 | 基本数据类型UNSIGNEDn取值非负整数。范围0,...,2n-1。该数据表示长度为n的位序列。位序列 116 |
$$b = b_0...b_{n-1}$$
117 | 配置值 118 |
$$UNSIGNEDn(b) = b_{n-1}2^{n-1} +...+ b_12^1+b_02^0$$
119 | 请注意,位顺序从左边最低字节开始。 120 | 例如:值266 = 10Ah数据类型为UNSIGNED16,在总线上以两个八位字节传输,0Ah然后是01h。 121 | UNSIGNEDn的数据类型传输定义于图13。 122 | 123 | | **八进制数** | **1.** | **2.** | **3.** | **4.** | **5.** | **6.** | **7.** | **8.** | 124 | | -- | -- | -- | -- | -- | -- | -- | -- | -- | 125 | | UNSIGNED8 | b7...b0 | | | | | | | | 126 | | UNSIGNED16 | b7...b0 | b15...b8 | | | | | | | 127 | | UNSIGNED24 | b7...b0 | b15...b8 | b23...b16 | | | | | | 128 | | UNSIGNED32 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | | | | | 129 | | UNSIGNED40 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | | | | 130 | | UNSIGNED48 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | b47...b40 | | | 131 | | UNSIGNED56 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | b47...b40 | b55...b48 | | 132 | | UNSIGNED64 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | b47...b40 | b55...b48 | b63...b56 | 133 | 134 | 图13:数据类型 UNSIGNEDn的传输规则 135 | 136 | ####7.1.4.6 **Signed Integer** 137 | 基本数据类型INTEGERn值为整数。取值的范围是-2n-1~2n–1–1.该数据表示长度为n的位序列。位序列
b = b0..bn-1
138 | 配置值 139 |
INTEGERn(b) = bn-22n-2+ ...+b121+b020 如果bn-1 = 0
140 | 并执行双补运算 141 |
INTEGERn(b) = -INTEGERn(^b)-1 如果bn-1 = 1
142 | 请注意,位顺序从左侧最低位开始。 143 | 144 | 例如:值-266 = FEF6h数据类型NTERGER16在总线上以两个八位字节传输,F6h然后是FEh。 145 | INTEGERn的数据类型被定义见图14。 146 | 147 | | **八进制数** | **1.** | **2.** | **3.** | **4.** | **5.** | **6.** | **7.** | **8.** | 148 | | -- | -- | -- | -- | -- | -- | -- | -- | -- | 149 | | INTEGER8 | b7...b0 | | | | | | | | 150 | | INTEGER16 | b7...b0 | b15...b8 | | | | | | | 151 | | INTEGER24 | b7...b0 | b15...b8 | b23...b16 | | | | | | 152 | | INTEGER32 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | | | | | 153 | | INTEGER40 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | | | | 154 | | INTEGER48 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | b47...b40 | | | 155 | | INTEGER56 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | b47...b40 | b55...b48 | | 156 | | INTEGER64 | b7...b0 | b15...b8 | b23...b16 | b31...b24 | b39...b32 | b47...b40 | b55...b48 | b63...b56 | 157 | 158 | 图14:数据类型INTEGERn传输规则 159 | 160 | ####7.1.4.7 **浮点数** 161 | 基本数据类型REAL32和REAL64值为实数。 162 | 163 | 数据类型REAL32表示32位长度的位序列。编码遵守/IEEE754/。传输语法见图15。 164 | 165 | 数据类型REAL64表示64位长度的位序列。编码遵守/IEEE754/。 166 | 167 | 32位的位序列有值(有限非0实数、±0、±_)或NaN(not-a-number)。位序列 168 |
b = b0...b31
169 | 可配值为(有限的非零数) 170 |
REAL32(b) = (-1)S2E-127(1+F)
171 | 这里 172 | S = b31是符号。 173 | 174 | E = b3027+...+b2320, 0-23(b22222 +...+b121+b020)表示小数部分。 177 | 178 | E = 0用于表达±0。E=255用于表示无穷大和NaN’s.请注意,位顺序从左侧最低位开始。 179 | 180 | 例如: 181 | 182 | 6.25 = 2E-12(1+F) 183 | 184 | E = 129 = 27+20和 185 | 186 | F = 2-1+2-4 = 2-23(222+219)项数表示为: 187 | 188 | | S | E | F | 189 | | -- | -- | -- | 190 | | b31 | b30.b23 | b22.b0 | 191 | | 0 | 100 0000 1b | 100 1000 0000 0000 0000 0000b | 192 | 193 | 6.25 =b0..b31 = 0000 0000 0000 0000 0001 0011 0000 0010b 194 | 195 | 转换顺序: 196 | 197 | | **八进制数** | **1.** | **2.** | **3.** | **4.** | 198 | | -- | -- | -- | -- | -- | 199 | | REAL32 |00h | 00h | C8h | 40h | 200 | | | b7..b0 | b15..b8 | b23..b16 | b31..b24 | 201 | 202 | 图15:数据类型 REAL32的传输规则 203 | 204 | ###7.1.5 **复合数据类型** 205 | 复合数据类型展开为包含基本数据类型的独立表单类型定义。相应地,复合数据类型´type_name´命名规则是由基本类型´basic_type_i´表单组成的复合数据名´component_name_i´确定。 206 | 207 | 复合数据类型由ARRAY 和 STRUCT OF构建。 208 | 209 | STRUCT OF 210 | basic_type_1 component_name_1, 211 | basic_type_2 component_name_2, 212 | … … 213 | basic_type_N component_name_N 214 | type_name 215 | 216 | ARRAY[length] OF basic_type type_name 217 | 218 | 复合数据类的位序列由组成复合数据的各数据的位序列连接而成。 219 | 220 | 假设组件´component_name_i´表达的位序列为 221 | 222 | b(i), 其中 i = 1,…,N 223 | 然后复合数据的位序列连接为 224 |
b0(1)..bn-1(1)..bn-1(N).
225 | 例如: 226 | 如下数据类型 227 | 228 | STRUCT OF 229 | INTEGER10 x, 230 | UNSIGNED5 u 231 | NewData 232 | 假定x = –423 = 259h,u = 30 = 1Eh。让b(x)和b(u)表示位序列x和u。然后: 233 | 234 | b(x) = b0(x)..b9(x) = 1001101001b 235 | 236 | b(u) = b04(u) = 01111b 237 | 238 | b(xu) = b(x)b(u) = b0(xu)..b14(xu) = 1001101001 01111b 239 | 240 | 该值的结构被转换为两个八位字节,59h然后是7Ah。 241 | 242 | ###7.1.6 **扩展数据类型** 243 | ####7.1.6.1 **简述** 244 | 扩展数据类型分为基本数据类型和复合数据类型,分别在以下小节定义。 245 | ####7.1.6.2 **八进制字符串** 246 | 数据类型OCTET_STRIN长度定义如下,length:八进制节字符串的长度。 247 | 248 | ARRAY[length] OF UNSIGNED8 OCTET_STRINGlength 249 | ####7.1.6.3 **可显示字符串** 250 | 数据类型VISIBLE_STRINGlength定义如下,VISIBLE_CHAR类型数据取值 0h和20h~7Eh。数据由ISO 251 | 646-1973(E)7位编码的字符解释。length:可见字符串长度。 252 | 253 | UNSIGNED8 VISIBLE_CHAR 254 | ARRAY[length] OF VISIBLE_CHAR VISIBLE_STRINGlength 255 | 无需0h作为字符串结束标志。 256 | ####7.1.6.4 **Unicode字符串** 257 | 数据类型UNICODE_STRINGlength定义如下;length unicode字符串长度。 258 | 259 | ARRAY[length] OF UNSIGNED16 UNICODE_STRINGlength 260 | ####7.1.6.5 **时间** 261 | 数据类型TIME_OF_DAY表示绝对时间。根据这一定义和编码规则,TIME_OF_DAY由48位的位序列表达。 262 | 263 | 成员ms是午夜起算的毫秒计数。成员days是自1984年1月1日以来的天数。 264 | 265 | STRUCT OF 266 | UNSIGNED28 ms, 267 | VOID4 reserved, 268 | UNSIGNED16 days 269 | TIME_OF_DAY 270 | ####7.1.6.6 **时间差** 271 | 数据类型TIME_DIFFERENCE表示时间差。根据这一定义和编码规则,时间差由48位的位序列表达。 272 | 273 | ms表示毫秒数。days表示天数。 274 | 275 | STRUCT OF 276 | UNSIGNED28 ms, 277 | VOID4 reserved, 278 | UNSIGNED16 days 279 | TIME_DIFFERENCE 280 | ####7.1.6.7 **域** 281 | 域用于从客户端到服务器传输任意大的数据块,反之亦然。数据块内容由应用程序指定不在本文范围。 282 | 283 | [页首](#jump) 284 | -------------------------------------------------------------------------------- /chapter7.2.md: -------------------------------------------------------------------------------- 1 | ##7.2 **通信对象** 2 | ###7.2.1 **简述** 3 | 通信对象被描述为服务和协议(~~译者理解服务规定过程,协议规定格式~~)。 4 | 5 | 所有服务以表格形式给出,包含为服务定义的每个原始参数。特定的服务类型包含不同的参数(如无应答、应答等等)。 6 | 7 | 所有服务都假定CAN的数据链路层和物理层未出错。这些问题由应用程序解决因而不在本文范畴。 8 | 9 | ###7.2.2 **过程数据对象(PDO)** 10 | ####7.2.2.1 **简述** 11 | 实时的数据传输通过“过程数据对象(PDO)”完成。PDO传输无协议开销。 12 | 13 | 由对象字典提供PDO数据和配置的接口。数据字典中对应的映射结构决定了一个PDO的数据类型和映射关系。 如果CANopen设备支持可变映射PDO,则在配置过程中(见7.3.1),可通过SDO实现对PDO在数据字典中对应的配置进行修改。 14 | 15 | CANopen设备的PDO数量和长度可由应用规范、设备协议或应用协议指定。 16 | 17 | PDO分两种用法,发送和接收,分别是Transmit-PDO(TPDO) 和Receive-PDO(RPDO)。支持TPDO 的CANopen设备称为PDO生产者,支持RPDO的称为PDO消费者。PDO由PDO通讯参数和PDO映射参数描述。 其数据类型结构见7.4.8。PDO通讯参数描述了PDO的通信功能。 PDO映射参数包含了PDO传输内容信息。 18 | 19 | 每个PDO的通信和映射参数都是必不可少的。其对象介绍见7.4。 20 | 21 | 设备协议中的PDO定义总会涉及CANopen设备中的1st逻辑设备。如果定义用到了2nd逻辑设备,设备协议定义的PDO编号号增加64(40h)见表3中定义。 22 | 23 | 注意:每个逻辑设备不限制PDO数量,一个只包含单个逻辑设备的CANopen设备可以有多至512个PDO。 24 | 25 | |**CANopen设备中的逻辑设备**|**CANopen设备中的PDO编号**|**设备协议中的PDO编号**| 26 | |---|---|---| 27 | |1st逻辑设备|PDO number+0
(PDO1到PDO64)|PDO number
(PDO1到PDO64)| 28 | |2nd逻辑设备|PDO number+64
(PDO65到PDO128)|PDO number
(PDO1到PDO64)| 29 | |3rd逻辑设备|PDO number+128
(PDO129到PDO192)|PDO number
(PDO1到PDO64)| 30 | |4th逻辑设备|PDO number+192
(PDO193到PDO256)|PDO number
(PDO1到PDO64)| 31 | |5th逻辑设备|PDO number+256
(PDO257到PDO320)|PDO number
(PDO1到PDO64)| 32 | |6th逻辑设备|PDO number+320
(PDO321到PDO384)|PDO number
(PDO1到PDO64)| 33 | |7th逻辑设备|PDO number+384
(PDO385到PDO448)|PDO number
(PDO1到PDO64)| 34 | |8th逻辑设备|PDO number+448
(PDO449到PDO512)|PDO number
(PDO1到PDO64)| 35 | 36 | 表3:PDO编号计算举例 37 | 38 | ####7.2.2.2 **传输模式** 39 | PDO传输模式分为: 40 | * 同步传输 41 | * 事件驱动传输 42 | 43 | CANopen设备的同步由同步应用定期发送同步对象(SYNC对象)来实现。SYNC对象是一个预定义的通信对象(见7.2.5)。图 16 说明了同步和事件驱动的传输原则过程。同步PDO在紧接着SYNC对象之后的同步窗中传输。 44 | 45 | ![图16:同步和事件驱动的传输](./CANopen_DS301_CN_image/16.png) 46 | 47 | 图16:同步和事件驱动的传输 48 | 49 | PDO 传输模式由传输类型参数指定,包括出发模式。 50 | 51 | 同步TPDOs传输类型还指定了传输倍率——同步周期倍数因数。传输类型0表示消息会在触发事件后再收到SYNC(非周期)执行。1表示每个SYNC触发一次消息。n表示每隔n个SYNC触发一次消息。事件驱动的TPDOs与SYNC对象无关。 52 | 53 | 同步 RPDOs 收到数据后在随后的SYNC发生后传递给应用程序,传输类型同时指定了传输倍率。事件驱动 RPDOs 直接将数据传递给应用程序。 54 | 55 | ####7.2.2.3 **触发模式** 56 | 有三种消息触发模式分类: 57 | - **事件和定时器驱动** 58 | 由应用规范、设备协议、应用协议或定时(event-time)触发的消息传输。 59 | - **远程请求** 60 | PDO的消费者发出一个RTR请求触发事件驱动PDO的发送。 61 | - **同步触发** 62 | 由一定数量的Sync和内部事件(可选)触发。 63 | 64 | ####7.2.2.4 **PDO服务** 65 | #####7.2.2.4.1**概述** 66 | PDO 通信遵循的生产者/消费者关系见4.4.4。 67 | 属性: 68 | 69 | -PDO number: PDO编号[1..512]约束逻辑设备上的每个用户类型 70 | 71 | -user type: 之一{ 消费者、生产者} 72 | 73 | -data type: 据PDO映射 74 | 75 | -inhibit-time: N*100 $$\mu$$s,N>0 76 | 77 | #####7.2.2.4.2 **PDO写服务** 78 | PDO写服务是推模式。可以有多个PDO消费者,也可以没有,但PDO生产者只能有一个。 79 | 通过该服务,PDO生产者发送映射好的数据给消费者(们)。用于此服务的参数被定义在表4中。 80 | 81 | |参数|请求/执行| 82 | |---|---| 83 | |**要素**
PDO编号
数据|**强制性**
强制
强制| 84 | 85 | 表4:PDO写 86 | 87 | #####7.2.2.4.3 **PDO读服务** 88 | PDO读服务是拉模式。有一位或更多的PDO消费者。但只有一个PDO生产者。 89 | 90 | 通过该服务,PDO消费者请求生产者提供映射好的数据,即远程响应。用于此服务的参数被定义在表5。 91 | 92 | |参数|请求/执行|响应/确认| 93 | |:---|:---|:---| 94 | |**要素**
PDO编号
**远程结果**
数据|**强制性**
强制


|

**强制性**
强制| 95 | 96 | 表5:PDO读 97 | 98 | ####7.2.2.5 **PDO协议** 99 | 7.2.2.5.1 PDO写协议 100 | 请求无确认的PDO写服务。PDO生产者将PDO过程数据发到网络上。网络上可能有0到n个PDO消费者。 在PDO消费者(们)接收到有效的PDO报文后执行相关操作。图17定义了PDO写协议。 101 | 102 | ![图17:PDO写协议](./CANopen_DS301_CN_image/17.png) 103 | 过程数据:L字节的应用数据 104 | 105 | 图17:PDO写协议 106 | #####7.2.2.5.2 **PDO读协议** 107 | 该PDO读服务须应答。一或多个PDO消费者发送RTR到网络上。PDO生产者收到RTR后回复相应的PDO。所有该PDO的关联消费者接收执行。 PDO消费者数量1到n个。读服务是可选的,取决于硬件条件。图18指定PDO读协议。 108 | 109 | ![图18:PDO读协议](./CANopen_DS301_CN_image/18.png) 110 | 过程数据:L字节的应用数据 111 | 112 | 图18:PDO读协议 113 | 114 | ###7.2.3 **寻址PDO(MPDO)** 115 | ####7.2.3.1 **简述** 116 | MPDO提供了直接访问CANopen设备对象字典的服务。限制最大4字节数据。 117 | 118 | 有两种MPDO使用方法。第一是目的地址模式(DAM)MPDO,第二是源地址模式(SAM)MPDO。支持发送MPDO 的CANopen设备称为MPDO生产者,支持接收MPDO的称为MPDO消费者。 119 | 120 | 由对象字典提供了MPDO数据和配置的接口。 121 | 122 | MPDOs对应了在对象字典中提供接口给应用程序对象的对象。 123 | 124 | ####7.2.3.2 **MPDO寻址模式** 125 | #####7.2.3.2.1 **目的地址模式(DAM)** 126 | MPDO消费者的对象字典对象提供了寻址标识(见7.2.3.4.1)。一个DAM-MPDO可被所有该MPDO消费者同时接收,并不限于单一MPDO消费者。该写服务无应答,如果寻址对象不存在产生EMCY帧。 127 | 128 | 发送MPDO由事件驱动,不支持定时、远程请求和同步触发模式。 129 | #####7.2.3.2.2 **源地址模式(SAM)** 130 | MPDO寻址依赖于MPDO生产者。每个CANopen设备只允许一个此类MPDO生产者存在。发送MPDO由事件驱动,不支持定时、远程请求和同步触发模式。MPDO生产者使用一个扫描列表,以便知悉发送哪些数据对象。MPDO消费者使用分配列表,以便知悉源到目的的关联。 131 | ####7.2.3.3 **MPDO服务** 132 | #####7.2.3.3.1 **简述** 133 | MPDO通信遵循的生产者/消费者关系见4.4.4。 134 | 135 | 属性: 136 | 137 | -PDO编号: PDO编号[1..512]约束逻辑设备上的每个PDO用户类型 138 | 139 | -User type: 之一{消费者、生产者} 140 | 141 | -multiplexer: 其中包含索引和子索引,STRUCTURE OF UNSIGNED16,UNSIGNED8,指CANopen设备对象字典的指定对象索引和子索引号。 142 | 143 | -address type: 之一{源、目的} 144 | 145 | -Node-ID 消费者或生产者 146 | 147 | -Inhibit-time: N*100$$\mu$$s,N>0 148 | #####7.2.3.3.2 **MPDO写服务** 149 | MPDO写服务是推模式。可以有多个的MPDO消费者,也可以没有,但MPDO生产者只有一个。 150 | 151 | 用于此服务的参数被定义在表6。 152 | 153 |
表6:MPDO写服务
154 | 155 | |参数|请求/执行| 156 | |---|---| 157 | |**要素**
PDO编号
地址类型
Node-ID
Multiplexer
数据|**强制性**
强制
强制
强制
强制
强制| 158 | 159 | ####7.2.3.4 **MPDO协议** 160 | ####7.2.3.4.1 **MPDO写协议** 161 | MPDO写服务无应答。MPDO生产者发送MPDO过程数据到网络。可能是有0到n个MPDO消费者,取决于给定的node-ID。MPDO消费者(们)接收到有效的PDO应接收处理。图19指定MPDO写入协议。 162 | 163 | ![图19:MPDO写协议](./CANopen_DS301_CN_image/19.png) 164 | 165 | 图19:MPDO写协议 166 | 167 | - **f**:地址类型 168 | + 0:源地址 169 | + 1:目的地址 170 | - **addr**:目的寻址的MPDO消费者或源地址寻址的MPDO生产者的node-ID。 171 | + 0:源寻址模式下保留。在目的寻址模式下表示所有CANopen网络中接收MPDO配置为目的寻址模式的设备。 172 | + 1..127:CANopen网络中相应的节点node-ID。 173 | - **m**:multiplexer。表示MPDO携带过程数据的索引/子索引号,源寻址表示发送CANopen设备数据索引和子索引,目的寻址表示接收方数据存放的索引和子索引。 174 | - **d**:过程数据。数据长度低于4 字节比较适合32位数据。 175 | 176 | ###7.2.4 **服务数据对象(SDO)** 177 | ####7.2.4.1 **简述** 178 | SDO提供了直接访问CANopen设备对象字典的入口。入口条件包括数据类型和大小。SDO可用于客户和服务器之间传输多个数据集(每个包含任意大小数据块)。客户端通过寻址(对象字典的索引和子索引)来控制传输哪个数据集。数据集的内容定义在对象字典中。 179 | 180 | 基本上SDO采用分段序列传输。先发送一个初始化分段,让客户端和服务器各自准备好处理接下来的分段。SDO也可以在初始化段中包含多至4字节的数据,该机制称为快速SDO传输(译注:更常用)。 181 | 182 | 作为可选功能,SDO支持块序列传输,其中每块可由多至127段(包含序号和数据)的段序列组成。先发送一个初始化块,让客户端和服务器准备好处理接下来的块,并议定每块的分段数。在传输完成阶段,客户端和服务器通过校验来验证之前接收到的数据集的正确性。上述方法称为SDO块传输,在大数据集传输上比段传输快。 183 | 184 | SDO块上传因为有协议开销使其传输块大于数据本身大小。因此需要合理利用SDO正常(分段式)或快速传输模式。SDO块传输优于其它传输方式的最小数据集大小,取决于客户端在初始化阶段发给服务器的参数阈值。 185 | 186 | Go-Back-n ARQ方案在SDO块传输中用于对每个块的确认: 187 | * SDO块下载完成后,服务器向客户端确认成功收到最后一个SDO块传输分段。 执行此操作的服务器也隐含的承认之前的分段接收正常。 客户端应开始接下来的SDO块传输。此外服务器应在应答内容里明确下一SDO块的分段数。 188 | * SDO块上传完成后,客户端向服务器确认成功收到最后一个SDO块传输分段。执行此操作的客户端也隐含承认之前的分段接收正常。服务器应开始接下来的SDO块传输。此外客户端应在应答内容里明确下一SDO块的分段数。 189 | 190 | 任何类型的SDO传输都由客户端发起。数据字典持有者是服务器。客户端或服务器都可以主动中止传输。 191 | 192 | 通过在两个CANopen设备间建立点对点的通信信道。CANopen设备可以支持多个SDO。每个设备支持一个Server-SDO作为默认项(缺省SDO)。 193 | 194 | SDO由SDO通信参数项描述。其数据类型结构说明见7.4.8。SDO通信参数描述了SSDO和CSDO的通信功能。 195 | 每个SDO通讯参数都是必不可少的。如果只有一个SSDO存在,通信参数可以省略。上述对象描述见7.4。 196 | 197 | ####7.2.4.2 **SDO服务** 198 | #####7.2.4.2.1 **简述** 199 | SDO通讯模型是4.4.3节所述的客户端/服务器模型。 200 | 201 | 属性: 202 | * -SDO编号: 本地设备的每个用户类型都有一个SDO编号[1..128] 203 | * -用户类型: 之一 { client , server } 204 | * -寻址数据类型: 其中包含索引和子索引,STRUCTURE OF UNSIGNED16,UNSIGNED8,指CANopen设备对象字典的指定对象索引和子索引号。 205 | * -传输类型: 取决于数据传输长度:快速、多至4字节的正常(分段式)或块;正常 (分段式)或块超过4字节数据。 206 | * -数据类型: 取决于索引和子索引对应的对象。 207 | 208 | 以下SDO服务由应用程序请求触发: 209 | - SDO下载,其中分为 210 | + SDO下载启动 211 | + SDO下载分段 212 | - SDO上传,其中分为 213 | + SDO上传启动 214 | + SDO上传分段 215 | - SDO中止传输 216 | 217 | SDO分段下载和上传的分段工作由通信软件(~~译注:协议栈~~)负责。 218 | SDO快速传输应被支持。大于4字节的数据对象传输需要SDO分段传输支持。可选的SDO块传输是为了较高总线利用率传输大数据集: 219 | - SDO块下载,其中分为 220 | + SDO块下载启动 221 | + SDO下载块 222 | + SDO块下载结束 223 | - SDO块上传,其中分为 224 | + SDO块上传启动 225 | + SDO上传块 226 | + SDO块上传结束 227 | + 228 | 使用SDO块下载和块上传服务的通信软件负责传输数据分块工作。 229 | 230 | SDO块上传协议支持一个提高传输性能的开关。(~~译注:此段翻译不确定~~) 231 | 232 | 使用SDO 中止传输服务来中止SDO块传输。 233 | 234 | #####7.2.4.2.2 **SDO下载服务** 235 | 客户端使用SDO下载服务向服务器(持有数据字典)传输数据。数据的索引和子索引、数据集、大小都将通知服务器。用于此服务的参数被定义在表7中。 236 | 237 | 该服务需要应答。远程返回的结果将会说明请求的成功或失败。失败原因是确定的。 238 | 239 | SDO下载过程至少包括SDO下载启动,也许还会有SDO段下载服务(数据长度>4字节)。 240 | 241 |
表7:SDO下载服务
242 | 243 | |*参数*|*请求/执行*|*响应/确认*| 244 | |---|---|---| 245 | |**要素**
SDO编号
索引
大小
数据
**远程结果**
成功
失败
*原因*|**强制性**
强制
强制
可选
强制




|




**强制性**
选择
选择
*可选的*| 246 | 247 | #####7.2.4.2.3 **SDO下载启动服务** 248 | 客户端使用SDO下载启动来请求服务器准备数据下载。要下载的数据大小对于服务器来说是可选的(~~注译:根据索引信息就能清楚~~)。用于此服务参数被定义在表8中。 249 | 250 | 数据集的寻址和传输类型被提供给服务器。一旦SDO下载开启,数据集的大小和寻址信息就会提交给服务器。 251 | 252 |
表8:SDO下载启动服务
253 | 254 | |*参数*|*请求/执行*|*响应/确认*| 255 | |---|---|---| 256 | |**要素**
SDO编号
索引
传输类型
*正常*
*快速*
大小
数据
**远程结果**
成功|**强制性**
强制
强制
强制
*选择*
*选择*
可选
强制


|







**强制性**
强制| 257 | 258 | 该服务带应答。远程结果将说明请求成功。如果失败,应答SDO中止传输。如果一个带索引寻址的帧成功下载,服务器会认定要下载的数据集由该寻址索引标识。 259 | 260 | #####7.2.4.2.4 **SDO分段下载服务** 261 | 客户端使用SDO下载服务传输分段数据给服务器。 分段数据集可选的数据大小描述将发给服务器。接下来的参数表明是否还要下载更多分段或者本段已是最后一段。用于此服务的参数被定义在表9中。 262 | 263 |
表9:SDO分段下载服务
264 | 265 | |*参数*|*请求/执行*|*响应/确认*| 266 | |---|---|---| 267 | |**要素**
SDO编号
持续性
*更多*
*最末*
大小
数据
**远程结果**
成功|**强制性**
强制
强制
*选择*
*选择*
强制
强制


|





**强制性**
强制| 268 | 269 | 该服务带应答。 远程结果参数将表明请求成功。 如果失败应发起SDO中止传输。如果成功,服务器接收该分段数据并为下一段做准备。该SDO传输应至少包含一个SDO分段。 270 | 271 | 该服务须保证之前已成功进行了带有分段传输类型信息的SDO下载启动。 272 | 273 | #####7.2.4.2.5 **SDO上传服务** 274 | 客户端通过SDO上传服务从服务器(对象字典持有者)获取数据。数据集的索引信息会先发给服务器。用于此服务的参数被定义在表10中。 275 | 276 | SDO上传过程至少包含SDO上传启动服务,而SDO分段上传服务(数据长度>4个字节)是可选的。 277 | 278 |
表10:SDO上传服务
279 | 280 | |*参数*|*请求/执行*|*响应/确认*| 281 | |---|---|---| 282 | |**要素**
SDO编号
索引
**远程结果**
成功
*大小*
*数据*
失败
*原因*|**强制性**
强制
强制






|


**强制性**
选择
*可选*
*强制*
选择
*可选*
| 283 | 284 | 该服务带应答。远程结果将会显示请求成功或失败。如果失败,其原因作为可选项被回复。如果成功,数据及其大小作为确认返回。 285 | 286 | #####7.2.4.2.6 **SDO上传启动服务** 287 | 客户端通过SDO上传启动服务让服务器做好数据上传准备。数据集的索引信息会发给服务器,该服务所需参数在表11中定义。 288 | 该服务带应答。远程结果将表明请求是否成功。如果失败,SDO 中止传输请求会被被执行。如果成功,数据及其大小作为应答返回。如果SDO上传启动成功,该服务中标识所要上传数据集的索引及对应的应答数据将得到确认。 289 | 290 |
表11:服务SDO上传启动
291 | 292 | |*参数*|*请求/执行*|*响应/确认*| 293 | |---|---|---| 294 | |**要素**
SDO编号
索引
**远程结果**
成功
*索引*
*传输类型*
正常
快速
*尺寸*
数据|**强制性**
强制
强制








|


**强制性**
强制
*强制*
*强制*
选择
选择
*可选*
强制| 295 | 296 | #####7.2.4.2.7 **SDO分段上传服务** 297 | 客户端通过SDO分段上传服务向服务器请求下一个数据分段。接下来的参数向客户端表明是否还有更多分段或此为最后一个上传分段,SDO分段上传服务至少应包含一个分段。用于此服务的参数被定义在表12中。 298 | 299 | 该服务带应答。远程结果将表明请求是否成功。如果出现故障,SDO中止传输请求将被发起。如果成功,该分段的数据及其大小作为应答回复。 300 | 301 | 此服务之前应已进行过成功的SDO上传启动服务。 302 | 303 |
表12:SDO分段上传服务
304 | 305 | |*参数*|*请求/执行*|*响应/确认*| 306 | |---|---|---| 307 | |**要素**
SDO编号
**远程结果**
成功
*继续*
更多
最末
*尺寸*
*数据*|**强制性**
强制







|

**强制性**
强制
*强制*
选择
选择
强制
强制| 308 | 309 | #####7.2.4.2.8 **SDO块下载服务** 310 | 客户端通过块下载服务向服务器(对象字典持有者)发送数据。数据、数据集索引和可选的数据大小会被发送给服务器。用于此服务的参数被定义在表13中。 311 | 312 | 该服务带应答。远程结果将表明请求是否成功。如果失败,可选择在应答中包含原因。 313 | 314 |
表13:SDO块下载服务
315 | 316 | |*参数*|*要求/执行*|响应/确认| 317 | |---|---|---| 318 | |**要素**
SDO编号
索引
大小
数据
**远程结果**
成功
失败
*原因*|**强制性**
强制
强制
可选
强制




|




**强制性**
选择
选择
*可选*| 319 | #####7.2.4.2.9 **SDO块下载启动服务** 320 | 客户端通过SDO块下载启动服务通知服务器为下载做准备。用于此服务的参数被定义在表14中。 321 | 322 | 数据集的索引和可选的数据大小信息会发给服务器。 323 | 324 | SDO块下载结束后,客户端和服务器都有能力和需求去校验数据完整性。 325 | 326 |
表14:SDO块下载启动服务
327 | 328 | |*参数*|*要求/执行*|*响应/确认*| 329 | |---|---|---| 330 | |**要素**
SDO编号
CRC能力
*是*
*否*
索引
大小
**远程结果**
成功
CRC能力
*是*
*否*
blksize|**强制性**
强制
强制
*选择*
*选择*
强制
可选






|






**强制性**
强制
强制
*选择*
*选择*
强制| 331 | 332 | 该服务带应答。远程结果将表明请求是否成功,服务器会收到每块的分段数和校验信息。如果失败,SDO中止传输服务将被发起。 333 | 334 | #####7.2.4.2.10 **SDO子块下载服务** 335 | 客户端通过子块下载服务向服务器发送下一数据块。数据块由一个段列组成。每段包含相应的分段数据和从1开始到blksize的分段序号。参数blksize由客户端和服务器之间通过SDO块下载启动服务协商好,并且可以由服务器在块应答里更改。接下来的参数说明服务器会继续接收子块还是结束。用于此服务的参数被定义于表15。 336 | 337 |
表15:SDO子块下载服务
338 | 339 | |*参数*|*要求/执行*|*响应/确认*| 340 | |---|---|---| 341 | |**要素**
SDO编号
继续
*更多*
*最末*
数据
**远程结果**
成功
*Ackseq*
*Blksize*|**强制性**
强制
强制
*选择*
*选择*
强制




|**强制性**
强制
*强制*
*强制*| 342 | 该服务带应答。远程结果将表明请求是否成功。如果成功,ackseq参数表明服务器成功接收的最后一段的段号。如果和客户端发送的最后一段的段号对应不上,则客户端会在下一次块传输时重传所有被服务器丢弃的段。如果出现致命错误,SDO中止传输服务会被发起。如果服务器收到并确认所有数据段则进行下一块的接收准备。SDO块下载应至少包含一个SDO块下载子块服务。 343 | 344 | 此服务之前需要一次成功的SDO块下载启动服务。 345 | 346 | #####7.2.4.2.11 **SDO块下载结束服务** 347 | 客户端通过SDO块下载结束服务来结束与服务器的合作。最后传给服务器的分段字节里面并不包含有效数据。用于此服务的参数被定义在表16中。 348 | 349 | 客户端和服务器都有能力和需求对传输的数据进行校验。 350 | 351 |
表16:SDO块下载结束服务
352 | 353 | |*参数*|*请求/执行*|*响应/确认*| 354 | |---|---|---| 355 | |**要素**
SDO编号
Valid_data
校验和

**远程结果**
成功|**强制性**
强制
强制
条件的,
如果议定则强制


|




**强制性**
强制| 356 | 357 | 该服务带应答。 远程结果将表明请求是否成功(客户端和服务器之间议定的话需校验和相匹配),下载数据集是否有效。如果失败,SDO中止传输服务将被发起。 358 | #####7.2.4.2.12 **SDO块上传服务** 359 | 客户端通过SDO块上传服务向服务器(持有数据字典)请求数据。请求的数据集索引会发给服务器。 用于此服务的参数被定义在表17中。 360 | 361 | 该服务带应答。远程结果将会表明请求是否成功。如果失败了,应答信息里可包含失败原因。如果成功了,将返回数据及其可选的大小。 362 | 363 |
表17:服务SDO块上传
364 | 365 | |*参数*|*请求/执行*|*响应/确认*| 366 | |---|---|---| 367 | |**要素**
SDO编号
索引
**远程结果**
成功
*大小*
*数据*
失败
*原因*|**强制性**
强制
强制






|


**强制性**
选择
*可选的*
*强制*
选择
*可选的*| 368 | 369 | 7.2.4.2.13SDO块上传启动服务 370 | 客户端通过该服务通知服务器准备好数据上传。启动上传的索引和有能力接收的段数会报给服务器。 用于此服务的参数被定义在表18中。 371 | 一项阈值切换协议会发给服务器。如果上传的字节数小于或等于该值,服务器会以7.2.4.2.5描述的SDO上传服务应答。客户端和服务器都有保证传输完整的校验能力和需求。可选的上传数据尺寸信息也会发给客户端。 372 | 373 |
表18:服务SDO块上传启动
374 | 375 | |*参数*|*请求/执行*|*响应/确认*| 376 | |---|---|---| 377 | |**要素**
SDO编号
Blksize
CRC能力
*是*
*否*
索引
阈值
**远程结果**
成功
*CRC能力*
***是***
***否***
*大小*|**强制性**
强制
强制
强制
*选择*
*选择*
强制
强制






|







**强制性**
强制
*强制*
***选择***
***选择***
*可选的*| 378 | 该服务带应答。如果失败,SDO传输中止服务被发起。如果成功,可选的数据大小信息会发给客户端。 379 | 380 | ##### 7.2.4.2.14 **SDO块上传子块服务** 381 | 该项服务是由之前的SDO上传启动服务或前一次的SDO子块上传服务的客户端发起。服务器使用该服务将分块数据发给客户端。该块数据以分段序列的形式传输。每段包含相应的分段数据和从1开始到blksize的分段序号。参数 blksize由客户端和服务器之间通过SDO块上传启动服务协商好,并且可以由客户端在块应答里更改。接下来的参数表明客户端会继续接收子块还是结束。用于此服务的参数被定义在表19中。 382 | 383 |
表19:SDO子块上传服务
384 | 385 | |*参数*|*请求/执行*|*响应/确认*| 386 | |---|---|---| 387 | |**要素**
SDO编号
继续
*更多*
*最后*
数据
**远程结果**
成功
*Ackseq*
*Blksize*|**强制性**
强制
强制
*选择*
*选择*
强制




|





**强制性**
强制
*强制*
*强制*| 388 | 389 | 该服务带应答。远程结果参数将表明请求是否成功。如果成功,ackseq 参数表明客户端成功接收的最后一段的段号。如果和服务器发送的最后一段的段号对应不上,服务器会在下一次块传输时重传所有被客户端丢弃的段。如果出现致命错误,SDO中止传输服务会被发起。如果客户端收到并确认所有数据段则进行下一块的接收准备。SDO块上传应至少包含一个SDO块上传子块服务。 390 | 此服务之前需要一次成功的SDO块上传启动服务。 391 | 392 | #####7.2.4.2.15 **SDO块上传结束服务** 393 | 服务器通过SDO块上传结束服务来结束与客户端的合作。最后传给客户端的分段字节里面并不包含有效数据。用于此服务的参数被定义在表20中。 394 | 395 | 客户端和服务器都有能力和需求对传输的数据进行校验。 396 | 397 |
表20:SDO块上传结束服务
398 | 399 | |*参数*|*请求/执行*|*响应/确认*| 400 | |---|---|---| 401 | |**要素**
SDO编号
Valid_data
校验和
**远程结果**
成功|**强制性**
强制
强制
议定则强制


|



**强制性**
强制| 402 | 该服务带确认。远程结果将表明明请求是否成功(客户端和服务器之间议定的话需校验和相匹配),下载数据集是否有效。如果失败,SDO中止传输服务将被发起。 403 | 404 | #####7.2.4.2.16 **SDO中止传输服务** 405 | 该服务能够中止SDO上传和下载服务,并列出原因。该服务无应答。客户端和服务器在任何时候都可以发起该服务。如果SDO客户端得到了一个明显确认,就会向服务器发送中止服务的确认,用于此服务的参数被定义在表21中。 406 | 407 |
表21:SDO中止传输服务
408 | 409 | |*参数*|*请求/说明*| 410 | |---|---| 411 | |**要素**
SDO编号
索引
原因|**强制性**
强制
强制
强制| 412 | 413 | ####7.2.4.3 **SDO协议** 414 | #####7.2.4.3.1 **简述** 415 | SDO一共定义了六种带应答的服务(SDO下载,SDO上传,SDO上传启动,SDO下载启动,SDO分段下载和SDO分段上传)和一种不带应答的服务(SDO中止传输),它们共同作用来进行SDO正常(分段)传输和加速传输。 416 | 417 | SDO一共定义了八种带应答的服务(SDO块下载,SDO块上传,SDO块上传启动,SDO块下载启动,SDO子块下载,SDO子块上传,SDO块上传结束和SDO块下载结束)和一种不带应答的服务(SDO中止传输),它们共同作用来进行SDO块传输。 418 | 419 | #####7.2.4.3.2 *SDO下载协议* 420 | 421 | ![图20:SDO下载协议](./CANopen_DS301_CN_image/20.png) 422 | 423 |
图20:SDO下载协议
424 | 425 | 该协议(如图20)为SDO下载服务,由SDO下载启动服务开始,接着是0或多个SDO分段下载服务组成的序列。该序列的终止条件如下: 426 | * SDO下载启动请求/执行对应返回一个应答/确认,其e-bit被置1,表明成功完成一次加速下载。 427 | * SDO分段下载的响应/确认帧c-bit被置1,表示成功的完成了一次正常下载。 428 | * SDO中止传输请求/执行,表明下载过程未成功。 429 | * 新的SDO下载启动请求/执行,说明下载序列还没完成就新开一个下载序列。 430 | 431 | 如果下载过程中,相邻两个分段的翻转位没有变化。后一分段将被忽略。如果该种错误被汇报到应用程序,应用程序可以决定是否需要中止下载。 432 | #####7.2.4.3.3 **SDO下载启动协议** 433 | SDO下载启动协议执行过程如图21所示。 434 | 435 | ![图21:SDO下载启动协议](./CANopen_DS301_CN_image/21.png) 436 | 437 | - ccs:客户端命令说明符 438 | + 1:下载启动请求 439 | - scs:服务器命令说明符 440 | + 3:下载启动的响应 441 | - n:有效仅当e = 1,s = 1,否则为0。如果有效的话,它表示d中不带数据的字节数。字节[8-n,7] 不包含数据。 442 | - e:传输类型 443 | + 0:正常的传输 444 | + 1:快速传输 445 | - s:大小说明 446 | + 0:数据集的大小不指明 447 | + 1:数据集的大小明确指出 448 | - m:索引。表示传输数据的索引/子索引号。 449 | - d:数据 450 | + e = 0、s = 0:d预留以供将来使用。 451 | + e = 0、s = 1:d 包含下载字节。Byte4为LSB,Byte7为MSB。 452 | + e = 1、s = 1:d包含下载的长度4-n的数据,编码取决于索引和子索引对应数据的类型。 453 | + e = 1、s = 0:d包含下载的未指定字节数的数据。 454 | - x:不使用,始终为0 455 | - reserved:为将来保留,始终为0 456 | 457 |
图21:SDO下载启动协议
458 | 459 | #####7.2.4.3.4 **SDO分段下载协议** 460 | 该协议定义在图22中。 461 | 462 | ![图22:SDO分段下载协议](./CANopen_DS301_CN_image/22.png) 463 | - ccs:客户端命令说明 464 | + 0:分段下载请求 465 | - scs:服务器命令说明 466 | + 1:分段下载的响应 467 | - seg-data:最多7字节的分段数据。编码取决于索引和子索引对应的数据类型。 468 | - n:seg-data中不包含分段数据的字节数。[8-n,7]为不包含分段数据的空字节。如果n = 0则1到7字节填满。 469 | 470 | 注意:如果该字节数即是启动服务中所明确的长度,则该分段包含所有需要传输的数据。 471 | - c:表明是否还有要下载的分段。 472 | + 0:更多的分段需要被下载 473 | + 1:没有更多的分段需要被下载 474 | - t:翻转位。每个下载分段中翻转一次。第一个分段翻转位置0。该位应与对应的应答一致。 475 | - x:不使用,始终为0。 476 | - reserved:为将来保留,始终为0。 477 | 478 |
图22:SDO分段下载协议
479 | 480 | #####7.2.4.3.5 **SDO上传协议** 481 | 482 | ![图23:SDO上传协议](./CANopen_DS301_CN_image/23.png) 483 | 484 |
图23:SDO上传协议
485 | 该协议(如图23)为SDO上传服务,由SDO上传启动服务开始,接着是0或多个SDO分段上传服务组成的序列。该序列的终止条件如下: 486 | * SDO上传启动请求/执行对应返回一个应答/确认,其e-bit被置1,表明成功完成一次加速上传。 487 | * SDO分段上传的响应/确认帧c-bit被置1,表示成功的完成了一次正常上传。 488 | * SDO中止传输请求/执行,表明上传过程未成功。 489 | * 新的SDO上传启动请求/执行,说明上传序列还没完成就新开一个下载序列。 490 | 491 | 如果上传过程中,相邻两个分段的翻转位没有变化。后一分段将被忽略。如果该种错误被汇报到应用程序,应用程序可以决定是否需要中止上传。 492 | 493 | #####7.2.4.3.6 **SDO上传启动协议** 494 | 495 | SDO上传启动协议执行过程如图24所示。 496 | 497 | ![图24:SDO上传启动协议](./CANopen_DS301_CN_image/24.png) 498 | 499 | - ccs:客户端命令说明 500 | + 2:上传开始请求 501 | - scs:服务器命令说明 502 | + 2:上传开始响应 503 | - n:仅当e = 1,s = 1时有效, 否则为0。如果有效的话,表示d中不包含数据的字节数。字节[8-n, 7]中不带数据。 504 | - e:传输类型 505 | + 0:常的传输 506 | + 1:加速传输 507 | - s:大小说明 508 | + 0:数据集的大小不明确指定 509 | + 1:数据集的大小明确说明 510 | - m:索引。表示SDO传输数据对应的索引/子索引号。 511 | - d:数据 512 | + e = 0、s = 0:为将来预留。 513 | + e = 0、s = 1:d包含上传的字节数。Byte4为lsb,Byte7为msb。 514 | + e = 1、s = 1:d中包含长度4-n的上传数据,编码取决于索引和子索引引用数据的类型。 515 | + e = 1、s = 0:d包含未指定字节长度的数据上传。 516 | - x:不使用,始终为0。 517 | - reserved:为将来保留,始终为0。 518 | 519 |
图24:SDO上传启动协议 520 | 521 | #####7.2.4.3.7 **SDO分段上传协议** 522 | 该协议定义在图25 中。 523 | 524 | ![图25:SDO分段上传协议](./CANopen_DS301_CN_image/25.png) 525 | 526 | - ccs:客户端命令说明 527 | + 3:分段上传请求 528 | - scs:服务器命令说明 529 | + 0:分段上传响应 530 | - t:翻转位。每个上传分段中翻转一次。第一个分段翻转位置0。该位应与对应的应答一致。 531 | - c:指示是否还有更多的上传分段。 532 | + 0:更多上传分段 533 | + 1:最后一段 534 | - seg-data:最多7字节的上传分段数据。编码取决于索引和子索引指向的数据的类型。 535 | - n:不包含分段数据的字节数。字节[8-n,7]不包含分段数据。如果n = 0,字节1到7应填满分段数据。 536 | 537 | 注意:如果该字节数即是启动服务中所明确的长度,则该分段包含所有需要传输的数据。 538 | - x:不使用,始终为0。 539 | - reserved:为将来保留, 始终为0。 540 | 541 |
图25:SDO分段上传协议 542 | 543 | #####7.2.4.3.8 **SDO块下载协议** 544 | 545 | ![图26:SDO块下载协议](./CANopen_DS301_CN_image/26.png) 546 | 547 |
图26:SDO块下载协议 548 | 549 | 该协议定义如图26,以块下载启动服务开始,然后是一个SDO子块下载服务序列。其序列终结条件如下: 550 | - 块分段内的c-bit为1,表明序列顺利完成。 551 | - SDO中止传输请求/指示,表明序列下载过程不成功。 552 | 553 | 块下载服务以块下载结束服务终止。客户端和服务器都有CRC校验能力,如果服务器校验接收数据与客户端的校验值不一致,则发起SDO中止传输。 554 | #####7.2.4.3.9 **SDO块下载启动协议** 555 | 该协议定义于图27。 556 | ![图27:SDO块下载启动协议](./CANopen_DS301_CN_image/27.png) 557 | - ccs:客户端命令说明 558 | + 6:块下载 559 | - scs:服务器命令说明 560 | + 5:块下载 561 | - s:大小说明 562 | + 0:不指明数据集大小 563 | + 1:明确数据集大小 564 | - cs:客户端子命令 565 | + 0:下载启动请求 566 | - ss:服务器子命令 567 | + 0:下载启动应答 568 | - cc:客户端CRC支持情况 569 | + cc = 0:不支持 570 | + cc = 1:支持 571 | - sc:服务器CRC支持情况 572 | + sc = 0:不支持 573 | + sc = 1:支持 574 | - m:索引。SDO所传输数据索引/子索引。 575 | - size:下载字节数 576 | + s = 0:为将来保留,总是0。 577 | + s = 1:size表达要下载的字节数Byte4为LSB,byte7为MSB。 578 | - blksize:每块的段数,0< blksize < 128 579 | - x:未使用,总为0。 580 | - reserved:为将来预留,总为0。 581 | 582 |
图27:SDO块下载启动协议 583 | #####7.2.4.3.10 **SDO子块下载协议** 584 | 该协议定义于图28。 585 | ![图28:SDO子块下载协议](./CANopen_DS301_CN_image/28.png) 586 | 587 | - scs:服务器命令说明 588 | + 5:块下载 589 | - ss:服务器子命令 590 | + 2:块下载应答 591 | - c:更多分段需要下载的标志 592 | + 0:更多 593 | + 1:没有了,进入块下载结束阶段。 594 | - seqno:分段序号0 < seqno < 128。 595 | - seg-data:至多7字节的分段数据。 596 | - ackseq:成功接收的最近一块的最近一段的序列号。如果被服务器置0,表示客户端发送的序列号为1的分段未成功接收,所有分段需要重发。(~~译注:不确定~~) 597 | - blksize:每块的段数,0< blksize <128。 598 | - x:未使用,总为0。 599 | - reserved:预留,总为0。 600 |
图28:SDO子块下载协议 601 | 602 | #####7.2.4.3.11 **SDO块下载结束协议** 603 | 该协议定义于图29。 604 | 605 | ![图29:SDO块下载结束协议](./CANopen_DS301_CN_image/29.png) 606 | 607 | - ccs:客户端命令说明 608 | + 6:块下栽 609 | - scs:服务器命令说明 610 | + 5:块下载 611 | - cs:客户端子命令 612 | + 1:块下载结束请求 613 | - ss:服务器子命令 614 | + 1:块下载结束请求应答 615 | - n:最近一块的最近一段不包含数据的字节数。Bytes[8-n,7]不包含分段数据。 616 | - crc:数据集的16位循环冗余校验(CRC)。CRC算法见7.2.4.3.16。仅当SDO块下载启动中cc和sc被置1时CRC有效,否则CRC置0。 617 | - x:未使用,总为0。 618 | - reserved:预留,总为0。 619 | 620 |
图29:SDO块下载结束协议 621 | #####7.2.4.3.12 **PDO块上传协议** 622 | 623 | ![图30:SDO块上传协议](./CANopen_DS301_CN_image/30.png) 624 | 625 |
图30:SDO块上传协议 626 | 627 | 该协议定义如图30,以块上传启动服务开始,客户端发给服务器使用SDO块上传服务代替SDO上传服务所需最小字节数阈值。如果数据集字节数小于等于该阈值则使用常规的SDO上传服务。 628 | 另一方面,块上传是以SDO块上传子块序列形式呈现,其序列终结条件如下: 629 | - 块上传分段内的c-bit为1,表明序列顺利完成。 630 | - SDO中止传输请求/指示,表明序列下载过程不成功。 631 | 632 | 块下载服务以块下载结束服务终止。客户端和服务器都有CRC校验能力,如果客户端校验接收数据与服务器的校验值不一致,则发起SDO中止传输。 633 | #####7.2.4.3.13 **SDO块上传启动协议** 634 | 该协议定义于图31。如果客户端请求的数据集字节数小于等于其发送的第一个请求中的协议切换阈值,则启用定义于7.2.4.3.5的常规SDO上传服务。 635 | ![图31:SDO块上传启动协议](./CANopen_DS301_CN_image/31.png) 636 | - ccs:客户端命令说明 637 | + 5:块上传 638 | - scs:服务器命令说明 639 | + 6:块上传 640 | - cs:客户端子命令 641 | + 0:启动上传请求 642 | + 3:开始上传 643 | - ss:服务器子命令 644 | + 0:启动上传响应 645 | - m:索引。它代表传输的SDO数据对应的索引/子索引。 646 | - cc:客户端是否支持CRC 647 | + cc = 0:客户端不支持生成数据CRC 648 | + cc = 1:客户端支持生成数据CRC 649 | - sc:服务器是否支持CRC 650 | + sc = 0:服务器不支持生成数据CRC 651 | + sc = 1:服务器支持生成数据CRC 652 | - pst:根据切换阈值确定数据传输协议 653 | + pst = 0: 不允许切换传输协议。 654 | + pst > 0:如果数据大小小于或等于pst,服务器将以7.2.4.3.5所述SDO上传服务来响应。 655 | - s:尺寸指示 656 | + 0:数据集的大小不指明。 657 | + 1:数据集的大小明确。 658 | - size:以字节为单位的上传数据大小 659 | + s = 0:保留,始终为0。 660 | + s = 1:上传(译注:原文有误,写成了downloaded)的数据字节数Byte4为lsb,Byte7为msb。 661 | - blksize:每块分段数 0 < blksize < 128。 662 | - x:不使用,始终为0。 663 | - reserved:为将来保留,始终为0。 664 | 665 |
图31:SDO块上传启动协议 666 | #####7.2.4.3.14 **SDO子块上传协议** 667 | 该协议定义于图32。 668 | .4.3.5的常规SDO上传服务。 669 | ![图32:SDO子块上传协议](./CANopen_DS301_CN_image/32.png) 670 | 671 | - ccs:客户端命令说明 672 | + 5:块上传 673 | - cs:客户端子命令 674 | + 2:块上传响应 675 | - c:是否还有更多上传(译注:原文为downloaded)分段 676 | + 0:更多上传分段 677 | + 1:没有更多的上传分段,进入“结束块上传”的阶段。 678 | - seqno:段序列编号 0 < seqno < 128 。 679 | - seg-data:多至7字节的上传分段数据。 680 | - ackseq:成功接收的最近一块的最近一段的序列号。如果被客户端置0,表示服务器发送的序列号为1的分段未成功接收,所有分段需要重发。(~~译注:不确定~~) 681 | - blksize:每块的段数, 0 < blksize < 128。 682 | - x:不使用,始终为0。 683 | - reserved:为将来保留,始终为0。 684 | 685 |
图32:SDO子块上传协议 686 | #####7.2.4.3.15 **SDO块上传结束协议** 687 | 该协议定义于图33。 688 | ![图33:SDO块上传结束协议](./CANopen_DS301_CN_image/33.png) 689 | - ccs:客户端命令说明 690 | + 5:块上传 691 | - scs:服务器命令说明 692 | + 6:块上传 693 | - cs:客户端子命令 694 | + 1:结束块上传请求 695 | - ss:服务器子命令 696 | + 1:结束块上传响应 697 | - n:最近一块的最近一段不包含数据的字节数。Bytes[8-n,7]不包含分段数据。 698 | - crc:数据集的16位循环冗余校验(CRC)。CRC算法见7.2.4.3.16.仅当SDO块上传启动中cc和sc被置1时CRC有效,否则CRC置0。 699 | - x:未使用,总为0。 700 | - reserved:预留,总为 0。 701 | 702 |
图33:SDO块上传结束协议 703 | 704 | 7.2.4.3.16 验证SDO块传输的CRC算法 705 | 要验证交换数据的正确性,客户端和服务器须在SDO块上传和下载服务的结束协议中体现CRC计算。 CRC校验应具有以下参数: 706 | 707 | — CRC多项式: X16+ x12+ x5+ 1 708 | 709 | — CRC宽度: 16位 710 | 711 | — 初始值: 0000h 712 | 713 | — CRC检查(123456789的CRC结果): 31C3H 714 | #####7.2.4.3.17 **SDO中止传输协议** 715 | 该协议定义于图34。 716 | ![图34:SDO中止传输协议](./CANopen_DS301_CN_image/34.png) 717 | 718 | - cs:命令说明符 719 | + 4:中止传输请求 720 | - x:不使用,始终为0。 721 | - m:索引。SDO索引和子索引。 722 | - d:包含4字节的中止原因代码。 723 |
图34:SDO中止传输协议 724 | 725 | 中止代码定义于表22被编码为UNSIGNED32。 726 | 727 |
表22:SDO中止代码 728 | 729 | |**中止代码**|**描述**| 730 | |---|---| 731 | |0503 0000h|翻转位未变化| 732 | |0504 0000h|SDO协议超时| 733 | |0504 0001h|客户端/服务器命令说明无效或未知| 734 | |0504 0002h|无效的块大小(仅块模式)| 735 | |0504 0003h|无效的序列号(仅块模式)| 736 | |0504 0004h|CRC错误(仅块模式) | 737 | |0504 0005h|内存不足| 738 | |0601 0000h|不支持的访问的对象| 739 | |0601 0001h|试图读取只写的对象| 740 | |0601 0002h|尝试写入只读对象| 741 | |0602 0000h|对象不存在于对象字典| 742 | |0604 0041h|对象不能被映射进PDO。| 743 | |0604 0042h|对象长度和数量超出PDO的长度| 744 | |0604 0043h|常规参数不兼容的原因| 745 | |0604 0047h|设备内部不兼容| 746 | |0606 0000h|硬件错误导致的访问失败| 747 | |0607 0010h|数据类型不匹配,服务长度参数不匹配。| 748 | |0607 0012h|数据类型不匹配,服务长度参数太大| 749 | |0607 0013h|数据类型不匹配,服务长度参数太小| 750 | |0609 0011h|子索引不存在| 751 | |0609 0030h|无效的参数值(仅下载)| 752 | |**中止代码**|**描述**| 753 | |0609 0031h|写入参数值太高 ( 仅下载 ) 。| 754 | |0609 0032h|写入参数值太低 ( 仅下载 ) 。| 755 | |0609 0036h|最大值小于最小值| 756 | |060A 0023h|资源不可用:SDO连接| 757 | |0800 0000h|常规错误| 758 | |0800 0020h|数据不能传输或保存到应用程序。| 759 | |0800 0021h|数据不能传输或保存应用程序,由于本地的控制。| 760 | |0800 0022h|数据不能传输或保存到应用程序,因为设备当前状态。| 761 | |0800 0023h|对象字典的动态生成失败或无对象字典的存在(例如对象字典是从文件生成,而由于文件的错误生成失败)| 762 | |0800 0024h|无可用数据| 763 | 764 | 未列出的中止代码应保留。 765 | 766 | ###7.2.5 **同步对象(SYNC)** 767 | ####7.2.5.1 **简述** 768 | 同步生产者定期广播同步对象。SYNC提供基本的网络同步机制。SYNC周期由标准通信循环周期参数定义(见7.5.2.6),可由配置工具在CANopen设备引导过程中写入。由于有优先级高于SYNC的通信,SYNC生产者在发送报文时可能会产生延时抖动。SYNC消费者可以使用制造商指定的通信循环周期。 769 | 使用可选的计数器参数,可以在当前SYNC循环和PDO通信之间建立显式关系(PDO通信参数:SYNC启动值,详见7.5.2.37)。 770 | 为了保证及时的网络访问,SYNC的CAN-ID优先级较高(见7.5.2.5)。CANopen设备通过同步操作来同步自身与同步对象生产者。详细内容由具体应用来实现,不属于本文范围。 771 | 772 | ####7.2.5.2 **SYNC服务** 773 | #####7.2.5.2.1 **简述** 774 | 775 | 同步传输遵守生产者/消费者推送模型见4.4.4。该服务无应答。 776 | **属性**: 777 | * -用户类型: 之一{消费者、生产者} 778 | * -数据类型: UNSIGNED8 779 | 780 | #####7.2.5.2.2 **同步写服务** 781 | 推送模型适用于同步写入服务。SYNC消费者数量可以是零至多个,但生产者只有一个。用于定义此服务的参数见表23。 782 | 通过该服务,SYNC生产者发送触发信号给消费者(们)。 783 |
表23:同步写服务 784 | 785 | |*参数*|*请求/说明*| 786 | |---|---| 787 | |**要素**
计数器|**强制性**
可选| 788 | 该服务无应答。每次传输增1的计数器参数可选,最大值是当前的同步计数溢出值(见7.5.2.22)。一旦达到最大值,计数器在下一次传输时置1。在 NMTboot-up服务后计数器置初值1,对应的计数器也被重置为1。如果CANopen设备的状态由NMT停止(stopped)进入NMT配置(pre-operational),计数器值应复位为1。 789 | ####7.2.5.3 **同步协议** 790 | #####7.2.5.3.1 **同步写协议** 791 | 此协议定义如图35。 792 | 793 | ![图35:同步写协议](./CANopen_DS301_CN_image/35.png) 794 | 795 |
图35:同步写协议 796 | ###7.2.6 **时间戳对象(TIME)** 797 | ####7.2.6.1 **简述** 798 | TIME生产者广播时间戳对象。TIME提供了简单的网络时钟。由于高于TIME的通信对象的存在,TIME的发送可能会产生延迟抖动。 799 | 为了保证及时地访问网络,TIME的CAN-ID优先级较高(见7.5.2.15)。CANopen设备通过时间戳对象生产者的TIME对象校准本地时间。详细机制不属于本规范的范围。 800 | ####7.2.6.2 **TIME服务** 801 | #####7.2.6.2.1 **简述** 802 | 时间戳对象遵守生产者/消费者模型,见4.4.4。该服务无应答。 803 | 属性: 804 | * -用户类型: 之一 {消费者、生产者} 805 | * -数据类型: TIME_OF_DAY 806 | 807 | #####7.2.6.2.2 **TIME写服务** 808 | 推送模型适用于TIME写。有零至多个消费者,但生产者只有一个。用于定义此服务的参数列于表24。 809 | 通过该服务,生产者发送当前的时间给消费者。 810 |
表24: TIME写服务 811 | 812 | |*参数*|*请求/说明*| 813 | |---|---| 814 | |**要素**
数据|**强制性**
强制| 815 | 该服务无应答。 816 | ####7.2.6.3 **TIME协议** 817 | #####7.2.6.3.1 **TIME写协议** 818 | 此协议定义于图36。 819 | 820 | ![图36:TIME写协议](./CANopen_DS301_CN_image/36.png) 821 | 822 |
图36:TIME写协议 823 | 824 | ###7.2.7 **应急对象(EMCY)** 825 | ####7.2.7.1 **应急对象的使用** 826 | 应急对象由CANopen设备的内部错误触发并且由CANopen设备应急生产者对象负责发起。应急对象适合中断类型的错误报警。一个“错误事件”仅触发一次应急对象通信。CANopen设备无新错误不会再产生应急对象。 827 | 零至多个应急消费者可以接收应急对象。应急消费者的行为不在本文范围。 828 | 本规范定义了应急错误码分类(表25)、应急错误代码(表26)和错误寄存器(见7.5.2.2)。由具体应用定义的附加错误信息(低字节错误码)和应急条件不在本文范围。附加错误码由其他协议规范定义。 829 |
表25:应急错误代码分类 830 | 831 | |**错误代码**|**描述**| 832 | |---|---| 833 | |00 xxh|错误复位或没有错误| 834 | |10 xxh|常规错误| 835 | |20 xxh|当前的| 836 | |21 xxh|当前,CANopen设备输入侧| 837 | |22 xxh|当前CANopen设备内部| 838 | |23 xxh|当前,CANopen设备输出端| 839 | |30 xxh|电压| 840 | |31 xxh|主供电电压| 841 | |32 xxh|CANopen设备内部电压| 842 | |33 xxh|输出电压| 843 | |40 xxh|温度| 844 | |41 xxh|环境温度| 845 | |42 xxh|CANopen设备温度| 846 | |50 xxh|CANopen设备硬件| 847 | |60 xxh|CANopen设备软件| 848 | |**错误代码**|**描述**| 849 | |61 xxh|内部软件| 850 | |62 xxh|用户软件| 851 | |63 xxh|数据集| 852 | |70 xxh|附加模块| 853 | |80 xxh|监控| 854 | |81 xxh|通讯| 855 | |82 xxh|协议错误| 856 | |90 xxh|外部错误| 857 | |F0 xxh|附加功能| 858 | |FF xxh|CANopen设备规范| 859 | 860 |
表26:应急错误代码 861 | 862 | |**错误代码**|**描述**| 863 | |---|---| 864 | |0000h|错误复位或没有错误| 865 | |1000h|常规错误| 866 | |2000h|当前–常规错误。| 867 | |2100h|当前,CANopen设备输入端–常规| 868 | |2200h|当前CANopen设备内部–常规| 869 | |2300h|当前,CANopen设备输出端–常规| 870 | |3000h|电压–常规错误| 871 | |3100h|主供电电压–常规| 872 | |3200h|CANopen设备内部电压–常规| 873 | |3300h|输出电压–常规| 874 | |4000h|温度–常规错误。| 875 | |4100h|环境温度–常规| 876 | |4200h|设备温度–常规| 877 | |5000h|CANopen设备硬件–常规错误| 878 | |6000h|CANopen设备软件–常规错误| 879 | |6100h|内部软件–常规| 880 | |6200h|用户软件–常规| 881 | |6300h|数据集–常规| 882 | |7000h|附加模块–常规的错误。| 883 | |8000h|监测–常规错误| 884 | |8100h|通信–常规| 885 | |8110h|CAN溢出(对象丢失)| 886 | |8120h|CAN被动模式错误| 887 | |8130h|节点保护错误或者心跳错误| 888 | |8140h|从总线关闭恢复| 889 | |8150h|CAN-ID冲突| 890 | |**错误代码**|**描述**| 891 | |8200h|协议错误–常规| 892 | |8210h|PDO由于长度错误不能处理| 893 | |8220h|PDO的长度超了| 894 | |8230h|DAM MPDO不能被处理,目标对象不可用| 895 | |8240h|意外的SYNC数据长度| 896 | |8250h|RPDO超时| 897 | |9000h|外部错误–常规错误。| 898 | |F000h|附加功能–常规错误。| 899 | |FF00h|特定于设备–常规错误。| 900 | 901 | 应急对象是可选实现的。如果CANopen设备支持应急对象,它应支持至少2个错误代码0000h和1000h。其他所有错误代码都是可选的。 902 | CANopen 设备应处于两个应急状态之一(图37)。其转换取决于应急对象通信过程。错误状态与NMT状态机之间的关联由对象1029h定义(见7.5.2.32)。 903 | 1. 初始化后CANopen设备如果未检测到错误进入无错误状态。不发送错误消息。 904 | 2. 在CANopen设备检测到内部错误,并将错误载入应急报文的前三个字节(错误代码和错误寄存器)。CANopen设备进入错误状态。发送带有相应错误代码和错误寄存器的应急对象。同时错误代码被填入本地对象1003h(预定义错误域)。 905 | 3. 一个而非所有的错误原因消失了。包含错误代码0000h(错误复位)的应急报文连同剩余的在设备指定错误域和错误寄存器中登记的错误被发送。 906 | 4. CANopen设备产生了新的错误。CANopen设备仍然在错误状态,发送带有对应错误码的应急对象。新的错误代码写入错误代码数组顶部(1003h)。保证错误码按时间排序(最早的错误-最高子索引,见对象1003h)。 907 | 5. 所有错误被修复。CANopen设备进入无错误状态,发送一个带有错误代码“错误复位/无错误”的应急对象。 908 | 6. 重启或关闭电源。 909 | 910 |
图37: 应急状态转换图 911 | ![图37: 应急状态转换图](./CANopen_DS301_CN_image/37.png) 912 | 913 | ####7.2.7.2 **应急的对象服务** 914 | #####7.2.7.2.1 **简述** 915 | 应急对象通信遵守的生产者/消费者模型详见4.4.4。该服务无应答。 916 | 下面是对象属性说明: 917 | * -用户类型: 之一{消费者、生产者} 918 | * -数据类型: 结构体 919 | + UNSIGNED16 应急错误代码 920 | + UNSIGNED8 错误寄存器 921 | + ARRAY (5) of UNSIGNED8 制造商指定错误域 922 | * -抑制时间: N * 100$$\mu$$s,N>0 923 | 924 | #####7.2.7.2.2 **EMCY写服务** 925 | EMCY写服务是推送模型。有零至多个消费者,而 EMCY生产者只有一个。用于定义此服务的参数见表27。 926 | 通过该服务EMCY生产者将当前的应急数据发送给消费者(们)。 927 | 928 |
表27:EMCY写服务 929 | 930 | |*参数*|*请求/说明*| 931 | |---|---| 932 | |**要素**
数据|**强制性**
强制| 933 | 934 | 该服务无应答。 935 | 936 | ####7.2.7.3 **应急对象协议** 937 | #####7.2.7.3.1 **EMCY写协议** 938 | 此协议定义于图38。 939 | 940 | ![图38:EMCY写协议](./CANopen_DS301_CN_image/38.png) 941 | 942 | * eec: 应急错误码 (见表26) 943 | * er: 错误寄存器(见对象1001h) 944 | * msef: 制造商定义错误码 945 | 946 |
图38:EMCY写协议 947 | 948 | 不允许通过RTR触发应急报文。收到RTR将不予应答。 949 | 950 | ###7.2.8 **网络管理** 951 | ####7.2.8.1 **简述** 952 | CANopen设备网络管理(NMT)为主从结构模型。NMT对象用于执行NMT服务。通过NMT服务,CANopen设备才能够执行初始化、启动、监控、复位或停止等行为。所有的CANopen设备被视为NMT从站。NMT从站使用node-ID标识其身份,取值范围[1..127]。 953 | 网络中要有一个CANopen设备满足NMT主站功能需求。 954 | ####7.2.8.2 **NMT服务** 955 | #####7.2.8.2.1 **节点控制服务** 956 | ######7.2.8.2.1.1 **简述** 957 | 通过节点控制服务,NMT主站控制NMT从站状态。NMT状态值{停止、配置、操作、初始化}。节点控制服务可以操作单个CANopen设备或同时针对所有CANopen设备。NMT主站状态由本地服务控制。节点控制服务可由本地应用程序初始化。 958 | ######7.2.8.2.1.2 **启动远程节点服务** 959 | NMT主站通过NMT服务启动远程节点,从而更改所选NMT从站状态。新状态应为运行态。用于此服务的参数被定义于表28。 960 | 961 |
表28:启动远程节点服务 962 | 963 | |*参数*|*说明/要求*| 964 | |---|---| 965 | |**要素**
Node-ID
所有|**强制性**
选择
选择| 966 | 967 | 该服务无应答,而且是强制支持的。 968 | ######7.2.8.2.1.3 **停止远程节点服务** 969 | NMT主站通过NMT服务停止远程节点,从而更改所选NMT从站状态。新状态应为停止态。用于此服务的参数被定义于表29。 970 | 971 |
表29:停止远程节点服务 972 | 973 | |*参数*|*说明/要求*| 974 | |---|---| 975 | |**要素**
Node-ID
所有|**强制性**
选择
选择| 976 | 977 | 该服务无应答,而且是强制支持的。 978 | 979 | ######7.2.8.2.1.4 **进入配置服务** 980 | NMT主站通过NMT服务使远程节点进入配置态,从而更改所选NMT从站状态。新状态应为配置态。用于此服务的参数被定义于表30。 981 | 982 |
表30:进入配置服务 983 | 984 | |*参数*|*说明/要求*| 985 | |---|---| 986 | |**要素**
Node-ID
所有|**强制性**
选择
选择| 987 | 988 | 该服务无应答,而且是强制支持的。 989 | ######7.2.8.2.1.5 **复位节点服务** 990 | NMT主站通过NMT服务复位远程节点,从而更改所选NMT从站状态。新状态应为NMT子状态-复位应用。用于此服务的参数被定义于表31。 991 | 992 |
表31:复位远程节点服务 993 | 994 | |*参数*|*说明/要求*| 995 | |---|---| 996 | |**要素**
Node-ID
所有|**强制性**
选择
选择| 997 | 998 | 该服务无应答,而且是强制支持的。 999 | ######7.2.8.2.1.6 **复位通信服务** 1000 | NMT主站通过NMT服务复位远程节点通信部分,从而更改所选NMT从站状态。 新状态应为NMT子状态-复位通信。用于此服务的参数被定义于表32。 1001 | 1002 |
表32:复位通信服务 1003 | 1004 | |*参数*|*说明/要求*| 1005 | |---|---| 1006 | |**要素**
Node-ID
所有|**强制性**
选择
选择| 1007 | 1008 | 该服务无应答,而且是强制支持的。 1009 | 1010 | #####7.2.8.2.2 **错误控制服务** 1011 | 错误控制服务用于检测CAN网络内出现的故障。 1012 | CANopen设备的本地错误可能导致复位或状态变化。具体本地错误的定义不属于本规格的范围。 1013 | 错误控制服务主要是CANopen设备通过定期发送消息实现的。有两种错误控制方法可用。 1014 | NMT主站发送监护请求(节点监护协议:node guarding protocol),如果NMT从站没有在规定的时间跨度内(节点生存周期:node life time)回应或NMT从站的通讯状态发生变化,NMT主站会向应用程序通报相关事件。 1015 | 如果支持生存监护(NMT从站保护主站),NMT从站由数据字典中的监护周期(guard time)和生存周期因子(life time factor)决定自身节点生存周期(lifetime)。如果在生存周期内没收到监护请求,NMT从站将此事件报告本地应用程序。如果监护周期和生存周期因子都是是0 (默认值),NMT从站将不会监护主站。 1016 | 接收到第一帧带有监护CAN-ID的RTR意味着NMT从站的监护开始。此时可能出在启动阶段或稍后。 1017 | 心跳机制,主要内容是CANopen设备的心跳(heartbeat)生产者周期性的发送心跳消息,一或多个CANopen网络中的设备接收这一心跳消息。如果心跳生产者出现停跳,其消费者会上报该事件。 1018 | 监护或心跳都是强制性的。 1019 | 1020 | 备注:虽然心跳和保护默认都是禁用的,但仍然推荐使用错误控制机制。 1021 | 1022 | ######7.2.8.2.2.1 **节点监护事件服务** 1023 | 通过该服务,NMT主站能够知悉node-ID标识的远程设备产生或解决错误。用于此服务的参数被定义于表33。 1024 | 事件得到解决的说明: 1025 | * 由于状态切换导致的事件,在收到期望的状态后,或 1026 | * 由于超时引起的事件,在得到后续的远程确认后。 1027 | 1028 |
表33:节点监护事件服务 1029 | 1030 | |*参数*|*执行| 1031 | |---|---| 1032 | |**要素**
Node-ID
状态
*发生*
*解决*
原因
*超时*
*状态更改*|**强制性**
强制
强制
*选择*
*选择*
可选的
*选择*
*选择*| 1033 | 1034 | 该服务在初始化和运行态提供。 1035 | 1036 | ######7.2.8.2.2.2 **生存监护事件服务** 1037 | 通过该服务,NMT从站能够获知远程错误的发生和解决。用于此服务的参数被定义于表34。 1038 | 事件的解决由事件发生后续的远程请求来表达。 1039 | 1040 |
表34:生存监护事件服务 1041 | 1042 | |*参数*|*执行*| 1043 | |---|---| 1044 | |**要素**
状态
*发生*
*解决*|**强制性**
强制
*选择*
*选择*| 1045 | 1046 | 该服务由提供者发起并且是可选的功能。 1047 | 1048 | ######7.2.8.2.2.3 **心跳事件服务** 1049 | 通过该服务,心跳消费者能够获悉node-ID标识的CANopen设备发生错误、得到解决或NMT状态切换。用于此服务的参数被定义于表35。 1050 | 事件发生后续的的远程消息表明事件的解决。 1051 | 1052 |
表35:心跳事件服务 1053 | 1054 | |*参数*|*执行*| 1055 | |---|---| 1056 | |**要素**
Node-ID
状态
*发生*
*解决*
原因
*超时*
*状态切换*|**强制性**
强制
强制
*选择*
*选择*
可选
*选择*
*选择*| 1057 | 1058 | 该服务由消费者发起并且是可选的功能。 1059 | 1060 | #####7.2.8.2.3 **Boot-up服务** 1061 | ######7.2.8.2.3.1 **Boot-up事件服务** 1062 | 通过该服务,NMT从站上报从初始化切换到配置态。用于定义此服务的参数在表36中。 1063 |
表36:Boot-up事件服务 1064 | 1065 | |*参数*|*处理*| 1066 | |---|---| 1067 | |**要素**
Node-ID|**强制性**
强制| 1068 | 1069 | 该服务由提供者发起并且是强制功能。 1070 | ####7.2.8.3 **NMT协议** 1071 | #####7.2.8.3.1 **节点控制协议** 1072 | ######7.2.8.3.1.1 **启动远程节点协议** 1073 | 该协议定义于图39。 1074 | 1075 | ![图39: 启动远程节点协议](./CANopen_DS301_CN_image/39.png) 1076 | - cs: NMT命令说明 1077 | + 1: 启动 1078 | 1079 |
图39: 启动远程节点协议 1080 | 1081 | ######7.2.8.3.1.2 **停止远程节点协议** 1082 | 该协议定义于图40。 1083 | ![图40:停止远程节点协议](./CANopen_DS301_CN_image/40.png) 1084 | - cs: NMT命令说明 1085 | + 2: 停止 1086 | 1087 |
图40:停止远程节点协议 1088 | 1089 | ######7.2.8.3.1.3 **进入配置态协议** 1090 | 该协议定义于图 41。 1091 | ![图41:进入配置态协议](./CANopen_DS301_CN_image/41.png) 1092 | 1093 | - cs: NMT命令说明 1094 | + 128: 进入配置态 1095 | 1096 |
图41:进入配置态协议 1097 | 1098 | ######7.2.8.3.1.4 **复位节点协议** 1099 | 该协议定义于图 42。 1100 | ![图42:复位节点协议](./CANopen_DS301_CN_image/42.png) 1101 | - cs: NMT命令说明 1102 | + 129: 复位节点 1103 | 1104 |
图42:复位节点协议 1105 | 1106 | ######7.2.8.3.1.5 **复位通信协议** 1107 | 该协议定义于图 43。 1108 | ![图43: 复位通信协议](./CANopen_DS301_CN_image/43.png) 1109 | - cs: NMT命令说明 1110 | + 129: 复位通信 1111 | 1112 | 图43: 复位通信协议 1113 | 1114 | #####7.2.8.3.2 **错误控制协议** 1115 | ######7.2.8.3.2.1 **节点监护协议** 1116 | 该协议定义于图44。每个NMT服务一个节点监护协议的RTR。该协议实现提供者启动的错误控制服务。 1117 | 1118 | ![图44:节点监护协议](./CANopen_DS301_CN_image/44.png) 1119 | 1120 | - s : NMT从站状态 1121 | + 4: 停止态 1122 | + 5: 运行态 1123 | + 127: 配置态 1124 | - t:翻转位。NMT从站每次应答翻转一次。首次应答为0。NMT复位通信后置0(无其他NMT状态会复位翻转位)。如果收到连续两个翻转位相同的响应,后一次将被忽略。 1125 | 1126 |
图44:节点监护协议 1127 | 1128 | NMT主站常规时段内轮询各从站。该时段叫做监护周期,且每个从站可能不同。从站响应带有自身NMT状态。节点生存周期为其监护周期乘以生存周期因子。每个节点的生存周期可以不同。如果NMT从站在生存周期内没有被查询到,远程节点错误事件将通过NMT生存监护事件服务上报。 1129 | 远程节点的错误上报条件: 1130 | * 节点生存周期内内没收到RTR 1131 | * 报告的NMT从站状态与预期不匹配 1132 | 1133 | 远程节点报告过错误并且错误监护协议报文不再产生,说明错误通过NMT节点监护服务和生存监护服务得到解决。 1134 | 默认的监护周期和生存周期因子值由对应的数据字典对象说明。 1135 | 1136 | ######7.2.8.3.2.2 **心跳协议** 1137 | 心跳协议定义于图45,为不需要RTRs支持的节点控制服务。心跳生产者周期的发送心跳。一个或多个消费者接收之。生产者和消费者的关系由数据字典配置。心跳消费者在消费期内监控关联心跳。如果消费期内没收到心跳,则将产生心跳事件。 1138 | 1139 | ![图45:心跳协议](./CANopen_DS301_CN_image/45.png) 1140 | - r: 保留 (总为0) 1141 | - s: 心跳生产者状态 1142 | + 0: Boot-up 1143 | + 4: 停止态 1144 | + 5: 运行态 1145 | + 127: 配置态 1146 | 1147 |
图45:心跳协议 1148 | 1149 | 如果CANopen配置了心跳生产周期其心跳协议功能立即启动。如果心跳生产周期非0,CANopen设备心跳协议在NMT初始化和配置态就开始运行。boot-up消息被视为第一次心跳。不允许在NMT从站中同时使用保护协议和心跳协议这两种错误控制机制。如果心跳生产周期不等于0心跳协议生效。 1150 | 1151 | #####7.2.8.3.3 **boot-up协议** 1152 | 该协议定义于图46,用于NMT从站,通报节点从初始化态进入配置态。 该协议使用与错误控制协议相同的CAN-ID。 1153 | ![图46:boot-up协议](./CANopen_DS301_CN_image/46.png) 1154 | 数据区包含1字节,值为0. 1155 |
图46:boot-up协议 1156 | 1157 | 1158 | -------------------------------------------------------------------------------- /chapter7.3.md: -------------------------------------------------------------------------------- 1 | ##7.3 **网络初始化和系统boot-up** 2 | ###7.3.1 **简化的NMT启动** 3 | 例如,简化的NMT启动显示于图47。该流程的定义不属于本规范的范围。 4 | ![图47:简单NMT启动](./CANopen_DS301_CN_image/47.png) 5 |
图47:简单NMT启动 6 | 7 | ###7.3.2 **NMT状态机** 8 | ####7.3.2.1 **概述** 9 | 图48描述了CANopen设备的NMT状态图。CANopen设备在初始化后直接进入配置态。在这一状态可以对CANopen设备配置参数以及通过SDO服务进行CAN-ID-allocation(例如使用配置工具)。然后CANopen 设备就可以直接进入运行态。 10 | NMT状态机决定了通信功能单元的行为(见4.3)。CANopen设备依赖的应用状态机和NMT状态机是设备协议和应用协议的范畴。 11 | 12 | ![图48:CANopen设备NMT状态图](./CANopen_DS301_CN_image/48.png) 13 | 14 | |(1)|上电自动进入NMT初始化态| 15 | |---|---| 16 | |(2)|NMT初始化执行完成——自动进入配置态| 17 | |(3)|由NMT服务启动远程节点或由本地控制| 18 | |(4),(7)|由NMT服务进入配置态| 19 | |(5),(8)|由NMT服务停止远程节点| 20 | |(6)|由NMT服务启动远程节点| 21 | |(9),(10),(11)|由NMT服务复位远程节点| 22 | |(12),(13),(14)|由NMT服务复位远程节点的通信| 23 | 24 |
图48:CANopen设备NMT状态图 25 | ####7.3.2.2 **NMT状态** 26 | #####7.3.2.2.1 **NMT初始化态** 27 | 初始化态分为三个子状态(如图49),以便能够完全或部分复位CANopen设备。 28 | 1. **初始化**:CANopen上电或硬复位后的第一个NMT子状态。执行基本的CANopen设备初始化后自动进入复位应用子状态。 29 | 2. **复位应用**:该子状态下,制造商协议区和标准设备协议区参数被赋上电值。之后自动进入复位通信子状态。 30 | 3. **复位通信**:该子状态下,通信协议区参数被赋上电值。然后CANopen设备执行boot-up写服务并进入配置态。 31 | 32 | 上电值为最近一次存储的参数。如果设备不支持保存、保存操作未执行或复位前执行了恢复默认指令(见7.5.2.14),上电值即为根据通信和设备协议定义的默认值。 33 | ![图49:NMT初始化状态结构](./CANopen_DS301_CN_image/49.png) 34 | 35 | |(1)|上电自动进入NMT初始化| 36 | |---|---| 37 | |(2)|NMT初始化完成——进配置态| 38 | |(12),(13),(14)|NMT复位通讯服务| 39 | |(9),(10),(11)|NMT复位节点服务| 40 | |(15)|NMT初始化子状态完成–自动进入NMT复位应用子状态| 41 | |(16)|NMT复位应用子状态完成–自动进入NMT复位通信子状态| 42 | 43 |
图49:NMT初始化状态结构 44 | #####7.3.2.2.2 **NMT配置态** 45 | 在配置态允许SDO通信,不允许PDO通信,此状态通常用于配置PDO的参数和映射对象(PDO映射)等。 46 | CANopen 设备可以由NMT启动远程节点服务或通过本地控制由此状态切换至运行态。 47 | (~~译注:此状态直译为预操作态,但笔者认为中文没有这个词,操作运行前预热,当然叫配置态更恰当~~) 48 | 49 | #####7.3.2.2.3 **NMT运行态** 50 | 此状态允许所有通信服务。传输PDOs,通过SDO访问数据字典,然而由于执行方面的问题或者是应用状态机可能要求限制对相关对象字典的访问,例如某对象可能在应用程序执行过程中不允许修改。 51 | (~~译注:本状态直译应为操作态,但笔者认为运行态更适合国人口味~~) 52 | #####7.3.2.2.4 **NMT停止态** 53 | 切换CANopen设备进入NMT停止态来终止所有通信服务(除节点保护和心跳,如果被激活的话)。此外,这种状态可用于实现特定的应用行为。这种行为属于设备协议和应用协议的范畴。 54 | 此状态下触发的EMCY消息将被挂起。在切换到其它状态后,最近的EMCY将被激活。 55 | 注 : 错误历史记录可通过访问只读对象1003h获取。 56 | #####7.3.2.2.5 **NMT 状态和通信对象关系** 57 | 表37规定了状态与通信对象之间的关系。 表中的服务只在CANopen设备处在适当的状态下才能被执行。 58 |
表37:NMT状态和通信对象关系 59 | 60 | ||配置|操作|停止| 61 | |---|---|---| 62 | |PDO||X|| 63 | |SDO|X|X|| 64 | |SYNC|X|X|| 65 | |TIME|X|X|| 66 | |EMCY|X|X|| 67 | |节点控制和错误控制|X|X|X| 68 | 69 | ####7.3.2.3 **NMT状态转换** 70 | NMT状态转换条件 71 | * 接到NMT节点控制服务 72 | * 硬件复位,或 73 | * 由设备和应用协议定义的应用事件触发的本地节点控制服务。 74 | ###7.3.3 **通用预定义连接集** 75 | 为了减少配置工作量而定义的简单的网络CAN-ID分配方案。这些CAN-IDs将在NMT初始化态完成进入配置态后生效(如果未经修改)。对象SYNC,TIME,EMCY写和PDO在动态分配新的CAN-IDs后将被重新配置。CANopen设备应只为受支持的通信对象提供相应的CAN-IDs。 76 | CAN-ID分配方案(定义中表38和表39)包括功能部分,它决定了对象的优先级和node-ID部分,它用于区分CANopen设备。这将允许在单一主站和多至127个从站间进行点对点通信。同时还支持无应答的NMT,SYNC和TIME广播消息。广播的node-ID为零。 77 | 78 | 预定义连接集支持一个应急对象、一个SDO、至多4个RPDOs、4TPDOs和NMT对象。 79 | 80 | ![图50:通用预定义连接集CAN-ID分配方案设置](./CANopen_DS301_CN_image/50.png) 81 | 82 |
图50:通用预定义连接集CAN-ID分配方案设置 83 | 84 | 表38和表39列出了支持的对象和访问CAN-IDs。 85 | 86 |
表38:通用预定义连接集广播对象 87 | 88 | |**COB**|**功能码**|**CAN-ID**| 89 | |---|---|---| 90 | |NMT|0000b|0(000H)| 91 | |SYNC|0001b|128(080H)| 92 | |TIME|0010b|256(100H)| 93 | 94 |
表39:点对点对象的通用预定义连接设置 95 | 96 | |**COB**|**功能码**|**CAN-ID**| 97 | |---|---|---| 98 | |EMCY|0001b|129(081h)–255(0FFh) 99 | |PDO1(tx)|0011b|385(181h)–511(1FFh)| 100 | |PDO1(rx)|0100b|513(201h)–639(27Fh)| 101 | |PDO2(tx)|0101b|641(281h)–767(2FFh)| 102 | |PDO2(rx)|0110b|769(301h)–895(37Fh)| 103 | |PDO3(tx)|0111b|897(381h)–1023(3FFh)| 104 | |PDO3(rx)|1000b|1025(401h)–1151(47Fh)| 105 | |PDO4(tx)|1001b|1153(481h)–1279(4FFh)| 106 | |PDO4(rx)|1010b|1281(501h)–1407(57Fh)| 107 | |SDO(tx)|1011b|1409(581h)–1535(5FFh)| 108 | |SDO(rx)|1100b|1537(601h)–1663(67Fh)| 109 | |NMT错误控制|1110b|1793(701h)–1919(77Fh)| 110 | 111 | 表39是CANopen设备视角。 112 | 即使网络支持扩展帧,通用预定义连接集也仅使用11位CAN-ID标准帧。 113 | 通用预定义连接集适用于所有的CANopen设备,并且都遵守特定的设备协议,不遵守任何应用协议。 114 | ###7.3.4 **特定预定义连接集** 115 | 特定预定义连接集用于替换通用预定义连接集,其遵守某应用协议。特定预定义连接集不在本规范定义范围,而是由相应的应用协议定义。 116 | 117 | ###7.3.5 **受限CAN-IDs** 118 | 任何列在表40的CAN-IDs使用受限。受限CAN-ID不能用于任何可配置通信对象,SYNC、TIME、EMCY、 PDO和SDO都不行。 119 | 120 |
表40:受限CAN-ID 121 | 122 | |**CAN-ID**|**COB使用**| 123 | |---|---| 124 | |0(000h)|NMT 125 | |1(001h)–127(07Fh)|保留| 126 | |257(101h)–384(180h)|保留| 127 | |1409(581h)–1535(5FFh)|默认SDO(tx)| 128 | |1537(601h)–1663(67Fh)|默认SDO(rx)| 129 | |1760(6E0h)–1791(6FFh)|保留| 130 | |1793(701h)–1919(77Fh)|NMT错误控制| 131 | |2020(780h)–2047(7FFh)|保留| 132 | 133 | -------------------------------------------------------------------------------- /chapter7.4.md: -------------------------------------------------------------------------------- 1 | ##7.4 **对象字典** 2 | ##7.4.1 **常规结构** 3 | 标准对象字典的整体布局定义于表41。 4 |
表41:对象字典结构 5 | 6 | |**索引**|**对象**| 7 | |---|---| 8 | |0000h| 未使用 9 | |0001h–001Fh|静态数据类型| 10 | |0020h–003Fh|复合数据类型| 11 | |0040h–005Fh|制造商指定复合数据类型| 12 | |0060h–025Fh|设备协议指定数据类型| 13 | |0260h–03FFh|保留| 14 | |0400h–0FFFh|保留| 15 | |1000h–1FFFh|通信协议区| 16 | |2000h–5FFFh|制造商指定协议区| 17 | |6000h–67FFh|标准化协议区1st逻辑设备| 18 | |6800h–6FFFh|标准化协议区2nd逻辑设备| 19 | |7000h–77FFh|标准化协议区3rd逻辑设备| 20 | |7800h–7FFFh|标准化协议区4th逻辑设备| 21 | |8000h–87FFh|标准化协议区5th逻辑设备| 22 | |8800h–8FFFh|标准化协议区6th逻辑设备| 23 | |9000h–97FFh|标准化协议区7th逻辑设备| 24 | |9800h–9FFFh|标准化协议区8th逻辑设备| 25 | |A000h–AFFFh|标准网络变量区| 26 | |B000h–BFFFh|标准系统变量区| 27 | |C000h–FFFFh|保留| 28 | 29 | 对象字典容量65536,通过16位索引寻址,每个对象可包含多至256个子项,通过8位子索引号寻址。 30 | 0001h到001Fh的静态数据类型包含标准的类型定义如BOOLEAN、INTEGE、UNSIGNED、浮点、字符串等。 31 | 0020h到003Fh的复合数据类型是相对于标准数据类型而言的普适所有CANopen设备的预定义结构。 32 | 0040h到005Fh的制造商指定复合数据类型是相对于标准数据类型而言的特定CANopen设备所定义的结构。 33 | 设备协议可以定义附加数据类型作为其设备的类型。设备协议定义的静态数据类型和复合数据类型位列 0060h到025Fh。 34 | CANopen设备可选择支持只读索引区的复合数据类型(从0020h到005Fh和0060h到025Fh)结构。子索引0保存子索引数,后续子索引数据类型为表44规定的UNSIGNED16。 35 | 从1000h到1FFFh的通信协议区包含了通信相关参数。这些对象适用于所有的CANopen设备。 36 | 从6000h到9FFFh的标准协议区包含可由网络读写的某类CANopen设备的所有数据对象。设备协议使用从6000h到9FFFh区域来描述功能和参数 37 | 对象字典在概念上迎合了可选功能,这意味着生产商在其CANopen设备提供某些扩展功能,可以使用预定义方式。从2000h到5FFFh的空间正是为制造商的定制功能所留。 38 | 从A0000h到AFFFh的网络变量区应包含输入变量和输出变量,这是可编程CANopen设备的一部分。这些网络变量的定义不在本规范的范围内,而是将来的协议和框架的一部分。 39 | B000h到BFFFh的系统变量应包含输入变量和输出变量,其为有层次感的基础CANopen网络的一部分。 这些系统变量的定义不在本规范的范围内,而是将来的协议和框架的一部分。 40 | ###7.4.2 **索引和子索引的使用** 41 | 16位的索引可寻址对象字典的所有对象。简单的变量可由索引直接引用。记录和数组可由索引寻址其数据的整体机构。 42 | 定义子索引来访问数据结构的具体元素。对于单一的对象字典对象如UNSIGNED8、BOOLEAN、INTEGER32等值,其子索引始终是00h。对于复合的对象字典对象如带有多个数据字段的数组或记录,子索引的引用域为主索引所指向的数据结构。子索引访问的字段可以是不同的数据类型。 43 | ###7.4.3 **对象代码的使用** 44 | 对象代码表达了对象字典特定索引处的对象类型。使用到以下定义: 45 |
表42:对象字典对象定义 46 | 47 | |对象名称|说明|对象代码| 48 | |---|---|---| 49 | |NULL|无数据字段对象|00h| 50 | |DOMAIN|大体量数据,如可执行的程序代码| 02h| 51 | |DEFTYPE|表示类型定义如BOOLEAN, UNSIGNED16, FLOAT等等|05h| 52 | |DEFSTRUCT|定义了一种新的记录类型如在21h的PDO映射结构|06h| 53 | |VAR|单值如UNSIGNED8、BOOLEAN、FLOAT、INTEGER16和VISIBLE STRING等|07h| 54 | |ARRAY|多数据字段对象,每个数据字段都是一种简单相同的基本数据类型变量如UNSIGNED16的数组。子索引0类型为UNSIGNED8,并非数组的一部分。|08| 55 | |RECORD多数据字段对象,数据字段可以是任意简单变量的组合。子索引0是U|NSIGNED8,子索引255是UNSIGNED32,并非记录的一部分。|09h| 56 | 57 | ###7.4.4 **数据类型的使用** 58 | 对象的数据类型信息包括下列预定义类型:BOOLEAN、FLOAT、UNSIGNED、INTEGER、VISIBLE/OCTET STRING、TIME_OF_DAY、TIME_DIFFERENCE和DOMAIN(见7.1)。它还包含预定义的复合数据类型PDO 映射和制造商、协议规范或应用协议规范所定义的其它类型。禁止定义记录的记录、记录数组或包含数组的记录。数组或记录对象内的一个子索引表示一个数据字段。 59 | 60 | ###7.4.5 **访问权限的使用** 61 | 该属性定义了对象的访问权限。其视角是面对CANopen网络设备。 62 | 63 | 有以下权限可选: 64 |
表43:数据对象访问权限属性 65 | 66 | |**属性**|**描述**| 67 | |---|---| 68 | |rw|读写权限| 69 | |wo|只写权限| 70 | |ro|只读权限| 71 | |const|只读并且值为常量 该值可以在NMT初始化态更改。其余状态不可变更。| 72 | 73 | ###7.4.6 **类别和条目类别的使用** 74 | 类别和条目类别定义了对象是强制性的、可选的还是条件的。CANopen设备必须支持强制对象,可以支持可选对象。如果设备执行特定的功能才会支持对应的对象。此种情况下,详细的对象规范会描述其中关系,并且该对象被定义为条件类别。 75 | 76 | ###7.4.7 **数据类型条目的使用** 77 | ####7.4.7.1 **简述** 78 | 静态数据类型放在对象字典里只是出于定义的目的。范围从0001h到0007h、0010h、从 0012h到 0016h,并从0018h到001Bh可以被映射进RPDO,以明确该CANopen设备不使用(无关)的空间。DEFTYPE和DEFSTRUCT不允许映射到 RPDOs中。 79 | 数据类型如下所示: 80 | 81 |
表44:对象字典的数据类型 82 | 83 | |**索引**|**对象**|**名称**| 84 | |---|---|---| 85 | |0001h|DEFTYPE|BOOLEAN| 86 | |0002h|DEFTYPE|INTEGER8| 87 | |0003h|DEFTYPE|INTEGER16| 88 | |0004h|DEFTYPE|INTEGER32| 89 | |0005h|DEFTYPE|UNSIGNED8| 90 | |0006h|DEFTYPE|UNSIGNED16| 91 | |0007h|DEFTYPE|UNSIGNED32| 92 | |0008h|DEFTYPE|REAL32| 93 | |0009h|DEFTYPE|VISIBLE_STRING| 94 | |000Ah|DEFTYPE|OCTET_STRING| 95 | |000Bh|DEFTYPE|UNICODE_STRING| 96 | |000Ch|DEFTYPE|TIME_OF_DAY| 97 | |000Dh|DEFTYPE|TIME_DIFFERENCE| 98 | |000Eh|保留|| 99 | |000Fh|DEFTYPE|DOMAIN| 100 | |0010h|DEFTYPE|INTEGER24| 101 | |0011h|DEFTYPE|REAL64| 102 | |**索引**|**对象**|**名称**| 103 | |0012h|DEFTYPE|INTEGER40| 104 | |0013h|DEFTYPE|INTEGER48| 105 | |0014h|DEFTYPE|INTEGER56| 106 | |0015h|DEFTYPE|INTEGER64| 107 | |0016h|DEFTYPE|UNSIGNED24| 108 | |0017h|保留|| 109 | |0018h|DEFTYPE|UNSIGNED40| 110 | |0019h|DEFTYPE|UNSIGNED48| 111 | |001Ah|DEFTYPE|UNSIGNED56| 112 | |001Bh|DEFTYPE|UNSIGNED64| 113 | |001Ch–001Fh|保留|| 114 | |0020h|DEFSTRUCT|PDO_COMMUNICATION_PARAMETER| 115 | |0021h|DEFSTRUCT|PDO_MAPPING| 116 | |0022h|DEFSTRUCT|SDO_PARAMETER| 117 | |0023h|DEFSTRUCT|IDENTITY| 118 | |0024h–003Fh|保留|| 119 | |0040h–005Fh|DEFSTRUCT|制造商的复合数据类型| 120 | |0060h–007Fh|DEFTYPE|设备协议规范的标准数据类型1st的逻辑设备| 121 | |0080h–009Fh|DEFSTRUCT|设备协议规范的标准数据类型1st的逻辑设备| 122 | |00A0h–00BFh|DEFTYPE|设备协议规范的标准数据类型2nd的逻辑设备| 123 | |00C0h–00DFh|DEFSTRUCT|设备协议规范的标准数据类型2nd的逻辑设备| 124 | |00E0h–00FFh|DEFTYPE|设备协议规范的标准数据类型3rd的逻辑设备| 125 | |0100h–011Fh|DEFSTRUCT|设备协议规范的标准数据类型3rd的逻辑设备| 126 | |0120h–013Fh|DEFTYPE|设备协议规范的标准数据类型4th的逻辑设备| 127 | |0140h–015Fh|DEFSTRUCT|设备协议规范的标准数据类型4th的逻辑设备| 128 | |0160h–017Fh|DEFTYPE|设备协议规范的标准数据类型5th的逻辑设备| 129 | |0180h–019Fh|DEFSTRUCT|设备协议规范的标准数据类型5th的逻辑设备| 130 | |01A0h–01BFh|DEFTYPE|设备协议规范的标准数据类型6th的逻辑设备| 131 | |01C0h–01DFh|DEFSTRUCT|设备协议规范的标准数据类型6th的逻辑设备| 132 | |01E0h–01FFh|DEFTYPE|设备协议规范的标准数据类型7th的逻辑设备| 133 | |0200h–021Fh|DEFSTRUCT|设备协议规范的标准数据类型7th的逻辑设备| 134 | |0220h–023Fh|DEFTYPE|设备协议规范的标准数据类型8th的逻辑设备| 135 | |0240h–025Fh|DEFSTRUCT|设备协议规范的标准数据类型8th的逻辑设备| 136 | 137 | 数据类型使用详见7.1。每个CANopen设备不需要支持所有已定义的数据类型。CANopen设备仅需支持它在1000h到AFFF用到的数据类型。 138 | 预定义的复合数据类型放在标准的数据类型之后。详见7.4.8。 139 | CANopen设备可选支持标准数据类型编码的数据长度(UNSIGNED32)。例如索引000Ch 140 | 141 | (TIME_OF_DAY)包含值0000 0030h=48d使用48位序列作为TIME_OF_DAY的数据类型编码。如果长度是可变的(例如000Fh=域),对象条目包含0000 0000h。 142 | 为支持复合数据类型,CANopen设备可选择提供该种数据类型结构。子索引00h值为索引支持最大子索引数,当然不计入00和FFh,表44的接下来的子索引值编码为UNSIGNED16(UNSIGNED8是旧的实现)。对象索引0020h描述了PDO通讯参数结构如下所示(见对象从1400h到15FFh): 143 | 144 |
表45:复合数据类型示例 145 | 146 | |子索引|值|(说明)| 147 | |---|---|---| 148 | |00h|04h|( 4个子索引)| 149 | |01h|0007h|(UNSIGNED32)| 150 | |02h|0005h|(UNSIGNED8)| 151 | |03h|0006h|(UNSIGNED16)| 152 | |04h|0005h|(UNSIGNED8)| 153 | 154 | 标准(简单)和复合的制造商特定数据类型可通过读取子索引01h来区分:复合数据类型对象该子索引是有值的,而标准数据类型对象该索引不存在,因此会得到中止SDO传输的反馈。 155 | 请注意,某些条目数据类型为UNSIGNED32的对象是带有字符结构的(例如PDO COB-ID,见图67)。 156 | 157 | ####7.4.7.2 **对象字典条目的组织结构** 158 | 如果某个对象字典对象包含几个分项,子索引00h描述了最大子索引,不计入FFh,其对象条目编码为UNSIGNED8。 159 | 子索引FFh描述了对象类型及其结构。它被编码为UNSIGNED32且其组织如下: 160 | ![图51:子索引FFh结构](./CANopen_DS301_CN_image/51.png) 161 | 图51:子索引FFh结构 162 | 163 | 可选支持子索引FFh。如果支持的话就要连整个对象字典的复合数据类型结构也一并提供,以使得可以上传整个对象字典条目结构。 164 | ###7.4.8 **预定义复合数据类型规范** 165 | 本节介绍用于通信的预定义复合数据类型结构。值的范围和含义的解释由使用这些类型的对象的详细描述给出。 166 | ####7.4.8.1 **PDO通讯参数记录规格** 167 | 表46说明PDO通讯参数的记录。 168 | 169 |
表46:PDO通讯参数记录 170 | 171 | |索引|子索引|名称|数据类型| 172 | |---|---|---|---| 173 | |0020h|00h|最大子索引号|UNSIGNED8| 174 | |''|01h|COB-ID|UNSIGNED32| 175 | |''|02h|传输类型|UNSIGNED8| 176 | |''|03h|抑制时间|UNSIGNED16| 177 | |''|04h|保留|UNSIGNED8| 178 | |''|05h|事件定时器|UNSIGNED16| 179 | |''|06h|同步启动值|UNSIGNED8| 180 | ####7.4.8.2 **PDO映射参数记录规格** 181 | 表47表达PDO 映射参数记录。 182 |
表47:PDO映射参数记录 183 | 184 | |索引|子索引|名称|数据类型| 185 | |---|---|---|---| 186 | |0021h|00h|PDO映射对象数|UNSIGNED8| 187 | |''|01h|第1个映射的对象|UNSIGNED32| 188 | |''|02h|第2个映射的对象|UNSIGNED32| 189 | |''|:|:::|::::::| 190 | |''|40h|第64个映射的对象|UNSIGNED32| 191 | 192 | ####7.4.8.3 **SDO参数记录规格** 193 | 表48指定SDO参数记录。 194 |
表48:SDO参数记录 195 | 196 | |索引|子索引|名称|数据类型| 197 | |---|---|---|---| 198 | |0022h|00h|最大子索引支持|UNSIGNED8| 199 | |''|01h|COB-ID 客户端->服务器|UNSIGNED32| 200 | |''|02h|COB-ID 服务器->客户端|UNSIGNED32| 201 | |''|03h|SDO客户端应答服务器的Node-ID|UNSIGNED8| 202 | 203 | ####7.4.8.4 **身份记录规格** 204 | 表49指定身份的记录。 205 |
表49:身份记录 206 | 207 | |索引|子索引|名称|数据类型| 208 | |---|---|---|---| 209 | |0023h|00h|最大子索引支持|UNSIGNED8| 210 | |''|01h|Vendor-ID|UNSIGNED32| 211 | |''|02h|产品码|UNSIGNED32| 212 | |''|03h|修订版本号|UNSIGNED32| 213 | |''|04h|序列号|UNSIGNED32| 214 | ####7.4.8.5 **OS调试记录规格** 215 | 表50指定OS调试记录。 216 | 217 |
表50:OS调试记录 218 | 219 | |索引|子索引|名称|数据类型| 220 | |---|---|---|---| 221 | |0024h|00h|最大子索引支持|UNSIGNED8| 222 | |''|01h|命令|OCTET_STRING| 223 | |''|02h|状态
00h-命令已完成-没有错误
01h-命令完成-错误
02h——预留
:::::
FEh——预留
FFh-命令执行
|UNSIGNED8| 224 | |''|03h|回复|OCTET_STRING| 225 | ####7.4.8.6 **OS命令记录规格** 226 | 表51中指定OS命令的记录。 227 |
表51:OS命令的记录 228 | 229 | |索引|子索引|名称|数据类型| 230 | |---|---|---|---| 231 | |0025h|00h|最大子索引支持|UNSIGNED8| 232 | |''|01h|命令|OCTET_STRING| 233 | |''|02h|状态
00h-命令已完成-没有错误-未回复
01h-命令已完成-没有错误-答复
02h-命令完成-错误-未回复
03h-命令完成-错误-回复
04h-预留
:::::
FEh——预留
FFh-命令执行|UNSIGNED8| 234 | |''|03h|回复|OCTET_STRING| 235 | 236 | 237 | -------------------------------------------------------------------------------- /chapter7.5.md: -------------------------------------------------------------------------------- 1 | ##7.5 **通信协议规范** 2 | ###7.5.1 **对象及其条目说明规范** 3 | 对象字典对象的条目结构描述遵守以下方式:所有设备协议、接口协议和应用协议都基于通信协议所使用的对象及其条目说明规则,见表52和表53。 4 |
表52:对象描述格式 5 | 6 | **对象描述** 7 | 8 | |索引|协议定义的索引号| 9 | |---|---| 10 | |名称|参数名称| 11 | |对象代码|变量的分类| 12 | |数据类型|数据类型分类| 13 | |类别|可选的或强制性的区分| 14 | 对象代码是表52描述的对象定义的成员。考虑可读性,对象描述要附带对象的名称。 15 | 16 |
表53:对象值的描述格式 17 | 18 | **条目说明** 19 | 20 | |子索引|子项编号| 21 | |---|---| 22 | |描述|描述子索引名称(字段只用于数组、记录和结构)| 23 | |数据类型|数据类型分类(字段只用于记录和结构)| 24 | |条目类别|表明对象条目是可选、强制还是条件的| 25 | |访问权限|只读(ro)或读/写(rw)或只写(wo)| 26 | |PDO映射|如果该对象可映射至PDO则定义该项。说明:
可选:对象可以映射到PDO
默认值:对象是默认映射的一部分(请参见设备协议或应用协议)
TPDO:对象可被映射到TPDO不应被映射到RPDO
RPDO:对象可被映射到RPDO不应该映射到TPDO
无:对象不应映射到PDO| 27 | |取值范围|可能的取值范围,或数据类型的全部取值范围| 28 | |默认值|无:无默认值
协议指定:由协议指定默认值
造商指定:默认值由CANopen设备制造商指定
值:CANopen设备初始化后的默认值| 29 | 简单的变量带有值定义即可,无须格外的条目类别定义。复合数据类型其值定义应包括每个元素(子索引)。 30 | ###7.5.2 **通信协议对象的详细规范** 31 | ####7.5.2.1 **对象1000h:设备类型** 32 | 此对象提供有关设备类型的信息。该对象描述了逻辑设备类型及其功能。它由两个16位域组成,一个描述所用设备协议或应用协议,另一个给出逻辑设备的附加功能信息。附加的信息参数为设备协议和应用协议所指定。其说明不属于本文范围,定义于相应的设备协议和应用协议。 33 | **值定义** 34 | 该值为0000h表示逻辑设备不遵守标准设备协议。在这种情况下附加的信息应为0000h(如果没有更多的逻辑设备)或FFFFh(如果还有其它逻辑设备)。 35 | 多逻辑设备其附加信息应为FFFFh且其设备协议应为对象字典中第一逻辑设备。所有其他逻辑设备模块的协议标识于对象67FFh + x \* 800h且x = 逻辑设备内部编号(从1到8)减去1。这些对象将描述逻辑设备的设备类型,与对象1000h具有相同的值定义。 36 | ![图52:设备类型参数结构](./CANopen_DS301_CN_image/52.png) 37 | 图52:设备类型参数结构 38 | **对象描述** 39 | 40 | |索引|1000h| 41 | |---|---| 42 | |名称|设备类型| 43 | |对象代码|VAR| 44 | |数据类型|UNSIGNED32| 45 | |类别|强制| 46 | 47 | **条目说明** 48 | 49 | |子索引|00h| 50 | |---|---| 51 | |访问权限|ro| 52 | |PDO 映射|否| 53 | |取值范围|请参阅*值定义*| 54 | |默认值|协议或制造商指定| 55 | ####7.5.2.2 **对象1001h:错误寄存器** 56 | 此对象提供错误信息记录,CANopen设备将内部错误记录映射到该对象,此为应急对象的一部分。 57 | **值定义** 58 |
表54:错误寄存器结构 59 | 60 | |位|M/O|意义| 61 | |---|---|---| 62 | |0|M|通用错误| 63 | |1|O|电流| 64 | |2|O|电压| 65 | |3|O|温度| 66 | |4|O|通信错误(溢出、错误状态)| 67 | |5|O|设备协议指定| 68 | |6|O|保留(始终为0b)| 69 | |7|O|制造商指定| 70 | 如果某一特定的错误发生相应位置1b。通用错误位是强制设备必须支持的,其它可选。任何错误产生都将置位通用错误。 71 | **对象描述** 72 | 73 | |索引|1001h| 74 | |---|---| 75 | |名称|错误寄存器| 76 | |对象代码|VAR| 77 | |数据类型|UNSIGNED8| 78 | |类别|强制| 79 | 80 | **条目说明** 81 | 82 | |子索引|00h| 83 | |---|---| 84 | |访问权限|ro| 85 | |PDO 映射|可选| 86 | |取值范围|请参阅值定义| 87 | |默认值|无| 88 | ####7.5.2.3 **对象 1002h:制造商状态寄存器** 89 | 此对象为制造商提供一个常规状态寄存器。 本规范仅定义此对象大小和位置。 90 | **对象描述** 91 | 92 | |索引|1002h| 93 | |---|---| 94 | |名称|制造商状态寄存器| 95 | |对象代码|VAR| 96 | |数据类型|UNSIGNED32| 97 | |类别|可选| 98 | **条目说明** 99 | 100 | |子索引|00h| 101 | |---|---| 102 | |访问权限|ro| 103 | |PDO 映射|可选| 104 | |取值范围|UNSIGNED32| 105 | |默认值|无| 106 | ####7.5.2.4 **对象1003h:预定义错误域** 107 | 此对象表达CANopen设备上产生的错误,由应急对象编入,并提供错误历史纪录。 108 | **值定义** 109 | * 该对象子索引00h为从01h开始的实际的错误记录数量。 110 | 备注:如果无错误存在其子索引00h值为00h,读子索引01h将得到SDO中止消息(中止代码: 0800 0024h或0800 0000h)。 111 | * 每个新的错误应储存在子索引01h,较旧的错误应依次下移。 112 | * 写00h到子索引00h将删除整个错误历史记录(清空数组)。禁止写入非00h值,否则将得到中止信息(错误代码:0609 0030h)。 113 | * 错误代码的类型为UNSIGNED32(见表26),由16位错误代码和16位制造商指定的附加错误信息组成。错误代码位于低2字节(LSB),附加信息位于高2字节(MSB)。支持此对象应至少包含两个条目,长度子索引00h和至少一个错误项01h。 114 | ![图53:预定义错误域结构](./CANopen_DS301_CN_image/53.png) 115 | 图53:预定义错误域结构 116 | 117 | **对象描述** 118 | 119 | |索引1003h| 120 | |---|---| 121 | |名称|预定义错误域| 122 | |对象代码|数组| 123 | |数据类型|UNSIGNED32| 124 | |类别|可选| 125 | **条目说明** 126 | 127 | |子索引|00h| 128 | |---|---| 129 | |描述|错误数| 130 | |条目类别|强制| 131 | |访问权限|rw| 132 | |PDO 映射|否| 133 | |取值范围|00h到FEh| 134 | |默认值|00h| 135 | 136 | |子索引|01h| 137 | |---|---| 138 | |描述|标准错误域| 139 | |条目类别|强制| 140 | |访问权限|ro| 141 | |PDO 映射|否| 142 | |取值范围|UNSIGNED32| 143 | |默认值|无| 144 | 145 | |子索引|02h到FEh| 146 | |---|---| 147 | |描述|标准错误域| 148 | |条目类别|可选| 149 | |访问权限|ro| 150 | |PDO 映射|否| 151 | |取值范围|UNSIGNED32| 152 | |默认值|无| 153 | 154 | ####7.5.2.5 **对象1005h:COB-ID同步消息** 155 | 此对象为已配置的同步(SYNC)对象COB-ID。此外,它定义了 CANopen 设备是否生成同步。对象结构定义于图54和表55。 156 | 值定义 157 | ![图54:同步COB-ID结构](./CANopen_DS301_CN_image/54.png) 158 | 图54:同步COB-ID结构 159 | 160 |
表55:同步COB-ID描述 161 | 162 | |**位(S)**|**值**|**描述**| 163 | |---|---|---| 164 | |x|x|无意义| 165 | |gen.|0b
1b|所在CANopen设备不生成同步消息
CANopen设备生成同步消息| 166 | |frame|0b
1b|11位CAN-ID有效(CAN标准帧)
29位CAN-ID有效(CAN扩展帧)| 167 | |29位CAN-ID|x|29位扩展帧CAN-ID| 168 | |11位CAN-ID|x|11位标准帧CAN-ID| 169 | 位29(frame)和位30(gen.)可以是静态的(不可更改)。如果CANopen设备不生成同步消息,试图设置30位(gen.)为1b将得到SDO中止应答(中止代码:0609 0030h)。如果CANopen设备仅支持标准帧,则试图置位29(frame)为1b将得到SDO中止应答(中止代码:0609 0030h)。设置位30至1b并且同步计数器的溢出值大于0,在计数器值复位为1时启动第一次SYNC消息。对象有效时(位 30 = 1b)不允许更改0~29位。 170 | **对象描述** 171 | 172 | |索引|1005h| 173 | |---|---| 174 | |名称|同步COB-ID| 175 | |对象代码|VAR| 176 | |数据类型|UNSIGNED32| 177 | |类别|条件的
强制的,如果PDO通信支持基于同步方式| 178 | **条目说明** 179 | 180 | |子索引|00h| 181 | |---|---| 182 | |访问权限|rw
const如果COB-ID不可更改| 183 | |PDO 映射|否| 184 | |取值范围|请参阅值定义| 185 | |默认值|0000 0080h或8000 0080h| 186 | 187 | ####7.5.2.6 **对象1006h:通信循环周期** 188 | 此对象定义SYNC时间间隔。 189 | **值定义** 190 | 单位$$\mu$$s。如果置0000 0000h则禁用SYNC。通过置值为非0000 0000h并且同步计数器的溢出值大于 0,在计数器值复位为1时启动第一次SYNC消息。 191 | SYNC将在值更新后一个通信循环周期内启动。 192 | **对象描述** 193 | 194 | |索引|1006h| 195 | |---|---| 196 | |名称|通信循环周期| 197 | |对象代码|VAR| 198 | |数据类型|UNSIGNED32| 199 | |类别|条件的
同步生产者为强制的| 200 | **条目说明** 201 | 202 | |子索引|00h| 203 | |---|---| 204 | |访问权限|rw| 205 | |PDO 映射|否| 206 | |值范围|UNSIGNED32| 207 | |默认值|0000 0000h| 208 | ####7.5.2.7 **对象1007h:同步窗长度** 209 | 此对象表达PDOs同步窗长度配置。 210 | 如果错过同步窗,所有的TPDOs将被丢弃并且会产生EMCY消息;所有的RPDOs也被丢弃直到下次同步消息的接收。同步RPDO处理在下一个同步消息到来后恢复。 211 | **值定义** 212 | 单位$$\mu$$s。如果置0000 0000h,同步窗将被禁用。 213 | **对象描述** 214 | 215 | |索引|1007h| 216 | |---|---| 217 | |名称|同步窗长度| 218 | |对象代码|VAR| 219 | |数据类型|UNSIGNED32| 220 | |类别|可选的| 221 | 222 | **条目说明** 223 | 224 | |子索引|00h| 225 | |---|---| 226 | |访问权限|rw| 227 | |PDO映射|否| 228 | |值范围|UNSIGNED32| 229 | |默认值|0000 0000h| 230 | 231 | ####7.5.2.8 **对象1008h:制造商设备名称** 232 | 此对象为制造商的设备命名。 233 | **对象描述** 234 | 235 | |索引|1008h| 236 | |---|---| 237 | |名称|制造商设备名称| 238 | |对象代码|VAR| 239 | |数据类型|VISIBLE_STRING| 240 | |类别|可选| 241 | **条目说明** 242 | 243 | |子索引|00h| 244 | |---|---| 245 | |访问权限|const| 246 | |PDO映射|否| 247 | |取值范围|VISIBLE_STRING| 248 | |默认值|制造商指定| 249 | ####7.5.2.9 **对象1009h:制造商的硬件版本** 250 | 此对象为制造商提供的硬件版本。 251 | **对象描述** 252 | 253 | |索引号|1009h| 254 | |---|---| 255 | |名称|制造商硬件版本| 256 | |对象代码|VAR| 257 | |数据类型|VISIBLE_STRING| 258 | |类别|可选| 259 | **条目说明** 260 | 261 | |子索引|00h| 262 | |---|---| 263 | |访问权限|const| 264 | |PDO 映射|No| 265 | |取值范围|VISIBLE_STRING| 266 | |默认值|制造商指定| 267 | ####7.5.2.11 **对象100Ch:监护周期** 268 | 索引对象100Ch和100Dh是生存周期因子,前者配置了监护周期。其乘积给出了生存监护协议的生存周期。 269 | **值定义** 270 | 单位ms。值为 0000h时禁用生存监护。 271 | **对象描述** 272 | 273 | |索引|100Ch| 274 | |---|---| 275 | |名称|监护周期| 276 | |对象代码|VAR| 277 | |数据类型|UNSIGNED16| 278 | |类别|条件的
如果支持节点保护则为强制的| 279 | **条目说明** 280 | 281 | |子索引|00h| 282 | |---|---| 283 | |访问权限|rw
ro,如果不支持寿命保护| 284 | |PDO 映射|否| 285 | |值范围|UNSIGNED16| 286 | |默认值|0000h| 287 | ####7.5.2.12 **对象100Dh:生存周期因子** 288 | 生存周期因子和监护周期的乘积给出了生存监护协仪的生存周期。 289 | **值定义** 290 | 该值为00h应禁用生存监护。 291 | **对象描述** 292 | 293 | |索引|100Dh| 294 | |---|---| 295 | |名称|生存周期因子| 296 | |对象代码|VAR| 297 | |数据类型|UNSIGNED8| 298 | |类别|条件的
如果支持节点监护,是强制性的| 299 | **条目说明** 300 | 301 | |子索引|00h| 302 | |---|---| 303 | |访问权限|rw
\ro,如果不支持生存监护| 304 | |PDO 映射|否| 305 | |取值范围|UNSIGNED8| 306 | |默认值|00h| 307 | ####7.5.2.13 **对象1010h:保存参数** 308 | 此对象控制保存参数到非易失性存储器中。 309 | **值定义** 310 | 为了访问 CANopen 设备,应提供相关信息的保存能力。 311 | 参数组分类: 312 | * 子索引00h包含子索引数。 313 | * 子索引01h指的是所有可存储在CANopen设备上的的参数。 314 | * 子索引02h指的是通信相关的参数(索引从1000h到1FFFh)。 315 | * 子索引03h指的是应用相关的参数(索引从6000h到9FFFh)。 316 | * 子索引04h到7Fh制造商可选的单独的参数。 317 | * 子索引80h到FEh为将来的使用而保留。 318 | 319 | 为了避免存储的参数错误,存储应仅当特定暗号写到相应的子索引才被执行。暗号必须是“save”: 320 | ![图55:存储权限暗号](./CANopen_DS301_CN_image/55.png) 321 | 图55:存储权限暗号 322 | 在相应子索引接收到正确的暗号后,CANopen设备保存参数然后通过SDO确认(SDO下载启动响应)。如果存储失败,CANopen设备响应SDO中止(中止代码:0606 0000h)。 323 | 如果写入暗号有误,CANopen设备拒绝保存,并且响应SDO中止传输(中止代码:0800 002xh)。 324 | 通过读访问,CANopen设备提供存储功能相关信息,格式如下: 325 | ![图56:读结构](./CANopen_DS301_CN_image/56.png) 326 | 图56:读结构 327 |
表56:读访问结构 328 | 329 | |**位**|**值**|**描述**| 330 | |---|---|---| 331 | |auto|0b
1b|CANopen设备不自动保存参数
CANopen设备自动保存参数| 332 | |cmd|0b
1b|CANopen设备不接受保存参数命令
CANopen设备按命令执行保存参数动作| 333 | 自动保存意味着CANopen设备参数的非易失存储无需用户请求。 334 | **对象描述** 335 | 336 | |索引|1010h| 337 | |名称|存储参数| 338 | |对象代码|ARRAY| 339 | |数据类型|UNSIGNED32| 340 | |类别|可选| 341 | **条目说明** 342 | 343 | |子索引|00h| 344 | |---|---| 345 | |描述|最高子索引数| 346 | |条目类别|强制| 347 | |访问权限|const| 348 | |PDO 映射|否| 349 | |取值范围|01h~7Fh| 350 | |默认值|协议或制造商指定| 351 | 352 | 353 | |子索引|01h| 354 | |---|---| 355 | |描述|保存所有参数| 356 | |条目类别|强制| 357 | |访问权限|rw
ro,如果支持自动保存| 358 | |PDO 映射|否| 359 | |取值范围|请参阅*值定义*
(图55为写入;图56为只读)| 360 | |默认值|协议或制造商指定| 361 | 362 | |子索引|02h| 363 | |---|---| 364 | |描述|保存的通信参数| 365 | |条目类别|可选| 366 | |访问权限|rw
ro,如果支持自动保存| 367 | |PDO映射|否| 368 | |取值范围|请参阅*值定义*
(图55为写入;图56为只读访问权限)| 369 | |默认值|协议或制造商指定| 370 | 371 | |子索引|03h| 372 | |---|---| 373 | |描述|保存应用参数| 374 | |条目类别|可选| 375 | |访问权限|rw
ro,如果支持自动保存| 376 | |PDO映射|否| 377 | |取值范围|请参阅*值定义*
(图55为写入;图56为只读访问权限)| 378 | |默认值|协议或制造商指定| 379 | 380 | |子索引|04h~7Fh| 381 | |---|---| 382 | |描述|保存制造商定义的参数| 383 | |条目类别|可选| 384 | |访问权限|rw
ro,如果支持自动保存| 385 | |PDO映射|否| 386 | |取值范围|请参阅*值定义*
(图55为写入;图56为只读访问权限)| 387 | |默认值|协议或制造商指定| 388 | ####7.5.2.14 **对象1011h:恢复缺省参数** 389 | 通过该对象根据协议、设备协议和应用协议恢复参数默认值。 390 | **值定义** 391 | 通过读取访问,CANopen设备提供有关恢复相关值的功能信息。其参数组的分类: 392 | * 子索引00h包含支持的最大子索引数。 393 | * 子索引01h指恢复所有参数。 394 | * 子索引02h指恢复通信相关参数(索引从1000h到1FFFh)。 395 | * 子索引03h恢复应用相关参数(索引从6000h到9FFFh)。 396 | * 子索引04h到7Fh为制造商指定的恢复特定参数。 397 | * 子索引80h到FEh为将来的使用而保留。 398 | 399 | 为了避免误动作,恢复应仅当写入暗号到相应的子索引有效。暗号为“load”: 400 | ![图57:恢复默认值的写入暗号](./CANopen_DS301_CN_image/57.png) 401 | 图57:恢复默认值的写入暗号 402 | 403 | CANopen设备接收到正确的暗号后就会恢复相应参数值为默认值,然后通过SDO应答确认(SDO下载启动应答)。如果恢复失败会得到SDO中止应答(中止代码:0606 0000h)。如果暗号写入错误,CANopen设备应拒绝恢复操作并应答SDO中止(中止代码:0800 002xh)。 404 | CANopen设备复位(对于子索引01h到7Fh执行NMT复位节点服务,对于子索引02h需要执行NMT复位通信服务)或掉电重启后默认值生效。 405 | ![图58:恢复默认值过程](./CANopen_DS301_CN_image/58.png) 406 | 图58:恢复默认值过程 407 | 408 | 通过读访问,CANopen设备提供恢复参数功能相关信息,格式如下: 409 | ![图59:恢复默认的读访问结构](./CANopen_DS301_CN_image/59.png) 410 | 图59:恢复默认的读访问结构 411 | 412 |
表57:恢复默认的读访问结构 413 | 414 | |**位**|**值**|**描述**| 415 | |---|---| 416 | |cmd|0b
1b|CANopen设备不支持恢复默认参数
CANopen设备支持恢复参数| 417 | **对象描述** 418 | 419 | |索引|1011h| 420 | |---|---| 421 | |名称|恢复缺省参数| 422 | |对象代码|ARRAY| 423 | |数据类型|UNSIGNED32| 424 | |类别|可选| 425 | 426 | |子索引|00h| 427 | |---|---| 428 | |描述|最高子索引数| 429 | |条目类别|强制| 430 | |访问权限|const| 431 | |PDO映射|否| 432 | |取值范围|01h~7Fh| 433 | |默认值|协议或制造商指定| 434 | 435 | 436 | |子索引|01h| 437 | |---|---| 438 | |描述|恢复所有默认的参数| 439 | |条目类别|强制| 440 | |访问权限|rw| 441 | |PDO 映射|否| 442 | |取值范围|请参阅值定义
(图57为写访问;图59读访问)| 443 | |默认值|协议或制造商指定| 444 | 445 | |子索引|02h| 446 | |---|---| 447 | |描述|恢复默认的通信参数| 448 | |条目类别|强制| 449 | |访问权限|rw| 450 | |PDO 映射|否| 451 | |取值范围|请参阅值定义
(图57为写访问;图59读访问)| 452 | |默认值|协议或制造商指定| 453 | 454 | |子索引|03h| 455 | |---|---| 456 | |描述|恢复应用的默认参数| 457 | |条目类别|强制| 458 | |访问权限|rw| 459 | |PDO 映射|否| 460 | |取值范围|请参阅值定义
(图57为写访问;图59读访问)| 461 | |默认值|协议或制造商指定| 462 | 463 | |子索引|04h~7Fh| 464 | |---|---| 465 | |描述|还原制造商定义的默认参数| 466 | |条目类别|可选| 467 | |访问权限|rw| 468 | |PDO 映射|否| 469 | |取值范围|请参阅值定义
(图57为写访问;图59读访问)| 470 | |默认值|协议或制造商指定| 471 | ####7.5.2.15 **对象1012h:时间戳对象COB-ID** 472 | 此对象为时间戳对象(TIME)的COB-ID配置。此外,它还定义了CANopen设备是否消费TIME或是否生成TIME。对象结构见图60和表58。 473 | **值定义** 474 | ![图60:TIME COB-ID结构](./CANopen_DS301_CN_image/60.png) 475 | 图60:TIME COB-ID结构 476 | 477 |
表58:TIME COB-ID说明 478 | |**位(们)**|**值**|**描述**| 479 | |consume|0b
1b|CANopen设备不消费TIME消息
CANopen设备消费TIME消息| 480 | |produce|0b
1b|CANopen设备不会产生TIME消息
CANopen设备产生TIME消息| 481 | |frame|0b
1b|11位CAN-ID有效(CAN标准帧)
29位CAN-ID有效(CAN扩展帧)| 482 | |29位CAN-ID|x|29位CAN-ID的扩展帧| 483 | |11位CAN-ID|x|11位CAN-ID 的标准帧| 484 | 位29(frame)、30(produce)可以是静态的(不能更改)。如果CANopen设备不支持生成TIME,试图置位30(produce)为1b将得到SDO中止传输应答(中止代码:0609 0030h)。如果CANopen设备仅支持标准帧,试图置位29(frame)1b得到SDO中止传输应答(中止代码:0609 0030h)。当此对象存在(位30=1b或位31=1b)时位0至29不可更改。 485 | **对象描述** 486 | 487 | |索引|1012h| 488 | |---|---| 489 | |名称|时间戳COB-ID| 490 | |对象代码|VAR| 491 | |数据类型|UNSIGNED32| 492 | |类别|可选的| 493 | 494 | |子索引|00h| 495 | |---|---| 496 | |访问权限|rw| 497 | |PDO 映射|否| 498 | |取值范围|UNSIGNED32| 499 | |默认值|CAN-ID:100h
frame:0b
有效:协议或制造商指定| 500 | 501 | ####7.5.2.16 **对象1013h:高分辨率时间戳** 502 | 此对象表达已配置的高分辨率时间戳。它可能会被映射到PDO,以交换高分辨率时间戳的消息。鼓励更深入的应用。 503 | **值定义** 504 | 单位$$\mu$$s。 505 | **对象描述** 506 | 507 | |索引|1013h| 508 | |---|---| 509 | |名称|高分辨率时间戳| 510 | |对象代码|VAR| 511 | |数据类型|UNSIGNED32| 512 | |类别|可选| 513 | **条目说明** 514 | 515 | |子索引|00h| 516 | |---|---| 517 | |访问权限|rw
ro,如果仅支持生成高分辨率时间戳
rw或wo,如果仅支持高分辨率时间戳消费| 518 | |PDO映射|可选| 519 | |取值范围|UNSIGNED32| 520 | |默认值|0| 521 | ####7.5.2.17 **对象1014h:EMCY COB-ID** 522 | 此对象表达已配置的EMCY 写服务COB-ID。 523 | **值定义** 524 | ![图61:EMCY标识结构](./CANopen_DS301_CN_image/61.png) 525 | 图61:EMCY标识结构 526 | 527 |
表59:EMCY COB-ID说明 528 | 529 | |**位(们)**|**值**|**描述**| 530 | |---|---|---| 531 | |valid|0b
1b|EMCY存在/有效
EMCY不存在/无效| 532 | |30|0b|保留(始终为0b)| 533 | |frame|0b
1b|11CAN-ID有效(CAN标准帧)
29位CAN-ID有效(CAN扩展帧)| 534 | |29位CAN-ID|x|29位CAN-ID的扩展帧| 535 | |11位CAN-ID|x|11位CAN-ID的标准帧| 536 | 537 | 仅支持标准帧的CANopen设备企图置位29(frame)为1b将得到SDO中止传输响应(中止代码:0609 0030h)。当应急对象有效(位31= 0b)时,位0至29禁止更改。 538 | **对象描述** 539 | 540 | |索引|1014h| 541 | |---|---| 542 | |名称|应急消息COB-ID| 543 | |对象代码|VAR| 544 | |数据类型|UNSIGNED32| 545 | |类别|条件的
强制性的,如果支持应急对象| 546 | **条目说明** 547 | 548 | |子索引|00h| 549 | |---|---| 550 | |访问权限|rw
const如果COB-ID不可更改| 551 | |PDO映射|否| 552 | |取值范围|UNSIGNED32| 553 | |默认值|CAN-ID:80h+Node-ID
frame:0b
valid:协议或制造商指定| 554 | ####7.5.2.18 **对象1015h:EMCY抑制时间** 555 | 此对象表达EMCY 消息抑制时间的配置。 556 | **值定义** 557 | 单位100$$\mu$$s。值为0将禁用抑制时间。 558 | **对象描述** 559 | 560 | |索引|1015h| 561 | |---|---| 562 | |名称|EMCY抑制时间| 563 | |对象代码|VAR| 564 | |数据类型|UNSIGNED16| 565 | |类别|可选的| 566 | 567 | |子索引|00h| 568 | |---|---| 569 | |访问权限|rw| 570 | |PDO映射|否| 571 | |取值范围|UNSIGNED16| 572 | |默认值|0| 573 | ####7.5.2.19 **对象1016h:消费者心跳超时** 574 | 该对象为期望的心跳周期,从接收第一次心跳开始监测心跳生产者。 575 | 注意:消费者心跳超时应大于相应的生产者的心跳周期。 576 | 注:在检测到生产者的第一次心跳前其状态未知。 577 | **值定义** 578 | ![图62:消费者心跳超时结构](./CANopen_DS301_CN_image/62.png) 579 | 图62:消费者心跳超时结构 580 | 如果心跳时间为0或者Node-ID为0或大于127,则对应的对象条目无效。心跳超时单位ms。 581 | 为相同的node-ID尝试配置多个非0心跳时间,CANopen设备将响应SDO中止应答(中止代码:0604 0043h)。 582 | **对象描述** 583 | 584 | |索引|1016h| 585 | |---|---| 586 | |名称|消费者心跳超时| 587 | |对象代码|ARRAY| 588 | |数据类型|UNSIGNED32| 589 | |类别|可选的| 590 | **条目说明** 591 | 592 | |子索引|00h| 593 | |---|---| 594 | |描述|最大子索引数| 595 | |条目类别|强制| 596 | |访问权限|const| 597 | |PDO映射|否| 598 | |取值范围|01h~7Fh| 599 | |默认值|协议或制造商指定| 600 | 601 | |子索引|01h| 602 | |---|---| 603 | |描述|消费者心跳超时| 604 | |条目类别|强制| 605 | |访问权限|rw| 606 | |PDO映射|否| 607 | |取值范围|UNSIGNED32(图62)| 608 | |默认值|0000 0000h| 609 | 610 | |子索引|02h~7Fh| 611 | |---|---| 612 | |描述|消费者心跳超时| 613 | |条目类别|可选| 614 | |访问权限|rw| 615 | |PDO映射|否| 616 | |取值范围|UNSIGNED32(图62)| 617 | |默认值|0000 0000h| 618 | ####7.5.2.20 **对象1017h:生产者心跳超时** 619 | 该对象为心跳周期的配置。 620 | **值定义** 621 | 单位ms。0值将禁用生产者心跳。 622 | **对象描述** 623 | 624 | |索引|1017h| 625 | |---|---| 626 | |名称|生产者心跳超时 627 | |对象代码|VAR| 628 | |数据类型|UNSIGNED16| 629 | |类别|有条件的
强制性的,如果不支持监护| 630 | **条目说明** 631 | 632 | |子索引|00h| 633 | |---|---| 634 | |访问权限|rw
const,如果默认值为协议指定且不可更改| 635 | |PDO映射|否| 636 | |取值范围|UNSIGNED16| 637 | |默认值|0或协议指定| 638 | ####7.5.2.21 **对象1018h:对象身份** 639 | 此对象提供CANopen设备的身份识别信息。 640 | **值定义** 641 | * 子索引01h包含有特定的值1为每个CANopen 设备供应商所独有。值0000 0000h表明无效的供应商标识。 642 | * 子索引02h包含有特定的值,来识别特定类型的CANopen设备。值0000 0000h应被保留。 643 | * 子索引03h应包含CANopen设备的主修订版本号和次修订版本号(参见图63)。主修订版本号应指明特定的CANopen行为。这意味着如果CANopen功能发生变化,主修订版本号应增加。次修订版本号应识别具有相同CANopen行为的不同版本的CANopen设备。值0000 0000h应被保留。 644 | 645 | ![图63:修订版本号结构](./CANopen_DS301_CN_image/63.png) 646 | 图63:修订版本号结构 647 | 648 | 子索引04h包含序列号,为某一组产品和特定版本CANopen设备的唯一标识。值0000 0000h应被保留。 649 | **对象描述** 650 | 651 | |索引|1018h| 652 | |---|---| 653 | |名称|对象身份| 654 | |对象代码|RECORD| 655 | |数据类型|Identity| 656 | |类别|强制性| 657 | **条目说明** 658 | 659 | |子索引|00h| 660 | |---|---| 661 | |描述|最大子索引数| 662 | |条目类别|强制性| 663 | |访问权限|const| 664 | |PDO映射|否| 665 | |取值范围|01h到04h| 666 | |默认值|协议或制造商指定| 667 | 668 | 1值由CAN in Automation ( CiA ) 唯一分配。 669 | 670 | |子索引|01h| 671 | |---|---| 672 | |描述|Vendor-ID| 673 | |条目类别|强制性| 674 | |访问权限|ro| 675 | |PDO映射|否| 676 | |取值范围|UNSIGNED32| 677 | |默认值|由CiA唯一分配给制造商| 678 | 679 | |子索引|02h| 680 | |---|---| 681 | |描述|产品码| 682 | |条目类别|可选的| 683 | |访问权限|ro| 684 | |PDO映射|否| 685 | |取值范围|UNSIGNED32| 686 | |默认值|协议或制造商指定商| 687 | 688 | |子索引|03h| 689 | |---|---| 690 | |描述|修订版本号| 691 | |条目类别|可选的| 692 | |访问权限|ro| 693 | |PDO映射|否| 694 | |取值范围|UNSIGNED32| 695 | |默认值|协议或制造商指定商| 696 | 697 | 698 | |子索引|04h| 699 | |---|---| 700 | |描述|序列号| 701 | |条目类别|可选的| 702 | |访问权限|ro| 703 | |PDO映射|否| 704 | |取值范围|UNSIGNED32| 705 | |默认值|协议或制造商指定商| 706 | ####7.5.2.22 **对象1019h:同步计数器溢出值** 707 | 此对象为同步计数器支持的最大值配置。如果CANopen设备支持同步计数器,生产者和消费者应支持此对象。如果该值大于1,同步信息应带有数据长度为1字节的数据。SYNC消费者应忽略该值本身。一旦SYNC消费者发现接收的SYNC消息数据长度与配置的不同将发送EMCY消息(错误代码:8240h-意外的同步数据长度)。 708 | **值定义** 709 | 710 | |**值**|**描述**| 711 | |---|---| 712 | |0|SYNC消息数据长度为0| 713 | |1|保留| 714 | |2~240|SYNC消息数据长度为1。第一个数据字节包含计数器| 715 | |241~255|保留的| 716 | 该值应为所有TPDO的传输类型(1h或0800 0000h)。 718 | **对象描述** 719 | 720 | |索引|1019h| 721 | |---|---| 722 | |名称|同步计数器溢出值| 723 | |对象代码|VAR| 724 | |数据类型|UNSIGNED8| 725 | |类别|可选的| 726 | **条目说明** 727 | 728 | |子索引|00h| 729 | |---|---| 730 | |访问权限|rw
const,如果协议指定默认值不可更改| 731 | |PDO映射|否| 732 | |取值范围|UNSIGNED8| 733 | |默认值|0或协议指定| 734 | ####7.5.2.23 **对象1020h:验证配置** 735 | 此对象保存下载配置的日期和时间。如果CANopen设备支持保存参数到非易失性存储器,网络配置工具或CANopen管理器使用该对象在设备复位后验证配置,检查是否需要重新配置。配置工具将该对象存储的相同日期和时间值同时存入DCF。然后配置工具通过向CANopen设备索引1010h的子索引01h写入 “save”来保存配置。CANopen设备复位后应能自动或由请求来恢复最近一次的配置和识别标记。如果有任何其他命令更改了启动配置值,CANopen设备均应重置验证配置对象为0。 736 | 配置管理器将比较识别标记和DCF中的配置值,决定是否需要重置。 737 | 注意:使用此对象需允许超前于启动过程的识别标识。如果使用该对象,系统集成商能够识别出用户更改了配置,并且随后激活了1010h的保存命令,但并未更改1020h。因而系统集成商通过使用该功能可以100% 确认上述情况。 738 | **值定义** 739 | * 子索引01h(配置日期)应包含自1984年1月1日的天数。 740 | * 子索引02h(配置时间)为自午夜开始的ms数。 741 | 742 | **对象描述** 743 | 744 | |索引|1020h| 745 | |---|---| 746 | |名称|验证配置| 747 | |对象代码|ARRAY| 748 | |数据类型|UNSIGNED32| 749 | |类别|可选的| 750 | **条目说明** 751 | 752 | |子索引|00h| 753 | |---|---| 754 | |描述|子索引数| 755 | |条目类别|强制性| 756 | |访问权限|const| 757 | |PDO映射|否| 758 | |取值范围|02h| 759 | |默认值|02h| 760 | 761 | |子索引|01h| 762 | |---|---| 763 | |描述|配置日期| 764 | |条目类别|强制性| 765 | |访问权限|rw| 766 | |PDO映射|否| 767 | |取值范围|UNSIGNED32| 768 | |默认值|制造商指定| 769 | 770 | |子索引|02h| 771 | |---|---| 772 | |描述|配置时间| 773 | |条目类别|强制性| 774 | |访问权限|rw| 775 | |PDO映射|否| 776 | |取值范围|UNSIGNED32| 777 | |默认值|制造商指定| 778 | ####7.5.2.24 **对象1021h:存储EDS** 779 | 此对象描述装载的EDS。EDS文件存储于CANopen设备上具有以下优势: 780 | * 制造商不存在通过磁盘分发EDS的问题。 781 | * 如果不同软件版本的不同EDS版本是存放在一起,管理它们不容易出错。 782 | * 完整的网络配置保存于网络,使得分析或重新配置网络更方便并且对用户更透明。 783 | 784 | **值定义** 785 | 文件名不需要存储,因为每个EDS文件包含其自身文件名。 786 | 787 | **对象描述** 788 | 789 | |索引|1021h| 790 | |---|---| 791 | |名称|EDS的存储| 792 | |对象代码|VAR| 793 | |数据类型|域| 794 | |类别|可选的| 795 | **条目说明** 796 | 797 | |子索引|00h| 798 | |---|---| 799 | |访问权限|ro| 800 | |PDO映射|否| 801 | |取值范围|制造商指定| 802 | |默认值|无| 803 | ####7.5.2.25 **对象1022h:存储格式** 804 | 该对象为存储格式说明,允许使用的压缩格式。对象仅描述外部行为。 805 | **值定义** 806 |
表60:EDS存储格式 807 | 808 | |**值**|**描述**| 809 | |---|---| 810 | |00h|/ISO 10646/不压缩| 811 | |01h|保留的| 812 | |: : : : :|: : : : :| 813 | |7Fh|保留的| 814 | |80h|制造商指定| 815 | |: : : : :|: : : : :| 816 | |FFh|制造商指定| 817 | **对象描述** 818 | 819 | |索引|1022h| 820 | |---|---| 821 | |名称|存储格式| 822 | |对象代码|VAR| 823 | |数据类型|UNSIGNED16| 824 | |类别|条件的
如果支持存储EDS则强制| 825 | **条目说明** 826 | 827 | |子索引|00h| 828 | |---|---| 829 | |访问权限|ro| 830 | |PDO映射|否| 831 | |取值范围|UNSIGNED8| 832 | |默认值|无| 833 | ####7.5.2.26 **对象1023h:OS命令** 834 | 该对象将用作可编程设备的命令驱动接口。命令内容为/ISO8859/字符或由制造商完全指定的二进制。 由主系统将OS命令传给对象。 835 | **值定义** 836 | 如果CANopen设备实现此功能,必须支持所有子索引,附加的对象条目由制造商指定。当状态范围从0到3表示有新的命令输入:命令和所有参数应作为一整块传入子索引01h。命令传输完成应立即执行。主机轮询子索引 02h,直到其值从0到3。如果状态值是1或3,主机可以接着发送回复。如果回复请求多次,或改变状态从1到0或3到2,或不能缓存回复,CANopen设备应返回相同的回复。(译注:~~笔者未使用过该对象,对其理解不明确~~) 837 | **对象描述** 838 | 839 | |索引|1023h| 840 | |---|---| 841 | |名称|OS命令| 842 | |对象代码|RECORD| 843 | |数据类型|OS command record| 844 | |类别|可选的| 845 | 846 | **条目说明** 847 | 848 | |子索引|00h| 849 | |---|---| 850 | |描述|子索引数| 851 | |条目类别|强制性| 852 | |访问权限|const| 853 | |PDO映射|否| 854 | |取值范围|03h| 855 | |默认值|03h| 856 | 857 | |子索引01h| 858 | |---|---| 859 | |描述|命令| 860 | |条目类别|强制性| 861 | |访问权限|rw
wo,如果只支持写| 862 | |PDO 映射|否| 863 | |取值范围|无| 864 | |默认值|制造商指定| 865 | 866 | 867 | |子索引|02h| 868 | |---|---| 869 | |描述|状态| 870 | |条目类别|强制性| 871 | |访问权限|ro| 872 | |PDO映射|否| 873 | |取值范围|UNSIGNED8| 874 | |默认值|无| 875 | 876 | |子索引|03h| 877 | |---|---| 878 | |描述|回复| 879 | |条目类别|强制性| 880 | |访问权限|ro| 881 | |PDO映射|否| 882 | |取值范围|无| 883 | |默认值|无| 884 | ####7.5.2.27 **对象1024h:OS命令模式** 885 | 此对象控制应用指定队列的命令执行。其目的是希望通过该对象指导应用指定队列中最近的命令。 886 | **值定义** 887 |
表61:OS命令模式值 888 | 889 | |**值**|**描述**| 890 | |---|---| 891 | |00h|立即执行下一条命令| 892 | |01h|缓冲下一条命令| 893 | |02h|执行缓冲区中的命令| 894 | |03h|中止当的命令和缓冲区中所有命令| 895 | |04h|制造商指定| 896 | |: : : : :|: : : : :| 897 | |FFh|制造商指定| 898 | **对象描述** 899 | 900 | |索引|1024h| 901 | |---|---| 902 | |名称|OS命令模式| 903 | |对象代码|VAR| 904 | |数据类型|UNSIGNED8| 905 | |类别|可选的| 906 | 907 | **条目说明** 908 | 909 | |子索引|00h| 910 | |---|---| 911 | |访问权限|wo| 912 | |PDO映射|否| 913 | |取值范围|UNSIGNED8| 914 | |默认值|制造商指定| 915 | ####7.5.2.28 **对象1025h:OS调试接口** 916 | 此对象对应OS调试接口,是可编程CANopen设备调试器的二进制命令接口。命令内容由制造商指定。该对象允许用户连接到远程的调试器。 917 | **值定义** 918 | 参阅OS命令 919 | **对象描述** 920 | 921 | |索引|1025h| 922 | |---|---| 923 | |名称|OS调试接口| 924 | |对象代码|RECORD| 925 | |数据类型|OS debug record| 926 | |类别|可选| 927 | 928 | **条目说明** 929 | 930 | |子索引|00h| 931 | |---|---| 932 | |描述|子索引数| 933 | |条目类别|强制性| 934 | |访问权限|const| 935 | |PDO映射|否| 936 | |取值范围|03h| 937 | |默认值|03h| 938 | 939 | 940 | |子索引|01h| 941 | |---|---| 942 | |描述|命令| 943 | |条目类别|强制性| 944 | |访问权限|rw
wo,如果仅支持只写| 945 | |PDO映射|否| 946 | |取值范围|无| 947 | |默认值|制造商指定| 948 | 949 | 950 | |子索引|02h| 951 | |---|---| 952 | |描述|状态| 953 | |条目类别|强制性| 954 | |访问权限|ro| 955 | |PDO映射|否| 956 | |取值范围|UNSIGNED8| 957 | |默认值|无| 958 | 959 | |子索引|03h| 960 | |---|---| 961 | |描述|回复| 962 | |条目类别|强制性| 963 | |访问权限|ro| 964 | |PDO映射|否| 965 | |取值范围|无| 966 | |默认值|无| 967 | ####7.5.2.29 **对象1026h:OS提示符命令接口** 968 | 该对象是可编程CANopen设备的字符驱动命令接口。命令内容由制造商指定。该对象允许用户实现远程键盘控制。 969 | **值定义** 970 | 子索引01hStdIn是通过SDO或PDO用来向CANopen设备传输单个字符的接口。每个新字符均被加入内部输入队列。CANopen设备应答通过子索引02hStdout输出。该对象通常被映射到一个事件驱动的PDO或轮询SDO中。子索引03hStdErr用于错误输出。该对象通常被映射到一个事件驱动的PDO或轮询SDO中。 971 | **对象描述** 972 | 973 | |索引|1026h| 974 | |---|---| 975 | |名称|OS提示符命令接口| 976 | |对象代码|ARRAY| 977 | |数据类型|UNSIGNED8| 978 | |类别|可选| 979 | **条目说明** 980 | 981 | |子索引|00h| 982 | |---|---| 983 | |描述|子索引数| 984 | |条目类别|强制性| 985 | |访问权限|const| 986 | |PDO映射|否| 987 | |取值范围|02h~03h| 988 | |默认值|无| 989 | 990 | |子索引|01h| 991 | |---|---| 992 | |描述|StdIn| 993 | |条目类别|强制| 994 | |访问权限|wo| 995 | |PDO映射|可选| 996 | |取值范围|UNSIGNED8| 997 | |默认值|制造商指定| 998 | 999 | 1000 | |子索引|02h| 1001 | |---|---| 1002 | |描述|StdOut| 1003 | |条目类别|强制| 1004 | |访问权限|ro| 1005 | |PDO映射|可选| 1006 | |取值范围|UNSIGNED8| 1007 | |默认值|无| 1008 | 1009 | 1010 | |子索引|03h| 1011 | |---|---| 1012 | |描述|StdErr| 1013 | |条目类别|可选| 1014 | |访问权限|ro| 1015 | |PDO映射|可选| 1016 | |取值范围|UNSIGNED8| 1017 | |默认值|无| 1018 | ####7.5.2.30 **对象1027h:模块列表** 1019 | 组合连接模块化CANopen设备的通用方法是使用总线耦合器。该对象提供当前已连接模块的信息列表。 1020 | **值定义** 1021 | 连续的子索引(1≤N≤254)描述了相应模块的顺序连接。每个对象的条目包含了模块的识别号。此识别号能够唯一区分连到总线耦合器上的所有设备类型。 1022 | 该对象的条目子索引00h为实际连接到总线耦合器上的模块数量。 1023 | 注:如果没有模块存在,子索引00h的值为00h,读取子索引01h响应SDO中止应答(中止代码:0800 0024h 或0800 0000h)。 1024 | **对象描述** 1025 | 1026 | |索引|1027h| 1027 | |---|---| 1028 | |名称|模块列表| 1029 | |对象代码|ARRAY| 1030 | |数据类型|UNSIGNED16| 1031 | |类别|有条件的
强制,如果支持模块化的设备| 1032 | 1033 | **条目说明** 1034 | 1035 | |子索引|00h| 1036 | |---|---| 1037 | |描述|连接模块数| 1038 | |条目类别|强制| 1039 | |访问权限|const| 1040 | |PDO映射|否| 1041 | |取值范围|01h~FEh| 1042 | |默认值|无| 1043 | 1044 | |子索引|01h| 1045 | |---|---| 1046 | |描述|模块1| 1047 | |条目类别|强制| 1048 | |访问权限|ro| 1049 | |PDO映射|否| 1050 | |取值范围|UNSIGNED16| 1051 | |默认值|无| 1052 | 1053 | |子索引|02h~FEh| 1054 | |---|---| 1055 | |描述|模块2至模块254| 1056 | |条目类别|可选| 1057 | |访问权限|ro| 1058 | |PDO映射|否| 1059 | |取值范围|UNSIGNED16| 1060 | |默认值|无| 1061 | ####7.5.2.31 **对象1028h:应急消费对象** 1062 | 此对象应表明该CANopen设备消费的EMCY对象的COB-ID配置。 1063 | **值定义** 1064 | ![图64:EMCY COB-ID结构](./CANopen_DS301_CN_image/64.png) 1065 | 图64:EMCY COB-ID结构 1066 | 1067 |
表62: EMCY COB-ID说明 1068 | 1069 | |**位(们)**|**值**|**描述**| 1070 | |---|---|---| 1071 | |valid|0b
1bEMCY消费者存在/有效
EMCY消费者不存在/无效| 1072 | |res|0b|保留(始终为0b)| 1073 | |frame|0b
1b|11位CAN-ID有效(标准帧)
29位CAN-ID有效(扩展帧) 1074 | |29位CAN-ID|X|29位CAN-ID 的扩展帧| 1075 | |11位CAN-ID|X|11位CAN-ID的标准帧| 1076 | 仅支持标准帧的CANopen 设备企图置位29(frame)为1b将得到SDO中止传输响应(中止代码:0609 0030h)。当应急对象有效(位31=0b)时,位0至29禁止更改。 1077 | 子索引号关联node-ID。 1078 | **对象描述** 1079 | 1080 | |索引|1028h| 1081 | |---|---| 1082 | |名称|应急消费者| 1083 | |对象代码|ARRAY| 1084 | |数据类型|UNSIGNED32| 1085 | |类别可选| 1086 | 1087 | **条目说明** 1088 | 1089 | |子索引|00h| 1090 | |---|---| 1091 | |描述|子索引数| 1092 | |条目类别|强制| 1093 | |访问权限|const| 1094 | |PDO映射|否| 1095 | |取值范围|01h~7Fh| 1096 | |默认值|协议或制造商指定| 1097 | 1098 | 1099 | |子索引|01h| 1100 | |---|---| 1101 | |描述|应急消费者1| 1102 | |条目类别|强制| 1103 | |访问权限|rw
const,如果应急消费者不可更改| 1104 | |PDO映射|否| 1105 | |取值范围|请参阅值定义| 1106 | |默认值|协议或制造商指定| 1107 | 1108 | 1109 | |子索引|02h~7Fh| 1110 | |---|---| 1111 | |描述|应急消费者2~127| 1112 | |条目类别|可选| 1113 | |访问权限|rw;
const,如果应急消费者不可更改| 1114 | |PDO映射|否| 1115 | |取值范围|请参阅值定义| 1116 | |默认值|协议或制造商指定| 1117 | ####7.5.2.32 对象1029h:错误行为对象 1118 | 如果在运行态检测到严重的CANopen设备故障,CANopen设备默认应自动进入NMT配置态。如果支持该对象,CANopen设备将配置为可选择进入NMT停止态或继续留在当前NMT状态。CANopen设备故障包括以下通信错误: 1119 | * CAN接口总线关闭 1120 | * 生存监护事件状态为“occurred”且其原因为“time out”。 1121 | * 心跳事件状态为“occurred”且其原因为“time out”。 1122 | 1123 | 某些CANopen设备错误也可能导致CANopen设备的内部故障。 1124 | **值定义** 1125 |
表63:错误类别值 1126 | 1127 | |**值**|**描述**| 1128 | |---|---| 1129 | |00h|更改为NMT配置态(仅当当前设备状态为NMT运行态)| 1130 | |01h|NMT状态不更改| 1131 | |02h|更改为NMT停止态| 1132 | |03h|保留| 1133 | |: : : : :|: : : : :| 1134 | |7Fh|保留| 1135 | |80h|制造商指定| 1136 | |: : : : :|: : : : :| 1137 | |FFh|制造商指定| 1138 | **对象描述** 1139 | 1140 | |索引|1029h| 1141 | |---|---| 1142 | |名称|错误行为| 1143 | |对象代码|ARRAY| 1144 | |数据类型|UNSIGNED8| 1145 | |类别|可选| 1146 | 1147 | **条目说明** 1148 | 1149 | |子索引|00h| 1150 | |---|---| 1151 | |描述|子索引数| 1152 | |条目类别|强制| 1153 | |访问权限|const| 1154 | |PDO映射|否| 1155 | |取值范围|01h~FEh| 1156 | |默认值|协议或制造商指定| 1157 | 1158 | |子索引|01h| 1159 | |---|---| 1160 | |描述|通信错误| 1161 | |条目类别|强制| 1162 | |访问权限|rw
const,如果通信错误的错误行为不可更改| 1163 | |PDO映射|否| 1164 | |取值范围|UNSIGNED8| 1165 | |默认值|00h| 1166 | 1167 | 1168 | |子索引|02h~FEh| 1169 | |---|---| 1170 | |描述协议或制造商指定的错误| 1171 | |条目类别|可选| 1172 | |访问权限|rw;
const,如果错误的行为不可更改| 1173 | |PDO映射|否| 1174 | |取值范围|请参阅*值定义*| 1175 | |默认值|协议或制造商指定| 1176 | ####7.5.2.33 **对象1200h~127Fh:SDO服务器参数** 1177 | 为了描述CANopen设备使用的SDO,前文介绍了SDO参数的数据类型。该数据类型在对象字典索引22h处。该结构定义见7.4.8。 1178 | **值定义** 1179 | 子索引00h是SDO支持的参数数量。子索引01h和02h指定SDO的COB-ID。子索引03h是该CANopen设备的客户端node-ID。 1180 | ![图65:SDO服务器COB-ID结构](./CANopen_DS301_CN_image/65.png) 1181 | 图65:SDO服务器COB-ID结构 1182 | 1183 |
表64:SDO服务器COB-ID说明 1184 | 1185 | |**位(们)**|**值**|**描述**| 1186 | |---|---| 1187 | |valid|0b
1bSDO存在/有效
SDO不存在/无效| 1188 | |dyn|0b
1b|值静态分配
值动态分配| 1189 | |frame|0b
1b|11位CAN-ID有效(标准帧)
29位CAN-ID有效(扩展帧)| 1190 | |29位CAN-ID|x|29位CAN-ID的扩展帧| 1191 | |11位CAN-ID|x|11位CAN-ID的标准帧| 1192 | SDO仅在子索引01h和02h的最高位置0b时有效。仅支持标准帧的CANopen设备企图置位29(frame)为1b将得到SDO中止传输响应(中止代码:0609 0030h)。当该对象存在并有效(位 31 = 0b)时,位0至29禁止更改。 1193 | 如果子索引01h或02h位dyn(位30)设为1b,该对象所有参数不能保存在非易失性存储器中,该位用于标记支持动态SDO连接的CANopen设备。动态SDO连接是使用前临时配置。静态SDO连接配置是长效的,因而要保存在非易失性存储器中。CANopen管理器可以通过dyn位检测SDO连接的动态性。 1194 | **对象描述** 1195 | 1196 | |索引|1200h~127Fh| 1197 | |---|---| 1198 | |名称|SDO服务器参数| 1199 | |对象代码|RECORD| 1200 | |数据类型|SDO parameter record| 1201 | |类别|**条件**
索引1200h:可选
索引1201h~127Fh:只要支持了其参数就是强制性的| 1202 | **条目说明** 1203 | 1204 | |子索引|00h| 1205 | |---|---| 1206 | |描述|子索引数| 1207 | |条目类别|强制性| 1208 | |访问权限|const| 1209 | |PDO映射|否| 1210 | |取值范围|索引1200h:02h
索引1201h~127Fh:02h~03h| 1211 | |默认值|协议或制造商指定| 1212 | 1213 | |子索引|01h| 1214 | |---|---| 1215 | |描述|COB-ID客户端->服务器(rx)| 1216 | |条目类别|强制性| 1217 | |访问权限|**索引1200h:**
const
**索引1201h~127Fh:**
rw
const,如果由应用协议定义| 1218 | |PDO映射|可选| 1219 | |取值范围|请参阅*值定义*| 1220 | |默认值|**索引1200h:**
CAN-ID:600h+Node-ID
frame:0b
dyn:0b
valid:0b
**索引1201h~127Fh:**
CAN-ID:制造商制定(参见7.3.5)
frame:制造商指定
dyn:0b
valid:1b或由应用协议定义| 1221 | 1222 | 1223 | |子索引|02h| 1224 | |---|---| 1225 | |描述|COB-ID服务器->客户端(tx)| 1226 | |条目类别|强制性| 1227 | |访问权限|**索引1200h:**
ro
**索引1201h~127Fh:**
rw
const,如果由应用协议定义| 1228 | |PDO映射|可选| 1229 | |取值范围|请参阅*值定义*| 1230 | |默认值|**索引1200h:**
CAN-ID5800h+Node-ID
frame:0b
dyn:0b
valid:0b
**索引1201h~127Fh:**
CAN-ID:制造商制定(参见7.3.5)
frame:制造商指定
dyn:0b
valid:1b或由应用协议定义| 1231 | 1232 | |子索引|03h| 1233 | |---|---| 1234 | |描述|SDO客户端Node-ID| 1235 | |条目类别|可选| 1236 | |访问权限|rw| 1237 | |PDO映射|否| 1238 | |取值范围|01h~7Fh| 1239 | |默认值|制造商指定| 1240 | ####7.5.2.34 **对象1280h~12FFh:SDO客户端参数** 1241 | 对象包含CANopen设备作为SDO客户端所需参数。如果设备支持该对象,所有子索引必须可用。这部分索引起始于1280h。 1242 | **值定义** 1243 | 子索引00h是SDO支持的参数数量。子索引01h和02h指定SDO的COB-ID。子索引03h是该CANopen设备的服务器node-ID。 1244 | ![图66:SDO客户端COB-ID结构](./CANopen_DS301_CN_image/65.png) 1245 | 图66:SDO客户端COB-ID结构 1246 | 1247 | 1248 | 表65:SDO客户端COB-ID说明 1249 | 1250 | |**位(们)**|**值**|**描述**| 1251 | |---|---| 1252 | |valid|0b
1b|SDO存在/有效
SDO不存在/无效| 1253 | |dyn|0b
1b|值静态分配
值动态分配| 1254 | |frame|0b
1b|11位CAN-ID有效(标准帧)
29位CAN-ID有效(扩展帧)| 1255 | |29位CAN-ID|x|29位CAN-ID的扩展帧| 1256 | |11位CAN-ID|x|11位CAN-ID的标准帧| 1257 | SDO仅在子索引01h和02h的最高位置0b时有效。仅支持标准帧的CANopen设备企图置位29(frame)为1b将得到SDO中止传输响应(中止代码:0609 0030h)。如果设备支持使能(位31=0b)和禁止(bit 31 = 1b)SDO客户端的操作,对位0至30更改将返回SDO中止传输相应(中止代码:0609 0030h 或 0800 000h)。 1258 | 如果子索引01h或02h位dyn(位30)设为1b,该对象所有参数不能保存在非易失性存储器中,该位用于标记支持动态SDO连接的CANopen设备。动态SDO连接是使用前临时配置。静态SDO连接配置是长效的,因而要保存在非易失性存储器中。CANopen管理器可以通过dyn位检测SDO连接的动态性。 1259 | **对象描述** 1260 | 1261 | |索引|1280h~12FFh| 1262 | |---|---| 1263 | |名称|SDO客户端参数| 1264 | |对象代码|RECORD| 1265 | |数据类型|SDO parameter record| 1266 | |类别|**条件**
每个支持的客户端其对应对象都是强制性的| 1267 | 1268 | **条目说明** 1269 | 1270 | |子索引|00h| 1271 | |---|---| 1272 | |描述|子索引数| 1273 | |条目类别|强制性| 1274 | |访问权限|const| 1275 | |PDO映射|否| 1276 | |取值范围|03h| 1277 | |默认值|03h| 1278 | 1279 | |子索引|01h| 1280 | |---|---| 1281 | |描述|COB-ID 客户端->服务器(tx)| 1282 | |条目类别|强制| 1283 | |访问权限|rw;
const,如果由应用协议定义| 1284 | |PDO映射|可选| 1285 | |取值范围|请参阅*值定义*| 1286 | |默认值|CAN-ID:制造商指定(参见7.3.5)
frame:制造商指定
dyn:0b
valid:1b或由应用协议定义| 1287 | 1288 | |子索引|02h| 1289 | |---|---| 1290 | |描述|COB-ID 服务器->客户端(rx)| 1291 | |条目类别|强制| 1292 | |访问权限|rw
const,如果由应用程序定义| 1293 | |PDO映射|可选| 1294 | |取值范围|请参阅*值定义*| 1295 | |默认值|CAN-ID:制造商指定(参见7.3.5)
frame:制造商指定
dyn:0b
valid:1b或由应用协议定义| 1296 | 1297 | |子索引|03h| 1298 | |---|---| 1299 | |描述|SDO服务器Node-ID| 1300 | |条目类别|强制| 1301 | |访问权限|rw
const,如果值不可更改的| 1302 | |PDO映射|否| 1303 | |取值范围|01h~7Fh| 1304 | |默认值|制造商指定| 1305 | ####7.5.2.35 **对象1400h~15FFh:RPDO通信参数** 1306 | 此对象包含CANopen设备接收PDOs的通信参数。 1307 | **值定义** 1308 | 子索引00h包含有效的对象条目记录。其值至少是02h。如果支持抑制时间其值为03h,如果支持事件定时器其值为05h。 1309 | 子索引01h包含RPDO的COB-ID(见图67和表66)。 1310 | ![图67:RPDO的COB-ID结构](./CANopen_DS301_CN_image/67.png) 1311 | 图67:RPDO的COB-ID结构 1312 | 1313 | 1314 |
表66:RPDO COB-ID说明 1315 | 1316 | |**位(们)**|**值**|**描述**| 1317 | |---|---| 1318 | |valid|0b
1b|PDO存在/有效
PDO不存在/无效| 1319 | |reserved|x|任意| 1320 | |frame|0b
1b|11位CAN-ID有效(标准帧)
29位CAN-ID有效(扩展帧)| 1321 | |29位CAN-ID|x|29位CAN-ID的扩展帧| 1322 | |11位CAN-ID|x|11位CAN-ID的标准帧| 1323 | valid(位31)允许设定在NMT运行态哪些RPDO可用。PDOs可以配置但不使用,清除该位即可。对于支持4个RPDOs的CANopen设备,该功能是必要的,因为每个CANopen设备前四个RPDO是带有默认CAN-ID的通用预定义连接集。仅支持标准帧的CANopen设备企图置位29(frame)为1b将得到SDO中止传输响应(中止代码:0609 0030h)。当该对象存在并有效(位 31 = 0b)时,位0至29禁止更改。如果设备支持使能(位31=0b)和禁止(bit31 = 1b)RPDO操作,对位0至30更改将返回SDO中止传输相应(中止代码:0609 0030h或0800 000h)。 1324 | 如果CANopen设备使用设备协议,一定要支持通用预定义连接集(见表67)。 1325 |
表67:RPDO的通用预定义连接集 1326 | 1327 | |**索引**|**默认值**| 1328 | |---|---| 1329 | |1400h|CAN-ID:200h + Node-ID
frame:0b
reserved:制造商指定
valid:协议或制造商指定| 1330 | |1401h|CAN-ID:300h + Node-ID
frame:0b
reserved:制造商指定
valid:协议或制造商指定| 1331 | |**索引**|**默认值**| 1332 | |1402h|CAN-ID:400h + Node-ID
frame:0b
reserved:制造商指定
valid:协议或制造商指定| 1333 | |1403h|CAN-ID:500h + Node-ID
frame:0b
reserved:制造商指定
valid:协议或制造商指定| 1334 | |1404h
15FFh|CAN-ID:协议或制造商指定(见7.3.5)
frame:协议或制造商指定
reserved:制造商指定
valid:1b或由应用协议定义| 1335 | 如果CANopen设备使用应用协议,则应遵守应用协议的预定义连接集。 1336 | 子索引02h定义了RPDO的接收性质(见表68)。试图更改其值为任何不支持的传输类型将应答SDO中止(中止代码:0609 0030h)。 1337 |
表68:RPDO传输类型说明 1338 | 1339 | |**值**|**描述**| 1340 | |---|---| 1341 | |00h|同步| 1342 | |: : : : :|: : : : :| 1343 | |F0h|同步| 1344 | |F1h|保留| 1345 | |: : : : :|: : : : :| 1346 | |FDh|保留| 1347 | |FEh|事件驱动(制造商指定)| 1348 | |FFh|事件驱动(设备协议和应用协议指定)| 1349 | * 同步意味着该CANopen设备在收到紧接着的一帧SYNC(见图68)后生效接收的数据。 1350 | * 事件驱动意味着任何时候都可以接收PDO。且数据立即生效。 1351 | 1352 | ![图68:总线同步和生效](./CANopen_DS301_CN_image/68.png) 1353 | 图68:总线同步和生效 1354 | 1355 | 子索引03h包含抑制时间。该值单位为100$$\mu$$s。值为0表示禁用。该值在PDO生效(子索引01h位31设为0b)时不可更改。RPDO使用该时间执行特定功能。 1356 | 子索引04h保留。它不应被执行;读取或写入将导致SDO中止应答(中止代码:0609 0011h)。 1357 | 1358 | 子索引05h包含事件定时器。单位ms。值为0将禁用事件定时器。RPDO可使用该时间进行期限监控。配置事件定时器后接收到一帧RPDO激活期限监控。超时结果通知本地应用程序。 1359 | 子索引06h包含同步起始值。RPDOs不使用该值;因此对其读写将应答SDO中止(中止代码:0609 0011h)。 1360 | **对象描述** 1361 | 1362 | |索引|1400h~15FFh| 1363 | |---|---| 1364 | |名称|RPDO通信参数| 1365 | |对象代码|RECORD| 1366 | |数据类型|PDO通信参数记录| 1367 | |类别|有条件的
强制,如果支持对应RPDO| 1368 | **条目说明** 1369 | 1370 | |子索引|00h| 1371 | |---|---| 1372 | |描述|子索引数| 1373 | |条目类别|强制| 1374 | |访问权限|const| 1375 | |PDO映射|否| 1376 | |取值范围|02h至06h| 1377 | |默认值|无| 1378 | 1379 | 1380 | |子索引|01h| 1381 | |---|---| 1382 | |描述|RPDO使用的COB-ID| 1383 | |条目类别|强制| 1384 | |访问权限|rw
const如果COB-ID不可更改的| 1385 | |PDO映射|否| 1386 | |取值范围|请参阅值定义| 1387 | |默认值|请参阅值定义| 1388 | 1389 | 1390 | |子索引|02h| 1391 | |---|---| 1392 | |描述|传输类型| 1393 | |条目类别|强制| 1394 | |访问权限|rw
const,如果传输类型是不可更改的| 1395 | |PDO映射|否| 1396 | |取值范围|请参阅值定义| 1397 | |默认值|协议或制造商指定| 1398 | 1399 | 1400 | |子索引|03h| 1401 | |---|---| 1402 | |描述|抑制时间| 1403 | |条目类别|可选| 1404 | |访问权限|rw
const,如果抑制时间不可更改的| 1405 | |PDO映射|否| 1406 | |取值范围|请参阅值定义| 1407 | |默认值|协议或制造商指定| 1408 | 1409 | 1410 | |子索引|04h| 1411 | |---|---| 1412 | |描述|兼容性条目| 1413 | |条目类别|可选| 1414 | |访问权限|rw| 1415 | |PDO映射|否| 1416 | |取值范围|UNSIGNED8| 1417 | |默认值|制造商指定| 1418 | 1419 | 1420 | |子索引|05h| 1421 | |---|---| 1422 | |描述|事件定时器| 1423 | |条目类别|可选| 1424 | |访问权限|rw
const,如果事件的定时器不可更改的| 1425 | |PDO映射|否| 1426 | |取值范围|请参阅值定义| 1427 | |默认值|协议或制造商指定| 1428 | 1429 | 1430 | |子索引|06h| 1431 | |---|---| 1432 | |描述|同步起始值| 1433 | |条目类别|可选| 1434 | |访问权限|rw
const,如果同步起始值不可更改的| 1435 | |PDO映射|否| 1436 | |取值范围|UNSIGNED8| 1437 | |默认值|协议或制造商指定| 1438 | ####7.5.2.36 **对象1600h~17FFh:RPDO映射参数** 1439 | 此对象包含CANopen设备发送PDOs的映射参数。 1440 | **值定义** 1441 | 子索引00h包含有效对象条目映射记录或指定值(见表69),例如,如果支持MPDO,有效的对象条目数须为该应用程序对象相应RPDO应收到的数目。 1442 |
表69:RPDO映射值 1443 | 1444 | |**值**|**描述**| 1445 | |---|---| 1446 | |00h|映射已禁用| 1447 | |01h|子索引01h有效| 1448 | |02h|子索引01h和02h有效| 1449 | |03h|子索引从01h到03h有效| 1450 | |04h|子索引从01h到04h有效| 1451 | |: : : : :|: : : : :| 1452 | |40h|子索引从01h到40h有效| 1453 | |41h|保留的| 1454 | |: : : : :|: : : : :| 1455 | |FDh|保留的| 1456 | |FEh|SAM-MPDO| 1457 | |FFh|DAM-MPDO| 1458 | 子索引从 01h到40h包含应用对象映射信息。对象描述了PDO数据内容对应的索引、子索引和长度(见图 69和图70)。长度为数据位长度,用于验证映射。 1459 | ![图69:RPDO映射结构](./CANopen_DS301_CN_image/69.png) 1460 | 图69:RPDO映射结构 1461 | 试图更改其值在对象字典中没有对应对象,将返回SDO中止应答。其不对应情况包括映射(索引和子索引)不存在,数据长度不一致,PDO长度异常等。索引和子索引需引用简单的数据类型(参见表 44)所谓的伪映射。如果没有相应的对象可用,则根据TPDO填充RPDO,以匹配其长度。 1462 | 下面的动作将导致重映射,可能发生于NMT配置和运行态,如果支持: 1463 | 1. 通过设置RPDO通信参数子索引01h位valid为1b销毁RPDO。 1464 | 2. 通过设置子索引00h至00h禁用映射。 1465 | 3. 通过相应子索引修改映射值。 1466 | 4. 通过设置子索引00h为映射对象数来使能映射。 1467 | 5. 通过设置RPDO通信参数子索引01h位valid为0b创建RPDO。 1468 | 1469 | 如果在第3步的CANopen设备检测到索引和子索引不存在或不允许被映射将响应SDO中止应答(中止代码:0602 0000h 或0604 0041h)。 1470 | 如果在第4步的CANopen设备检测到RPDO映射不可用或无效,CANopen设备响应SDO中止应答(中止代码:0602 0000h或0604 0042h)。 1471 | 如果CANopen设备接收PDO数据字节数超出映射数据字节数(长度),CANopen设备应使用前者的数据字节长度,并且启动EMCY写服务,如果支持的话。 1472 | 如果CANopen设备接收PDO数据字节少于映射数据字节数(长度),CANopen设备应启动EMCY写服务,如果支持的话,错误代码8210h。 1473 | ![图70:RPDO映射规则](./CANopen_DS301_CN_image/70.png) 1474 | 图70:RPDO映射规则 1475 | **对象描述** 1476 | 1477 | |索引|1600h~17FFh| 1478 | |---|---| 1479 | |名称|RPDO映射参数| 1480 | |对象代码|RECORD| 1481 | |数据类型|PDO映射参数记录| 1482 | |类别|条件
强制,对于每个支持的PDO| 1483 | 1484 | **条目说明** 1485 | 1486 | |子索引|00h| 1487 | |---|---| 1488 | |描述|PDO映射数| 1489 | |条目类别|强制| 1490 | |访问权限|rw
const,如果映射不可更改| 1491 | |PDO映射|否| 1492 | |取值范围|请参阅值定义| 1493 | |默认值|协议或制造商指定| 1494 | 1495 | |子索引|01h| 1496 | |---|---| 1497 | |描述|应用对象1st| 1498 | |条目类别|强制| 1499 | |访问权限|rw
const,如果映射条目不可更改| 1500 | |PDO映射|否| 1501 | |取值范围|请参阅值定义| 1502 | |默认值|协议或制造商指定| 1503 | 1504 | |子索引|02h~40h| 1505 | |---|---| 1506 | |描述|第2nd到64th应用程序对象| 1507 | |条目类别|可选| 1508 | |访问权限|rw
const,如果映射条目不可更改的| 1509 | |PDO映射|否| 1510 | |取值范围|请参阅值定义| 1511 | |默认值|协议或制造商指定| 1512 | ####7.5.2.37 **对象1800h~19FFh:TPDO通信参数** 1513 | 此对象包含CANopen设备支持的PDOs通信参数。 1514 | **值定义** 1515 | 子索引00h包含有效的对象条目记录。其值至少是02h。如果支持抑制时间其值为03h,如果支持事件定时器其值为05h。 1516 | 子索引01h包含TPDO的COB-ID(见图71和表70)。 1517 | ![图71:TPDO的COB-ID结构](./CANopen_DS301_CN_image/71.png) 1518 | 图71:TPDO的COB-ID结构 1519 |
表70:TPDO的COB-ID描述 1520 | 1521 | |**位(S)**|**值**|**描述**| 1522 | |---|---|---| 1523 | |valid|0b
1b|PDO存在/有效
PDO不存/无效| 1524 | |RTR|0b
1b|此PDO允许RTR
此PDO不允许RTR| 1525 | |frame|0b
1b|11位CAN-ID有效(标准帧)
29位CAN-ID有效(扩展帧)| 1526 | |29位CAN-ID|x|29位CAN-ID扩展帧| 1527 | |11位CAN-ID|x|11位CAN-ID标准帧| 1528 | valid(位31)允许设定在NMT运行态哪些TPDO可用。PDOs可以配置但不使用,清除该位即可。对于支持4个TPDOs 的CANopen设备,该功能是必要的,因为每个CANopen设备前四个RPDO是带有默认CAN-ID的通用预定义连接集。仅支持标准帧的CANopen设备企图置位29(frame)为1b将得到SDO中止响应(中止代码:0609 0030h)。当该对象存在并有效(位 31 = 0b)时,位0至29禁止更改。如果设备支持使能(位31=0b)和禁止(bit31 = 1b)TPDO操作,对位0至30更改将返回SDO中止传输应答(中止代码:0609 0030h 或 0800 000h)。 1529 | 如果CANopen设备使用设备协议,一定要支持通用预定义连接集(见表71)。 1530 |
表71:TPDO通用预定义连接集 1531 | 1532 | |**索引**|**默认值**| 1533 | |---|---| 1534 | |1800h|CAN-ID:180h + Node-ID
frame:0b
RTR:协议或制造商指定
valid:协议或制造商指定| 1535 | |1801h|CAN-ID:280h + Node-ID
frame:0b
RTR:协议或制造商指定
valid:协议或制造商指定| 1536 | |1802h|CAN-ID:380h + Node-ID
frame:0b
RTR:协议或制造商指定
valid:协议或制造商指定| 1537 | |1803h|CAN-ID:480h + Node-ID
frame:0b
RTR:协议或制造商指定
valid:协议或制造商指定| 1538 | |1804h到19FFh|CAN-ID:协议或制造商指定(见7.3.5)
frame:协议或制造商指定
RTR:协议或制造商指定
valid:1b或应用协议定义| 1539 | 如果CANopen设备使用应用协议,则应遵守应用协议的预定义连接集。 1540 | 子索引02h定义了TPDO的发送性质(见表72)。试图更改其值为任何不支持的传输类型将应答SDO中止(中止代码:0609 0030h)。 1541 |
表72:TPDO类型描述 1542 | 1543 | |**值**|**描述**| 1544 | |---|---| 1545 | |00h|同步(非周期)| 1546 | |01h|同步(每个SYNC一周期)| 1547 | |02h|同步(每2ndSYNC一周期)| 1548 | |03h|同步(每3rdSYNC一周期)| 1549 | |04h|同步(每4thSYNC一周期)| 1550 | |:::::|: : : : :| 1551 | |F0h|同步(每240thSYNC一周期)| 1552 | |F1h|保留| 1553 | |:::::|: : : : :| 1554 | |FBh|保留| 1555 | |FCh|仅RTR(同步)| 1556 | |FDh|仅RTR(事件驱动)| 1557 | |FEh|事件驱动(制造商指定)| 1558 | |FFh|事件驱动(设备协议和应用协议指定)| 1559 | * 同步意味着该PDO 在SYNC后发送。CANopen设备在收到SYNC后开始数据采样(参见图72)。如果是非周期方式,CANopen设备在内部事件给定并且紧接着的一次SYNC后开始采样,随后发送PDO。如果是周期方式,每个SYNC、2ndSYNC、3rdSYNC等(由给定参数值决定)启动一次采样,发送一次PDO。 1560 | * 仅RTR指PDO 由远程RTR触发发送。如果是同步方式,CANopen设备每个SYNC接收后开始采样,然后缓冲进PDO(参见图72)。如果是事件驱动方式,CANopen 设备在收到RTR请求后开始采样并直接生成PDO发送。 1561 | * 事件驱动的方式指PDO的发送由CANopen设备任意时刻发生的内部事件触发。事件的定义不在本文范围,可由设备协议或应用协议规定。 1562 | 1563 | ![图72:总线同步和采样](./CANopen_DS301_CN_image/72.png) 1564 | 图72:总线同步和采样 1565 | 1566 | 子索引03h为抑制时间。如果传输类型设置为FEh和FFh,它就是最小的PDO传输间隔。该值单位100$$\mu$$s。值为0将禁用抑制时间。PDO存在(子索引01h位31设为0b)该值不应被更改。 1567 | 子索引04h保留。它不应被执行,在这种情况下读取或写入将导致SDO中止应答(中止代码:0609 0011h)。 1568 | 1569 | 子索引05h包含事件定时器。如果传输类型设置为FEh和FFh,该值为最大PDO传输时间间隔。该值单位ms。值为0将禁用事件定时器。 1570 | 子索引06h为SYNC起始值。SYNC起始值为 0表示该PDO不处理SYNC帧的计数。SYNC起始值为1至240表示该PDO处理SYNC帧的计数。如果SYNC消息计数器未使能(见7.5.2.22),子索引 06h应被忽略。SYNC帧的计数器值等于SYNC起始值时,视为收到第一帧SYNC。当PDO存在(子索引01h位31设为0b)该值不应更改。 1571 | 注意 如果CANopen 设备进入NMT运行态,而检测到SYNC计数器值大于SYNC起始值,CANopen 设备必须等待下一轮正确的同步计数器值。 1572 | **对象描述** 1573 | 1574 | |索引|1800h~19FFh| 1575 | |---|---| 1576 | |名称|TPDO的通信参数| 1577 | |对象代码|RECORD| 1578 | |数据类型|PDO通信参数记录| 1579 | |类别|有条件的
强制,如果对应TPDO被支持| 1580 | **条目说明** 1581 | 1582 | |子索引|00h| 1583 | |---|---| 1584 | |描述|子索引数| 1585 | |条目类别|强制| 1586 | |访问权限|const| 1587 | |PDO映射|否| 1588 | |取值范围|02h至05h| 1589 | 1590 | |子索引|01h| 1591 | |---|---| 1592 | |描述|TPDO使用的COB-ID| 1593 | |条目类别|强制| 1594 | |访问权限|rw
const,如果COB-ID不可更改| 1595 | |PDO映射|否| 1596 | |取值范围|请参阅*值定义*| 1597 | |默认值|请参阅*值定义*| 1598 | 1599 | |子索引|02h| 1600 | |---|---| 1601 | |描述|传输类型| 1602 | |条目类别|强制| 1603 | |访问权限|rw
const,如果传输类型是不可更改的| 1604 | |PDO映射|否| 1605 | |取值范围|请参阅*值定义*| 1606 | |默认值|协议或制造商指定| 1607 | 1608 | |子索引|03h| 1609 | |---|---| 1610 | |描述|抑制时间| 1611 | |条目类别|可选| 1612 | |访问权限|rw
const,如果抑制时间不可更改的| 1613 | |PDO映射|否| 1614 | |取值范围|请参阅*值定义*| 1615 | |默认值|协议或制造商指定| 1616 | 1617 | |子索引|04h| 1618 | |---|---| 1619 | |描述|保留| 1620 | |条目类别|可选| 1621 | |访问权限|rw| 1622 | |PDO映射|否| 1623 | |取值范围|UNSIGNED8| 1624 | |默认值|制造商指定| 1625 | 1626 | |子索引|05h| 1627 | |---|---| 1628 | |描述|事件定时器| 1629 | |条目类别|可选| 1630 | |访问权限|rw
const,如果事件定时器不可更改| 1631 | |PDO映射|否| 1632 | |取值范围|请参阅值定义| 1633 | |默认值|协议或制造商指定| 1634 | 1635 | |子索引|06h| 1636 | |---|---| 1637 | |描述|同步起始值| 1638 | |条目类别|可选| 1639 | |访问权限|rw
const,如果同步起始值不可更改| 1640 | |PDO映射|否| 1641 | |取值范围|UNSIGNED8| 1642 | |默认值|协议或制造商指定| 1643 | ####7.5.2.38 **对象1A00h~1BFFh:TPDO映射参数** 1644 | 此对象包含CANopen 设备接收PDOs的映射参数。 1645 | **值定义** 1646 | 子索引00h包含有效对象条目映射记录或指定值(见表73),例如,如果支持MPDO。有效的对象条目数须为该应用程序对象相应TPDO应发送的数目。 1647 | 1648 |
表73:TPDO映射值 1649 | 1650 | |**值**|**描述**| 1651 | |---|---| 1652 | |00h|映射已禁用| 1653 | |01h|子索引01h有效| 1654 | |02h|子索引01h和02h有效| 1655 | |03h|子索引从01h到03h有效| 1656 | |04h|子索引从01h到04h有效| 1657 | |: : : : :|: : : : :| 1658 | |40h|子索引从01h到40h有效| 1659 | |41h|保留的| 1660 | |: : : : :|: : : : :| 1661 | |FDh|保留的| 1662 | |FEh|SAM-MPDO| 1663 | |FFh|DAM-MPDO| 1664 | 子索引从 01h到40h包含应用对象映射信息。对象描述了PDO数据内容对应的索引、子索引和长度(见图 73和图74)。长度为数据位长度,用于验证映射。 1665 | ![图73:TPDO映射结构](./CANopen_DS301_CN_image/73.png) 1666 | 图73:TPDO映射结构 1667 | 试图更改其值在对象字典中没有对应对象,将返回SDO中止应答。其不对应情况包括映射(索引和子索引)不存在,数据长度不一致,PDO长度异常等。索引和子索引需引用简单的数据类型(参见表 44)所谓的伪映射。如果没有相应的对象可用,则根据TPDO填充RPDO,以匹配其长度。 1668 | 下面的动作将导致重映射,可能发生于NMT配置和运行态,如果支持: 1669 | 1670 | 1. 通过设置RPDO通信参数子索引01h位valid为1b销毁TPDO。 1671 | 2. 通过设置子索引00h至00h禁用映射。 1672 | 3. 通过相应子索引修改映射值。 1673 | 4. 通过设置子索引00h为映射对象数来使能映射。 1674 | 5. 通过设置RPDO通信参数子索引01h位valid为0b创建TPDO。 1675 | 1676 | 如果在第3步的CANopen设备检测到索引和子索引不存在或不允许被映射将响应SDO中止传输(中止代码:0602 0000h 或0604 0041h) 。 1677 | 如果在第4步的CANopen设备检测到TPDO映射不可用或无效,CANopen设备响应SDO中止传输(中止代码:0602 0000h或0604 0042h)。 1678 | ![图74:TPDO映射规则](./CANopen_DS301_CN_image/74.png) 1679 | 图74:TPDO映射规则 1680 | **对象描述** 1681 | 1682 | |索引|1A00h~1BFFh| 1683 | |---|---| 1684 | |名称|TPD 映射| 1685 | |对象类型|RECORD| 1686 | |数据类型|PDO 映射参数记录| 1687 | |类别|条件的
强制,如果支持对应PDO| 1688 | **条目说明** 1689 | 1690 | |子索引|00h| 1691 | |---|---| 1692 | |描述|TPDO映射对像数| 1693 | |条目类别|强制| 1694 | |访问权限|rw
const,如果PDO映射是不可更改的| 1695 | |PDO映射|否| 1696 | |取值范围|请参阅*值定义*| 1697 | |默认值|协议或制造商指定| 1698 | 1699 | |子索引|01h| 1700 | |---|---| 1701 | |描述|应用对象1st| 1702 | |条目类别|强制| 1703 | |访问权限|rw
const,如果映射条目不可更改| 1704 | |PDO映射|否| 1705 | |取值范围|请参阅值定义| 1706 | |默认值|协议或制造商指定| 1707 | 1708 | |子索引|02h~40h| 1709 | |---|---| 1710 | |描述|第2nd到64th应用程序对象| 1711 | |条目类别|可选| 1712 | |访问权限|rw
const,如果映射条目不可更改的| 1713 | |PDO映射|否| 1714 | |取值范围|请参阅值定义| 1715 | |默认值|协议或制造商指定| 1716 | 1717 | ####7.5.2.39 **对象1FA0h~1FCFh:对像扫描仪列表** 1718 | SAM-MPDO生产者使用该对象扫描列表配置,确定发送哪些对象。 1719 | **值定义** 1720 | 每个对象条目说明了一个MPDO通信对象。通过块大小参数可以描述连续的子索引。 1721 | 对象条目数为0表示为配置。 1722 | ![图75:对象扫描列表对像入口](./CANopen_DS301_CN_image/75.png) 1723 | 图75:对象扫描列表对像入口 1724 | **对象描述** 1725 | 1726 | |索引|1FA0h~1FCFh| 1727 | |---|---| 1728 | |名称|对像扫描列表| 1729 | |对象代码|ARRAY| 1730 | |数据类型|UNSIGNED32| 1731 | |类别|可选| 1732 | **条目说明** 1733 | 1734 | |子索引|00h| 1735 | |---|---| 1736 | |描述|子索引数| 1737 | |条目类别|强制| 1738 | |访问权限|const| 1739 | |PDO映射|否| 1740 | |取值范围|01htoFEh| 1741 | |默认值|协议或制造商指定| 1742 | 1743 | |子索引|01h| 1744 | |---|---| 1745 | |描述|扫描对像1| 1746 | |条目类别|强制| 1747 | |访问权限|rw
ro或const, 如果扫描的条目是不可更改的| 1748 | |PDO映射|否| 1749 | |取值范围|请参阅值定义| 1750 | |默认值|协议或制造商指定| 1751 | 1752 | |子索引|02htoFEh| 1753 | |---|---| 1754 | |描述|扫描对像2到254| 1755 | |条目类别|可选| 1756 | |访问权限|rw
ro或const, 如果扫描的条目是不可更改的| 1757 | |PDO映射|否| 1758 | |取值范围|请参阅值定义| 1759 | |默认值|协议或制造商指定| 1760 | ####7.5.2.40 **对象1FD0h~1FFFh:对象分配列表** 1761 | SAM-MPDO消费者使用该对像作为远程生产者和本地对像字典之间的交叉引用。 1762 | **值定义** 1763 | ![图76:对象分配表条目](./CANopen_DS301_CN_image/76.png) 1764 | 图76:对象分配表条目 1765 | 1766 | 每个对象条目说明了MPDO接收的数据如何转移到本地对象字典。如果标志域值为0,生产者的node-ID,生产者索引和子索引条目匹配,数据就会写入条目索引和子索引指向的本地字典。 1767 | 参数块的大小描述了连续的子索引数。例如:如果发送方子索引1-9对应于接收方11-19, 其定义范围为 1768 | 发送方子索引 = 1 1769 | 本地子索引 = 11 1770 | 块大小 = 9 1771 | 对象条目值为 0表示未配置。 1772 | **对象描述** 1773 | 1774 | |索引|1FD0h~1FFFh| 1775 | |---|---| 1776 | |名称|对象分配列表| 1777 | |对象代码|ARRAY| 1778 | |数据类型|UNSIGNED64| 1779 | |类别|可选| 1780 | 1781 | **条目说明** 1782 | 1783 | |子索引|00h| 1784 | |---|---| 1785 | |描述|子索引数| 1786 | |条目类别|强制| 1787 | |访问权限|const| 1788 | |PDO映射|否| 1789 | |取值范围|01htoFEh| 1790 | |默认值|协议或制造商指定| 1791 | 1792 | |子索引|01h| 1793 | |---|---| 1794 | |描述|分配单元1| 1795 | |条目类别|强制| 1796 | |访问权限|rw
ro或const,如果分配项不可更改| 1797 | |PDO映射|否| 1798 | |取值范围|UNSIGNED64| 1799 | |默认值|协议或制造商指定| 1800 | 1801 | |子索引|02htoFEh| 1802 | |---|---| 1803 | |描述|分配单元2到254| 1804 | |条目类别|可选| 1805 | |访问权限|rw
ro或const,如果分配项不可更改| 1806 | |PDO映射|否| 1807 | |取值范围|UNSIGNED64| 1808 | |默认值|协议或制造商指定| 1809 | 1810 | 1811 | -------------------------------------------------------------------------------- /chapter7.md: -------------------------------------------------------------------------------- 1 | #7 **应用层** 2 | 3 | 4 | -------------------------------------------------------------------------------- /chapter8.md: -------------------------------------------------------------------------------- 1 | # **附件A(更多信息)** 2 | ##**应用建议** 3 | 应用该协议,需要遵循以下规则以保证互操作性。这些规则包括下列方面: 4 | ##**1 无效COB’s** 5 | 如果一个COB的COB-ID遵守协议规范,但根据协议规范它包含无效的参数值,那么它就是无效的。这可能由于低层的错误或应用错误造成,无效COB’s需由上层应用处理而不在本文范围,而无效COB应被协议栈忽略。 6 | ##**2 Time-out's** 7 | 由于COB’s可能被忽略,应答确认可能永远也不能到达。要解决这种问题,就需要在一定的时间后通知用户(time-out)。超时并不算对服务的确认。超时表示该服务尚未完成。由应用程序应该处理这种状况。 超时时间由具体应用指定,因而不属于本规范的范围。然而,推荐具体应用能够提供修改超时时间的工具以满足要求。 8 | ##**3 PDO传输类型 0、254、255** 9 | 如果在相应协议中未特别规定,传输类型254和255的PDOs在设备进入运行态后直接发送,而类型 0还要收到一条Sync。 10 | ##**4 对象字典通信对象总览** 11 | 略 12 | 13 | --------------------------------------------------------------------------------