在我發的DIY前篇的帖子裡面,提到了工欲善其事,必先利其器,然後從國慶期間就開始擼碼,然後拖拖拉拉擼了二十多天,串口軟體終於有了雛形。。如果按著這個進度,我估計DIY是要泡湯了。
為什麼要自己擼串口軟體,主要就是因為其他的串口軟體並不理想,功能太受限。
我擼的這個軟體,我給他命名叫做visual-serial,我也實在是想不出好的名字了,這款軟體的最大特點是具有擴展性,用戶可以根據自己的需要擴展功能。這款軟體是開源的,GitHub地址是(長按二維碼識別進入)
,如果你感覺這個軟體有點用,請幫我點點star(我建議寫代碼的壇友,一定要把git用起來,這個工具的功能太強大了,用起來你會受益匪淺,哦對了,我這裡有個電子書,對使用GitHub會有幫助,下載地址:
(有經濟能力的請儘量支持正版),歡迎有想法、有興趣的人一起來完善這個軟體,歡迎廣大壇友提出各種意見和建議。
這款軟體基於electron框架開發,使用的語言是HTML、CSS、JavaScript/Node.js,為什麼選擇這個平臺,很多人可能跳出來說為什麼不用QT,不用Python,我認為electron框架的主要優點在於:
易擴展,只要添加或者修改js文件就能達到添加或者修改功能的目的,不需要編譯,比如說,這個軟體沒有你想要的波特率(前提是系統要支持這個波特率),好的,打開相應的js文件,找到對應的源碼,在數組裡添加一個數字就搞定了。或者增加中間件,都是輕而易舉。
JavaScript開發會比較省時省力,至少要比C++開發容易的多,高級語言一行代碼頂c/c++好幾行,而且js的各種庫很全面,目前visual-serial的主要代碼不到1000行。每個中間件的代碼不足100行
不過具有優點的同時,缺點肯定避免不了:
雖然理論上支持>=windows7, macOS, 部分Linux系統,但是不支持XP
軟體體積比較大,打成壓縮包後大約50M,因為這是一個框架,集成的功能實在太多了,雖然我們用不到
運行會比較佔資源,費CPU和內存
廣大電工可能不熟悉JavaScript,但是JavaScript至少在語法上是屬於C系的,你看懂JavaScript應該很容易,至少要比python什麼的容易。
現在來說說這個軟體的特點,前面提到了,最大的特點是可擴展性高,可擴展性就是通過中間件來實現的,所謂中間件,就是一個函數,放在數據流中對數據進行一定的處理,用一個圖來描述可能更直觀:
中間件的我給他分成了三類,middleware,protocol和widget。
middleware就是一個簡單的函數,對數據進行一定的處理。
protocol呢,他定義了兩個函數,encode和decode,分別完成某種協議的封裝和解析。
widget用來擴展界面與用戶實現交互,或者是對數據的展示。
從實現上來說,middleware和protocol都是一個單獨的js文件,widget是一個文件夾,裡面通常包含html、css和js文件
目前軟體附帶了幾個中間件示例,分別是FF-protocol、savetofile、timeout、drawgraph、characterEncoding。
FF-protocol:
假設有某數據格式規定:數據幀以0xFF開頭、0xFF結尾,數據中出現的FF轉義為FE 01,FE轉義為FE 00,數據末尾增加異或校驗和。 decode方法完成的工作包括:檢測起始的FF字節,然後開始接收數據並進行轉義和計算校驗和,直到接收到尾部的FF,此時如果校驗和正確,則把數據傳給下一個中間件。 encode方法就是對數據增加頭尾FF、轉義和加入校驗和,然後傳給下一個中間件。示例:
56 A2 D3 91==encode==>FF 56 A2 D3 91 B6 FF
FF 56 A2 D3 91 B6 FF==decode==>56 A2 D3 91
savetofile:
顧名思義,把經過這個中間件的數據保存到文件中,並繼續傳遞數據至下一個中間件。
timeout:
如果數據幀沒有具體的格式,無法判斷數據的頭尾,可以用超時時間來粗略判斷幀的結束。如果等待設定的毫秒數內未再收到數據,則把已經收到的數據傳給下一個中間件。 注意:計算機的計時並不準確,尤其是計算機任務繁重的時候,因此選擇這個中間件是個下策。
characterEncoding:
完成字符串編碼的轉換,支持多種編碼,如UTF8,UTF16,GB18030,因此數據發送和接收可以支持各種字符編碼。 軟體默認的接收和發送採用UTF8編碼,UTF8兼容ASCII,如果數據中包含ASCII之外的字符,則需要注意編碼轉換問題。
drawgraph:
這是一個窗口擴展,可將數據按特定類型提取,並畫出變化曲線。其中BE為設置大端模式,min和max設置繪製曲線時的最小和最大取值範圍,不設置為自適應範圍。
這些僅僅是我寫的示例,可能是用處並不是很大,我的目標其實就是想集成電工們最常用的一些功能、一些協議,做成中間件,滿足電工們的日常需求。所以,壇友們的反饋和建議非常重要,能參與到這個項目中更是求之不得。目前只是搭起了架子,後續還會持續改進。
數據發送
數據發送主要有字符串和十六進位發送兩種方式。這些功能比較基礎沒有可介紹的,值得一提的是,以十六進位發送的時候,可支持多種十六進位格式以及寬鬆的判斷,例如:
{0x45, 0x56, 0x89, 0xAB, 0xF2} => 45 56 89 AB F2
08H 58H 9AH BCH => 08 58 9A BC
0x120x560x8a 9F7C62 3 B 5 => 12 56 8A 9F 7C 62 03 0B 05
基本功能我不在這裡囉嗦了,我寫了個文檔在GitHub上:https://lcofjp.github.io/visual-serial/
雖然主界面很醜,但是我還是上個圖吧:
歡迎各位壇友下載體驗,您的使用就是對我最大的支持,如果有任何意見和建議,軟體有什麼bug,歡迎到本帖留言。
下載地址:
https://pan.baidu.com/s/1mhAt4Ju
目前只提供了windows和macOS的版本,解壓之後是個文件夾,在裡面找visual-serial.exe。。。。。