现在做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是能够主动推送数据到服务器的,当时比较困惑有几个点,顺便整理下思路。

  1. DTU能够主动推送数据给你吗?如果不能,我需要如何做?

不能,DTU既然是透传的,说明我们需要通过DTU给传感器下发指令。‘

  1. 发什么指令?

这里的指令就是modbus指令,上面有类似指令说明,指令需要到相应的传感器通信协议去获取,一般都有说明,如果是新手,就找传感器厂家支持下,顺便说一句,他们都是搞硬件的,软件他们可能也不太清楚,这个时候就需要你的正确方向的判断了。

  1. 如何下发指令?如何调试下发指令正确性?

我因为当时是新手,我只懂程序,调试都是通过自己写的程序调试的,一直执行程序没有调试出来,最终才知道usb连接串口转485工具再直接连接传感器,通过串口工具就可以直接发送命令,返回对应的数据,一目了然,串口工具我用的是sscom。这个问题给我的感触很深,可以先不写代码,直接先在工具上分析结果。我主要用的是下面这三个工具。

  1. 如何打通socket和DTU连接的传感器?

最后一步就比较简单了,通过socket,拿到二进制数据后直接转16进制进行解析得到结果,我贴部分代码。

结尾


好的,今天就到这里,希望这边文章能对您有所帮助,有不懂的地方可以给博主留言哦,分享让我们共同成长,喜欢的请点赞加关注哦。点关注,不迷路,我是【叫练公众号,微信号【jiaolian123abc】边叫边练。

Java通过socket和DTU,RTU连接工业传感器通信的更多相关文章

  1. Java nio socket与as3 socket(粘包解码)连接的应用实例

    对Java nio socket与as3 socket连接的简单应用 <ignore_js_op>Java nio socket与as3 socket连接的应用实例.rar (9.61 K ...

  2. Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端

    最近在试着用java写一个socket的服务器,用python写一个socket的客户端来完成二者之间的通信,但是发现存在一个问题,服务器方面就卡在读取inputsream的地方不动了,导致后面的代码 ...

  3. 【JAVA】Socket 编程

    对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...

  4. java基于socket公共聊天室的实现

    项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...

  5. JAVA之Socket编程

    网上对Socket的诠释很多,也很全,在这里我就不多说了,总之,现在的网络处处都在使用Socket.本帖是一个Socket的例子,用来模拟一个简单的登录系统,只有核心代码,访问数据库.输入神马的统统没 ...

  6. 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中

    业务需求说明,由于公司数据中心处于刚开始部署的阶段,这需要涉及其它部分将数据全部汇总到数据中心,这实现的方式是同上传json文件,通过采用socket&serversocket实现传输. 其中 ...

  7. 【转】java的socket编程

    转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...

  8. 基于java的socket编程

    #开头的废话#学习java已经半个月了,原本在抠教材里面的字眼时,觉得教材好厚,要看完不知道要到猴年马月去了.突然在网上看到一个教程,里面老师说学编程语言书不用太细看,看个大概,知道里面讲些什么就好, ...

  9. Java实现Socket之WhoisClient

    Java实现Socket之WhoisClient 代码内容 从常用的whois服务器的43号端口得到对应域名的所有注册信息并显示出来 代码实现 /* WhoisClient.java */ impor ...

随机推荐

  1. 实例说明C++的virtual function的作用以及内部工作机制初探

    C++为何要引入virtual function? 来看一个基类的实现: 1 class CBase 2 { 3 public: 4 CBase(int id) : m_nId(id), m_pBas ...

  2. APP 兼容性测试之云测平台体验

    前言 兼容性测试主要通过人工或自动化的方式,在需要覆盖的终端设备上进行功能用例执行,查看软件性能.稳定性等是否正常. 对于需要覆盖的终端设备,大型互联网公司,像BAT,基本都有自己的测试实验室,拥有大 ...

  3. MySQL大数据迁移备份

    MySQL迁移通常使用的有三种方法:   1.数据库直接导出,拷贝文件到新服务器,在新服务器上导入. 2.使用第三方迁移工具. 3.数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL ...

  4. .Net Core 中的选项Options

    .NetCore的配置选项建议结合在一起学习,不了解.NetCore 配置Configuration的同学可以看下我的上一篇文章 [.Net Core配置Configuration源码研究] 由代码开 ...

  5. 自己写一个Map

    Map的实现其实很简单,一个key对应一个value就行 . 本Map是写着玩的,是想告诉初学者我们也可以写一个简单的Map来自己用 代码: public class MyMap<K, V> ...

  6. Flask(3)- Flask 中的 HTTP 方法

    查看 app.route() 源代码 def route(self, rule: str, **options: t.Any) -> t.Callable: """ ...

  7. 针对Autocad 2014 第二次安装不上的问题

    针对Autocad 2014 第二次安装不上的问题 1. 以下为卸载过程,不用管. 2. 卸载完之后,右击"开始",点击"运行",得到下图:   并输入:&qu ...

  8. CommonsCollections3 反序列化利用链分析

    InstantiateTransformer commons-collections 3.1 中有 InstantiateTransformer 这么一个类,这个类也实现了 Transformer的t ...

  9. PyTorch学习笔记6--案例2:PyTorch神经网络(MNIST CNN)

    上一节中,我们使用autograd的包来定义模型并求导.本节中,我们将使用torch.nn包来构建神经网络. 一个nn.Module包含各个层和一个forward(input)方法,该方法返回outp ...

  10. 自制计算器 v1.1

    之前的v1.0版本功能还不够完善,这个版本一并做了修改. 代码,每个sub表示哪个按钮做了注释. Dim a, temp, ans As Integer Dim op As String Sub sh ...