拓冰建站拓冰建站
首页 / 资讯中心 / 正文

倍福与ZAPI控制器CAN 2.0通讯配置与排错指南

简介在倍福与ZAPI控制器的互联场景中CAN2.0总线通讯是实现数据交换的关键环节。这份资源包面向工业自动化工程师聚焦倍福与ZAPI控制器之间的CAN2.0通讯实现内容覆盖TwinCAT软件环境下CAN接口配置、消息收发程序编写、通讯协议与调试要点适合需要将倍福PLC或嵌入式控制器与ZAPI电机控制器进行对接的现场项目人员。包内共90个文件以编译库文件为主另有倍福TwinCAT工程配置、Word操作说明文档及配置备份文件压缩包大小约7.45MB并同时提供TC2与TC3两种工程版本便于在不同软件环境中选用。目前已有686人学习下载。通过该资源可以快速搭建CAN2.0通讯实验环境理解ZAPI控制器数据帧格式、标识符与数据长度设置掌握倍福CX系列控制器或工业PC配合TwinCAT进行数据交换的方法大幅缩短现场调试周期适合从事移动机械、电动车辆及工业控制系统集成与维护的工程师参考。1. 为什么倍福与 ZAPI 控制器之间要单独谈 Can2.0 通讯在 AGV、叉车、高空作业平台这类移动设备上倍福控制器负责整车逻辑、导航定位和上位机交互ZAPI 控制器负责牵引电机、转向电机和液压泵电机的闭环控制。两者之间的数据交换绝大对数项目都落在 CAN 2.0 这条链路上。很多人以为把 CAN_H 和 CAN_L 接对波特率设成一样就能跑但真正调起来才发现麻烦在协议层ZAPI 控制器不会自动把转速、电流、温度送到倍福的变量表里你需要决定走 CANopen 还是私有裸帧需要配置 PDO 映射还要处理 NMT 状态、心跳超时和总线关闭。这套链路里任何一个环节错了现象都是“没通讯”但排查路径完全不同。下面几章我会按硬件、协议、参数、排错的顺序把倍福 CX5140 配合 ZAPI 控制器时的 CAN 2.0 通讯完整做一遍。2. 倍福侧硬件与 TwinCAT 主站的最小配置2.1 先确认倍福侧能收发 CAN 的最小硬件做倍福 CAN 通讯第一件事不是打开 TwinCAT而是确认物理层是谁在收发。CX5140 这类嵌入式控制器自带一个 CAN 接口硬件上已经集成收发器和隔离电路你只要在端子上把 CAN_H、CAN_L 和 CAN_GND 接出来就能用。如果控制器本身没有 CAN 接口或者一个设备上需要同时挂多路独立 CAN 总线常见做法是在 EtherCAT 端子排上加一个 EL6751 或 EL6752。EL6751 是 CANopen 主站端子EL6752 是从站端子。多数项目里倍福是主站ZAPI 控制器是从站所以 EL6751 更常见。除这两个端子之外倍福也提供像 EL6002 这种串口端子但不能直接接 CAN 总线采购时别搞混。选型时还要确认端子模块的供电方式EL6751 需要 24V 电源电源没送到位时 TwinCAT 里设备会显示通讯超时这个问题在调试现场经常遇到。倍福硬件类型典型使用场景CX5140 内置 CAN 口CANopen 主站/从站可配单主站、单从站的小系统EL6751CANopen 主站通过 EtherCAT 扩展多路 CAN 总线EL6752CANopen 从站倍福作为从站接入第三方 CAN 总线第三方 PCI CAN 卡裸 CAN 收发ZAPI 只有私有裸帧协议时使用接线方面我一般遵循几条硬规则CAN_H 对 CAN_HCAN_L 对 CAN_L不要交叉屏蔽层单端接地避免形成地环路总线两端各一个 120Ω 终端电阻不要把所有节点上的终端电阻都打开。倍福的 9 针 D-Sub 接口中2 脚是 CAN_L7 脚是 CAN_H3 脚和 6 脚是 CAN_GND。如果 ZAPI 控制器已经内置 120Ω 终端电阻就把倍福侧终端电阻开关拨到 OFF。判断两侧终端电阻是否正确最直接的办法是断电后量 CAN_H 与 CAN_L 之间的电阻正常应为 60Ω 左右量到 120Ω 说明有一端没接终端电阻。2.2 用 TwinCAT XAE 添加 CANopen 主站设备步骤硬件连接完成并确认终端电阻正确后就可以配置 TwinCAT。以 TwinCAT 3 为例打开 XAE 环境后在 Solution Explorer 里展开 I/O 设备。如果使用 CX5140 的内置 CAN 口可以在 Device 列表里看到名称为 CAN 的节点右键选择 ScanTwinCAT 会扫描实际硬件并生成设备节点。扫描不到时可以手动右键 I/O Devices 选择 New Item添加一个 CAN 设备然后指定设备号。扫描到 CAN 设备后需要先把设备模式设为 CANopen。右键 CAN 设备节点选择 Append CANopen Master这一步会生成一个主站通道。主站通道下面可以继续添加从站节点也就是 ZAPI 控制器。主站参数里最先要改的是波特率。双击 CANopen Master 节点在 Communication Parameters 里把 Baudrate 设为与 ZAPI 控制器一致。ZAPI 控制器出厂默认波特率一般为 500kbps但有些来自旧项目的备件可能已经被改成 250kbps 甚至 125kbps所以必须先在 ZAPI 调试工具里确认。波特率不一致时主站和从站都会不停报错误帧总线状态会变成 BusOff。另一个关键参数是 Cycle Time也就是主站发送 NMT 心跳和轮询报文的周期。我通常把它设置为 1ms 或 1 的整数倍比如 1000μs。不要为了提高实时性把它改成 100μs因为 CAN 总线上同时还有 ZAPI 控制器发出的 PDO总线负载会迅速上升。Cycle Time 的意义是给 CANopen 主站一个基本时间片它影响的是 NMT 状态切换和同步报文的节奏。2.3 配置成功后怎么验证配置完成并激活后先在在线视图里看从站状态。TwinCAT 的 CANopen Master 节点下会显示一个从站列表每个从站都有状态字段常见状态是 PREOP 和 OP。如果一直停在 PREOP说明 NMT 启动命令没有成功或者从站没有正常应答。如果主站状态显示 BusOff优先检查终端电阻和波特率。状态没问题后再用 PLC 代码读取一个实际参数。下面这段代码用FB_COE_Read读取 ZAPI 控制器对象字典里的一个 16 位参数PROGRAM MAIN VAR bRead : BOOL; byNode : BYTE : 1; nValue : UINT; udiError : UDINT; fbCoeRead : FB_COE_Read; END_VAR IF bRead THEN fbCoeRead( sNetId : , nSlaveAddr : byNode, nIndex : 16#2000, nSubIndex : 1, pDstBuf : ADR(nValue), cbBufLen : SIZEOF(nValue), bExecute : TRUE, tTimeout : T#2S, bBusy , bErr , errId udiError ); END_IF这段代码面向 TwinCAT 的 CANopen 从站使用 COE 协议读取索引 0x2000、子索引 1 的参数。nSlaveAddr必须与 ZAPI 控制器的节点 ID 一致nIndex和nSubIndex必须能在 ZAPI 的 EDS 文件里查到否则会返回错误代码。读取结果保存在nValue里后续可以参与运算。bExecute需要做边沿触发如果一直保持 TRUE功能块会重复执行浪费总线带宽。实际项目中我会把bRead做成一个每次计时到时置位一次的脉冲信号。如果udiError返回0x06020000表示对象字典中的对象不存在通常是 EDS 版本与控制器固件不匹配。返回0x08000000表示 SDO 传输被从站拒绝可能因为从站处于 PREOP 状态下不允许读写某些对象。3. Can2.0 通讯协议选型走 CANopen 还是裸帧3.1 ZAPI 控制器支持的 CAN 模式与协议ZAPI 控制器的 CAN 接口不是只能跑 CANopen很多型号支持私有 CAN 协议。私有协议本质上仍然基于 CAN 2.0A 标准帧但报文的标识符、数据内容和应答时序完全由 ZAPI 定义。因此拿到一台控制器后首先要进它的调试软件看参数确认 CAN 协议模式。如果参数页里出现的是 “CANopen Node ID”“Heartbeat Time”“Store Data” 这一组字段说明当前固件支持 CANopen并且很可能默认就工作在 CANopen 模式。如果参数名是 “CAN Identifier”“Identifier Extension”“CAN Mask”那就要注意这套参数走的是 ZAPI 私有裸帧协议倍福侧必须用裸帧收发而不是 CANopen 主站。实践里我会做一个快速判断把 ZAPI 控制器切换到 CANopen 模式然后看倍福主站是否能扫描到节点。如果 ZAPI 控制器不支持切换说明书里也找不到 CANopen 相关对象字典那就按裸帧协议来做。裸帧协议不一定比 CANopen 难但工作量在于你必须在倍福侧自己组织帧 ID 和字节序没有 EDS 文件可以依赖。下面的表列出了两种模式下倍福侧需要准备的不同点对比项CANopen 模式私有裸帧模式倍福侧设备CANopen MasterCAN 原始通道 / 第三方 CAN 卡配置依据EDS / DCF 文件ZAPI 通讯协议手册数据交互PDO / SDO自定义 CAN 帧收发故障排查工具CANopen MonitorCAN 总线分析仪3.2 用 CANopen 封装 CAN 2.0 数据的最小帧结构CAN 2.0 本身不规定应用层数据格式而 CANopen 是在 CAN 2.0 的数据链路层之上定义的一套应用层协议。换句话说你看到的 CANopen 报文底层就是一个标准 CAN 2.0 帧帧 ID 就是 CANopen 的 COB-ID。倍福的 CANopen 主站设备在驱动层完成 COB-ID 过滤和对象字典管理因此你在 TwinCAT 里看到的不是原始 CAN 帧而是像%IW0这样的过程数据映像。CANopen 报文类型COB-ID 范围作用NMT0x000节点状态切换SYNC0x080同步 PDO 发送时机EMCY0x080 NodeID紧急错误上报SDO 请求0x600 NodeID主站写从站对象字典SDO 应答0x580 NodeID从站返回数据RPDO0x200 NodeID主站发给从站的过程数据TPDO0x180 NodeID从站发给主站的过程数据Heartbeat0x700 NodeID节点心跳举一个最小例子ZAPI 控制器放在节点 ID 1它发送的 TPDO 的 COB-ID 通常是 0x181数据域长度可能是 8 字节。这 8 个字节内部如何拆分由 TPDO 映射决定。比如第 1、2 字节是实际转速第 3、4 字节是母线电流第 5 字节是控制器状态字。倍福侧只要在 EDS 里把对应的对象字典映射到这些字节TwinCAT 就会自动把变量名换成对象名完全不用手动处理字节序。另外默认情况下 ZAPI 控制器的 PDO 是事件触发模式也就是数据变化时立即发送。这个模式实时性好但总线负载不稳定。如果 ZAPI 控制器参数里允许选择 PDO 发送类型我建议在后期调试时改成同步模式让倍福主站周期性发送 SYNC 报文所有从站在收到 SYNC 后统一上报数据。这个改动能明显减少总线抖动。3.3 直接裸帧通讯在倍福侧的实现边界如果 ZAPI 控制器只有私有裸帧协议倍福侧就不能使用 CANopen 主站的配置方式。常见做法是在倍福控制器里使用支持原始 CAN 收发的通道通过FB_CAN_SEND和FB_CAN_RECEIVE这类底层功能块来收发报文。你也可以在 TwinCAT 里让 CANopen 主站挂一个空闲从站然后对这个从站直接用 COE 写入原始 CAN 帧但这种方式既不直观也不容易控制发送时刻。裸帧模式下的难点不在收发而在帧定义。ZAPI 的私有协议通常会约定哪个帧 ID 用于主站发送控制指令哪个帧 ID 用于控制器响应状态数据域的哪个字节是低字节在前。你必须把协议手册中的字节偏移、位掩码和缩放系数逐一转换成 PLC 代码任何一个位移错了读出来的转速都会是乱码。我的经验是能走 CANopen 就不要走裸帧。ZAPI 控制器如果支持 CANopenCANopen 模式下的调试工具和报文监控都更加成熟出问题时能借助对象字典定位。反过来如果你迫不得已必须使用私有协议备好一台独立 CAN 总线分析仪抓包对比 ZAPI 协议手册里的帧结构比在 TwinCAT 里反复猜测快得多。4. ZAPI 控制器参数设置与 PDO 映射实战4.1 先拿到 ZAPI 控制器的 CAN 描述文件做 CANopen 通讯第一步是拿到 ZAPI 控制器对应的 EDS 文件。EDS 文件是全文本格式内容包含设备信息、对象字典定义、PDO 映射默认值和通讯参数。TwinCAT 在添加从站节点时导入 EDS可以自动生成对象字典和 PDO 映射省去大量手工劳动。ZAPI 的 EDS 文件通常可以从三个途径获得ZAPI 官方支持渠道、随控制器附带的光盘或 U 盘、以及 ZAPI 调试软件中的导出功能。我一般优先选择从 ZAPI 调试软件里连接控制器后导出因为这样可以保证 EDS 与当前固件版本完全一致。直接拿别人给的 EDS可能对方控制器固件版本不同导致部分对象索引在 TwinCAT 里读不到。拿到 EDS 后用文本编辑器打开检查一下。文件头应该包含[FileInfo]、[DeviceInfo]、[DummyUsage]和[MandatoryObjects]这几段其中[DeviceInfo]里的IdentityObject和BaudRate字段可以告诉你控制器支持的最高波特率。如果打开发现是空白文件或加密内容那基本用不了去找供应商替换。4.2 在 TwinCAT 里导入 ZAPI 的 EDS 并映射 PDO在 TwinCAT XAE 中右键 CANopen Master 下的 Slave Devices选择 Add Slave Device再选择 Import EDS File选中 ZAPI 的 EDS 文件后TwinCAT 会自动创建从站节点。节点默认节点 ID 可能和实际不一致需要在从站的属性窗口里把 Node ID 改成 ZAPI 控制器的实际值。创建完成后双击从站节点进入编辑界面。在 PDO Assignment 选项卡里可以看到默认的 TPDO 和 RPDO 映射。ZAPI 控制器的 EDS 通常已经预置好几组常用映射但现场往往要根据项目需要调整。以转速反馈为例在 TPDO 1 的 Mapping 选项卡里去掉默认映射然后添加对象字典 0x2000 子索引 1数据长度设置为 16 位再添加对象字典 0x2001 子索引 1也设置为 16 位。// RPDO1 映射示例两条映射条目 // 0x2000:1:16 表示对象字典索引 0x2000子索引 1长度 16 位 // 0x2001:1:16 表示对象字典索引 0x2001子索引 1长度 16 位 // 这两条数据依次占用 PDO 数据域的第 1~2 字节和第 3~4 字节这段注释里写的是手动映射的格式实际在 TwinCAT 界面里只需要选择对象字典条目并点击 Add软件会自动生成映射表达式。手动改映射时要注意所有映射条目的总长度之和不能超过 64 位也就是 8 字节。每一条映射的位长度必须与对象字典变量长度一致如果 ZAPI 对象字典里 0x2000 是 32 位映射里写成 16 位TwinCAT 会拒绝配置。映射完成后回到从站节点的 Startup Parameters 选项卡。这里会列出主站启动时自动发送的服务默认可能只有 NMT Start。我一般会再添加一项 SDO Write用于在启动时把 ZAPI 控制器的某个参数强制写入比如清除历史故障或设置运行模式。添加时要填索引、子索引、数据类型和数值这些都要从 EDS 中查不能凭经验猜。4.3 设置 ZAPI 侧参数ZAPI 控制器的参数设置通常在它自己的调试软件里完成比如 ZAPI 的 Console 工具或类似的上位机软件。不同型号界面不同但 CANopen 相关参数大同小异CAN 协议、节点 ID、波特率、心跳周期、PDO 使能。ZAPI 参数项推荐值说明CAN ProtocolCANopen切换为 CANopen 模式CANopen Node ID1必须与倍福从站节点号一致Baudrate500kbps两端必须一致Heartbeat Period100ms从站心跳发送周期TPDO 发送类型事件或同步默认事件触发TPDO Event Timer20ms事件触发的最大间隔修改完参数后一定要做 Save to EEPROM 操作然后断电重启 ZAPI 控制器。只保存到 RAM 的话控制器每次重新上电都会恢复默认参数倍福主站会报从站丢失。ZAPI 控制器重启后会先进入 Pre-operational 状态。此时它能响应 SDO 读写但不会发送 PDO也不会执行控制指令。倍福主站启动后发送 NMT Start 命令ZAPI 控制器才进入 Operational 状态。如果你的倍福逻辑里包含急停或安全回路务必在 NMT Start 命令之前确保安全条件已经满足否则 ZAPI 控制器可能在进入 Operational 的瞬间就执行上一次的残留速度指令。5. 调试中的总线故障与性能优化5.1 从错误帧反推问题点调试中最常见的现象是倍福主站状态在 OP 和 BusOff 之间反复跳。先量 CAN_H 和 CAN_L 之间的电阻正常是 60Ω。如果量到 120Ω检查 ZAPI 控制器最远端有没有打开终端电阻如果量到接近 0Ω很可能 CAN_H 与 CAN_L 被碰到了一起或者屏蔽层错误接地。排除这两点之后再看错误帧的类型。如果 CANopen Monitor 里持续出现 CRC 错误或 Bit Stuff 错误基本都是波特率不一致偶尔是收发器质量问题。5.2 看门狗与心跳超时设置ZAPI 控制器在 CANopen 模式下会周期发送心跳报文。如果倍福主站在设定的超时时间内没收到心跳会认为从站离线并触发报警反过来如果 ZAPI 控制器设置了心跳消费方而倍福主站没有周期发送心跳ZAPI 控制器也会进入急停状态。倍福主站侧的心跳超时建议设为 250msZAPI 侧心跳周期设为 100ms。这样连续丢两到三帧心跳就会报警但不会因为一帧延迟就误动作。5.3 用 TwinCAT CANopen Monitor 抓总线报文最后给你一个我常用的排错手段打开 TwinCAT 的 CANopen Monitor按从站节点地址过滤观察报文列表。如果 ZAPI 控制器一直在发 EMCY 报文不要急着改倍福配置先查 EMCY 数据字节里的错误代码。ZAPI 的 EMCY 通常会报告过压、欠压、过温、过流等故障这些信息在倍福侧只能通过对象字典轮询得到而在总线上看一眼报文就能定位。调试完成后把 EMCY 报文也映射成 PLC 变量这样上位机可以直接显示 ZAPI 控制器当前的故障类型不用每次拿调试器去读。总线负载率偏高时优先把 TPDO 的 Event Timer 从 20ms 调整为 50ms或者把 PDO 发送类型改为同步模式。同步模式下倍福主站按固定周期发送 SYNC 广播ZAPI 控制器每次收到 SYNC 后发送一次 PDO报文数量稳定可算。这个改动只需要在倍福从站 PDO 配置和 ZAPI 参数里各改一次风险极小但对总线稳定性的提升非常明显。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门