SerialPortApplet.txt 8.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
串口通信浏览器小程序,基于跨浏览器的小程序系统-PluginOK(牛插)中间件(https://github.com/wangzuohuai/WebRunLocal)开发,底层实现调用微软串口通讯控件MSComm32.ocx,最低可用在Chrome 41、Firefox 52、Edge 80(Chromium内核)、360极速/安全、IE 8、Oprea 36、QQ、搜狗等浏览器,也兼容运行于这些浏览器的最新版本。通过此小程序,可以在浏览器中通过JS非常方便的操作COMM串口打印机、GSM 猫、手机、扫描枪、屏显、钱箱等设备。小程序中涉及到的属性等含义,请直接参考 微软串口通讯控件MSComm32.ocx中的定义,也可以参考这里:https://blog.csdn.net/shenziheng1/article/details/52884444

以下是体验小程序步骤:
1、PluginOK(牛插)中间件的安装:
1)、如果是exe的安装程序,请直接运行安装;
2)、如果是绿色版的程序包,请解压到磁盘某个目录后,双击“InstallWrl.bat”进行安装;
3)、安装完成时会启动PluginOK中间件服务,在安装目录下的Data子目录有WrlService.txt日志文件输出运行情况。

2、请求安装串口通信小程序,在测试页面上输入 ws://localhost?sid=123&flag=1 先连接上中间件服务,然后输入一下内容点击发送:

W
wangzuohuai 已提交
11
{"req":"Plugin_Install","rid":1,"para":{"Name":"串口通信浏览器小程序","PID":"C0B01CD6-7DD9-4D3C-B668-04168D5236FC","Date":"2021-02-23","Desc":"PluginOK中间件之上跨浏览器的串口通信小程序,可在Chrome、Edge、Firefox、IE、Opera、360、QQ等的浏览器最新版中调用","DownAddr":"http://local.zorrosoft.com/Files/Plugin/WrlComm.pid","MD5":"7D5DEACA219DE2043D9B4D94326D4262","Version":"2.1.1.2","Size":589824,"HideIns":0,"Type":1,"Cookie":"","Auth":"","TK":"481A3AF7F63123AF751025DEAF893C5BD56BF349A4BA62BE5171C0ED449577171F0E1CAD5E51E0937407452B761F0433DF49E06E7DDEFC7393F937BD2EE19D5779009E56EB4CA2B49965B649D7A373E247A89BBA51461C7B626938B59DDD9050179B0D5907F4F313570A52CFC33F0D0F2360A042C5AE689F70D8515D2B5D042200B2211D94C813FF8FC66EA37213AAEF384577F90265B0C6B581406C688E365AB3D5835D227A6E053C125B236456EE3DBE3DA8B3CD26DEB910D91DD60B9E37AE0041961C62A34AFF8AC7AE73563D55E42E5F63C35244F25DD19BDE2202EFA51399E9D9DE71A06AA4BEF3B80EDB4111712A041DF367BC66F3C3C17C45B309C712"}}
12 13 14

3、请求串口通信小程序更新:

W
wangzuohuai 已提交
15
{"req":"Plugin_Update","rid":1,"para":{"Name":"串口通信浏览器小程序","PID":"C0B01CD6-7DD9-4D3C-B668-04168D5236FC","Date":"2021-02-23","Desc":"PluginOK中间件之上跨浏览器的串口通信小程序,可在Chrome、Edge、Firefox、IE、Opera、360、QQ等的浏览器最新版中调用","DownAddr":"http://local.zorrosoft.com/Files/Plugin/WrlComm_Update.pid","MD5":"8D039753AB7FF7775E600548A7B87B36","Version":"2.1.1.2","Size":589824,"HideIns":0,"Type":1,"Cookie":"","Auth":"","TK":"415509C3B075D7626C8CB58A2DD29FBEAFC2BD76C6EAF75C2B494846944C3735E4E3BF07BED97102FCDBD5C8EC31C1F8BD4AF3A289170C67643C62BEADCD4417E726D2E73698E65BB14A31603B25C5F93686B588E2A5570C60EA0FD023B2B675C1D46FD18B749042DAC0AF757F99896A5318A867C2893850BED01E286A93C6CF41F52F0FBED9E0A75B9DF208B72ED2BE62991523A637622A1AEC3DCCF23739D75CA2AB8BB7B2A3A14500E349C0413553EF8A96663EF62BA14D90C809D5789091CA5BD98FFCE62E38597298F2153511A9B9772B79ABEE88A3E5E453F542BA5A1BDD6F9E71E7B324FAC6A92A467BAAEDC49467C8A71CAD370EF6DBCE66F2D9C0D8"}}
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

