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 为离主站最近的设备),servoNum、IONum、switchNum 分别表示该位置的从站类型和编号。


从站状态监控 ​

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 文件与硬件配置同步更新