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进制数据,顿时非常开心。
注:以上仅是自己项目开发中解决问题后的心得体会,希望可以帮助到大家哦!