動機
工作上常常需要分析 RS232/422/485 通訊,為了除錯或是了解通訊協議。幾經思索下,發現最好的方式就是在一個正常通訊的線路上觀察通訊行為,然而通訊的兩端不一定是 PC,所以不一定有機會安裝 sniffer 之類的軟體,再說盡量不要介入通訊的實際過程以免影響通訊行為。這時候用硬體的方式是最穩當的,以 RS232 為例:
有一個商業軟體 Docklight 可以協助這件事,他的設定畫面就跟小弟上面畫的圖差不多:
正所謂「自己動手,豐衣足食」,既然找不到合用的工具,何不自己寫一套?
有一個商業軟體 Docklight 可以協助這件事,他的設定畫面就跟小弟上面畫的圖差不多:
不過這個軟體有以下缺點:
- 他不了解你的傳輸內容,所以只能用顏色來區分封包,也無法幫你正確區分 Request/Response。
- 在通訊量大時常常崩潰。
正所謂「自己動手,豐衣足食」,既然找不到合用的工具,何不自己寫一套?
需求分析
在動手前,先列出有哪些基本需求:
- 線路上收到的封包內為 ASCII 可見字元保持原狀,不可見字元以 <縮寫> 的方式顯示,「縮寫」就是指這些 ASCII 不可見字元代表的意義縮寫,例如: 0x10 --> <LF>,0x13 --> <CR>,0x03 --> <ETX>,以此類推。
- 正確斷行顯示。
- 監控內容可以存成文字檔以供後續分析。
2. 有需要進一步說明,比方說 MODBUS ASCII 每個 Request/Response 是以 LF 結尾,所以畫面上想看到的是:
而不是
畫成 Data Flow Diagram 如下:
「正確斷行」的關鍵是在中間的 Packet Parser,面對不同的 protocol 我們需要不同的 Parser,怎麼做比較好呢?
工具選擇
基本上有三種選擇:
- 每增加一種 protocol 就修改一次 soruce code
- 用外掛 dll 的方式來面對新增 protocol
- 使用者自定 script
1 的問題是如果其他人要替這個工具增加 protocol parser,除了要給 source code 外還要安裝龐大的開發環境。2. 的問題是 dll 有相容性問題,相信有寫過 dll 的人都有被 export symbol 整過的經驗,而且 dll 也不好除錯。3. 是最佳解,不過要選擇何種 script language 比較合適呢?
To Be Continued...
工具選擇
- 每增加一種 protocol 就修改一次 soruce code
- 用外掛 dll 的方式來面對新增 protocol
- 使用者自定 script
沒有留言:
張貼留言