『7x24小时有问必答』
  

CANopenEditor 从新建工程到导出 EDS / OD.c / OD.h

从新建工程开始

先新建空工程

执行:
File -> New
此时左侧显示  New Product,Object Dictionary 里还没有完整的 CiA 301 通信对象。不要直接在空工程里逐个手写  0x10000x10180x12000x18000x1A00  等标准对象,容易漏子索引、数据类型、访问权限和 CANopenNode 导出属性。

插入 DS301 profile

执行:
Insert Profile -> DS301_profile.xpd
这里的含义是:
项目
含义
DS301_profile.xpd
CiA 301 通信对象 profile,提供标准通信对象候选项
DS301_profile_old.xpd
旧版本 profile,除非兼容旧工程,否则不优先使用
DS401_profile.xpd
I/O 类设备 profile,只有做对应设备类型时再插入
DSP302-NMTMaster.xpd
NMT Master 相关 profile,只有设备要作为管理节点时再插入
这一步仍然是“从新建开始”:工程先通过  File -> New  创建,再把 profile 中的标准对象插入当前空工程;不要用  File -> Open  打开现成模板工程。

File 菜单功能

菜单项
作用
建议用法
New
新建空工程
第一入口
Open
打开已有工程文件
只用于继续编辑已有  .xdd  /  .xpd
Save Project
保存当前工程
修改后及时保存
Save Project As...
另存为新工程
新产品第一次保存时使用
Open Network XML
打开网络级 XML
多节点、多网络工程才用
Save Network XML
保存网络级 XML
多节点、多网络工程才用
Recent Files
最近文件
快速打开历史工程
Export...
导出 EDS / XDD / 文档等
导出给主站或配置工具的 EDS
Export CanOpenNode...
导出 CANopenNode C 文件
生成  OD.c  /  OD.h
Save All
保存全部打开文件
修改多个 profile / 工程时使用
Close file
关闭当前文件
切换工程时使用
Quit
退出工具
退出前先保存

Reports 菜单功能

菜单项
作用
使用场景
Documentation
生成对象字典相关文档
需要把当前 OD 配置导出给同事检查时使用
Network PDO
生成网络 PDO 视图/报告
检查多个节点的 PDO COB-ID 和映射关系时使用
普通单节点学习工程可以先不用 Reports。配置完成后,再用  Documentation  导出说明文档,或用  Network PDO  检查 PDO 通道是否冲突。

Preferences 里选择导出器

执行:
Tools -> Preferences
重点字段:
字段
作用
建议
Selected exporter
选择 CANopenNode C 文件导出格式
新工程优先选  CANOPENNODE_V4
Show Generic Warnings
显示通用警告
保持勾选
Show Rename Warnings
显示重命名警告
保持勾选
Show Build Warnings
显示生成警告
保持勾选
Show String Warnings
显示字符串警告
保持勾选
Show Struct Warnings
显示结构体警告
保持勾选
不建议关闭这些警告。关闭后可能会漏掉对象未启用、名称冲突、字符串长度不足、结构体生成异常等问题。

Device Info 页面怎么填

Device Info 区域

字段
作用
建议配置
不建议配置
Product name
产品名称,写入设备描述文件
填清晰的产品名,例如  Demo IO Slave
不要长期保持  New Product
Product ID
产品编号 / 产品代码
使用公司内部产品码,通常与  0x1018:02  逻辑一致
不要每次随意改
Vendor name
厂商名称
填公司或项目名称
不要空着交付给主站侧
Vendor ID
厂商 ID
有正式 CiA Vendor-ID 时填正式值;学习阶段可填测试值
量产设备不要使用  0x00000000

File Info 区域

字段
作用
建议配置
不建议配置
File version
EDS/XDD 文件版本
每次发布递增
不要与固件版本混用
Description
文件说明
写设备用途和关键能力
不要写过长实现细节
Creation Date/Time
创建时间
工具自动生成
不要手动伪造
Created By
创建者
可填团队或人员
不影响 OD 生成
Modification Date/Time
修改时间
工具自动维护
不建议手动改
Modified by
修改者
可填维护者
不影响 OD 生成

Project Info 区域

