以太网帧和时间直接的关系
-
我们通常的描述的1Gbps/100Mbps/1000Mbps是什么意思:bps就是bit per second的意思,表示每秒支持多少个bit的传输速率。1Gbps就是某一个网卡最大支持用1G bit每秒的速率发送/接收bit流。
- 1Gbps = 1 x 10^9 bit per second
- 1Mbps = 1 x 10^6 bit per second
- 10Mbps = 1 x 10^7 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的数据按照先进先出。而交换机为了保证实时性,缓存一般不会太大。
设备名,LLDP及拓扑视图
- 设备名,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都可以让其实现离线和在线一致。
修改在线IP为离线配置的IP之后(DCP),可以利用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自己控制),超过了组态时就报错了,组态工具本身就限制了最大负载量。
为什么ethercat比profinet实时性好的一点探讨
- 在profinet中,除了IRT,其他都还是遵守标准以太网帧的,它是可以兼容以太网的。但是ethercat不兼容以太网。
- 在pn中,IOD和IOC之间数据收发一帧一帧都是基于V802.1Q的,但是ethercat一次性把所有数据合进了一个报文帧,再由IOD自己拆分和筛选属于自己的一部分,这样一来实时性自然就快了很多。
- 所以ethercat虽然快,但是它最大的坏处就是不兼容以太网,而且它得一个一个线性连接,就像火车车厢一样,给一个一个的站送车厢里的包。它的网络里面要是有不支持ethercat的设备,它的通信就断了;类似的,IRT也差不多,IRT也要求系统里不能有其他非IRT的设备。