From 992ec9bd29cb874777aac24b1e0a5e65e32e0a80 Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期六, 22 七月 2023 19:32:05 +0800
Subject: [PATCH] 新增解析AACC华测数据
---
bin/frame/Index1$3.class | 0
src/baowen/Dell_AACC.java | 139 +++++++++++++++++++++++++++++++++++++++++++---
src/frame/Index1.java | 10 ++-
3 files changed, 136 insertions(+), 13 deletions(-)
diff --git a/bin/frame/Index1$3.class b/bin/frame/Index1$3.class
index 169b65b..0a48982 100644
--- a/bin/frame/Index1$3.class
+++ b/bin/frame/Index1$3.class
Binary files differ
diff --git a/src/baowen/Dell_AACC.java b/src/baowen/Dell_AACC.java
index 50a5afc..de59d11 100644
--- a/src/baowen/Dell_AACC.java
+++ b/src/baowen/Dell_AACC.java
@@ -1,14 +1,11 @@
package baowen;
import java.math.BigInteger;
import java.nio.ByteBuffer;
-
import frame.Index1;
-import publicclass.GetNowTime;
import publicclass.JugeNumber;
public class Dell_AACC {
- static String time;
static String HC_header;
static String week;
static String second;
@@ -56,10 +53,10 @@
static String CRC32;
static int lenth;
static String mess;
+ private static String hexStr = "0123456789ABCDEF";
public static void dell_AACC(String message,String ip,int port) {
if(message.startsWith("AACC")) {
- time=GetNowTime.gethm();
String[] gnggns=message.split("AACC");
int size=gnggns.length;
if(size>2) {
@@ -95,17 +92,20 @@
yaw=hextofloat(yaw0);
stat=String.valueOf(decodeHEX(stat0));
age=hextofloat(age0);
- ns=String.valueOf(decodeHEX(ns0));
+ ns=String.valueOf(decodeHEX(ns0));
+ String stats=stat+":"+get_stat()+"-"+get_gnss_stat();
if(Index1.isShoware() ) {
if(Index1.getXieyi_type().equals("2")) {
- mess=time+",经度:"+lat+",纬度:"+lon+",高程:"+alt+",俯仰角:"+pitch
- +",横滚角:"+roll+",航向角:"+yaw+",状态:"+stat+",差分龄期:"+age+",卫星颗数:"+ns;
+ mess="经度:"+lat+",纬度:"+lon+",高程:"+alt+",俯仰角:"+pitch
+ +",横滚角:"+roll+",航向角:"+yaw+",状态:"+stats+",差分龄期:"+age+",卫星颗数:"+ns;
}else if(Index1.getXieyi_type().equals("1")) {
- mess=time+","+infom;
+ mess=infom;
}else if(Index1.getXieyi_type().equals("3")) {
- mess=time+",经度:"+lat0+",纬度:"+lon0+",高程:"+alt0+",俯仰角:"+pitch0
+ mess="经度:"+lat0+",纬度:"+lon0+",高程:"+alt0+",俯仰角:"+pitch0
+",横滚角:"+roll0+",航向角:"+yaw0+",状态:"+stat0+",差分龄期:"+age0+",卫星颗数:"+ns0;
+ }else if(Index1.getXieyi_type().equals("5")) {
+ mess="$GNGGAD,"+lat+","+lon;
}
Index1.ara_show(mess);
}
@@ -165,7 +165,128 @@
Float f = Float.intBitsToFloat(new BigInteger(hex, 16).intValue());
String a1=String.format("%.4f",f);
return a1;
+ }
+
+ /**
+ *
+ * @param str
+ * @return 转换为二进制字符串
+ */
+ public static String bytes2BinaryStr(byte[] bArray){
+
+ String outStr = "";
+ int pos = 0;
+ for(byte b:bArray){
+ //高四位
+ pos = (b&0xF0)>>4;
+ outStr+=binaryArray[pos];
+ //低四位
+ pos=b&0x0F;
+ outStr+=binaryArray[pos];
+ }
+ return outStr;
}
+ private static String[] binaryArray =
+ {"0000","0001","0010","0011",
+ "0100","0101","0110","0111",
+ "1000","1001","1010","1011",
+ "1100","1101","1110","1111"
+ };
+
+ /**
+ *
+ * @param hexString
+ * @return 将十六进制转换为字节数组
+ */
+ public static byte[] HexStringToBinary(String hexString){
+ //hexString的长度对2取整,作为bytes的长度
+ int len = hexString.length()/2;
+ byte[] bytes = new byte[len];
+ byte high = 0;//字节高四位
+ byte low = 0;//字节低四位
+
+ for(int i=0;i<len;i++){
+ //右移四位得到高位
+ high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);
+ low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));
+ bytes[i] = (byte) (high|low);//高地位做或运算
+ }
+ return bytes;
+ }
+
+ /**获取设备的状态
+ * 0:初始化;
+ * 1:卫导模式;
+ * 2:组合导航模式;
+ * 3:纯惯导模式
+ */
+ public static String get_stat() {
+ String hex=String.valueOf(stat);
+ String sta1="初始化";
+ String value=hex.substring(1,2);
+ switch(value){
+ case "1":
+ sta1="卫导模式";
+ break;
+ case "2":
+ sta1="组合导航模式";
+ break;
+ case "3":
+ sta1="纯惯导模式";
+ break;
+
+ }
+ return sta1;
+
+ }
+
+ /** GNSS状态:
+ * 0:不定位不定向;
+ * 1:单点定位定向;
+ * 2:伪距差分定位定向;
+ * 3:组合推算;
+ * 4:RTK 稳定解定位定向;
+ * 5:RTK浮点解定位定向;
+ * 6:单点定位不定向;
+ * 7:伪距差分定位不定向;
+ * 8:RTK稳定解定位不定向;
+ * 9:RTK浮点解定位不定向*/
+ public static String get_gnss_stat() {
+ String hex=String.valueOf(stat);
+ String sta1="不定位不定向";
+ String value=hex.substring(0,1);
+ switch(value){
+ case "1":
+ sta1="单点定位定向";
+ break;
+ case "2":
+ sta1="伪距差分定位定向";
+ break;
+ case "3":
+ sta1="组合推算";
+ break;
+ case "4":
+ sta1="RTK稳定解定位定向";
+ break;
+ case "5":
+ sta1="RTK浮点解定位定向";
+ break;
+ case "6":
+ sta1="单点定位不定向";
+ break;
+ case "7":
+ sta1="伪距差分定位不定向";
+ break;
+ case "8":
+ sta1="RTK稳定解定位不定向";
+ break;
+ case "9":
+ sta1="RTK浮点解定位不定向";
+ break;
+
+ }
+ return sta1;
+ }
}
diff --git a/src/frame/Index1.java b/src/frame/Index1.java
index 61a72da..6b2112c 100644
--- a/src/frame/Index1.java
+++ b/src/frame/Index1.java
@@ -84,7 +84,7 @@
static boolean start_jiexi=false;
static String tagid="0";
JComboBox<String> box=null;
- static String xieyi_type="1";//协议类型选择
+ static String xieyi_type="2";//协议类型选择
public Index1() {//构造方法
Toolkit toolkit = getToolkit();// 获得窗体工具包
@@ -366,7 +366,7 @@
}
public static void ara_show(String message) {
- are.append(GetNowTime.sss()+":"+message+"\n");
+ are.append(GetNowTime.sss()+","+message+"\n");
are.setCaretPosition(are.getText().length());
}
@@ -541,11 +541,11 @@
public JComboBox<String> getBox() {
if(box==null) {
box=new JComboBox<String>();
- String[] neixing= {"原始数据","解析后数据","HEX显示","ASCLL显示"};
+ String[] neixing= {"原始数据","解析后数据","HEX显示","ASCLL显示","定制格式"};
ComboBoxModel<String > coModel=new DefaultComboBoxModel<>(neixing);//下拉列表模型
box.setModel(coModel);
box.setBackground(Color.white);
- box.setSelectedIndex(2);
+ box.setSelectedIndex(1);
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(box.getSelectedIndex()==0) {
@@ -556,6 +556,8 @@
xieyi_type="3";
}else if(box.getSelectedIndex()==3) {
xieyi_type="4";
+ }else if(box.getSelectedIndex()==4) {
+ xieyi_type="5";
}
}
--
Gitblit v1.9.3