字段
作用
说明
Project file (version)
当前工程文件
保存  .xdd  后显示路径/版本
XDD v1.1 file - stripped
裁剪后的 XDD
通常由工具生成,不手工改
EDS file
导出的 EDS 路径
File -> Export...
  后出现
DCF file
设备配置文件路径
给具体节点配置实际参数时使用
CANopenNode file (ver)
导出的 CANopenNode 文件路径/版本
File -> Export CanOpenNode...
  后出现
Documentation file
导出的说明文档路径
Reports -> Documentation
  后出现

DCF 是什么

DCF  是  Device Configuration File
区别:
文件
用途
EDS
描述设备“支持什么对象、默认值是什么”
DCF
描述某个具体节点“实际配置成什么值”
例如同一型号设备有 3 台:
节点
Node-ID
TPDO1 COB-ID
心跳时间
设备 A
1
0x1811000 ms
设备 B
2
0x1821000 ms
设备 C
3
0x183500 ms
这类“具体节点实际值”适合放在 DCF 或网络配置里。学习生成  OD.c  /  OD.h  时,可以暂时不使用 DCF。

Baudrates 区域

字段
作用
建议
10 kbps ~ 1000 kbps
声明设备支持的 CAN bit rate
勾选固件实际支持的速率
auto
声明支持自动波特率
固件没有实现自动检测时不要勾选
只勾选固件实际能配置和验证过的速率。EDS 写支持但固件不支持,会造成主站配置后无法通信。

General and Master Features 区域

字段
作用
建议
Granularity
PDO 映射粒度,常见为 8 bit
普通经典 CANopen 保持  8
RPDO count
当前 RPDO 数量
由对象字典 / PDO 页面联动,不手填
TPDO count
当前 TPDO 数量
由对象字典 / PDO 页面联动,不手填
LSS Slave
设备支持被 LSS 配置 Node-ID / bit rate
固件实现 LSS slave 时再勾选
LSS Master
设备支持作为 LSS 配置主节点
普通从站不要勾选
Node guarding Slave
支持被主站 Node guarding
新项目通常优先用 heartbeat
Node guarding Master
支持监控其他节点
只有设备作为管理节点时勾选
No of monitored node
被监控节点数量
未启用相关 master 功能时灰色是正常的
No of monitored node  灰色通常不是异常。它不是普通手填对象字段,而是受  Node guarding Master  或监控节点配置联动。普通从站不需要改。若要做节点监控,应先明确使用 heartbeat consumer 还是 node guarding master,再去对象字典中配置对应对象。

Device commissioning 区域

字段
作用
建议
Concrete node ID
具体节点 ID
做 DCF / 网络配置时填写,普通 EDS 可先保持 0
Node name
具体节点名称
多节点网络中用于区分设备
Baudrate
具体节点 bit rate
DCF 实际配置值
Net number
网络编号
多条 CANopen 网络时用于区分
Net name
网络名称
多条 CANopen 网络时用于标识
CANopen Manager
标识该节点是否为管理节点
普通从站不要勾选
LSS Serial no
LSS 识别用序列号
不使用 LSS 时可先不管
“多网络配置”指一个工程同时描述多条 CANopen 总线,例如  CANopen_NET_1  和  CANopen_NET_2。普通单 CAN 总线工程不需要配置  Net number  /  Net name

Object Dictionary 页面怎么看

对象字典按索引范围分区:
区域
索引范围
作用
Communication Specific Parameters
0x1000~0x1FFF
CANopen 通信对象,例如 SDO、PDO、heartbeat、identity
Manufacturer Specific Parameters
0x2000~0x5FFF
厂商自定义对象,建议放应用过程变量
Device Profile Specific Parameters
0x6000~0x9FFF
设备 profile 规定的对象
普通自定义变量优先放到  0x2000~0x5FFF,例如:
0x2100:00   status_value         UNSIGNED16   ro   TPDO

0x2101:00   command_value       UNSIGNED16   rw   RPDO

0x2102:00   measured_value      INTEGER32    ro   TPDO

0x2103:00   setpoint_value      INTEGER32    rw   RPDO

Object settings 每个字段的作用

