蔡永祥 王子龍 張康達
(中國汽車技術研究中心,天津 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.