• PROFINET 建立连接的原理


    想一想

    传统的TCPIP通信都是根据IP和Port建立唯一的套接字,通过这个套接字完成相关通信,那么PROFINET是基于什么建立通信的了?下面先来简单探索学习下。

    运行模式

    • 系统工程:为了实现一个系统的工程,需要导入设备的GSD文件(通用站描述),该文件由设备制造商提供,导入后需对GSD文件中定义的模块/子模块进行组态,以将其映射为实际系统并将其分配到槽(slot)/子槽(subslot)中;此外,每个从站设备都要被分配一个逻辑名称,该名称应指引设备在系统中的功能或安装位置,并且在地址解析期间被用来分配IP地址,名称分配总数使用DCP协议(发现配置协议),该协议默认集成在每个PROFINET设备中。
    • 将系统信息下载到控制器:完成系统工程后需将系统数据下载到控制器中,这样控制器就获得了寻址设备和数据交换所需的全部信息。
    • 系统启动前的地址解析:在与一个设备进行数据交互前,通常控制器必须在系统启动前为该设备分配一个IP地址。系统启动是指自动化系统在“上电”或“复位”后的启动/重启。在相同子网内的IP地址使用默认集成在每个PROFINET现场设备中的DCP协议进行分配,如果现场设备和控制器在不同的子网中,则由单独的DHCP服务器提供地址解析(名称->IP地址)。
    • 系统启动:控制器在启动/重启后,总是根据组态数据来开始系统启动,在系统启动期间,控制器建立应用关系(AR)和通信关系(CR),如有必要则组态并参数化过程级IO。
    • 数据交换:系统启动成功完成后,控制器和设备交换过程数据、报警和非周期数据。

    DCP

    DCP协议(发现配置协议,依据IEC 61158)用作名称/地址解析的基础,也是实现“设备更换无需编程设备”全部概念的一部分,可以用来读写设备编址所需的参数,并向现场设备中写入数据,这些服务是实时的,且只能在子网中使用。

    • 标识(Identify)请求->寻找一个特定的名称
      带有特定Frame_ID的多播服务,发送给现场设备来读取设备的标识信息,现场设备名称分配主要与“DCPIdentify.req”的两个功能有关:① 询问哪些参数已经包含在设备中,以便执行有选择性的分配名称;②搜索一个特定的名称,防止重复编址;如果以名称长度为0的条件进行名称搜索,所有未分配名称的设备都必须应答,如果呼叫包含一个特定的名称,则只有具有该名称的设备给出应答。

    • 标识(Identify)响应->寻找一个特定的名称
      “DCPIdentify.res”帧是实时帧,Ethertype为0x8892。在 “DCPIdentify.res”中,控制器接收到指示设备满足哪些选项的应答,这些信息在 “DCPIdentify.Response”数据字段中。

    • 设置(Set)请求->将名称或IP地址写入设备

    • 设置(Set)响应->对Set请求的确认

    名称分配

    由于许多相同设备类型的设备可能被安装在同一个系统中,这就有必要为现场设备分配一个系统特定的名称(NameOfStation),该名称必须在系统启动前通过工程工具写入设备,因为在系统启动前它将被控制器用于名称和地址解析,设备名称必须记忆性地保存在现场设备中。
    PROFINET设备名称分配

    地址解析协议(ARP)

    控制器发出Identify服务询问IP地址是否存在于系统中,因此控制器向所有节点发送一个广播呼叫,仅具有指定IP地址的节点做出应答。该呼叫通过“ARP”超时进行时间监视,这确保了同一个IP地址不会被分配两次。

    邻居探测协议(LLDP)

    通过LLDP探测邻居是“无需组态工具进行设备替换”概念的一部分,这要求能够利用LLDP服务来确定基于端口到端口的邻居设备的数据,并通过DCP或SNMP服务把该数据提供给高层控制器。

    抓包流程:外部引用链接:

  • 相关阅读:
    被辞后恶意报复,程序员清除125台设备数据,被判21个月监禁
    【Java】JDK里有哪些线程安全的Set?
    .NET6: 开发基于WPF的摩登三维工业软件 (7)
    CSDN粉丝福利·全栈思维导图·信年✘原创
    TCGA的拷贝数变异CNV可视化
    成都爱尔周进院长解读不同近视手术的不同度数要求
    化交易之One Piece篇 - onepiece_rsh - reset trading_time.json
    【电源专题】开关电源中的电感电流测量
    Ts interface 和 type 的区别?
    使用 Python 代码实现 ICMP Timestamp 请求和回应
  • 原文地址:https://blog.csdn.net/ASCE_Python/article/details/126201053