html页面自己写js脚本收发数据,支持串口和TCP通讯(三)串口快捷命令列表

9 篇文章 0 订阅
7 篇文章 1 订阅

有时候我们需要一组常用的命令,然后按顺序发。
比如常见的AT指令。

效果

在这里插入图片描述

编辑命令

    var data = {
        cmdList: [
            { "id": 0, "cmdText": "00", cmdName: "在代码中改名称", hex: true,  },
            { "id": 1, "cmdText": "11", cmdName: "cmd2", hex: true , },
            { "id": 2, "cmdText": "22", cmdName: "cmd3", hex: true , },
            { "id": 3, "cmdText": "33", cmdName: "cmd4", hex: true , },
        ]
    };

在代码中修改相应的列表即可。
id为序号,目前没有用。
cmdText为发送命令的内容
cmdName为命令的名称
hex true表示是hex命令,false表示不是。

组合发命令12

比如有时候要组合三个命令一块发,
先发2,再发1,再发3,这时可以这样处理

    function sendCmdList2() {
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");
            await CefSharp.BindObjectAsync("systemHelper");

            //按此顺序发送命令,修改顺序修改此数组即可
            var sendIndex = [2, 0, 1];
            for (var i = 0; i < sendIndex.length; i++) {
                var index = sendIndex[i];

                await systemHelper.sleep(1000);
                await serialPortHelper.sendData(data.cmdList[index].cmdText);
            }
        })();
    }

注意sendIndex 的序号是从0开始的,第一个命令序号是0
await systemHelper.sleep(1000);表示每个命令停顿一秒,根据情况调整。

完整示例

<body>
    <div>串口测试</div>
    <input type="text" id="txtPort" style="width:50px;" value="COM2" />
    波特率:<input type="text" style="width:50px;" id="txtBaudRate" value="57600" />
    数据位:<input type="text" style="width:50px;" id="txtDataBits" value="8" />
    停止位:<input type="text" style="width:50px;" id="txtStopBits" value="1" />
    校验位:<input type="text" style="width:50px;" id="txtParity" value="0" />
    <ul id="ulCmdList" style="list-style-type: none;">
        <li></li>
    </ul>
    <button onclick="testOpen()">open</button>
    <button onclick="testClose()">close</button>
    <button onclick="sendData()">发送</button>
    <button onclick="recvData()">接收</button>
    <button onclick="startCyclicRecvData()">循环接收</button>
    <button onclick="stopCyclicRecvData()">取消循环接收</button>
    <button onclick="sendCmdList2()">发列表135项</button>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/art-template/4.13.2/lib/template-web.min.js"></script>
<script id="tpl-cmdList" type="text/html">
    <% for(var i = 0; i < cmdList.length; i++){ %>
    <li>  <%= i %>  <input type="text" style="width:500px;" readonly="readonly" value="<%= cmdList[i].cmdText %>" /><button onclick="sendCmdList(<%= i %>)"><%= cmdList[i].cmdName %></button></li>
    <% } %>
</script>
<script type="text/javascript">

    var cyclicTimeId;
    var data = {
        cmdList: [
            { "id": 0, "cmdText": "00", cmdName: "在代码中改名称", hex: true,  },
            { "id": 1, "cmdText": "11", cmdName: "cmd2", hex: true , },
            { "id": 2, "cmdText": "22", cmdName: "cmd3", hex: true , },
            { "id": 3, "cmdText": "33", cmdName: "cmd4", hex: true , },
        ]
    };

    (async function () {
        var html = template("tpl-cmdList", data);
        console.log(html);
        document.getElementById('ulCmdList').innerHTML = html;

        await CefSharp.BindObjectAsync("serialPortHelper");

        var portName = document.getElementById("txtPort").value;
        var baudRate = parseInt(document.getElementById("txtBaudRate").value);
        var dataBits = parseInt(document.getElementById("txtDataBits").value);
        var stopBits = parseInt(document.getElementById("txtStopBits").value);
        var parity = parseInt(document.getElementById("txtParity").value);
        await serialPortHelper.init(portName, baudRate, dataBits, stopBits, parity);


    })();

    function testOpen() {
        return (async function () {
            console.log('open');

            await CefSharp.BindObjectAsync("serialPortHelper");

            await serialPortHelper.open();
        })();
    }

    function testClose() {
        console.log('close');
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");

            await serialPortHelper.close();
        })();
    }

    function sendCmdList(index) {
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");

            await serialPortHelper.sendData(data.cmdList[index].cmdText);
        })();
    }

    function sendCmdList2() {
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");
            await CefSharp.BindObjectAsync("systemHelper");

            //按此顺序发送命令,修改顺序修改此数组即可
            var sendIndex = [2, 0, 1];
            for (var i = 0; i < sendIndex.length; i++) {
                var index = sendIndex[i];

                await systemHelper.sleep(1000);
                await serialPortHelper.sendData(data.cmdList[index].cmdText);
            }
        })();
    }


    function sendData() {
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");

            await serialPortHelper.sendData("313233");
        })();
    }

    function recvData() {
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");

            let recvString = await serialPortHelper.recvData();
            console.log('[' + recvString + ']');
        })();
    }

    function startCyclicRecvData() {
        cyclicRecvData();
    }

    function stopCyclicRecvData() {
        clearTimeout(cyclicTimeId);
    }

    function cyclicRecvData() {
        (async function () {
            await CefSharp.BindObjectAsync("serialPortHelper");

            let recvString = await serialPortHelper.recvData();
            console.log('-' + recvString + '-');
            if (recvString.trim() == '11') {
                console.log('ok');
                await serialPortHelper.sendData('22');
            }

            cyclicTimeId = setTimeout("cyclicRecvData()", 1000);
        })();
    }


</script>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏展翅888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值