由于实习单位的需要,前段时间开发个网页读取串口的小脚本,说是开发其实大部分是抄来的,但是CAB包是自己找的和浏览器相关设置是自己弄出来的,大概花了2天时间,特把相关代码发出来、跟大家交流学习,如需要CAB包和串口模拟测试软件可以联系我,第一遍日记,希望各位前辈多多指点,认识大家很高兴..
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title> ASP读取串口数据 </title>
- <meta name="generator" content="editplus" />
- <meta name="author" content="" />
- <meta name="keywords" content="" />
- <meta name="description" content="" />
- <script language="VBscript">
- '//页面载入时自动打开串口进行监听
- 'Sub Window_OnLoad()
- ' MSComm1.PortOpen = True
- 'End Sub
- '//打开串口进行监听
- Sub OpenPort()
- if Not MSComm1.PortOpen Then
- MSComm1.PortOpen = True
- MsgBox "Port opened !", vbOKOnly, "Warning"
- Else
- MsgBox "Port already opened !", vbOKOnly, "Warning"
- End if
- End Sub
- '//关闭串口
- Sub ClosePort()
- if MSComm1.PortOpen Then
- MSComm1.PortOpen = False
- MsgBox "Port closed !", vbOKOnly, "Warning"
- Else
- MsgBox "Port already closed !", vbOKOnly, "Warning"
- End if
- End Sub
- </script>
- <script ID="clientEventHandlersJS" language="javascript">
- <!--
- //串口事件驱动部分
- function MSComm1_OnComm()
- {
- var fldWeight = frmView.txtWeight;
- var strInput;
- strInput = MSComm1.Input;
- var strOutput;
- var arr = strInput.split("");
- var arr1 = strInput.split("");
- for(var i = 0; i < arr.length; ++i)
- {
- arr1[i] = arr[strInput.length-i-1];
- }
- strOutput = arr1;
- var newStr="";
- for(var i=0; i <arr1.length; i++)
- {
- if(arr1[i] != ',')
- {
- newStr += arr1[i];
- }
- }
- if(arr1[0] == '=' && arr1[9] == '=' )
- {
- newStr = newStr.substring(1,9);
- }
- else
- {
- alert("数据不正确");
- return false;
- }
- fldWeight.value = newStr;
- fldWeight.focus();
- return false;
- }
- //-->
- </script>
- <script language="javascript" FOR="MSComm1" EVENT="OnComm">
- <!--
- //串口事件驱动关联
- MSComm1_OnComm()
- //-->
- </script>
- <script language="javascript">
- function jsOpenPort()
- {
- alert("opened");
- var MSComm1 = document.getElementById("MSComm1");
- if (!MSComm1.PortOpen)
- {
- MSComm1.PortOpen=true;
- }
- else
- {
- alert("opened");
- }
- }
- </script>
- </head>
- <body>
- <object classid="clsid:648A5600-2C6E-101B-82B6-000000000014" id="MSComm1"
- codebase="mscomm32.cab#version=6.1.98.16"
- type="application/x-oleobject"
- style="left:54px;top:14px; width: 87px; height: 86px;">
- <param name="_ExtentX" value="1005">
- <param name="_ExtentY" value="1005">
- <param name="_Version" value="393216">
- <param name="CommPort" value="3">
- <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="63">
- <param name="RThreshold" value="10">
- <param name="RTSEnable" value="0">
- <param name="BaudRate" value="9600">
- <param name="ParitySetting" value="0">
- <param name="DataBits" value="7">
- <param name="StopBits" value="0">
- <param name="SThreshold" value="0">
- <param name="EOFEnable" value="-1">
- <param name="InputMode" value="0">
- </object>
- <form action="" method="post" id="frmView" name="frmView">
- <center><p>
- 重量<input id="txtWeight" name="txtWeight" style="left:50px;top:17px">千克
- </p>
- <p>皮重<input id="txtMWeight" name="txtMWeight" style="left:50px;top:17px">千克</p>
- <p>毛重<input id="txtPWeight" name="txtPWeight" style="left:50px;top:17px">千克</p>
- <p>净重<input id="txtJWeight" name="txtJWeight" style="left:50px;top:17px">千克</p>
- <p>车号<input id="txtAutoNumer" name="txtAutoNumber" style="left:50px;top:17px"></p>
- <p>货号<input id="txtCaseNumber" name="txtCaseNumber" style="left:50px;top:17px"></p>
- <p>
- <button OnClick="" value="clear">清除全部记录</button>
- <button OnClick="" value="zero">置零</button>
- <button OnClick="" value="qupi">去皮</button>
- </p>
- <p>
- </p>
- <p>
- <button OnClick="JavaScript:jsOpenPort();" value="Open Port">打开串口</button>
- <button οnclick="ClosePort()" value="Close Port">关闭串口</button>
- </p>
- <p>
- </p>
- </center>
- </form>
- </body>
- </html>
起初写的时候CAB根本带不进去,无论怎么样更改浏览器的安全设置都无法解决,后修改CLSID解决
下面发下MSCOM相关参数的解释 自己整理,不全见谅
/
Handshaking
常数 值 描述
comNone 0 无握手。
comXonXoff 1 XOn/Xoff 握手。
comRTS 2 Request-to-send/clear-to-send 握手。
comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。
/
InBufferSize
输入缓冲区大小
/
InputLen
接收缓冲区读取的字符数
InputLen 属性的缺省值是 0。
设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。
/
RThreshold
在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。
语法 object.Rthreshold [ = value ](value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )
说明 当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
/
SThreshold
MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
/
CommPort
监听串口号
/
EOFEnable
确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent 属性设置为 comEvEOF,
语法:object.EOFEnable [ = value ]
EOFEnable 属性语法包括下列部分:
value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。
value 的设置值:
True 当 EOF 字符找到时 OnComm 事件被激活。
False (缺省)当 EOF 字符找到时 OnComm 事件不被激活。
说明:当 EOFEnable 属性设置为 False,OnComm 控件将不在输入流中寻找 EOF 字符
/
_ExtentX _ExtentY
控件相关大小
/
_Version
COM控件版本
/
DTREnable
启用控制终端就续信号
/
OutBufferSize
串口输出缓冲区大小
/
NullDiscard
确定 null 字符是否从端口传送到接收缓冲区。
设置值 描述
True Null 字符不从端口传送到接收缓冲区
False (缺省值)Null 字符从端口传送到接收缓冲区
/
ParityReplace
发生奇偶校验错误时,设置并返回替换数据流中一个非法字符的字符。
parity bit 是指同一定数据位数一起传输的位,以提供简单的错误检查。当使用校验位时,MSComm 控件把在数据中已经设置的所有位(值为 1)都加起来并检查其和为奇数或偶数(根据当端口开时奇偶校验的设置)。
按照缺省规定,MSComm 控件用问号 (?) 替换非法字符。若设置 ParityReplace 为一个空字符串 (""),则当奇偶校验错误出现时,字符替换无效。但 OnComm 事件仍然产生,并且设置 CommEvent 属性为 comEventRXParity。
ParityReplace 字符被用语面向字节的操作,它必须是单字节字符。可指定 0 到 255 之间的 任何 ANSI 字符代码。
/
RTSEnable
确定是否使 Request To Send (RTS) 线有效。
一般情况下,由计算机发送 Request To Send 信号到联接的调制解调器,以请示允许发送数据。
/
BaudRate
每秒位数
ParitySetting
奇偶校验 默认无
/
DataBits
数据位 COM通信设定
/
StopBits
停止位
/
InputMode
InputMode默认是Text模式
InputMode可修改成Binary模式
/
/
第一次写日记,不好见谅