记录协助Javaer硬件快速开发过程之Web技术栈对接施耐德网络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参数需要进行进制转换,这里浪费了一点时间。


// 开关控制
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网关的更多相关文章
- java生态下的后端开发都有哪些技术栈?
前言 我08年毕业,那时(2003-2010)C#还比较时髦的,大学跟着老师进修的,毕业后就从事winform窗体应用程序开发.慢慢的web网站兴起,就转到aps.net开发,再到后来就上了另一艘船( ...
- go语言开发教程之web项目开发实战
Golang介绍Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件 ...
- 使用 IDEA + Maven + Git 快速开发 JAVA或者Web 应用(转)
0-0 前言 最近和同事做爬虫,其中我主要遇到的问题是:同事在github上放了爬虫demo让我自己去下载,然后自己能搭好环境让整个项目跑起来去抓51job找工作数据.git上克隆一个项目下来,项目是 ...
- springboot快速开发(简单web)
这是一个springboot基础配置文件介绍的demo.只涉及到 控制层与前端的简单交互,用于验证代码的畅通. spring-boot pom.xml解释 <?xml version=&quo ...
- VueJS开发所用到的技术栈
1. 主要使用vue.js2. 使用vue-cli脚手架搭建项目3. 使用vue-router来做路由,实现单页面跳转4. 使用iView UI作为前端UI框架,Mouse UI作为手机端UI框架5. ...
- web技术栈开发原生应用-多端共用一套代码
weex: vuejs开发原生应用 nativescript: vuejs开发原生应用 ReactNative = reactjs开发原生应用 ionic = angularjs 开发原生应用
- H5页面开发笔记(react技术栈)
1.子组件接收父组件的参数,要在子组件的componentDidMount函数中更改当前组件的state,若写在componentWillMount函数中,则会导致初始化界面UI的时候不能得到预期的效 ...
- 10个Spring Boot快速开发的项目,接私活利器(快速、高效)
本文为大家精选了 码云 上优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等,希望能够给大家带来一点帮助:) 1.项目名称:分布式 ...
- Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开发脚手架
平台简介 AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用.本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架. 适合个人开发者的小型项目或者公司内部 ...
- Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用
前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...
随机推荐
- Springboot 撞上 NebulaGraph——NGbatis 初体验
本文首发于 NebulaGraph 公众号 https://mp.weixin.qq.com/s/z56o6AEz1Z4RmS8Zdx6dTA 大家好,我是开源项目 NGbatis 的发起人大叶(Co ...
- 机器学习可解释性--LIME
A Unified Approach to Interpreting Model Predictions trusting a prediction or trusting a model 如果⼀个机 ...
- Glide源码解析三(注册组件)
转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12900387.html Glide源码解析一,初始化 Glide源码解析二-into方法 Glide源 ...
- spark读取和处理zip、gzip、excel、等各种文件最全的技巧总结
一.当后缀名为zip.gzip,spark可以自动处理和读取 1.spark非常智能,如果一批压缩的zip和gzip文件,并且里面为一堆text文件时,可以用如下方式读取或者获取读取后的schema ...
- 这波操作看麻了!十亿行数据,从71s到1.7s的优化之路。
你好呀,我是歪歪. 春节期间关注到了一个关于 Java 方面的比赛,很有意思.由于是开源的,我把项目拉下来试图学(白)习(嫖)别人的做题思路,在这期间一度让我产生了一个自我怀疑: 他们写的 Java ...
- Java 对属性赋值的位置 执行的先后顺序
1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 对属性赋值的位置: 6 * @author Bytezero·zhenglei! ...
- GitHUb上渗透测试工具
来自GitHub的系列渗透测试工具渗透测试 Kali - GNU / Linux发行版,专为数字取证和渗透测试而设计.(https://www.kali.org/)ArchStrike - 为安全专业 ...
- netcore linux ffmpeg 首帧图
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-r ...
- gcc编译stm32 f103出现错误init.c:(.text.__libc_init_array+0x20): undefined reference to `_init'
解决方法: 方法一:去掉makefile中的编译选项:-nostartfiles 方法二:方法一不凑效的情况下,添加编译选型:--specs=nano.specs
- jenkins安装和基本使用
参考:https://zhuanlan.zhihu.com/p/56037782(安装) https://gitee.com/oschina/Gitee-Jenkins-Plugin/(使用) htt ...