字段
可选项 / 格式
作用
建议配置
不允许或不建议配置
Index0x0000~0xFFFF
对象字典索引
标准对象按 CiA 301;自定义对象用  0x2000~0x5FFF
不要占用保留区;不要和标准对象冲突
Sub Index0x00~0xFF
子索引
VAR
  通常只有  0x00ARRAY/RECORD  需要多个子索引
不要遗漏  0x00  最大子索引
Name
字符串
对象名,影响生成代码命名
使用英文、无歧义、少空格
不要用重复名、特殊符号、中文变量名
Denotation
字符串
标识/简称
可空
不要依赖它生成关键逻辑
Description
字符串
描述对象用途
对应用对象写清单位和方向
不要把实现代码细节写进去
Object TypeVAR
  /  ARRAY  /  RECORD  / 其他类型定义项
决定对象结构
单变量用  VAR;同类型数组用  ARRAY;多字段记录用  RECORD
不要把多字段对象硬做成多个无关  VAR,也不要把单变量做成  RECORD
Data TypeBOOLEAN
INTEGER8/16/32UNSIGNED8/16/32VISIBLE_STRING  等
决定数据长度和编码
与固件变量类型严格一致
不要把 16 位变量配置成 32 位;不要把字符串当整数
Access SDOno
  /  ro  /  wo  /  rw
SDO 访问权限
状态量  ro;命令/配置量  rw;内部量  no
不要把只读状态配成  rw;不要把必须配置的对象设成  no
Access PDOno
  /  t  /  r  /  tr
PDO 映射方向
发送到总线的状态量用  t;从总线接收的命令量用  r
不要把 SDO 通信参数映射进 PDO;不要把同一控制量随意设  tr
Access SRDOno
  /  tx  /  rx  /  trx
安全相关数据对象访问
不使用 SRDO 时保持  no
未实现安全通信时不要启用
Default value
十进制或十六进制
默认值,生成到 OD 数据
配置对象填合理默认值
不要填超出数据类型范围的值
HighLimit
数值
上限
需要 EDS 限制时填写
不要与固件实际范围矛盾
LowLimit
数值
下限
需要 EDS 限制时填写
不要上限小于下限
Actual Value
数值
具体配置值,偏 DCF
做具体节点配置时使用
不要把它当成通用默认值
String Len Min
数值
字符串最小长度
VISIBLE_STRING
  需要保留空间时填写
非字符串对象不要乱填
Count Label
字符串,例如  NMTSDO_SRVRPDOTPDO
CANopenNode 导出计数宏
通信对象按类型设置;普通自定义对象可留空或统一标签
不要给不同类别乱用同一标签
Storage GroupRAM
  /  PERSIST_COMM  / 其他工程定义组
决定变量所属存储组
运行时变量用  RAM;需要保存的通信参数用  PERSIST_COMM
不需要掉电保存的实时变量不要放持久组
Enabled
勾选 / 不勾选
是否参与导出
要生成到 EDS /  OD.c  /  OD.h  的对象必须勾选
不要以为列表里存在就一定会导出
Save Changes
按钮
保存当前对象修改
修改字段后点击
不保存就切换页面可能丢修改
Autosave changes
勾选 / 不勾选
自动保存字段变化
熟悉后可打开
初学阶段建议手动保存,便于确认修改点

Object Type 怎么选

Object Type
用途
示例
VAR
单个变量
0x2100:00 status_value
ARRAY
多个同类型子项
多个相同类型的通道值
RECORD
多个不同含义子项
0x1018 Identity
、PDO 通信参数
DOMAIN
大块数据
文件、固件块、EDS 存储等
DEFTYPE
  /  DEFSTRUCT
类型定义
profile 内部类型定义,通常不手动新建

Data Type 常用选择

Data Type
长度
C 侧常见类型
用途
BOOLEAN
1 bit / 工具按类型处理
bool_t
开关量
INTEGER8
8 bit
int8_t
有符号 8 位量
INTEGER16
16 bit
int16_t
有符号 16 位量
INTEGER32
32 bit
int32_t
有符号 32 位量
UNSIGNED8
8 bit
uint8_t
状态、枚举、小计数
UNSIGNED16
16 bit
uint16_t
状态字、配置值
UNSIGNED32
32 bit
uint32_t
计数、时间、COB-ID、映射项
VISIBLE_STRING
可变
char[]
设备名、版本号
DOMAIN
可变
自定义缓冲区
大块数据传输

