论文部分内容阅读
【摘 要】设计一种基于Linux Qt平台的国内某型地铁人机界面方案,综合考虑列车运行的环境,系统采用性能优越的X86架构作为硬件平台、稳定性强的Linux系统作为软件平台,在此基础上利用开源的图形界面库Qt开发界面程序。通过在硬件平台上的实际应用,验证了方案的可靠性与稳定性。
【关键词】人机界面,Qt,x86架构,Linux系统
一、引言
车辆人机界面(Human Machine Interface,HMI)是列车网络控制与监控系统的一个重要组成部分,是列车驾驶员和维护人员操作列车的窗口。它不同于传统司机室以模拟仪表和指示灯为主的显示方式[1],这种基于平板显示器和微机结合构成的智能终端,具有信息显示、参数设定、功能测试和数据转存等功能,它为驾驶人员实现对车辆各子系统状态的实时监测与控制,提供了一个更加友好、简洁、标准化的界面。
基于上述原因,本文提出了一种城市地铁车辆的人机界面设计方案,方案采用Intel X86处理器作为硬件平台,以嵌入式Linux系统作为软件平台,在此基础上采用开源的图形界面库Qt开发HMI应用程序。通过在硬件平台上的实际应用,验证了方案的可靠性与稳定性。
二、系统方案
(一)硬件平台的选择
当下的硬件平台主要有x86架构和ARM架构两种选择。ARM架构的硬件平台相较于x86架构,具有功耗低的特点,但在硬件资源方面,x86架构具有明显的优势[2],列车对功耗的要求并不像手机等移动设备那么苛刻,反而在人机界面的性能方面要求比较高,因此X86架构的硬件平台更适合做车载人机界面的开发。另外,行车过程中复杂的电磁环境和强烈的机械振动,要求显示器硬件有很好的电磁兼容性和抗振能力,有比较大的存储能力。综合上述因素,选择了基于Intel X86平台的PIXY INC90系列显示屏作为硬件平台。
(二)软件平台的选择
Linux操作系统完全沿袭了Unix系统的架构,在网络通信方面的效率和功能都很突出[3];Linux是开源的操作系统,设计者可以根据自己的开发需求在此系统上进行二次开发,且免费使用;列车人机界面可使用的硬件资源相对较少并且要求上电时间短,综合上述因素此处操作系统选择了嵌人式Linux。
(三)编程语言的选择
Qt是一个跨平台的C++图形用户界面库,由挪威TroUTeeh公司出品,它支持绝大部分类Unix系统和Windows平台,拥有良好的跨平台特性[4]。Qt/Embedded Linux,为嵌入式系统的开发人员搭建了一套完善的窗口系统和开发平台。 Qt还提供了一种称为signal/slot(信号/槽)的机制替代了一般Gui库中所使用的回调函数机制。
三、开发环境搭建
硬件平台选择PIXY INC-90显示器,显示器搭载Linux操作系统,以Oracle VM VirtualBox和Qt creater作为软件仿真、编译和开发平台,开发的应用程序经过交叉编译生成可执行文件后,通过Win Scp软件导入显示器,再用SSH服务软件远程控制显示屏,执行目标程序[5]。
四、人机界面设计
(一)设计流程
控制电源DC110V接通后,两个司机室的HMI同时开启。激活端司机室的HMI正常显示,非激活端司机室的HMI显示黑屏,主显示界面根据用户操作需求分为运行模式与检修模式,运行模式主要面对司机,检修模式主要面对检修技术人员,运行模式切换至检修模式需输入密码。设计流程如图1所示。
(二) 界面绘制实现
总程序采取顺序执行的方式,在参数初始化之前,首先执行MVB通讯模块、亮度传感器检测,以及判断串口配置文件是否读取成功程序,若成功,则进行参数初始化,若失败,则弹出故障提示界面,提示驾驶员或维护人员按故障提示进行操作。部分检测程序代码如下:
if (engine->init(0x12, 5) != PIXYMVB_OK) //判断MVB通讯模块是否正常
{ FaultReason = 1; //故障原因为1
showFaultHintScreen(JudgeFaultReason); //失败,根据故障原因,显示故障提示界面
}
QFileInfo fileInfo(“/dev/ttyUSB_SC”); //读取显示器亮度硬件配置文件
if (!fileInfo.exists()) //判断硬件是否存在
{ FaultReason =2; //故障原因为2
showFaultHintScreen(JudgeFaultReason); //失败,显示故障提示界面
}
图1 设计流程图
1.信号/槽(signal/slot)机制
本文提出的人机界面设计方案采用多级界面呈现的形式,界面之间的切换通过信号/槽机制实现,切换功能实现部分代码如下:
Class QPushButton; //定义按键类
QPushButton* Button; //声明一个按键指针
Button –>setGeometry(x,y,width,height); //定义按键的坐标、长宽参数
Button->setText(QString); //设置按键显示文本
Private signals:
Void SwitchScreen(); //声明切换界面的信号
Private slots:
Void JumpToTargetScreen(); //声明跳转槽函数 Connect(Button,released(),this, SwitchScreen ()); //按键被点击且松开时,触发信号
Connect(screen, SwitchScreen (),this, JumpToTargetScreen ()); //信号调用槽函数,实现跳转到目标界面
2.静态界面绘制
显示器启动后进入主显示界面,主界面主要分为三部分:最上端的页眉,最下端的页脚,以及显示区域最大,位于中部的显示画面。其中,页眉、页脚的显示内容基本固定,不因界面切换而改变;显示界面的内容会随界面切换而变化。
页眉绘制的部分代码如下:
class Controller : public QWidget //继承自Qt基础类 QWidget
Controller::init()
{
topHeader = new PTopHeader(this); //在内存中new一个空间
topHeader->setGeometry(x,y,width,height);//设置坐标、长宽参数
topHeader->show();//初始化为显示状态
}
页眉显示车号、画面号及时间信息,在进行页面切换时,保持页眉一直处于Show()状态;显示画面主要包括车辆当前站,终点站,速度,网压以及子系统状态。
(三)MVB通信
MVB是用于在一个固定编组的几个车辆内连接各种可编程设备的车辆总线。显示器作为车辆总线的一个子系统,通过MVB总线实现同VCU的通信,通讯程序部分代码如下:
Void GetCommData() //获取宿端口数据
Map.insert(); //把端口地址和获取的数据作为键值对插入容器中
void GetOnePortData( wantPortAddress); //通过端口地址读取容器中的数据用于显示
五、结束语
结合公司的实际项目,本文设计了一种城市地铁车辆的人机界面方案。本文对软硬件的选择及系统平台的搭建等方面进行了阐述,并且着重描述了软件系统的开发流程。以PIXY INC-90系列显示器为应用平台,利用功能强大的开源图形库Qt进行系统开发设计,最终实现了地铁列车人机界面系统。通过在显示器上实际应用,验证了本文方案的可靠与稳定。
参考文献
[1] 客金坤,梅樱,郭红卫,等.基于图形化编程语言的列车人机界面设计[J].都市快轨交通,2011,24(1).
[2] 任亚飞,唐涛.基于嵌入式Linux的列控系统车载人机界面的实现[J].铁路计算机应用,2005,14(12).
[3] 杨志伟,曾艳姗.基于Linux的ACM在线评测系统研究[J].计算机与现代化,2010(6).
[4] Jasmin Blanchette, Mark Summerfield. C++ GUI Programming with Qt 4, 2nd edition. 2008.8
[5] 刘超,周纪超,张红星. 基于Linux Qt的列车人机界面设计与实现[J].计算机与现代化。2013,4.
【关键词】人机界面,Qt,x86架构,Linux系统
一、引言
车辆人机界面(Human Machine Interface,HMI)是列车网络控制与监控系统的一个重要组成部分,是列车驾驶员和维护人员操作列车的窗口。它不同于传统司机室以模拟仪表和指示灯为主的显示方式[1],这种基于平板显示器和微机结合构成的智能终端,具有信息显示、参数设定、功能测试和数据转存等功能,它为驾驶人员实现对车辆各子系统状态的实时监测与控制,提供了一个更加友好、简洁、标准化的界面。
基于上述原因,本文提出了一种城市地铁车辆的人机界面设计方案,方案采用Intel X86处理器作为硬件平台,以嵌入式Linux系统作为软件平台,在此基础上采用开源的图形界面库Qt开发HMI应用程序。通过在硬件平台上的实际应用,验证了方案的可靠性与稳定性。
二、系统方案
(一)硬件平台的选择
当下的硬件平台主要有x86架构和ARM架构两种选择。ARM架构的硬件平台相较于x86架构,具有功耗低的特点,但在硬件资源方面,x86架构具有明显的优势[2],列车对功耗的要求并不像手机等移动设备那么苛刻,反而在人机界面的性能方面要求比较高,因此X86架构的硬件平台更适合做车载人机界面的开发。另外,行车过程中复杂的电磁环境和强烈的机械振动,要求显示器硬件有很好的电磁兼容性和抗振能力,有比较大的存储能力。综合上述因素,选择了基于Intel X86平台的PIXY INC90系列显示屏作为硬件平台。
(二)软件平台的选择
Linux操作系统完全沿袭了Unix系统的架构,在网络通信方面的效率和功能都很突出[3];Linux是开源的操作系统,设计者可以根据自己的开发需求在此系统上进行二次开发,且免费使用;列车人机界面可使用的硬件资源相对较少并且要求上电时间短,综合上述因素此处操作系统选择了嵌人式Linux。
(三)编程语言的选择
Qt是一个跨平台的C++图形用户界面库,由挪威TroUTeeh公司出品,它支持绝大部分类Unix系统和Windows平台,拥有良好的跨平台特性[4]。Qt/Embedded Linux,为嵌入式系统的开发人员搭建了一套完善的窗口系统和开发平台。 Qt还提供了一种称为signal/slot(信号/槽)的机制替代了一般Gui库中所使用的回调函数机制。
三、开发环境搭建
硬件平台选择PIXY INC-90显示器,显示器搭载Linux操作系统,以Oracle VM VirtualBox和Qt creater作为软件仿真、编译和开发平台,开发的应用程序经过交叉编译生成可执行文件后,通过Win Scp软件导入显示器,再用SSH服务软件远程控制显示屏,执行目标程序[5]。
四、人机界面设计
(一)设计流程
控制电源DC110V接通后,两个司机室的HMI同时开启。激活端司机室的HMI正常显示,非激活端司机室的HMI显示黑屏,主显示界面根据用户操作需求分为运行模式与检修模式,运行模式主要面对司机,检修模式主要面对检修技术人员,运行模式切换至检修模式需输入密码。设计流程如图1所示。
(二) 界面绘制实现
总程序采取顺序执行的方式,在参数初始化之前,首先执行MVB通讯模块、亮度传感器检测,以及判断串口配置文件是否读取成功程序,若成功,则进行参数初始化,若失败,则弹出故障提示界面,提示驾驶员或维护人员按故障提示进行操作。部分检测程序代码如下:
if (engine->init(0x12, 5) != PIXYMVB_OK) //判断MVB通讯模块是否正常
{ FaultReason = 1; //故障原因为1
showFaultHintScreen(JudgeFaultReason); //失败,根据故障原因,显示故障提示界面
}
QFileInfo fileInfo(“/dev/ttyUSB_SC”); //读取显示器亮度硬件配置文件
if (!fileInfo.exists()) //判断硬件是否存在
{ FaultReason =2; //故障原因为2
showFaultHintScreen(JudgeFaultReason); //失败,显示故障提示界面
}
图1 设计流程图
1.信号/槽(signal/slot)机制
本文提出的人机界面设计方案采用多级界面呈现的形式,界面之间的切换通过信号/槽机制实现,切换功能实现部分代码如下:
Class QPushButton; //定义按键类
QPushButton* Button; //声明一个按键指针
Button –>setGeometry(x,y,width,height); //定义按键的坐标、长宽参数
Button->setText(QString); //设置按键显示文本
Private signals:
Void SwitchScreen(); //声明切换界面的信号
Private slots:
Void JumpToTargetScreen(); //声明跳转槽函数 Connect(Button,released(),this, SwitchScreen ()); //按键被点击且松开时,触发信号
Connect(screen, SwitchScreen (),this, JumpToTargetScreen ()); //信号调用槽函数,实现跳转到目标界面
2.静态界面绘制
显示器启动后进入主显示界面,主界面主要分为三部分:最上端的页眉,最下端的页脚,以及显示区域最大,位于中部的显示画面。其中,页眉、页脚的显示内容基本固定,不因界面切换而改变;显示界面的内容会随界面切换而变化。
页眉绘制的部分代码如下:
class Controller : public QWidget //继承自Qt基础类 QWidget
Controller::init()
{
topHeader = new PTopHeader(this); //在内存中new一个空间
topHeader->setGeometry(x,y,width,height);//设置坐标、长宽参数
topHeader->show();//初始化为显示状态
}
页眉显示车号、画面号及时间信息,在进行页面切换时,保持页眉一直处于Show()状态;显示画面主要包括车辆当前站,终点站,速度,网压以及子系统状态。
(三)MVB通信
MVB是用于在一个固定编组的几个车辆内连接各种可编程设备的车辆总线。显示器作为车辆总线的一个子系统,通过MVB总线实现同VCU的通信,通讯程序部分代码如下:
Void GetCommData() //获取宿端口数据
Map.insert(); //把端口地址和获取的数据作为键值对插入容器中
void GetOnePortData( wantPortAddress); //通过端口地址读取容器中的数据用于显示
五、结束语
结合公司的实际项目,本文设计了一种城市地铁车辆的人机界面方案。本文对软硬件的选择及系统平台的搭建等方面进行了阐述,并且着重描述了软件系统的开发流程。以PIXY INC-90系列显示器为应用平台,利用功能强大的开源图形库Qt进行系统开发设计,最终实现了地铁列车人机界面系统。通过在显示器上实际应用,验证了本文方案的可靠与稳定。
参考文献
[1] 客金坤,梅樱,郭红卫,等.基于图形化编程语言的列车人机界面设计[J].都市快轨交通,2011,24(1).
[2] 任亚飞,唐涛.基于嵌入式Linux的列控系统车载人机界面的实现[J].铁路计算机应用,2005,14(12).
[3] 杨志伟,曾艳姗.基于Linux的ACM在线评测系统研究[J].计算机与现代化,2010(6).
[4] Jasmin Blanchette, Mark Summerfield. C++ GUI Programming with Qt 4, 2nd edition. 2008.8
[5] 刘超,周纪超,张红星. 基于Linux Qt的列车人机界面设计与实现[J].计算机与现代化。2013,4.