论文部分内容阅读
摘要:为了解决高温监测系统在原DOS系统中不能实现多线程所造成的监测系统容量小、系统运行不稳定、CPU运行效率低、应用及修改程序不灵活等问题。基于高温监测系统V1.0的需求,从完善高温监测系统功能的角度出发,分析现今Linux的发展必然是嵌入式系统这一趋势。采用功能完善且一开始就针对实时系统,在设计之初就考虑了小巧、高性能和高效率的MiniGUI图形用户界面,提出在Linux上运用MiniGUI实现高温监测系统。
关键词:Linux;MiniGUI;监测系统;多线程
中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)09-11650-03
Design And Implementation of High Temperature Watch And Test System Based On Linux Operating System
GAO Ling-ling1, RUAN Lei2
(1.Department of Computer Science and Technology, Hefei University,Hefei 230601, China; 2.Wuhan University of Science and technology Zhongnan Branch,Wuhan 432003, China )
Abstract: In order to solve the incapability of implementing multithreading, which lead to small capability of The High Temperature Watch And Test System ,unstable running system, low running efficiency of the CPU, inflexibility of applying and amending the program ,with the original DOS Operating System. Based on the request of Version 1.0,from the point of view to get a perfect function ,we analyzed the Linux Operating System and found that the development trend is Embedded System. So we adopted the Graphical User Interface MiniGUI , aimed at the Real Time System at the first beginning, considering of the small and cunning , high capability and efficiency at the very start of the program designing. For all the above reasons ,we advanced the item that use MiniGUI to design and implement High Temperature Watch And Test System on Linux Operating System.
Key words: Linux; MiniGUI; Watch And Test System; multithreading
1 引言
DOS操作系统,由于其只支持单线程,在程序设计中,只能采用查询法和中断法来实现。查询法执行过程中,CPU多数时间是在等待,造成资源的浪费。中断法在程序设计复杂时,尤其是当系统的硬件中断资源紧张时,很容易造成中断冲突。Linux具有开放源代码、内核可配置、可裁剪、可移植、可维护等特点。鉴于工业控制对实时性的要求, Linux不断地被应用于工业控制等领域。在Linux上开发图形界面,可以为用户提供友好的交互平台。MiniGUI是一个非常适合工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。因此,选择了在Linux上运用MiniGUI开发高温监测系统的图形界面。以适应今后工业上对嵌入式图形用户界面轻型、占用资源少、高性能、高可靠性、可配置等特性的需求。
2 系统设计策略
2.1 多线程策略
基于I/O的计算中,采用多线程程序设计可以有效的提高系统性能。只要满足计算之间在量上有明显的差异;每个计算是相互独立的。多线程技术开发的应用系统可以保证用户总是能够在一个很短的时间内完成与应用程序的交互,即响应快速的应用程序。高温监测系统具有打印系统信息、测量机房温度、超温报警、超压报警、测试设备运行状态、测试电压等功能。这些都是与I/O有关的操作,且模块之间相互独立,要求实时性强。因此为了在基于I/O计算的应用程序中,实现对CPU性能的提高;应用程序在处理大部分相互独立的计算中,提高容量;并加快应用程序的响应速度,我们采用多线程程序设计方法来实现高温监测系统。
2.2 参数配置策略
高温监测系统如果仅局限于监测高温系统这一单一的功能,则不能满足不断变化的系统需求,降低了代码的使用效率。因此采用了可以在程序启动之后对参数进行配置的策略,并将配置好的参数保存留待下一次开机时使用。如设置待“烤机”数量及特定的“烤机”标号、最高报警温度、最低报警温度、最高报警电压、最低报警电压、以及打印数据时间间隔。这样不但方便了用户的使用,而且增加了程序的适用范围及灵活性,用户不需要修改或者稍加修改就可以用在其他的相关领域,减少了同类功能程序的开发周期,提高了代码的重用性。
3 系统的实现
3.1 环境的搭建
运行平台:8253工业主板,主频PII200MHz,32M RAM,32M DOM,ISA总线接口,网口,32/24 I/O板两块,研祥A/D板一块,TOKY温控表,一台EPSON并口打印机。应用NC110或其他体系结构。
软件平台:Linux kernel 2.4.20 MiniGUI1.3
3.2 系统的实现
3.2.1 显示视窗的实现
Thread版本运行在多线程模式下,它的许多模块都以单独的线程运行;同时,还利用线程来支持多窗口,即每个主窗口对应于一个单独的线程,每个线程有一个消息队列,一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。MiniGUI利用消息队列多线程之间的同步机制,实现客户/服务器机制,建立基于线程的消息传递和窗口管理机制。
窗口功能提供字符操作界面。用MiniGUI实现窗口、对话框、编辑框、按纽、菜单等图形功能。共六个窗口分别为:显示64台CNC状态;根据输入参数确定显示多少台数控的运行信息,如只对10台CNC进行“烤机”,那么只显示10台CNC的信息;显示最近一个小时的温度及电压曲线;显示整个“烤机”过程的温度,电压曲线;在编辑框中显示当前温度、当前电压,目前最大温度、最小温度,最大电压、最小电压,显示系统提示,当前时间,系统开机运行以来,到目前为止运行时间等。
3.2.2 系统功能模块实现
采用多线程的方式,使得完成各个功能模块的线程可以在互相不干扰的情况下独立的进行。通过全局变量和全局数据结构与主程序进行数据交换。由于Linux对I/O板和A/D板不提供驱动,需要编写二个驱动程序,将其加载到Linux的/dev目录下[1]。驱动程序的读操作函数定义如下:
ssize_t scullc_read (struct file *filp, char *buf, size_t count,loff_t *f_pos)
本系统共使用了四个线程。第一个线程完成的功能,是采集智能温控表数据。由于温控表连接的是串口,Linux提供对串口的驱动程序。我们需要与串口通信,设置端口、数据位、波特率、奇偶校验、停止位等属性。第二个线程,用来控制打印机的输出。Linux同样提供并口驱动程序。应用并口打印机定时、准确打印出当前系统状态。系统的开始运行时间、系统结束时间、在系统出错时,立刻打印出当前系统时间和出错系统的编号。需要注意的是,Linux下的打印机不能直接接受命令打印,而是需要一个打印队列,按照队列中的先后次序打印信息。第三个线程完成的功能,是从两块I/O板采集64个输入点的数据,根据从输入点采集回来的数据,编写程序以判断当前该点状态是否正常。并在满足温度和电压报警值的情况下,向I/O板发出报警信号。第四个线程完成的功能,是从一块A/D板采集数据,并转换成电压值,为了减小测量值和真实值之间的误差,加入了电压值增补。 四个线程的创建[2]:
pthread_t t1,t2,t3,t4,t5,t6;
pthread_create(
关键词:Linux;MiniGUI;监测系统;多线程
中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)09-11650-03
Design And Implementation of High Temperature Watch And Test System Based On Linux Operating System
GAO Ling-ling1, RUAN Lei2
(1.Department of Computer Science and Technology, Hefei University,Hefei 230601, China; 2.Wuhan University of Science and technology Zhongnan Branch,Wuhan 432003, China )
Abstract: In order to solve the incapability of implementing multithreading, which lead to small capability of The High Temperature Watch And Test System ,unstable running system, low running efficiency of the CPU, inflexibility of applying and amending the program ,with the original DOS Operating System. Based on the request of Version 1.0,from the point of view to get a perfect function ,we analyzed the Linux Operating System and found that the development trend is Embedded System. So we adopted the Graphical User Interface MiniGUI , aimed at the Real Time System at the first beginning, considering of the small and cunning , high capability and efficiency at the very start of the program designing. For all the above reasons ,we advanced the item that use MiniGUI to design and implement High Temperature Watch And Test System on Linux Operating System.
Key words: Linux; MiniGUI; Watch And Test System; multithreading
1 引言
DOS操作系统,由于其只支持单线程,在程序设计中,只能采用查询法和中断法来实现。查询法执行过程中,CPU多数时间是在等待,造成资源的浪费。中断法在程序设计复杂时,尤其是当系统的硬件中断资源紧张时,很容易造成中断冲突。Linux具有开放源代码、内核可配置、可裁剪、可移植、可维护等特点。鉴于工业控制对实时性的要求, Linux不断地被应用于工业控制等领域。在Linux上开发图形界面,可以为用户提供友好的交互平台。MiniGUI是一个非常适合工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。因此,选择了在Linux上运用MiniGUI开发高温监测系统的图形界面。以适应今后工业上对嵌入式图形用户界面轻型、占用资源少、高性能、高可靠性、可配置等特性的需求。
2 系统设计策略
2.1 多线程策略
基于I/O的计算中,采用多线程程序设计可以有效的提高系统性能。只要满足计算之间在量上有明显的差异;每个计算是相互独立的。多线程技术开发的应用系统可以保证用户总是能够在一个很短的时间内完成与应用程序的交互,即响应快速的应用程序。高温监测系统具有打印系统信息、测量机房温度、超温报警、超压报警、测试设备运行状态、测试电压等功能。这些都是与I/O有关的操作,且模块之间相互独立,要求实时性强。因此为了在基于I/O计算的应用程序中,实现对CPU性能的提高;应用程序在处理大部分相互独立的计算中,提高容量;并加快应用程序的响应速度,我们采用多线程程序设计方法来实现高温监测系统。
2.2 参数配置策略
高温监测系统如果仅局限于监测高温系统这一单一的功能,则不能满足不断变化的系统需求,降低了代码的使用效率。因此采用了可以在程序启动之后对参数进行配置的策略,并将配置好的参数保存留待下一次开机时使用。如设置待“烤机”数量及特定的“烤机”标号、最高报警温度、最低报警温度、最高报警电压、最低报警电压、以及打印数据时间间隔。这样不但方便了用户的使用,而且增加了程序的适用范围及灵活性,用户不需要修改或者稍加修改就可以用在其他的相关领域,减少了同类功能程序的开发周期,提高了代码的重用性。
3 系统的实现
3.1 环境的搭建
运行平台:8253工业主板,主频PII200MHz,32M RAM,32M DOM,ISA总线接口,网口,32/24 I/O板两块,研祥A/D板一块,TOKY温控表,一台EPSON并口打印机。应用NC110或其他体系结构。
软件平台:Linux kernel 2.4.20 MiniGUI1.3