Access PDO 的方向

Access PDO
含义
出现位置
no
不允许 PDO 映射
配置对象、SDO 参数、内部对象
t
允许映射到 TPDO
设备发送到总线的数据
r
允许映射到 RPDO
设备从总线接收的数据
tr
同时允许 TPDO/RPDO
少数双向变量,谨慎使用

为什么有灰色对象或灰色字段

灰色一般表示:
1. profile 里有这个标准对象,但当前没有启用;
2. 当前对象由其他页面或 profile 管理;
3. 当前字段由对象类型、功能勾选或子对象数量联动;
4. 该字段只在 DCF / 网络配置场景可编辑;
5. 当前对象没有勾选  Enabled,不会导出到 CANopenNode 文件。
判断一个对象是否真正导出,不要只看颜色,按下面顺序检查:
对象是否插入当前 OD

      ↓

Enabled 是否勾选

      ↓

Access / Data Type / Storage Group 是否正确

      ↓

导出后 OD.c / OD.h 里是否存在该对象

      ↓

EDS 重新打开后是否存在该对象

Insert Profile 对象列表怎么选

插入 profile 后会出现对象选择列表。
含义
Insert
是否把该对象插入当前工程
Original Object
profile 中的原始对象
Offset 0
插入到当前工程后的目标索引;Offset 为 0 时通常与原索引一致
不要一次性把所有对象都插入。初学普通从站建议先插入最小集合:
对象
是否建议插入
原因
0x1000
Device type,基础对象
0x1001
Error register,基础错误状态
0x1003
可选
Pre-defined error field,需要错误历史时启用
0x1017
Producer heartbeat time,建议使用 heartbeat
0x1018
Identity,设备身份对象
0x1200
SDO server parameter,通常需要 SDO
0x1400
需要 RPDO 时插入
RPDO1 通信参数
0x1600
需要 RPDO 时插入
RPDO1 映射参数
0x1800
需要 TPDO 时插入
TPDO1 通信参数
0x1A00
需要 TPDO 时插入
TPDO1 映射参数

插入对象列表中每个 index 的作用和配置边界

