2016年4月22日 星期五

RS232/422/485 Anaylzer DIY PART1

動機

工作上常常需要分析 RS232/422/485 通訊,為了除錯或是了解通訊協議。幾經思索下,發現最好的方式就是在一個正常通訊的線路上觀察通訊行為,然而通訊的兩端不一定是 PC,所以不一定有機會安裝 sniffer 之類的軟體,再說盡量不要介入通訊的實際過程以免影響通訊行為。這時候用硬體的方式是最穩當的,以 RS232 為例:





有一個商業軟體 Docklight 可以協助這件事,他的設定畫面就跟小弟上面畫的圖差不多:



不過這個軟體有以下缺點:
  • 他不了解你的傳輸內容,所以只能用顏色來區分封包,也無法幫你正確區分 Request/Response。
  • 在通訊量大時常常崩潰。

正所謂「自己動手,豐衣足食」,既然找不到合用的工具,何不自己寫一套?

需求分析


在動手前,先列出有哪些基本需求:

  1. 線路上收到的封包內為 ASCII 可見字元保持原狀,不可見字元以 <縮寫> 的方式顯示,「縮寫」就是指這些 ASCII 不可見字元代表的意義縮寫,例如: 0x10 --> <LF>,0x13 --> <CR>,0x03 --> <ETX>,以此類推。
  2. 正確斷行顯示。
  3. 監控內容可以存成文字檔以供後續分析。
2. 有需要進一步說明,比方說 MODBUS ASCII 每個 Request/Response 是以 LF 結尾,所以畫面上想看到的是:


而不是


畫成 Data Flow Diagram 如下:



「正確斷行」的關鍵是在中間的 Packet Parser,面對不同的 protocol 我們需要不同的 Parser,怎麼做比較好呢?


工具選擇


基本上有三種選擇:

  1. 每增加一種 protocol 就修改一次 soruce code
  2. 用外掛 dll 的方式來面對新增 protocol
  3. 使用者自定 script

1 的問題是如果其他人要替這個工具增加 protocol parser,除了要給 source code 外還要安裝龐大的開發環境。2. 的問題是 dll 有相容性問題,相信有寫過 dll 的人都有被 export symbol 整過的經驗,而且 dll 也不好除錯。3. 是最佳解,不過要選擇何種 script language 比較合適呢?


To Be Continued...

沒有留言:

張貼留言