【问题标题】:Extracting ID from data packet GPS从数据包GPS中提取ID
【发布时间】:2016-01-20 04:18:56
【问题描述】:

我正在尝试为我的系统配置 GPS 设备。 GPS设备以以下格式将数据包发送到我的IP:

$$�W��¬ÿÿÿÿ™U042903.000,A,2839.6408,N,07717.0905,E,0.00,,230111,,,A*7C|1.2|203|0000÷ 

我能够提取纬度、经度和其他信息,但我无法从字符串中提取 Tracker ID。

根据手册,ID是十六进制格式。数据包的格式是

$$<L(2 bytes)><ID(7 bytes)><command (2 bytes)><data><checksum (2 bytes)>\r\n

我不知道如何处理它,我尝试将其转换为十六进制..但它不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • 您可能还想查看 NMEA 规范中的 $GPSTN 语句。

标签: gps hex packet-capture


【解决方案1】:

更多信息怎么样?什么GPS?什么接口(USB,串口)?你用什么语言工作?

您的数据确实看起来很奇怪。根据我对 GPS 数据的经验,它通常是字母数字和分隔符,但看起来您的字符串或非字母数字值已损坏。


根据您提供的其他信息进行更新:

您提供的 GPRS 手册解释了格式:

$$ - 2 bytes - in ASCII code (Hex code: 0x24) 
L - 2 bytes - in hex code
ID  7 bytes - in the format of hex code.
    For example, if ID is 13612345678, then it will be shown as follows: 
    0x13, 0x61, 0x23, 0x45, 0x67, 0x8f, 0xff.  
command - 2 bytes - hex code

如果我理解正确,$$ 之后和数据字段之前的乱码不是可打印的 ASCII 字符。它们是实际的数值,一次提供一个字节。如果您将每个字节转换为十六进制格式的字符串并显示它,您应该明白我的意思了。

我不太记得我的 PHP,但我认为 ID 可以通过以下方式形成十六进制格式的字符串:

$s = GetYourGPRSStringFromWherever()
$sID = sprintf("0x%02x%02x%02x%02x%02x%02x%02x", $s[4],  $s[5],  $s[6],  
               $s[7],  $s[8],  $s[9],  $s[10]);

(另外,根据文档的示例,删除或忽略任何 0xFF 值)

【讨论】:

  • 您好,我们正在使用 Meitrack GT30i。设备将数据(通过 GPRS 服务)发送到我们的服务器。我们正在使用 PHP 命令来读取数据并存储在我们的数据库中。以下是 GPRS 协议手册的链接。 meitrack.net/support1/protocols
  • @user604134 我使用提供的信息更新了我的答案。
  • @user604134:我对您如何使用 PHP 命令读取数据非常感兴趣,您能帮我解答一下这里的问题吗stackoverflow.com/questions/5633467/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2020-10-29
  • 1970-01-01
  • 2012-02-10
相关资源
最近更新 更多