跳到主要内容

CC-Link IE Field Basic 通讯

概述

CC-Link IE Field Basic 是三菱电机主导的工业以太网协议, 基于标准以太网 (IEEE 802.3), 在 TCP/UDP 上实现循环通讯和瞬时报文。Darra PLC 通过 CclinkIeFieldBasicAdapter 支持 Manager 角色, 可接入 CC-Link IE Field Basic 兼容设备。

协议特性

特性说明
标准CC-Link IE Field Basic (CLPA)
物理层100BASE-TX / 1000BASE-T
传输层TCP + UDP
端口61450~61469 (Manager 用)
周期1~50 ms (循环通讯)
最大节点数64 (Manager 1 + Device 63)
最大站间距离100 m (星型)
拓扑星型 (标准以太网交换机)
特性IE Field BasicIE Field (完整版)
物理层标准以太网标准以太网
循环通讯软件 UDP硬件 (ASIC)
实时性软实时 (1~50 ms)硬实时 (< 1 ms)
拓扑星型环型 / 星型
主站硬件标准网卡专用 CC-Link 主站卡
适用场景小规模、混合协议大规模、高实时
成本低 (无需专用硬件)高 (需专用接口卡)

Manager 与 Device 角色

Manager (主站)

Darra PLC 作为 Manager, 负责:

  • 管理循环通讯周期
  • 维护设备状态表
  • 发送轮询报文
  • 处理瞬时报文
var manager = new CclinkIeFieldBasicManager();
manager.Configure(new CclinkManagerConfig {
LocalStation = 1, // Manager 站号 (通常 1)
CycleTimeMs = 10, // 循环周期 10 ms
Port = 61450, // Manager 监听端口
TimeoutMs = 5000, // 设备超时检测
MaxRetries = 3 // 通讯重试次数
});

Device (从站)

Device 是 CC-Link IE Field Basic 的从站设备:

  • 响应 Manager 的轮询请求
  • 提供循环数据 (RX/RY/RWr/RWw)
  • 支持瞬时报文 (按需通讯)
// 添加 Device 到 Manager 设备表
manager.AddDevice(new CclinkDeviceConfig {
Station = 2, // 设备站号 (2~64)
RemoteIp = "192.168.1.101", // 设备 IP 地址
Port = 61451, // 设备端口 (base + 站号)
RxCount = 32, // 远程输入 (RX) 点数, bit
RyCount = 32, // 远程输出 (RY) 点数, bit
RWrCount = 8, // 远程寄存器输入 (RWr), word
RWwCount = 8 // 远程寄存器输出 (RWw), word
});

循环通讯

通讯机制

CC-Link IE Field Basic 的循环通讯基于轮询模式:

Manager                               Device 1                           Device 2
│ │ │
│ 1. 轮询 Device 1 │ │
│ ── 轮询请求 (RY + RWw) ──────────► │ │
│ ◄── 轮询响应 (RX + RWr) ────────── │ │
│ │ │
│ 2. 轮询 Device 2 │ │
│ ── 轮询请求 (RY + RWw) ───────────────────────────────────────────────► │
│ ◄── 轮询响应 (RX + RWr) ─────────────────────────────────────────────── │
│ │ │
3. 循环周期完成, 更新 PLC 变量
4. 等待下一个周期开始

循环数据格式

每个 Device 在循环通讯中交换四种数据:

类型名称单位方向说明
RXRemote InputbitDevice → Manager设备状态、DI 信号
RYRemote OutputbitManager → Device设备控制、DO 指令
RWrRemote Register Inputword (16-bit)Device → Manager模拟量输入、数值反馈
RWwRemote Register Outputword (16-bit)Manager → Device模拟量输出、数值设定

数据映射到 PLC 地址

