GW9G25显示子系统详细设计说明书

上传人:1777****777 文档编号:39375614 上传时间:2021-11-10 格式:DOC 页数:30 大小:1.08MB
收藏 版权申诉 举报 下载
GW9G25显示子系统详细设计说明书_第1页
第1页 / 共30页
GW9G25显示子系统详细设计说明书_第2页
第2页 / 共30页
GW9G25显示子系统详细设计说明书_第3页
第3页 / 共30页
资源描述:

《GW9G25显示子系统详细设计说明书》由会员分享,可在线阅读,更多相关《GW9G25显示子系统详细设计说明书(30页珍藏版)》请在装配图网上搜索。

1、模板编号:0022文件编号.-版本编号V. 修订状态归档日期-南京能瑞自动化设备股份有限公司企业文件GW2012-9G25 显示子系统 项目详细设计说明书拟制: 审核: 批准: 南京能瑞自动化设备股份有限公司发布版 本 历 史版本号/修改状态拟制人/修改人拟制/修改日期更改理由主要更改内容(写要点即可)1.0张文超2012-12-25创建无1.1张文超2012-12-29修改整体思路2.0张文超2013-6-3修改详细思路文档注1:每次更改归档文件时,需填写此表。注2:文件第一次归档时,“更改理由”、“主要更改内容”栏写“无”。目 录1引言41.1编写目的41.2术语41.3参考文献52系统功

2、能说明52.1应用场合62.2功能描述63设计约束63.1需求约束63.2隐含约束64设计策略65总体设计75.1总体结构设计75.2功能子系统清单115.3显示画面索引结构设计116接口设计186.1硬件接口186.2软件接口186.2.1MiniGUI接口186.2.2操作系统接口186.2.3平台接口186.2.4主应用接口197系统安全207.1系统安全207.2数据安全207.3后备和恢复207.4出错处理207.5计算机病毒的防治措施218开发环境的配置211 引言1.1 编写目的本文档的目的旨在推动软件工程的规范化,包括程序系统的基本处理流图、程序系统的组织结构、功能模块划分、接

3、口设计、运行设计、数据结构设计和安全性设计等内容。为程序的详细设计奠定基础。V2.0的编写是为了详细列出I型集中器和II型专变的人机交互系统各个函数的实现与逻辑,需要注意的是,人机交互系统是基于MiniGUI系统开发的,所以在阅读前,请务必对MiniGUI有一定的了解!而关于涉及到MiniGUI的知识,我将不做任何描述!1.2 术语 测量点(measured point):指可以测量出唯一的一组电气量值的测量装置与终端的顺序电气连接点,当物理上相同的一个电气连接点被多个装置所测量,或者被一个装置所测量但通过多种方式被传递到终端时,按照多个测量点计,每个测量点具有唯一的逻辑定位编码,是该装置在终

4、端的参数配置、数据应用的唯一对象标识。 计量点的数据来源,可以是485表或模拟量输入、脉冲表、计算值(包括总加表)、交采表。 规约在远动系统中,为了正确地传送信息,必须有一套关于信息传输顺序、信息格式和信息内容等的约定。这一套约定,称为规约。 终端安装于电力客户现场的用于现场服务与管理的设备。包括电力负荷管理系统终端、公用变压器监控终端、配电网自动化系统远方终端等各种负荷终端。每个终端都可包含多个计量点。 GUIGraphics User Interface 图形用户界面有时也称为WIMP = Window/Icon/Menu/Pointing Device 窗口、图标、菜单、指点设备。 Mi

5、niGUI由北京飞漫软件技术有限公司开发的 MiniGUI(),是面向实时嵌入式系统发布第 MiniGUI 已广的轻量级图形用户界面支持系统。自 1999 年初遵循 GPL 条款泛应用于手持信息终端、机顶盒、工业控制系统及工业仪表、便携式多媒体播放机、查询终端等产品和领域。目前,MiniGUI 已成为跨操作系统的图形用户界面支持系统,可在 Linux/uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX、Nucleus、OSE等操作系统以及 Win32 平台上运行;已验证的硬件平台包括 Intel x86、ARM(ARM7/ARM9/StrongARM/xSca

6、le)、PowerPC、MIPS、M68K(DragonBall/ColdFire)等等。MiniGUI 1.16 更为基于嵌入式 Linux 的高端嵌入式设备提供了完整的多进程支持,从而将 MiniGUI 从中端市场带到了高端市场。 窗口系统拥有图形用户界面的计算机通过窗口系统(Window System)来管理应用程序在屏幕上的显示。一个图形用户界面系统的组成一般有图2.1.1所示的关系。图2.1.1 图形用户界面系统的组成窗口系统是一个软件系统,它通过把显示屏幕分隔为不同的部分来帮助用户管理和控制不同的显示环境。窗口系统提供基于窗口的工作模式,每个窗口是屏幕上的一个矩形区域,平行于屏幕的

