PN-RT笔记

以太网帧和时间的关系

  • 描述1Gbps/100Mbps/1000Mbps:bps表示每秒支持多少个bit的传输速率。1Gbps就是某一个网卡最大支持用1G bit每秒的速率发送/接收bit流。

    • 1Gbps = 1 x 10^9 bit per second
    • 100Mbps = 1 x 10^8 bit per second
  • 以太网帧(Frame)之间的发送时间和发送间隔

    • 以太网帧在传输的过程中它不知道它什么时候传的是当前帧,什么时候传的是下一帧。
    • 为了分辨帧与帧之间的差别,引入:帧间距(IFG,Interframe Frame Gap),规定两次数据之间传输的时间必须大于IFG,它才能被定义为不同帧。
    • 以太网规定IFG最小值是理论上传输12个bytes所用的时间,在不同的网络带宽中,传输12个bytes所用的时间肯定是不一样的,所以不直接规定时间长度。
    • 当我们在100Mbps下:1 s = 1 x 10^9 uS -> 传一个bit 需要 [1/(1 x 10^7)] * (1 x 10^9) = 100 纳秒;传一个字节就是8 * 100 = 800 纳秒;最小的IFG就是(12*800)个纳秒。
    • 当我们能计算当前网络带宽中一个bit传输所用的时间,其实我们不止能算出IFG的时间,还能算传输一帧所用的时间。
    • 按照100Mbps是每秒最多传送1x10^8 bit的数量来反推,1毫秒大概基本可以传输的最小帧。

交换机的泛洪和丢弃行为

  • 交换机的有学习的过程(记录MAC表),然后才能决定转发。
  • 以太网帧(802.1Q)中的VLAN字段,定义了该帧在交换机中被转发的优先级。
  • 当一个目标MAC地址在交换机的端口中都找不到,它就会去每一个(除了当前接收的端口)端口问一遍,如果一直发找不到端口的目标MAC,交换机的负载就会被极大的挤占,这种就是泛洪。
  • 泛洪的形成是通过以太网帧实现的,以太网帧本身是单播帧,这种行为属于单播帧的广播行为,而不是广播帧,它们有很大的区别。
  • 交换机的丢弃行为:
    • 接收到的以太网帧CRC校验不通过的会直接被交换机丢弃。
    • 交换机内部的缓存buffer决定了一些来不及进入buffer的数据会被丢弃,进入buffer的数据按照先进先出。而交换机为了保证实时性,缓存一般不会太大。

设备名

  • 设备名,IP和MAC地址的关系
    • 设备名是PN中应用层中的地址
    • IP是网络层中的地址
    • MAC是数据链路层中的地址
  • 参数之间的关系:
    • 当PN的控制器已经在建立连接的时候被分配了参数配置之后,PN控制器就会使用下载进去的设备名去寻找在线的设备名,如果找到了就会继续查看下载进去的设备对应的IP在在线是否存在(此功能通过ARP地址解析来完成),若ARP有响应,则表示离线和在线的IP一致,也就实现了IP地址和MAC地址的映射关系。
    • 若是ARP没有响应,说明离线配置的IP和在线的IP不一致,此时,会通过DCP协议把在线的IP更正为离线组态的IP地址,然后再次通过ARP解析IP地址和MAC地址的关系,PN的通信即可正常建立。
    • 总结:建立PN连接的关键参数是设备名一致,只要设备名一致,,后续的IP和MAC都可以让其实现离线和在线一致。
  • 通常,我们在更换新的同型号设备之后,往往还需要为其手动分配离线配置好的设备名。但是在拓扑视图中,却不需要这么做:
    • 在拓扑视图中,端口相邻设备的离线设备名已经被控制器记住。所以更换同型号的设备不用在重新手动分配设备名,这使用了LLDP协议,LLDP协议可以发现一个端口相邻的设备的设备名。
    • 在拓扑视图中,因为端口连接的设备已经被提前告知了,所以被组态了拓扑的端口不能再随意插入其他设备。

