热门搜索:
西门子S7-200EM222CN模块
PROFINET就像是我的亲密伙伴,因为在西门子,他的面市和我的入职几乎是同时开始的,我们是一起成长的。初的PN产品,例如ET200S只有一个PN端口,只能支持RT,设备连接只能通过交换机。初的我,是技术支持团队的一个新人,是网络通信的一个菜鸟,完全不懂通信理论。然而放在同事桌子上的PROFINET培训文档,吸引着我让我随手翻开,像是冥冥中注定,他和我注定在我的职业生涯中深深的纠缠在一起。我们也相互的成就着,通过我的努力,他给我们中国客户的生产带来了翻天覆地的变化,通过他的发展,也给我的职业生涯带来了深远的影响,那么他有什么奇妙之处呢?
首先,在技术上,PROFINET基于以太网,也就是由于以太网,使之能够具有快速的通信速度和灵活的拓扑结构,而PN就是以太网上的实时协议集合,就和TCP是以太网的协议一样,**而已。但是这对于企业生产就不同了,因为在PN之前,以太网是不能延伸到现场级的,而如今以太网一直延伸到现场的末端,带有PN接口的传感器和执行器比比皆是。以太网的安装确实给用户带来了诸多的便利,然而,由于用户大都想着就近连接交换机即可,这种可能导致混乱的连接拓扑,还有就是交换机产品的选择,错误的选择同样会给用户生产带来一些问题,这两个看似很小的问题,却可能会给企业生产带来毁灭性的伤害。
早年去一家钢厂,骨干网使用了冗余环网,正常生产了一段时间,却突然全网瘫痪,导致高炉停产,对于钢厂来说这是一个非常大的事故了。而现场的问题解决却是很简单,原因是冗余环网使用了西门子的SCALANCE X交换机,然而冗余管理器RM却使用了第三方的交换机,那我还说什么呢?前些天,去了另外一家钢管厂去做预维护,询问网络的拓扑连接是如何的,回答是不知,这是中国用户目前普遍存在的问题。通过PRONATA进行现场网络拓扑的扫描,竟然发现网络拓扑出现两个环网,而且是现场级的,也不知什么原因鬼使神差的让生产可以正常进行,我们知道环网会产生广播风暴,导致全网瘫痪。可是由于生产还在继续,我们无法确定真正的原因是什么,只能告诉用户这种环型链接风险较高,需要尽快整改。
其次,对于PROFINET RT通信,我想这是中国用户常用的PN协议,因为配置简单,只要用过PROFIBUS DP就能做很快的转换。然而用户往往会有两个问题,一个是不清楚如何选择交换机,选择的依据是什么?另一个是不清楚分布式IO多能串联多少个,级联深度的依据是什么?
对于个问题,我给用户传达的信息就是只要是交换机都支持PROFINET,然而并不是所有的交换机都适用,这种前后矛盾的话,大家肯定会觉得疑惑不解。PROFINET使用百兆全双工的技术,那么交换机必然是选择的连接部件,而我们在使用PN RT协议的时候,都知道RT通信的报文是带有**级的,也就是含有**级是6(高为7)的VLAN标签(其ID=0),这个标签使之PN数据在网络链路传输时可以“横行霸道”,因为除了MRP冗余环网之外的网络链路上的数据没有**级比它高的,其它数据难以望其项背,这样才能大程度的保证它的实时性。那么如果你选择了例如SCALANCE X300/400系列的交换机用来连接IO设备,那么VLAN标签的**级的意义就消失了,因为这些交换机默认支持VLAN,而这些交换机恰恰判定VLAN ID=0的数据没有**级,也就是说此时的PN数据只能和普通数据一样,不再被**转发,这意味就显而易见了。*二个问题,可能是困扰大家多的问题,因为它影响现场到底如何安装布线。到底能级联多少?我的答案就是能带多少IO设备就能级联多少IO设备?然而我们需要考虑线型网络末端的IO设备的刷新时间的大小,这就需要一个公式了,也就是说一个IO报文从PLC侧发出,经过若干台交换机,这些交换机是支持C&T或是S&F,那么这个公式就是报文的传输时间,加上经过各个交换机的延迟时间,达到终的设备。这个时间才是你参考的Update time的时间,如果不能满足你的实时性要求,那么这台设备需要在线型拓扑中靠近PLC,也就是你的IO控制器。
后,我想谈的就是PROFINET网络如何诊断了,这个是用户经常忽略或者无法正视的问题,因为一旦谈到诊断,那么必然需要全面的IT知识,不像前面所描述的,仅是需要组态和计算,从基本的Ping指令到Wireshark的使用,这些都是*的。但这些往往是用户缺乏的。具体诊断PN网络的方式有很多种,那是根据不同的故障现象采取不同的方法。这里和大家谈谈用户所面临的经常丢站的故障。
丢站的根本原因就是IO数据没有在时间内出现,也就是**时了,这时会报丢站,OB86被激活。那么什么原因会导致IO数据在时间内不能出现,主要是两种原因,种就是网络拥堵严重,数据不能在时间内到达IO设备,那么这种情况使用Ping指令就可以来判断网络链路的状态;*二种就是数据发生畸变,可能是由于干扰或者安装的线缆短路所致,也就是IO报文的CRC检验出现错误,这种情况可以通过Step7在线查看分布式IO的端口的Statistics或者登陆管理型交换机的网页查看丢站IO设备所对应的端口的Statistics,再或者对于S7-1500来说使用LPNDR功能块来读取对应IO设备的端口的Statistics,来查看是否存在CRC错误。如果存在CRC错误,那么导致的原因就是前面我说的两种原因,干扰或者短路造成的,那么就去查EMC和线缆的状况。当然,Wireshark工具是诊断PN网络的重要的工具,当你具备IT知识的时候,建议你使用Wireshark这个工具去检测和发现网络故障,因为它是良好利器。
关于PROFINET技术,其实它包罗万象,涉及各种IT知识,当你想理解它时,你就需要理解终端设备,例如:PLC和分布式IO,其实西门子PLC通信原理也是来源于我对PN的研究,然后理解TCP协议,路由协议等等,也就是这一根绿色的网线使我在技术上越走越远,越走越宽。这里我仅仅提到了PROFINET技术的冰山一角,深奥的理论主要集中在IRT上面,需要对其设备集成的交换机内部要有全面的理解,因为IRT需要对时,各个时间片段的计算是非常关键的,在这里我无法一一的给大家说明。而现在由我的同事,网络*冯学卫先生正在网上论坛主持PROFINET通信探秘技术π的活动,他是一位非常的工程师,对于IT和各种网络协议都非常的了解,我们经常在一起讨论关于网络,PN,通信的各种问题,对各种技术细节进行深入的剖析,例如Step7中IO RT的时间预留后台是如何计算的等等。大家如果想
我们来思考一下,想象当时我的思考过程。首先300PLC手册中提到S7 PUT/GET server交换数据发生在CCP,而300PLC并没有程序,那么CCP这个部分就承担数据交换的功能。既然CCP做了这个功能,而CCP是每个PLC循环周期必须处理的部分,那么数据的接收和发送是周期性的,周期时间就是300CPU的循环周期。而400PLC中的PUT发送是按照400CPU的循环周期进行的,那么这样一来是不是PUT就在时间片中进行的呢?先不考虑时间片,那么这个400PLC中的PUT在这里测试的意义就不大,只需要400PLC中保留GET即可,这时查看数据是否按照300CPU的循环周期进行发送到400CPU。
既然按照这个思路,那么就需要设置CPU的循环周期尽量的大一些,因为这样在Wireshark中的抓包可以按照时间排序辨认清晰,能够判断是否数据的发送是按照周期进行的。于是我需要思考如何可以把CPU的周期尽可能的延长。
通过查找手册,WAIT指令就可以实现这个功能,延长CPU的循环周期。然而WAIT的延时时间单位是微秒,而我需要肉眼可见的时间延时,那么就需要使用LOOP指令,循环多次调用WAIT即可。编写的程序如下:
A M100.0
JCN jmp
L MW0
Next: T MW2
CALL “WAIT”
WT:=10000
L MW2
LOOP next
jmp: NOP 0
简单解释一下这个程序,这段程序放到OB1即可。M100.0的作用就是是否我们要调用这个延时程序,如果M100.0为1,则启用延时程序。WAIT延时的单位时间设置了10ms,如果设置MW0为100,那么终实现的延时时间就是100x10ms=1000ms,即1秒。这里需要注意的是CPU属性页中的扫描循环监控时间需要设置**过1秒,这里设置大值,即6秒。这样避免在启动延时程序后,CPU发生停机现象。顺便说一下,大家在*大讲堂里面看的程序也是这个,这个程序可以作为一个模板,放到程序的任何一个地方去做测试,这段程序的用途非常广泛,除了测试PLC高级通信,也可以用于测试其它地方。例如,用于测试Profinet RTA的报警响应。这段延时程序非常非常非常有用,因为让时间慢下来,你会看到通信的具体动作。
试验的结果终验证了这些假设,在Wireshark中可以看见每隔1s钟,会出现一个S7的数据报文,在DB块的数据中,修改DBB0,DBB10,例如AA,BB,可以在报文中看见这些数据变化,更加证明了这些数据就是300PLC发送给400PLC的S7数据。
西门子S7-200EM222CN模块