53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
import struct
|
||
|
||
def create_demod_info_packet():
|
||
"""创建解调信息报文(类型12)的内容"""
|
||
# 模拟解调信息数据
|
||
message_type = 12 # 消息类型 (1字节)
|
||
satellite_id = 1 # 卫星ID (1字节)
|
||
demodulator_id = 0 # 解调器编号 (1字节)
|
||
demod_slot = 1234 # 解调时隙 (2字节)
|
||
receive_delay = 5678 # 接收延迟 (2字节,单位us)
|
||
snr = 25.75 # 信噪比 (2字节,dB)
|
||
|
||
# 处理信噪比 (高8位整数部分,低8位小数部分)
|
||
snr_int = int(snr)
|
||
snr_frac = int((snr - snr_int) * 100) # 转换为0-99的小数部分
|
||
snr_packed = (snr_int & 0xFF) << 8 | (snr_frac & 0xFF)
|
||
|
||
# 打包为二进制 (大端字节序)
|
||
content = struct.pack(
|
||
'>BBBHHH', # 格式: B(1),B(1),B(1),H(2),H(2),h(2)
|
||
message_type,
|
||
satellite_id,
|
||
demodulator_id,
|
||
demod_slot,
|
||
receive_delay,
|
||
snr_packed
|
||
)
|
||
return content
|
||
|
||
def create_tcp_packet(packet_type, content):
|
||
"""创建符合VDES TCP协议的报文"""
|
||
# 报文帧头 (4字节)
|
||
header = b'####'
|
||
|
||
# 报文类型 (4字节,大端)
|
||
type_field = struct.pack('>I', packet_type)
|
||
|
||
# 报文长度 (4字节,大端,内容长度)
|
||
length = len(content)
|
||
length_field = struct.pack('>I', length)
|
||
|
||
# 构建完整报文
|
||
packet = header + type_field + length_field + content
|
||
return packet
|
||
|
||
|
||
|
||
# 使用示例
|
||
demod_info_content = create_demod_info_packet()
|
||
demod_info_packet = create_tcp_packet(12, demod_info_content)
|
||
|
||
# 打印结果
|