javascript 操作MSCOMM32串口通信

本文介绍了一个使用JavaScript与MSCOMM32组件进行串口通信的案例。为解决128-255范围内的字节发送问题,通过自定义ActiveX控件实现全范围字节数据的发送与接收。文章提供了具体的JavaScript和VB6代码示例。
javascript 直接操作MSCOMM32发数据只能发0到127,128到255不能发。所以要自己写一个activeX控件来进行数据转换

VB6

activeX 源代码

'把A1 01 0D 十六进制转成字符发给javascirpt
Public Function receivedata(ssr)
Dim leng
Dim bb() As Byte
bb = ssr
'leng = Len(bb)
For i = LBound(bb) To UBound(bb)
tmpHex = Hex(bb(i))
RtnStr = RtnStr & IIf(bb(i) < &H10, "0" & tmpHex, tmpHex) & " "
Next
receivedata = RtnStr
End Function


'把A1 01 0D 转成字节数组发给mscomm
Public Function senddata(ss)
Dim arr() As Byte
Dim s, i, leng
leng = Len(ss) \ 3
s = Split(ss, " ")
ReDim arr(leng) As Byte
For i = 0 To leng
arr(i) = Val("&H" & s(i))
Next i
senddata = arr
End Function


<!--

html

-->

<html>
<head>
<title>JavaScript MSCOMM32.OCX </title>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
//重写 mscomm 控件的唯一事件处理代码
function comm_OnComm()
{
var len=0;
if(comm.CommEvent==1)//如果是发送事件
{
window.alert("发送成功");//这句正常,说明发送成功了
}
else if(comm.CommEvent==2)//如果是接收事件
{
var leng=comm.InBufferCount;
var instr=cnv.receivedata(comm.Input);
document.form1.txtReceive.value=document.form1.txtReceive.value + instr;
}

}
</SCRIPT>

<SCRIPT LANGUAGE=javascript FOR=comm EVENT=OnComm>
// comm控件每遇到 OnComm 事件就调用 comm_OnComm()函数
comm_OnComm()
</SCRIPT>


<script language="JavaScript" type="text/JavaScript">
//打开端口并发送命令程序
function OpenPort()
{

if(comm.PortOpen==false)
{
try{
comm.PortOpen=true;
var sendstr=document.form1.txtsend.value;
comm.Output=cnv.senddata(sendstr);//发送命令
}catch(e){
alert(e);
}
window.alert("成功发出命令!");
}
else
{
var sendstr=document.form1.txtsend.value;
comm.Output=cnv.senddata(sendstr);//发送命令
}
}


</script>
</head>
<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>


<OBJECT ID="cnv"
CLASSID="CLSID:6AE2FA6C-7428-4BBC-A80E-8F3F5AF8517A"
CODEBASE="mycnv.CAB#version=1,0,0,0">
<param name="_ExtentX" value="8467">
<param name="_ExtentY" value="6350">
</OBJECT>
<object CLASSID="clsid:648A5600-2C6E-101B-82B6-000000000014" id="comm" codebase="MSCOMM32.OCX" type="application/x-oleobject" style="LEFT: 54px; TOP: 14px">
<param NAME="CommPort" VALUE="8">
<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">
<param NAME="DataBits" VALUE="8">
<param NAME="StopBits" VALUE="1">
<param NAME="BaudRate" VALUE="9600">
<param NAME="Settings" VALUE="9600,N,8,1">
</OBJECT>

<body>
<form name="form1">
<input type="button" name="Submit" value="提交" onClick="OpenPort()">
<input type="text" name="txtsend" value="" size="53">
<p> 
<textarea name="txtReceive" value="" rows="19" cols="58"></textarea>
</p>
</form>
</body>
</html>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值