Skip to content

总线

概述

本控制器支持多种工业现场总线协议,包括 EtherCAT、CANopen 等。通过总线可以实现与伺服驱动器、IO 模块、传感器等从站设备的高速实时通信。

支持的总线类型

总线类型说明典型用途
EtherCAT基于以太网的实时总线伺服控制、高速 IO
CANopen基于 CAN 的现场总线传感器、编码器、分布式 IO

总线架构

text
┌─────────────┐
│   控制器     │  (主站)
└──────┬──────┘
       │ EtherCAT / CAN bus

  ┌────┴────┬─────────┬──────────┐
  │         │         │          │
┌─┴──┐   ┌──┴──┐   ┌──┴──┐   ┌──┴──┐
│伺服│   │伺服 │   │ IO │   │交换 │
│ 1  │   │ 2   │   │模块 │   │ 机  │
└────┘   └─────┘   └─────┘   └─────┘

EtherCAT 主站功能

功能说明
从站扫描自动识别总线上的从站设备
ENI 配置通过 EtherCAT 网络信息文件配置从站
DC 时钟同步分布式时钟同步,实现各从站精确同步
PDO 映射过程数据对象映射,定义实时数据交换内容
从站状态管理监控从站运行状态,支持在线/离线检测

CanOpen

0x7000 上位机查询该硬件的 can 支持的功能

命令字: 0x7000

请求参数:

参数名类型说明
canPortUIntcan 端口号
functionInt该硬件 can 支持的功能,范围[0,3]
0-标准帧,1-扩展帧,2-远程帧,3-过滤 id

请求示例:

json
{
  "canPort": 1,
  "function": 0
}

0x7001 控制器回复上位机查询该硬件的 can 支持的功能结果

命令字: 0x7001

响应参数:

参数名类型说明
canPortUIntcan 端口号
supportBool该硬件的 can 是否支持这功能

响应示例:

json
{
  "canPort": 1,
  "support": true
}

0x7002 上位机设置 can 参数

命令字: 0x7002

请求参数:

参数名类型说明
canBaudUIntcan 通讯波特率(bps),常用值:125k, 250k, 500k, 1M
canPortUIntcan 通讯端口
enableRecvFiltertBool是否开启过滤 ID;开启后仅接收过滤 ID 匹配的帧
frameFormatInt帧格式,范围[0,1]
0-标准帧(11位 ID),1-扩展帧(29位 ID)
recvFilterIdUInt设置过滤 ID,仅 enableRecvFiltert=true 时生效

请求示例:

json
{
  "canBaud": 500000,
  "canPort": 1,
  "enableRecvFiltert": true,
  "frameFormat": 0,
  "recvFilterId": 0x181
}

0x7003 上位机请求接收一帧 can 数据

命令字: 0x7003

请求参数:

参数名类型说明
canPortUIntcan 通讯端口

请求示例:

json
{
  "canPort": 1
}

0x7004 控制器回复上位机接收一帧 can 数据结果

命令字: 0x7004

响应参数:

参数名类型说明
canPortUIntcan 通讯端口
dataUChar[]接收到的数据,长度为 Length 节点的值
LengthUInt接收到的数据长度
recvCanIDUInt接收到的帧 ID

响应示例:

json
{
  "canPort": 1,
  "data": [0x10, 0x20, 0x30],
  "Length": 3,
  "recvCanID": 0x181
}

0x7005 上位机请求发送一帧数据

命令字: 0x7005

请求参数:

参数名类型说明
canPortUIntcan 通讯端口
dataUChar[]需要发送的数据
sendCanIDUInt发送帧的 ID
sendLenUInt发送的数据长度,范围[1,8]
useRemoteFrameBool是否使用远程帧;远程帧用于请求对方发送数据

请求示例:

json
{
  "canPort": 1,
  "data": [0x10, 0x20],
  "sendCanID": 0x201,
  "sendLen": 2,
  "useRemoteFrame": false
}

EtherCAT 总线配置

ENI 文件管理

ENI(EtherCAT Network Information)文件是 EtherCAT 总线配置的核心文件,描述了总线上所有从站的型号、数量、排列顺序及 PDO 映射信息。ENI 文件通常由专用配置工具生成(如 INEXBOT EC-Config),导入控制器后生效。


0x7010 上位机查询 ENI 文件列表

命令字: 0x7010

请求参数:

参数名类型说明
numInt获取 ENI 文件数目,范围[1,10]
1-获取当前使用的 ENI 文件,10-获取所有 ENI 文件

请求示例:

json
{
  "num": 10
}

0x7011 控制器回复上位机 ENI 文件列表

命令字: 0x7011

响应参数:

参数名类型说明
ENIfilelistString[]控制器 ENI 文件列表
ENIfilenumIntENI 文件数目
absolutepathString控制器中 ENI 文件所在文件夹

响应示例:

json
{
  "ENIfilelist": [
    "INEXBOT-IO-R4-1.xml",
    "DST_X503-1.json",
    "DST_X503-1.xml",
    "KunWeiTech_FT_Sensors-1.xml",
    "P140000107-1.0.1.1-ECXML-1.xml"
  ],
  "ENIfilenum": 5,
  "absolutepath": "eni/"
}

0x7012 上位机查询 ENI 参数

命令字: 0x7012

请求参数:(无)

json
{}

0x7013 控制器回复上位机 ENI 参数

命令字: 0x7013

响应参数:

参数名类型说明
ENINameString当前使用的 ENI 文件名称
isHaveENIIntENI 文件识别结果,范围[-1,1]
-1-无 ENI 文件,0-未识别到对应 ENI,1-识别到 ENI 文件

