系统中实时性的挑战与解决打算 Windows

huzhiwen28

宣布于:2011-04-2813:40:0919楼1概述此文是在成功modbus-RTU通讯的基础上总结而来的,重要讲述了如何提高window做工业控制时的实时功能。PC机上做控制系统,普通就是在window或许linux操作系统上做控制系统软件开发,window上做控制系统,有如下长处:1)现有的设施驱动允许2)各类厂家提供的现成的卡板3)以及比拟平民化的开发平台4)数量泛滥的开发人员。2提高实时性手腕window是一个非实时操作系统,假设要做实时义务的话,有必要用些特意的手腕,来提高其实时控制的才干。1)言语最好选用C言语,之所以选用C言语,由于工业控制重要基于windowAPI编程,经常使用很多window内核的服务。2)多义务普通驳回多线程来成功,依据义务的紧要水平,设置线程的优先级别,必定要设置优先级。3)假设在一个线程中有多个义务的话,倡导驳回协程的模式成功多义务,义务外部最好不要调用Sleep()等休眠函数4)为了提高内核的时钟的调度精度,必定经常使用多媒体定时器并且将其精度设置为1ms,这样内核义务调度精度也提高为1ms,这预计是微软的外部耦合。假设不经常使用多媒体定时器的话,内核定时器时钟精度普通只要15ms左右。5)每个线程的一个循环必定监禁一次性CPU,驳回Sleep(1),这样才干保障机器的CPU不被耗光,否则低优先级的义务就没无时机获取口头了。6)计时驳回QueryPerformanceFrequency()和QueryPerformanceCounter()函数来计时,可以到达ns级别。上方手腕都是用户空间的手腕,在内核空间应该也有手腕(运行程序作为驱动跑),然而我不熟,就不说了。3成果经常使用以上几种模式成功的控制程序,时期关键优先级别多线程义务调度精度可以到达2-5ms级别,计时精度可以到达ns级别。这关于很多(大局部)要求不高的控制来说,基本是够用的。至于驱动局部,window的驱动的反响速度还是挺快的(CPU占用率不过高的状况上方到达us级别的反响),这个和咱们用户空间的程序不一样,例如window的串口驱动,可以将接纳FIFO设置为1,驳回事情景式读串口,即使波特率为115200bps,也不会失落数据。经常使用上方的方法,我在PC机上成功了modbus-RTU客户端,其3.5T设置为5ms,可以很稳固地和PLC主设施通讯。4硬实时假设在PC机上谋求真正的硬实时,那么普通是在window或许linux系统中添加硬实时内核,构成双内核系统,例如RTX或许RTAI,这些都有成功的案例,例如西门子的基于RTX的数控系统,基于RTAI的实时控制系统,这些实时系统都是用于100us级别的硬实时系统中,须要开发者自己写驱动,其架构是实时内核上跑实时义务,普通内核上跑普通义务,实时义务和普通义务间经过通讯的模式沟通。由于我还没有在这些实时系统上做过开发,所以临时不写。 回复 援用 投诉

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论