本帖最后由 CodingFarmer 于 2015-2-10 15:28 编辑
一、项目名称:
智能车载终端
二、项目概述:
智能车载终端支持以域名方式接入监控中心、车辆遇险自动报警、车辆故障远程诊断、CAN总线数据采集等实用功能;能实时采集、记录和传输车辆的行驶速度、时间、里程、状态信息。通过监控中心,对车载终端记录的事故疑点数据进行分析,还原交通事故发生时车辆的各种状态,为交通事故分析提供科学的参考依据,方便交警执法和政府监督。通过分析车载终端记录的驾驶行为信息,可以规范司机驾驶习惯,降低交通事故发生率;帮助企业降低运营成本,提高管理水平。
三、项目软硬件框图:
硬件框图:
软件框图:
四、软件架构:
职责模块
GSM模块驱动 分成Sim900a芯片控制、AT数据发送和AT数据接收三个部分。芯片控制部分包括初始化配置、通讯状态监控等功能。AT数据发送实现机理:按照AT命令的串行特性,首先将待发送的数据封装、缓存,将每一次的AT数据发送过程抽象成不同的状态(待发送、发送中、已发送等状态),按照不同的状态执行不同的动作,最终将数据写入到串口缓存区中。AT数据接收实现机理:定时(50ms)从串口缓存数据中提取出808协议数据,以消息的方式传递给上层模块进行数据处理。为了保证数据的生产者与消费者之间的能力平衡,需要考虑数据缓存机制。
CAN驱动 从CAN中断接收特定范围CAN ID数据并缓存,提供给上层职责模块进行处理。
UCOSII系统实现及其配置 UCOSII系统版本为2.92。配置部分包括是否使能某些平台资源、以及个别参数的调整(如最多任务数量等)。
ADC驱动 用于采样主电源和备用电池电量,将采样值传递给上层模块处理。 按照burst的方式同时采集通道2和5,将采样数据从中断中取出并传递给上层职责模块处理。
串口驱动 数据发送过程都在发送中断中进行,上层只负责将数据写入发送环形缓冲区。数据发送中断每发送一个字节的数据完成后,在中断处理函数中判断环形缓冲区中是否还有数据,如果有,则触发下一次发送中断进行发送。每次发送结束后,只要缓冲区中有未发送数据,中断都触发下一次发送,如此循环往复直至发送缓冲区为空。上层将数据写入缓冲区后,需要判断当前串口状态是否为发送状态,如果处在发送状态,则返回,如果当前没有处在发送状态,则必须软件触发发送中断,进行数据发送。
RTC驱动
外部中断驱动 用于ACC状态检测(EINT3)和供电电源切换检测(EINT1) 通过检测引脚的电平边缘变化(上升沿或下降沿)触发相应中断,在中断中判断事件类型,并以消息的方式通知系统任务进行事件联动处理。
GPIO驱动 用于GPIO引脚电平输出控制和获取输入引脚电平值。GPIO中断用于检测GPS天线的开路、短路状态,根据相应的电平变化产生对应事件,并以消息的方式通知系统任务进行事件联动处理。
定时器驱动 提供以10ms为单位的定时功能配置接口和中断处理。
CPU异常处理 用于扑捉CPU core出现的几种类型异常事件(如HardFault异常),并将异常现场信息输出到串口,供开发人员分析、定位问题。 一旦发生系统异常,会进入异常处理函数,在异常处理函数中解析异常栈,获取异常定位信息。
看门狗驱动
GPS驱动 控制部分包括GPS上下电、对GPS输出信息内容和周期进行配置,以及天线状态检测等功能。 数据处理功能包括定时从串口缓冲区中获取NMEA协议数据,按照其格式进行解析,解析出经度、纬度等关键定位信息供其它职责模块使用。
TCP数据通讯管理 用于TCP数据通道的管理,包括通道状态管理、tcp数据发送等功能 用于TCP数据通道的管理,包括通道状态管理和tcp数据发送、接收缓冲管理。
CAN通道管理 用于控制终端与ECU基于CAN通道的数据交互管理,
串口调试信息输出功能
内存管理 为了使本系统内存得到更有效率地地利用,本系统采用动态内存管理的方式。 将静态内存挂接到对应的链表中进行管理,申请时从链表中取出该节点的内存,释放时重新挂接到对应链表中,从而实现基于静态内存池的动态内存管理方式。
系统任务 任务运行实体,得到运行机会后,从消息队列中读取消息事件,根据事件类型查找对应处理函数并执行。
系统指示灯控制 以指示灯的闪烁频率、颜色、闪烁次数来指示系统的运行状态。 以不同的显示方式去控制led以区分不同的系统状态事件,在定时器3中每隔100ms进行一次事件调度,根据事件类型配置不同的控制状态。
根任务 本系统起始任务,用于创建其它任务、喂狗和时间校准。 任务运行实体,实现功能: 1、根任务创建、运行,并初始化相关软硬件资源,创建其它任务。 2、周期性(1s)喂狗。 3、周期性(256s)系统时间(RTC)校准。
GSM任务 任务运行实体,从消息队列中读取消息事件,根据事件类型查找对应处理函数并执行。
Shell任务 该任务定时轮训是否从调试串口接收到数据,一旦有数据接收,则将接收到的数据与挂接的命令关键字比较,若匹配则执行对应命令的处理函数。
软件定时功能 在定时器0中定时(10ms)扫描各个任务挂接的定时器时间计数是否到时(时间计数为0表示时间到),若到时,则向相应的任务发送消息进行通知。
里程统计 根据GPS数据,每隔1s计算一次当前位置相对于上次位置(1s之前)的移动距离,然后一直将这个移动距离进行累加(前提是GPS数据有效),这个累加值就是总里程,每隔一段时间(比如一个小时)将总里程值保存到flash一次。
超时重发机制 此机制的应用场景是终端主动发送808协议数据且需要平台应答时,若终端接收平台应答超时,则终端进行重发处理。 在终端主动发送808协议数据的场景下(比如位置信息上报0x200),记录该条数据帧的终端流水号和数据内容,开启超时判断定时器,如在没到达超时时间内接收到该数据帧的应答帧(通过终端流水号来判断),则取消超时判断功能,若到达设定的超时时间仍未收到应答帧,则将该数据帧进行重发,最多重发3次,若重发3次后仍未收到应答帧,则将此帧数据舍弃,并将此事件记录日志。
短信息配置基础参数功能 按照特定的格式组装短信息配置命令,终端收到后按照该格式去解析短信内容,配置相应参数,并将参数保存到外部flash中。待系统重新启动后,新配置的参数才会起作用。 可配置的基础参数包括: 1、 sim卡号码 2、 平台接入点的APN,用户名、密码 3、 接入平台的IP地址,端口号 4、终端did码
报警检测功能 实现区域提醒、超速提醒、电瓶欠压提醒、电瓶断电提醒、停车不熄火提醒、拖车提醒 1、 电平欠压、断电检测机理:检测供电芯片的PWERGD引脚(cpu引脚为p0.23),若为高电平则主电源正常,若由高电平变为低电平,即系统由主电源切换到备用电池(外部中断1检测),并持续2s,同时开启ADC检测功能,检测主电源的AD采样值,若大于4V则认为是欠压场景,小于4v则认为是断电场景,进入断电场景后,ADC功能关闭。 2、 区域提醒。 3、 超速提醒。 4、 停车不熄火提醒。 5、 拖车提醒。
终端管理功能 实现的功能有终端注册、鉴权、终端参数设置与查询、终端控制功能、终端心跳定时发送、查询终端属性。 1、 协议交互部分按照808协议格式组帧。 2、 将终端所用的全局参数分成终端与平台公用参数和终端自用参数两类。公用参数指的是可以通过808协议配置的参数集合,其它参数一律划归到自用参数。两类参数都存储到外部flash中,根据参数映射表中的参数ID,查找对应参数的偏移,根据偏移进行定位对应参数,从而实现参数读取和修改功能。 3、 终端控制功能实现了整机复位和恢复出厂设置两个功能。
CAN数据上传功能 开启一个定时器,周期可配置,每个周期从CAN数据缓存区读出数据,然后按照协议格式封装、发送,若读出数据为空则不作处理。
盲区记录与补传 该功能包括定位数据的存储机制和上传机制两部分。 存储机制:在通信盲区的场景下,系统在内存中增加一个的写入缓存区(1.2k),该缓冲区能够缓存20条定位数据,一旦该缓冲区缓冲满20条,就将这些定位数据写入到外部flash。若通信恢复,则先将内存中的数据写入到flash,然后进行定位数据上传操作。 上传机制:若存储定位信息条数小于20条则用一条报文发送,若大于20条则需要分包发送,每包为20条定位数据,为了减小数据发送的压力,要保证收到上一条的回复后,再等待2s后发送下一包数据,直到盲区数据发送完毕。
实时定位功能 周期性上报位置信息(协议ID为0x200),默认周期为30s。此外设置圆形、矩形区域,删除圆形、矩形区域等功能也在此模块实现。 周期性上报位置信息,按照位置信息上报(消息ID为0x200)格式组帧。
808协议数据处理 实现对于接收到的808数据的解析和对于发送的808数据封装的作用。 根据808协议的帧结构,从接收到的协议数据中解析出消息ID、平台流水号、消息体长度、消息体,传递给相应业务模块进行处理。 针对无线发送的数据进行消息头封装、转义、crc添加,组成一条808数据帧,传递给底层模块发送。
五、实现功能列表:
功能项 | | | 自检 | | 供电状态、卫星信号、通信状态,终端故障等可以上报监控中心 | 定位功能 (GPS/北斗) | | 时间、位置(包括经纬度,高度)、速度、方向、里程、状态等信息定时上报监控中心 | | 进入信号盲区时设备自动存储数据,信号恢复时自动补报信息 | 通信功能 (2G/3G/4G) | | | | | 行驶记录 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 终端管理 功能 | | | | | | | | | 休眠功能 | | 当车辆熄火后终端向监控中心发送车辆熄火信号并自动进入休眠状态 |
|