刘晋, 步亚男, 金禹含, 苏臣
(辽宁师范大学 计算机信息与技术学院, 辽宁 大连 116000)
摘要:在嵌入式领域中,经常需要一些上位机的控制系统,而WPF是专门用来编写表示层的技术和工具。为了真实地感受WPF技术与其他界面开发工具的不同和优点,设计了一款板卡检测系统,并详细地介绍了此控制系统的实现过程。经过实际应用证明,WPF技术与传统的界面开发工具相比开发较简单,程序更加简洁清晰,更重要的是其开发理念更符合自然哲学的思想。
0引言
GUI程序开发工具历经了Win32 API、MFC、Windows Forms等的变迁,每一次变迁都使开发效率和质量产生飞跃。2007年微软推出了新一代GUI开发工具Windows Presentation Foundation(WPF),并且把它定为未来10年Windows平台GUI开发的主要技术。WPF基于DirecX底层接口,带来优秀的图形向量渲染引擎。它可以轻松地实现半透明、平移、缩放等绚丽效果[1]。WPF引入了Bingding机制,在开发理念上进行了一次升级,由“事件驱动”变为“数据驱动”。WPF中,数据与空间的关系就是哲学中内容与形式的关系,内容决定形式,以数据驱动页面,这非常符合哲学原理[2]。
1WPF简介
1.1XAML
XAML就是WPF技术中专门用于设计UI的语言。XAML作为界面描述语言最终会被编译成Net后台代码。因此,它能够同后台进行逻辑处理的Net语言如C#、C++等协同工作。XAML的产生使得界面描述代码和程序代码得以分开,从而提高了开发率,有利于团队开发。
1.2Data Binding机制
WPF出现之前,Windows Forms等技术都是采用“事件驱动”理念。尽管可以使用MVC、MVP等设计模式,但界面逻辑和业务逻辑非常容易纠缠在一起,造成代码复杂难懂。而Bingding机制可以实现“数据驱动”,当数据发生变化时,会主动通知界面控件、推动控件显示最新的数据。WPF的核心理念就是变传统的UI驱动程序为数据驱动UI。
1.3依赖属性
依赖属性是WPF技术中新提出的概念。简而言之,依赖属性可以自己没有值,并通过使用Binding从数据源获得值的属性。拥有依赖属性的对象被称为依赖对象。与传统的CLR属性和面向对象思想相比,依赖属性有很多新颖之处:首先它可以节省实例对内存的开销;其次属性值可以通过Binding依赖在其他对象上。
2驱动板卡检测系统
2.1驱动板卡简介
日本精工电子集团在生产集装压电式喷头方面已经具备相当雄厚的实力与基础,稳定性方面就如其生产的精工表一样品质超众[3]。这里的驱动板卡用于控制大型喷墨打印机的喷头。当一个板卡生产出来时,为了检测其性能,需要通过一个喷头板卡检测软件进行检测。此喷头板卡检测软件即为本文讨论的重点。板卡检测软件与板卡通过双绞线连接,并使用UDP协议进行通信。
2.2驱动板卡通信协议
(1)驱动板卡检测系统与板卡之间采用双绞线连接,使用UDP通信协议进行通信。一次完整的通信包括上位机发送命令、下位机应答两部分。其中命令具有事先约定好的格式,第一个字节BYTE0为命令ID,后面跟有若干个字节的参数。下位机接到命令后根据命令ID进行相应的操作并作应答,返回通信结果。
(2)驱动板卡配置数据下载命令。板卡生产出来后,需要将一系列信息写入板卡中。此命令的命令ID约定为0x55,后面跟有42 B的参数内容,其中包括IP地址、端口号、板卡版本号、数据写入时间、服务期限、喷头标识码等参数。应答命令BYTE0为应答ID,为0x55。如果下载成功BYTE1为0x01,下载失败则为0x00。
(3)驱动板卡配置数据读取命令。此命令的命令ID为0xAA。应答中,BYTE0为应答ID,BYTE1~BYTE42为以上提到的参数内容。
2.3驱动板卡检测系统设计与实现
图1为驱动板卡检测系统的界面截图。从图中可以看出其主要功能,它实现了数据的下载、读取以及应答的接收。
(1)Net库中的UdpClient类对基础Socket进行了封装,发送和接收数据时不必考虑底层套接字在收发时必须要处理的细节问题,大大降低了UDP编程的难度,提高了编程效率[4]。首先定义一个UdpClient对象,然后调用其Connect成员函数与远程主机进行连接,参数为远程主机的IP地址和端口号。再调用其Send成员函数进行发送,函数参数为要发送的数据及其数据的长度。最后关闭UDP连接。至此完成了一次UDP通信。
(2)数据的写入。此功能将获得各个文本框中的数据。数据在文本框中的格式为字符串,但是本系统需要以字节的形式通过UDP通信发送至板卡,故获得数据后需要对数据进一步处理再发送。
(3)IP地址的检测。每个驱动板卡需要一个唯一的IP地址,因此每当驱动板卡检测系统写入一个IP地址,就要将其记录下来,并在每次写入前检测将要写入的IP是否可用。本系统将每次写入的IP地址存到了SQLite数据库中。SQLite是一款轻型的数据库,它的设计目标是嵌入式的,占用资源非常低,同时,它能够与很多程序语言相结合。因此本系统选择了用SQLite来实现IP地址的存储。首先打开数据库、建立链接。然后执行SELETCT查询语句查看当前IP地址是否已经使用。如已使用则提示“当前IP地址已经使用,请选用其他IP地址”,否则将当前IP地址写入驱动板卡,并存入数据库的IP表。
(4)读取当前配置。此项功能实现较为简单,只需要将命令ID 0xAA通过UDP协议发送至下位机驱动板卡即可,剩下的工作由下位机驱动板卡来实现。驱动板卡收到命令后,再将由42 B组成的配置信息发送至驱动板卡检测系统。因此,上位机驱动板卡检测系统需要实现UDP的接收功能。下位机随时可能发送数据至上位机。WPF应用程序在运行过程中,UI线程接收输入,处理事件,绘制屏幕以及运行应用程序代码。如果运行时间过长,会造成内存使用率不断上升,CPU占用率提高,导致系统总体性能降低[5]。因此,UDP接收过程必须独立使用一个线程。
(5)多线程的应用。多线程技术能很好地解决并发多任务问题,提高资源的利用率和系统的性能,因此计算机的各个领域都对其进行了研究,从不同角度实现或增强了对多线程的支持[6]。同时多线程技术也能提高程序的稳定性,因此在实际开发中有着重要的作用。
3结论
经过测试,该系统不仅可以实现IP地址的写入、读取当前配置等基本功能,而且系统界面与传统的MFC、WinForm等相比更加生动、形象,更重要的是,由于WPF框架的应用,提高了开发效率,在预定时间内完成了系统的开发。
参考文献
[1] 王鹏, 崔静. 新一代界面技术WPF的架构及应用[J]. 成都纺织高等专科学校学报, 2011,28(1): 1820.
[2] 刘铁猛. 深入浅出WPF[M]. 北京:中国水利水电出版社,2010.
[3] 王丽坤. 常见喷墨打印头的分类和性能[J]. 数字化技术, 2015(7): 3941.
[4] 何波,付由甲.C#网络程序开发[M]. 北京:清华大学出版社,2014.
[5] 蒋勇铭, 张仲贵, 吕刚. 基于WPF的LED显示系统的设计与实现[J]. 电脑知识与技术, 2012, 8(5): 30683070.
[6] 贾广雷, 刘培玉, 耿长欣. 多线程技术及其在串口通信中的应用[J]. 计算机工程, 2003, 29(1): 247249.