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

java通过dtu进行modbus数据交换

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

import java.io.IOException;
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进制数据,顿时非常开心。

注:以上仅是自己项目开发中解决问题后的心得体会,希望可以帮助到大家哦!

你可能感兴趣的:(modbus,网络编程,java)