场景:
基于JAVA EE的BS应用,前端使用IE浏览器,需要通过串口与pos、地磅、显示屏等外设进行通信。
目前与串口应用基本上都是一个本地应用,用vc、vb、delphi等开发工具开发,使用ie直接与com
通信的案例非常少。
因为项目的软件架构风格不能改变,决定了必须用IE与com通信,这种情况下,采用ActiveX的方式
成为不多的选择之一
1环境
后台就不说了,没有什么关系,下面是前端的环境
操作系统:win7(32、64)、xp
浏览器:IE 8
ACTIVEX:MSCOMM
html控制:javascript
2安装
主要是mscomm控件的安装,
针对32、64位不同的版本,把ocx文件放在system32目录下(其他位置貌似也可以)
以管理员身份运行cmd.exe
运行regsvr32 mscomm.ocx
3应用
html<object>
<object classid="clsid:648A5600-2C6E-101B-82B6-000000000014" id=MSComm1 codebase="MSCOMM32.OCX" type="application/x-oleobject" >
<param name="CommPort" value="4" /> <!-- 端口号 -->
<param name="DTREnable" value="1" />
<param name="Handshaking" value="0" />
<param name="InBufferSize" value="1024" />
<param name="InputLen" value="0" />
<param name="NullDiscard" value="0" />
<param name="OutBufferSize" value="512" />
<param name="ParityReplace" value="?" />
<param name="RThreshold" value="1" /> <!-- -->
<param name="RTSEnable" value="1" />
<param name="SThreshold" value="2" />
<param name="EOFEnable" value="0" />
<param name="InputMode" value="1" /><!-- binary 1,ascii 0 -->
<param name="DataBits" value="8" />
<param name="StopBits" value="1" />
<param name="BaudRate" value="9600" />
<param name="Settings" value="9600,N,8,1" /> <!-- 波特率,校验位等 -->
</object>
4异步通信
串口通信本来就是异步通信,类似于以太网的双工工作,发不影响收的过程。
与前台的交互分成两个过程:
a:发送,只管数据发送成功就可以了
b:接收,接收到数据会触发响应事件,接收到完整报文后触发前台的处理函数。但是这里有一个很重要的问题,一个完整的报文是13个字节,
接收的时候有可能是一次接收到5个, 下一次接收到8个,完成一个完整的报文,需要靠报文的开头、结尾字符去认定一个完整的报文。
5、JS不可见字符的严重问题
正常情况下,控件接收到一个报文会赋值给js的变量(字符串),要发送的时候需要把要发送的数据在JS中转换成字符串,传给控件。
但是,由于JS是弱类型的语言,没有byte的概念,在赋值过程中,部分不可见字符(不仅仅是ascii),入0XEB,就会被转换成0X3F,
丢失该字节的表征意义。
解决办法:
a:修改报文都用可见字符
b:再写一个控件,接收mscomm的数据后进行进行转码,然后赋值给js变量,反之亦然(本系统采用此方法)
主要方法:
$('MSComm1').PortOpen ,可赋值,可取值
if ($('MSComm1').PortOpen == false) {
$('MSComm1').PortOpen = true;
}
$('MSComm1').Output ,发送指定的内容,在js中会把所有内容转变成字符串,发给mscomm
$('MSComm1').Output = $("tb_send").value);
$('MSComm1').Input ,接收到的内容,本意是一个字节数组,赋值给js后会变成一个字符串
var v=$('MSComm1').Input;
$('MSComm1').CommEvent ,mscomm事件,在发送、接收,打开、关闭端口都会触发,是异步控制的源头
switch($('MSComm1').CommEvent){
case 1:{ break;} //发送事件
case 2: { Receive();break;} //接收事件
default: alert("Event Raised!"+$('MSComm1').CommEvent);;
}
发送二进制时的几个有用的js方法
String.fromCharCode(arr[i]):把数字(ascii码)作为unicode编码,转换成一个string类型的字符
str.charCodeAt(i).toString(16):把一个字符转换成unicode,并且用16进制显示
4Q&A
Q:发送0x02怎么办,怎么拼到发送字符串里面
A:str=str + String.fromCharCode(0x02)
Q:如何显示收到的字符串中的特殊字符,如0x02
A:str.charCodeAt(i).toString(16)
分享到:
相关推荐
串口通信技术在VS2010中使用MSComm控件的实现步骤 串口通信是一种常用的数据交换方式,在各种设备和系统之间进行数据交换。使用MSComm控件可以简化串口通信的开发过程。本文将介绍如何在VS2010中使用MSComm控件实现...
总的来说,MSComm控件为VC++ MFC应用提供了方便的串口通信接口,通过设置其属性、调用方法及注册事件处理,我们可以实现串口的读写操作,从而进行设备交互、数据传输等任务。在实际项目中,你可能需要根据具体需求...
本教程以“基于MSCOMM控件的串口通信Demo”为例,探讨如何利用MSCOMM控件进行串口通信的开发。 首先,我们需要了解串口通信的基本概念。串口通信,也称为串行通信,是数据以串行方式按位(bit)发送和接收的一种...
总的来说,VC++中利用MSComm控件进行串口通信是一个相对直观且实用的方法,适用于各种需要与外部设备交互的场景,例如工业自动化、数据采集系统、嵌入式设备控制等。通过熟练掌握MSComm控件的使用,开发者可以轻松地...
MSComm控件是Microsoft Visual Basic中提供的一种工具,用于简化串行通信(串口通信)的实现,使得开发者能够轻松地通过串行端口发送和接收数据。本文将深入探讨如何利用MSComm控件进行串口通信,以及相关的重要知识...
串口通信是计算机通信技术中的一个...总结来说,通过VC控件MSCOMM,开发者可以高效地构建串口通信程序,实现与外部设备的数据交换。了解并掌握MSCOMM控件的使用,对于进行Windows平台下的串口通信编程具有重要意义。
VC中应用MSComm控件实现串口通信
利用VB5.0的MSComm控件实现串口通信 设置MSComm控件的CommPort、Settings、EOFEnable属性初始化 设置MSComm控件的PortOpen属性,通过Output方法发送字符串数据 设置并读取MSComm控件的InputLen和...
通过以上步骤,可以在Delphi环境下成功利用MSComm控件开发出高效的串口通信程序,从而实现管道压力的有效监控。这种方法不仅简单易用,而且能够满足工业控制领域对数据传输的实时性和准确性的需求。
[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口...
总之,通过VS2010和MSComm控件,我们可以创建一个功能丰富的串口通信程序,实现字符和十六进制数据的收发,以及文件的发送和保存。理解并熟练运用这些技术,对于进行串口通信相关的项目开发至关重要。在实际应用中,...
[040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口学习资料源码下载[040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口学习资料源码下载[040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口...
MSComm控件是Microsoft在Visual Basic等开发环境中提供的一种用于串行通信的控件,它使得程序员能够方便地实现电脑PC与外部设备之间的串口数据收发。串口通信是计算机硬件接口技术的一个重要组成部分,广泛应用于...
描述中的“bcb串口mscomm控件错误编译运行错误修复工具集合c++builder”进一步强调了这个工具集专注于解决与串口通信相关的MSComm控件在C++Builder中的编译和运行问题。这些错误可能包括但不限于编译时找不到控件...
通过学习和分析“串口助手山寨版”的源码,开发者可以掌握如何在MFC环境中使用MSCOMM控件进行串口通信,实现自己的串口调试工具,这对于嵌入式开发、硬件测试等领域非常有用。理解这些知识,有助于开发者更好地理解...
在串口通信领域,MSComm控件是Visual C++ MFC(Microsoft Foundation Classes)框架下常用的一种工具,它为开发者提供了方便的API接口,用于实现应用程序与外部设备间的串行数据传输。本篇将深入探讨如何利用MSComm...
10. **调试与测试**:在VS2008中,可以通过调试器观察程序运行状态,检查串口通信是否正常。确保程序在实际设备上运行时,能够正确发送和接收数据。 以上就是利用VS2008的C++和MFC框架,结合MSComm控件开发串口通信...
同时,考虑到实时性,可能需要考虑线程同步,确保绘图与串口通信不会互相阻塞。 总的来说,基于MSComm控件的串口通信在VC++ MFC中是一项实用技术,尤其适合于测控领域的应用。通过以上步骤,你可以构建一个能够接收...