机试题:现有远传设备上行传输原始报文如下,请按照报文解析说明,使用Java语言进行编程,实现对原始报文的解析并能够以键值对的形式输出数据类型名称和数据解析值。(鼓励使用多种语言)。 原始报文:68 11 02 11 11 01 50 00 01 02 0C 98 3B 02 00 00 10 0C 94 3C 72 78 28 00 0C 3A 79 35 83 01 0B 69 62 32 01 06 6D 00 DE 31 CC 25 00 0C 98 3B 03 00 00 10 0C 94 3C 72 78 28 00 0C 3A 19 34 83 01 0B 69 91 32 01 06 6D 00 C0 32 CC 25 00 0F 报文解析说明: 数据开始 68h 固定68h表示数据开始 设备 ID 11h 01h 11h 11h 01h 50h 00h 00h 01h 设备 ID 例110111110150000001 正累积流量 0Ch DIF:8位BCD码,瞬时值 94h VIF:有副VIF,单位 0.01 m³ 3Bh VIFE:正向流量 78h 56h 34h 12h 123456.78 m³ 负累积流量 0Ch DIF:8位BCD码,瞬时值 94h VIF:有副VIF,单位 0.01 m³ 3Ch VIFE:反向流量 78h 56h 34h 12h 123456.78 m³ 水温 0Bh DIF:6位BCD码,瞬时值 59h VIF:进水温度,单位 0.01℃ 56h 34h 12h 1234.56℃ 瞬时流量 0Ch DIF:8位BCD码,瞬时值 3Ah VIF:体积流量(单位:1/10000 m³/h) 78h 56h 34h 12h 1234.5678 m³/h 负瞬时流量 0Ch DIF:8位BCD码,瞬时值 3Bh VIF:体积流量(单位:1/10000 m³/h) 78h 56h 34h 12h -1234.5678 m³/h 压力 0Bh DIF:6位BCD码,瞬时值 69h VIF:压力(单位:1/100bar = 1kPa) 56h 34h 12h 1234.56 kPa 累积运行时间 0Ch DIF:8位BCD码,瞬时值 26h VIF:工作时间(单位:h) 78h 56h 34h 12h 12345678h 实际日期时间 06h DIF:F 型数据,瞬时值 6Dh VIF:日期时间 0C 0E 30 87 28 00 2020-08-07T16:14:12Z 数据结束 0Fh 固定0F表示数据结束 注: 1、表中标红部分为设备可能上传的所有数据类型,但是所有数据数据类型不一定在一条报文中同时上传,而且在原始报文中数据类型也不一定按照表中顺序排列。 2、表中的实际日期时间,第一字节(标红部分)0C为秒,中间四个字节按下图解析,最后一个字节代表时区,下图为国标26831截图。
时间: 2023-02-05 21:15:34 浏览: 243
首先,您需要了解报文中各部分的含义,这样才能更好地进行解析。接下来,您需要遍历原始报文的每一个字节,并根据报文解析说明中的信息来解析数据。
例如,您可以创建一个类来表示一个数据项,并使用报文解析说明中的信息来解析数据。
您可以使用Java中的位运算符来解析BCD编码的数据,并使用Java中的数学函数(如pow())来计算单位转换。
例如,要解析8位BCD编码的数据,您可以使用以下代码:
int bcd = originalMessage[i];
int value = 0;
for (int j = 0; j < 8; j++) {
int digit = bcd & 0x0F;
value += digit * Math.pow(10, j);
bcd >>= 4;
}
您还需要根据VIF和VIFE字段来确定单位,并对数据进行单位转换。
最后,您可以使用Java中的HashMap类来存储键值对,并使用put()方法向其中添加键值对。
例如:
HashMap<String, String> data = new HashMap<>();
data.put("正累积流量", value + " m³");
然后,您可以使用get()方法来获取键值对的值。
例如:
String flow = data.get("正累积流量");
这就是使用Java来解析原始报文
相关问题
远传抄表站接线端子说明
远传抄表站接线端子通常包括以下几个部分:
1.电源接口:连接供电电源,一般为220V或24V直流电源。
2.通讯接口:连接远传抄表站与抄表终端设备进行通讯的接口,包括RS485、RS232等。
3.信号输入接口:连接抄表终端设备传输的模拟量或数字量信号,包括4-20mA、0-10V、开关量等。
4.信号输出接口:连接报警或控制信号输出设备,如LED灯、蜂鸣器、继电器等。
5.接地端子:用于连接设备的接地线,保证设备的安全可靠运行。
需要注意的是,不同厂家的远传抄表站接线端子可能存在差异,具体需要根据设备的说明书进行操作。
天气器表,涉及安全芯片,远传通讯与服务器之间的自定义协议是怎么实现的
实现天气仪表与服务器之间的自定义协议涉及多个方面,包括安全芯片的使用、远传通讯的选择以及协议的设计和实现。下面是一个简单的实现示例,供参考:
1. 安全芯片的使用:为了确保通信的安全性,可以使用安全芯片来提供数据加密和解密的功能。安全芯片可以存储密钥,并在通信过程中使用这些密钥进行加密和解密操作,确保数据的机密性和完整性。
2. 远传通讯的选择:根据需求和实际场景,选择合适的远传通讯技术,如无线通信(如Wi-Fi、蓝牙、LoRa等)或有线通信(如以太网、RS485等)。根据通信技术的选择,配置相应的硬件和驱动程序。
3. 协议的设计和实现:设计并实现天气仪表与服务器之间的自定义协议。协议应包括数据格式、命令和指令定义、错误处理机制等。以下是一个简单的示例:
- 数据格式:定义数据包的结构,包括起始标志、长度字段、数据字段、校验字段等。
- 命令和指令定义:定义不同功能的命令和指令,例如请求天气数据、上传天气数据、设置配置参数等。
- 错误处理机制:定义错误码和错误处理机制,确保通信双方能够正确处理异常情况。
4. 在天气仪表和服务器上分别实现协议的解析和处理逻辑。在天气仪表上,根据协议格式解析接收到的数据包,并根据命令和指令进行相应的处理操作。在服务器上,接收来自天气仪表的数据包,解析数据并进行相应的处理和存储。
需要注意的是,协议的具体实现会受到具体的应用场景、硬件平台和通信技术的限制。以上只是一个简单示例,具体的实现方式需要根据实际需求进行设计和调整。