以上安装和升级的JSON请求包,可能因版本升级导致内容不同,如遇安装或升级时报错,请联系客服获取最新的请求包。 

4、连接请求串口通讯小程序服务:
说明:以下功能请通过Web Socket连接后可执行,如默认侦听端口不是80(关于如何配置侦听端口,请参考SDK包中的文档“PluginOK开发者手册.doc”),请在连接地址中指定端口号进行连接。
打开测试网页,输入地址:ws://wrl.zorrosoft.com?sid=668&pid=407F58DA-67A5-4C74-B9F9-44A02A20B205&flag=1 点击连接;
支持的协议功能如下:

A、获取参数
{"req":"SP_Get","rid":1,"para":{"Items":["EventFlag","Base64","CDHolding","CDTimeout","CommID","CommPort","CTSHolding","CTSTimeout","DSRHolding","DSRTimeout","DTREnable","Handshaking","InBufferSize","InBufferCount","Break","InputLen","Interval","NullDiscard","OutBufferSize","OutBufferCount","ParityReplace","PortOpen","RThreshold","RTSEnable","Settings","SThreshold","Output","Input","CommEvent","EOFEnable","InputMode"]}} 
获取指定名称的参数值,可批量获取,也可以获取单个。其中EventFlag默认0,为1时采用事件驱动模式,收到内容自动通知到前端(SP_Event事件),Base64指定通讯内容是否经过Base64编码后传输,默认0,如果通讯内容是二进制推荐设置为1,Output和Input内容如果Base64设置为1表示是Base64编码后的结果,原通讯控件中布尔值规则1为真,0为假。其它参数都是串口通讯的属性。
返回内容格式如下:
{"ret":0,"rid":1,"data":{"EventFlag":0,"Base64":0,"CDHolding":0,"CDTimeout":0,"CommID":-1,"CommPort":1,"CTSHolding":0,"CTSTimeout":0,"DSRHolding":0,"DSRTimeout":0,"DTREnable":0,"Handshaking":0,"InBufferSize":1024,"InBufferCount":0,"Break":0,"InputLen":0,"Interval":1000,"NullDiscard":0,"OutBufferSize":1024,"OutBufferCount":0,"OutBufferCount":"?","PortOpen":0,"RThreshold":0,"RTSEnable":0,"Settings":"9600,n,8,1","SThreshold":0,"Output":"","Input":"","CommEvent":-4083,"EOFEnable":0,"InputMode":0}} 
请求Items中的每个名称都对应自己名称的值

简单举例1,获取当前操作的COM端口、波特率及是否打开:{"req":"SP_Get","rid":2,"para":{"Items":["PortOpen","CommPort","Settings"]}}
{"ret":0,"rid":2,"data":{"PortOpen":1,"CommPort":1,"Settings":"9600,n,8,1"}}  代表当前打开了COM1端口,使用的波特率是9600,n,8,1
简单举例2,获取端口收到的内容:{"req":"SP_Get","rid":3,"para":{"Items":["Output"]}} 
{"ret":0,"rid":3,"data":{"Output":"OK"}}  代表当前端口收到内容OK

B、设置参数
{"req":"SP_Put","rid":6,"para":{"CommPort":1,"CDTimeout":0,"CTSTimeout":0,"DSRTimeout":0,"DTREnable":0,"Handshaking":0,"InBufferCount":0,"Break":0,"Interval":1000,"NullDiscard":0,"OutBufferCount":0,"OutBufferCount":"?","RThreshold":0,"RTSEnable":0,"SThreshold":0,"CommEvent":0,"EOFEnable":0}} 
设置指定名称的参数值,规则和获取参数类似。
返回内容格式如下:
{"ret":0,"rid":6,"data":{"CommPort":1,"CDTimeout":1,"CTSTimeout":1,"DSRTimeout":1,"DTREnable":1,"Handshaking":1,"InBufferCount":1,"Break":1,"Interval":1,"OutBufferCount":1,"RThreshold":1,"RTSEnable":1,"SThreshold":1,"CommEvent":0,"EOFEnable":1}} 
每个设置结果,在对应的结果中,1成功,0失败

