PROFINET设备模型
设备名、MAC地址和IP地址是为了在网络中找到对应设备,而要定位确切的输入输出变量就需要通过地址映射的方法了,也就是设备模型的概念。PROFINET IO的设备类型与PROFIBUS几乎相同,现场设备有以下:
紧凑型现场设备(固定组态);
模块化现场设备(灵活组态)。
PROFINET IO设备模型说明了模块映射到紧凑型和模块化设备的物理插槽,包括若干槽与子槽,可能有若干通道,设备制造商将输入输出变量映射到这种结构中。
我越看这幅图,越觉得PROFINET设备模型就像一个整体衣柜,不信你看看。整体衣柜当然会有若干隔断(槽),每个隔断通过隔板分成一个个的储物空间(子槽),说不定一个储物空间内还有抽屉(通道),方便摆放小件物品。你在用整体衣柜时可能还会考虑物品分类摆放,将几个部分专门用来放衣物、裤子、被子、杂物什么的,这种物品分类就像功能模块的划分,相当于PROFINET中模块与子模块的概念。
GSD文件定义了IO设备有多少个槽/子槽。槽0中的子槽0表示DAP,槽1~0x7FFF定义了外部模块的可配置范围,在连接过程中会定义好子槽的编址。注意:循环数据的编址通过制定的槽/子槽的集合,编号不需要连续排列,之间可以有间隔。
数据分循环数据和非循环数据,循环数据包括实时测量值和测量值的质量状态;非循环数据包含测量范围、滤波时间、报警上下限、制造商特殊参数等。非循环数据的地址安排采用槽号(slot)、子槽号和索引(index)相结合的方法编排。设备管理器用来管理这些数据的编排,它包含了所有数据编址的信息。
设计一个场景——回家找衣服:首先需要通过房间号先找到房间(IP地址),接着找到整体衣柜,再看看隔层里有没有要找的,衣服也许整齐的码在隔板上,但说不定还要拉开其中的抽屉才能看到衣服。
彻查PROFINET循环通信
前面提到PROFINET所采用循环通信的机制,分布式设备可以从时间的角度去进行分析,那么什么是时间的角度呢?就是说循环所对应的“周期”的概念。在IO系统中控制器像一个项目经理一样,要想有效的控制项目进度,必须要定期获悉项目状况,根据实际情况拿出解决方法,而作为员工的设备则需要定期的汇报各自的进度,并推进项目。图这反映了一个项目中工作内容——每日安排、每周例会、月报和季报,以及相应的周期,可以看出每隔若干工时就要进行一次项目交流之类的工作。
表显示的项目安排简直就像一个“工作狂”,不过没有一点“工作狂”的精神,如何能够深入解析PROFINET的循环通信?
为什么需要循环通信
项目汇报的目的是方便项目经理能够及时处理出现的问题,保证项目顺利运行。作为项目经理的IO控制器(一般是PLC)运行期间是周期性处理,那么也就需要设备能够及时的输入和输出,那么作为沟通渠道的总线所要做的就是保证数据正常通信。
先看看PROFIBUS是如何保证通信的,PROFIBUS采用环令牌总线方法,取得令牌的主站才能和从站交互数据,采用主站请求、从站应答的方式读写数据。也就说在这个项目(总线系统)中,项目经理的工作是很累的,他要定期的催要员工的工作汇报,好在他的员工还是挺敬业的,有要求马上就响应。
而PROFINET的通信模型是生产者/消费者模型,各个通信节点是平等的,理论上可以自由传输数据。也就是说在这个项目中,项目经理的工作看上去很轻松,不用追讨员工的项目汇报。不过自由容易滋生散漫,如果完不成项目,整个团队都要蒙受损失,那么一个聪明的项目经理是需要制定强有力的制度来保证项目的运转,这就是PROFINET IO系统使用循环通信的原因。
如图所示,在这里控制器(CPU)通过刷新过程映像区PII和PIQ来读写过程数据,而设备周期性地把过程数据输入到PII,也需要周期性的把PIQ中的过程数据输出。其中T1为CPU的循环处理周期,T2为PROFINET IO系统的更新周期。当T1>T2时,控制器的处理速度比输入输出速度慢,不能按照系统更新时间来控制设备,也就是说项目经理不能及时处理员工定期反映的问题;而当T1<T2时,控制器的处理速度比输入输出速度快,可以按照系统更新时间来控制IO设备,因为项目经理能力很强,有问题立马就解决了。
循环通信之二——节拍
操作系统的发展是从单任务变为多任务,对于多任务操作系统来说,CPU还只是一个,只是将CPU的运行时间分成一个一个的时间片,每个时间片运行一个任务,由于CPU的运行速度实在是太快了,这样多个任务看起来就像是同时在运行一样,提高了多任务的执行效率。
同样总线系统也可以将通信时间分成一个一个时间片,每个时间片传输若干设备的数据,从而提高了通信的效率。这个时间片就是节拍(Phase)。可以说,节拍就是PROFINET IO系统的心跳。
生产流水线就是将整个工序分成若干步骤,周而复始的运转。这里请大家把图5-10想象成Smart fortwo的组装生成线,可以看到经过四个阶段(Phase)后,车子已经安装上了四个轮子、两个座椅和一个车身,一台整车新鲜出炉。
那么节拍是怎么算出来的呢?如果有读者是做嵌入式软件出身的,那么这个概念其实挺好理解的,就是参考了ARM体系结构中的概念。ARM的系统时钟是由外部时钟(晶振)通过提高频率得到的,比如说晶振电路通常可以提供12MHz的外部时钟,ARM就通过内部的一个倍频电路,将外部时钟提高若干倍数后得到系统时钟,也可以说是ARM的节拍。
如果读者没有接触过ARM,没关系,可以想象一下钟表内部齿轮传动的场景:人们通过上紧的发条获得周期运动的动力,带动一个齿轮转动,那么该齿轮就作为主动齿轮,其旋转周期就相当于钟表的节拍。
而在PROFINET IO系统的循环通信中,节拍也是将基准时钟间隔放大一定倍数后所得到的,这个倍数就叫做发送因子(SendClockFactor),如公式所示:
Phase = 31.25us * SendClockFactor
SendClockFactor的取值是2N,N为0到9之间的整数。而基准时钟间隔是31.25us,是1ms的32分之一,为什么是这个数字呢?本人目前也没有想明白,这里想问一声:“元芳,你怎么看?”
IO设备的减速比
有了节拍,整个系统就好像上了根发条,可以被驱动着执行不同的任务了。
继续沿用上一节的说法,ARM不仅有系统时钟,其包含的外设也需要自己的时钟(比如串口、计数器、IO),而且外设的时钟是通过系统时钟分频得到的,通常会低于系统时钟若干倍,这个倍数就相当于减速比因子。而指令周期就是由外部时钟信号乘以一定比例系数得到,系统时钟就是总线周期,由若干指令周期构成,而各个外设的时钟就是不同IO设备的更新周期,基于系统时钟并乘以一定比例得到,负责发送和接收控制器的数据。
而对于钟表当中的齿轮传动,主动齿轮会带动若干的齿数较多的从动齿轮一起动作,从而完成了令人叹为观止的啮合动作,主动轮与从动轮的齿数比例就是减速比,每个从动轮的减速比是不同的,其设计之巧妙,那是需要精密计算的。
2015年可以说是机器人技术最热门,做工业机器人离不开运动控制方面的内容,其中就包含轴与通道的概念,而通道就是指以一个主轴运动,而若干从轴跟着主轴一起运动,从而实现机械人按既定轨迹准确动作。那么主轴的周期就是节拍,从轴则按照一定比例保持与主轴的跟随关系,这个比例就是减速比。
减速比的取值是2的n次幂,n为不大于16的整数,那么每个IO设备的发送时钟将根据下面公式计算得出。
Send Clock = 31.25us * SendClockFactor * ReductionRadio
还有一个重要的概念就是IO系统的更新时间。PROFINET IO系统的主要特征是交互过程数据的更新时间,它能体现系统的对外部事件的反应时间,并且可以为一个IO设备定义不同的输入和输出间隔。系统更新时间应该等于所有IO设备当中最大的更新时间,因为经过这个时间后,所有的IO设备都完成了一次数据通信。
满足一致性类别A与B的IO系统更新时间最短为1ms,以2的幂次方递增,最大为512ms;
对于一致性类别C的系统更新时间最短可以达到31.25us。
其它和通信相关的时间参数
至此,跟大家分享的一些对于PROFINET的理解就到这里吧,如果大家有何问题,欢迎留言,谢谢大家关注!