添加检测时赋码
心跳ack为0时才回复
This commit is contained in:
@@ -59,5 +59,8 @@
|
||||
实现U盘升级脚本,updata添加升级服务文件功能
|
||||
串口控制台添加升级服务文件功能
|
||||
添加同步设备时间的按钮
|
||||
|
||||
2023.9.26
|
||||
添加批检仪检测时赋码(JQ芯片)
|
||||
添加赋码按钮
|
||||
心跳ack为0时才发送回复,解决频繁回复造成赋码控制器内存耗尽
|
||||
|
||||
|
@@ -74,6 +74,8 @@ code_errinfo_list=[
|
||||
"6:未找到相关任务",
|
||||
"7:过流",
|
||||
"8:短路",
|
||||
"52:三码绑定失败",
|
||||
"53:三码验证失败"
|
||||
"193:电压设置失败",
|
||||
"194:三码验证失败",
|
||||
"195:UID写入失败",
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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():
|
||||
@@ -351,6 +361,10 @@ class coder(QObject):
|
||||
self.autotest_but.setText("关闭中...")
|
||||
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):
|
||||
@@ -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))
|
||||
|
||||
# 统计错误信息
|
||||
|
@@ -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):
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user