7、边界。应用程序可以拥有一个或多个窗口,窗口系统通常采用“重叠窗口”的概念和机制来管理窗口的显示,各个窗口在屏幕上是相互重叠的。窗口系统克服了老式终端机上字符工作模式下一次只能在一个屏幕做一件工作的缺点,它使得用户在一个屏幕上可以同时看到几件工作,还可以方便地切换工作项目。 根窗口根窗口(root window)是所有窗口的祖先,占满整个屏幕的表面,也称为桌面窗口。本文中反复提到的DESKTOP就是指根窗口。窗口有从属关系,也就是说,某些窗口的生命周期和可见性由它的所有者决定。父窗口通常拥有它们的子窗口。在这里,所有的窗口都是被DESKTOP所拥有!DESKTOP可以控制子窗口的生与灭!1.3

8、参考文献u MiniGUI技术白皮书版本2.0(修订号3)u MiniGUI编程指南版本2.0(修订号3)u MiniGUI用户手册版本2.0(修订号3)2 系统功能说明2.1 应用场合在我们的终端设备中,无论是浙江规约应用还是04国网规约的应用,都离不开人机界面。显示功能是终端不可少的一项功能,但是不同应用,甚至不同现场系统中要求显示的具体内容可能存在部分差别。2.2 功能描述显示系统主要完成三项功能:u 常规菜单显示:主要包括终端实时信息、终端配置参数、终端测量点参数、终端测量点数据、终端参数设置等u 弹出菜单显示:主要包括一些提示信息,如控制信息、升级信息、参数更改信息等u 轮显菜单显示

9、:轮显是终端在长时间无按键操作和远程通信操作时,需要持续循环显示几个固定的画面,可能是终端的实时信息、遥信状态、控制状态、计量点实时数据等用户关心的内容。3 设计约束3.1 需求约束由于具体现场应用需求的一致性比较差,不同系统要求的终端功能不尽相同,显示菜单根据不同的终端类型,不同的系统应用,经常会有所调整,要求显示系统具有灵活的可配置性。在具体实现时,我们在基本版本中先实现主菜单项的可配置,每个主菜单下属的显示画面仍然是固定的。对于图形显示(如实时的功率曲线、电压曲线、电流曲线、电量曲线等)也在基本版本中不做过高要求,先实现原终端中已完成的柱状图显示。本设计暂时只考虑160160点阵的LCD

10、屏。3.2 隐含约束4 设计策略显示模块采用MiniGUI设计,由于MiniGUI的软件架构,不允许它嵌入我们以单进程单线程设计的应用层软件中,只能作为一个单独的应用进程在终端内运行。常规的处理(菜单、轮显)由显示进程处理,需要弹出的画面需要由应用层软件通过进程间通信传递到显示进程处理。同时显示进程需要把按键事件通过进程间通信传递到应用进程做一些特殊处理(如按键消音,强制通话)。在允许通过面板按键设置终端参数的应用中,显示进程还需要把参数更改事件通知应用进程处理。5 总体设计5.1 总体结构设计本设计中,MiniGUI运行在线程模式,可以在不同应用线程中创建多个窗口,但所有的窗口在一个进程或地

11、址空间内运行。但我们的显示系统比较简单,不需要同时显示多个窗口,所以显示应用只设计一个线程。整体架构如下:MiniGUI应用程序MiniGUI应用程序接口ANSI C库设备驱动操作系统可移植层底层硬件 图 基于MiniGUI的嵌入式系统总体架构显示应用主要完成三个工作,包括消息处理、画面绘制、同主调度系统的进程间通信。MiniGUI中的各线程之间采用消息机制进行通信,其中的Desktop线程充当一个消息服务器,消息从Timer消息队列和窗口消息队列取出来后就会投递给Desktop线程,再由它传递给应用线程。消息传递模型如下图所示:MiniGUI中的Timer线程用来完成定时应用,如某菜单下的定

12、时刷新数据、定时菜单跳转等。执行流程图如下:这是一个主线程的执行流程图,在这里有一个重要的消息接收机制,创建主窗口后,它不断的从消息队列中去读消息,然后把消息发送到消息处理机制。消息处理机制再根据,得到的消息类型进行相应的处理,在正常运行的情况下,这个机制是不会结束的,当然主控制系统可以通过sendMessage 关闭窗口消息(MSG_CLOSE)来关闭窗口。在这里要说明的是,此流程图中有两个定时器,一个是定时刷新DESKTOP界面(闪烁图标),第二个是定时去读数据字典里的信息。在DESKTOP收到来自子窗口或者是主控制系统的自定义消息时,DESKTOP会创建并打开一个子窗口。当桌面只显示DE

