• 物联网浏览器(IoTBrowser)-Java快速对接施耐德网络IO网关


     

    前一段时间有个Java技术栈的朋友联系到我,需要快速对接现有的无人值守称重系统,这里的对接是指替代现有系统,而非软件层面的对接,也就是利用现有的硬件开发一套替代现有软件的自动化系统。主要设备包括地磅秤、道闸、红外对射传感器、摄像头、小票打印、LED显示屏等等,全程使用LED显示屏提示人员当前的操作状态。

     

     

    业务流程:

    ①摄像头识别车牌号

    ②开启前入磅道闸

    ③红外监测是否抵达称重区域

    ④采集地磅重量,自动判断仪表读数稳定

    ⑤摄像头抓拍现场图像,同时并发采集多路摄像头形成现场档案

    ⑥数据打包上传到MES系统

    ⑦打印小票

    ⑧开启后出磅道闸

    这位同学基于java技术栈研究了一段时间进展较慢,应该是通过园子联系到我。我们简单沟通了一下,确定使用IoTBrowser来开发,虽然前期没有界面的展示需求,但是保留了UI控制的扩展性,最主要是用html+js开发起来简单、高效。我这边提供硬件层的驱动和js接口,他来实现上层业务逻辑控制。

    因为目前项目处于前期技术验证阶段,所以前期拿了2款硬件进行测试。第一款是地磅秤,据了解地磅秤仪表使用耀华A9,IoTBrowser已经自带实现,js示例也提供了不需要二次开发。第二个就是控制道闸的开启与关闭,这个还没有实现,所以重点就是打通这个设备。

    要进行硬件对接首先要知道对接的接口形式和数据协议,通过以下三步:

    第一步,找到设备的品牌和型号;

    第二步,快速在官网找到说明书,通过了解这块设备是施耐德品牌C2000型号,一款以太网型开关量模块,向下使用RS485接入道闸的串口,向上提供Modbus-TCP协议可以远程控制。

    第三步,通过说明书找到具体的控制协议,然鹅Modbus协议是使用原始的16进制描述,并没有线圈相关的介绍。

     

    找到了对应的协议,下一步就算摞起袖子开工。因为对方在宁夏而我在长沙,需要代码开发调试不可能在对方机器上安装一套VS开发工具再远程到他电脑,这样很不方便,所以使用代理软件将设备的Modbus端口临时转发出来,这样跨越千里通过网络就可以在异地联调设备。

    经过几个小时的摸索,成功实现了设备的开启和关闭。中间过程还算顺利,就是使用NModbus时是使用的Int参数需要进行进制转换,这里浪费了一点时间。

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    // 开关控制
    function open(address, startAddress, value) {
        var $msgWrite = $('#msgWrite');
        dds.iot.com.exeCommand({ id: wid, name: "WriteSingleCoil", data: { slaveAddress: address, startAddress: startAddress, value: value } }, function (ar) {
            if (ar.Success) {
                $msgWrite.text('操作成功')
            } else {
                $msgWrite.text('操作失败:' + ar.Message)
            }
        })
    }
    //开关状态读取
    function readStatus(address, startAddress, num) {
        dds.iot.com.exeCommand({ id: wid, name: "ReadCoils", data: { slaveAddress: address, startAddress: startAddress, numberOfPoints: num } }, function (ar) {
            if (ar.Success) {
                $msg.text('数据:' + ar.Data)
            } else {
                $msg.text('操作失败:' + ar.Message)
            }
        })
    }
     
    // 启动称重采集服务
    function startWeight() {
        var $weight = $("#weight");
     
        var type = 'test';// 修改为实际型号
        //var type = 'yh_a9';// 耀华XK3190-A9:yh_a9
     
        var port = 1;
        var baudRate = 9600;
        // 调用电子秤
        dds.iot.weight.start({
            type: type,
            port: port,
            baudRate: baudRate,
            onUpdateWeight: function (data) {
                // 重量回调事件
                $weight.html(data.weight);
                console.log('最新重量:'+ data.weight)
            },
            complete: function (ar) {
                if (!ar.Success) {
                    alert(ar.Message);
                }
            }
        })
    }

      

    上层封装了js和简单的UI参考示例,我这边的工作就顺利交付了。

     

    IoTBrowser平台开源地址:https://gitee.com/yizhuqing/IoTBrowser/

     

  • 相关阅读:
    SQL binary 轉float 絕對好用
    64位操作系统注册ocx控件失败,提示:模块加载失败请确保该二进制存储在指定路径中。
    计算机毕业设计springboot+vue+elementUI校园疫情防控系统
    Shell 数组遍历的3种方法
    Web前端入门(十四)元素显示模式
    uniapp使用技巧及例子
    java日志框架之Log4j
    Java I/O模型发展以及Netty网络模型的设计思想
    某瑞集团安全技术研发岗位面试
    微信小程序-蓝牙功能
  • 原文地址:https://www.cnblogs.com/yizhuqing/p/18135155