// 在 IDE 中配置映射
manager.AddMapping(new CclinkMapping {
DeviceStation = 2,
PlcMapping = new List<CclinkMapEntry> {
// RX 映射到 PLC 输入位
new CclinkMapEntry { CclinkType = "RX", Start = 0, PlcStart = "%IX100", Count = 32 },
// RY 映射到 PLC 输出位
new CclinkMapEntry { CclinkType = "RY", Start = 0, PlcStart = "%QX100", Count = 32 },
// RWr 映射到 PLC 输入字
new CclinkMapEntry { CclinkType = "RWr", Start = 0, PlcStart = "%IW200", Count = 8 },
// RWw 映射到 PLC 输出字
new CclinkMapEntry { CclinkType = "RWw", Start = 0, PlcStart = "%QW200", Count = 8 },
}
});

在 SCL 程序中使用:

(* 读取 Device 2 的 RX0 状态 — 设备就绪 *)
IF %IX100.0 THEN
Device2_Ready := TRUE;
END_IF;

(* 控制 Device 2 的 RY0 — 启动 *)
%QX100.0 := Start_Button;

(* 读取 Device 2 的 RWr0 — 温度值 *)
Temperature := %IW200; (* 原始值, 需工程量转换 *)

(* 设定 Device 2 的 RWw0 — 目标温度 *)
%QW200 := TargetTemp;

瞬时报文

瞬时报文用于非周期的按需数据交换, 类似 Modbus 的读写请求:

特性说明
传输TCP (可靠)
触发按需, 由用户程序或 API 调用
数据任意长度 (≤ 2048 字节)
用途参数读写、诊断、配置
优先级低于循环通讯
// 发送瞬时报文, 读取 Device 2 的参数
var response = await manager.SendTransientAsync(
station: 2,
service: TransientService.ReadParameter,
data: new byte[] { 0x00, 0x01 } // 参数号
);
Console.WriteLine($"参数值: {BitConverter.ToUInt16(response.Data, 0)}");

// 写入参数
await manager.SendTransientAsync(
station: 2,
service: TransientService.WriteParameter,
data: new byte[] { 0x00, 0x01, 0x00, 0x64 } // 参数 1 = 100
);

配置步骤

1. 网络规划

参数说明
Manager 站号1固定, 唯一 Manager
Device 站号2~64每个设备唯一
每个设备的 RX/RY32~256 bit按需分配
每个设备的 RWr/RWw4~32 word按需分配
循环周期1~50 ms所有设备轮询完的总时间

2. 在 IDE 中配置

项目树 → 通讯 → CC-Link IE Field Basic → 添加设备:

1. 选择 Manager 角色, 设置站号
2. 添加 Device, 输入 IP 地址和站号
3. 配置 RX/RY/RWr/RWw 点数
4. 映射到 PLC 地址空间
5. 编译下载到 Service

3. 配置参数总览

{
"cclinkConfig": {
"manager": {
"station": 1,
"cycleTimeMs": 10,
"port": 61450,
"timeoutMs": 5000
},
"devices": [
{
"station": 2,
"remoteIp": "192.168.1.101",
"port": 61451,
"rxCount": 32,
"ryCount": 32,
"rwRCount": 8,
"rwWCount": 8,
"plcMapping": {
"rxStart": 100,
"ryStart": 100,
"rwRStart": 200,
"rwWStart": 200
}
},
{
"station": 3,
"remoteIp": "192.168.1.102",
"port": 61452,
"rxCount": 16,
"ryCount": 16,
"rwRCount": 4,
"rwWCount": 4,
"plcMapping": {
"rxStart": 120,
"ryStart": 120,
"rwRStart": 210,
"rwWStart": 210
}
}
]
}
}

4. 循环周期估算

周期 = Σ(每个 Device 的轮询时间)

单 Device 轮询时间 ≈ 基础延迟 + 数据量 × 传输时间
基础延迟: 约 0.5 ms (UDP 往返)
传输时间: 每 100 字节约 0.01 ms (100 Mbps)

例: 10 个 Device, 每个 32 字节数据
单设备轮询 ≈ 0.5 + 0.003 ≈ 0.5 ms
总周期 ≈ 10 × 0.5 = 5 ms → 配置 10 ms 留余量

