添加检测时赋码

心跳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添加升级服务文件功能
串口控制台添加升级服务文件功能
添加同步设备时间的按钮
2023.9.26
添加批检仪检测时赋码JQ芯片
添加赋码按钮
心跳ack为0时才发送回复解决频繁回复造成赋码控制器内存耗尽

View File

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

View File

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

View File

@@ -56,6 +56,7 @@ class coder(QObject):
self.recv_handler=None
self.autoinc_id=False
self.autotest_is_open=0
self.uid_length=16
self.ser=prot.protu()
self.widget = QWidget()
self.widget.resize(1500, 800)
@@ -76,6 +77,7 @@ class coder(QObject):
self.posend_but_init()
self.autotest_but_init()
self.stop_but_init()
self.code_but_init()
self.widget.destroyed.connect(self.quit)
def quit(self):
@@ -199,7 +201,7 @@ class coder(QObject):
def com_but_init(self):
self.com_but = QPushButton(self.widget)
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.clicked.connect(self.com_but_clicked)
@@ -252,11 +254,19 @@ class coder(QObject):
self.stop_state=True
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):
self.device_type_list = QComboBox(self.widget)
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.currentIndexChanged.connect(self.device_type_changed)
for i in self.recv_handler_table.items():
@@ -352,6 +362,10 @@ class coder(QObject):
self.autotest_is_open=3
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):
self.dot_fat.setEnabled(power)
@@ -373,7 +387,8 @@ class coder(QObject):
# 设备类型发生了改变
def device_type_changed(self,index:int):
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)
# 更换端口时关闭之前的
@@ -402,7 +417,7 @@ class coder(QObject):
self.set_port_state(False)
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):
print("run times end.")
self.set_infotext("运行次数已结束,不再响应检测赋码指令")
@@ -430,7 +445,10 @@ class coder(QObject):
print(s)
self.set_infotext(s)
elif(cmd==0x8a):
self.cmd_user(0x8a,bytearray([0]))
# print("recv keepliver .data:",data.hex(' '))
if(data[0]==0):
# 只在正常的心跳数据做回复
self.cmd_user(0x8a,bytearray([0]))
elif(cmd==0x91):
# 输入通道状态
print("input:channel({d1})={d2}".format(d1=int(data[0]),d2=int(data[1])))
@@ -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
if(cmd==0x81):
self.set_infotext("已接收检测结果")
ack=self.decode_check(data)
ack=True
if(ack==True):
self.cmd_code(self.slave_num)
else:
@@ -467,11 +486,30 @@ class coder(QObject):
self.cmd_moter_down()
time.sleep(2)
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):
self.recv_handler_table={"批检仪":self.recv_deal_checker,
"赋码控制器":self.recv_deal_coder2ch}
self.recv_handler_table={"批检仪检测后赋码":(self.recv_code_after_check_checker,16),
"批检仪检测时赋码":(self.recv_code_with_check_checker,15),
"赋码控制器":(self.recv_deal_coder2ch,15)}
def run(self,times:int):
self.run_times=times*4
@@ -523,7 +561,10 @@ class coder(QObject):
# 发送赋码指令
def cmd_code(self,num:int):
self.ser.send(2,self.creat_code_data(self.code_id,num))
try:
self.ser.send(2,self.creat_code_data(self.code_id,num))
except Exception as e:
self.set_infotext("发送命令失败,是否没有打开串口?")
print("code start.")
# 发送任意命令
@@ -564,12 +605,18 @@ class coder(QObject):
code_list=[]
# 生成注码结果数据
for i in range(num):
ack_i=data[39*i+2]
str_start=""
d=data[39*i+3:39*i+3+38]
shell_code=d[:13].decode("utf-8")
uid_code=d[13:13+16].decode("utf-8")
psw_code=d[13+16:13+16+8].decode("utf-8")
item_len=13+self.uid_length+8+2
ack_i=data[item_len*i+2]
d=data[item_len*i+3:item_len*i+3+item_len-1]
try:
shell_code=d[:13].decode("utf-8")
uid_code=d[13:13+self.uid_length].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))
# 统计错误信息

View File

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

View File

@@ -117,7 +117,7 @@ if __name__ == "__main__":
# 赋码仪设备串口测试
p.open("com5",115200)
p.coder_test(5)
p.coder_test(1)
# p.open("com16",115200)
# 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"]>>16)&0xff)
t.append((j["PlanID"]>>24)&0xff)
print("calc planid:",t.hex(","))
for i in j["TaskArray"]:
t.append(i["TaskID"])
length=len(t)