Index
名称
作用
怎么配置
不允许或不建议怎么配置
0x1000
Device type
设备类型
UNSIGNED32
ro,按设备类别填写
不要设为  rw;不要填随机值
0x1001
Error register
标准错误寄存器
UNSIGNED8
ro、可 TPDO 映射
不要让主站通过 SDO 写
0x1002
Manufacturer status register
厂商状态寄存器
有厂商状态定义时启用,UNSIGNED32ro
没定义状态位时不要启用凑数
0x1003
Pre-defined error field
错误历史
需要 EMCY/error history 时启用,ARRAY
不要把它映射到 PDO;不要手动乱写历史
0x1005
COB-ID SYNC message
SYNC COB-ID
需要同步通信时启用,默认常见  0x80
不使用 SYNC 时不要随意启用生产者
0x1006
Communication cycle period
SYNC 周期
使用同步周期时配置,单位按规范
异步 PDO 调试阶段可不启用
0x1007
Synchronous window length
同步窗口
严格同步应用才配置
不理解同步窗口时不要启用
0x1008
Manufacturer device name
设备名
VISIBLE_STRING
const/ro
不要放运行时变化值
0x1009
Manufacturer hardware version
硬件版本
VISIBLE_STRING
const/ro
不要每次上电变化
0x100A
Manufacturer software version
软件版本
VISIBLE_STRING
const/ro
不要与 EDS file version 混淆
0x100C
Guard time
Node guarding 时间
只有使用 Node guarding 时配置
新项目若只用 heartbeat,不要启用
0x100D
Life time factor
Node guarding 生命因子
与  0x100C  配套
不要单独启用
0x1010
Store parameters
保存参数
支持 SDO 保存参数时启用
固件未实现保存逻辑时不要启用
0x1011
Restore default parameters
恢复默认参数
支持恢复默认参数时启用
固件未实现恢复逻辑时不要启用
0x1012
COB-ID time stamp object
TIME 对象 COB-ID
使用 TIME 对象时启用
普通从站不需要
0x1013
High resolution time stamp
高分辨率时间戳
需要时间戳时启用
不要当普通计数器使用
0x1014
COB-ID EMCY
EMCY COB-ID
使用 Emergency 时启用,常见为  0x80 + Node-ID
不要与其他 CAN-ID 冲突
0x1015
Inhibit time EMCY
EMCY 抑制时间
EMCY 可能频繁触发时配置
不要设过小导致总线刷屏
0x1016
Consumer heartbeat time
消费者心跳超时
设备需要监控其他节点时启用
普通只被监控的从站可不启用
0x1017
Producer heartbeat time
生产者心跳周期
建议启用,例如  1000 ms
不要设为 0 后又期望设备发心跳
0x1018
Identity
设备身份
配  Vendor-ID/Product code/Revision/Serial
量产设备不要所有序列号相同
0x1019
Synchronous counter overflow value
SYNC 计数溢出值
使用带计数 SYNC 时配置
不使用 SYNC 计数时不要启用
0x1020
Verify configuration
配置校验
需要校验配置一致性时启用
固件不检查时不要写成必需能力
0x1021
Store EDS
存储 EDS
设备支持从对象字典读取 EDS 时启用
普通嵌入式从站通常不启用
0x1022
Store format
存储格式
与  0x1021  配套
不要单独启用
0x1023
OS command
OS 命令
有命令通道时启用
普通设备不要开放无实现接口
0x1024
OS command mode
OS 命令模式
与  0x1023  配套
不要单独启用
0x1025
OS debugger interface
OS 调试接口
有调试协议时启用
不要在量产设备暴露无保护调试接口
0x1026
OS prompt
OS 提示符
与 OS 命令相关
普通从站不启用
0x1027
Module list
模块列表
模块化设备才启用
固定功能设备不要启用
0x1028
Emergency consumer object
EMCY 消费对象
需要接收其他节点 EMCY 时启用
普通从站通常不启用
0x1029
Error behavior object
错误行为
定义通信错误后的状态行为
未实现状态处理时不要启用
0x1200
SDO server parameter
SDO 服务器参数
普通从站通常启用 1 组
不要映射到 PDO
0x1201
SDO server parameter
第 2 组 SDO server
确实需要多个 SDO server 才启用
不要为了“多通道”随意启用
0x1280
SDO client parameter
SDO 客户端参数
设备要主动访问其他节点时启用
普通从站不要启用
0x1400
RPDO communication parameter
RPDO1 通信参数
需要接收 PDO 时启用
不要与 TPDO COB-ID 冲突
0x1401
RPDO communication parameter
RPDO2 通信参数
RPDO1 不够用再启用
不要空启用
0x1402
RPDO communication parameter
RPDO3 通信参数
需要第三组 RPDO 时启用
不要空启用
0x1403
RPDO communication parameter
RPDO4 通信参数
需要第四组 RPDO 时启用
不要空启用
0x1404
RPDO communication parameter
RPDO5 通信参数
超过 4 组时才启用
不要误以为必须启满
0x1600
RPDO mapping parameter
RPDO1 映射参数
与  0x1400  成对启用
不要映射只读对象
0x1601
RPDO mapping parameter
RPDO2 映射参数
与  0x1401  成对启用
不要超过 64 bit
0x1602
RPDO mapping parameter
RPDO3 映射参数
与  0x1402  成对启用
不要映射 SDO 参数
0x1603
RPDO mapping parameter
RPDO4 映射参数
与  0x1403  成对启用
不要留无效映射项
0x1604
RPDO mapping parameter
RPDO5 映射参数
与  0x1404  成对启用
不要只启映射不启通信参数
0x1800
TPDO communication parameter
TPDO1 通信参数
需要发送 PDO 时启用
不要与 RPDO COB-ID 冲突
0x1801
TPDO communication parameter
TPDO2 通信参数
TPDO1 不够用再启用
不要空启用
0x1802
TPDO communication parameter
TPDO3 通信参数
需要第三组 TPDO 时启用
不要误选为对象数据
0x1803
TPDO communication parameter
TPDO4 通信参数
需要第四组 TPDO 时启用
不要空启用
0x1804
TPDO communication parameter
TPDO5 通信参数
超过 4 组时才启用
不要误以为必须启满
0x1A00
TPDO mapping parameter
TPDO1 映射参数
与  0x1800  成对启用
不要映射写入型命令量
0x1A01
TPDO mapping parameter
TPDO2 映射参数
与  0x1801  成对启用
不要超过 64 bit
0x1A02
TPDO mapping parameter
TPDO3 映射参数
与  0x1802  成对启用
不要映射 SDO 参数
0x1A03
TPDO mapping parameter
TPDO4 映射参数
与  0x1803  成对启用
不要只启映射不启通信参数

