CiA 401 - I/O 模块
CiA 401 是 CANopen 通用 I/O 模块设备协议,定义了数字和模拟 I/O 设备的标准接口,是最基础的 I/O 设备协议,几乎所有 I/O 模块厂商都遵循此标准。
协议简介
什么是 CiA 401?
CiA 401 是一个基于 CoE (CANopen over EtherCAT) 的设备协议,专门为通用 I/O 模块定义标准接口。
协议层次关系:
EtherCAT 应用层
└── CoE (CANopen over EtherCAT)
├── CiA 401 (通用 I/O 模块) ← 当前协议
├── CiA 402 (驱动器和运动控制)
└── 其他 CiA 设备协议
CiA 401 定义了什么?
CiA 401 在 CoE 对象字典的 0x6000-0x64FF 范围内定义了:
- 数字输入/输出对象 (0x6000-0x63FF)
- 模拟输入/输出对象 (0x6400-0x64FF)
- 极性和滤波配置
- 中断配置
- 传感器类型定义
适用设备
- 数字 I/O 模块(如 Beckhoff EL2008, EL1008)
- 模拟 I/O 模块(如 Beckhoff EL3064, EL4004)
- 混合 I/O 模块
- 传感器接口模块
数字 I/O 对象
数字输入 (DI)
| 索引 | 名称 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 0x6000 | Read Input 8 Bit | UNSIGNED8 | RO/TXPDO | 8位数字输入 |
| 0x6001 | Read Input 16 Bit | UNSIGNED16 | RO/TXPDO | 16位数字输入 |
| 0x6002 | Read Input 32 Bit | UNSIGNED32 | RO/TXPDO | 32位数字输入 |
| 0x6003 | Read Input Bit 1-128 | ARRAY | RO/TXPDO | 单位访问 |
| 0x6005 | Read Input Byte 1-128 | ARRAY | RO/TXPDO | 字节访问 |
数字输入极性与滤波
| 索引 | 名称 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 0x6100 | Input Polarity 8 Bit | UNSIGNED8 | RW | 8位输入极性 |
| 0x6150 | Input Filter Constant | ARRAY | RW | 输入滤波常数(μs) |
数字输出 (DO)
| 索引 | 名称 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 0x6200 | Write Output 8 Bit | UNSIGNED8 | RW/RXPDO | 8位数字输出 |
| 0x6201 | Write Output 16 Bit | UNSIGNED16 | RW/RXPDO | 16位数字输出 |
| 0x6202 | Write Output 32 Bit | UNSIGNED32 | RW/RXPDO | 32位数字输出 |
| 0x6206 | Error Mode Output 8 Bit | UNSIGNED8 | RW | 错误模式输出值 |
| 0x6207 | Error Value Output 8 Bit | UNSIGNED8 | RW | 错误时输出值 |
数字输出极性
| 索引 | 名称 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 0x6300 | Output Polarity 8 Bit | UNSIGNED8 | RW | 8位输出极性 |
模拟 I/O 对象
模拟输入 (AI)
| 索引 | 名称 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 0x6401 | Read Analog Input 16 Bit | INTEGER16 | RO/TXPDO | 16位模拟输入 |
| 0x6402 | Read Analog Input 32 Bit | INTEGER32 | RO/TXPDO | 32位模拟输入 |
| 0x6420 | Analog Input Full Scale Range | RECORD | RO | 模拟输入全量程范围 |
模拟输出 (AO)
| 索引 | 名称 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 0x6411 | Write Analog Output 16 Bit | INTEGER16 | RW/RXPDO | 16位模拟输出 |
| 0x6412 | Write Analog Output 32 Bit | INTEGER32 | RW/RXPDO | 32位模拟输出 |
| 0x6430 | Analog Output Full Scale Range | RECORD | RO | 模拟输出全量程范围 |
| 0x6440 | Analog Output Error Mode | ARRAY | RW | 错误模式 |
代码示例
数字 I/O 控制
// 读取数字输入
byte[] data = slave.CoE.SDORead(0x6000, 0);
byte inputs = data[0];
Console.WriteLine($"数字输入: 0x{inputs:X2}");
// 写入数字输出
byte outputs = 0xFF; // 所有输出置高
slave.CoE.SDOWrite(0x6200, 0, new byte[] { outputs });
// 通过 PDO(实时)
byte[] pdoInputs = slave.PDO.GetInputs();
byte[] pdoOutputs = new byte[] { 0xFF };
slave.PDO.SetOutputs(pdoOutputs);
模拟量采集
// 读取模拟输入
byte[] data = slave.CoE.SDORead(0x6401, 1); // 通道1
short analogValue = BitConverter.ToInt16(data, 0);
Console.WriteLine($"模拟输入: {analogValue}");
// 写入模拟输出
short outputValue = 2048;
slave.CoE.SDOWrite(0x6411, 1, BitConverter.GetBytes(outputValue));