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

业务流程:

①摄像头识别车牌号

②开启前入磅道闸

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

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

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

⑥数据打包上传到MES系统

⑦打印小票

⑧开启后出磅道闸

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

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

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

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

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

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

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

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

 

        // 开关控制
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/

记录协助Javaer硬件快速开发过程之Web技术栈对接施耐德网络IO网关的更多相关文章

  1. java生态下的后端开发都有哪些技术栈?

    前言 我08年毕业,那时(2003-2010)C#还比较时髦的,大学跟着老师进修的,毕业后就从事winform窗体应用程序开发.慢慢的web网站兴起,就转到aps.net开发,再到后来就上了另一艘船( ...

  2. go语言开发教程之web项目开发实战

    Golang介绍Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件 ...

  3. 使用 IDEA + Maven + Git 快速开发 JAVA或者Web 应用(转)

    0-0 前言 最近和同事做爬虫,其中我主要遇到的问题是:同事在github上放了爬虫demo让我自己去下载,然后自己能搭好环境让整个项目跑起来去抓51job找工作数据.git上克隆一个项目下来,项目是 ...

  4. springboot快速开发(简单web)

    这是一个springboot基础配置文件介绍的demo.只涉及到 控制层与前端的简单交互,用于验证代码的畅通. spring-boot  pom.xml解释 <?xml version=&quo ...

  5. VueJS开发所用到的技术栈

    1. 主要使用vue.js2. 使用vue-cli脚手架搭建项目3. 使用vue-router来做路由,实现单页面跳转4. 使用iView UI作为前端UI框架,Mouse UI作为手机端UI框架5. ...

  6. web技术栈开发原生应用-多端共用一套代码

    weex: vuejs开发原生应用 nativescript: vuejs开发原生应用 ReactNative = reactjs开发原生应用 ionic = angularjs 开发原生应用

  7. H5页面开发笔记(react技术栈)

    1.子组件接收父组件的参数,要在子组件的componentDidMount函数中更改当前组件的state,若写在componentWillMount函数中,则会导致初始化界面UI的时候不能得到预期的效 ...

  8. 10个Spring Boot快速开发的项目,接私活利器(快速、高效)

    本文为大家精选了 码云 上优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等,希望能够给大家带来一点帮助:) 1.项目名称:分布式 ...

  9. Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开发脚手架

    平台简介 AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用.本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架. 适合个人开发者的小型项目或者公司内部 ...

  10. Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用

    前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...

随机推荐

  1. Jmeter 之 forEach控制器

    1 添加方法: 线程组右键-> 添加 -> 逻辑控制器 ->ForEach控制器   2 作用: 可以更方便JMeter后置处理器提取出来的多组数据,也可以定义具有特定规则的数据,用 ...

  2. netcore linux ffmpeg 首帧图

    第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-r ...

  3. C++实现一个简单的生产者-消费者队列

    本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下: 设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量 可能第一次生成的不一定合适,多刷新几次. 生 ...

  4. ijkplayer编译-RTSP

    1.编译平台和版本 使用操作系统 Ubuntu 18.04 使用ndk版本:android-ndk-r14b-linux-x86_64.zip (使用r17c编译会报错) AS版本:4.2.2 1.1 ...

  5. 全国标杆!3DCAT实时云渲染助力深圳移动5G+智慧校园建设

    2023年2月27日,中国移动在陕西西安召开全国教育行业全年工作部署暨电子学生证专项调度会,来自全国各地的移动分公司.专家.合作伙伴等参加了会议.瑞云科技旗下3DCAT实时渲染云作为中国移动的重要合作 ...

  6. protected和private继承方式的不同

    环境:QT 5.12 继承方式规定了子类如何访问从基类继承的成员.继承方式有public.protected.private三种.继承方式不影响派生类的访问权限,影响了从基类继承而来的成员的访问权限, ...

  7. 这里有你不得不了解的Java 11版本特性说明

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. QT实现参数批量配置

    QT实现批量配置 需求 一些参数需要批量化配置 之前搭建的FPGA的寄存器控制模型 使用AXI-lite搭建 直接操作上位机 这里需要一个可以快速配置所有参数的上位机 需要保存文件,可以保留上一次的参 ...

  9. TCL基本语法2

    TCL基本语法2 1.format和scan 两个基本的函数,和C语言中的sprintf和scanf的作用基本相同.format将不同类型的数据压缩在字符串中,scan将字符串中的数据提取出来. se ...

  10. c语言的printf常用的一些转换说明符及其含义

    整数类型: %d: 十进制整数 (decimal: 十进制的) %u: 无符号整数 (unsigned: 无符号的) %i: 十进制整数 (integer: 整数) %o: 八进制数 (octal: ...