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