读取电子秤重仪表xk3101-k串口数据

最近公司有一个需求需要用到电子称重仪表读取数据到数据库中

这里使用的是柯力xk3101-k产品

注意事项:因为使用了activex插件,所以要使用ie内核浏览器,有可能还是不能正常使用,需要设置ie浏览器的安全性问题,

IE8的高安全性阻止了ActiveX等控件的加载

“工具”---“Internet选项”---“安全”---“自定义级别”--“ActiveX控件和插件”,把相关的都启用

设备连接时,有的新主板没有串口插孔,需要购买外加一个串口设备。

我尝试使用USBTORS232转换串口线,但是读取的数据会有问题,搞了很久没有搞定,还是主板上加了接了一个串口

 需要下载ComAxCtrl.ocx插件放在Bin文件夹下

 var result = ComAxCtrl.CommOpen(1, "9600,n,8,1"); 默认是com1口
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="COM数据测试.aspx.cs" Inherits="COM数据测试" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    


    <script src="Js/jquery-1.4.2.js"></script>


<style type="text/css">
body{
text-align: center;
font-size: 12px;
margin: 0px;
padding: 0px;
}
.clear{
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}
.cssCenter{
margin-top: 0px;
margin-bottom: 0px;
margin-left: auto;
margin-right: auto;
}
</style>
<script type="text/javascript">
    var ComAxCtrl = null;

    /**
    * 检测是否允许ActiveX控件运行
    * @param true-允许ActiveX控件运行;false-不允许ActiveX控件运行
    */
    function isActiveXEnabled() {
        //xmlhttp对象
        var kXmlHttp = null;
        //如果是IE浏览器
        if ($.browser.msie != null && $.browser.msie == true) {
            //微软IE支持的xmlhttp对象
            var aVersionhs = ["MSXML2.XMLHttp.5.0",
                             "MSXML2.XMLHttp.4.0",
                             "MSXML2.XMLHttp.3.0",
                             "MSXML2.XMLHttp",
                             "Microsoft.XMLHttp"];
            //IE创建方式
            for (var i = 0; i < aVersionhs.length; i++) {
                try {
                    kXmlHttp = new ActiveXObject(aVersionhs[i]);
                    return true;
                } catch (e) {

                }
            }
        } else {
            try {
                //非微软IE支持的xmlhttp对象
                if (typeof XMLHttpRequest != "undefined") {
                    kXmlHttp = new XMLHttpRequest();
                    return true;
                }
            } catch (e) {

            }
        }
        return false;
    }

    /**
    * 判断ActiveX控件是否已经注册并加载到浏览器
    * @return true-已经注册,并且加载;false-未注册控件或未能成功加载ActiveX控件。
    */
    function isActiveXRegistered() {
        try {
            new ActiveXObject("MRCOMAX.MRCOMAXCtrl.1");
            return true;
        } catch (e) {

        }
        return false;
    }

    function initss() {

        //alert("isActiveXEnabled==" + isActiveXEnabled());
        //alert("isActiveXRegistered==" + isActiveXRegistered());

        document.getElementById("fingerAGM").value = "";
        document.getElementById("info").value = "";
        var flag = false;
        var flag1 = false;
        if (ComAxCtrl == null) {
            flag = true;
        }
        if (flag) {
            ComAxCtrl = document.getElementById("ComAxCtrl");
            ComAxCtrl.attachEvent("OnCommRecv", OnCommRecv);
            flag1 = true;
        } else {
            if (!ComAxCtrl.IsCommOpen()) {
                flag1 = true;
            }
        }
        if (flag1) {
            var result = ComAxCtrl.CommOpen(1, "9600,n,8,1");
            if (result == 0) {
                alert("无法找到设备!");
                return false;
            }
        }
        if (!ComAxCtrl.IsCommOpen()) {
            alert("设备未打开!");
            return false;
        }

        //发送命令
        document.getElementById("info").value = "";
        var cR = ComAxCtrl.CommSend(stringToHex("TPLT"));

    }
    var getWeightCommon = "";
    function OnCommRecv(data) {
         hexToString(data);
      


    }



    function stringToHex(str) {
        var val = "";
        for (var i = 0; i < str.length; i++) {
            if (val == "")
                val = "0X" + str.charCodeAt(i).toString(16);
            else
                val += ",0X" + str.charCodeAt(i).toString(16);
        }
        return val;
    }
    function hexToString(str) {
        var val = "";
        var arr = str.split(" ");
        for (var i = 0; i < arr.length; i++) {
            val += String.fromCharCode("0x" + arr[i]);
           
        }
        var info = document.getElementById("info").value + val;

        info = info.replace(/[
]/g, ""); //去掉回车换行
        document.getElementById("info").value = info;
        if (info.length>8) {
            document.getElementById("info").value = ""; //接收完数据
        }
    }
</script>
  </head>

 <body onload="initss();">
  <object id="ComAxCtrl" classid="clsid:1D82E7E4-CDEE-4894-92C2-A3E605D4F84E" codebase="Bin/ComAxCtrl.ocx"  style="1px; height:1px;"></object>
  
     
                                          
                      
     <input type="hidden" id="fingerAGM" value="" />
<button onclick="">读取数据</button>
<textarea rows="20" cols="50" id="info"></textarea>
    
</body>
</html>

  

原文地址:https://www.cnblogs.com/Vinkong/p/10826855.html