《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 上海地铁5号线报站器可扩展HMI的设计与实现
上海地铁5号线报站器可扩展HMI的设计与实现
来源:微型机与应用2012年第14期
李 宁,陈永生,霍 勇
(同济大学 计算机科学与技术系,上海201804)
摘要: 利用MFC中的串口通信技术,设计一种上海地铁5号线报站器的可扩展人机接口(HMI)。通过报站器内部简单的可扩展设计,将显示菜单的数据储存在掉电数据不丢失的EEPROM中。使用RS232串口通信,结合PC机端的用MFC开发的上位机软件,无需对报站器控制芯片的代码进行任何修改,即可由用户自己通过简单的PC机端的操作实现报站器操作界面的改动。
Abstract:
Key words :

摘  要: 利用MFC中的串口通信技术,设计一种上海地铁5号线报站器的可扩展人机接口(HMI)。通过报站器内部简单的可扩展设计,将显示菜单的数据储存在掉电数据不丢失的EEPROM中。使用RS232串口通信,结合PC机端的用MFC开发的上位机软件,无需对报站器控制芯片的代码进行任何修改,即可由用户自己通过简单的PC机端的操作实现报站器操作界面的改动。
关键词: 报站器;控制芯片;HMI;MFC;RS232串口通信

    上海地铁5号线报站器是一个单片机系统,随着上海地铁建设的快速发展,在未来几年,上海地铁5号线将会延长,停车站数量将会随之增加,报站器的人机接口(HMI)也要做相应的修改。如果采用传统的报站器软件设计方式,必须要对报站器控制芯片的源代码进行修改,再编译后重新进行烧录,这会浪费大量人力物力[1-2]。针对这一问题,本文利用MFC中的串口通信技术,设计一种报站器的可扩展HMI模块,只要使用串口通信数据线结合PC机端的用MFC开发的上位机软件,无需对单片机本身进行任何改动即可由用户自己通过简单的操作实现报站器操作界面的改动。相对于以往使用的进口报站器系统,具有改动成本低、操作简便、可扩展性强等特点。
1 上海地铁5号线报站器的总体结构
    上海地铁5号线报站器采用ATmega128单片机为控制核心,本文侧重于介绍报站器的人机交互(HMI),因此将报站器分为核心模块、键盘操作模块、显示模块和RS232串口通信模块几部分,结构框图如图1所示。报站器的主要操作方式是操作员通过观察显示模块的信息,采用键盘输入对核心模块进行操作,输出要报站的音频。显示模块、键盘操作模块和核心模块的一部分共同构成人机交互接口(Human Machine Interface)。RS232模块主要负责HMI修改时报站器核心模块与PC端的数据交换。

1.1 核心模块
    报站器控制模块主要由主控芯片、音频解码芯片和音频文件存储卡组成。主控芯片采用Atmel公司AVR系列单片机中的RISC结构单片机ATmega128。AVR单片机功率低,内部分别集成Flash、EEPROM和SRAM三种不同性能和用途的存储器,具有在线编程和在应用编程的特点[3]。音频解码芯片采用芬兰VLSI公司生产的单芯片MP3/WMA音频解码芯片VS1003,其控制通过命令接口(SCI)和数据接口(SDI)实现[4]。核心模块的主要工作过程是,ATmega128从CF卡中读取音频文件,传输给VS1003芯片进行音频解码,然后输出音频。
1.2 键盘操作模块和显示模块
    键盘采用4×3下按式键盘,其工作原理是:有一个按键被按下时,主控制芯片上会有两个引脚接收到高电平信号,通过在中断函数内判断引脚的电平即可准确定位按键。常用的按键功能分别定义为向上、向下、向左、向右、确定、取消、设置等。
    显示模块采用液晶显示屏和ST7920控制器, ST7920同时作为控制器和驱动器,在驱动器ST7921的配合下,最多可以驱动256×32点阵液晶。
1.3 RS232串口通信模块
    RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通信的标准。由于报站器的控制芯片ATmega128自带串口通信引脚,因此可直接通过数据线接到PC机上与PC机进行通信。
