通过使用电子称直接连接电脑读取电子称重量的程序

做一个通过使用电子称直接连接电脑读取电子称重量的程序。中间遇到不少问题,记录下,下次再搞的时候好查找。

     硬件方面: 有串口的电子称。通过超级终端能读到串口数据就可以。

     软件方面: MSCOMM32.OCX。google一下能找到很多,使用Regsvr32注册

           剩下的就是在Web页面中调用了。下面的代码修改自别人的程序


代码

  <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 Receive()   {       //alert("InBufferCount::"+MSComm1.InBufferCount);       var inputvalue = MSComm1.Input;       if (inputvalue.indexOf('g') >= 0) {           return;       }      // alert(inputvalue);       document.getElementById("txtReceive").value = inputvalue.replace('-','');     //alert("InBufferCount::"+MSComm1.InBufferCount);      }     --> </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"selected  >COM1</option>    <option value="2" >COM2</option>    <option value="3">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="txtReceive" READONLY=TRUE  name="txtReceive" style="width:200px;height:160px"></textarea>     <br/></div></fieldset>   </form>   <OBJECT id=MSComm1 CLASSID="clsid:648A5600-2C6E-101B-82B6-000000000014" codebase="MSCOMM32.OCX" type="application/x-oleobject"  style="LEFT:54px;TOP:14px" >      <PARAM   NAME="CommPort"   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"/>          <PARAM   NAME="RTSEnable"   VALUE="1"/>      <PARAM   NAME="DTREnable"   VALUE="1"/>      <PARAM   NAME="Handshaking"   VALUE="0"/>      <PARAM   NAME="NullDiscard"   VALUE="0"/>      <PARAM   NAME="ParityReplace"   VALUE="?"/>      <PARAM   NAME="EOFEnable"   VALUE="0"/>            <PARAM   NAME="InputMode"   VALUE="0"/>         <PARAM   NAME="InBufferSize"   VALUE="1024"/>            <PARAM   NAME="InputLen"   VALUE="0"/>          <PARAM   NAME="OutBufferSize"   VALUE="512"/>           <PARAM   NAME="SThreshold"   VALUE="0"/>      <PARAM   NAME="RThreshold"   VALUE="1"/> </OBJECT></body> </html> 

 

 

 

  <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 Receive()
   {
       //alert("InBufferCount::"+MSComm1.InBufferCount);
       var inputvalue = MSComm1.Input;
       if (inputvalue.indexOf('g') >= 0) {
           return;
       }
      // alert(inputvalue);
       document.getElementById("txtReceive").value = inputvalue.replace('-','');
     //alert("InBufferCount::"+MSComm1.InBufferCount);   
   }
  

 
  --> 

</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"selected  >COM1</option>
    <option value="2" >COM2</option>
    <option value="3">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="txtReceive" READONLY=TRUE  name="txtReceive" style="width:200px;height:160px"></textarea>  
   <br/>
</div>
</fieldset>   

 


</form> 
 
 <OBJECT id=MSComm1 CLASSID="clsid:648A5600-2C6E-101B-82B6-000000000014"
 codebase="MSCOMM32.OCX" type="application/x-oleobject"  style="LEFT:54px;TOP:14px" >
      <PARAM   NAME="CommPort"   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"/>     
     <PARAM   NAME="RTSEnable"   VALUE="1"/> 
     <PARAM   NAME="DTREnable"   VALUE="1"/> 
     <PARAM   NAME="Handshaking"   VALUE="0"/> 
     <PARAM   NAME="NullDiscard"   VALUE="0"/> 
     <PARAM   NAME="ParityReplace"   VALUE="?"/>
 
     <PARAM   NAME="EOFEnable"   VALUE="0"/>       
     <PARAM   NAME="InputMode"   VALUE="0"/>    
     <PARAM   NAME="InBufferSize"   VALUE="1024"/>       
     <PARAM   NAME="InputLen"   VALUE="0"/>     
     <PARAM   NAME="OutBufferSize"   VALUE="512"/> 
     
     <PARAM   NAME="SThreshold"   VALUE="0"/> 
     <PARAM   NAME="RThreshold"   VALUE="1"/> 

</OBJECT>


</body> 
</html> 
      电子称连接上电脑,设置允许加载ACtiveX什么的不多说了。此时正常情况是可以读到数据的,但总有那么多不正常

   的情况,本人就被浪费了一个下午和一个晚上,但总算解决。开始的时候在Window2003下测试通过了。到WindowXP

  下,怎么都不行。实在郁闷。还好网上有人给出问题的原因:XP的打补丁导致不去加载MSComm32.ocx。去掉的方法

 将下面语句写入到.reg文件中,运行即可。

   Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/ActiveX Compatibility/{648A5600-2C6E-101B-82B6-000000000014}]

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/cshapo/csharpjs/20100714/441346.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值