js接受串口无法接受串口数据,什么原因?

honsjj 2013-04-08 03:32:51
发给串口的命名是:01 03 00 00 00 01 84 0A,但是无法接受到数据,不知道什么原因?
<html>
<head>
<title>JavaScript串口测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
function MSComm1_OnComm()
{
switch(MSComm1.CommEvent)
{
case 1:{ window.alert("Send OK!"); break;} //发送事件
case 2: { Receive();break;} //接收事件
default: alert("Event Raised!"+MSComm1.CommEvent);;
}
}
//-->
</SCRIPT>

<SCRIPT LANGUAGE=javascript FOR=MSComm1 EVENT=OnComm>
<!--
// MSComm1控件每遇到 OnComm 事件就调用 MSComm1_OnComm()函数
MSComm1_OnComm();
//-->
</SCRIPT>

<script language="JavaScript" type="text/JavaScript">
<!--
String.prototype.Blength = function()
{
var arr = this.match(/[^\x00-\xff]/ig);
return arr == null ? this.length : this.length + arr.length;
}

function OperatePort()
{
if(MSComm1.PortOpen==true)
{
try
{
MSComm1.PortOpen=false;
document.getElementById("OperateButton").value="打开串口";
}
catch(ex)
{
alert(ex.message);
}
}
else
{
try
{
MSComm1.PortOpen=true;
document.getElementById("OperateButton").value="关闭串口";
}
catch(ex)
{
alert(ex.message);
}
}
}

function ConfigPort()
{
if(MSComm1.PortOpen==false)
{
try
{
MSComm1.CommPort=document.getElementById("ComName").value;
MSComm1.Settings=document.getElementById("BaudRate").value.toString()+
","+document.getElementById("CheckBit").value.toString()+
","+document.getElementById("DataBits").value.toString()+
","+document.getElementById("StopBits").value.toString();
MSComm1.OutBufferCount =0; //清空发送缓冲区
MSComm1.InBufferCount = 0; //滑空接收缓冲区
alert("已配置串口COM"+MSComm1.CommPort+"\n 参数:"+MSComm1.Settings);
}
catch(ex)
{
alert(ex.message);
}
}
else
{
alert("请先关闭串口后再设置!");
}
}

function Send()
{
//alert(document.getElementById("txtSend").value);
var orgstr=document.getElementById("txtSend").value;
var newstr="";
var hexflag=document.getElementById("isSendHex").checked;
if(hexflag&&orgstr!="")
{
if(orgstr.substr(0,2)=="0x"||orgstr.substr(0,2)=="0X")
{
orgstr=orgstr.substring(2,orgstr.length);
}
if(orgstr.length%2!=0)
{
orgstr="0"+orgstr;
}
if((newstr=str2hex(orgstr,16))=="")
{
alert("错误的16进制数");return false;
}
}
try
{
MSComm1.Output=hexflag?newstr:orgstr;
}
catch(ex)
{
alert(ex.message);
}
}
function Receive()
{
document.getElementById("txtReceive").value += MSComm1.Input;
}

function ClearReceived()
{
document.getElementById("txtReceive").innerText="";
}
-->
</script>

</head>
<body>
<form name="form1">
<fieldset style="width:200px;height:250px;text-align:center;">
<legend>配置串口</legend>
<div style="float:left;width:200px">
<br/>
<span>串口号:</span>
<select name="ComName" id="ComName" style="width:75px" >
<option value="1" >COM1</option>
<option value="2" >COM2</option>
<option value="3" selected >COM3</option>
<option value="4" >COM4</option>
</select>
<br/>
<span>波特率:</span>
<select name="BaudRate" id="BaudRate" style="width:75px" >
<option value="9600" selected >9600</option>
<option value="57600" >57600</option>
<option value="115200" >115200</option>
</select>
<br/>

<span>校验位:</span>
<select name="CheckBit" id="CheckBit" style="width:75px" >
<option value="N" selected >无NONE</option>
<option value="O" >奇ODD</option>
<option value="E" >偶EVEN</option>
</select>
<br/>

<span>数据位:</span>
<input type=text id="DataBits" name="DataBits" value=8 style="width:75px;height:20px">
<br/>

<span>停止位:</span>
<input type=text id="StopBits" name="StopBits" value=1 style="width:75px;height:20px">
<br/>
<br/>
<input type="button" id="ConfigButton" style="width:80px;height:30px;font-size:13px" name="ConfigButton" value="配置串口" onClick="ConfigPort()">
<input type="button" id="OperateButton" style="width:80px;height:30px;font-size:13px" name="OperateButton" value="打开串口" onClick="OperatePort()">
</div>
</fieldset>

<fieldset style="width:200px;height:250px;text-align:center;">
<legend>发送区域</legend>
<div style="float:left;">
<textarea id="txtSend" name="txtSend" style="width:200px;height:160px"></textarea>
<br/>
<span><input id="isSendHex" name="isSendHex" type="checkbox" checked="0" />16进制</span>
<input type="button" id="SendButton" style="width:100px;height:30px" name="SendButton" value="发送" onClick="Send()">
</div>
</fieldset>

