`
linuxgao
  • 浏览: 76549 次
社区版块
存档分类
最新评论

IE浏览器通过mscomm控件与串口外设通信

阅读更多

场景:
基于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)
分享到:
评论

相关推荐

    在VS(VC)2010中使用MSComm控件实现串口通信的详细步骤[整理].pdf

    串口通信技术在VS2010中使用MSComm控件的实现步骤 串口通信是一种常用的数据交换方式,在各种设备和系统之间进行数据交换。使用MSComm控件可以简化串口通信的开发过程。本文将介绍如何在VS2010中使用MSComm控件实现...

    MSComm控件进行串口通信

    总的来说,MSComm控件为VC++ MFC应用提供了方便的串口通信接口,通过设置其属性、调用方法及注册事件处理,我们可以实现串口的读写操作,从而进行设备交互、数据传输等任务。在实际项目中,你可能需要根据具体需求...

    基于MSCOMM控件的串口通信Demo

    本教程以“基于MSCOMM控件的串口通信Demo”为例,探讨如何利用MSCOMM控件进行串口通信的开发。 首先,我们需要了解串口通信的基本概念。串口通信,也称为串行通信,是数据以串行方式按位(bit)发送和接收的一种...

    VC编程实现利用MSComm控件进行串口通信

    总的来说,VC++中利用MSComm控件进行串口通信是一个相对直观且实用的方法,适用于各种需要与外部设备交互的场景,例如工业自动化、数据采集系统、嵌入式设备控制等。通过熟练掌握MSComm控件的使用,开发者可以轻松地...

    利用MSComm控件进行串口通信

    MSComm控件是Microsoft Visual Basic中提供的一种工具,用于简化串行通信(串口通信)的实现,使得开发者能够轻松地通过串行端口发送和接收数据。本文将深入探讨如何利用MSComm控件进行串口通信,以及相关的重要知识...

    一个利用VC控件MSCOMM开发的串口通信程序

    串口通信是计算机通信技术中的一个...总结来说,通过VC控件MSCOMM,开发者可以高效地构建串口通信程序,实现与外部设备的数据交换。了解并掌握MSCOMM控件的使用,对于进行Windows平台下的串口通信编程具有重要意义。

    VC中应用MSComm控件实现串口通信

    VC中应用MSComm控件实现串口通信

    mscomm控件实现串口通信

    利用VB5.0的MSComm控件实现串口通信 设置MSComm控件的CommPort、Settings、EOFEnable属性初始化 设置MSComm控件的PortOpen属性,通过Output方法发送字符串数据 设置并读取MSComm控件的InputLen和...

    Delphi环境下利用MSComm控件开发串口通信程序

    通过以上步骤,可以在Delphi环境下成功利用MSComm控件开发出高效的串口通信程序,从而实现管道压力的有效监控。这种方法不仅简单易用,而且能够满足工业控制领域对数据传输的实时性和准确性的需求。

    [180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载

    [180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口...

    基于MSComm控件的串口通信设计

    总之,通过VS2010和MSComm控件,我们可以创建一个功能丰富的串口通信程序,实现字符和十六进制数据的收发,以及文件的发送和保存。理解并熟练运用这些技术,对于进行串口通信相关的项目开发至关重要。在实际应用中,...

    [040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口学习资料源码下载

    [040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口学习资料源码下载[040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口学习资料源码下载[040]VC中应用MSComm控件实现串口通信.zip上位机开发VC串口...

    MSComm控件串口通信

    MSComm控件是Microsoft在Visual Basic等开发环境中提供的一种用于串行通信的控件,它使得程序员能够方便地实现电脑PC与外部设备之间的串口数据收发。串口通信是计算机硬件接口技术的一个重要组成部分,广泛应用于...

    bcb串口mscomm控件程序编译运行错误修复工具集合c++builder

    描述中的“bcb串口mscomm控件错误编译运行错误修复工具集合c++builder”进一步强调了这个工具集专注于解决与串口通信相关的MSComm控件在C++Builder中的编译和运行问题。这些错误可能包括但不限于编译时找不到控件...

    基于MFC中MSCOMM控件的串口通信源码

    通过学习和分析“串口助手山寨版”的源码,开发者可以掌握如何在MFC环境中使用MSCOMM控件进行串口通信,实现自己的串口调试工具,这对于嵌入式开发、硬件测试等领域非常有用。理解这些知识,有助于开发者更好地理解...

    利用MSComm控件进行串口数据传输vc++mfc编程案例

    在串口通信领域,MSComm控件是Visual C++ MFC(Microsoft Foundation Classes)框架下常用的一种工具,它为开发者提供了方便的API接口,用于实现应用程序与外部设备间的串行数据传输。本篇将深入探讨如何利用MSComm...

    VS2008C++MFC串口小程序采用MSComm控件

    10. **调试与测试**:在VS2008中,可以通过调试器观察程序运行状态,检查串口通信是否正常。确保程序在实际设备上运行时,能够正确发送和接收数据。 以上就是利用VS2008的C++和MFC框架,结合MSComm控件开发串口通信...

Global site tag (gtag.js) - Google Analytics