13、SKTOP窗口的时候,子窗口是不允许运行的,也就是子窗口没有被打开。当由一个子窗口A要进入另个子窗口B,子窗口A就会向DESKTOP发送一个打开子窗口B的消息,然后子窗口A会关掉自己。DESKTOP在收到消息的时候,就会打开子窗口B,同时也可以将子窗口发过来的参数(A要传给B的参数)发给子窗口B。子窗口的执行流程图如下: 同主调度系统的进程间通信,通过socket连接,把本系统设为客户端与主调度系统进行连接通信,流程图如下:5.2 功能子系统清单u Int MiniGUIMain(int argc, const char* argv)MiniGUI入口函数,完成主窗口的创建,打开对应的动态库,

14、并创建窗口控制系统的线程。u Int desktop(void)创建DESKTOP窗口,消息队列的循环读取处理,窗口间通信数据的读取u void creatCtrldata(U32 u32CreatId)根据界面索引号,从menu.ini配置文件中读取菜单界面显示数据u void creatLeafWin(U32 u32CreatId)根据界面索引号,从menu.ini配置文件中读取叶子界面显示数据u void *pthContrlMain(void)人机交互系统的控制系统,负责与守护进程进行通信,对按键的操作计时,对轮显和背光灯进行控制,并且对图标状态的维护等u int ChildExec(

15、U32 u32ChildWindowID,LPARAM lpara)窗口过程函数,实际的显示功能就是在这个函数中实现的,因为MiniGUI的显示主要就是对消息的处理。这个函数中需要处理的消息包括按键消息、定时消息、自定义消息等。每个消息处理中可能包括对显示画面索引的处理和调用统一的处理函数。根据显示画面索引号,调用具体绘画界面函数,显示具体界面内容。其中u32ChildWindowID为要显示窗口的索引号。Lpara为窗口的附件参数u 画面绘图函数集具体绘制终端需要显示的每个画面,详细内容参见8028interface。5.3 显示画面索引结构设计显示界面画面结构设计。(命名统一)局部变量规则

16、:类型+名字,名字原则上采用英文定义,首字母大写;如:指针类型:*pName;结构类型:strName;u32类型变量:u32Name;全局变量:g_类型+名字;如全局指针类型:*g_pName.typedef struct _DISPALY_INFO_HWND u32NowFd;/当前界面句柄HWND softkeyAndPortFd;/当前的告警窗口和小键盘窗口句柄U32 u32WinId;/当前叶子窗口索引号U32 u32LightonFlg;/背光灯亮起标志U32 u32LightonTime;/背光开启时间U32 u32LightonDispTime;/背光灯本次亮起累计时间U32

17、u32PopupFlg;/弹出警告界面有效标志U32 u32TurndispFlg;/轮显有效标志S32 u32TurndispIndex;/当前轮显菜单索引U32 u32TurnTime;/轮显开启时间U32 u32TurndispTime;/当前轮显间隔时间U32 u32NokeyTime;/无按键操作累计时间DISPALY_INFO;extern DISPALY_INFO dispalyInfo;上面的这个结构体是DESKTOP对子窗口的一个控制信息,当有按键操作消息时,或有弹出菜单消息时,在消息处理中,置位u32LightonFlg标志,同时清零u32LightonTime重新开始计时

18、,在定时消息处理中判断u32LightonTime计时是否达到设定背光灯亮起时间,是则复位u32LightonFlg标志。当有接收到弹出画面消息时,置位u32PopupFlg,同时清零popup_time重新开始及时,在定时消息处理中判断popup_time是否达到设定的弹出画面显示时间,是则复位u32PopupFlg,同时处理菜单索引为主菜单或其他菜单。在定时消息处理中,需要无条件的对u32NokeyTime进行累计,u32NokeyTime的清零需要在每个按键消息处理中进行。当u32NokeyTime累计到轮显启动设定时间u32TurnTime, 置位u32TurndispFlg,同时清零

