夏東盛
(陜西工業(yè)職業(yè)技術學院 信 息工程學院,陜西 咸 陽712000)
隨著電子技術的不斷發(fā)展,通過實現(xiàn)各種端口傳輸數(shù)據(jù)的檢測和控制,就可以準確的判斷和分析問題,從而找到解決問題的方法。本文以目標系統(tǒng)下兩個獨立具有數(shù)據(jù)通信往來模塊為對象[1-2],通過該工具使得兩個獨立模塊之間不直接相連,而是通過工具轉接,從而可以觀察目標系統(tǒng)通信情況,進而為判斷系統(tǒng)中的獨立模塊工作是否正常提供依據(jù)。
如圖1所示,TARGET1和TARGET2為目標系統(tǒng)下兩個獨立具有數(shù)據(jù)通信往來的模塊[3],A和B為兩個端口,此兩端口沒有差異,無論何時,從A端口接收到數(shù)據(jù)則立即通過B端口發(fā)送出去[4],反之亦然。A和B端口收發(fā)數(shù)據(jù)采用何種協(xié)議和格式,由程序運行的配置文件決定。本系統(tǒng)中,TARGET1和TARGET2無法直接進行數(shù)據(jù)往來,而是通過工具轉接,借助端口A和B進行數(shù)據(jù)傳遞,從而可以觀察目標系統(tǒng)的通信情況。
該工具的主程序包括端口參數(shù)配置文件、端口數(shù)據(jù)循環(huán)處理、文件存取等程序,主要通過配置服務端口和客戶端口參數(shù),然后轉接到文件中,從而得到通信數(shù)據(jù)。主函數(shù)如下:
int main(int argc,char*argv[]) 主函數(shù)[5]
圖1 設計框圖Fig.1 Design block diagram
{
cConfig cfg("param.cfg"); 端口參數(shù)配置文件
……
do 端口數(shù)據(jù)處理循環(huán)
{
memset(buf,0,sizeof(buf));
int len=cfg.ReadLine(buf,sizeof(buf)-1);
if(len>0)
{……
……
}
}while(1);
if(cv==3)
{
……
}
}
return 0;
}
1)運行SocketTool.exe,設置為服務端,數(shù)據(jù)收發(fā)窗口如圖2所示。簡化的工具欄只有3個功能按鈕:“創(chuàng)建”“刪除”“退出”;操作窗口左側為端口的傳輸控制協(xié)議和用戶數(shù)據(jù)報協(xié)議的設置欄,鼠標雙擊對應名稱列表或通過右擊對應名稱列表彈出菜單設置,就可以對數(shù)據(jù)收發(fā)的服務器進行端口設置。操作窗口右側上部顯示Socket狀態(tài);中部顯示接收數(shù)據(jù)流;下部顯示發(fā)送的數(shù)據(jù)和重復次數(shù)。同時勾選底部顯示十六進制值功能,也可以對發(fā)送和接收的數(shù)據(jù)轉換成對應的ASCII碼。
圖2 服務端口參數(shù)設置Fig.2 Parameter settings of service port
2)運行SocketTool.exe,設置為客戶端,如圖3所示??蛻舳丝谠O置與服務端口設置基本一致,設置主窗口一致,通過Socket狀態(tài)進行區(qū)分。
圖3 客戶端口參數(shù)設置Fig.3 Parameter settings of client port
3)通過主窗口對參數(shù)進行配置之后,可以生成配置文件并保存。需要修改服務端或客戶端參數(shù)時,可以通過主界面進行修改,也可以通過直接修改配置參數(shù)文件完成。打開param.cfg文件,如圖4所示,配置過程及參數(shù)修改非常簡單。
4)運行后臺控制文件dualport.exe,如圖5所示,方便觀察服務端口和客戶端口直接的數(shù)據(jù)傳遞信息觀察信息包括傳遞的來源、目的、時間、內(nèi)容等。
圖4 文件配置Fig.4 File configuration
圖5 運行控制文件Fig.5 Operating control file
5)測試結果??蛻舳薙ocketTool.exe發(fā)送數(shù)據(jù),則數(shù)據(jù)通過dualport.exe轉發(fā)到服務端的SocketTool.exe。再使用服務端SocketTool.exe發(fā)送數(shù)據(jù),則數(shù)據(jù)通過dualport.exe轉發(fā)到客戶端SocketTool.exe。圖6所示Bridge.log中記錄了所有經(jīng)過的數(shù)據(jù)。
圖6 測試結果Fig.6 Test results
該工具作為一種輔助手段,特別在某些地方不具有某些環(huán)境時,可以幫助收集數(shù)據(jù),同時不影響系統(tǒng)中各個獨立模塊的工作,也不影響系統(tǒng)中模塊的整體性。如果通信數(shù)據(jù)的時序(比如某些數(shù)據(jù)包之間的時間相差太大,或者太小等)有問題,或數(shù)據(jù)出錯等等,該工具可以幫助排除問題。該工具用于在兩個通信端口可以是RS232串口,網(wǎng)絡套接字socket,甚至可以是并口,USB等[6]。
[1]王靖,孫希延,伍建輝.高動態(tài)GPS信號模擬器中串口通信的實現(xiàn)[J].桂林電子科技大學學報,2010(1):30-32.WANG Jing,SUN Xi-yan,WU Jian-hui.Serial communication of high dynamic GPS signal simulator [J].Journal of Guilin University of Electronic Technology,2010(1):30-32.
[2]范逸之,陳立元.Visual Basic與 RS-232串行通信控制[M].北京:清華大學出版社,2002.
[3]劉瑞新.Visual Basic程序設計教程[M].北京:電子工業(yè)出版社,2003.
[4]田敏,鄭瑤,李江全.VISUAL C++數(shù)據(jù)采集與串口通信測控應用實戰(zhàn)[M]北京:人民郵電出版社,2010.
[5]SCOTT Meyers.More Effective C++中文版[M].劉曉偉 譯.北京:機械工業(yè)出版社,2011.
[6]宋祖順.現(xiàn)代通信原理編 [M],北京:電子工業(yè)出版社,2008.