PN RT实现

  • 更新时间
    • IOD模块具有更新时间,可以为同一PN系统上的不同IOD设置不同的更新时间。
    • IOD的更新时间一定是PLC Clock的倍数。
    • Update time其实就是IOD每次给控制器发数据的时间。

  • 时钟
    • 最小时钟由PLC的性能决定,PLC的性能越好,能做到的最小时钟越小。
    • IOD模块上的更新时间 = 因数 * PLC时钟

  • 因素
    • 在博图上不太能看得到因数,但是在step7上可以看到因数和更新时间以及时钟之间的关系。它们始终是倍数关系。

  • 看门狗
    • 看门狗时间是由可接受的丢失帧数决定的,比如此处可以接受丢弃3帧,每帧的更新时间是2ms,那么看门狗时间就是6ms。

  • 循环数据PN-PN
    • 我们通常把IO数据叫做周期性数据,这么叫的原因其实就是因为PN-IO本身就是按照更新时间循环不断的刷新的
    • IOD给IOC发消息是按照更新时间来的,那么IOC给IOD发消息呢?答案是也是按照刷新时间来的,只是不同的IOD和IOC之间的设置参数决定了它们的更新时间可能是不一样的
    • 如果IOC下面有几十个IOD设备,那么IOD给IOC发的时候都是连续发的,这个好理解。那么IOC给各个IOD回数据呢?IOC会把更新在同一更新周期的IOD先发,再发后面的,设计上一定是保证了IOC到某一个IOD之间两次发送间隔是基本等于设定的更新时间的。
    • RT的意思就是说IOC和IOD之间约定更新时间,那么IOC给IOD发消息的时间一定是在更新时间内的,多出来的一点点时间来自于帧在交换机内部排队的时间。
    • 可以做一个实验,IOC连50个IOD,其中30个设置为1ms刷新,20个设置为2ms刷新。那么我们会看到的IOC发数据先把1ms的30个IOD数据发送了(在1ms内,而不是刚好卡在1ms那一刻,也许在500us的时候就发完了,和负载设置有关)。剩下的20个设备是2ms更新周期,IOC可能会在前1ms发一部分,后1ms发一部分,只要保证2ms内发完(和负载有关)
    • RT和IRT的其中一个不同就是RT约定的更新时间是个范围,只要在范围内完成就行,而IRT约定的是个时刻,必须某一个特定的时刻一起发。

Ctrl + T把时间戳变成REF,就可以观察出来某一个设备的发送周期全是2ms,这和我们的更新周期是一致的。
如图已连续丢掉了3(最小是3,也可以设置为其他)个帧,那么就会出现掉站错误(看门狗导致的)
筛选MAC地址:eth.dst == [mac地址]

  • 网络负载
    • 在PN的网络里,有红色段(IRT),黄色段(RT),绿色段(其他协议)。负载的一个点就是把网络给分类,优先发红色和黄色的,当负载100%的时候,交换机丢弃也不能先丢红色和黄色的帧。
    • 在V802.1Q里,有VLAN,也是通过优先级来判定负载大的时候先丢弃哪一个帧。
    • 在很多IOD和一个IOC连接的时候,组态软件首先就会根据设置的负载计算组态里面的最大负载量(依据组态的IOD的数据量算出来),若超过了,组态时就会报警。
    • 在很多IOD和一个IOC连接的时候,不同的IOD在同一个更新时间内什么时候发送或者接收帧,负载也是判断的一部分。
    • 一个简单的转换,如果设置负载为50%(博图不允许负载设置超过50%),对于1ms更新时间的IOD而言,它大概就是要求所有的1ms刷新的帧一起发的总时间不能超过500us(可以前500us发一点,后500us发一点,来均衡负载,这个靠IOC自己控制),超过了组态时就报错了,组态工具本身就限制了最大负载量。

