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控件的位置进行串口通信;
效果图如下

猜你喜欢

转载自blog.csdn.net/q1325545052/article/details/78553408