简介:SV660C系列伺服应用手册-CANopen通讯篇是汇川技术官方发布的伺服驱动器应用资料,面向从事伺服驱动、运动控制、工业现场总线调试的电气工程师、设备维护人员及自动化相关专业学习者。手册在通用SV660P系列手册基础上,专门补充CANopen总线通信功能,从CANopen基于CAN总线的高可靠性、强实时性协议原理入手,逐步讲解SV660C驱动器的CANopen通讯功能、由伺服驱动器、控制器、感知器等节点组成通讯网络的实现方法,并结合机器人、伺服系统、运动控制等场景说明典型应用。内容还单独列出安全注意事项,包括防止电击、机械伤害以及符合IEC 60204等规范的使用要求,便于现场安全调试。资源包共包含1个PDF文件,大小约5.69MB,章节层次完整,包含产品信息、驱动器型号说明、综合性能参数、对象字典及通讯应用模块等,既可作为设备调试时的现场查阅手册,也适合系统学习SV660C的CANopen通讯应用。已有821人浏览学习该资源,是一份实用价值较高的官方技术资料。
1. 不是每台伺服都适合走CANopen:先认清SV660C的边界
拿到这本SV660C的CANopen通讯手册时,我先翻的不是接线图,而是版本变更记录。A04版比A00版多出来的东西,恰恰是现场最容易踩雷的地方——驱动器型号说明、6040h/605Ah/605Dh的描述改动、还有6083h/6084h的单位统一。这说明一件事:CANopen伺服手册不是拿来通读的,是拿来查的。这本书的核心内容可以概括成四件事:怎么配线、怎么用对象字典、怎么走SDO/PDO、怎么处理故障。适合谁?调试变频器或伺服多年的电气工程师、刚接触总线运动控制的上位机开发者,以及正在为「为什么我的轴动了但位置不对」苦恼的人。读完这本书能少走半年的弯路,前提是你得知道坑在哪。
2. 对象字典是总索引:读懂NMT、SDO、PDO的分工再去查手册
CANopen真正难的不是协议本身,而是它把一切都抽象成了对象字典里的地址。SV660C手册第3章把通信对象拆成了NMT、SDO、PDO、SYNC和EMCY五类,这五类服务对应着五种不同的使用场景。如果没搞清分工就直接上手,很容易出现「SDO刷参数刷半天、PDO发数据却一动不动」的困惑。
2.1 对象字典:把手册翻成一张地址表
对象字典(OD)是CANopen设备的「公共数据库」,每个条目都有一个16位索引,有些索引下还有子索引。SV660C的对象字典分两段:1000h段是CiA 402标准区,比如1000h是设备类型、1005h是同步对象COB-ID、1017h是心跳周期;2000h段是厂商自定义区,手册第6章的分配一览表从2000h电机参数一路排到2008h增益控制参数。
这个区分很重要。标准区的对象是所有CANopen主站都能识别的,但厂商区就未必了。比如2002h基本控制参数里的功能码,换一台其他品牌的伺服,索引和含义就对不上。我们做跨品牌替换时,第一步必然是把对方手册的对象字典一览表截图存档,按索引排序做成对照表,再开始配参数。
2.2 NMT:从站是睡是醒,由这四类命令决定
NMT(网络管理)是CANopen网络的「总开关」。主站通过NMT把节点从初始化状态切到预操作、操作或停止状态。这里有个新手最容易忽略的细节:节点上电后默认停在预操作状态,此时SDO能通,但PDO不发。必须由主站发送启动节点命令(NMT命令字0x01),把节点切到操作状态,PDO才开始跑。
NMT命令走的是11位ID中的0x000,属于广播帧,不带节点号。启动单个节点的命令是「01 节点号」,启动所有节点的命令是「01 00」。手册3.3.1里列了四类命令:启动、停止、进入预操作、复位节点。我经常在调试现场看到有人把「复位节点」和「复位通信」混用——复位节点会连带伺服驱动器重新初始化,电机使能都会掉,如果程序里没做延时等待,紧接着发控制字大概率失败。
NMT的错误控制机制也值得一提。手册3.3.2讲的是心跳生产者和消费者:从站按1017h设定的周期发心跳报文,主站在规定时间内收不到就判定节点掉线。SV660C默认心跳周期是多少、主站侧配置多久判超时,这些都要在联调前对齐,否则一个周期不匹配,整个网络会不停报节点丢失。
2.3 SDO:调试期最依赖的慢速通道
SDO(服务数据对象)是点对点的读写服务,走确认机制:主站发请求,从站回响应,出错时回中止报文。它的特点是可靠、但慢,所以适合配置参数、查询状态,不适合实时控制。
SV660C手册4.3.2节把6040h控制字的每个位都拆开讲了。用SDO写控制字,报文格式是:命令字节(写16位用0x22)+ 索引低字节 + 索引高字节 + 子索引 + 数据低字 + 数据高字。举个例子,把节点1的6040h写成0x0006(快速停止),报文就是「22 40 60 00 06 00 00 00」,CAN ID是0x601。这个8字节组合,做调试的应该背下来。
2.4 PDO:周期数据走快车道
PDO(过程数据对象)是生产者主动推送的,不需要确认。它的价值在实时性——控制字、目标位置、实际位置这些周期性数据,走PDO比走SDO效率高一个数量级。SV660C默认配置了4个RPDO和4个TPDO,手册3.5.2到3.5.4详述了通信参数和映射参数的设置方法。
RPDO1的默认COB-ID是0x200加节点号,映射6040h(16位)、607Ah(32位目标位置)、60FFh(32位目标速度);TPDO1默认映射6041h(16位状态字)、6064h(32位实际位置)、606Ch(32位实际速度)。这个默认映射已经能覆盖最基本的轮廓位置控制需求,很多项目其实不用改映射就能跑起来。
2.5 SYNC与EMCY:同步节拍和故障告警
SYNC(同步对象)是一条周期广播帧,CAN ID固定为0x80。PDO的传输类型如果设为1到240之间的值,就表示「收到第N个SYNC时触发一次」。手册3.6.2说得很清楚:多轴联动必须用SYNC驱动PDO,否则各轴从站自由运行,位置偏差会随时间累积。
EMCY(紧急对象)是从站故障时主动上报的报文,CAN ID是0x80加节点号,数据区第一字节是错误码。SV660C把EMCY和面板显示、故障码表打通了,现场盯着主站软件里的EMCY列表,基本能定位九成问题。这本书的5.1节把通讯故障码列了一张表,我通常把它打印出来贴在控制柜门上。
3. 组网从配线开始:双绞线、终端电阻与接地三板斧
协议层的东西搞明白了,接下来得面对最现实的物理层。CANopen跑在CAN总线上,而CAN总线的物理层设计决定了整个网络的生死。SV660C手册第2章花了不少篇幅讲配线,这部分内容在项目验收阶段作用更大——协议配置错了还能改,配线错了就是返工加烧板子。
3.1 拓扑选型:总线型是唯一正解
CAN网络必须是总线型拓扑,所有节点并接在一条主干上,每个节点用很短的支线引出。手册2.2的多节点连接方式示意里,主干两端各有一个终端电阻,中间节点的支线尽量短。为什么要强调这个?因为我见过有人图省事,把节点做成了星型或者菊花链,结果高速传输时反射严重,波特率稍微一提高就丢报文。
对于伺服驱动器这类高实时性设备,我一般把SV660C当作总线上的一个从站节点,节点间距控制在1米以内。支线长度最好不要超过0.3米。如果现场柜内走线空间紧张,支线过长会带来两个问题:一是阻抗不连续导致反射,二是支线成了天线,把变频器的干扰带进总线。
3.2 终端电阻与接地:两个参数决定一半稳定性
CANopen规定总线两端各接一个120欧终端电阻,没有例外。判断终端接没接对有个土办法:网络断电时用万用表在任意节点处量CAN_H对CAN_L的电阻,如果读到约60欧,说明两端都接了;读到120欧,说明有一端没接;读到近似短路,说明中间某个节点把120欧接到了错误位置。
手册2.5专门讲了CAN通信接地注意事项。SV660C提供CGND端口,这个端口是CAN收发器的参考地。常见做法是把各节点的CGND用一根线与主站的通信地连起来,避免各节点电位差过大。如果现场设备不是隔离CAN,CGND往往和信号GND或COM是连通的,此时要注意别把动力回路的干扰引进来。
3.3 波特率与总线长度:先定速率再排布
手册2.3和2.4讲了不同线缆的接线推荐方式,核心就是按波特率选总长度。下表是我常用来跟项目现场人员对齐的参数:
| 波特率 | 最大总线长度(约) | 适用场景 |
|---|---|---|
| 1 Mbps | 25 m | 单柜内多轴 |
| 500 kbps | 100 m | 跨柜短距离 |
| 250 kbps | 250 m | 产线级分布 |
| 125 kbps | 500 m | 长距离低速 |
SV660C支持到1Mbps,但距离越短、反射影响越明显。我的经验是:柜内走线用1Mbps没问题,一旦出了柜子,先降到500kbps再说。还有一条铁律:波特率不是想改就改的,从站侧改了波特率功能码之后必须重新上电或复位节点,否则通信参数不重新初始化,主站那边再怎么对参数都白搭。
3.4 线缆布局:把现场干扰挡在源头
CAN线缆推荐使用双绞屏蔽线,屏蔽层给信号提供回流路径,这是手册2.3的明确要求。注意双绞线不是随便绞两下就行的,节距要均匀,否则两根线的耦合不一致,共模干扰没法被有效抵消。
屏蔽层的接地方式现场争议最大。我的做法是:控制柜内,屏蔽层单端接机壳,避免地环路;如果电机侧高频干扰明显,就在远端通过一个高频电容(比如1nF/2kV)接机壳,这样高频干扰有泄放路径,低频地环路又进不来。另外,CAN线缆尽量不要和动力线、伺服电机U/V/W线走同一个线槽,保持至少20厘米间距,与变频器输出侧保持更大距离。这是能从根上降低EMCY误报的做法,毕竟伺服驱动器一侧的功率级开关噪声是出了名的凶。
4. 手动配置流程:SDO读写、PDO映射与参数下载
理论框架搭完了,接下来要把一台SV660C从出厂状态配成「能用的从站」。整个过程分四步:先规划节点号和COB-ID,再用SDO读写验证通信,然后配置PDO映射,最后保存参数。每一步都有对应的手册章节和常见误区。
4.1 节点号与COB-ID:先规划再接线
每台SV660C在接入网络前必须分配一个节点号,取值范围1到127。节点号直接决定大部分通讯对象的CAN ID:SDO请求是0x600加节点号,SDO响应是0x580加节点号,RPDO1是0x200加节点号,TPDO1是0x180加节点号,EMCY是0x80加节点号。
节点号怎么设?手册1.1驱动器铭牌与型号说明里没有直接写,实际是通过功能码或面板设置的。我一般建议按柜内位置编号,比如1号驱动器就叫节点1,2号就叫节点2,并同步贴标签。千万不要跳着号分配,比如只用了节点1和节点5,中间那些COB-ID空着没问题,但如果后面有人把节点地址改了却没更新图纸,排查起来会想骂人。
4.2 SDO报文模板:读写对象字典的通用格式
SDO是调试期最趁手的工具。下面以写控制字为例,展示SDO的完整请求与响应格式,节点号取1:
| 方向 | CAN ID | 字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 | 含义 |
|---|---|---|---|---|---|---|---|---|---|---|
| 请求 | 0x601 | 0x22 | 0x40 | 0x60 | 0x00 | 0x06 | 0x00 | 0x00 | 0x00 | 写6040h=0x0006 |
| 响应 | 0x581 | 0x60 | 0x40 | 0x60 | 0x00 | - | - | - | - | 写入成功 |
字节1的0x22表示写一个16位数据;字节2和3是索引(低字节在前);字节4是子索引;字节5到8是数据(低字在前)。响应里的0x60表示成功,如果返回0x80开头,后面跟着4字节中止码,对应的含义要在手册5.3节SDO传输中止码里去查。
读参数时命令字节换成0x40,从站响应里数据区就是读到的值。比如读6041h状态字,请求发「40 41 60 00 00 00 00 00」,响应一般是「4B 41 60 00 XX XX 00 00」,6字节数据区里前2字节就是状态字值。
4.3 PDO映射与触发方式:把实时数据装进通道
PDO映射决定「这条PDO里装什么」。SV660C的RPDO1默认映射已经是轮廓位置模式的标准配置,但如果你要用原点回零模式,就得改映射。改PDO映射的步骤是:先把节点切到预操作状态(NMT命令0x80),再通过SDO修改1600h子索引0的个数、子索引1到n的映射对象,最后复位节点让映射生效。
RPDO1映射参数1600h的默认值如下表,供对照:
| 子索引 | 内容 | 默认值 | 说明 |
|---|---|---|---|
| 00h | 映射对象个数 | 03h | 3个对象 |
| 01h | 第一个映射对象 | 6040h 10h | 控制字,16位 |
| 02h | 第二个映射对象 | 607Ah 20h | 目标位置,32位 |
| 03h | 第三个映射对象 | 60FFh 20h | 目标速度,32位 |
传输类型在通信参数1400h里设。0xFF表示事件触发,适合自由运行;1表示每个SYNC周期触发一次,适合多轴同步。改了映射后如果发现数据不刷新,先查传输类型是不是被改成了别的值,再查节点是不是停在操作状态。
4.4 保存与恢复出厂:别让配置白做
这是最容易「白干一场」的环节。通过SDO改完的对象字典数据,默认只存在于RAM里,断电后全部还原。要用SDO把1010h子索引1写成0x65766173(ASCII码的'save'),参数才写入Flash。
恢复出厂对应的是1011h子索引1写0x64616F6C(ASCII的'load')。注意1011h写load也会把通信参数、PDO映射全部还原到默认值,所以现场调试时不要手滑,更不要把「保存参数」和「恢复出厂」两个报文放在一起测试。我见过一个同事在调试记录里复制错了命令,把一台已经调好的轴参数全洗掉了,那个下午他都在重新对电子齿轮比。
5. 避坑排查:接线和报文里最常翻车的五个问题
这部分内容值得单独立章,因为我在这类项目上踩过的坑,九个里有五个都发生在别人以为是「玄学」的地方。每个问题都按「现象→原因→解决」拆开写,新手可以直接对照排查。
5.1 接线与组网:三处看不见的坑
坑一:终端电阻多接或者漏接,高速时偶发丢报文。
现象:波特率降到125kbps一切正常,升到500kbps或1Mbps就偶尔丢几个TPDO,运行时间一长还会报EMCY。
原因:总线阻抗不匹配。要么是首尾两端的120欧终端电阻少了一个,要么是中间某个节点设备内部已经带了终端电阻,外部又并了一个,导致总线等效阻抗偏离60欧。
解决:用万用表在任意节点量CAN_H和CAN_L之间的电阻。读到约60欧,正常;读到约120欧,说明一端没接或者中间某个节点没接入网络;读到接近0欧,说明有地方短路或者终端电阻接到了错误位置。按这个逻辑逐个节点排查,比用示波器抓波形快得多。
坑二:各节点CGND没连,长时间运行后CAN收发器烧了。
现象:设备刚装好时通信正常,运行一个月后某几个从站频繁掉线,最后CAN收发器损坏,返修率异常高。
原因:各节点的参考地电位不一致,CAN收发器承受的共模电压超标。SV660C手册2.5专门强调CAN通信接地,CGND绝不等于「可以不接」。
解决:把各节点的CGND用一根线统一连接,并在控制柜内找一个可靠接地点做单点接地。如果现场的CAN收发器是非隔离的,CGND往往和信号地连在一起,注意不要把大功率设备的动力地混进来。
坑三:屏蔽层双端接地,现场出现周期性EMCY告警。
现象:伺服轴运行时网络会不定时报EMCY,故障码指向通讯异常,但把波特率降下来又好了。
原因:屏蔽层在控制柜两端都接了机壳,形成了地环路。电机运行时变频器漏电流通过地环路串入CAN总线,干扰信号被CAN收发器误判为报文错误。
解决:控制柜内屏蔽层单端接地,另一端悬空。如果干扰仍明显,远端通过高频电容接机壳,给共模高频干扰一条泄放路径,同时低频地环路被电容阻断。
5.2 报文与对象字典:四个调试翻车现场
坑四:SDO返回0x06040041,提示对象不存在。
现象:照着手册第6章的对象字典表发SDO读2002h子索引01h,返回中止码0x06040041。
原因:索引或子索引写错了。对象字典的索引是16进制,很多新手把十进制当成十六进制填进去。比如2002h写成2002(十进制),再转成报文的低字节高字节,就对不上号了。
解决:先在手动配置软件里把对象字典打开,直接复制索引和子索引的值。凡是2000h以上的索引,写之前务必在纸上标出十六进制和十进制的对应关系,避免换算错误。
坑五:PDO映射改好了,但发过去的控制字电机没有反应。
现象:用SDO单独写6040h,控制字从0x06置0x07,电机能正常使能。但改完1600h映射,把控制字塞进RPDO后,发0x06再发0x07,电机没反应。
原因:改了1600h之后没有复位节点,PDO映射新配置未生效;或者传输类型设为同步模式,但SYNC报文没在周期发送,PDO数据一直在缓冲里没进入对象字典。
解决:改完1600h,依次发送复位通信、启动节点的NMT命令,确认节点回到操作状态。再把传输类型拆出来单独排查:先设成0xFF事件触发验证PDO本身通不通,通了之后再切成同步模式接SYNC。
坑六:控制字已经置位,但6041h状态字还是0x0250,轴不走。
现象:状态字显示已使能待运行,目标位置也写进去了,控制字里bit4已置1,但电机纹丝不动。
原因:轮廓位置模式下,要么目标速度和加减速没设,要么伺服处于「快速停止」状态还没恢复。CiA402状态机里有些状态之间的转移是有条件的,不能简单跳变。
解决:先看6060h是不是轮廓位置模式(1),再确认6081h轮廓速度不为0,6083h和6084h加减速不为0。然后按状态机的推荐时序一步一步走:0x06→0x07→0x0F→0x1F→0x27,每一步之间延时50ms以上,不要连续狂发。
6. 验证技巧:把轮廓位置模式跑通一次再谈其他模式
手册第4章列了六种运动模式,我推荐所有人都从轮廓位置模式开始验证。不是因为简单,而是因为它把状态机、PDO映射、对象字典、甚至SYNC的配合关系全部串到了一起。一种模式跑通了,其他模式只是换对象和映射的问题。
6.1 状态机转移清单
按照手册4.3.1的CiA402状态机,一次完整的使能加运动,控制字需要走这几个值:
| 步骤 | 6040h控制字 | 含义 | 预期6041h状态字 |
|---|---|---|---|
| 1 | 0x06 | 禁止运行 | 0x0251 或 0x0250 |
| 2 | 0x07 | 就绪 | 0x0221 |
| 3 | 0x0F | 已使能 | 0x0233 |
| 4 | 0x1F | 触发运动 | 0x0233 或 0x0433 |
这组数值每家CANopen伺服大同小异,但SV660C手册标注了6040h各bit的时序要求,特别是bit4和bit5不能同时置位再同时复位,否则急停逻辑会接管。
6.2 轮廓位置模式的验证流程
节点使能后,按下面的顺序写入目标参数再启动运动:
- 确认6060h=1,模式已切到轮廓位置模式。
- 写6081h轮廓速度,比如60000(单位由6065h决定,通常在用户单位下是0.01mm或0.001mm)。
- 写6083h轮廓加速度和6084h轮廓减速度,务必同时给,缺一个轴就不动。
- 写607Ah目标位置,比如100000。
- 将6040h从0x0F置为0x1F,让伺服开始走这一段轮廓。
- 等待6041h的bit10从0变1,表示目标位置到达。
这套流程走完,轴应该能按设定速度匀速跑到目标位置并停下来。如果实际位移和设定对不上,回头检查6091h电子齿轮分子和6092h电子齿轮分母的设置,以及607Eh指令极性是不是反了。
把这套流程跑通之后,我每次接手新轴都会强制自己先完整走一遍,不走完不调增益,不调增益不生产。这本手册值钱的地方不在于它写得有多全,而在于它把现场调试验证的路径压缩到了最短。希望帮到你。
本文还有配套的精品资源,点击获取