<fieldset style="width:200px;height:250px;text-align:center;">
<legend>接收区域</legend>
<div style="float:left;">
<textarea id="txtReceive" READONLY=TRUE name="txtReceive" style="width:200px;height:160px"></textarea>
<br/>
<span><input id="isReceiveHex" name="isReceiveHex" type="checkbox" />16进制</span>
<input type="button" id="ClearButton" style="width:100px;height:30px" name="ClearButton" value="清空" onClick="ClearReceived()">
</div>
</fieldset>
</form>

<OBJECT ID="MSComm1" WIDTH=100 HEIGHT=51 type="application/x-oleobject"
CLASSID="CLSID:648A5600-2C6E-101B-82B6-000000000014"
CODEBASE="MSCOMM32.OCX">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_Version" VALUE="393216">
<PARAM NAME="DTREnable" VALUE="-1">
<PARAM NAME="RThreshold" VALUE="1">
<PARAM NAME="RTSEnable" VALUE="-1">
</OBJECT>
</body>
</html>
...全文
421 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hllively 2015-10-22
  • 打赏
  • 举报
回复
楼主你好,代码可不可以发我一份hllive@163.com 我弄这个串口通信弄了两个星期勒还没有弄会,非常感谢 好人一生平安!
famousywm 2015-08-14
  • 打赏
  • 举报
回复
需要修改注册表内容,不是程序问题。我测试过我这边的,不知道你那边什么情况。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{648A5600-2C6E-101B-82B6-000000000014} 其键值Compatibility Flags改成0(原是400)
famousmpp 2015-08-14
  • 打赏
  • 举报
回复
我解决了,如果还需要的话可以联系哦。
honsjj 2013-05-22
  • 打赏
  • 举报
回复
引用 13 楼 sqy1026 的回复:
疑问1:修改IE后提示是否要运行activex控件,选择yes后是否就说明已经加载了控件并设置了串口的属性? 疑问2:如果是,那么这个时候是否就可以直接打开了?我用的是虚拟串口,不知道是否因为这个虚拟串口才发送不了数据?
我没解决
sqy1026 2013-05-16
  • 打赏
  • 举报
回复
疑问1:修改IE后提示是否要运行activex控件,选择yes后是否就说明已经加载了控件并设置了串口的属性? 疑问2:如果是,那么这个时候是否就可以直接打开了?我用的是虚拟串口,不知道是否因为这个虚拟串口才发送不了数据?
honsjj 2013-05-14
  • 打赏
  • 举报
回复
引用 4 楼 c2u 的回复:
看上去好高级,这玩意还真没用过,我们写串口出问题最多是波特率调错了,一般是115200 可以使用nodejs的serialport module,这个是跨平台的, etc:

var serialport = require("serialport");
var SP = serialport.SerialPort;
var port = "/dev/input/event0"
var sp = new SP(port);


sp.on('data', function(data) {
  console.log( data);
});
能详细说下吗?
honsjj 2013-05-14
  • 打赏
  • 举报
回复
引用 6 楼 november_2013 的回复:
使用MSCOMM32.ocx,要把这个加载到注册表里面,详细的可以搜下"注册MSCOMM32.OCX控件"
你有用过这个吗
kkjjww 2013-05-14
  • 打赏
  • 举报
回复
关注下,没用过
sqy1026 2013-05-14
  • 打赏
  • 举报
回复
我也在看这个代码,发现有几个问题: 1。打开串口的时候,打开标识是undefined。理论上应当是false。不明白为什么; 2。事件没有相应。 3。点击接收按钮提示没有注册,本来是已经注册了的。 有这些不明白的地方,也希望有人能够解惑,如果搂住解决了,请告知一下阿。
honsjj 2013-04-26
  • 打赏
  • 举报
回复
引用 6 楼 november_2013 的回复:
使用MSCOMM32.ocx,要把这个加载到注册表里面,详细的可以搜下"注册MSCOMM32.OCX控件"
加到里面了,发现这个程序不能接受和发送16进制,怎么办。
november_2013 2013-04-22
  • 打赏
  • 举报
回复
使用MSCOMM32.ocx,要把这个加载到注册表里面,详细的可以搜下"注册MSCOMM32.OCX控件"
honsjj 2013-04-10
  • 打赏
  • 举报
回复
能给个完整的例子吗,看不太懂你的程序,能加我扣扣在线聊下吗151871875.
引用 4 楼 c2u 的回复:
看上去好高级,这玩意还真没用过,我们写串口出问题最多是波特率调错了,一般是115200 可以使用nodejs的serialport module,这个是跨平台的, etc: JavaScript code?123456789var serialport = require("serialport");var SP = serialport.SerialPort……
c2u 2013-04-09
  • 打赏
  • 举报
回复
看上去好高级,这玩意还真没用过,我们写串口出问题最多是波特率调错了,一般是115200 可以使用nodejs的serialport module,这个是跨平台的, etc:

var serialport = require("serialport");
var SP = serialport.SerialPort;
var port = "/dev/input/event0"
var sp = new SP(port);


sp.on('data', function(data) {
  console.log( data);
});
honsjj 2013-04-09
  • 打赏
  • 举报
回复
@wzs_xyz 用的就是MSCOMM32ocx
引用 2 楼 wzs_xyz 的回复:
这个得用过这个activex才好回答了,如果是自己开发的activex,只好问自己
未知数 2013-04-08
  • 打赏
  • 举报
回复
这个得用过这个activex才好回答了,如果是自己开发的activex,只好问自己
honsjj 2013-04-08
  • 打赏
  • 举报
回复
别沉。。。。。。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