前言
最近需要实现一个需求:在浏览器上调用COM口进行打印输出和接收打印后的回调信息,可是在网上找了很多代码,不是抄来抄去,就是没法调用,所以就自己用VB6.0实现了一个控件。
COM口简介
计算机和外设连接需要有输入输出接口,常用的有串口和并口,而COM口就是就是串口来的。台式机后面的那个九针梯形的接口就是COM口。可以在Windows 的DOS界面输入如下命令查看COM口的状态:
mode com1
COM1口的状态信息
当COM口被占用的时候会提示 设备 COM 当前不可用
Windows的通信控件MSComm
MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。在VC、VB、Delphi等语言中均可使用。我的话是使用MSCOMM32.OCX控件,开发语言是用VB,开发工具使用的VB6.0。
MSComm控件的详细介绍可以看这里,主要看几个重要的属性和两种通讯方式。
- CommPort
设置需要通讯的端口号
例如:MSComm1.commPort = 3,表示需要和com3端口进行通信
- Settings
以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
例如: MSComm1.Settings = “9600,n,8,1”,表示波特率9600,无校验,8位数据位,停止位为1
- InputMode
设置出入的数据类型,0为字符串,1位二进制
例如:MSComm1.InputMode = 1,表示 接收二进制类型数据
- PortOpen
设置并返回通讯端口的状态。可以打开和关闭端口。
打开端口:portOpen = true;关闭端口:portOpen = false;
- Input
从接收缓冲区返回和删除字符。COM口返回的数据从这里获取到。数据类型为byte数组类型。
例如:buf = MSComm1.Input,表示从缓冲区获取COM返回的数据。
- Output
向传输缓冲区写数据。注意传入的类型为byte数组。
例如:MSComm1.output = hexData,表示把数据传给COM口
处理通讯的方式有两种:一种为事件驱动方式,一种是查询方式。驱动方式是回调的方式获取返回的数据,而查询方式是轮询的方法获取返回的数据。
控件的开发
我这里使用的是VB6.0来开发。整体的思路是JS调用控件提供的接口,传入字符串,然后控件把字符串处理成byte数组的形式hexData,再把数组传给MSComm.output。然后写一个响应事件,接受回调的数据,提供给JS当做回调接口,这样就把数据传到页面上了。形成一个完整的通信。
明确了思路,马上开始动手实现。
首先在VB6.0下新建工程,弹出的框中选中ActiveX控件。然后把MSCOMM32.OCX控件拖入工具箱中,会出现一个类似于电话的黄色图标,然后双击图标添加。
接下来就是编码实现了。
数据输入接口: