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)
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):
slotBtn = QPushButton("时隙表: 01") # 默认选中01
menu = QMenu(slotBtn)
@@ -175,7 +190,7 @@ class Plugin(Plugin_Base):
def createRateButton(self):
rateBtn = QPushButton("速率: 128kpbs") # 默认选中01
menu = QMenu(rateBtn)
rateOptions = ["128kpbs", "256kpbs", "2Mbps"]
rateOptions = ["128kpbs", "512kpbs", "2Mbps"]
def setRate(text):
rateBtn.setText(f"速率: {text}")
@@ -212,7 +227,7 @@ class Plugin(Plugin_Base):
frame.append(id_val)
# 速率字段对应映射(参考原来速率的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_val = rate_map.get(rate_key, 0x22)
frame.append(rate_val)
@@ -237,18 +252,19 @@ class Plugin(Plugin_Base):
# 转成空格分隔的大写16进制字符串
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:#两个图片的序号不同
frame.append(0x01)
else:
frame.append(0x02)
frame.extend([0x00, 0x00, 0x00])
# ID字段,转为整数
try:
id_val = int(id_text.split(":")[1].strip(), 16)
id_val = int(toid_text.split(":")[1].strip(), 16)
except:
id_val = 0x01
frame.append(id_val)
@@ -259,13 +275,13 @@ class Plugin(Plugin_Base):
else:
image_data = self.IMAGE2_DATA
# 计算图片数据长度(2字节表示,这里使用大端模式)
# 计算图片数据长度(2字节表示,这里使用小端模式)
data_length = len(image_data)
# 拆分长度为高8位和低8位
high_byte = (data_length >> 8) & 0xFF
low_byte = data_length & 0xFF
high_byte = (data_length >> 8) & 0xFF # 高8位
low_byte = data_length & 0xFF # 低8位
frame.extend([high_byte, low_byte]) # 替换固定字段为动态长度
frame.extend([low_byte, high_byte]) # 小端模式:低位字节在前,高位字节在后
# 根据索引选择图片数据
if image_index == 0:
frame.extend(self.IMAGE1_DATA)
@@ -291,10 +307,9 @@ class Plugin(Plugin_Base):
id_text = self.idButton.text()
slot_text = self.slotButton.text()
rate_text = self.rateButton.text()
# 发送当前索引对应的图片
toid_text = self.toidButton.text()
cmd_str = self.buildimageCommand(
switch_text, id_text, rate_text, slot_text,
switch_text, toid_text, rate_text, slot_text,
self.image_index # 传入当前图片索引
)
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.customSendItemsLayout.addWidget(self.rateButton, 1, 3)
self.toidButton = self.createtoIdButton()
self.customSendItemsLayout.addWidget(self.toidButton, 0, 3)
# 第一行固定插入“遥测”、“图片传输”、“总控”
for item in self.config["customSendItems"]:
if item["caption"] == "遥测":
@@ -491,7 +509,7 @@ class Plugin(Plugin_Base):
# 1. 定义速率与间隔的映射关系(单位:毫秒)
rate_interval_map = {
"128kpbs": 1500, # 128kpbs对应1.5秒
"256kpbs": 1000, # 256kpbs对应1秒
"512kpbs": 1000, # 256kpbs对应1秒
"2Mbps": 500 # 2Mbps对应0.5秒
}
@@ -512,10 +530,10 @@ class Plugin(Plugin_Base):
id_text = self.idButton.text()
slot_text = self.slotButton.text()
rate_text = self.rateButton.text()
toid_text = self.toidButton.text()
# 构建当前图片指令
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}")
@@ -659,7 +677,7 @@ class Plugin(Plugin_Base):
cmd_id = binary_data[2]
print(f"收到指令: cmd_id=0x{cmd_id:02X}")
if cmd_id == 0xE4: # 图像测试回令
if cmd_id == 0xE5: # 图像测试回令
result = self.evalimageTestRsp(binary_data)
self.showReceiveDataSignal.emit(result)
return
@@ -830,7 +848,7 @@ class Plugin(Plugin_Base):
print('“”“”“”“”“”“”“”“”“”“”“”“')
try:
# 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])
frame_head, cmd_id, node_type, data_id, from_id, data_len = header_data
print(data)
+1 -1
View File
@@ -449,7 +449,7 @@ int32_t SystemBus_GenRecvRsp(SYSBUS *instPtr, SYSBUS_SVC_PLD *payload)
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_PRD] = MY_PRD_ID;