这是在芯博发表的第一篇博文,是设计的成果,项目不大但也花了不少时间,因为开始根本不知道该怎么做,做什么。然后我先把地图类写出来,采用GDI+,与合作者交流学好进一步改进,地图类写好后信心就大了,开始封装传输协议和传输类,这时我的伙伴模拟车的类也写好了,添加了一些参数,模拟车运行时的各种属性,之后就是用传输类和传输协议类把客户端和服务端连接,发送报文和处理接收报文;最后一步是完善,把状态记录、轨迹等写成文件,大功告成。
这时我刚好在看张逸老师的《软件设计精要与模式》,这真是一本好书,虽然我才看了一半,但我能初步地理解模式的思想,并简单的运用到项目中。到后面操作日志文件和轨迹文件的时候,运用的就是包装的思想,大大简化了代码,在这里感谢张老师。
因为本人在学习方向上不是.NET,而是C++及动画方向。我在看张老师的书时,有个疑惑就是设计模式是不是只能运用在像C#、Java这样的高级面向对象语言上?
题目:GPS车辆出行监控系统
合作者:brainpoint
1、A机模拟车辆行走
2、B机实时显示A机运行状态,并实时显示速度、高度,记录轨迹
3、A机模拟车上有抢劫按钮,按下后B机弹出报警,并可以发送命令控制A机车辆供油供电,强制车辆停下
4、B机上可以根据轨迹文件查询车辆运行历史
项目模块划分:
1、控制车辆行走模块(产生轨迹)
2、地图显示模块(根据轨迹)
3、轨迹读写模块(实现状态记录)
4、数据传输模块(实现双机通信)
1、前提约定:
地图表示:5000PIX*4500PIX,相当于实际50000000KM*45000000KM的范围,即一个象素表示10000KM*10000KM。
地图用的是中国地图,实际表示世界地图。
以纵横两条中线一分为四,纵者为经0度,横者为赤道。
上为北半球,下为南半球;
左为西经半球,右为东经半球。
简单起见,双机之间通信采用串口通信,双机之间的通信协议采用仿国际GPS协议的报文形式。
2、功能实现:
A机(客户端)
I、模拟汽车行走(动画)
II、模拟接收定位信息(经度、纬度、海拔),并在地图上显示
III、定时向B机(服务器)发送定位信息
IV、模拟检测车的引擎温度、剩余油量和负重量等状态信息
V、处理B机发过来的命令,可以回复状态信息或者模拟限制车的运行状态
VI、可以主动向B机(服务器)发出报警,报警类型有多个
VII、开机时从最后一次结束的位置从重新开始
VIII、地图上有“记录轨迹”“显示轨迹”“清除轨迹”“导航追踪”的功能
B机(服务器)
I、显示A机(客户端)的模拟车的定位信息
II、在地图上显示A机(客户端)的模拟车在地图上的位置
III、显示A机(客户端)的模拟车的状态信息
IV、显示A机(客户端)的模拟车的报警信息
V、模拟向A机发出各中命令,请求状态信息或限制/解除车的运行状态的命令
VI、地图上有“记录轨迹”“显示轨迹”“清除轨迹”“导航追踪”的功能
3、界面展示
A机(客户端)

采用串口通信,开机时设置串口属性,该设置没有保存。

主界面,模拟车的运行,技术原因,很粗糙。
界面上有车的速度、定位信息、控制信息及各种按警的按键提示。
车的行驶动画采用GDI+的画图,原图从极品飞车截下,运行时会闪。
速度可见,当加速时背景会加快,刚开始时只采用减少时间间隔刷新,速度快时屏闪得很难看。
后来采用减少时间间隔刷新和跳帧处理,在不闪屏的情况下进行跳跃,达到较好的效果。

模拟车在地图上的位置,控制记录轨迹,显示轨迹,清除轨迹,追踪导航
B机(服务端)

采用串口通信,开机时设置串口属性,该设置没有保存。

A机车的各种信息及发送命令的按钮。

A机模拟车在地图上的位置,控制记录轨迹,显示轨迹,清除轨迹,追踪导航
4、传输协议:
(该协议应用于客户端与服务端的报文交流)
从机->主机:
1定位信息:
$GPPI,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>
<1>UTC时间:时分秒(hhmmss)
<2>机器编号
<3>纬度:double
<4>纬度半球N或S
<5>经度:double
<6>经度半球E或W
<7>GPS状态:0=未定位,1=已定位,2=正在估算
<8>海拔高度:(-9999.9~9999.9)
2状态信息:
$GPSI,<1>,<2>,<3>,<4>,<5>
<1>UTC时间:时分秒(hhmmss)
<2>机器编号
<3>引擎温度
<4>剩余油量
<5>负载量
3报警信息:
$GPAI,<1>,<2>,<3>,<4>,<5>
<1>UTC时间:时分秒(hhmmss)
<2>机器编号
<3>1=资源缺乏|2=硬件故障|4=遇匪|8=交通事故|16=自然灾难
主机->从机:
4请求状态信息
$GPRSI,<1>
<1>UTC时间:时分秒(hhmmss)
5命令报文:
$GPCP,<1>,<2>
类型:1B 固定为00H
<1>UTC时间:时分秒(hhmmss)
<2>1=断油|2=断水|4=关引擎|8=锁车匙|16=锁档
posted @ 2008-08-22 11:21 AminBy 阅读(2773) 评论(13)
编辑