2 可扩展HMI设计与实现
    要实现报站器的可扩展的HMI,总体思路就是在报站器端设计出菜单显示数据与菜单功能相分离的菜单结构,将菜单的相关数据存储在EEPROM中,保证掉电不遗失[5]。在PC机端设计串口通信程序,将报站器中有关界面菜单显示的内容读到PC机端,由用户根据自己的需求进行更改后,再通过RS232接口传入报站器的控制芯片,以实现可扩展性。难点在于RS232数据传输较慢,用户在PC机端软件上进行操作时会有较强的延时感。本文采取的解决方案是在PC机的串口通信程序中设置一个缓冲区,先将用户要修改的内容存入缓存区,修改完毕确认后再一起传回控制芯片。
2.1 报站器菜单结构功能设计
    菜单的数据结构体中只需要两个属性,一个用来表示当前菜单页的ID,一个用来表示当前菜单页中被选中项的ID。在显示菜单时,判断当前的菜单页,菜单结构体如下所示:
    typedef struct{
        int  hmi_page;//当前菜单页
        int  hmi_item;//当前选中的项
    }st_hmi_par,*st_hmi_par_ptr;//菜单结构体的类型和
指针类型
    st_hmi_par_ptr   hmi_ptr; //全局菜单结构体指针
    菜单显示的内容以三维字符数组的形式存放在EEPROM中。在报站器中,线路只需要存放站名的序号:
    eeprom char  name[][]={ {"莘庄"},//站名
        …
    };
    eeprom char  line[][]={ {0,1,2,3,4,5,6,7,8,9,10,11},
//线路名
        …//待扩展的线路n
    };
    正常报站模式下,报站器中每一页对应一条线路,每一项即对应一个站名。图2所示为根据按键响应显示页面的流程图,在显示菜单时,只要判断当前的菜单页即可,显示时调用显示函数,显示当前线路当前项所对应的站名,即为name[line[hmi_ptr->hmi_page][ hmi_ptr->hmi_item],注意一页有4个站:

 

 

    lcd_printf(name[line[hmi_ptr->hmi_page][ hmi_ptr->
    hmi_item]]); //显示响应的站名
2.2 RS232串口程序的设计
    由于ATmega128控制芯片自带串口[5],因此只需要设置相应的寄存器,然后调用putchar()函数与getchar()函数即可通过串口输入输出字符。
    PC机端的程序用MFC开发,代码比较长,关键就在于要可视化操作,主要函数如下:
    DWORD CTYY_MYDoc::WriteComm(char *buf, DWORD
dwLength) {
        BOOL fState;//波特率
        DWORD length=dwLength;//输出数据长度
        COMSTAT ComStat;//串口状态
        DWORD dwErrorFlags;//错误标志
        ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
//清状态位
        fState=WriteFile(m_hCom,buf,length,&length,
&m_osWrite);//输出字符
        …
    }
        DWORD CTYY_MYDoc::ReadComm(char *buf,
DWORD dwLength) {
        …
        length=min(dwLength, ComStat.cbInQue);
        ReadFile(m_hCom,buf,length,&length,&m_osRead);
//读入字符,存入缓冲区
        …
    }
2.3 界面设计
    为了方便用户操作,用MFC设计出可视化操作界面,主要操作界面即为更改站名与线路、支持添加删除修改等操作。在线路修改中,需考虑到线路的添加修改要基于现有的站名,并且为了实现全自动化报站操作,加入了两次报站之间间隔参数的修改。如图3、图4所示。

    在实验室条件下测试该报站器,由经简单培训过的人员对其内容自行修改,证实操作简单方便。接下来将进一步优化代码,完善程序功能,并进行现场测试检验其稳定性与可靠性,今后5号线延长时争取能快速准确地修改报站内容。
参考文献
[1] 马骞.中国城市轨道交通项目现状和可持续发展调研[J].铁路通信信号工程技术,2009,6(4):38-39.
[2] 张少锋,肖向前.广州地铁车辆数字报站器的国产化改进[J].机车电传动,2005(2):48-49.
[3] 马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2007:8-15.
[4] VSLI.VS1003 datasheet(version 1.02)[J].VSLI,2006(7):1-40.
[5] ATmega128-Datasheet[EB/OL].[2012-01-15].http://www.datasheetarchive.com/ATmega128-datasheet.html.

此内容为AET网站原创,未经授权禁止转载。