TX PDO Mapping 页面干什么

TX PDO Mapping  配置“本节点发送到 CAN 总线的数据”。
页面分为三部分:
区域
作用
Available Objects for PDO
当前允许映射到 PDO 的对象列表
Communication parameters
当前选中的 TPDO 通信参数
底部字节表
当前 TPDO 的数据布局

TPDO 通道和对象的对应关系

TPDO 通道
通信参数
映射参数
常用预定义 CAN-ID 基址
TPDO1
0x18000x1A000x180 + Node-ID
TPDO2
0x18010x1A010x280 + Node-ID
TPDO3
0x18020x1A020x380 + Node-ID
TPDO4
0x18030x1A030x480 + Node-ID
底部  0xC00001800xC0000280  这类值表示 PDO 当前禁用,因为 bit31 为 1。
常见位含义:
含义
典型表现
bit31
PDO valid/invalid 控制位
1
  表示 invalid,PDO 禁用
bit30
RTR 控制位
1
  通常表示不允许 RTR
bit29
11-bit / 29-bit CAN-ID 控制
普通 CANopen 多用 11-bit
bit010 或 bit028
CAN-ID
具体报文标识符

Communication parameters 怎么填

字段
作用
初学建议
Communication
当前 TPDO 通信参数对象
TPDO1 为  0x1800
Mapping
当前 TPDO 映射参数对象
TPDO1 为  0x1A00
COB
TPDO 使用的 COB-ID / CAN-ID 信息
取消 invalid 后确认最终 CAN-ID 不冲突
Type
传输类型
调试可用  254  或  255;同步应用再用  1~240
Inhibit
抑制时间,限制最小发送间隔
调试可先  0,稳定后再设置
Event Timer
事件定时器,周期触发发送
调试可设  100  或  1000  ms,按工具单位确认
Sync start
同步起始值
非同步 PDO 保持  0
Invalid
是否禁用该 PDO
要启用 TPDO 时取消勾选
不建议:
• 不要让两个 PDO 使用相同 COB-ID。
• 不要把禁用的  0xC000xxxx  当成已经启用。
• 不要只改右侧字段但不点  Save
• 不要把 SDO 通信参数对象映射到 TPDO 数据区。

为什么不能直接选其他 Byte

CANopenEditor 的 PDO 映射不是随便点击 Byte0、Byte3、Byte7 填值。它按映射顺序连续打包:
0x1A00:01 -> 从 bit 0 开始

0x1A00:02 -> 接在上一项后面

0x1A00:03 -> 再继续往后排
对象长度决定占用多少 bit:
数据类型
位数
占用
UNSIGNED8
  /  INTEGER8
8 bit
1 byte
UNSIGNED16
  /  INTEGER16
16 bit
2 byte
UNSIGNED32
  /  INTEGER32
32 bit
4 byte
所以你不能直接跳到 Byte4。必须先放前面的对象,后面的空位才会继续出现。

TPDO 里可以放一个对象,也可以放多个对象

一个 TPDO 的总长度最大是 64 bit,也就是 8 byte。
只放一个对象:
0x1A00:00 = 1

0x1A00:01 = 0x21000010    # 0x2100:00, 16 bit
放多个对象:
0x1A00:00 = 3

0x1A00:01 = 0x21000010    # 0x2100:00, 16 bit

0x1A00:02 = 0x21010010    # 0x2101:00, 16 bit