19、u32TurnTime重新开始计数,计数到某设定值u32TurndispTime,轮显下一个菜单。 索引号的定义在本界面系统当中,界面索引号采用的4个字节的16进制数定义:0xABCDEFGH;A表示第一级菜单,AB表示第二级菜单,ABC表示第三级菜单,ABCD表示第4级菜单,ABCDE表示第5级菜单,ABCDEF表示第六级菜单;ABCDEFG表示第7级菜单, ABCDEFGH表示第8级菜单如下图:(0x1)主界面(0x10)主菜单(0x100)测量点数据显示(0x1000)实时数据(0x1001)日数据(输入日期)(0x10010)日数据显示(0x1002)月数据(输入日期)(0x10020

20、)月数据显示(0x101)参数设置与查看(0x1011)设置模式(密码)(0x10110)参数设置(0x101100)通讯通道设置(0x1011000)信道类型设置(0x1011001)通信模式设置(0x1011002)通道详细设置(0x10110020)通讯方式(0x10110021)短信中心(0x10110022)主站IP地址(0x10110023)以太网参数(0x101101)电表参数设置(0x101101)测量点选择(0x1011010)电表档案设置(0x101102)终端时间设置(0x101102)终端时间设置(0x1011020)提示修改(0x101103)界面密码设置(0x101

21、103)界面密码设置(0x1011030)提示修改(0x101104)终端编号设置(0x1011040)提示修改(0x1010)查看模式(0x1010)参数查询(0x10100)通讯通道查看(0x101000)信道类型查看(0x101001)通信模式查看(0x101002)通道详细查看(0x1010020)通讯方式(0x1010021)短信中心(0x1010022)主站IP地址(0x1010023)以太网参数(0x10101)电表参数查看(0x10101)测量点选择(0x101010)电表档案查看(0x10102)终端时间查看(0x10103)终端编号查看(0x102)终端管理与维护(0x10

22、20)终端版本(0x1021)页面设置(0x1022)现场调试(0x10220)测量点参数(0x10221)串口参数(0x10222)GPRS登录信息(0x10223)终端运行状态(0x10224)遥信状态(0x10225)下行模块状态(0x10226)直流模拟量(0x1023)终端重启(0x1024)数据初始化(0x1025)参数初始化(0x1026)载波抄表管理(0x10260)重启抄表(0x10261)停止抄表(0x10262)恢复抄表(0x1027)手动抄表(0x1028)终端数据(0x10280)有功功率(0x10281)无功功率(0x10282)电压电流(0x10283)正向有功(

23、0x10284)正向无功(0x10285)反向有功(0x10286)反向无功(0x10287)电能表示数(0x10288)当月有功需量(0x10289)当月无功需量(0x1028a)上月电能表示数(0x1028b)上月有功需量(0x1028c)上月无功需量(0x1028d)当前时间(0x1028e)结算日还有一些较为独立的界面,如密码输入界面,(在设置模式后出现),我把它的索引号设为:0x3轮显界面为:0X4界面Id号固定,架构Id是可变的,两套ID作为映射。5.4 轮显菜单设置轮显菜单通过定义一个轮显菜单ID数组来设计:typedef struct _TURN_WINDOW_ U32 vie

24、wFlg;/轮显画面对应的ID号U32viewWindowId;/轮显界面的索引号TURN_WINDOW;static TURN_WINDOW viewTurnTURENUM在轮显时通过ID和相应的绘图函数进行显示。而至于有哪些画面参与轮显,是我们在页面设置中设置的。5.5 模块设计在前面,已经大概的介绍了一下整体思路,在这里我将粗略的介绍一下设计每一个模块的实现方法: DESKTOP设计我们把DESKTOP分为两部分,一部分是DESKTOP的显示部分,另一部分是消息传递部分;而消息传递部分又分为,向子窗口传递消息部分和向主控制器传递消息部分!向子窗口传递消息部分,包括接收子窗口发来的消息,向

25、子窗口发送消息等,同样向主控制器传递消息部分也是包括接收和发送两个内容! 模块概念描述DESKTOP的显示部分:这一部分主要是负责界面的显示,包括前面所说的四大窗口类型,其他部分是不可以直接显示界面的;消息传递层:这一部分主要负责对给个窗口的消息进行传递,它从主控制器接过要发送的消息然后发到指定窗口;或者从窗口系统中接收消息再发送到主控制器机制中; 模块设计描述Desktop在前面已经做了简单的说明,desktop是所有口的父窗口,也就是说,DESKTOP可以直接控制各个子窗口。DESKTOP的窗口设置,是采用满屏的风格,即占满整个LCD屏,160*160的大小,在窗口定义和设置属性中,去掉窗

