package Jiexi;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**UDP接收解析display位置报文示例代码
* @author 北京华星智控
* 不同于TCP的三次握手建立连接、四次挥手释放连接,UDP协议的通信双方随时可以互相发送数据
* UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。
* */
public class Dell_display implements Runnable {
//UDP套接字
static DatagramSocket socket;
//UDP报文接收端口,根据自己的实际需要修改数据监听端口
int port=8000;
//数据包
DatagramPacket packet;
public Dell_display() throws NumberFormatException, IOException{
socket = new DatagramSocket(port);
byte[] data = new byte[1024]; // 创建byte数组
packet= new DatagramPacket(data, data.length);
}
/**启动线程的方法*/
public void startThread() {
Thread t=new Thread(this);
t.start();
}
/**while循环接收报文数据*/
public void run() {
while(true) {
try {
// 接收数据包
socket.receive(packet);
//接收到的数据长度
int lenth=packet.getLength();
//获取发送端的IP地址对象
String ip=packet.getAddress().getHostAddress();
//发送端的发送端口
int port=packet.getPort();
//接收到的数据内容
String message=new String(packet.getData(), 0, lenth);
//如果数据是display开头的则处理
if(message.startsWith("display")) {
//调用处理报文方法
dell_display(ip, port,message);
}
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
}
/**处理display开头的报文数据方法
* @param ip地址
* @param port接收端口
* @param message报文内容
* 标签实时位置display UWB标签上传的位置报文
* display,[lenth],[tagid],[baoxu],[timestamp],[layer],[x],[y],[z], [vbat],[state],[sos],[mark]
* 示例:
* display,68,0001,32697,2021-09-02 15:06:12.353,0,637,213,150,23,1,0,1
* display,68,0001,32699,2021-09-02 15:06:12.480,0,637,214,150,23,1,0,1
* 报文说明:
* 1 display:包头
* 2 [length]:报文长度
* 3 [tagid] :标签的ID号,唯一编号
* 4 [baoxu] :包序(0~65535循环)
* 5 [timestamp] :时间戳(这条报文发出的时间)
* 6 [layer] :标签所在的层
* 7 [x] :标签的X坐标,单位厘米
* 8 [y] :标签的Y坐标,单位厘米
* 9 [z] :标签的Z坐标,单位厘米
* 10 [vbat] :标签的电量信息,(0~100)
* 11 [state] :标签的状态,静止为1,运动为0
* 12 [sos] :标签的SOS按键状态,按下为1,没有按下为0
* 13 [mark] :标志位,区别从哪个引擎上传数据,适用于多个项目传入一个平台,默认为0
* */
@SuppressWarnings("unused")
public static void dell_display(String ip,int port,String message) {
String[] dis=message.split(",");//用英文逗号分割字符串
String start=dis[0];//报文头
String lenth=dis[1];//报文长度
String tagid=dis[2];//标签ID
String baoxu=dis[3];//包序
String timestamp=dis[4];//时间戳
String floor=dis[5];//标签所在的层
String posx=dis[6];//标签的X坐标
String posy=dis[7];//标签的y坐标
String posz=dis[8];//标签的z坐标
String vbat=dis[9];//标签的电量
String state=dis[10];//标签状态IMU传感器状态,静止为1,运动为0
String sos=dis[11];//标签的SOS按键状态,按下为1,没有按下为0
String mark=dis[12];//标志位,区别从哪个引擎上传数据,适用于多个项目传入一个平台,默认为0
//调用你的程序处理方法
do_your_method(
tagid,
timestamp,
floor,
posx,
posy,
posz,
vbat,
state,
sos,
mark
);
}
/**你自己的处理方法*/
public static void do_your_method(
String tagid,
String timestamp,
String floor,
String posx,
String posy,
String posz,
String vbat,
String state,
String sos,
String mark
) {
//你的程序内容
}
}
UWBLOC定位系统,采用无线脉冲技术,实现对工业厂区人员、物资、车辆实现精准的定位,定位精度优于30厘米,通过在定位现场布设定位基站,需要被定位的目标对象佩戴定位标签,从而实现对目标对象的实时精确定位,基于此可以拓展各种功能,实现对人员、物资、车辆的智慧管控,实现丰富的功能应用。
整个定位系统由3部分组成,1、是数据采集层(包括定位标签和定位基站);2、数据传输层;3、是数据处理层(主要包括服务器和定位平台软件)组成。