时间敏感网络(TSN)在工业PLC中基于NXP i.MX RT1170的实现
扫描二维码
随时随地手机看文章
一、TSN与工业PLC概述
时间敏感网络(TSN)是一组IEEE 802.1标准,旨在为以太网提供确定性的数据传输能力,满足工业自动化等领域对实时性的严格要求。工业PLC(可编程逻辑控制器)是工业自动化的核心设备,负责控制生产过程中的各种设备和工艺流程。将TSN技术应用于工业PLC,可以显著提高系统的实时性、可靠性和灵活性。
二、NXP i.MX RT1170简介
NXP i.MX RT1170是一款高性能的跨界处理器,结合了微控制器(MCU)的易用性和微处理器(MPU)的高性能。它集成了多个以太网控制器,支持TSN功能,包括gPTP(通用精确时间协议)时钟同步和流量调度,非常适合用于工业PLC的TSN实现。
三、gPTP时钟同步实现
(一)gPTP原理
gPTP是TSN中用于实现高精度时钟同步的协议,它基于IEEE 1588精确时间协议(PTP)发展而来。gPTP通过主从时钟架构,主时钟周期性地发送时间同步报文,从时钟根据这些报文调整自己的本地时钟,从而实现整个网络中的时钟同步。
(二)i.MX RT1170上的gPTP实现步骤
1. 硬件准备
选择支持gPTP的以太网控制器:i.MX RT1170的以太网控制器需要支持IEEE 1588时间戳功能,以便在发送和接收报文时记录精确的时间戳。
连接网络:将i.MX RT1170与TSN交换机或其他支持gPTP的设备连接,确保网络拓扑符合gPTP的要求。
2. 软件配置
选择操作系统和协议栈:可以使用NXP提供的MCUXpresso SDK,其中包含了gPTP协议栈的实现。也可以选择开源的gPTP协议栈,如LinuxPTP,并进行移植。
配置gPTP参数:
主时钟配置:如果i.MX RT1170作为主时钟,需要设置其时钟源(如外部晶振)的精度和稳定性参数,以及gPTP报文的发送周期和优先级。
从时钟配置:如果i.MX RT1170作为从时钟,需要配置其接收gPTP报文的接口,并设置时钟同步的算法和参数,如同步间隔、延迟测量方式等。
3. 代码示例(基于MCUXpresso SDK)
c
#include "fsl_enet.h"
#include "fsl_gptp.h"
// gPTP实例句柄
gptp_handle_t gptpHandle;
// 初始化gPTP
void gptp_init(void) {
gptp_config_t gptpConfig;
// 获取默认配置
GPTP_GetDefaultConfig(&gptpConfig);
// 配置gPTP参数
gptpConfig.ptpDomain = 0; // PTP域
gptpConfig.twoStepFlag = true; // 使用两步时钟
gptpConfig.primaryDomain = true; // 作为主时钟(如果需要)
// 初始化gPTP
GPTP_Init(ENET, &gptpHandle, &gptpConfig, CLOCK_GetFreq(kCLOCK_CoreSysClk));
// 启动gPTP
GPTP_Start(&gptpHandle);
}
// 处理gPTP事件(如报文接收)
void gptp_event_handler(ENET_Type *base, gptp_handle_t *handle, gptp_event_t event, void *param) {
switch (event) {
case kGPTP_EventSyncReceived:
// 处理同步报文接收事件
break;
case kGPTP_EventDelayReqReceived:
// 处理延迟请求报文接收事件
break;
default:
break;
}
}
int main(void) {
// 初始化硬件(如时钟、以太网控制器等)
// ...
// 初始化gPTP
gptp_init();
// 注册gPTP事件处理函数
GPTP_SetEventHandler(&gptpHandle, gptp_event_handler, NULL);
while (1) {
// 主循环
}
}
4. 时钟同步测试与优化
测试时钟同步精度:使用高精度的时钟测量工具,测量主从时钟之间的时间偏差,确保时钟同步精度满足工业PLC的要求(通常在微秒级甚至纳秒级)。
优化网络参数:根据测试结果,调整gPTP报文的发送周期、网络拓扑和链路质量,以提高时钟同步的稳定性和精度。
四、流量调度实现
(一)TSN流量调度机制
TSN定义了多种流量调度机制,如基于时间感知整形器(TAS)、信用整形器(CBS)和异步流量整形器(ATS)等,用于保证不同优先级流量的确定性传输。在工业PLC中,通常使用TAS机制来确保关键控制流量的实时传输。
(二)i.MX RT1170上的TAS实现步骤
1. 流量分类与标记
定义流量类型:根据工业PLC的业务需求,将流量分为关键控制流量、实时监控流量和普通数据流量等不同类型。
标记流量优先级:使用VLAN标签或802.1Q优先级字段对不同类型的流量进行标记,以便TSN交换机和i.MX RT1170能够识别和处理。
2. 配置TAS门控列表(GCL)
GCL原理:GCL定义了在不同时间窗口内允许传输的流量类型。通过合理配置GCL,可以确保关键控制流量在预定的时间窗口内优先传输,避免与其他流量发生冲突。
配置步骤:
确定时间窗口:根据工业PLC的控制周期和实时性要求,确定关键控制流量的传输时间窗口。
配置GCL条目:在i.MX RT1170的以太网控制器中配置GCL条目,指定每个时间窗口内允许传输的流量类型和对应的VLAN ID或优先级。
3. 代码示例(基于MCUXpresso SDK)
c
#include "fsl_enet.h"
#include "fsl_tsn.h"
// TSN实例句柄
tsn_handle_t tsnHandle;
// 初始化TSN和TAS
void tsn_tas_init(void) {
tsn_config_t tsnConfig;
tsn_tas_config_t tasConfig;
// 获取默认TSN配置
TSN_GetDefaultConfig(&tsnConfig);
// 初始化TSN
TSN_Init(ENET, &tsnHandle, &tsnConfig, CLOCK_GetFreq(kCLOCK_CoreSysClk));
// 配置TAS参数
tasConfig.gateControlListSize = 8; // GCL条目数量
// 配置GCL条目(示例)
tasConfig.gateControlList[0].timeInterval = 1000; // 时间窗口长度(单位:纳秒)
tasConfig.gateControlList[0].gateStates = 0x01; // 允许传输的流量类型(二进制位表示)
// ... 配置其他GCL条目
// 初始化TAS
TSN_TAS_Init(&tsnHandle, &tasConfig);
// 启动TAS
TSN_TAS_Start(&tsnHandle);
}
int main(void) {
// 初始化硬件(如时钟、以太网控制器等)
// ...
// 初始化TSN和TAS
tsn_tas_init();
while (1) {
// 主循环
}
}
4. 流量调度测试与验证
测试流量传输延迟:使用网络测试工具,测量关键控制流量的传输延迟和抖动,确保其满足工业PLC的实时性要求。
验证流量隔离性:检查不同优先级流量之间的隔离性,确保关键控制流量不会受到其他流量的干扰。
五、总结
通过在NXP i.MX RT1170上实现gPTP时钟同步和流量调度,可以构建一个基于TSN的工业PLC系统,实现高精度的时钟同步和确定性的数据传输。在实际应用中,需要根据具体的工业场景和需求,对gPTP和TAS的参数进行优化和调整,以确保系统的性能和可靠性。同时,还需要考虑网络安全、故障诊断等方面的问题,以保障工业PLC系统的稳定运行。