当前位置:首页 > 工业控制 > 工业控制
[导读]工业控制把标准以太网当骨干,常因拥塞、排队、软件协议栈抖动出现毫秒级波动。TSN在Linux上用“统一时钟+时间门控+优先级整形+帧抢占”把控制报文放进确定时隙,配合支持硬件时间戳的网卡/交换芯片,端到端可做到亚毫秒甚至百微秒级。


工业控制把标准以太网当骨干,常因拥塞、排队、软件协议栈抖动出现毫秒级波动。TSN在Linux上用“统一时钟+时间门控+优先级整形+帧抢占”把控制报文放进确定时隙,配合支持硬件时间戳的网卡/交换芯片,端到端可做到亚毫秒甚至百微秒级。

一、内核与硬件底座

先确认网卡支持TSN,而不是只装软件:

ethtool -T eth0 | grep -E "hardware-transmit|hardware-receive"

ls /dev/ptp*           # 有PHC才可能亚微秒同步

ethtool -k eth0 | grep hw-tc-offload

内核开TSN相关项:802.1Qbv TAPRIO、802.1Qbu帧抢占、802.1Qav CBS、802.1AS gPTP,网卡驱动支持把GCL下放到硬件;纯软件tc只能做近似调度,达不到硬实时。 控制网关建议PREEMPT_RT,把ptp4l、taprio管理、控制收发线程绑独立核。

二、PTP统一全网时间

主钟用硬件时间戳,从钟同步PHC再同步系统:

# 主钟

ptp4l -i eth0 -m -H --masterOnly

# 从钟

ptp4l -i eth0 -m -H -s

phc2sys -s /dev/ptp0 -c CLOCK_REALTIME -w -m

# 查同步质量

pmc -u -b 0 'GET TIME_STATUS_NP' | grep offset

硬件时间戳下PHC间offset可到纳秒~百纳秒级,软件时间戳通常几十微秒甚至更差; gPTP用802.1AS、P2P延迟、L2传输最稳。 taprio的base-time必须基于PHC时间,所以先等ptp4l进入s2锁定再配门控。

三、taprio做控制报文时间窗

1ms周期示例:控制类200μs独占,其余背景800μs:

BASE=$(echo "$(date +%s) * 1000000000 + 5000000000" | bc)

tc qdisc replace dev eth0 parent root handle 100 taprio \

 num_tc 3 \

 map 0 0 0 0 1 1 1 1 2 2 2 2 2 2 2 2 \

 queues 1@0 1@1 1@2 \

 base-time $BASE \

 sched-entry S 01 200000 \

 sched-entry S 02 300000 \

 sched-entry S 04 500000 \

 flags 0x2 clockid CLOCK_TAI

num_tc 3表示控制、调度、背景三类;map把socket优先级/VLAN PCP映射到TC;flags 0x2走硬件GCL offload,门控在MAC/网卡执行,不依赖CPU软调度。 控制TC用单独队列且窗口靠前,背景流即使打满也不会抢占控制时隙。若周期更严,可把控制窗缩到100μs、加guard band防止大帧跨窗。

应用侧绑定优先级:

int prio = 6;   /* 对应控制TC */

setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio));

VLAN场景用ip把PCP映射到优先级:

ip link add link eth0 name eth0.100 type vlan id 100 egress-qos-map 6:6 0:0

四、CBS与帧抢占补抖动

音频/视频、OPC-UA历史流用CBS限带宽,避免信用整形拖控制:

tc qdisc replace dev eth0 parent 100:2 cbs \

 idleslope 10000000 sendslope -990000000 \

 hicredit 154 locredit -1389 offload 1

大背景帧穿越控制窗会增抖动,开802.1Qbu:

ethtool --set-mm eth0 pmac-enabled on tx-enabled on verify-enabled off

tc qdisc replace dev eth0 parent root handle 100 mqprio \

 num_tc 4 map 3 3 2 1 3 3 3 3 3 3 3 3 3 3 3 3 \

 queues 1@0 1@1 1@2 1@3 fp E P P P hw 1

表达队列不抢占、其余可抢占,控制小包走express,降低被大包阻塞概率。

五、交换机与Qci边界防护

Linux网关直连终端可做单跳;过工业交换机要把各端口GCL、VLAN PCP、802.1Qci逐流过滤对齐。Qci对异常广播、超时流做police,避免某个PLC疯发把控制窗占满。 配置全部进Git:网卡taprio、交换机GCL、PTP域号、VLAN、应用周期版本绑定,改一项重测一项。

六、时延验收

控制端发固定周期小包,接收端用硬件时间戳抓:

tcpdump -i eth0 -ttttt -n -e vlan -w tsn.pcap &

tc -s qdisc show dev eth0          # 看各TC丢包/超限/门控命中

cyclictest -a 2 -t1 -p90 -i1000 -d30m   # 控制核调度抖动基线

统计pcap发送/接收时差,取p99、p999而非平均;背景流量压到70%带宽复测,要求控制流最大延迟仍小于设定窗宽。若超亚毫秒,按“PTP offset→taprio硬件offload是否生效→IRQ是否绑核→交换机GCL是否对齐→大帧是否未开抢占”依次排查。

按“PHC硬件同步+taprio硬件门控+CBS/MM补抖动+Qci隔离异常流+RT内核绑核”搭建,工业网关在千兆TSN域内把控制报文稳定送进百微秒~亚毫秒时隙是可复现的;若网卡不支持硬件offload或只用软件PTP,就不要承诺硬亚毫秒,只能作为软实时过渡。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