昨天聊完黑白还是彩色,结尾说下一步该盯接口和带宽。先补一句:彩色相机要是在机内直接转成 RGB 再往外送,数据量比原始 Bayer 一下翻三倍。这事在现场可不是纸上谈兵。
去年调一台四工位的外观机,四台 500 万黑白相机,客户图省事全插在一台小交换机上,交换机再用一根网线进工控机。单独开哪一台都好好的,四台一起触发,图像要么缺一截、要么直接报丢帧。电工怀疑网线,换了三轮;软件怀疑驱动,重装两遍。后来拿计算器一算,四台加起来的数据量是那根网线能扛的三倍多,神仙也传不过去。
相机接口这件事,规格书上就几个缩写,选错了后面全是坑。这篇把四种常见接口的带宽、线长、CPU 占用一起摆出来,再讲多相机组网和我自己的选型套路。
四种接口,先看能跑多少数据
带宽的单位先统一一下。接口标称一般用 bit/s,图像数据量习惯用 Byte/s,换算就是除以 8:
BWMB/s=BWMbps8 \mathrm{BW_{MB/s}} = \frac{\mathrm{BW_{Mbps}}}{8}BWMB/s=8BWMbps
GigE(千兆网口):标称 1000 Mbps,除以 8 是 125 MB/s。这是理论值,扣掉以太网帧头、IP/UDP 包头、GigE Vision 协议包头,再加上重发和间隔,实际稳定传图我一般按 100~110 MB/s 估。这是工程估算,不是标准里写的数,网卡、交换机、巨帧开没开都会让它上下浮动。
USB3(5 Gbps 那一档):标称 5 Gbps 是线路速率,物理层 8b/10b 编码先吃掉两成,剩 4 Gbps 也就是 500 MB/s,再扣协议开销,实际视觉载荷我按 350~400 MB/s 估,同样是经验值。主板 USB 控制器的质量差别很大,这个数在不同工控机上能差出一截。
Camera Link:要配采集卡。Base 配置是 85 MHz 时钟、24 位并行,算下来 255 MB/s;Medium 翻倍到 510 MB/s,Full 是 64 位,680 MB/s。数据走专用线,几乎不占 CPU,时序也很稳,老项目、线扫项目里还常见。
CoaXPress(简称 CXP):同样要配采集卡,走同轴线。CXP-6 单根线速 6.25 Gbps,扣掉 8b/10b 编码后单根大约 625 MB/s,四根并起来就是 2500 MB/s 量级。更高档的 CXP-12 单根还能再翻倍。高速线扫、大面阵高帧率,基本是它的地盘。
线缆长度和 CPU 占用,往往比带宽更早卡你
带宽够了不代表能用。我见过不少项目到头来是被线长和 CPU 卡死的。
线长这块,GigE 是网线,标准能到 100 米,机台大、相机离电柜远,几乎只能选它。USB3 无源线 3 米左右最稳,超过 5 米就得上有源线或光纤线,拖链里反复弯折更容易出问题。Camera Link 线粗、贵,85 MHz 下一般 10 米以内,Full 配置还要更短。CXP 走同轴,CXP-6 单根三四十米很常见,还能通过同轴线给相机供电,布线反而省心。
CPU 占用这块,GigE 是最吃 CPU 的:图像被拆成成千上万个小网络包,每个包都要网卡和驱动处理,不装厂家的过滤驱动、不开巨帧,CPU 能被中断吃掉一大块。USB3 走 DMA,好一些,但工控机 USB 口是共享控制器的,插多了会互相抢。Camera Link 和 CXP 都是采集卡直接把整帧 DMA 到内存,CPU 基本闲着,代价是多一张卡的钱和一个 PCIe 槽。
经验一:选 GigE 之前先问清楚工控机网卡是什么芯片、有没有独立网口。主板自带的单网口还要兼顾上位机通讯,拿来跑相机,迟早出事。
经验二:USB3 相机在现场最怕的是线。有一次调试好好的,设备一跑起来就断,查了半天是拖链里线芯被反复弯折,接触时好时坏。后来我的习惯是 USB3 只用在相机不动、线短的场合,线一律带锁紧螺丝。
多相机组网:带宽是加起来算的
回到开头那台四工位机。单台 500 万像素是 2448×2048,8 位黑白,每帧 5013504 字节。客户要每台 20 帧:
BW1=2448×2048×20×1≈100.27 MB/s \mathrm{BW_{1}} = 2448 \times 2048 \times 20 \times 1 \approx 100.27\ \mathrm{MB/s}BW1=2448×2048×20×1≈100.27MB/s
一台就差不多把一个 GigE 口吃满了。四台汇到交换机,再用一根千兆上联进工控机:
BW4=4×100.27≈401.08 MB/s \mathrm{BW_{4}} = 4 \times 100.27 \approx 401.08\ \mathrm{MB/s}BW4=4×100.27≈401.08MB/s
按 110 MB/s 算,是上联能力的 3.6 倍多。四台同时触发时数据又是同一瞬间涌过来的,交换机缓存一满,直接扔包。后来改成工控机插一张四口千兆网卡,每台相机独占一个口,问题当天就没了。
多相机组网我一般注意这几件事:
- 一台相机一个网口,别让多台共享一根千兆上联;非要过交换机,上联得是万兆。
- 多台同时硬触发时,开相机的包间隔或帧延时设置,把数据错开一点,别让它们同时砸进网卡。
- USB3 多相机要看清楚是不是同一个主控芯片,四个口挂在一个控制器上,也就 350~400 MB/s 大家分。
- PoE 供电要算交换机或网卡的总功率预算,相机多了,有时候会出现个别相机反复重启。
我自己选接口的三步
我不太爱看那种一大张对比表,现场其实就三个问题。
第一个问题:单台相机要多少带宽。按分辨率×帧率×每像素字节算出来,100 MB/s 以内 GigE 基本够;100 到 350 MB/s 之间,看 USB3 或者 2.5G/5G/10G 的网口相机;再往上,或者是高速线扫,就直接考虑 CXP,老产线有现成采集卡的也可以继续用 Camera Link。
第二个问题:相机离工控机多远。超过 5 米,USB3 基本出局;超过 10 米,Camera Link 也出局;剩下 GigE 和 CXP。几十米以上还要高带宽,CXP 或者光纤方案。
第三个问题:一台工控机挂几台相机。相机多、单台带宽不高,GigE 加多口网卡最省事,也最容易维护;相机少但每台都很快,用采集卡把 CPU 腾出来做算法更划算。
三步走完,一般就剩一两个选项,再看预算和现场维护人员熟不熟。我自己做的项目,七八成到头来都落在 GigE 上——不是它最快,是它线长、好买、好换、电工也会接。
接口定了,下一步就得精确算账:分辨率、帧率、位深乘起来,带宽到底够不够,ROI 和 Binning 怎么帮你把帧率拉上去,GigE 又为什么老丢帧。
下篇聊相机帧率与带宽计算:分辨率×帧率×位深,带宽到底够不够,顺带把 GigE 丢帧的常见原因捋一遍。