响应示例:

json
{
  "ENIName": "eni-RC-6-mecat-1-1000.xml",
  "isHaveENI": 1
}

0x7014 上位机设置当前使用的 ENI 文件

命令字: 0x7014

请求参数:

参数名类型说明
ENINameString要激活的 ENI 文件名

请求示例:

json
{
  "ENIName": "eni-RC-6-mecat-1-1000.xml"
}

⚠️ 切换 ENI 文件后,控制器需要重新初始化 EtherCAT 总线。切换前请确认机器人处于安全状态。


从站管理

0x7020 上位机查询从站列表

命令字: 0x7020

请求参数:(无)

json
{}

0x7021 控制器回复上位机从站列表

命令字: 0x7021

响应参数:

参数名类型说明
IONumInt[]IO 从站列表(0-非 IO 从站,非0-IO 从站索引)
servoNumInt[]伺服从站列表(0-非伺服从站,非0-伺服索引)
switchNumInt[]交换机列表(0-非交换机,非0-交换机索引)
slaveTypeString[]从站中文名称列表
slaveTypeEnglishString[]从站英文名称列表

响应示例:

json
{
  "IONum": [0, 0, 0, 0, 0, 0],
  "servoNum": [1, 2, 3, 4, 5, 6],
  "switchNum": [0, 0, 0, 0, 0, 0],
  "slaveType": ["禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E"],
  "slaveTypeEnglish": ["hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e"]
}

从站列表按总线拓扑顺序排列(从站 0 为离主站最近的设备),servoNumIONumswitchNum 分别表示该位置的从站类型和编号。


从站状态监控

0x7023 上位机查询从站状态

命令字: 0x7023

请求参数:

参数名类型说明
slaveIndexint从站索引号,-1 表示查询所有从站

请求示例:

json
{
  "slaveIndex": -1
}

0x7024 控制器回复从站状态

命令字: 0x7024

响应参数:

参数名类型说明
slaveStatesobject[]从站状态列表
slaveStates[].indexint从站索引
slaveStates[].ethercatStateintEtherCAT 状态机:1-INIT,2-PREOP,4-SAFEOP,8-OP
slaveStates[].onlinebool在线状态:true-在线,false-离线
slaveStates[].errorCodeint错误码,0-正常
slaveStates[].txErrorsint发送错误计数
slaveStates[].rxErrorsint接收错误计数
slaveStates[].alStatusCodeintAL 状态码(应用层状态码)

EtherCAT 状态机说明

状态说明
INIT1初始化状态,仅完成基础通讯
PREOP2预运行状态,可进行邮箱通讯和参数配置
SAFEOP4安全运行状态,可进行输入数据读取,输出保持安全值
OP8运行状态,可进行完整的输入/输出数据交换

响应示例:

json
{
  "slaveStates": [
    {
      "index": 0,
      "ethercatState": 8,
      "online": true,
      "errorCode": 0,
      "txErrors": 0,
      "rxErrors": 0,
      "alStatusCode": 0
    },
    {
      "index": 1,
      "ethercatState": 8,
      "online": true,
      "errorCode": 0,
      "txErrors": 0,
      "rxErrors": 0,
      "alStatusCode": 0
    }
  ]
}

0x7025 控制器主动上报从站状态变化

命令字: 0x7025

当任何从站状态发生变化(在线/离线、状态机切换、错误发生)时,控制器主动推送。

响应参数:

参数名类型说明
slaveIndexint从站索引
oldStateint旧状态
newStateint新状态
errorCodeint错误码
timestampstring状态变化时间

响应示例:

json
{
  "slaveIndex": 2,
  "oldState": 8,
  "newState": 4,
  "errorCode": 0,
  "timestamp": "2024-03-15T14:30:05Z"
}

总线状态监控

0x7026 上位机查询总线状态

命令字: 0x7026

请求参数:(无)

json
{}

0x7027 控制器回复总线状态

命令字: 0x7027

响应参数:

参数名类型说明
busStateint总线状态:0-未初始化,1-初始化中,2-运行中,3-错误
cycleTimeint总线周期时间(us)
slaveCountint已识别的从站总数
onlineCountint在线从站数
dcInSyncboolDC 时钟同步状态
masterStateint主站状态码

响应示例:

json
{
  "busState": 2,
  "cycleTime": 1000,
  "slaveCount": 6,
  "onlineCount": 6,
  "dcInSync": true,
  "masterState": 8
}

0x7022 上位机请求控制器切换系统

命令字: 0x7022

请求参数:(无)

json
{}

切换系统用于在多个 ENI 配置方案之间切换,切换后控制器重新初始化总线。


常见问题

总线故障排查

现象可能原因解决方案
从站离线网线松动或断开检查 EtherCAT 网线连接
从站离线从站设备断电检查从站电源
从站不在 OP 状态ENI 文件与实际从站不匹配确认 ENI 文件与硬件配置一致
从站不在 OP 状态从站固件版本不兼容升级从站固件或更新 ESI 文件
总线初始化失败ENI 文件损坏重新导入有效的 ENI 文件
DC 同步失败从站不支持 DC在配置工具中禁用该从站的 DC 功能
总线周期超时从站数量过多减少不必要的从站,或增大周期时间
通讯错误累积电磁干扰检查屏蔽和接地

维护建议

  • 定期检查从站在线状态(0x7023),监控 txErrors/rxErrors 计数
  • 总线运行中勿插拔网线或从站设备
  • 更换从站设备后需确认 ENI 配置匹配
  • 保持 ENI 文件与硬件配置同步更新