从“从站通信调度模块”开始,该模块根据上位机发送过来的询问从站在线命令帧对相应的从站数据结构进行初始化,然后调用“从站是否运行模块”,判断从站是否在线;如果在线,就进入“从站通信管理模块”。在该模块中,由于已经将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.