LLDP和SNMP

  • LLDP:链路层发现协议:

    • 位于二层,用于相邻端口之间
    • 特点是只能主动发,对端设备并不回复LLDP帧
    • 每隔一个固定时间发一次LLDP
    • 注意:LLDP只和相邻端口发,(mib的最后一位数字表示节点的第n个端口);LLDP是多播发(星形连接的情况)。
    • LLDP表现的是端口和相邻端口之间的关系,所以LLDP帧如果被转发的话,帧的信息就失真了。西门子的非管理型交换机也会过滤掉LLDP帧,不会无脑转发,这才是正常行为。
  • SNMP:简单网络管理协议:

    • 位于七层,收集管理LLDP信息。
    • SNMP服务器和客户端之间相互发(SMNP没有相邻的要求,它收集所有服务器的信息)
      • 发起get_next_request的是客户端
      • 回应get_reponse的是服务器
      • 和LLDP一样,snmp问答也是周期性的。

拓扑的验证

  • LLDP和snmp之间没有什么绝对关系,有LLDP就能做拓扑。

  • 如下组一个拓扑结构:

  • 先给目标设备恢复出厂:

  • 正确按照拓扑方式连接网线,抓包,观察恢复连接后拓扑是如何自动给空的识别分配设备名字:

    • plc先问谁是“im155-6-pn-ha-v1.3-s”,这是PLC记在它自己组态信息中的设备名。但是没有收到回复,因为此时已经没有设备叫这个名字。
    • plc继续问谁的花名,AliasName是:“port-002.im155-6-smartx-v1.3-s”。plc会这么问是因为plc已经通过预先组态好的拓扑信息知道了“port-002.im155-6-smartx-v1.3-s”是“im155-6-pn-ha-v1.3-s”的花名。
    • 邻居之间的信息通过LLDP相互交流;
    • 此时,目标设备回复了plc,说它的花名叫“port-002.im155-6-smartx-v1.3-s”。证明它就是plc要找的“im155-6-pn-ha-v1.3-s”;
    • plc确定目标之后,直接给目标设定它的名字和IP。这个“Set Req”和在step7中手动设置设备名的指令一样。
    • 目标回复设定已正确。
  • 花名是通过LLDP设定的。邻居通过LLDP发送给你,把你叫做它的某某端口(这是邻居给你的外号)。当你失去了自己的名字的时候,还可以通过外号把你找回来。

  • 在400系列的验证中,如果你的名字不是空的,plc也会发起花名的询问知道你是谁,但是因为策略考虑,plc不会对你发起"Set Req"请求,你的名字将不会被重新分配。

  • 花名在端口刚连接的时候通过lldp分配,之后也会周期性的分配:

  • 实验: 保持组态信息不变,PLC直连目标设备(此时实际系统中不存在任何邻居设备),是否plc还能对目标设备发起花名请求:

    • plc既谁是某某设备名,又问谁是某某花名,但是都得不到回复。因为目标设备中没有任何相关信息。
  • LLDP是邻居之间的交流,因为LLDP只能主动发,对端不能去校验。所以如果邻居能告诉你一个能同plc组态预设好的花名一致的校验名字,就算你的邻居设备类型不匹配,参数组不上,也不会影响到plc根据这个花名给你分配设备名。

  • LLDP的分配是周期性的,也许几秒交流一次。那么可能会出现邻居名字已经改掉了,但是你还是靠着邻居的旧名字被plc给分配上设备名了。(只要这个过程发生在下一次LLDP交流之前就能做到。)

  • 花名的变化:当设备存在系统中时,无论设备被参数化与否,它都在往外发LLDP包。但是问题在于:这个邻居设备在被参数化之前,发出来的LLDP包中包含的名字是不符合PN结构的花名,这个花名和PLC发起req时参考的花名肯定是不一样的,一直到邻居被参数化时,根据PN规范把LLDP的花名格式修改成符合的格式,直到这时候,你拿到的来自于邻居的花名才是可以在PN系统中使用的。。 ==>引申出来在拓扑系统中,虽然可以依据谋一个确定的设备名,然后依靠port口把邻居依次参数化,但是这个过程一定是链式的,一个设备被参数化完成后才能作为合格的邻居发出符合PN的花名给下一个设备,下一个设备再继续参数化,以此类推。所以拓扑系统中,多个设备被参数化时,过程会慢一些。

posted @ 2024-11-19 13:49  你要去码头整点薯条吗  阅读(261)  评论(0)    收藏  举报