【 摘 要 】 对于设备密集型系统的总控体系的研究比较少,许多相关工程因缺少规范的开发过程、可复用的支持产品而出现开发效率低、运行维护成本高等问题,导致产品价值下降。本文基于软件工程理论,提出一种规范的总控体系模式,硬件方面,采用单片机技术及商用货架产品来提高系统的可靠性和可维护性,降低全寿命维护成本;软件方面,实现了可复用的软件中间件,可显著提高后续同类系统开发效率,降低开发成本,对提高产品价值作用明显。
【 关键词 】 嵌入式单片机;体系结构;软件复用
【 中图分类号 】 TP391.9 【 文献标识码 】 A
1 引言
很多仿真系统涉及到设备控制,设备的状态被输入到系统,系统处理后得出仿真结果,并依据仿真结果对设备进行驱动。对具有简单设备的系统,A/D(D/A)转换卡可很好地满足需求。但对设备密集系统,布线和维护问题将变得难于控制。在工程实践中,人们更多的关注于具体控制技术的研究,但从软件工程的角度,对硬件相关的软件可复用、开发模式等问题进行研究的文献却很少,由此导致的非规范开发、重复开发、软硬件紧密依赖等问题对工程的效率和质量产生较大影响。文献[3]提出了一个基于串口的控制方法,很好地解决了布线问题,并考虑了软件可复用性。但该方法由于串口通信速率的固有限制,只有通过复杂的单片机调度算法控制通信瓶颈并行操作以尽量提高系统的实时性。
此外,所用单片机集线器为非货架产品,不利于系统投入运行后的维护。该方法也没有提出一种规范的硬件控制量标识方法。本文提出了一种更优的硬件控制体系结构模式,在硬件上,采样潜入式TCP/IP单片机技术替代串口,采样商用以太网交换机替代非货架单片机集线器,在硬件布线、可靠性、维护性方面更为优化;在软件上,采用通用部分和特定部分相分离的方法来解决软件可复用性问题,并实现了一种规范的硬件控制量标识和访问方法。该方法特别适用于设备密集型仿真系统。
2 硬件控制模式总体结构
硬件控制模式的总体结构如图1所示。每个设备由内置的单片机对设备采样, 采样数据以下位协议格式通过网络汇总于设备代理程序, 设备代理程序将下位协议格式数据转换为上位协议格式, 经网络传输给(多个)客户程序。客户程序依据采样数据确定设备响应,驱动数据以上位协议格式经网络传输给设备代理程序, 设备代理程序将上位协议格式的驱动数据转换为下位协议格式, 经网络传输给单片机。嵌入程序1至嵌入程序n为对应单片机内对设备进行控制的程序,完成设备采集、驱动和网络通信。1.dll至n.dll为对应单片机的动态链接库,完成下位协议和上位协议的转换。ad.dll实现控制量访问API和通信,硬件控制量由ad.cfg定义, 通信路由由UNet.cfg定义。LNet.cfg定义设备代理程序和嵌入程序间的通信路由。
3 协议数据单元
3.1 下位协议数据单元
1)嵌入程序至设备代理程序协议数据单元
struct ToProxy{char version;/*版本号*/char type;/*0-采样和驱动;1-采样;2-驱动*/
unsigned long cnt;/*接收计数*/char data[];/*采样数据*/};
2)设备代理嵌入程序至嵌入程序协议数据单元
struct FromProxy {char data[];/*驱动数据*/};
3.2 上位协议数据单元
设备代理程序和客户程序之间的数据包格式由连续的“数据段”构成,以“空数据段”为结束标志。
1)空数据段
Byte 0:固定为0xff;
2)AI&AO数据段
Byte 0: 0x01-正常AI; 0x11-检测 AI; 0x21-修正AI;0x02-正常AO;0x12-检测AO; 0x22-修正AO;
Byte 1- Byte N: 数据块序列,以结束块标识数据段结束,每个数据块定义为:
Byte 0-Bytes 1 (short): 该块首个控制量下标idx1 (<0标识结束块);
Byte 2- Bytes 3 (short): 该块最后一个控制量下标idx2;
Byte 4-Byte M: 从 idx1到 idx2 的所有控制量数值,类型为double或float,在ad.cfg中定义;
3)DI&DO数据段
Byte 0: 0x03- 正常DI;0x13-检测DI; 0x23-修正DI;0x04-正常DO;0x14-检测DO;0x24-修正DO;
Byte 1-Byte N: 所有DI(DO )序列,每个量以bit格式存储, bit数在ad.cfg中定义。
4 外部配置文件
1)硬件配置文件(ad.cfg),采用xml描述:
2)下位网配置文件(LNet.cfg) ,采用xml描述:
3) 上位网配置文件(UNet.cfg) ,采用xml描述:
5 ad.dll状态机
ad.dll实现正常、检测和修正三种状态。在每一状态,ad.dll执行接收和发送操作。接收操作包括:接收数据包、解析数据包、状态转化;发送操作包括:生成数据包、发送数据包。在正常状态,设备代理程序执行采样、驱动、误差修正操作,ad.dll按照上位网络配置文件中定义的路由收发数据包;在检测状态,设备代理程序执行采样、驱动、误差修正操作,ad.dll只收发维护程序的数据包,忽略其它程序的数据包;在修正状态,设备代理程序执行采样、驱动操作,不进行误差修正操作,以实现对误差修正数据库的修正,ad.dll系统只收发维护程序的数据包,忽略其它程序的数据包。
6 设备代理程序算法
6.1 单片机DLL的导出函数
void MCU2AD(char data[])//单片机格式数据.
{AI(i,j)<--解析data;DI(i,j)<--解析data;}
void AD2MCU(char data[])//单片机格式数据
{data<--AO(i,j );data<--DO(i,j);}
6.2 设备代理算法
void proxy(){加载LNet.cfg;加载ad.dll;
foreach (item in LNet.cfg){加载item.dll;加载item.dll.MCU2AD()/AD2MCU (); }
loop{foreach (item in LNet.cfg){if item.proxy 有数据到达{调用item.dll.MCU2AD();}
调用item.dll.MCU2AD();从item.proxy向item.mcu发数据;}调用ad.dll通信服务;}
7 结束语
本文提出一种适用于设备密集型人在回路仿真系统的硬件控制模式,该模式具有的特点: 具有AD/DA转换卡方法所不具备的布线简单的重要优点;每个设备被嵌入的单片机控制,易于维护;设备代理为可复用结构,可以集成任何数量的单片机而无需对结构做任何修改;每个单片机的内嵌控制程序和单片机DLL具有简单的单一模式,易于开发;ad.dll支持的二维标识法API,使应用程序开发人员硬件访问代码开发非常高效;设备接口代理和ad.dll实现了包括通信代码在内的绝大部分通用功能。
参考文献
[1] 刘新顺,闫建国. VxWorks环境下无人机半物理仿真模型机数据通信与采集[J].西安:现代电子技术,2012,35(01):7-9.
[2] 徐海,崔连虎,徐光耀. RTX环境下时统信息实时采集方法研究[J].舰船电子工程,2012,32(04):59-61.
[3] 何波玲,张志春,徐坤.规模硬件模块化智能控制方法及其应用[J].兰州:兰州理工大学学报,2014,40(2):106-109
[4] Michael J. Donahoo, Kenneth L. Calvert.: TCP/IP sockets in C : practical guide for programmers, 2nd Edition[M].Morgan Kaufmann Publishers, San Francisco 2009.
[5] 顾颖彦.反射内存网实时通信技术的研究[J] .上海:计算机工程,2002(07):143-144.
[6] Jeffrey Richter, Christophe Nasarre: Windows Via C/C++[M].Microsoft Press, Washington 2011.
作者简介:
何波玲(1965-),女,吉林长春人,长春金融高等专科学校计算机系,副教授;主要研究方向和关注领域:计算机软件。
张志春(1963-),男,吉林松原人,空军航空大学军事仿真技术研究所,高级工程师;主要研究方向和关注领域:计算机仿真、软件工程、计算机网络。