js获取电子称数据MScomm

MSComm1串口连接电子称重仪

MSComm简单了解

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。仅限ie浏览器。

话不多说上代码

window.onload = function() {
				ConfigPort() //页面加载进来函数
			}
			var res='' //做标识 保存端口用
			var com = 1;
			function ConfigPort(){
				MSComm1 = new ActiveXObject("MSCOMMLib.MSComm");//新建MScomm对象
				MSComm1.OutBufferCount =0; //清空发送缓冲区
				MSComm1.InBufferCount = 0; //滑空接收缓冲区
				MSComm1.RThreshold=8;//触发一次oncomm函数发送多少字节和用的电子称有关,和后面解析数据有关
				if(com > 6){ // 循环到端口6 如果找不到就提示
					 com = 0;
					 alert("未连接称重仪!")
					 return;
				}
				if(localStorage.getItem("CommPort")){//判断是否存在找到的端口
					MSComm1.CommPort = localStorage.getItem("CommPort");
				}else{
					MSComm1.CommPort = com; // 设置串口 
					com =com+ 1;
					timer = setTimeout('ConfigPort()',1000) //定时循环该函数
				}
				
				searchAndOpenPort()
  		 }
        function searchAndOpenPort(){
              if(MSComm1.PortOpen == true){
                toggglePort(); // 关闭或者打开端口
              }
              var b = toggglePort(); // 打开串口 并返回打开结果
        }
		function toggglePort(){
              if(MSComm1.PortOpen == false){
                try {
			      MSComm1.PortOpen = true; // 开启串口
					   bindEvent()
                  return true;
                }catch(ex){
			      setTimeout('toggglePort()',50)
						return false;
                }
              }else{
                try {
                  MSComm1.PortOpen = false; // 关闭串口
                  return true;
                }catch(ex){
						// alert('!'+ex)
                  return false;
                }
              }
            }
		var bindEvent = function () {
					function MSComm1::OnComm(){
					MSComm1_OnComm(); // 触发收发事件后的处理方法
				  }
		}

     function   MSComm1_OnComm()   {
       switch(MSComm1.CommEvent)
       {
         case 1:{ window.alert("Send OK"); break;}
         case 2: { Receive();break;} 
         default:console.log("commEvent--->default") ;
       }       
  }  
  
   function Receive()
   {   
	
	if(timer){
		clearTimeout(timer)
	}
	var value=MSComm1.Input;
    res =  "MSComm1";
	 try{
	 document.getElementById("weight_").innerHTML=realData(value+"");
	 $("#weight_1").text(realData(value+""))
	 $("#divP").text(realData(value+""))
	 }catch(e){
	 }
   }
  
	//具体 的解析函数
   function realData(inputData){
		var res1="";
		var starDot=false;
		for(var i=inputData.length-1;i>=1;i--){
		
		if(inputData[i]=="0"){
			if(starDot){
                res1+=inputData[i];
			}
		}else{
			res1+=inputData[i];
		}
		if(inputData[i]=="."){
			starDot=true;
		}
		}
		if(res1==".00"){
		return "0";
		}
		if(res1[0]=="."){
		return "0"+res1;
		}
		return res1;
	}

如下解释

  1. 为什么要newMscomm ,网上有很多把MSComm用object写入到代码中,MSComm1_OnComm事件会用script触发,在页面加载后会执行,就必须要求串口确定,我这里连接电子称的串口是不确定的;
  2. 非正常关闭会抛异常 当串口非正常关闭时,既没有MSComm1.PortOpen = false,当再次获取数据会存在portopen是false,但打开时ie报错已经打开,建议跳转链接时手动的mscomm1.PortOpen=false我在这里踩了个大坑
  3. 该代码仅用个别电子称 ,市面上电子称千千万万,可能不适用与你,如果你的电子称不一样,稍作修改即可,比如波长,比如解析数的函数;

MSComm1::OnComm

最主要的就是这个函数,当串口连接成功是触发这个函数,接受数据。再通过解析就能得到数据,详情请看代码

Alt

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值