2. GigE Vision协议栈解析

GigE Vision并不是一个单一协议,而是把千兆以太网、IP/UDP、GVCP控制通道、GVSP流通道以及GenICam应用模型组合起来的一整套相机通信规范。理解它的分层结构,是后续排查带宽瓶颈、丢包、断流和延迟问题的前提。下面按物理层到应用层逐层展开,并说明Basler相机在这些层次上的实现特点。

物理层:1000BASE-T与线缆、供电

物理层决定电气信号、编码方式和介质。GigE Vision相机通常工作在1000BASE-T模式,使用Cat5e及以上双绞线,单段最长100米。物理层采用4对线全双工传输,每对线250Mbit/s,通过PAM-5编码和回波消除实现1Gbit/s。Basler的dart、ace、boost等系列相机在物理层上支持自动协商,但工业现场更推荐固定为1000Mbps全双工,避免协商到100Mbps导致带宽骤降。

供电方面,GigE Vision定义了PoE(Power over Ethernet)可选方案,符合IEEE 802.3af/at。Basler部分型号支持PoE,可由PoE交换机或注入器供电,减少现场布线。需要注意:PoE供电时线缆发热和压降会影响信号质量,长距离或高温环境应核算功率余量。

链路层:以太网帧与巨帧

链路层负责把IP数据包封装成以太网帧,包含源/目的MAC地址、类型字段和FCS校验。标准以太网MTU为1500字节,而GigE Vision推荐启用巨帧(Jumbo Frame),MTU通常设为9000字节。巨帧能显著降低每帧的协议开销和中断次数,提高有效吞吐。Basler相机默认支持巨帧,但要求网卡、交换机、相机三端MTU一致,否则会出现分片或丢包。

链路层还有一个关键点:流控。全双工下不使用CSMA/CD,但可通过PAUSE帧进行流量控制。Basler相机可配置是否响应PAUSE帧,配合支持流控的交换机可缓解突发拥塞。

网络层:IP、子网与路由

网络层使用IPv4,负责寻址和路由。GigE Vision设备支持DHCP、静态IP和LLA(链路本地地址,169.254.x.x)。Basler相机出厂默认多为DHCP,若网络中没有DHCP服务器,会自动回退到LLA。多网卡主机上,必须确保相机所在网段与对应网卡在同一子网,否则会出现“能发现但连不上”的现象。

网络层还涉及IGMP和组播。GigE Vision的GVSP流默认使用单播,但在多相机或多接收端场景下可启用组播。组播需要交换机支持IGMP Snooping,否则组播帧会泛洪到所有端口,浪费带宽。Basler的pylon软件在设备发现阶段使用广播,流传输阶段默认单播,这是实际部署中最稳妥的组合。

传输层:UDP与GVCP/GVSP

传输层是GigE Vision的核心。它不使用TCP,而是基于UDP,原因在于工业视觉对实时性和低延迟的要求高于可靠性,TCP的重传和拥塞控制会引入不可控延迟。GigE Vision在UDP之上定义了两个通道:

  • GVCP(GigE Vision Control Protocol):控制通道,端口通常为3956。用于设备发现、寄存器读写、流通道配置、心跳和事件通知。GVCP使用请求/应答模式,带重传机制,保证控制命令可靠。
  • GVSP(GigE Vision Streaming Protocol):流通道,端口由相机动态分配。用于传输图像数据、块数据和状态信息。GVSP不保证可靠,丢包由上层通过帧ID和包序号检测,必要时由应用决定是否重传或丢弃。

Basler相机在传输层的实现特点包括:支持GVCP心跳超时配置,默认心跳间隔约3秒,超时后相机会释放流通道;GVSP包大小可调,通常与MTU匹配;支持“包重传”请求,但实际是否重传由主机端pylon决定。理解GVCP和GVSP的分工,是排查“能控制但无图像”或“有图像但控制无响应”的关键。

应用层:GenICam与Basler实现

应用层由GenICam标准定义,它把相机功能抽象为特征树(Feature Tree),包括图像格式、曝光、增益、触发、ROI、像素格式等。GigE Vision通过XML描述文件把相机能力暴露给主机,pylon或第三方软件解析XML后生成可操作的参数节点。Basler相机在应用层的实现特点包括:

  • 完整的GenICam兼容性,支持SFNC(Standard Features Naming Convention),参数命名规范统一。
  • 支持Pylon SDK、GenICam GenTL和第三方库(如Halcon、LabVIEW、OpenCV通过GenTL)。
  • 提供“设备用户集”(User Set)功能,可保存多组参数配置,便于快速切换不同检测任务。
  • 支持事件通知(Event)和块数据(Chunk Data),可在图像中附加时间戳、帧ID、曝光值等元数据。

应用层的配置直接影响前四层的负载。例如,提高帧率或增大ROI会增加GVSP数据量,进而考验链路层和物理层带宽;启用块数据会增加每帧的附加字节,但通常影响很小。Basler的pylon Viewer中,可以通过“Stream Grabber”查看实际吞吐和丢包统计,这是验证协议栈各层是否匹配的实用手段。

GigE Vision 协议栈分层与 Basler 实现要点 应用层 · GenICam / Basler pylon 特征树 · XML描述 · SFNC命名 · User Set · Chunk Data · 事件通知 pylon Viewer / SDK / GenTL / Halcon / LabVIEW 传输层 · UDP GVCP 控制通道(端口3956)· 请求/应答 · 心跳 · 寄存器读写 GVSP 流通道(动态端口)· 图像/块数据 · 包序号 · 帧ID · 不保证可靠 Basler:心跳超时约3s · 包大小可调 · 重传由主机决定 网络层 · IPv4 DHCP / 静态IP / LLA(169.254.x.x) · 子网匹配 · 单播/组播 · IGMP Snooping Basler:默认DHCP,无DHCP回退LLA;流默认单播 链路层 · 以太网 MAC地址 · 类型字段 · FCS · MTU 1500 / 巨帧9000 · PAUSE流控 Basler:支持巨帧,需网卡/交换机/相机三端一致 物理层 · 1000BASE-T Cat5e+ · 100m · 4对全双工 · PAM-5 · 自动协商 · PoE(802.3af/at) Basler:推荐固定1000Mbps全双工;部分型号支持PoE 数据封装方向 控制/配置方向 GVCP负责控制与发现,GVSP负责图像流;两者均基于UDP,分层协作决定带宽与稳定性

分层协作与Basler实现特点小结

从物理层到应用层,每一层都有明确的职责和可调参数。物理层和链路层决定“能不能通、通得多快”,网络层决定“找不找得到、走哪条路”,传输层决定“控制是否可靠、流是否实时”,应用层决定“怎么用、用得好不好”。Basler的实现特点可以概括为:物理层推荐固定千兆全双工并支持PoE;链路层支持巨帧但要求三端一致;网络层默认DHCP+LLA回退,流默认单播;传输层GVCP心跳约3秒、GVSP包大小可调;应用层完整兼容GenICam和SFNC,提供User Set、Chunk Data和事件机制。

在实际部署中,建议按“物理层→链路层→网络层→传输层→应用层”的顺序逐层检查:先确认线缆和协商速率,再确认MTU和流控,然后确认IP和子网,接着确认GVCP心跳和GVSP包大小,最后在pylon中查看吞吐和丢包统计。这样能把“相机连不上”“图像卡顿”“控制无响应”等问题快速定位到具体层次。