当前位置: 首页 > news >正文

GIGE 协议摘录

在这里插入图片描述

系列文章目录


GIGE 学习笔记
GIGE 协议摘录


文章目录

  • 系列文章目录
  • 引言
  • 第 1 章 设备发现
    • 1.1 链路选择
      • 1.1.1 单链路配置
      • 1.1.2 多链路配置
      • 1.1.3 链路聚合组配置 LAG
    • 1.2 IP配置
      • 1.2.1 协议选择
      • 1.2.2 静态IP
      • 1.2.3 DHCP
      • 1.2.4 链接本地地址 LLA
    • 1.3 设备枚举
      • 1.3.1 GVCP设备发现
        • 广播设备发现
        • 单播设备发现
        • 将设备关联到枚举表
      • 1.3.2 零配置发现
        • 组播 DNS(mDNS)
        • DNS 服务发现
    • 1.4 设备添加和删除
      • 1.4.1 删除
      • 1.4.2 添加
  • 第 2 章 GVCP 协议
    • 概览
    • 2.1 基本概念
    • 2.2 通道
      • 2.2.1 控制通道
        • 1、控制通道权限
        • 2、控制通道寄存器
        • 3、打开/关闭控制通道
        • 4、控制通道心跳
        • 5、设备控制
        • 6、使用待定应答
        • 7、控制通道字典
      • 2.2.2 流通道
        • 流通道寄存器
        • 标签数据块
        • 打开一个流通道
        • 操纵一个流通道
        • 关闭一个流通道
        • 分组大小
        • 组播
        • 多网络接口影响
        • 穿越防火墙或网络地址转换(NAT)设备
        • 无条件流
      • 2.2.3 消息通道


引言

    GigE Vision 是一种通信接口标准,可用于各种网搭拓扑上的视觉软件与视频流设备间的交互。该标准是基于 UDP/IP 协议体系,并构成了 Gige Vision 协议(工作在应用层,包括 GVCP 和 GVSP 两个协议)。需要的设备包括 IP 网络上各种软硬件摄像机、处理器、路由器等。本说明中,设备指的是一个 GigE Vision 兼容的可控设备,而应用程序指运行在一台主机上的一个与 GigE Vision 兼容的控制程序。

    本说明分三部分,即设备发现、GVCP 协议和引导寄存器,分别在对应的章节中介绍。

第 1 章 设备发现

    PC 在接入设备时,需要一种机制发现设备,即链路选择、IP 地址配置、设备枚举。

    一个设备有一个或多个网络接口,可将其连接到该网络。第一步是让设备确定哪些链接是活动的,哪些不是。根据IEEE 802.3所定义的以太网自动协商过程,然后处理两个合作伙伴之间的链路速度协商。

    第二步是IP配置,它使用了标准的IP协议。它是由该设备启动的。但其目标是为该设备分配一个唯一的IP地址。GigE视觉设备必须支持动态主机配置协议(DHCP)和链路本地地址(LLA)。GigE视觉设备可能支持静态IP。静态IP定义为持续运行整个电源循环或重置的静态IP地址。它被保存在设备中的非易失性存储器中。

    第三步,设备枚举,由应用程序启动,以收集关于网络上设备存在的信息。如果应用程序不知道设备的IP地址,则可以使用UDP广播命令在应用程序的子网上实现。如果客户端的IP地址已知,则可以使用单播UDP来完成。此步骤可通过在设备和应用程序之间的GVCP消息交换来实现。这个答案包含了有关设备的各种信息,如制造商、设备型号等。

    警告:此规范没有标识应用程序如何检索位于不同子网上的设备的IP地址。这可以通过DHCP服务器提供的信息、通过多铸造设备枚举请求或使用DNS来实现。该规范的未来版本可能会解决此主题。

1.1 链路选择

    在进行IP配置之前,必须在设备和应用程序之间建立一个物理连接。GigE视觉设备可以使用多个物理链路来增加数据传输的总体可用带宽。当使用多个链路时,可以将它们组合在一起,数据包可以分布在它们之间,以优化带宽利用率。例如,通过结合两个1千兆位的以太网链路,一个设备可以提供高达2千兆位/秒的带宽。

    本规范为一个设备提供了4种不同的物理链路配置:

  1. 单链路配置(SL配置)
  2. 多链接配置(ML配置)
  3. 静态链路聚合组配置(静态LAG配置,sLAG)
  4. 动态链接聚合组配置(动态LAG配置、dLAG)

    前2个(SL和ML配置)被手动控制,每个网络接口都被单独配置。每个网络接口在启动时都要经过IP配置。因此,该设备最终会为每个物理网络接口提供一个不同的IP地址。

    最后2个(静态LAG和动态LAG)使用IEEE 802.1AX规范来创建链路聚合组。在这些配置中,将创建单个虚拟链接。因此,应用程序对重新分组的物理接口只看到一个IP地址。物理链路的分组在MAC层上执行,并且对应用软件是透明的。

1.1.1 单链路配置

    单链路配置(SL配置)是最简单的配置,因为只需要一个物理网络接口。因此,所有的控制通道、流通道和消息通道都被连接到这个接口上。

    一个设备必须至少有一个网络接口。所有设备都必须支持SL配置。

1.1.2 多链路配置

    当有多个网络接口可用时,一种选择是将它们配置为独立的链接,其中每个接口都配置为不同的IP地址。

  • 设备最多支持4个不同的网络接口。
  • 如果设备支持ML配置,则在使用ML配置时,每个网络接口必须独立执行IP配置过程。

