首次提交完整的python工程代码

This commit is contained in:
2026-06-15 20:38:42 +08:00
commit bca485d748
159 changed files with 248076 additions and 0 deletions

244
converter/c_to_a.py Normal file
View File

@@ -0,0 +1,244 @@
import struct
from typing import Optional
from converter.base_converter import BaseConverter
from utils.logger import logger
from utils.hex_helper import hex_dump
# ====================== 指令映射表 ======================
CMD_MAP = {
"5555000811110010A5A5A5A5A5A5A5A5A5": "K3008",
"5555000911110010A5A5A5A5A5A5A5A5A5": "K3009",
"5555000A11110010A5A5A5A5A5A5A5A5A5": "K3010",
"5555000B11110010A5A5A5A5A5A5A5A5A5": "K3011",
"88880A0506040004000400A5A5A5A5A5A5": "K6307",
"88880A0506040104010401A5A5A5A5A5A5": "K6308",
"88880A0506040204020402A5A5A5A5A5A5": "K6309",
"88880A0506040304030403A5A5A5A5A5A5": "K6310",
"88880A0506040404040404A5A5A5A5A5A5": "K6311",
"88880A0506040504050405A5A5A5A5A5A5": "K6312",
"88880A0506040604060406A5A5A5A5A5A5": "K6313",
"88880A0506040704070407A5A5A5A5A5A5": "K6314",
"88880A0506040804080408A5A5A5A5A5A5": "K6315",
"88880A0506040904090409A5A5A5A5A5A5": "K6316",
"88880A0506040A040A040AA5A5A5A5A5A5": "K6317",
"88880A0506040B040B040BA5A5A5A5A5A5": "K6318",
"88880A0506040C040C040CA5A5A5A5A5A5": "K6319",
"88880A0506040D040D040DA5A5A5A5A5A5": "K6320",
"88880A0506040E040E040EA5A5A5A5A5A5": "K6321",
"88880A0506040F040F040FA5A5A5A5A5A5": "K6322",
"88880A0506050005000500A5A5A5A5A5A5": "K6323",
"88880A0506050105010501A5A5A5A5A5A5": "K6324",
"88880A0506050205020502A5A5A5A5A5A5": "K6325",
"88880A0506050305030503A5A5A5A5A5A5": "K6326",
"88880A0506050405040504A5A5A5A5A5A5": "K6327",
"88880A0506050505050505A5A5A5A5A5A5": "K6328",
"88880A0506050605060506A5A5A5A5A5A5": "K6329",
"88880A0506050705070507A5A5A5A5A5A5": "K6330",
"88880A0506050805080508A5A5A5A5A5A5": "K6331",
"88880A0506050905090509A5A5A5A5A5A5": "K6332",
"88880A0506050A050A050AA5A5A5A5A5A5": "K6333",
"88880A0506050B050B050BA5A5A5A5A5A5": "K6334",
"88880A0506050C050C050CA5A5A5A5A5A5": "K6335",
"88880A0506050D050D050DA5A5A5A5A5A5": "K6336",
"88880A0506050E050E050EA5A5A5A5A5A5": "K6337",
"88880A0506050F050F050FA5A5A5A5A5A5": "K6338",
"88880A0506060006000600A5A5A5A5A5A5": "K6339",
"88880A0506060106010601A5A5A5A5A5A5": "K6340",
"88880A0506060206020602A5A5A5A5A5A5": "K6341",
"88880A0506060306030603A5A5A5A5A5A5": "K6342",
"88880A0506060406040604A5A5A5A5A5A5": "K6343",
"88880A0506060506050605A5A5A5A5A5A5": "K6344",
"88880A0506060606060606A5A5A5A5A5A5": "K6345",
"88880A0506060706070607A5A5A5A5A5A5": "K6346",
"88880A0506060806080608A5A5A5A5A5A5": "K6347",
"88880A0506060906090609A5A5A5A5A5A5": "K6348",
"88880A0506060A060A060AA5A5A5A5A5A5": "K6349",
"88880A0506060B060B060BA5A5A5A5A5A5": "K6350",
"88880A0506060C060C060CA5A5A5A5A5A5": "K6351",
"88880A0506060D060D060DA5A5A5A5A5A5": "K6352",
"88880A0506060E060E060EA5A5A5A5A5A5": "K6353",
"88880A0506060F060F060FA5A5A5A5A5A5": "K6354",
"88880A0506070007000700A5A5A5A5A5A5": "K6355",
"88880A0506070107010701A5A5A5A5A5A5": "K6356",
"88880A0506070207020702A5A5A5A5A5A5": "K6357",
"88880A0506070307030703A5A5A5A5A5A5": "K6358",
"88880A0506070407040704A5A5A5A5A5A5": "K6359",
"88880A0506070507050705A5A5A5A5A5A5": "K6360",
"88880A0506070607060706A5A5A5A5A5A5": "K6361",
"88880A0506070707070707A5A5A5A5A5A5": "K6362",
"88880A0506070807080708A5A5A5A5A5A5": "K6363",
"88880A0506070907090709A5A5A5A5A5A5": "K6364",
"88880A0506070A070A070AA5A5A5A5A5A5": "K6365",
"88880A0506070B070B070BA5A5A5A5A5A5": "K6366",
"88880A0506070C070C070CA5A5A5A5A5A5": "K6367",
"88880A0506070D070D070DA5A5A5A5A5A5": "K6368",
"88880A0506070E070E070EA5A5A5A5A5A5": "K6369",
"88880A0506070F070F070FA5A5A5A5A5A5": "K6370",
"88880101061111001B0000A5A5A5A5A5A5": "K6155",
"88880101061111001C0000A5A5A5A5A5A5": "K6156",
"88880101061111001F0000A5A5A5A5A5A5": "K6159",
"8888010106111100200000A5A5A5A5A5A5": "K6160",
"8888010106111100620000A5A5A5A5A5A5": "K6225",
"8888010106111100630000A5A5A5A5A5A5": "K6226",
"8888010106111100210000A5A5A5A5A5A5": "K6161",
"8888010106111100220000A5A5A5A5A5A5": "K6162",
"8888010106111100270000A5A5A5A5A5A5": "K6166",
"8888010106111100280000A5A5A5A5A5A5": "K6167",
"8888010106111100330000A5A5A5A5A5A5": "K6178",
"8888010106111100340000A5A5A5A5A5A5": "K6179",
"8888010106111100350000A5A5A5A5A5A5": "K6180",
"8888010106111100360000A5A5A5A5A5A5": "K6181",
"88880101061111006A0000A5A5A5A5A5A5": "K6233",
"88880101061111006B0000A5A5A5A5A5A5": "K6234",
"88880101061111007E0000A5A5A5A5A5A5": "K6253",
"88880101061111007F0000A5A5A5A5A5A5": "K6254",
"88880C1B0C020222BBAAAAAAAAAAAAAA33": "K6557",
"88880C1B0C020222CCAAAAAAAAAAAAAA44": "K6558",
"88880101061111003D0000A5A5A5A5A5A5": "K6188",
"88880101061111003E0000A5A5A5A5A5A5": "K6189",
"88880101061111003F0000A5A5A5A5A5A5": "K6190",
"8888010106111100400000A5A5A5A5A5A5": "K6191",
"8888010106111100410000A5A5A5A5A5A5": "K6192",
"8888010106111100420000A5A5A5A5A5A5": "K6193",
"8888010106111100430000A5A5A5A5A5A5": "K6194",
"8888010106111100440000A5A5A5A5A5A5": "K6195",
"88880C1B0C02021177AAAAAAAAAAAAAACC": "K6451",
"88880C1B0C02021188AAAAAAAAAAAAAA33": "K6452",
"88880101061111000B0000A5A5A5A5A5A5": "K6139",
"88880101061111000C0000A5A5A5A5A5A5": "K6140",
"8888010106111100170000A5A5A5A5A5A5": "K6151",
"8888010106111100180000A5A5A5A5A5A5": "K6152",
"8888010106111100610000A5A5A5A5A5A5": "K6224",
"8888010106111100780000A5A5A5A5A5A5": "K6247",
"8888010106111100790000A5A5A5A5A5A5": "K6248",
#2026/4/13新增
"888810010AA0A00000000000000000A5A5":"K6669",
"888810010A40500000000000000000A5A5":"K6670",
"888810010A50400000000000000000A5A5":"K6671",
"888810010A6070AB180000AB180000A5A5":"K6672",
"888810010A7060AB180000AB180000A5A5":"K6673",
"888810010A00000000000000000000A5A5":"K6674",
"888810010A20300000000000000000A5A5":"K6675",
"888810010A30200000000000000000A5A5":"K6676",
#2026/4/16新增
"888810010A00300000000000000000A5A5":"K6677",
"888810010A00200000000000000000A5A5":"K6678",
"888810010A00500000000000000000A5A5":"K6679",
"888810010A00400000000000000000A5A5":"K6680",
"888810010A007000000000AB180000A5A5":"K6681",
"888810010A006000000000AB180000A5A5":"K6682",
"888810010A00A00000000000000000A5A5":"K6683",
"888810010A20000000000000000000A5A5":"K6684",
"888810010A30000000000000000000A5A5":"K6685",
"888810010A20500000000000000000A5A5":"K6686",
"888810010A30400000000000000000A5A5":"K6687",
"888810010A207000000000AB180000A5A5":"K6688",
"888810010A306000000000AB180000A5A5":"K6689",
"888810010A20A00000000000000000A5A5":"K6690",
"888810010A30A00000000000000000A5A5":"K6691",
"888810010A40000000000000000000A5A5":"K6692",
"888810010A50000000000000000000A5A5":"K6693",
"888810010A40300000000000000000A5A5":"K6694",
"888810010A50200000000000000000A5A5":"K6695",
"888810010A407000000000AB180000A5A5":"K6696",
"888810010A506000000000AB180000A5A5":"K6697",
"888810010A40A00000000000000000A5A5":"K6698",
"888810010A50A00000000000000000A5A5":"K6699",
"888810010A6000AB18000000000000A5A5":"K6700",
"888810010A7000AB18000000000000A5A5":"K6701",
"888810010A6030AB18000000000000A5A5":"K6702",
"888810010A7020AB18000000000000A5A5":"K6703",
"888810010A6050AB18000000000000A5A5":"K6704",
"888810010A7040AB18000000000000A5A5":"K6705",
"888810010A60A0AB18000000000000A5A5":"K6706",
"888810010A70A0AB18000000000000A5A5":"K6707",
"888810010AA0000000000000000000A5A5":"K6708",
"888810010AA0300000000000000000A5A5":"K6709",
"888810010AA0200000000000000000A5A5":"K6710",
"888810010AA0500000000000000000A5A5":"K6711",
"888810010AA0400000000000000000A5A5":"K6712",
"888810010AA07000000000AB180000A5A5":"K6713",
"888810010AA06000000000AB180000A5A5":"K6714",
"888810010A40400000000000000000A5A5":"K6715",
"888810010A50500000000000000000A5A5":"K6716",
"888810010A6060AB180000AB180000A5A5":"K6717",
"888810010A7070AB180000AB180000A5A5":"K6718",
"888810010A20200000000000000000A5A5":"K6719",
"888810010A30300000000000000000A5A5":"K6720",
"888810010A20400000000000000000A5A5":"K6723",
"888810010A30500000000000000000A5A5":"K6724",
"888810010A206000000000AB180000A5A5":"K6725",
"888810010A307000000000AB180000A5A5":"K6726",
"888810010A40200000000000000000A5A5":"K6727",
"888810010A50300000000000000000A5A5":"K6728",
"888810010A406000000000AB180000A5A5":"K6729",
"888810010A507000000000AB180000A5A5":"K6730",
"888810010A6020AB18000000000000A5A5":"K6731",
"888810010A7030AB18000000000000A5A5":"K6732",
"888810010A6040AB18000000000000A5A5":"K6733",
"888810010A7050AB18000000000000A5A5":"K6734",
"BBBBFF0101A5A5A5A5A5A5A5A5A5A5A5A5":"K1085",
"BBBBFF0202A5A5A5A5A5A5A5A5A5A5A5A5":"K1089",
}
class C2AConverter(BaseConverter):
def convert(self, data: bytes) -> Optional[bytes]:
try:
# ========= 1. 截取指令码B48~B64 =========
if len(data) < 65:
logger.warning("帧长度不足,无法解析指令")
return None
# cmd_bytes = data[48:48+17]#遥控通道遥控帧
cmd_bytes = data[54:(54+17)]#地测通道遥控帧
cmd_hex = cmd_bytes.hex().upper()
#logger.info(f"🔍 提取指令码:{cmd_hex}")
# ========= 2. 查询指令是否需要转发 =========
if cmd_hex not in CMD_MAP:
#logger.info(" 指令不在转发列表,不发送给 A")
return None
cmd_code = CMD_MAP[cmd_hex]
logger.info(f"✅ 匹配指令:{cmd_code},准备转发给 A")
# ========= 3. 提取数字4位十进制 =========
num_str = cmd_code[1:] # K3008 → 3008
num = int(num_str)
logger.info(f"✅ 匹配指令:{cmd_code},🔢 指令编号:{num_str}{num}")
# ========= 4. 转 double8字节 大端) =========
double_big = struct.pack('>d', float(num))
# ========= 5. 组 A 软件协议帧 =========
HEADER = 0xEB90EB90
DATA_LEN = 0x08
if num == 1085 or num == 1089:
DIR = 0x02222222 #控制前端到同元
DATA_ID = 0x00330000 #测控
else:
DIR = 0x01111111 #0x02222222改为0x01111111(数字卫星到同元)
DATA_ID = 0x00440000 #SADA
PARAM_TYPE = 0x00222222
SATELLITE = 0x00000001
TAIL = 0x4C3A
frame = (
struct.pack('>I', HEADER)
+ struct.pack('>I', DATA_LEN)
+ struct.pack('>I', DIR)
+ struct.pack('>I', DATA_ID)
+ struct.pack('>I', PARAM_TYPE)
+ struct.pack('>I', SATELLITE)
+ double_big
+ struct.pack('>H', TAIL)
)
hex_dump(frame, f"向A 软件发送帧 [{cmd_code}]")
return frame
except Exception as e:
logger.error(f"C→A 转换失败:{e}", exc_info=True)
return None