关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > Linux2.6下自主设计的PROFIBUS-DP单主站的实时性研究

Linux2.6下自主设计的PROFIBUS-DP单主站的实时性研究

作者:时间:2011-09-21来源:网络收藏

在目前的工业现场总线中,对实时性的要求越来越高,实时性指标也成为工厂选择总线时的一个重要因素。PROFIBUS-DP现场总线作为目前国际上的一种通用现场总线标准,随着生产工艺对控制要求的提高,控制系统的实时性能要求也越来越高。
为了提高PROFIBUS-DP总线的实时性,本文在严格按照协议完成自主设计的PROFIBUS-DP单主站情况下,探讨使用Linux操作系统提高PROFIBUS-DP总线实时性的方案,以及在单主站情况下提高PROFIBUS-DP总线实时性的可行性。
1 PROFIBUS-DP实时性分析
实时性能主要体现在MAC层协议上,不同的总线采用不同的MAC子层协议,PROFIBUS-DP采用的是简化令牌总线协议。同时,测控周期是衡量PROFIBUS-DP系统实时性能的主要指标。
1.1 PROFIBUS-DP的MAC层协议
PROFIBUS-DP采用简化总线令牌总线协议作为MAC层标准,其总线设备包括主站(1类主站和2类主站)和从站,系统组成如图1所示。

对总线上的每一个站点分配一个地址,主站地址组成一个逻辑环,持有令牌的主站可以在持有令牌期间轮询访问从站。
PROFIBUS-DP的介质访问控制协议(MAC)包括主站之间通过占有令牌取得总线的占有权的主主通信和主站与从站之间的主从通信两部分。本文考虑的是一个单主站系统,所以只探讨主从通信部分的实时性。
1.2 测控周期
测控周期是指控制系统周期性访问网络上同一节点的时间间隔,记为Dcycle,它是衡量PROFIBUS-DP系统实时性的一个重要指标。它主要由周期性数据交换时间Tcycle、主站维护时间TGAP和非周期性数据交换时间Tacycle(包括参数配置、从站数据诊断、通信接口配置等)三部分组成。
所以,当主站第一次上电,第一次与从站进行通信时,单主站的测控周期可表示为:

其中N表示系统中的从站个数。
1.2.1 周期性数据交换时间Tcycle
一次典型的数据交换过程如图2所示。

其中,Tbit表示在总线上传输1位所耗用的时间,是其他时间参数的计量单位。由于PROFIBUS-DP采用UART编码方式,每个字符由11位组成,所以传输一个字符需要11Tbit。
从图2可知,一个报文循环由主动帧(请求或发送/请求帧)和回答帧组成。循环时间由帧传输时间、传输延迟时间和站延迟时间组成。所以:

1.2.2 主站维护时间TGAP
当总线上同时存在多个从站时,主站需要与总线上的每个从站进行数据交换。对于单主站系统,该主站将一直持有令牌。所以,当主站处理完与一个从站的周期信息后,就会发出Request_FDL_Status去查询GAP中的一个地址,更新NS值,查找是否有其他从站已经在总线上等待与主站通信。
由于PROFIBUS-DP主站是按地址递增顺序查找从站,并且Request_FDL_Status采用的是以SD1为起始符的报文帧,实际上,从站随时都监听着总线上的数据,所以当报文帧中从站地址与自身地址相同后,从站就会传递应答帧给主站。
在实际应用中,总线上的从站地址一般都按顺序排列(如从站5、从站6、从站7),很少出现跳跃,通常为:

2 下PROFIBUS-DP的实时性分析
由于是自主设计的PROFIBUS-DP主站(未采用协议芯片),所以Tsdr和TID1这两个参数完全由程序决定。如果能缩短这两个时间参数,则对PROFIBUS-DP的实时性能的提高有很大的意义。
2.1 的实时性分析
内核相对以前的Linux内核在实时性方面有了很大的增强,包括O(1)调度器、可抢占式内核、改进的线程模型以及对新的NPTL(Native Posix Threading Library)的支持。
2.1.1 可抢占式内核
在2.6版的内核中,引入了内核的可抢占性,只要调度是安全的,内核就可以在任何时间抢占正在执行的任务。也就是说,只要没有持有锁,内核就可以进行抢占。锁是非抢占区域的标志,由于内核支持SMP,所以,如果没有持有锁,则正在执行的代码就是可重入的,也就可以抢占。
2.1.2 定时器
时钟粒度是否粗糙是制约实时性的一个重要方面。Linux2.6已将终端频率改为1 000 Hz,即时钟粒度为1 ms。
2.1.3 虚拟内存
Linux2.6内核虽然支持虚拟内存,但是虚拟内存的使用将会带来系统响应时间的不确定性,所以在移植Linux内核时,应尽可能去掉虚拟内存虚拟内存机制,尽量保证应用程序直接访问物理内存。
2.1.4 调度策略
Linux2.6中不但支持基于优先级的调度策略,还支持基于比例共享的调度策略。同时,Linux2.6内核进程调度算法的复杂度为O(1),这对于进程的切换效率有了很大的提高。

2.2 Linux2.6下PROFIBUS-DP单主站的软件设计
PROFIBUS-DP单主站的主从通信设计图如图3所示。