26、口默认的标题栏,状态栏和标题,如下图:I型集中器主界面示图实现方法:CreateInfo.dwStyle = WS_VISIBLE;CreateInfo.dwExStyle = WS_EX_NONE;CreateInfo.spCaption = ;CreateInfo.hMenu = 0;CreateInfo.hCursor = GetSystemCursor(0);CreateInfo.hIcon = 0;CreateInfo.MainWindowProc = WinProc;CreateInfo.lx = 0;CreateInfo.ty = 0;CreateInfo.rx = 160;Cr

27、eateInfo.by = 160;CreateInfo.iBkColor = COLOR_lightwhite;CreateInfo.dwAddData = 0;CreateInfo.hHosting = HWND_DESKTOP;hMainWnd = CreateMainWindow (&CreateInfo);if (hMainWnd = HWND_INVALID)return -1;ShowWindow(hMainWnd, SW_SHOWNORMAL);在主窗口(desktop窗口)中有个重要的自定义消息:MSG_CHILDTODESK,这个消息的功能是接收子窗口发来的创建另一窗口的消

28、息,在这个消息处理中包含了一个重要的函数:ChildExec。这个函数我们在前面也说过,它是打开子窗口的一个入口函数!在desktop窗口中,也创建了一个定时器的消息,它是用来维护时间和顶层、底层状态栏信息! 子窗口设计从显示角度来看的话,子窗口可以分成菜单界面和叶子界面,而所有菜单界面的结构都相似,有菜单界面的标题,button控件和其上的信息组成,唯一不同的就是每个菜单界面的菜单数,即button的数量。所以菜单界面信息定义一下结构体:typedef struct _WINDOW_INFO_U32 u32WindowID;/窗口的逻辑IDS8 s8Title16;/当前窗口的标题;U32

29、u32IdNum;/当前窗口的菜单数目U32 u32ButtonIDMAXMENU;/当前窗口的button的IDS8 s8MenuNameMAXMENU20;/当前窗口菜单名WINDOW_INFO;在叶子界面中信息,远比菜单界面要复杂,因为叶子界面分为设置界面和查询界面,查询界面较为简单,其界面只有显示信息,而没有控件。但是设置界面会有不同的控件,控件大致有两种,一是编辑框,二是下拉选择框。typedef struct _LEAF_WINDOW_ U32 dlgNum;/界面显示项的数目U32 flgSign;/查询窗口和设置窗口的标志U32 unirtSign;/轮显界面是否有单位S8 u

30、nirtDLGNUM20;/单位U32 maxNumDLGNUM;/最大的值U32 comBoBoxInfoNumDLGNUM;/每个下拉框中选项的数目S8 comBoBoxDLGNUMDLGNUM20;/下拉框中的选项内容char title20;/界面的题目S8 dlgNameDLGNUM20;/每个数据项的名字U32 dlgTypeDLGNUM;/每个数据项的类型,下拉框和编辑框还有无U32 pIDDLGNUM;/每个数据项在数字字典中的ID号U32 inpMaxNumDLGNUM;/每个数据项设置的最大长度U32 FNsendDLGNUM;/广播发送修改Fn标志LEAF_WINDOW;

31、 这个结构体是什么菜单界面的信息,开发人员通过更改这个结构体里的信息,来显示不同菜单。甚至可以直接通过修改文件menu.ini,就可以做到创建修改菜单窗口。这样就大大减小了开发者的后期开发的难度。 子窗口的设计部分,相来对说可能会简单点,因为绝大多数的子窗口中模块是相似的,当然这里的子窗口包括警告窗口和输入窗口。在子窗口的设计中,采用对话框的设计风格,但是要注意的是,子窗口并不是采用满屏方式,这样是为了不完全覆盖DESKTOP界面。子窗口的大小为:160*108的大小,160是横坐标长度,108是纵坐标长度,单位为像素点。子窗口不能覆盖掉DESKTOP的顶层状态栏和底层状态栏,如图:主菜单示图

32、 在实现的过程中,将子窗口的创建信息和属性,设成是一个类,有不同的子窗口,就有这个类的不同的对象。这样就可以做到所有的子窗口都是继承了一个类的属性!如下:static DLGTEMPLATE DlgYourTaste =WS_VISIBLE,WS_EX_NONE ,0, 17, 160,125,0, 0,5, NULL,0;子窗口的创建, 要用到一个结构体,如下:typedef int (*DispChildWindow)(U32,LPARAM);typedef struct _DISP_INFO_U32 u32DispID;/窗口ID;DispChildWindow p;/窗口的入口函数DI

