添加检测时赋码

心跳ack为0时才回复
This commit is contained in:
ranchuan
2023-09-26 17:23:57 +08:00
parent d8e41f133b
commit 56044eabf4
7 changed files with 76 additions and 20 deletions

View File

@@ -59,5 +59,8 @@
实现U盘升级脚本updata添加升级服务文件功能 实现U盘升级脚本updata添加升级服务文件功能
串口控制台添加升级服务文件功能 串口控制台添加升级服务文件功能
添加同步设备时间的按钮 添加同步设备时间的按钮
2023.9.26
添加批检仪检测时赋码JQ芯片
添加赋码按钮
心跳ack为0时才发送回复解决频繁回复造成赋码控制器内存耗尽

View File

@@ -74,6 +74,8 @@ code_errinfo_list=[
"6:未找到相关任务", "6:未找到相关任务",
"7:过流", "7:过流",
"8:短路", "8:短路",
"52:三码绑定失败",
"53:三码验证失败"
"193:电压设置失败", "193:电压设置失败",
"194:三码验证失败", "194:三码验证失败",
"195:UID写入失败", "195:UID写入失败",

View File

@@ -116,8 +116,8 @@ if __name__ == "__main__":
# p.ecode_test(50000) # p.ecode_test(50000)
# 赋码仪设备串口测试 # 赋码仪设备串口测试
p.open("com5",115200) p.open("com7",115200)
p.coder_test(5) p.coder_test(1)
# p.open("com16",115200) # p.open("com16",115200)
# p.coder_test(1000) # p.coder_test(1000)

View File

@@ -56,6 +56,7 @@ class coder(QObject):
self.recv_handler=None self.recv_handler=None
self.autoinc_id=False self.autoinc_id=False
self.autotest_is_open=0 self.autotest_is_open=0
self.uid_length=16
self.ser=prot.protu() self.ser=prot.protu()
self.widget = QWidget() self.widget = QWidget()
self.widget.resize(1500, 800) self.widget.resize(1500, 800)
@@ -76,6 +77,7 @@ class coder(QObject):
self.posend_but_init() self.posend_but_init()
self.autotest_but_init() self.autotest_but_init()
self.stop_but_init() self.stop_but_init()
self.code_but_init()
self.widget.destroyed.connect(self.quit) self.widget.destroyed.connect(self.quit)
def quit(self): def quit(self):
@@ -199,7 +201,7 @@ class coder(QObject):
def com_but_init(self): def com_but_init(self):
self.com_but = QPushButton(self.widget) self.com_but = QPushButton(self.widget)
self.com_but.setObjectName(u"com_but") self.com_but.setObjectName(u"com_but")
self.com_but.setGeometry(QRect(1250, 50, 93, 28)) self.com_but.setGeometry(QRect(1370, 90, 93, 28))
self.com_but.setText("打开端口") self.com_but.setText("打开端口")
self.com_but.clicked.connect(self.com_but_clicked) self.com_but.clicked.connect(self.com_but_clicked)
@@ -252,11 +254,19 @@ class coder(QObject):
self.stop_state=True self.stop_state=True
self.stop_but_clicked() self.stop_but_clicked()
# 发送赋码指令
def code_but_init(self):
self.code_but=QPushButton(self.widget)
self.code_but.setObjectName(u"code_but")
self.code_but.setGeometry(QRect(1250, 330, 93, 28))
self.code_but.clicked.connect(self.code_but_clicked)
self.code_but.setText("赋码")
# 初始化设备类型选择框 # 初始化设备类型选择框
def device_type_init(self): def device_type_init(self):
self.device_type_list = QComboBox(self.widget) self.device_type_list = QComboBox(self.widget)
self.device_type_list.setObjectName(u"device_type_list") self.device_type_list.setObjectName(u"device_type_list")
self.device_type_list.setGeometry(QRect(1370, 50, 93, 28)) self.device_type_list.setGeometry(QRect(1250, 50, 93+120, 28))
self.device_type_list.setEditable(False) self.device_type_list.setEditable(False)
self.device_type_list.currentIndexChanged.connect(self.device_type_changed) self.device_type_list.currentIndexChanged.connect(self.device_type_changed)
for i in self.recv_handler_table.items(): for i in self.recv_handler_table.items():
@@ -352,6 +362,10 @@ class coder(QObject):
self.autotest_is_open=3 self.autotest_is_open=3
self.autotest_but.setEnabled(False) self.autotest_but.setEnabled(False)
def code_but_clicked(self):
self.set_infotext("发送赋码指令")
self.cmd_code(self.slave_num)
# 无效化编码参数设置项 # 无效化编码参数设置项
def params_active(self,power:bool): def params_active(self,power:bool):
self.dot_fat.setEnabled(power) self.dot_fat.setEnabled(power)
@@ -373,7 +387,8 @@ class coder(QObject):
# 设备类型发生了改变 # 设备类型发生了改变
def device_type_changed(self,index:int): def device_type_changed(self,index:int):
device_type=self.device_type_list.itemText(index) device_type=self.device_type_list.itemText(index)
self.recv_handler=self.recv_handler_table[device_type] self.recv_handler=self.recv_handler_table[device_type][0]
self.uid_length=self.recv_handler_table[device_type][1]
self.set_infotext("设备已切换为:"+device_type) self.set_infotext("设备已切换为:"+device_type)
# 更换端口时关闭之前的 # 更换端口时关闭之前的
@@ -402,7 +417,7 @@ class coder(QObject):
self.set_port_state(False) self.set_port_state(False)
def recv_slot(self,cmd:int,data:bytearray,err:str): def recv_slot(self,cmd:int,data:bytearray,err:str):
# print("recv:","cmd:",hex(cmd),"data:",data.hex(' ')) # print("recv:","cmd:",hex(cmd),"data:",data.hex(' '),"errstr:",err)
if(self.run_times<=0): if(self.run_times<=0):
print("run times end.") print("run times end.")
self.set_infotext("运行次数已结束,不再响应检测赋码指令") self.set_infotext("运行次数已结束,不再响应检测赋码指令")
@@ -430,6 +445,9 @@ class coder(QObject):
print(s) print(s)
self.set_infotext(s) self.set_infotext(s)
elif(cmd==0x8a): elif(cmd==0x8a):
# print("recv keepliver .data:",data.hex(' '))
if(data[0]==0):
# 只在正常的心跳数据做回复
self.cmd_user(0x8a,bytearray([0])) self.cmd_user(0x8a,bytearray([0]))
elif(cmd==0x91): elif(cmd==0x91):
# 输入通道状态 # 输入通道状态
@@ -440,11 +458,12 @@ class coder(QObject):
# 批检仪的处理函数 # 批检仪的处理函数
def recv_deal_checker(self,cmd:int,data:bytearray,err:str): def recv_code_after_check_checker(self,cmd:int,data:bytearray,err:str):
ack=False ack=False
if(cmd==0x81): if(cmd==0x81):
self.set_infotext("已接收检测结果") self.set_infotext("已接收检测结果")
ack=self.decode_check(data) ack=self.decode_check(data)
ack=True
if(ack==True): if(ack==True):
self.cmd_code(self.slave_num) self.cmd_code(self.slave_num)
else: else:
@@ -467,11 +486,30 @@ class coder(QObject):
self.cmd_moter_down() self.cmd_moter_down()
time.sleep(2) time.sleep(2)
self.cmd_check(self.slave_num) self.cmd_check(self.slave_num)
# 批检仪检测时赋码处理函数
def recv_code_with_check_checker(self,cmd:int,data:bytearray,err:str):
ack=False
if(cmd==0x82):
self.set_infotext("已接收赋码结果")
ack=self.decode_code(data)
if(ack!=True):
print("code failed.")
self.set_infotext("赋码出现异常,本次赋码结果被丢弃,请排查异常后重试")
self.cmd_moter_up()
self.params_active(True)
elif(cmd==0x37):
print("key press.")
self.params_active(False)
self.set_infotext("已接收请求赋码命令")
self.cmd_moter_down()
time.sleep(2)
self.cmd_code(self.slave_num)
# 初始化处理函数列表 # 初始化处理函数列表
def recv_handler_table_init(self): def recv_handler_table_init(self):
self.recv_handler_table={"批检仪":self.recv_deal_checker, self.recv_handler_table={"批检仪检测后赋码":(self.recv_code_after_check_checker,16),
"赋码控制器":self.recv_deal_coder2ch} "批检仪检测时赋码":(self.recv_code_with_check_checker,15),
"赋码控制器":(self.recv_deal_coder2ch,15)}
def run(self,times:int): def run(self,times:int):
self.run_times=times*4 self.run_times=times*4
@@ -523,7 +561,10 @@ class coder(QObject):
# 发送赋码指令 # 发送赋码指令
def cmd_code(self,num:int): def cmd_code(self,num:int):
try:
self.ser.send(2,self.creat_code_data(self.code_id,num)) self.ser.send(2,self.creat_code_data(self.code_id,num))
except Exception as e:
self.set_infotext("发送命令失败,是否没有打开串口?")
print("code start.") print("code start.")
# 发送任意命令 # 发送任意命令
@@ -564,12 +605,18 @@ class coder(QObject):
code_list=[] code_list=[]
# 生成注码结果数据 # 生成注码结果数据
for i in range(num): for i in range(num):
ack_i=data[39*i+2] item_len=13+self.uid_length+8+2
str_start="" ack_i=data[item_len*i+2]
d=data[39*i+3:39*i+3+38] d=data[item_len*i+3:item_len*i+3+item_len-1]
try:
shell_code=d[:13].decode("utf-8") shell_code=d[:13].decode("utf-8")
uid_code=d[13:13+16].decode("utf-8") uid_code=d[13:13+self.uid_length].decode("utf-8")
psw_code=d[13+16:13+16+8].decode("utf-8") psw_code=d[13+self.uid_length:13+self.uid_length+8].decode("utf-8")
except Exception as e:
shell_code="unknown"
uid_code="unknown"
psw_code="unknown"
# print("psw:",d.decode("utf-8"))
code_list.append(((i+1),ack_i,shell_code,uid_code,psw_code)) code_list.append(((i+1),ack_i,shell_code,uid_code,psw_code))
# 统计错误信息 # 统计错误信息

View File

@@ -74,6 +74,8 @@ code_errinfo_list=[
"6:未找到相关任务", "6:未找到相关任务",
"7:过流", "7:过流",
"8:短路", "8:短路",
"52:三码绑定失败",
"53:三码验证失败",
"193:电压设置失败", "193:电压设置失败",
"194:三码验证失败", "194:三码验证失败",
"195:UID写入失败", "195:UID写入失败",
@@ -82,7 +84,8 @@ code_errinfo_list=[
"198:UID比对失败", "198:UID比对失败",
"199:锁存失败", "199:锁存失败",
"200:等待接入超时", "200:等待接入超时",
"201:已存在其他数据" "201:已存在其他数据",
"208:超时"
] ]
def code_errinfo(errcode:int): def code_errinfo(errcode:int):

View File

@@ -117,7 +117,7 @@ if __name__ == "__main__":
# 赋码仪设备串口测试 # 赋码仪设备串口测试
p.open("com5",115200) p.open("com5",115200)
p.coder_test(5) p.coder_test(1)
# p.open("com16",115200) # p.open("com16",115200)
# p.coder_test(1000) # p.coder_test(1000)

View File

@@ -117,6 +117,7 @@ def scheme_taskids_to_byte(j:json):
t.append((j["PlanID"]>>8)&0xff) t.append((j["PlanID"]>>8)&0xff)
t.append((j["PlanID"]>>16)&0xff) t.append((j["PlanID"]>>16)&0xff)
t.append((j["PlanID"]>>24)&0xff) t.append((j["PlanID"]>>24)&0xff)
print("calc planid:",t.hex(","))
for i in j["TaskArray"]: for i in j["TaskArray"]:
t.append(i["TaskID"]) t.append(i["TaskID"])
length=len(t) length=len(t)