C、指定参数打开端口
EventFlag为1时收到内容自动通知到前端(SP_Event事件)
Base64 接收和发送的内容是否经过Base64编码
CommPort 指定打开的端口序号
Settings 设置波特率等参数如:115200,n,8,1
InBufferSize OutBufferSize 读写缓冲区大小都是1024,
InputLen 设置当前接收区数据长度为0,表示全部读取
InputMode 串口接收数据的模式 0文本,1二进制内容
RThreshold  接收缓冲区有1个以及1个以上字符时,将引发接收数据的OnComm事件
协议举例:
{"req":"SP_Open","rid":15,"para":{"EventFlag":0,"Base64":0,"CommPort":2,"Settings":"115200,n,8,1","InBufferSize":1024,"OutBufferSize":1024,"InputLen":0,"InputMode":0,"RThreshold":16}}
{"ret":0,"rid":19,"data":{"Ret":1,"Code":0}}  Ret为1代表打开成功,Code为错误时错误码

D、读取端口数据
{"req":"SP_Read","rid":18,"para":{}}
如果Base64设置为1,Content为Base64编码后的内容
{"ret":0,"rid":18,"data":{"Content":"OK"}}  取到Content内容为OK

E、写数据端口
如果Base64设置为1,则Content必须是经过Base64编码后的内容(用于二进制流) 写端口:
{"req":"SP_Write","rid":19,"para":{"Content":"AT"}}
{"ret":0,"rid":19,"data":{"Ret":1,"Code":0}}  Ret为1代表关闭成功,Code为错误时错误码

F、关闭端口协议:
{"req":"SP_Close","rid":20,"para":{}}
请求返回:
{"ret":0,"rid":20,"data":{"Ret":1,"Code":0}}  Ret为1代表关闭成功,Code为错误时错误码

5、事件通知
5.1 收到内容通知
{"event":"SP_Rec","data":{"Content":""}} 如果Base64为1,内容Content里是Base64编码后的结果,实际使用时请用Base64编码还原内容

5.2 发送内容通知
{"event":"SP_Send","data":{"Content":""}} 如果Base64为1,内容Content里是Base64编码后的结果,实际使用时请用Base64编码还原内容

5.3  通讯事件通知
{"event":"SP_Event","data":{"ID":""}} "ID为事件类型 1发送事件、3 clear-to-send 线变化、4 data-set ready 线变化、5 carrier detect 线变化、6 振铃检测、7 文件结束

5.3  错误事件通知
{"event":"SSP_Error","data":{"ID":""}} "ID为错误类型:
    comInvalidPropertyValue = 380,无效属性值
    comSetNotSupported = 383,属性为只读
    comGetNotSupported = 394,属性为只写
    comPortOpen = 8000,端口打开时操作不合法
    8001 超时值必须大于 0 
    comPortInvalid = 8002,无效端口号
    8003 属性只在运行时有效
    8004 属性在运行时为只读
    comPortAlreadyOpen = 8005,端口已经打开
    8006 设备标识符无效或不支持该标识符 
    8007 不支持设备的波特率
    8008 指定的字节大小无效
    8009 缺省参数错误
    8010 硬件不可用(被其它设备锁定)
    8011 函数不能分配队列 
    comNoOpen = 8012,设备没有打开
    8013 设备已经打开
    8014 不能使用通信通知 
    comSetCommStateFailed = 8015,不能设置端口状态
    8016 不能设置 comm 事件屏蔽 
    comPortNotOpen = 8018,仅当端口打开时操作才有效
    8019 设备忙
    comReadError = 8020,读端口设备错误
    comDCBError = 8021,为该端口检索设备控制块时的内部错误

    comBreak = 1001,接收到中断信号 
    comCTSTO = 1002, Clear-to-send 超时 
    comDSRTO = 1003,Data-set ready 超时 
    comFrame = 1004,帧错误 
    comOverrun = 1006,端口超速
    comCDTO = 1007,Carrier detect 超时 
    comRxOver = 1008,接收缓冲区溢出 
    comRxParity = 1009,Parity 错误 
    comTxFull = 1010,传输缓冲区满 
    comDCB = 1011检索端口 设备控制块 (DCB) 时的意外错误 


6、其它
请求参数的JSON数据包,请确保是UTF-8无签名的编码。
更多接口请求说明,请参考安装目录中的文档TestWrl.txt、SDK包中的“PluginOK开发者手册.doc”及“PluginOK中间件安全解决方案”。
如还有疑问请直接联系客服 加微信:ZorroSoft,或加QQ群:23126938