33、SP_INFO;在这个结构体中有两个数据项,一个是窗口ID,还有一个是窗口的入口函数,这是创建一个子窗口的两个必要元素。在这个结构体中,窗口的入口函数可以相同,但是窗口ID一定是唯一的,这也是识别不同窗口的一个元素,结构体的赋值如下:DISP_INFO dispWINDOWNUMMAX = 0x10, menuWindowCreat,/主菜单-菜单0x100, menuWindowCreat,/测量点数据-菜单0x1000, TimerData,/实时数据0x1001,dayDataSelect,/日数据查询0x10010,dayAndMonDataShow,/日数据0x1002,monthD

34、ataSelect,/月数据查询0x10020,dayAndMonDataShow,/月数据0x101, menuWindowCreat,/模式选择:查询模式,设置模式 -菜单0x1010,menuWindowCreat,/参数查询 -菜单0x10100,menuWindowCreat,/通信通道查询 -菜单0x101000,setAndShowFace,/类型模式查询0x101001,menuWindowCreat,/通道详细查询 - 菜单0x1010010,setAndShowFace,/通讯方式0x1010011,setAndShowFace,/短信中心0x1010012,setAndS

35、howFace,/主站IP地址0x1010013,setAndShowFace,/以太网参数0x10101,InputMeaPointNum,/输入测量点号0x101010,AmmeterFileShow,/电表档案查询0x10102,setTime,/时钟查询0x10103,TerminalNumSet,/集中器编号查询0x10104,SetContrast,/对比度查询0x1011,menuWindowCreat,/参数设置 -菜单0x10110,menuWindowCreat,/通信通道设置 -菜单0x101100,setAndShowFace,/类型模式设置0x101101,menuW

36、indowCreat,/通道详细设置 - 菜单0x1011010,setAndShowFace,/通讯方式0x1011011,setAndShowFace,/短信中心0x1011012,setAndShowFace,/主站IP地址0x1011013,setAndShowFace,/以太网参数0x10111,InputMeaPointNum,/输入测量点号0x101110,AmmeterFileSet,/电表档案设置0x10112,setTime,/时钟设置0x10113,setAndShowFace,/密码设置0x10114,TerminalNumSet,/集中器编号设置0x10115,Set

37、Contrast,/对比度设置0x102, menuWindowCreat,/终端管理与维护 -菜单0x1020,ConcenInfot,/集中器信息0x1021,menuWindowCreat,/页面设置0x10210,viewPropertySet,/属性设置0x10211,viewSet,/画面设置0x1022,menuWindowCreat,/现场调试 0x10220,SiteCommisInter,/交采参数 0x10221,GPRSInter,/GPRS登录信息/ 0x10222,paraInit,/终端运行状态 0x10223,yxState,/遥信状态 0x10224,upMo

38、deStatie,/下行0x10225,LCDPrint,/调试信息0x1023,menuWindowCreat,/终端初始化0x10230,paraInit,/硬件初始化0x10231,paraInit,/数据初始化0x10232,paraInit,/参数初始化0x1024,menuWindowCreat,/载波搜表管理0x10240,paraInit,/启动搜表0x10241,paraInit,/已搜电表0x1025,menuWindowCreat,/手动抄表0x10250,paraInit,/重启抄表0x10251,paraInit,/停止抄表0x10252,paraInit,/恢复抄表