从“从站通信调度模块”开始,该模块根据上位机发送过来的询问从站在线命令帧对相应的从站数据结构进行初始化,然后调用“从站是否运行模块”,判断从站是否在线;如果在线,就进入“从站通信管理模块”。在该模块中,由于已经将Linux移植到了该硬件平台上,所以通过fork()函数,建立一个进程,单独处理与特定从站之间的通信;如果有多个从站都进入运行状态,则建立多个进程,分享CPU,按一定的调度策略处理与主站及从站之间的通信。接着,按照PROFIBUS-DP协议的规范,调用相应的“请求帧模块”,发送命令帧给从站设备;从站在接收到请求帧后,会在规定的时间内发送回应帧响应主站,同时,主站在特定的时间内会调用“接收请求帧模块”,处理接收到的响应帧。
在软件设计中,采用了一个单独的数据结构记录PROFIBUS-DP主站的状态,其数据结构如下:
typedef struct host_info{
u8 host_addr;
u8 host_mechanism_flag;
u16 Cycle_Interval;
struct host_fc FC;
u32 baud_rate;
u8 baud_index;
}*pHOST;
另外,软件设计中,对于从站也设计了单独的数据结构维护其状态。从站的数据结构如下:
typedef struct slave_info{
u8 global_status;
u8 address;
u8 baud_support;
u8 configuration_flag;
……
}*pSlave;
同时,由于有了特定数据结构的维护,在主从数据的交换过程中,采用了一次性内存拷贝技术(即当读取到DP从站的输入数据后,直接将对应数据填充到输出帧对应的位置),将大大缩短程序查找内存的时间,加快响应速度。
另外,本软件设计还采用了单缓冲技术。所谓单缓冲区是指不考虑通信中待转换的数据而只保留当前最新的一帧。这样缓冲区中随时都只有一帧有效数据,从而提高整个系统的实时性。
2.3 Linux操作系统下PROFIBUS-DP实时性的改善
与无操作系统、由安全使用协议完成的PROFIBUS-DP单主站相比,使用Linux2.6操作系统后,实时性的改善主要体现在以下几个方面。
2.3.1 站延迟时间Tsdr
站延迟时间是指接收方从接到请求到产生响应数据的时间间隔。在本设计中,由于移植的Linux操作系统已经去掉了对虚拟内存的支持,所有数据都直接存放到物理内存中,同时使用了一次性内存拷贝技术,因此加快了数据交换的速度。
2.3.2 从站之间的相互切换
在未使用Linux操作系统设计的PROFIBUS-DP单主站中,如果总线上存在多个从站,PROFIBUS0-DP与从站的通信完全由程序的逻辑来保证,这无疑会加大编程人员的难度,如果稍有不慎,可能会导致通信出现混乱,从而出现错误。
使用了Linux操作系统后,PROFIBUS-DP主站与各个从站的通信分别由对应的进程处理,总线中有多少个从站,程序中就会有多少个进程。这样,对各个从站的管理就变成对各个进程的管理,只要选择合适的调度策略,则对各个从站的管理就不会出现混乱。同时,Linux2.6内核中由于调度复杂度为O(1),所以进程切换时间大大缩短,这对提高系统的实时性也有很大好处。
2.3.3 从站响应时间
从站响应时间是指当有新的从站挂到总线上时,PROFIBUS-DP单主站识别该从站的时间。在一般的系统中,PROFIBUS-DP主站通过轮询识别从站,而在本设计中,当有新的从站挂到总线上时,会通过一个中断信号告诉该主站,从而与该从站优先通信。此设计是为了使系统更具智能性,这是标准PROFIBUS-DP协议中没有的。
3 主站平台实时性能测试
PROFIBUS-DP主站的主从通信的实时性能主要通过测控周期来判断。搭建测试平台由一台PC机(主要用作上位机,向主站下载GSD文件)、自己设计的嵌入式主站平台(选用的是S3C2410芯片)和3个PROFIBUS-DP从站(ET200S、mm420和自主设计的从站)构成,如图4。


本次测试的比特率选定为9.6 K,同时对三个从站进行组态,分别测试移植Linux操作系统该主站平台的测控周期Dtop和移植Linux操作系统后主站的测控周期Dend。
通过试验,从示波器上的测试图形可以看出ttop的宽度大于tend的宽度,具体测量后可知:
无操作系统下:Dtop≈297.3 ms
Linux操作系统下:Dend≈10.7 ms
可见,移植Linux操作系统后,能使响应时间大大降低,提高对从站的管理效率。
本文对影响PROFIBUS-DP实时性的因素进行了充分分析,同时,在自主设计的PROFIBUS-DP单主站平台的基础上,讨论了无操作系统和Linux操作系统下对PROFIBUS-DP系统实时性的影响,提出了提高自主设计的PROFIBUS-DP实时性的方法。最后,通过实际测试,根据测控周期这个指标比较了两个实时性之间的差异。
参考文献
[1] 杨瑞霞.运用状态机提高嵌入式软件效率[J].单片机与嵌入式系统应用,2009(5):69-71.
[2] 夏继强,梁超众,邢春香.工业通信用网关设计及其关键技术研究[J].电子技术应用,2010,36(2):118-125.
[3] 刘强,甘勇梅,王兆安.PROFIBUS2DP现场总线通讯接口的开发[J].电子技术应用,2006,27(9):39-41.
[4] 卜志翔,胥军.PROFIBUS现场总线通信协议研究[J].现场总线与网络技术,2005(8).
[5] 曲辉,葛丽娟.提高嵌入式系统可靠性软件抗干扰措施[J].内蒙古农业大学学报:自然科学版,2009,30(1):229-232.
[6] LEE K C,LEE S,LEE H H.Implementation and PID tuning of network-based control systems via Profibus polling network[J].Computer Standards and Interfaces,2004,26(3):229-240.
[7] SUK L,KYOUNG N H.NDIS-based virtual polling algorithm for IEEE 802.11b for guaranteeing the real-time requirements.Computer Standards Interfaces,2007,29:316-324.



关键词: Linux2.6

评论


相关推荐

技术专区

关闭