数据映射

完整映射示例

Device 2 (站号 2, 32 RX + 32 RY + 8 RWr + 8 RWw):

RX (Device → Manager):
RX0~RX31 → %IX100.0~%IX103.7
RX0 = 设备就绪
RX1 = 运行中
RX2 = 故障
RX3~RX31 = 用户自定义

RY (Manager → Device):
RY0~RY31 → %QX100.0~%QX103.7
RY0 = 启动
RY1 = 停止
RY2 = 复位
RY3~RY31 = 用户自定义

RWr (Device → Manager, 16-bit):
RWr0~RWr7 → %IW200~%IW207
RWr0 = 温度 PV
RWr1 = 压力 PV
RWr2 = 速度
RWr3~RWr7 = 保留

RWw (Manager → Device, 16-bit):
RWw0~RWw7 → %QW200~%QW207
RWw0 = 温度 SP
RWw1 = 压力 SP
RWw2~RWw7 = 保留

字节序

CC-Link IE Field Basic 使用 小端序 (Little-Endian):

  • 16 位数据: 低字节在前 (与 Modbus 大端不同)
  • 32 位数据: 低字在前
// 从 RWr 读取 16 位无符号整数 (小端)
ushort temp = (ushort)(%IW200); // 直接使用, 无需转换

// 从 RWr 读取 32 位浮点数 (小端)
uint raw = (uint)(%ID200); // 两个连续字合成 DWORD
float value = BitConverter.ToSingle(BitConverter.GetBytes(raw), 0);

诊断

设备状态

var status = manager.GetDeviceStatus(2);
Console.WriteLine($"运行状态: {status.RunState}"); // Running / Stopped / Error
Console.WriteLine($"循环通讯: {status.CycleState}"); // Normal / Abnormal
Console.WriteLine($"间隔: {status.LastCycleTimeMs} ms");
Console.WriteLine($"误码率: {status.ErrorRate:F4}"); // 通讯错误比例
Console.WriteLine($"最近错误: {status.LastError}"); // 时间戳 + 错误码

诊断指标

指标说明正常范围
循环周期实际周期与设定周期的偏差±20%
设备响应超时设备未响应次数0
通讯错误率错误帧占总帧的比例< 0.1%
重试次数因超时自动重试的次数0
最近错误码最后一次通讯错误的原因0 (无错误)

诊断面板

IDE 的 CC-Link 诊断面板显示:

  • 网络拓扑: 所有设备在线状态, 用颜色标记 (绿/黄/红)
  • 循环数据: 实时显示每个设备的 RX/RY/RWr/RWw 值
  • 通讯统计: 周期计数、错误计数、重试统计
  • 事件日志: 设备上线/离线/错误事件的时间线

排错指南

症状原因处理
设备不在线站号冲突或 IP 不可达检查 IP 和站号配置, ping 确认
循环通讯中断设备超时检查网络连接, 确认设备运行
RX/RY 数据不更新设备不在 Run 状态发送瞬时报文启动设备
循环周期 > 设定值设备过多或网络延迟大减少设备数或增大周期
通讯错误率上升网络干扰或交换机问题检查交换机端口统计, 更换网线
瞬时报文超时设备忙 (正在处理循环数据)增大超时时间, 避免高峰期发送
数据映射错位RX/RY/RWr/RWw 计数值配置不对核对设备规格书, 确认点数
字节序错误大端/小端混淆CC-Link 为小端, 检查数据转换

限制

  • CC-Link IE Field Basic 为软实时协议, 不适合要求 < 1 ms 硬实时响应的运动控制
  • Manager 最多管理 63 个 Device, 实际受网络带宽和周期时间限制
  • 瞬时报文会抢占循环通讯带宽, 高频瞬时报文会导致循环周期抖动
  • 不支持环型拓扑 (冗余), 仅星型拓扑
  • 不支持 CC-Link IE Field (完整版) 的 SLMP (Seamless Message Protocol) 扩展功能