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