Java 通过 socket 和 DTU,RTU 连接工业传感器通信
现在做 DTU 传感器监测数据一块,给大家分享如何通过 socket 技术连接到 DTU,并能和 DTU 下面的传感器通信的,分享一下自己的心得和体会。
总体架构图
先来看下整体网络结构图。
工业名称解释
传感器:能够采集数据机器,电脑端通过下发指令通过 DTU 发给传感器,传感器通过 DTU 返回相应的数据给电脑端,比如雨量计能实时反馈雨量,这很好理解。
RTU:远程传输单元,可以是一台 plc(程序过程控制),通俗理解就是能够编程的还可以将数据传输服务器的工具。RTU 内部是包含通讯模块的,RTU 仪表配置服务器后,他可以通过 socket 将采集器的数据转发到服务器。咦?你刚才不讲说的 DTU 吗?现在怎么是 DTU 了,接下来我们看看。
DTU:数据传输单元,他主要的功能是能将 IP 数据和串口数据进行等价转化。对比上面 RTU 的功能,如果说 RTU 能进行数据处理和数据传输,那么 DTU 就只能进行数据传输了。像 DTU 因为没有任何的数据处理动作,所以一般业界叫“透传”即透明传输。所以 RTU 的价格一般比 DTU 贵很多,因为有软件编程的成本。
RS485:RS485 是一个物理接口,DTU 和传感器就是通过 RS485 接口进行连接的。
Modbus 协议:标准的串行工业协议。可以支持 RS485,RS232 接口。那既然是协议,就需要遵循一定的规范,举个简单的例子,读取雨量计的命令是 16 进制的 0E04000000027134
那么 0E 04 00 00 00 02 71 34 分别对应的该传感器的通信 id,功能码等。如下图,这是一串指令,能够读取雨量的具体数据。
网络:DTU 可以配置服务器,通过 socket 技术通信。
服务器:服务器解析数据并存入数据库。
当然,雨量传感器也能返回一串标准 16 进制数据 DTU,0E0404326640BCDA52,具体解析格式如下,如果返回正确我们需要读取 5,6 字节进行解析。
这个是我任意举的一个案例,是为了更好说明 Modbus 协议的。只要支持能 modbus 的传感器都类似,需要我们对照具体的传感器通讯协议文档进行转化解析,一般都会有说明。
思路整理
楼主在刚开始接到任务不理解这些工业,接口,协议的概念,走了一些弯路。因为我们项目是需要从 RTU 换成 DTU 做数据采集的,已有项目 RTU 是能够主动推送数据到服务器的,当时比较困惑有几个点,顺便整理下思路。
DTU 能够主动推送数据给你吗?如果不能,我需要如何做?
不能,DTU 既然是透传的,说明我们需要通过 DTU 给传感器下发指令。‘
发什么指令?
这里的指令就是 modbus 指令,上面有类似指令说明,指令需要到相应的传感器通信协议去获取,一般都有说明,如果是新手,就找传感器厂家支持下,顺便说一句,他们都是搞硬件的,软件他们可能也不太清楚,这个时候就需要你的正确方向的判断了。
如何下发指令?如何调试下发指令正确性?
我因为当时是新手,我只懂程序,调试都是通过自己写的程序调试的,一直执行程序没有调试出来,最终才知道 usb 连接串口转 485 工具再直接连接传感器,通过串口工具就可以直接发送命令,返回对应的数据,一目了然,串口工具我用的是 sscom。这个问题给我的感触很深,可以先不写代码,直接先在工具上分析结果。我主要用的是下面这三个工具。
如何打通 socket 和 DTU 连接的传感器?
最后一步就比较简单了,通过 socket,拿到二进制数据后直接转 16 进制进行解析得到结果,我贴部分代码。
结尾
好的,今天就到这里,希望这边文章能对您有所帮助,有不懂的地方可以给博主留言哦,分享让我们共同成长,喜欢的请点赞加关注哦。点关注,不迷路,我是【叫练】公众号,微信号【jiaolian123abc】边叫边练。
版权声明: 本文为 InfoQ 作者【叫练】的原创文章。
原文链接:【http://xie.infoq.cn/article/2792da79667a8ff2469c68240】。文章转载请联系作者。
评论