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)
|
|||
|
|
|
|||
|
|
# 打印结果
|