UWB人员定位 UDP协议位置报文display解析示例java代码

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、是数据处理层(主要包括服务器和定位平台软件)组成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值