蔡永祥 王子龙 张康达
(中国汽车技术研究中心,天津 300300)
PREEvision是德国Aquintos公司的一个自上而下的基于模型的电子电气架构设计与开发工具,同时也是一个集成电子电气协作平台,覆盖整个V字模型的开发与测试验证阶段,包括电子电器需求分析、结架构设计、模块部件开发及后期的测试验证,并且可以保证多部门、多流程在同一个平台工具并行协作。
在以往电子电气架构设计过程中,人们通过手动方式把输入文件导入PREEvision软件中,很难做到自动分析与数据处理,无法满足用户快速完成架构设计与分析的需求,尤其当面对庞大的数据量时,耗费时间的同时也无法保证准确度。
针对上述问题,本文提出一种方法,它不仅能够快速精确自动处理输入文件并自动导入PREEvision,还可从PREEvision中自动分析处理并读取数据。
该方法主要包括:C#编写的数据处理软件;基于Socket的多线程异步通信模块;PREEvision中二次开发的模型数据处理引擎这三部分。其系统架构如图1所示,具体实现方法如下。
为需要处理分析上传的原始文件,包括Office文件,网络通信文件DBC、FIBEX和LDF,线束设计文件KBL等。
为使用C#编写的上位机操作程序,实现输入数据的编辑、解析、封装功能,同时兼做用户操作界面客户端。
实现服务端与客户端一对一的数据流式传输。作为上位程序与下位机PREEvision的通讯桥梁。
在PREEvision自带的控件中,添加JAVA编写序列对上位机程序编译封装的数据解码,变为PREEvision可用的数据类型。
在PREEvision自带的控件中,添加JAVA编写序列,使用PREEvision自带命令将解码数据放置到相应的分类中,并对相关类进行关联。
图1 系统架构
在客户端假设为A的PC上运行上位机程序,对需求层、规范层、脚本层、用例层、测试数据层的各种不同格式的文件进行导入解析,设置各层数据之间的关系标识符,设置完成后通过Socket和ServerSocket类与为服务器端假设为B的PC上运行的PREEvision建立通信,通过getInputStream()和getOutputStream()两个函数进行远程数据交互,将解析后的数据上传至PREEvision中,在PREEvision的控件matrix中使用PREEvision自带的接口函数编写JAVA代码,结合不同层次的标志位与层次之间的标志位,调用PREEVision的接口函数将解码后的数据添加至PREEvision相对应的层次中,并可在PREEvision中对数据进行分析。分析结果用Socket通信发回A客户端并在A客户端的数据处理软件中绘图展示。
该系统设计完成了没有安装PREEvision的PC和有安装有PREEvision的PC之间的数据快速交互。
客户端不需要安装PREEvision,安装C#开发的上位机程序。客户端主要完成三个部分的工作:一是输入文件的解析编译;二是与服务器端进行通信;三是监控通信状态与分析结果展示。
交互界面将在后面的试验验证处进行展示。与服务器通信将在下节Socket多线程通信中介绍,此处详述文件编译处理部分。
上位机操作界面现在可以出来的文件类型包括:Word、Excel、XML、DBC、LDF、KBL等,读取处理方式相似,下面以Word的提取处理方式为例进行叙述,Word文件编译处理流程如图2所示。
添加引用com文件Microsoft word 11.0 Object Library
定义全局变量
_Applicationapp=newWord.Application();//创 建word
_Document doc=null; //创建 word文档
通过文件打开对话框获取word文件所在位置,代码如下
OpenFileDialog dlg=new OpenFileDialog();
dlg.Filter = “word 文件 |*.doc”;
if (dlg.ShowDialog() == DialogResult.OK)
{
string fileName = dlg.FileName;
}
打开word,代码如下
object unknow = Type.Missing;
doc=app.Documents.Open(reffileName, ref unknow, ref unknow, ref unknow, ref unknow);
读取word文档
stringtemp=doc.Paragraphs[i].Range.Text.Trim();//变量i为第i段
textBox1.Text = temp; //将 第 i段 内 容 复 制 到textbox中
图2 Word文件编译处理
为了能够方便地开发网络应用软件,美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用Socket。
Socket的出现,使程序员可以很方便地访问Tcp/Ip,从而开发各种网络应用的程序。在网络通信中,Socke可以理解为客户端或服务器端的一个特殊对象,Socket通常被称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。它可以实现服务器与客户端一对一的流式传输。
一个完整的Socket通信程序一般包括以下几个步骤:创建Socket;打开连接到Socket的输入输出流;按照一定的协议对Socket进行读/写操作;关闭Socket。
Java使用专门建立Socket服务器的类ServerSocket来创建服务器对象,ServerSocket server=new ServerSocket(int port),这里提供了一个端口作为参数,要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号在0~65535,前1024个端口已经被Tcp/Ip作为保留端口,因此人们所分配的端口只能是1024之后的。Socket通信流程如图3所示。
建立服务器端的Socket对象步骤如下:
(1)创建一个服务器端套接字,并绑定到指定端口上。
ServerSocket ss=new ServerSocket(int port);
(2)调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
Socket s=ss.accept();
(3) 调 用Socket 类 的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
OutputStream os=s.getOutputStream();
InputStream is=s.getInputStream();
os.write(“Hello,this is server! “.getBytes());//向客户端发送数据
byte[] buf=new byte[100];
int len=is.read(buf);//从客户端读取数据
图3 Socket通信流程
报文编码格式如图4所示,服务器接收数据以后需做以下处理工作:
(1)对数据进行解析。解析过程为根据字符串(字符串的第一个单词作为关键字)的关键字进行哈希运算。哈希运算以后得到不同类别的包类构造函数。
(2)调用第一步查找回来的构造函数进行对象的构造。构造完成以后PREEvsion的对应层次中自动产生构造的对象。
(3)第一步和第二步完成以后,PREEvison的对象已经生成成功。接下来需要把需求层、测试规范层、测试脚本层、测试结果层构造的对象关联起来。关联方法为调用PREEVison的Map函数。轮询各个对象下的子对象进行对象的查找,并根据关键字进行关联(对象名的第一单词作为关键字)。
(4)通过以上工作以后数据已经保存到PREEvision中。PREEVison提供了统计测试结果的函数Result()。调用Result()函数可以得到测试结果的需求覆盖率数值。这些数值通过Socket函数传回给客户端UI。客户端通过C#提供的绘图控件绘制出覆盖度图形。
图4 报文编码格式
该系统可以实现C#开发的客户端和PREEVision中模型数据的交互分析。系统的使用减少了建立模型的工作量,缩短了建立模型的时间。与手动建模比对验证可知,使用自动建模方式准确率更高,时间短,效率高。C#编写的界面可以快速方便地查看测试用例的覆盖度。客户端操作界面和数据分析界面分别如图5、图6所示,PREEVision数据分析界面、PREEVision中模型结构、PREEVision中算法开发分别如图7、图8和图9所示。
图5 客户端操作界面
图6 客户端数据分析界面
图7 PREEVision数据分析界面
图8 PREEVision中模型结构
图9 PREEVision中算法开发
基于Socket通信的PREEvision二次开发,使用Socket多线程通信,传输数据时间短,性能高,客户端与服务器端之间可实时进行信息交互,数据安全性强。C#开发的客户端和PREEVision中的二次开发模块的配合使用实现了数据在没有安装PREEvision的PC和有安装有PREEvision的PC之间的快速交互。这样既节约了软件采购成本,又提高了建立模型的效率。
[1]何进,谢松巍.基于Socket的TCP/IP网络通讯模式研究[J].计算机应用研究,2001,(8):134-135.
[2]周炎涛,李立明.TCP/IP协议下网络编程技术及其实现[J].航空计算技术,2002,(3):122-124.
[3]冯香枝,胡朝峰,张海涛.基于PREEvision的汽车电子电气架构设计[J].汽车电器,2013,(10):43-46.
[4]梁宏炜.用C#实现多线程Socket的通信[J].数字技术与应用,2013,(6):60.
[5]肖美华,余立全,肖攀.SOCKET通信程序模型抽取及可靠性验证[J].计算机科学,2012,39(11):102-105.
[6]茹志鹃.基于TCP协议的Socket数据通信[J].科技信息,2012,(13):93.
[7]李纯洁.基于PREEvision的汽车电子电气架构设计与研究[D].上海:上海交通大学,2011:11.
[8]Liu Qigang,Sun Xiangyang.Research of Web Real-time Communication Based on Web Socket[J].International Journal of Communications Network & System Sciences,2012,5(12):797-801.
[9]夏玲,王伟平.客户端与服务器端的Socket通信[J].电脑知识与技术,2009,5(4):812-813.
[10]罗亚非.基于TCP的Socket多线程通信[J].电脑知识与技术,2009,5(3):563-565.
[11]冯峻域,戴青云,植俊文.基于多线程串口通信的生产数据实时采集系统[J].微计算机信息,2006,(10):149-151.