0x1A00:03 = 0x21020020    # 0x2102:00, 32 bit
布局:
Byte
内容
Byte0~1
0x2100:00
Byte2~3
0x2101:00
Byte4~7
0x2102:00

COB-ID 不是用来选择 Byte

正确关系是:
CAN 帧 COB-ID

      ↓

识别这是 TPDO1 / TPDO2 / RPDO1 / RPDO2 哪个 PDO

      ↓

找到对应的 Mapping 对象,例如 0x1A00

      ↓

按 Mapping 解释 Data[0..7]
PDO 报文本身不携带对象  Index/SubIndex。接收方必须提前知道该 COB-ID 对应的映射规则。
错误理解:
PDO -> Index -> COB -> Byte
正确理解:
COB-ID -> PDO 通道 -> Mapping 对象 -> Byte 布局

不要把这些对象映射到 TPDO

PDO Mapping 页面下拉框里可能出现  0x12000x1280  等对象。这些是 SDO 通信参数,不是过程数据。
不建议映射:
对象
原因
0x1200
SDO server 参数,不是过程数据
0x1201
SDO server 参数,不是过程数据
0x1280
SDO client 参数,不是过程数据
0x1800~0x1804
TPDO 通信参数,不是过程数据本体
0x1A00~0x1A03
TPDO 映射参数,不是过程数据本体
推荐映射厂商自定义过程变量,例如:
对象
方向
示例含义
0x2100:00
TPDO
设备状态值
0x2101:00
TPDO
测量值
0x2102:00
TPDO
计数值
0x2200:00
RPDO
控制命令
0x2201:00
RPDO
目标值

配置一个通用 TPDO 示例

目标:TPDO1 周期发送 3 个厂商自定义状态量。

第一步:添加可 TPDO 映射对象

在  Object Dictionary -> Manufacturer Specific Parameters  中新增:
Index
Name
Object Type
Data Type
Access SDO
Access PDO
Default
Storage
0x2100status_valueVARUNSIGNED16rot0RAM
0x2101measured_valueVARUNSIGNED16rot0RAM
0x2102counter_valueVARUNSIGNED32rot0RAM
保存后,回到  TX PDO Mapping,这些对象应出现在  Available Objects for PDO  和下拉框中。

第二步:启用 TPDO1

选择底部第一行 TPDO1,然后设置:
字段
Communication0x1800
Mapping0x1A00
COB
按 Node-ID 确认最终值,不与其他 CAN-ID 冲突
Type254
  或  255
Inhibit
调试可先  0
Event Timer
调试可先  100  或  1000
Sync start0
Invalid
取消勾选
然后点  Save

第三步:配置 TPDO1 映射

按顺序选择:
0x2100/00/status_value         16 bit

0x2101/00/measured_value      16 bit

0x2102/00/counter_value       32 bit
总长度:
16 + 16 + 32 = 64 bit = 8 byte
等价对象字典:
0x1A00:00 = 3

0x1A00:01 = 0x21000010

0x1A00:02 = 0x21010010

0x1A00:03 = 0x21020020
PDO 数据布局:
Byte
内容
Byte0~1
0x2100:00 status_value
Byte2~3
0x2101:00 measured_value
Byte4~7
0x2102:00 counter_value

RX PDO Mapping 页面怎么用

RX PDO Mapping  配置“本节点从 CAN 总线接收的数据”。
RPDO 对象成对出现:
RPDO 通道
通信参数
映射参数
常用预定义 CAN-ID 基址
RPDO1
0x14000x16000x200 + Node-ID
RPDO2
0x14010x16010x300 + Node-ID
RPDO3
0x14020x16020x400 + Node-ID
RPDO4
0x14030x16030x500 + Node-ID
通用 RPDO 示例:
Index
Name
Data Type
Access SDO
Access PDO
0x2200control_valueUNSIGNED16rwr
0x2201target_valueINTEGER32rwr
0x2202mode_valueUNSIGNED8rwr
RPDO1 映射:
0x1600:00 = 3

0x1600:01 = 0x22000010

0x1600:02 = 0x22010020

0x1600:03 = 0x22020008
总长度:
16 + 32 + 8 = 56 bit
剩余 8 bit 可以留空,也可以用 Dummy 填充到 64 bit,取决于主站配置和固件接收处理。

