diff --git a/ReadMe.txt b/ReadMe.txt index c2209e2..85db9f8 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -59,5 +59,8 @@ 实现U盘升级脚本,updata添加升级服务文件功能 串口控制台添加升级服务文件功能 添加同步设备时间的按钮 - +2023.9.26 + 添加批检仪检测时赋码(JQ芯片) + 添加赋码按钮 + 心跳ack为0时才发送回复,解决频繁回复造成赋码控制器内存耗尽 diff --git a/coder/coder_params.py b/coder/coder_params.py index b9d53dd..a3c9cd8 100644 --- a/coder/coder_params.py +++ b/coder/coder_params.py @@ -74,6 +74,8 @@ code_errinfo_list=[ "6:未找到相关任务", "7:过流", "8:短路", + "52:三码绑定失败", + "53:三码验证失败" "193:电压设置失败", "194:三码验证失败", "195:UID写入失败", diff --git a/coder/coder_test.py b/coder/coder_test.py index b6d5af5..899d167 100644 --- a/coder/coder_test.py +++ b/coder/coder_test.py @@ -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) diff --git a/coder_2ch/coder_main.py b/coder_2ch/coder_main.py index c69706e..47c2409 100644 --- a/coder_2ch/coder_main.py +++ b/coder_2ch/coder_main.py @@ -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)) # 统计错误信息 diff --git a/coder_2ch/coder_params.py b/coder_2ch/coder_params.py index 4ca815a..8ed85b8 100644 --- a/coder_2ch/coder_params.py +++ b/coder_2ch/coder_params.py @@ -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): diff --git a/coder_2ch/coder_test.py b/coder_2ch/coder_test.py index b6d5af5..9ea4078 100644 --- a/coder_2ch/coder_test.py +++ b/coder_2ch/coder_test.py @@ -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) diff --git a/updata/prottcp.py b/updata/prottcp.py index 22d3755..38d2d23 100644 --- a/updata/prottcp.py +++ b/updata/prottcp.py @@ -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)