1.1.3 链路聚合组配置 LAG

1.2 IP配置

    本节列出了设备为获得有效IP地址时必须遵循的要求。

  • 所有设备必须在通电、设备重置或以太网链路协商成功后执行IP配置。
  • 设备必须支持以下IP配置协议:
    • 动态主机配置协议(DHCP)
    • 链接本地地址(LLA)

    可选地,设备可以支持用户可配置的静态IP地址(持久性 IP)。该地址存储在设备非易失性存储器(引导寄存器)中,将用于设备通电或重置。当使用静态IP地址时,用户可以确保所选的IP地址不会在网络上造成任何冲突。

1.2.1 协议选择

    在一个设备上,每个IP配置协议的执行顺序必须为:

  1. 静态IP(如果已得到支持和启用)
  2. DHCP(如果已启用)
  3. 链接-本地地址

    设备的出厂默认值必须禁用静态IP并启用DHCP。LLA总是启用的。

ARM-Linux配置DHCP自动获取IP地址
Arm Linux配置DHCP

    注意,GVCP还提供了一个命令 FORCEIP_CMD,将静态IP地址强制进入设备的接口#0( interface #0)。此地址覆盖使用本节中描述的普通IP配置选择获得的IP地址。但此地址在电源循环或设备重置时丢失。

    为设备分配有效的IP地址后,必须将其相关信息复制到以下引导寄存器中:

  1. 当前的IP地址(网络接口#0的地址为0x0024)
  2. 当前子网掩码(网络接口#0的地址为0x0034)
  3. 当前默认网关(网络接口#0的地址为0x0044)

1.2.2 静态IP

    如果一个设备支持持久性IP,那么它必须使用适当的引导寄存器来这样做,并且它必须提供一些非易失性内存来存储这些设置。

    以下引导寄存器用于支持持久性IP:

  1. 网络接口功能(网络接口#0的地址0x0010):第31位表示此设备是否支持持久性IP(位设置)(已清除位)。
  2. 网络接口配置(网络接口#0的地址0x0014):第31位表示用户是否已激活持久IP(位设置)(位清除)。
  3. 持久IP地址(网络接口#0的地址为0x064C):这是用户分配的持久IP地址。它是由用户来确保这是一个有效的IP地址。
  4. 持久性子网掩码(网络接口#0的地址为0x065C):这是与持久性IP地址相关联的子网掩码。
  5. 持久性默认网关(网络接口#0的地址为0x066C):当激活持久性IP时,这为默认网关。

1.2.3 DHCP

    一个 DHCP 可用标志存储在非易失内存中,如果没有储存介质,设备必须决定 DHCP 是否可用。设备应支持 DHCP 选项:子网掩码和路由选项。

    DHCP 重传策略:使用 DHCP,设备发送一个 DHCPDISCOVER 消息,DHCP 服务器返回一个 DHCPOFFER 消息;设备发送一个 DHCPREQUEST 消息,服务器返回一个 DHCPACK 或 DHCPNAK 消息。若设备没有从服务器接收到任何回应,需要重传上述消息,至多允许 2 次重传(因为最坏情况下设备分别发送3 个上述消息)。如果没有 DHCP 服务器可用,设备在 DHCP 阶段一般会等待 12s。

    DHCP 租借到期:设备停止使用 IP 地址,并重启 IP 配置循环。

1.2.4 链接本地地址 LLA

    即私有 IP。IP 地址范围从 169.254.1.0 – 169.254.254.255。必须一直被激活。

1.3 设备枚举

    在设备获得一个 IP 后,PC 端程序需要收集网络上所有设备相关信息,如设备 id、制造商、制造日期等。通过单播或组播 UDP 命令方式分别得到已知或未知 IP 的设备信息,并使用 GVCP 协议实现信息交互。

    GigE Vision 提供了两种机制来枚举设备:

  1. GVCP 设备发现(必备)
  2. 多播DNS / DNS服务发现(可选)

1.3.1 GVCP设备发现

在这里插入图片描述

广播设备发现

    广播设备发现消息可以被应用程序用来查找驻留在同一子网上的设备。它可以使用目标IP地址为255.255.255.255的UDP广播消息来实现。这被RFC1122(对互联网主机的要求——通信层)定义为一个“有限的广播”。请注意,此消息将不会跨路由器发送。这就是为什么只有在同一子网上的设备才会接收到它。使用广播设备发现,不可能枚举与应用程序的网卡)不同的子网上的设备。

单播设备发现

    单播设备发现消息只能在应用程序事先知道设备IP地址时使用。通过直接向设备IP地址发送UDP包来实现。

将设备关联到枚举表

    为方便将一个设备关联到设备发现列表的对于条目中,设备外壳上应有一个序列号和 MAC 地址标签。

1.3.2 零配置发现

    在 GigEVision1.x 中,GVCP仅被定义为侦听UDP端口3956。这一限制意味着,要在单个物理盒中有多个独立控制的设备,至少需要使用多个IP地址和GVCP堆栈。一个GigE Vision产品可以在一个以太网端口后面有几个虚拟MAC地址(就好像前面有一个交换机一样),但这种方法不能很好地扩展。

    GigEVision2.0 版本定义了设备如何使用多播DNS和DNS-SD的组合来进行广告和发现彼此,称为Zeroconf发现。除了提供一个更标准和更健壮的发现机制之外,还有一个特性是它本机地提供了对各种类型的多服务配置的支持。

    首先,这种机制将“主机”(通常是插入网络的单个硬件)的概念与“服务”(通过网络提供一些服务的某些应用程序的一个实例,如HTTP服务器)区分开来。单个主机可以有多个以太网接口,以及多个IP地址(以及IPv4和IPv6)。服务有三个主要组件:类型(GVCP固定)、名称(标识特定实例)和服务正在运行的UDP/TCP端口号。每个服务还可以有一个唯一的TXT记录列表,其中可以包含关于特定实例的详细信息。这允许单个主机有N个IP接口和M个服务,而两者之间没有明确的关系。在GigE Vision中,每个服务实例对应一个GVCP控制通道。

  • 标准设备
    这是SL配置。它用单一的服务来宣传单个主机。
    配置:

    • 1个以太网端口
    • 1个IP地址
    • 1个GVCP通道(在GVCP端口3956上)
  • 具有链路聚合的标准设备
    这声明单个服务(多个链接被视为一个逻辑链接)。

    • 多个以太网端口(通过链接聚合、sLAG或mLAG绑定)
    • 1个IP地址
    • 1个GVCP通道(在GVCP端口3956上)
  • 具有多个链路的无链路聚合的标准设备
    这可以发布具有多个IP地址和单个服务的单个主机,并映射到ML配置。然后,将由应用程序来决定连接到哪一个(它总是可以使用列出的第一个),并将实现定义哪些链接用于任何特定的流。这相当于GigE Vision 1.x中的行为。

    • N个以太网端口
    • N个IP地址
    • 1个GVCP通道(在GVCP端口3956上)
  • 具有单链路的多控制器装置
    这将使用多个GVCP服务来发布一个主机。每个服务都被视为一个共享相同物理接口的SL配置。

    • 1个以太网端口
    • 1个IP地址
    • 多个GVCP通道(使用不同的UDP端口,第一个通道必须使用GVCP端口3956)
  • 具有多个独立链路的多控制器设备
    每个链接将发布一个不同的主机(mDNS规范允许),每个主机将发布一个服务。通常每个链接只会响应查询匹配唯一的主机/服务名称对应的链接,所以主机链接的另一端只会看到他们连接的接口以及能够推断哪些服务是可以通过特定的链接(大多数mDNS响应客户端能够指示本地链接服务通过)。这将映射到SL配置,但对每个服务都有不同的物理接口。

    • N个以太网端口
    • N个IP地址
    • N个GVCP通道(所有通道必须使用GVCP端口3956)
组播 DNS(mDNS)

    查询类型如 A/AAAA 记录(IP v4/IP v6 名称解析),查询服务为 SRV 记录。在组播 DNS Internet 草案中,为 mDNS 分配的 IP v4 组播地址为 224.0.0.251,IP v6 链路本地组播地址为 FF02:FB,使用 UDP 端口 5353,仅用 UTF-8 编码资源记录名,采用DNS 顶级域名".local.“。设备主机名由设备制造商名+设备名+设备 MAC 地址(大写十六进制)+”.local."构成。

DNS 服务发现

    使用 DNS 来查找特定的服务名称。主要任务是列举服务名称列表,及将服务名翻译成相关联的 IP 地址。合法的服务名需为"_gvcp._udp"。若支持 DNS-SD,其TXT 记录必须至少支持如下键:规范版本号、设备模式、MAC 地址、设备供应商名、模型名、具体制造商版本信息、具体制造商串名、序列号、自定义名和实例号。

1.4 设备添加和删除

    程序应能够动态响应设备网络拓扑结构变化(在网络上添加或删除一个设备)。

1.4.1 删除

    现场删除主要由控制协议处理,然后程序暂停其发送的消息命令,或者一个控制与接收程序可暂停不再到来的 GVSP 发送端视频流。

1.4.2 添加

有三种方法:

  1. 程序发送 DHCP 请求给服务器,后者做出响应并通知添加设备的程序,但要求客户端与服务器端联系密切:
  2. 程序定时发送一个 DISCOVERY 命令,但这会消耗一定的网络带宽,尤其是每次有很多设备需要回应,一种解决方案是提供给用户一个控件来刷新设备列表:
  3. 执行组播 DNS 或 DNS 服务发现来发现新设备。
    除了网络带宽要分配给新设备外,原来的设备不受新添加设备的影响。

第 2 章 GVCP 协议

    GVCP 协议描述了程序与设备之间遵守的通信规范,重点介绍了三种类型的通道,即控制通道消息通道流通道,并列举了各种事件命令。

概览

    GVCP是一种依赖于UDP传输层协议的应用层协议。它基本上允许应用程序在设备上配置设备(通常是照相机),并在设备上实例化流通道(GVSP发射器或接收器,如果适用),以及设备在特定事件发生时通知应用程序。

    GVCP仅为一个应用程序(主应用程序)提供必要的支持,以控制设备(写入设备)。然而,如果主应用程序允许这样做,那么许多应用程序就可以监视一个设备(从一个设备中读取)。应用程序也可以请求对已经在主应用程序控制下的设备的控制,前提是设备支持并且主应用程序允许这样做。在GVCP下,应用程序是主程序,设备是从程序。命令请求总是由应用程序发起的。

    命令和确认消息必须分别包含在一个数据包中。应用程序必须等待确认消息(当请求时)才能发送下一个命令消息。这就创建了一个非常基本的握手,以确保最小的流量控制。确认消息提供设备实际接收到命令的反馈,它还提供命令请求的任何响应数据。

    该规范的当前版本使用UDP IPv4作为传输层协议。由于UDP是不可靠的,GVCP定义了机制来保证数据包传输的可靠性和确保最小的流量控制。

2.1 基本概念

    在GVCP协议报文中,最大传输单元 MTU定义为576byte,包括IP头、UDP头、GVCP头以及数据负载部分。

在这里插入图片描述

    GVCP控制头和数据段部分大小必须是4字节的倍数。

    GVCP是基于UDP无连接服务的,因此,设计了消息重传机制。消息重试次数可以由用户设定,默认值为3。reg_d≠0,在控制通道关闭后,其值会被初始化。此外,还启用了端到端连接,通过设置心跳计数来侦听链路是否断开。同理,其值是可以自定义的。一般来说,应用程序端的心跳频率应略低于设备端的13,这样可以在 UDP包发送丢失时排除心跳因素的干扰。

在这里插入图片描述

在这里插入图片描述

    GVCP 头包含了键值 0x42,用于设备与应用程序识别GVCP包。

    设备的第一个 GVCP 端口号必须为 3956。

2.2 通道

    通道即虚拟连接。在本说明中包含1个控制通道,0-512个流通道,0或1个消息通道。

在这里插入图片描述

2.2.1 控制通道

    控制信道被应用程序用于与设备进行通信。GVCP定义了两种类型的控制通道:

  1. 主控制通道:主控制通道由主应用程序创建。主应用程序是指允许写入设备寄存器的应用程序。只允许一个应用程序作为一个设备的主要应用程序。
  2. 辅助控制通道:任何辅助应用程序都会创建辅助控制通道。辅助应用程序只能从设备寄存器中读取(它们不能写入其中)。这可以用于监视或调试。一个设备可能支持许多辅助应用程序。一个设备不允许支持任何辅助应用程序。

    在消息或流通道创建前,必须实例化一个控制通道。例如,有程序请求对一个寄存器进行写操作,以实现一个图像捕获,设备应该在寄存器被写入时返回一个响应,而不是捕获已完成时。

1、控制通道权限

    GVCP定义了四个级别的特权:

  1. 独家访问,通过写CCP寄存器授权访问。主程序能对设备进行读写,其他程序则不能,也不允许创建一个第二控制通道,除其发送的DISCOVERY_CMD、FORCEIP_CMD等少数命令,其他命令请求设备一概返回一个错误。

在这里插入图片描述

  1. 控制访问权限,与前者不同在于,其他程序可以读设备,也允许具有控制访问权的二级程序创建一个控制通道。

在这里插入图片描述

  1. 具备切换能力的控制访问,与控制访问不同在于,该模式主程序能对设备进行读写,允许具有正确凭据的其他程序控制设备。

  2. 监控访问,条件最弱一般用于调试帮助。只要无独占访问的程序连接设备就可以读该设备。

    设备必须记录主程序相关的上下文信息,至少包括程序 IP 地址、源UDP端口和授予特权类型,以确定其是否可授权给其他程序(如果收到的命令消息合法)。

    在程序端使用一个动态端口号(任意),设备端使用标准GVCP端口(除非通过mDNS通告了一个不同的端口)就可以创建控制通道,再通过 GVCP DISCOVERY 命令创建链接。在软件开发阶段,对设备使用非独占方式访问,有助于其他调试工具监控该设备。

2、控制通道寄存器
  1. 控制通道特权寄存器(Control Channel Privilege register (CCP))
  2. 控制切换键寄存器(Control Switchover Key register)
  3. 心跳超时寄存器(Heartbeat Timeout register)
  4. 待定超时寄存器(Pending Timeout register)
3、打开/关闭控制通道

    程序通过对CCP寄存器写请求特权,并检查设备 ACK 消息返回的状态,根据状态码内容决定是否有打开通道的资格。允许主程序在不关闭控制通道时请求相同的特权类型,如可通过写CCP寄存器来直接切换到另一控制特权。通过对CCP寄存器写0来关闭通道,并释放主程序的特权。

4、控制通道心跳

    使用心跳序列可以定期检测控制通道是否处于活动状态,心跳速率是可自定义的,默认每秒1次。设备在接收到主程序任一有效命令后,必须重置心跳计数,少数命令除外,如 ACTIONCMD。心跳计数可通过读CCP寄存器来重置,且只能由主程序执行。若设备在超过用户设置的心跳超时时间(默认3秒)后,且没有禁用心跳性能寄存器仍没有收到一个控制消息,则必须断开控制通道。如果主程序不能读CCP寄存器或读取非预期数值时,即可判定链路断开,此时,必须实例化控制通道以建立与设备的新链接。

5、设备控制

    主程序可以在打开通道后,发送任何受GVCP支持的命令,二级程序可发送READREG和READMEM命读取设备速率。DISCOVERY、ACTION和PACKETRESEND命令可以在任何时间由任一程序发送,且设备总是在收到后返回一个ACK消息。

6、使用待定应答

    若设备执行命令时间比程序预期的要长,则下述机制有助于相互间通信:

  1. 执行一个请求所需的最大执行时间。
  2. 当请求执行时间将超过①中的值,使用使用 PENDING_ACK 消息通知程序使其可以等待额外必需的时间来完成该请求。
    PENDING_ACK 的 ack_id 值与程序初始请求的 reg_id 值相同。若设备支持该消息,则必需在一个PENDING_ACK 和 ACK 命令发出之间响应 DISCOVERY_CMD,且不能用该消息响应一个DISCOVERY_CMD、FORCEIP_CMD 和 PACKETRESEND_CMD。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7、控制通道字典

    如果一个控制报文所在请求端没有所需特权,设备则返回一个只含包头的应答报文,其 status 字段必须为 GEV_STATUS_ACCESS_DENIED,length 字段值为0。下面列出了在通道中各种类型的控制消息。

  1. DISCOVERY
    DISCOVERY_CMD:8 字节,其中 8-15 位表示 flag,其第 3 位说明设备是否允许广播其应答报文,ACKNOWLEDGE 位(第7位)须设置。
       
    DISCOVERY_ACK:如果设备与程序在同一个子网,则必须单播一个该报文。如果 DISCOVERY_CMD 报文并没有在设备所在子网接收,或者上段提到的 flag 字段,设备应该广播该报文。当设备的静态 IP 与程序所在的子网 IP 不匹配时会发生。如果 flag 第 3 位清零且设备与程序不在一个子网段,则设备对程序是不可见的。其他说明见 Discovery ACK Delay 引导寄存器。

  2. FORCEIP
    该消息要求将一个静态IP地址强制赋给MAC 地址被识别的设备。
       
    FORCEIP_CMD:必须在非主程序的GVCP端口上广播该消息,包含要访问设备的MAC地址,若该地址与设备的MAC地址不匹配,或存在独占或控制访问(含可切换控制)程序时,该消息都必须被设备丢弃。可用于实现指定MAC地址的设备两种不同的动作。若该消息的 static_IP 字段为0,设备必须重启其所有网络接口上的IP配置周期,而不用发送给程序一个 FORCE_ACK 命令,否则,设备须将其 IP 地址设置为该字段的值,成功分配后,返回 FORCEIP_ACK(若程序请求)。如果该静态 IP 需要设备重置其通信栈及内部状态,则该 IP 必须在重置后保持不变。该命令 flag 字段的第3位表明设备是否应广播FORCE ACK消息,若该位被清零,则不能广播应答消息,这在该命令执行期间所在子网变动时有效。
       
    FORCEIP_ACK:当一个强制性静态IP 地址被赋给一个设备后,可以返回一个 FORCEIP_ACK 消息。当程序设置了 FORCEIP_CMD 的 flag 字段的第 3 位时,设备应广播此应答消息。

  3. READREG
    在这里插入图片描述

  4. WRITEREG
    在这里插入图片描述

  5. READMEM
    在这里插入图片描述

  6. WRITEMEM
    在这里插入图片描述

  7. PACKETRESEND
    在这里插入图片描述

    GVSP接收端分组重传处理:需要GVSP接收端程序快速发送 PACKETRESENF 命令,以防要重传的分组在发送端中丢失。一些网络拓扑保证了UDP分组按序到达,但UDP分组在传输中若存在多条路由(存在网关和路由器),则不能保证按序到达。对于前者,GVSP 接收端程序可使用分组ID向下跟踪包序列,如果某个包ID跳过了,程序立即请求重发丢失分组,可以使用超时器检测数据跟踪是否丢失,对于后者,程序不能确定分组ID 值是有序的,因此需要一个分组重传机制,可以有多种,如使用超时方案。

  1. PENDING
    在这里插入图片描述

  2. ACTION
    在这里插入图片描述

2.2.2 流通道

    使用 GVSP 协议使数据从一个 GVSP 发送端转移到 GVSP 接收端。若产品支持 GVSP 流则必须支持从索引 0 顺序启动的流通道,不允许索引中间有间隔。发送数据的流通道使用比接收流通道更低的索引,该索引可在相关引导寄存器中找到。

流通道寄存器

    一个给定的流信道可以是发射机或接收器。以下寄存器与发射器和接收器流通道相关联:

  1. 流通道端口寄存器(Stream Channel Port register,SCPx)
  2. 流通道数据包大小寄存器(Stream Channel Packet Size register,SCPSx)
  3. 流通道目的地址寄存器(Stream Channel Destination Address register,SCDAx)
  4. 流通道配置寄存器(Stream Channel Configuration register,SCCFGx)

    除此之外,以下寄存器还与发送端流通道相关联。

  1. 流通道分组延迟寄存器(Stream Channel Packet Delay register,SCPDx)
  2. 流通道源端口寄存器(Stream Channel Source Port register,SCSPx)
标签数据块

    在流通道上传输的相机图像被拆分成合适大小的数据块,接收端可通过查找与每个数据块相关联的块 ID 来追踪图像。

    一个 GigE Vision2.0 兼容的 GVSP 发送端和接收端,如果只支持 64 位 block id64 和 32 位 packet id32,则称为纯 GigE Vision2.0;若支持 16 位 block id 和 64 位 block id64 ,称为双模式 GigE Vision2.0,这种情况考虑了向后兼容性。

打开一个流通道

    只有主程序可配置流通道,通过将主机端口写入 SCPx 寄存器、目的地址写入 SCDAx 寄存器即可打开一个流通道。对于一个给定流通道,GVSP 发送端应使用任意的动态端口号作为 UDP 源端口,端口号范围 [49152, 65535] 。流通道必须在程序置 SCPx 寄存器的 host port 字段为一个非 0 值时,才被激活。当通道打开时,当前数据块的索引 block id/block id64 必须被重置为1 。

操纵一个流通道

    当 SCPx 值非 0 时,SCSPx 必须返回一个非 0 值对应 GVSP 发送端流通道的源 UDP 端口。只要其对于控制会话的持久不变,其值在先前的任何时候为非 0 值也依然有效。若 SCPx 为非 0 值时,设备必须默认所有的 UDP 流量来自于设备 SCSPx 端口的 SCDAx 和 SCPx 寄存器列表中的地址和口。

关闭一个流通道

    主程序必须通过将 SCPx 寄存器清零来关闭一个流通道。打开通道,SCPx 是最后一个被访问的寄存器;关闭通道,则为第一个。GVSP 发送端不能发送一个不完整的流分组。相机可通过提供采集启动和采集停止特征来停止流的传送。若当前分组是最后一个发送时,GVSP 发送端不需要发送数据追踪,该分组行为类似一个退出。

分组大小

    通过发送流测试分组来确定 IP 不分段情况下的最大分组大小,用一个简单的二分迭代搜索算法,对 SCPSx 寄存器写各种大小的分组,以寻找一个最优的分组大小。

组播

    在数据流须发送到多个地方时使用。当在 SCDAx 寄存器的一个组播选项中设置了 GVSP 发送端的目的 IP,即可激活组播。

多网络接口影响

    允许流通道上多个网络接口以增加流的可用带宽,具体见 2.2.4 节。

穿越防火墙或网络地址转换(NAT)设备

    设计了 SCSPx 寄存器,以允许一个 GVSP 接收端相关的程序通知其上的远程 UDP 端口,在 GVSP 收发端流通道上创建一个模拟的双向通行会话。可采用 SCPx 中的源端口,在其上发送一个 UDP 分组到 SCSPx 指定的端口,通过防火墙的相关配置,程序可定时发送类似第一个分组以保持回话,间隔推荐 30s。该机制可以使程序在防火墙中打开 UDP 端口,但程序不应指望设备回应其发送到设备消息通道上的分组。

无条件流

    在以太网中存在大量视频分布系统,尤其一些同时包含多个 GVSP 接收端时,需强制确保 GVSP 发送端可以一直持续流动数据,而不用关心其主程序或网络的状态,如主程序崩溃或关闭或移动到不同的主机上,只要该发送端受其主程序支配即可。

2.2.3 消息通道

    允许设备发送一个异步消息到程序。如一个相机触发器被检测到,设备可发送一个信号。设备总是初始化该通道上的事务。与控制通道使用的头是相同的,但请求发送的方向相反(设备 ——> 程序)。若通道的消息增加时,相应regid=(reg id+1)mod 65535+1。允许程序检测一个UDP报文是否丢失,即使没有请求应答。
寄存器:消息通道端口寄存器:消息通道目的地址寄存器:消息通道传输超时寄存器消息通道重试计数寄存器:消息通道源端口寄存器。
打开/操纵/关闭一个消息通道:通过向MCDA寄存器写目的PP并将主机端口写入MCP
寄存器,来打开消息通道,只允许主程序打开。其他要求与打开流通道类似。如果请求超时,设备需重传相同消息,重发次数存在MCRC寄存器中,若该值为0,则不允许重传。通过设置MCTT寄存器的ACKNOWLEGDE位来控制是否支持产生应答消息。当MCP值非0时,MCSP必须返回一个非0值对应GVSP发送端流通道的源UDP端口。只要其对于控制会话的持久不变,其值在先前的任何时候为非0值也依然有效。当MCSP为非0值时,若所有的UDP流量来自于设备MCSP端口的MCDA和MCP寄存器列表中的地址和端口,其与一个EVENT ACK或EVENTDATA ACK消息不匹配时,设备必须默认将其丢弃。关闭操作与流通道类似,但消息通道是写MCP来关闭的。此时,如果在设备端正准备发送一个分组,则其应该被完整发送,但若程序端收到一个消息时,就应该丢弃它。异步事件:用16位ID表示,有2种类型:GigEVision标准事件和设备相关事件,设备商相关的寄存器用于启用/禁用这些事件,XML设备描述文件则报告了这些事件、其索引号和上述寄存器。
组播:当消息需要发送到多个地方,即可使用组播,此时不允许发送应分组。当在MCDA 寄存器的一个组播选项中设置了设备目的印P,即可激活组播,此时,MCTT必须置0 以禁用应答。
穿越防火墙或NAT设备:与流通道采用的机制相同,不过其中的源端口在MCP寄存器中指定,目的端口则在 MCSP中指定。
消息通道字典
程序读消息通道数寄存器来验证消息通道是否有效,在打开该通道前,应检查该寄存器27位和28位以确定设备是否支持EVENT和EVENTDATA。通过写可用寄存器位来控制相应的事件或事件组是否启用,应在XML描述文档中提供该寄存器。
① EVENT
设备使用EVENT消息通知程序发生了异步事件,可在该消息中串联多个事件,且全部分组大小必须≦576字节。若使用16位biock id,消息中事件数量=消息头“length feld/16”:若使用64位block id64,消息中事件数量="lengih field/24”。每个EVENT命令必须贴上64位时间戳rimesamp,表示设备上生成的事件时间。值范围在 0-36863的时间标识符保留给GigE Vision 使用,其中 32769-36863的事件用于设备异步地报告一个错误,36864-65535的事件与具体设备相关,在XML描述文档中定义。EVENTCMD:主要包括标志位、事件1D、流通道索引、blockid和block id64、时间戳信息:EVENT ACK:不要求设备请求一个应消息。②) EVENTDATA
与EVENT作用类似,不同在于可以将与设备相关的数据附加到EVENTDATA消息,且不能将多个事件串联进一个该消息命令中,只能存储1个事件。
EVENTDATA CMD:与EVENTCMD类似,但多了一项data,表示原始数据,在XML设备描述文档中指定:
EVENTDATA ACK:与EVENT ACK类似。
2.2.4 多网络接口设备
影响控制通道:程序必须在设备接口#0上实例化该通道,并获得设备控制权:设备不能回应来自非#0 接口的 GVCP 请求,该报文默认被丢弃。
影响流通道:在指定流通道上输送数据时,GVSP发送端必须使用相应的SCPx寄存器nehwork interface index字段指定的网络接口:如果GVSP 接收端是一个设备,则在指定流通道上接收数据时,也必须使用上述接口,如果不是设备,则不需要实现引导寄存器。由于#0是唯一支持GVCP 的接口,故程序必须在其上发送PACKETRESENDCMD命令,该接口存放在SCPx的stream channel index字段。影响消息通道:如果支持该通道,则其必须在接口#0上实例化。

   
 

相关文章:

GIGE 协议摘录

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 文章目录 系列文章目录引言第 1 章 设备发现1.1 链路选择1.1.1 单链路配置1.1.2 多链路配置1.1.3 链路聚合组配置 LAG 1.2 IP配置1.2.1 协议选择1.2.2 静态IP1.2.3 DHCP1.2.4 链接本地地址 LLA 1.3 设备枚举1.3.1 GVCP设备发现广播设…...

服务器的远程桌面无法连接,服务器远程桌面无法连接问题处理教程

服务器的远程桌面无法连接,服务器远程桌面无法连接问题处理教程。 一、问题概述 服务器远程桌面无法连接是日常运维中常见的问题之一。它可能由多种原因造成,如网络问题、服务器配置错误、远程桌面服务未启动等。本教程将指导您逐步排查并解决这些问题。…...

【机器学习300问】105、计算机视觉(CV)领域有哪些子任务?

计算机视觉作为人工智能的重要分支,发展至今已经在诸多领域取得显著的成果。在众多的计算机视觉任务中,图像分类、目标检测与定位、语义分割和实例分割是四个基本而关键的子任务,它们在不同的应用场景下扮演着重要角色。这四个子任务虽然各具…...

安卓手机APP开发__超宽带(UWB)通信

安卓手机APP开发__超宽带(UWB)通信 目录 概述 控制方/发起方与控制方/响应方 参数范围 后台测距 STS 配置 步骤 使用限制 代码示例 示例应用 UWB 范围 RxJava3 支持 生态系统支持 支持 UWB 的移动设备 第三方 SDK 概述 注意 :UWB 目前仅支持 Jetpac…...

儿童股骨干骨折用儿童悬吊如何进行康复

儿童股骨干骨折后的悬吊康复训练,应根据骨折的具体情况和儿童的年龄来制定个性化的康复计划。悬吊康复训练主要目的是通过减轻骨折部位的压力,促进骨折愈合,同时保持和增强儿童的肌肉力量和关节活动能力。 悬吊康复训练的方法 1.垂直悬吊皮牵…...

vscode plantuml插件安装使用(windows)

1、安装JDK,网址 https://www.oracle.com/java/technologies/,添加系统变量JAVA_HOME 2、安装graphviz,网址 Download | Graphviz, 并添加用户变量GRAPHVIZ_DOT 3、vscode安装插件plantuml 4、新增wsd文件,按照使用…...

Linux内核编译流程3.10

一、内核源代码编译流程 编译环境: cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) Linux内核版本: uname -r 3.10.0-693.el7.x86_64 编译内核源代码版本:linux-4.19.90-all-arch-master cp /boot/config-xxx到内核源代码目录/.configmake menuconfi…...

OSPF多区域组网实验(华为)

思科设备参考:OSPF多区域组网实验(思科) 技术简介 OSPF多区域功能通过划分网络为多个逻辑区域来提高网络的可扩展性和管理性能。每个区域内部运行独立的SPF计算,而区域之间通过区域边界路由器进行路由信息交换。这种划分策略适用…...

解密MySQL二进制日志:深度探究mysqlbinlog工具

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 解密MySQL二进制日志:深度探究mysqlbinlog工具 前言mysqlbinlog工具概述mysqlbinlog的…...

妙解设计模式之策略模式

目录 策略模式的概念生活中的例子编程中的例子 软件工程中的实际应用数据排序文件压缩支付方式图形绘制 策略模式的概念 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并…...

Linux DHCP server 配置

参考:linux dhcp配置多vlan ip_linux 接口vlan-CSDN博客 配置静态IP地址: 给固定的MAC地址分配指定的IP地址,固定的IP地址不必包含在指定的IP池中,如果包含在IP地址池中,固定的IP地址会从IP地址池中移除 配置方法&…...

深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)

力扣166题:分数到小数 在本篇文章中,我们将详细解读力扣第166题“分数到小数”。通过学习本篇文章,读者将掌握如何使用多种方法来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解&am…...

新疆 | 金石商砼效率革命背后的逻辑

走进标杆企业,感受名企力量,探寻学习优秀企业领先之道。 本期要跟砼行们推介的标杆企业是新疆砼行业的龙头企业:新疆兵团建工金石商品混凝土有限责任公司(以下简称:新疆金石)。 从年产80万方到120万方&am…...

Dinky MySQLCDC 整库同步到 Doris

资源:flink 1.17.0、dinky 1.0.2、doris-2.0.1-rc04 问题:Cannot deserialize value of type int from String ,detailMessageunknowndatabases ,not a valid int value 2024-05-29 16:52:20.136 ERROR org.apache.doris.flink.…...

基于Qt的网上购物系统的设计与实现

企鹅:2583550535 代码和论文都有 第1章 绪论... 1 1.1 项目背景... 1 1.2 国内外研究现状... 1 1.3 项目开发意义... 3 1.4 报告主要内容... 3 第2章 关键技术介绍... 4 2.1 后端开发技术... 4 2.1.1 C. 4 2.1.2 Qt框架... 4 2.1.3 MySQL数据库... 5 2.2 …...

设计软件有哪些?建模和造型工具篇(4),渲染100邀请码1a12

建模使用到的工具有很多,这次我们接着介绍。 1、PolyBoost PolyBoost是由Digimation公司开发的3ds Max插件,旨在增强软件的多边形建模功能。该插件提供了一系列强大的建模工具,如边缘控制、顶点编辑、面片调整等,使用户能够更加…...

Java基础:面向对象(二)

Java基础:面向对象(二) 文章目录 Java基础:面向对象(二)1. 面向对象编程思想2. 类与对象2.1 类2.1.1 类的定义2.1.2 成员变量2.1.3 局部变量 2.2 对象2.2.1 对象的定义2.2.2 对象的使用2.2.3 对象创建的原理…...

【汽车之家注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...

cocos 通过 electron 打包成 exe 文件,实现通信问题

cocos 通过 electron 打包成 exe 文件,实现通信问题 首先,我使用的 cocos 版本是 2.4.12,遇到一个问题,是啥子呢,就是我要把用 cocos 开发出来的项目打包成一个 exe 可执行程序,使用的是 electron &#xf…...

python中pow是什么意思

pow()方法返回xy(x的y次方)的值。 语法 以下是math模块pow()方法的语法: import math math.pow( x, y ) 内置的pow()方法 pow(x, y[, z]) 函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效…...

Go语言数据库框架 — Gorm

Go入门之Gorm 框架_go gorm-CSDN博客 https://zhuanlan.zhihu.com/p/677057361 一、简介 Gorm框使用ORM技术,将对象(O)和关系数据库(R)之间的映射(M)抽象出来,开发者通过操作对象的方式操作数据库,不需要直接处理SQL语句,降低了…...

Python库之PyQuery的高级用法深度解析

Python库之PyQuery的高级用法深度解析 引言 PyQuery是一个强大的Python库,它提供了类似于jQuery的语法来解析和操作HTML和XML文档。虽然PyQuery的基本用法已经相当直观,但本文将深入探讨一些高级用法,帮助开发者更高效地处理复杂的HTML文档…...

「架构」单元测试及运用

在参与管理和研发软件项目的过程中,单元测试的实际运用对于确保最终产品的质量至关重要。以下是一些实际运用的案例和说明。 静态测试的实际运用 在TechCorp的电子商务平台项目中,静态测试作为代码质量保证的第一道防线。开发团队在编写代码的同时,使用SonarQube等静态代码…...

C# 数组/集合排序

一&#xff1a;基础类型集合排序 /// <summary> /// 排序 /// </summary> /// <param name"isReverse">顺序是否取反</param> public static void Sort<T>(this IList<T> array, bool isReverse false)where T : IComparable …...

HDRnet

local feature and global feature 在这里插入图片描述 Local features and Global features in Image Local feature also known as local descriptors, are distinct, informative characteristics of an image or video frame that are used in computer vision and image…...

【ArcGISPro】3.1.5下载和安装教程

下载教程 arcgis下载地址&#xff1a;Трекер (rutracker.net) 点击磁力链下载弹出对应的软件进行下载 ArcGISPro3.1新特性 ArcGIS Pro 3.1是ArcGIS Pro的最新版本&#xff0c;它引入了一些新的特性和功能&#xff0c;以提高用户的工作效率和数据分析能力。以下是ArcGIS…...

理解多线程看这一篇就够了

一、基本概念与关系 程序 程序是含有指令和数据的文件&#xff0c;静态地存储在磁盘等存储设备上。它是软件的实体&#xff0c;但未被激活。 进程 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位。当程序被操作系统加载并执行时&#xff0c;就成为一个进程&a…...

解释“this”的工作原理,原型继承如何工作,以及如何实现手写JS继承。还包括Array对象自带的方法列举,以及如何使用闭包。

1:"this"的工作原理: this 关键字指向当前执行上下文的对象,也就是当前函数被调用时所在的对象。this 的值取决于函数的调用方式,不同的调用方式会导致 this 指向不同的对象:作为对象的方法调用,this 指向该对象作为普通函数调用,this 指向全局对象(浏览器中是 wind…...

汇智知了堂实力展示:四川农业大学Python爬虫实训圆满结束

近日&#xff0c;汇智知了堂在四川农业大学举办的为期五天的校内综合项目实训活动已圆满结束。本次实训聚焦Python爬虫技术&#xff0c;旨在提升学生的编程能力和数据分析能力&#xff0c;为学生未来的职业发展打下坚实的基础。 作为一家在IT教育行业享有盛誉的机构&#xff…...

2024下半年软考报名人数较去年减少,仅52.77万

2024下半年软考报名人数 2024年上半年软考考试共计报考52.77万人&#xff0c;其中&#xff0c;初级资格5.12万人、中级资格24.37万人、高级资格23.28万人。 根据往年报名人数&#xff0c;本次考试人数是减少了的&#xff0c;原因分析如下&#xff1a; 1、原来报名热门专业系…...