fix: 修复PS上传数据长度不足的问题;图片上位机修改控制字的大小端,增加目标节点选择

This commit is contained in:
2025-08-20 17:00:12 +08:00
parent cb9dc0d934
commit 75d6651258
2 changed files with 36 additions and 18 deletions
+35 -17
View File
@@ -157,6 +157,21 @@ class Plugin(Plugin_Base):
toggleBtn.setMenu(menu) toggleBtn.setMenu(menu)
return toggleBtn return toggleBtn
def createtoIdButton(self):
toggleBtn = QPushButton("目的节点id: 01")
menu = QMenu(toggleBtn)
ids = ["01", "02", "03"]
def setId(text):
toggleBtn.setText(f"目的节点id: {text}")
print(f"目的节点id设为 {text}")
for id_text in ids:
menu.addAction(id_text).triggered.connect(lambda checked, t=id_text: setId(t))
toggleBtn.setMenu(menu)
return toggleBtn
def createSlotButton(self): def createSlotButton(self):
slotBtn = QPushButton("时隙表: 01") # 默认选中01 slotBtn = QPushButton("时隙表: 01") # 默认选中01
menu = QMenu(slotBtn) menu = QMenu(slotBtn)
@@ -175,7 +190,7 @@ class Plugin(Plugin_Base):
def createRateButton(self): def createRateButton(self):
rateBtn = QPushButton("速率: 128kpbs") # 默认选中01 rateBtn = QPushButton("速率: 128kpbs") # 默认选中01
menu = QMenu(rateBtn) menu = QMenu(rateBtn)
rateOptions = ["128kpbs", "256kpbs", "2Mbps"] rateOptions = ["128kpbs", "512kpbs", "2Mbps"]
def setRate(text): def setRate(text):
rateBtn.setText(f"速率: {text}") rateBtn.setText(f"速率: {text}")
@@ -212,7 +227,7 @@ class Plugin(Plugin_Base):
frame.append(id_val) frame.append(id_val)
# 速率字段对应映射(参考原来速率的0x22等) # 速率字段对应映射(参考原来速率的0x22等)
rate_map = {"128kpbs": 0x22, "256kpbs": 0x33, "2Mbps": 0x44} rate_map = {"128kpbs": 0x22, "512kpbs": 0x33, "2Mbps": 0x44}
rate_key = rate_text.split(":")[1].strip() rate_key = rate_text.split(":")[1].strip()
rate_val = rate_map.get(rate_key, 0x22) rate_val = rate_map.get(rate_key, 0x22)
frame.append(rate_val) frame.append(rate_val)
@@ -237,18 +252,19 @@ class Plugin(Plugin_Base):
# 转成空格分隔的大写16进制字符串 # 转成空格分隔的大写16进制字符串
return " ".join(f"{b:02X}" for b in frame) return " ".join(f"{b:02X}" for b in frame)
def buildimageCommand(self, switch_text, id_text, rate_text, slot_text, image_index=0): def buildimageCommand(self, switch_text, toid_text, rate_text, slot_text, image_index=0):
# 头部固定 # 头部固定
frame = [0x5A, 0x54, 0xE4, 0xEE, 0x00, 0x00, 0x00] frame = [0x5A, 0x54, 0xE4, 0xEE]
if image_index == 0:#两个图片的序号不同 if image_index == 0:#两个图片的序号不同
frame.append(0x01) frame.append(0x01)
else: else:
frame.append(0x02) frame.append(0x02)
frame.extend([0x00, 0x00, 0x00])
# ID字段,转为整数 # ID字段,转为整数
try: try:
id_val = int(id_text.split(":")[1].strip(), 16) id_val = int(toid_text.split(":")[1].strip(), 16)
except: except:
id_val = 0x01 id_val = 0x01
frame.append(id_val) frame.append(id_val)
@@ -259,13 +275,13 @@ class Plugin(Plugin_Base):
else: else:
image_data = self.IMAGE2_DATA image_data = self.IMAGE2_DATA
# 计算图片数据长度(2字节表示,这里使用大端模式) # 计算图片数据长度(2字节表示,这里使用小端模式)
data_length = len(image_data) data_length = len(image_data)
# 拆分长度为高8位和低8位 # 拆分长度为高8位和低8位
high_byte = (data_length >> 8) & 0xFF high_byte = (data_length >> 8) & 0xFF # 高8位
low_byte = data_length & 0xFF low_byte = data_length & 0xFF # 低8位
frame.extend([high_byte, low_byte]) # 替换固定字段为动态长度 frame.extend([low_byte, high_byte]) # 小端模式:低位字节在前,高位字节在后
# 根据索引选择图片数据 # 根据索引选择图片数据
if image_index == 0: if image_index == 0:
frame.extend(self.IMAGE1_DATA) frame.extend(self.IMAGE1_DATA)
@@ -291,10 +307,9 @@ class Plugin(Plugin_Base):
id_text = self.idButton.text() id_text = self.idButton.text()
slot_text = self.slotButton.text() slot_text = self.slotButton.text()
rate_text = self.rateButton.text() rate_text = self.rateButton.text()
toid_text = self.toidButton.text()
# 发送当前索引对应的图片
cmd_str = self.buildimageCommand( cmd_str = self.buildimageCommand(
switch_text, id_text, rate_text, slot_text, switch_text, toid_text, rate_text, slot_text,
self.image_index # 传入当前图片索引 self.image_index # 传入当前图片索引
) )
print(f"第{self.cycle_count + 1}次发送,图片{self.image_index + 1}: {cmd_str}") print(f"第{self.cycle_count + 1}次发送,图片{self.image_index + 1}: {cmd_str}")
@@ -458,6 +473,9 @@ class Plugin(Plugin_Base):
self.rateButton = self.createRateButton() self.rateButton = self.createRateButton()
self.customSendItemsLayout.addWidget(self.rateButton, 1, 3) self.customSendItemsLayout.addWidget(self.rateButton, 1, 3)
self.toidButton = self.createtoIdButton()
self.customSendItemsLayout.addWidget(self.toidButton, 0, 3)
# 第一行固定插入“遥测”、“图片传输”、“总控” # 第一行固定插入“遥测”、“图片传输”、“总控”
for item in self.config["customSendItems"]: for item in self.config["customSendItems"]:
if item["caption"] == "遥测": if item["caption"] == "遥测":
@@ -491,7 +509,7 @@ class Plugin(Plugin_Base):
# 1. 定义速率与间隔的映射关系(单位:毫秒) # 1. 定义速率与间隔的映射关系(单位:毫秒)
rate_interval_map = { rate_interval_map = {
"128kpbs": 1500, # 128kpbs对应1.5秒 "128kpbs": 1500, # 128kpbs对应1.5秒
"256kpbs": 1000, # 256kpbs对应1秒 "512kpbs": 1000, # 256kpbs对应1秒
"2Mbps": 500 # 2Mbps对应0.5秒 "2Mbps": 500 # 2Mbps对应0.5秒
} }
@@ -512,10 +530,10 @@ class Plugin(Plugin_Base):
id_text = self.idButton.text() id_text = self.idButton.text()
slot_text = self.slotButton.text() slot_text = self.slotButton.text()
rate_text = self.rateButton.text() rate_text = self.rateButton.text()
toid_text = self.toidButton.text()
# 构建当前图片指令 # 构建当前图片指令
cmd_str = self.buildimageCommand( cmd_str = self.buildimageCommand(
switch_text, id_text, rate_text, slot_text, self.image_index switch_text, toid_text, rate_text, slot_text, self.image_index
) )
print(f"第{self.cycle_count + 1}次循环,图片{self.image_index + 1}: {cmd_str}") print(f"第{self.cycle_count + 1}次循环,图片{self.image_index + 1}: {cmd_str}")
@@ -659,7 +677,7 @@ class Plugin(Plugin_Base):
cmd_id = binary_data[2] cmd_id = binary_data[2]
print(f"收到指令: cmd_id=0x{cmd_id:02X}") print(f"收到指令: cmd_id=0x{cmd_id:02X}")
if cmd_id == 0xE4: # 图像测试回令 if cmd_id == 0xE5: # 图像测试回令
result = self.evalimageTestRsp(binary_data) result = self.evalimageTestRsp(binary_data)
self.showReceiveDataSignal.emit(result) self.showReceiveDataSignal.emit(result)
return return
@@ -830,7 +848,7 @@ class Plugin(Plugin_Base):
print('“”“”“”“”“”“”“”“”“”“”“”“') print('“”“”“”“”“”“”“”“”“”“”“”“')
try: try:
# 1. 先解析头部获取数据长度和图片类型标识 # 1. 先解析头部获取数据长度和图片类型标识
header_struct = Struct(">2s B B I B H") # 前11字节结构 header_struct = Struct("<2s B B I B H") # 前11字节结构
header_data = header_struct.unpack(data[:11]) header_data = header_struct.unpack(data[:11])
frame_head, cmd_id, node_type, data_id, from_id, data_len = header_data frame_head, cmd_id, node_type, data_id, from_id, data_len = header_data
print(data) print(data)
+1 -1
View File
@@ -449,7 +449,7 @@ int32_t SystemBus_GenRecvRsp(SYSBUS *instPtr, SYSBUS_SVC_PLD *payload)
return ENOMEM; return ENOMEM;
} }
sysbusRsp->len = payload->dataLen + RECV_DATA_LEN_OFFSET; sysbusRsp->len = payload->dataLen + RECV_DATA_OFFSET;
sysbusRsp->data[WD_CMD] = CMD_RECV_DATA; sysbusRsp->data[WD_CMD] = CMD_RECV_DATA;
sysbusRsp->data[WD_PRD] = MY_PRD_ID; sysbusRsp->data[WD_PRD] = MY_PRD_ID;