Modules 页面干什么

Modules  页面用于描述模块化 CANopen 设备,不是用来配置 C 代码模块,也不是用来配置 PDO。
典型使用场景:
一个远程 I/O 耦合器

      ├── 插槽 1:数字输入模块

      ├── 插槽 2:数字输出模块

      ├── 插槽 3:模拟输入模块

      └── 插槽 4:温度采集模块
这种设备的对象字典可能会随模块组合变化,所以需要在 EDS/XDD 中描述支持哪些模块、每个模块有哪些对象。
字段含义:
字段
作用
Nr Supported Modules
支持的模块数量
List of modules
支持的模块列表
Index
模块编号
Name
模块名称
Version
模块版本
Revision
模块修订
OrderCode
订货号 / 料号
Module comments
模块说明
Module objects
模块关联的对象字典对象
普通固定功能从站可以保持:
Nr Supported Modules = 0
不需要配置 Modules 页面。

导出 EDS

执行:
File -> Export...
选择 EDS 输出格式,生成:
my_device.eds
EDS 交给主站、配置软件或测试工具使用。导出后建议重新用 CANopenEditor 打开 EDS 检查:
1.  0x10000x10010x1018  是否存在;
2.  0x1200  是否存在;
3. 启用的  0x1400/0x16000x1800/0x1A00  是否存在;
4. 厂商自定义对象是否存在;
5. PDO 映射总长度是否不超过 64 bit。

导出 CANopenNode 的 OD.c / OD.h

先确认导出器:
Tools -> Preferences -> Selected exporter -> CANOPENNODE_V4
然后执行:
File -> Export CanOpenNode...
输出通常包括:
OD.c

OD.h
如果工程设置了对象字典后缀,也可能生成带后缀的文件名。导出后要检查固件工程:
1.  OD.c  已加入编译;
2. include path 能找到  OD.h
3. 工程引用的 OD 名称与导出文件一致;
4.  OD_CNT_*  宏符合启用对象数量;
5. PDO 初始化数量与  0x1400/0x1600/0x1800/0x1A00  一致。

最小可用配置建议

普通从站学习工程可以从下面对象开始:
对象
用途
建议
0x1000
Device type
启用
0x1001
Error register
启用
0x1017
Producer heartbeat time
启用,便于主站监控
0x1018
Identity
启用
0x1200
SDO server parameter
启用
0x2100~0x21FF
厂商自定义状态量
按需添加,TPDO 方向
0x2200~0x22FF
厂商自定义控制量
按需添加,RPDO 方向
0x1800/0x1A00
TPDO1
需要周期发送状态时启用
0x1400/0x1600
RPDO1
需要接收控制命令时启用

常见错误和处理

现象
原因
处理
灰色字段不能改
受功能勾选或对象类型联动
先启用对应功能或对象
导出的  OD.c  没有对象
Enabled
  未勾选或对象未插入
勾选 Enabled 后重新导出
PDO 下拉框没有目标对象
对象没有设置 Access PDO
设置为  tr  或  tr
TPDO 不发送
Invalid
  仍勾选或 Event Timer 为 0
取消 Invalid,设置触发条件
只能选 Byte0,不能选 Byte4
PDO 映射按顺序连续排列
先放前面的对象,后续位置自动出现
主站无法解释 PDO 数据
主站 EDS/DCF 与实际 Mapping 不一致
重新导出 EDS 并同步主站配置
映射超过 64 bit
一个 PDO 超过 8 byte
拆到下一组 PDO
误选  0x1200  /  0x1280  到 PDO
把 SDO 参数当成过程数据
删除映射,改选过程变量

资料依据

• CANopenEditor 官方仓库说明:支持导入/导出 EDS、XDD,并导出 CANopenNode C 文件。
• CANopenNode 对象字典文档:说明 XDD/XPD/EDS/DCF 的关系,以及  CO_disabledCO_countLabelCO_storageGroup  等 CANopenNode 导出属性。
• CiA 301 V4.2.0:定义  0x1000~0x1FFF  通信对象、SDO 参数、PDO 通信参数、PDO 映射参数、Identity、heartbeat、EMCY 等对象范围和用途。
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码