39、/*特殊界面*/0x3,inputPassword,/密码输入界面,(在设置模式后出现)0x4,viewShow,/轮显界面/*/0,NULL;I型集中器的所有界面机会都在这里了,当然还有两个界面没有列在其中,一个是小键盘输入界面,还有一个是告警界面。在设计时,为了方便调用,将小键盘和告警界面作为所有窗口的直接子窗口,即可以直接调用。上面我们所说的是创建子窗口的必要元素,那么有了这些元素,就要实现子窗口的绘制,在本系统中,实现子窗口的函数如下:if (!InitMiniGUIExt()return -1;DlgYourTaste.controls = set_months;DialogBoxI

40、ndirectParam (&DlgYourTaste, HWND_DESKTOP, set_monthsdata, 0L);上面的绘制方法和语法详见MiniGUI编程规范5.6 显示画面函数库的组织显示的画面函数有很多下面,我将一一列出,并做简要说明:.c文件函数说 明main.cint MiniGUIMain(int argc, const char* argv)人机交互系统的入口函数AmmeterFileSet.cint AmmeterFileSet(U32 u32WindowId,LPARAM lpara)创建电表档案设置AmmeterFileShow.cint AmmeterFile

41、Show(U32 u32WindowId,LPARAM lpara)创建电表档案查询ConcenInfo.cint ConcenInfot(U32 u32WindowId,LPARAM lpara)创建集中器信息的界面contrastAndLCDBlight.cvoid contrastAndLCDBlight(int cmd,int sta)Lcd屏对比度和背光灯控制函数dayData.cint dayDataSelect(U32 u32Id,LPARAM lpara)日数据选择日期界面desktop.cint desktop(void)创建主界面GetPrivateProfileStrin

42、g.cGPPSDWORD GetPrivateProfileString从menu.ini文件中读取数据的函数GPRSInter.cint GPRSInter(U32 u32WindowId,LPARAM lpara)创建现场调试界面,GPRS登录信息界面initChildWin.cvoid creatLeafWin(U32 u32CreatId)根据窗口的索引号初始化叶子窗口数据initMenuData.cvoid creatCtrldata(U32 u32CreatId)根据窗口的索引号初始化菜单窗口数据InputMeaPointNum.cint InputMeaPointNum(U32

43、u32WindowId,LPARAM lpara)创建测量点输入界面LCDPrint.cint LCDPrint(U32 u32WindowId,LPARAM lpara)调试信息显示界面menuWindow.cint menuWindowCreat(U32 u32menuId,LPARAM lpara)这是菜单窗口的模板文件,根据ID号加载相应窗口的信息!monthData.cint monthDataSelect(U32 u32Id,LPARAM lpara)月数据选择日期界面mysoftkey.cint softkey(char *pshow,U32 sigShow,U32 inputN

44、um,int maxNum)创建小键盘窗口nowAtoI.cunsigned int strConToHexade(const char *strtemp)将字符串转化成整型数openChildWindow.cint ChildExec(U32 u32ChildWindowID,LPARAM lpara)子窗口的调用函数paraInit.cint paraInit(U32 u32Id,LPARAM lpara)创建初始化窗口passWd.cint inputPassword(U32 u32Id,LPARAM lpara)创建密码输入窗口Prompt.cint promptShow(char *

45、pAlarm,U32 ParaSign)创建告警提示窗口readAndWriteMemData.cint showReadMemData (S8 pOutBuff40,U32 ObjID,U32 *pID,U8 dataType,U32 pIDNum)int setAndprompt (U32 u32Id,U32 *pID,HWND hDlg,U32 *dlgID,U32 dlgNum,U32 *dlgType)从数据字典中读取类型模式的参数处理函数设置参数和告警提示修改参数的函数readMemText.cvoid showBMP(void)int readMemPoint(void)读取共享

46、内存中的数据以显示图标:读取数字字典测量点号数据sendFnFlg.cvoid sendFnFlg(U32 sendNum,U32 *sendFn)向系统发送修改FnSetContrast.cint SetContrast(U32 u32WindowId,LPARAM lpara)对比度查询和设置界面setORshowChild.cint setAndShowFace(U32 u32WindowId,LPARAM lpara)创建叶子界面的模板setTime.cint setTime(U32 u32WindowId,LPARAM lpara)时间的设置和查询界面showDayAndMonDat

47、a.cint dayAndMonDataShow(U32 u32Id,LPARAM lpara)显示历史日数据和历史月数据界面showSign.cvoid showSign(HDC hdc)显示信号标志处理函数SiteCommis.cint SiteCommisInter(U32 u32WindowId,LPARAM lpara)创建现场调试界面,交采参数界面 TerminalNumSet.cint TerminalNumSet(U32 u32WindowId,LPARAM lpara)创建集中器编号设置和查询界面timerData.cint TimerData(U32 u32Id,LPARA

48、M lpara)实时数据显示界面upModeStatie.cint upModeStatie(U32 u32WindowId,LPARAM lpara)下行模块状态界面viewPropertySet.cint viewPropertySet(U32 u32WindowId,LPARAM lpara)创建页面属性设置界面viewSet.cint viewSet(U32 u32WindowId,LPARAM lpara)轮显界面设置界面viewShow.cint viewShow(U32 u32WindowId,LPARAM lpara)创建轮显界面windowCtrl.cvoid *pthCon

49、trlMain(void)人机交互系统控制处理系统YXstate.cint yxState(U32 u32WindowId,LPARAM lpara)创建遥信状态界面CommonHead.h公用头文件GlobalVariables.h全局变量声明Makefile系统编译文件5.7 显示画面图标和信号的组织显示画面的图标主要是在DESKTOP界面的顶层显示状态栏和底层显示状态栏。其对实时性要求很高,顶层显示状态栏设计:包括信号强度,通信方式,告警和告警事件号,编程锁、测量点数据号(只有相应的子界面出现才会显现),时钟(闪动“:”代替秒闪动)等信号ID信号码图标说明显示形式位置(点阵)标识码标识号

50、0SIGN_ID信号最强长显(11,1)FOURCOOMUN_SIGN40SIGN_ID3格信号长显(11,1)THREECOOMUN_SIGN30SIGN_ID两个信号长显(11,1)TWOCOOMUN_SIGN20SIGN_ID一个信号长显(11,1)ONECOOMUN_SIGN10SIGN_ID没有信号长显(11,1)NONECOOMUN_SIGN0信号标志长显(1,1)1COOMUN_IDGGPRS通信方式长显(31,1)GPRS_SIGN11COOMUN_IDS短消息通信方式长显(31,1)SMS_SIGN21COOMUN_IDCCDMA通信方式长显(31,1)CDMA_SIGN31

51、COOMUN_IDL以太网通信方式长显(31,1)ETHERNET_SIGN41COOMUN_IDW无线通信方式长显(31,1)WRIE_SIGN51COOMUN_ID未识别通信方式长显(31,1)NOEN_SIGN02ALARM_ID 0有告警事件,事件个数为01闪显(41,1)ALARM_SIGNALARM_SIGN2ALARM_ID0无告警事件长显(41,1)NONEALARM_SIGN03MEASPOINT_ID0001第几号(1)测量点数据长显(85,1)MEASPOINT_SIGNMEASPOINT_SIGN3MEASPOINT_ID0000长显(85,1)NONEMEASPOIN

52、T_SIGN04TIME_ID12:00时钟(“:”秒闪动)闪显(119,1)TIME_SIGN5PROG_ID编程键信号长显PROG_SIGN15PROG_ID无编程键信号长显NONEPROG_SIGN06BATTERY_ID电池量空信号闪显EMPTY_BATTERY_SIGN16BATTERY_ID电池量%20信号闪显TWENTY_BATTERY_SIGN26BATTERY_ID电池量%40信号长显FOURTY_BATTERY_SIGN36BATTERY_ID电池量%60信号长显SIXTY_BATTERY_SIGN46BATTERY_ID电池量%80信号长显EIGHTY_BATTERY_S

53、IGN56BATTERY_ID电池量%100信号长显FULL_BATTERY_SIGN66BATTERY_ID无电池量显示长显NONEBATTERY_SIGN0底层显示状态栏设计:底层状态栏,以文字的形式显示此时终端正在执行的动作,列表如下:序号动作说明位置(点阵)信号码信号01RS485I正在抄表.(0,145)_SIGN02RS485II正在抄表(0,145)_SIGN03RS485III正在抄表(0,145)_SIGN04GPRS正在登录.(0,145)_SIGN05060708这个信号是通过定时器从数据库中直接读出来,然后显示在界面上,顶层和底层状态栏中根据位置分类,每一类都一个相同标

54、识,从数据字典中取,根据信号ID取出其状态,对照上表中标识码或标识号,显示相应数据和图标。6 接口设计6.1 硬件接口本设计采用AT91SAM9G25的外部LCD控制器,大小为160160宽温的UC1698屏,基于Linux下FrameBuff驱动。该屏的位深为4BPP,灰度为4级灰度。6.2 软件接口6.2.1 MiniGUI接口调用MiniGUI提供的标准API来实现,具体参见MiniGUI编程指南。6.2.2 操作系统接口控制LCD背光点亮和关闭Void LCDBLight (U32 status);Status = 1:点亮,status = 0:关闭。控制LCD屏的对比度:Void

55、LCDContrast(U32 comNum);comNum的取值范围是0,255;值越大对比度越高。6.2.3 平台接口显示进程中需要读取终端各种运行参数和部分实时数据,在进行按键参数设置时还需要可以改写数据字典。通过一下两个数据访问接口实现。当主调度系统需要通知显示系统进行显示一些界面或作出一些动作时,其需要通过socket发送一条信息给显示系统,这就需要显示系统有一个接收接口,同理如前面说述,显示系统也需要向主调度系统发送消息或通知,这就需要显示系统有一个发送接口。4个接口定义如下:(详见屈工相关文档)序号函数原型参数含义函数功能返回值含义1.U32 DDDataRead(char da

56、taType, UBYTE dataId, char *pdata) (详见屈工相关文档)dataType数据类型dataId数据项pdata:数据项地址指针终端数据读取返回数据长度,失败返回02.U32 DDDataWrite(char dataType,UBYTE dataId, char *pdata) (详见屈工相关文档)dataType数据类型dataId数据项pdata数据项地址指针终端数据写入写入数据的长度,0表示失败3,U32 sendToMain()(详见屈工相关文档)4U32 recvWithMain(U32 sign,S16 *data,S16 Lpara)Sign 信息或命令类型

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!