java通过dtu通讯进行modbus数据交换

本文介绍了使用Java通过DTU进行Modbus数据交换,实现气体检测设备(如氧气、硫化氢、一氧化碳等)与服务器的实时通信。主要步骤包括服务器发送指令,DTU转发至设备,设备回传数据,服务器解析16进制数据。通过Socket通信解决了指令传递和数据接收的问题。
摘要由CSDN通过智能技术生成

java通过dtu进行modbus数据交换
项目场景需求:
一个气体检测设备需要将显示屏上检测到的四种气体(氧气、硫化氢、氧气、一氧化碳)传输到服务器端,并且实现气体的实时检测及其数据保存。
实现思路:
(1)服务器端发送java指令透过dtu协议
(2)设备端会根据发送的指令回传相应的气体数据信息
(3)服务端对获取到的数据按照modbus的数据解析格式进行解析,从而得到相应的数据具体值
实现部分代码:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ServerTCP {

	public static ServerSocket ss;
	
	public static void main(String[] args) throws IOException {
		
		ss =new ServerSocket(9002);
		Socket socket=null;
		byte[] sendinfoH2S=new byte[]{0x01,0x03,0x1B,0x58,0x00,0x10,(byte)0xC3,0x31};
socket =ss.accept();
		InputStream is=socket.getInputStream();
	    OutputStream os=socket.getOutputStream();
	    os.write(sendinfoH2S);     
	    byte[] bs= new byte[37];
	    System.out.println("芬芬:"+is.read(bs)+";长度"+bs.length);
	    is.read(bs);
	    String result="";
	    for(int i=0;i<bs.length;i++){
	         result+=Integer.toString((bs[i] & 0xff)+0x100,16).substring(1);
	     }
	    Float value = Float.intBitsToFloat(Integer.valueOf(result.substring(54,62).trim(), 16));
	    is.close();
	    os.close();
		}
}

项目开发问题:
(1)不清楚怎么将服务端的指令发送给硬件设备
(2)不清楚怎么将指令发给dtu又到了硬件设备,设备给回传数据
以上两个问题困扰了好几天,最终明白服务端发送指令可以直接透过dtu传给设备,设备收到后就会根据指令回复数据。其实就是Socket通信可以解决的,也知道了TCP网络助手开发原理。一刹那间,看到传回来的16进制数据,顿时非常开心。

注:以上仅是自己项目开发中解决问题后的心得体会,希望可以帮助到大家哦!
————————————————
版权声明:本文为CSDN博主「加瓦程序设计师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lf21qp/article/details/112207083

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值