3.2 系统的实现
3.2.1 显示视窗的实现
Thread版本运行在多线程模式下,它的许多模块都以单独的线程运行;同时,还利用线程来支持多窗口,即每个主窗口对应于一个单独的线程,每个线程有一个消息队列,一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。MiniGUI利用消息队列多线程之间的同步机制,实现客户/服务器机制,建立基于线程的消息传递和窗口管理机制。
窗口功能提供字符操作界面。用MiniGUI实现窗口、对话框、编辑框、按纽、菜单等图形功能。共六个窗口分别为:显示64台CNC状态;根据输入参数确定显示多少台数控的运行信息,如只对10台CNC进行“烤机”,那么只显示10台CNC的信息;显示最近一个小时的温度及电压曲线;显示整个“烤机”过程的温度,电压曲线;在编辑框中显示当前温度、当前电压,目前最大温度、最小温度,最大电压、最小电压,显示系统提示,当前时间,系统开机运行以来,到目前为止运行时间等。
3.2.2 系统功能模块实现
采用多线程的方式,使得完成各个功能模块的线程可以在互相不干扰的情况下独立的进行。通过全局变量和全局数据结构与主程序进行数据交换。由于Linux对I/O板和A/D板不提供驱动,需要编写二个驱动程序,将其加载到Linux的/dev目录下[1]。驱动程序的读操作函数定义如下:
ssize_t scullc_read (struct file *filp, char *buf, size_t count,loff_t *f_pos)
本系统共使用了四个线程。第一个线程完成的功能,是采集智能温控表数据。由于温控表连接的是串口,Linux提供对串口的驱动程序。我们需要与串口通信,设置端口、数据位、波特率、奇偶校验、停止位等属性。第二个线程,用来控制打印机的输出。Linux同样提供并口驱动程序。应用并口打印机定时、准确打印出当前系统状态。系统的开始运行时间、系统结束时间、在系统出错时,立刻打印出当前系统时间和出错系统的编号。需要注意的是,Linux下的打印机不能直接接受命令打印,而是需要一个打印队列,按照队列中的先后次序打印信息。第三个线程完成的功能,是从两块I/O板采集64个输入点的数据,根据从输入点采集回来的数据,编写程序以判断当前该点状态是否正常。并在满足温度和电压报警值的情况下,向I/O板发出报警信号。第四个线程完成的功能,是从一块A/D板采集数据,并转换成电压值,为了减小测量值和真实值之间的误差,加入了电压值增补。 四个线程的创建[2]:
pthread_t t1,t2,t3,t4,t5,t6;
pthread_create(