mscomm32串口控件 和 node serialport

近期做的一個項目需要在頁面調用串口通信,於是選擇了使用mscomm32這個控件,記錄一下使用的過程。
控件的安裝註冊都沒問題,按照教程調試時發現了2個問題,希望有大神幫忙解答一下:
1.JS沒有所謂的字節數組,不知道如何將16進制的字節數組發給串口;
JS規範裏面是有ArrayBuffer的,之前查mscomm32控件的時候看到的大部分都是好多年前的文章。
2.控件的oncomm事件只有1,也就是發送數據事件能觸發。當我試圖接收數據時oncomm事件2始終無法觸發。
其他的狀態爲0,可是關於這個控件沒有找到oncomm事件爲0的描述。

----------------------------------------------------------------------------
多方查找求助,看到一個比較有用的猜測方向:因爲com口無法識別我發出去的讀取數據指令,所以無法觸發oncomm事件了。
------------------------------------------------------------------------------
有了新的進展,使用串口監控軟件,發現發送出去的解析正常,反饋的數據有問題。記錄過程中的坑:
1.串口監控軟件無法打開的問題:軟件源文件放置在桌面,某軟件無法在系統盤運行,即使管理員權限也不行;
2.讀取數據事件可以正常觸發(之前爲什麼無法觸發的原因未知。。。),根據串口監控的結果顯示,反饋數據正常,但JS解析異常。經查詢得知 JS採用Unicode編碼,所以發送數據的時候是將每個數據轉化爲Unicode碼拼接到一起發給串口,而MSComm32採用的ASCII編碼,在值大於127的時候,JS接收數據會出現字符丟失的現象,即我們所看到的都全部轉化爲了16進制的3F。
解決辦法:1.後臺進行轉碼(太過繁瑣,放棄);2.編寫另外一個activX控件,對字符進行翻譯,即實現其他語言的字節數組的功能。
----------------------------------------------------------------------------
16進制數據和二進制數組互轉的VB源碼,網上有,經過一番折騰,發現還是無法實現數據翻譯的功能,發現過程中的坑如下:
1.新的ocx控件要組註冊才能使用,32位和64位系統的註冊方式有細微區別。管理員運行cmd,輸入 ’C:\Windows\system32>c:\windows\SysWOW64\regsvr32.exe 控件名稱 ‘。查詢控件classid時,發現註冊表找不到,剛註冊的控件,可是明明提示註冊成功。最終發現,要刷新註冊表,才能搜索到剛註冊的文件;
2.發現還是無法使用ocx控件,用軟件顯示,控件確實對外暴露了2個轉換的方法,控制檯循環輸出改控件的屬性,發現MSComm32在IE下有307個屬性,而自己的控件只有277個屬性,任意引用一個objec標籤,正好也是277個屬性,也就是說,暴露的方法並未被IE識別;
--------------------------------------------------------------------------------
經查詢後得知com組件是C++類,靠虛函數表來調用函數,而JS沒有指針概念,故無法使用。如果要給JS調用,要實現IDispatch調度接口。
----------------------------------------------------------------------------------
這麼多問題,一陣頭大。感覺問題越來越複雜了,突然想到中午看到的個段子,一個人要對一個數字進行限制,比如0~65535的範圍,有人告訴他寫個正則匹配就行了,那麼好了恭喜你,你目前有2個問題了XD....

------------------------------------2017.12.18更新----------------------------------------------
最終發現用node可以完成需求
方法:1.本地開啓一個node服務;2.網頁請求本地node服務;3.node調用串口;
即以node代替之前的com控件的位置進行串口通信;
效果圖如下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章