前一段时间有个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/

物联网浏览器(IoTBrowser)-Java快速对接施耐德网络IO网关的更多相关文章

  1. 黑马程序员:Java基础总结----GUI&网络&IO综合开发

    黑马程序员:Java基础总结 GUI&网络&IO综合开发   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络架构 C/S:Client/Server ...

  2. 【Java大系】Java快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品.James Gosling领 ...

  3. java快速学习

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品 ...

  4. Java快速教程

    作者:Vamei     出处:http://www.cnblogs.com/vamei Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品.James Gosling ...

  5. [转] Java快速教程

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品 ...

  6. Java快速入门-03-小知识汇总篇(全)

    Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...

  7. JEECG 4.0 版本发布,JAVA快速开发平台

    JEECG 4.0 版本发布,系统全面优化升级,更快,更稳定!         导读                               ⊙平台性能优化,系统更稳定,速度闪电般提升      ...

  8. iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  9. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  10. JEECG 3.7.1 版本发布,企业级JAVA快速开发平台

    JEECG 3.7.1 版本发布,企业级JAVA快速开发平台 ---------------------------------------- Version:  Jeecg_3.7.1项 目:   ...

随机推荐

  1. 【2024面试刷题】一、Spring Cloud 面试题

    1.什么是 Spring Cloud? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册.配置中心.智能路 ...

  2. PaddleOCR 服务化部署(基于PaddleHub Serving)

    最近用到百度飞桨的 PaddleOCR,研究了一下PaddleOCR的服务化部署,简单记录一些部署过程和碰到的问题. 基础环境 paddlepaddle 2.5.2 python 3.7 paddle ...

  3. vscode 切换页签快捷键 自定义 Ctrl+H Ctrl+L 左右切换

    今天需要整理写资料,需要在多个页签之间切换,发现自定义了快捷. 好久不用这个快捷键,都快忘了. vscode 切换页签快捷键 自定义 Ctrl+H Ctrl+L 左右切换

  4. Kotlin学习快速入门(11)—— 枚举类的使用

    原文地址:Kotlin学习快速入门(11)-- 枚举类的使用 - Stars-One的杂货小窝 由于有时候偶尔用到枚举类,所以简单记录一下,和Java的一起对比记录 下面以一个简单的四季设计一个枚举类 ...

  5. 面试官:volatile如何保证可见性的,具体如何实现?

    写在开头 在之前的几篇博文中,我们都提到了 volatile 关键字,这个单词中文释义为:不稳定的,易挥发的,在Java中代表变量修饰符,用来修饰会被不同线程访问和修改的变量,对于方法,代码块,方法参 ...

  6. KingbaseES V8R6运维案例之---pg_statistic toast表故障修复

    ​ 案例说明: 数据库在日常的维护过程中,执行表结构查询语句(\d t1),如下图所示,出现"missing chunk number 0 for toast value 16259 in ...

  7. SQL日期操作函数(CONCAT、DATE_FORMAT、LAST_DAY)

    获取某月底日期:SELECT LAST_DAY('2021-07-01') AS month_end_date; 拼接年月格式: CONCAT(DATE_FORMAT(hp.planned_payme ...

  8. #分治 or 线段树+单调栈#CF526F Pudding Monsters

    题目 给定一个 \(n \times n\) 的棋盘,其中有 \(n\) 个棋子,每行每列恰好有一个棋子. 求有多少个 \(k \times k\) 的子棋盘中恰好有 \(k\) 个棋子. 分析 先将 ...

  9. #Raney引理,圆排列#洛谷 6672 [清华集训2016] 你的生命已如风中残烛

    题目 分析 转化一下条件,就是 \(\sum{w_i}\geq i\),将所有牌权值减一,那就是 \(\sum{w'_i}\geq 0\) 根据Raney引理,总和为 1 的数列,在循环移位时,只有一 ...

  10. #SG函数,记忆化搜索#HDU 4111 Alice and Bob

    题目 Alice和Bob两个好朋友又开始玩取石子了. 游戏开始时,有\(n\)堆石子排成一排,然后他们轮流操作(Alice先手),每次操作时从下面的规则中任选一个: ·从某堆石子中取走一个 ·合并任意 ...