From 674747e1ccde2707bf4d4c02d52b7ef5af5a97dc Mon Sep 17 00:00:00 2001 From: 826220679@qq.com <826220679@qq.com> Date: 星期六, 22 七月 2023 14:25:36 +0800 Subject: [PATCH] 修改了解析 --- src/baowen/Dell_AACC.java | 171 ++++++++++++++++++++++++++++++++++++++++++ src/frame/Index1.java | 45 ++++++++++- 2 files changed, 211 insertions(+), 5 deletions(-) diff --git a/src/baowen/Dell_AACC.java b/src/baowen/Dell_AACC.java new file mode 100644 index 0000000..50a5afc --- /dev/null +++ b/src/baowen/Dell_AACC.java @@ -0,0 +1,171 @@ +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; + static String lat; + static String lon; + static String alt; + static String undulation; + static String ve; + static String vn; + static String vu; + static String pitch; + static String roll; + static String yaw; + static String std_lat; + static String std_lon; + static String std_alt; + static String std_ve; + static String std_vn; + static String std_vu; + static String std_pitch; + static String std_roll; + static String std_yaw; + static String vgyro_x; + static String vgyro_y; + static String vgyro_z; + static String vacccar_x; + static String vacccar_y; + static String vacccar_z; + static String speed; + static String heading; + static String heading2; + static String stat; + static String age; + static String ns; + static String ns2; + static String leaps; + static String hdop; + static String warning; + static String sensor_used; + static String vacc_x; + static String vacc_y; + static String vacc_z; + static String TimeValid; + static String receiver; + static String CRC32; + static int lenth; + static String mess; + + 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) { + for(int i=0;i<size;i++) { + if(gnggns[i].length()>5) { + jiexi_AACC("AACC"+gnggns[i],ip,port); + } + } + }else { + jiexi_AACC(message,ip,port); + } + } + } + + public static void jiexi_AACC(String infom,String ip,int port) { + String[] hex=hex(infom);//原始数据 + String lenth0=hex[5]+hex[4]; + String lat0=hex[39]+hex[38]+hex[37]+hex[36]+hex[35]+hex[34]+hex[33]+hex[32]; + String lon0=hex[47]+hex[46]+hex[45]+hex[44]+hex[43]+hex[42]+hex[41]+hex[40]; + String alt0=hex[51]+hex[50]+hex[49]+hex[48]; + String pitch0=hex[71]+hex[70]+hex[69]+hex[68]; + String roll0=hex[75]+hex[74]+hex[73]+hex[72]; + String yaw0=hex[79]+hex[78]+hex[77]+hex[76]; + String stat0=hex[153]+hex[152]; + String age0=hex[157]+hex[156]+hex[155]+hex[154]; + String ns0=hex[161]+hex[160]; + lenth=decodeHEX(lenth0); + lat=doubelttohex(lat0); + lon=doubelttohex(lon0); + alt=hextofloat(alt0); + pitch=hextofloat(pitch0); + roll=hextofloat(roll0); + yaw=hextofloat(yaw0); + stat=String.valueOf(decodeHEX(stat0)); + age=hextofloat(age0); + ns=String.valueOf(decodeHEX(ns0)); + + if(Index1.isShoware() ) { + if(Index1.getXieyi_type().equals("2")) { + mess=time+",经度:"+lat+",纬度:"+lon+",高程:"+alt+",俯仰角:"+pitch + +",横滚角:"+roll+",航向角:"+yaw+",状态:"+stat+",差分龄期:"+age+",卫星颗数:"+ns; + }else if(Index1.getXieyi_type().equals("1")) { + mess=time+","+infom; + }else if(Index1.getXieyi_type().equals("3")) { + mess=time+",经度:"+lat0+",纬度:"+lon0+",高程:"+alt0+",俯仰角:"+pitch0 + +",横滚角:"+roll0+",航向角:"+yaw0+",状态:"+stat0+",差分龄期:"+age0+",卫星颗数:"+ns0; + } + Index1.ara_show(mess); + } + + } + + + /**16进制转为10进制*/ + public static int decodeHEX(String hexs){ + String hex=hexs.trim(); + boolean a=JugeNumber.isLetterDigit(hex); + int numb=0; + if(a) { + BigInteger bigint=new BigInteger(hex,16); + numb=bigint.intValue(); + }else { + //ShowMessage.zidingyi("16进制转10进制出错,收到:"+hex); + } + return numb; + + } + + + public static String[] hex(String message) { + int size=message.length()/2; + String[] hex=new String[size]; + for(int i=0;i<size;i++) { + hex[i]=message.substring(i*2, 2+i*2); + } + + return hex; + } + + + /**16进制转为double*/ + public static String doubelttohex(String hexString) { + long longValue = Long.parseLong(hexString, 16); + longValue = Long.parseUnsignedLong(hexString, 16); + double doubleValue = Double.longBitsToDouble(longValue); + byte[] bytes = hexStringToByteArray(hexString); + doubleValue = ByteBuffer.wrap(bytes).getDouble(); + String a1=String.format("%.8f",doubleValue); + return a1; + } + + public static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16)); + } + return data; + } + + /**16进制转为float*/ + public static String hextofloat(String hex) { + Float f = Float.intBitsToFloat(new BigInteger(hex, 16).intValue()); + String a1=String.format("%.4f",f); + return a1; + + } + +} diff --git a/src/frame/Index1.java b/src/frame/Index1.java index d9c4866..61a72da 100644 --- a/src/frame/Index1.java +++ b/src/frame/Index1.java @@ -12,6 +12,9 @@ import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.Vector; + +import javax.swing.ComboBoxModel; +import javax.swing.DefaultComboBoxModel; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JFrame; @@ -21,7 +24,6 @@ import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; - import data_model.Dell_lixian; import data_model.Dell_shebei; import data_model.Dell_system; @@ -78,10 +80,11 @@ static int num=0; JComboBox<String> datatype=null;//数据类型 JComboBox<String> baseanchor=null;//选择基准站ID - static String datatypeis="全部数据类型"; static boolean chushi_enhd=false; static boolean start_jiexi=false; static String tagid="0"; + JComboBox<String> box=null; + static String xieyi_type="1";//协议类型选择 public Index1() {//构造方法 Toolkit toolkit = getToolkit();// 获得窗体工具包 @@ -125,6 +128,7 @@ //mb.add(getTcpnum()); mb.add(getUdpnum()); mb.add(getBut_shuaxin1()); + mb.add(getBox()); jl_UDP.setBounds(x+3, y,140,30); //jl_tcp.setBounds(x+140, y,120,30); //getTcpnum().setBounds(x+140+120+10, y,100,30); @@ -152,6 +156,7 @@ getBut_start().setBounds(x, y2+h1+20,100,40); getBut_clear().setBounds(x+120, y2+h1+20,100,40); + getBox().setBounds(x+240, y2+h1+20,120,40); @@ -349,10 +354,10 @@ public static void baowen_show(String message,String ip,String datatype) { if(showare) { if(chooseip.equals("1") || ip.equals(chooseip)) { - if(datatypeis.equals("全部数据类型")) {// + if(xieyi_type.equals("1")) {// are.append(GetNowTime.sss()+":"+message+"\n"); are.setCaretPosition(are.getText().length()); - }else if(datatype.equals(datatypeis)) { + }else if(datatype.equals(xieyi_type)) { are.append(message+"\n"); are.setCaretPosition(are.getText().length()); } @@ -533,7 +538,37 @@ } - + public JComboBox<String> getBox() { + if(box==null) { + box=new JComboBox<String>(); + String[] neixing= {"原始数据","解析后数据","HEX显示","ASCLL显示"}; + ComboBoxModel<String > coModel=new DefaultComboBoxModel<>(neixing);//下拉列表模型 + box.setModel(coModel); + box.setBackground(Color.white); + box.setSelectedIndex(2); + box.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(box.getSelectedIndex()==0) { + xieyi_type="1"; + }else if(box.getSelectedIndex()==1) { + xieyi_type="2"; + }else if(box.getSelectedIndex()==2) { + xieyi_type="3"; + }else if(box.getSelectedIndex()==3) { + xieyi_type="4"; + } + + } + }); + + } + return box; + } + + public static String getXieyi_type() { + return xieyi_type; + } + } -- Gitblit v1.9.3