From 6fa4ae47f0e5b2e1e47ea436682bc87ce431e87d Mon Sep 17 00:00:00 2001 From: ranchuan Date: Wed, 18 Oct 2023 18:23:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E6=A3=80=E4=BB=AA=E8=B5=8B=E7=A0=81?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=A0=B9=E6=8D=AE=E8=AE=BE=E5=A4=87=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=A6=81=E7=94=A8=E6=8C=89=E9=92=AE=20=E5=AE=88?= =?UTF-8?q?=E6=8A=A4=E8=BF=9B=E7=A8=8B=E6=B7=BB=E5=8A=A0=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=B0=8F=E6=9D=BF=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E6=97=B6=E8=9C=82=E9=B8=A3=E5=99=A8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReadMe.txt | 3 + coder/coder_test.py | 31 ++++---- coder_2ch/coder_main.py | 36 +++++++-- daemon/daemon.py | 170 ++++++++++++++++++++++++++++++++++++---- 4 files changed, 201 insertions(+), 39 deletions(-) diff --git a/ReadMe.txt b/ReadMe.txt index 2632512..335d4b8 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -73,4 +73,7 @@ 发送文件时打印文件的crc32 2023.10.16 updata.py 添加对.pkt文件的支持 +2023.10.18 + 批检仪赋码工具根据设备类型禁用按钮 + 守护进程添加升级小板功能,升级时蜂鸣器提示 diff --git a/coder/coder_test.py b/coder/coder_test.py index 6ff6e19..ce647ef 100644 --- a/coder/coder_test.py +++ b/coder/coder_test.py @@ -43,6 +43,7 @@ class port: try: while(num>len(d)): d+=self.ser.read(num-len(d)) + # print(d.hex(" ")) except Exception as a: print("port closed") return 0 @@ -95,18 +96,18 @@ class port: # 接收指令应答 self.recv(13) # 接收检测结果 - self.recv(72) + self.recv(42) end = time.perf_counter() print("检测耗时:",end-start) start2=time.perf_counter() - # 开始注码 - self.send(bytearray([0x59,0x6D,0x94,0x00,0x02,0xBE,0x01,0x0A,0x32,0x30,0x32,0x33,0x00,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x39,0x01,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x38,0x02,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x37,0x03,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x36,0x04,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x35,0x05,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x34,0x06,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x33,0x07,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x32,0x08,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x31,0x09,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x30,0x44,0xC1])) - # 接收指令应答 - self.recv(12) - # 接收注码 结果 - self.recv(401) - end = time.perf_counter() - print("注码耗时:",end-start2) + # # 开始注码 + # self.send(bytearray([0x59,0x6D,0x94,0x00,0x02,0xBE,0x01,0x0A,0x32,0x30,0x32,0x33,0x00,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x39,0x01,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x38,0x02,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x37,0x03,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x36,0x04,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x35,0x05,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x34,0x06,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x33,0x07,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x32,0x08,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x31,0x09,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x30,0x44,0xC1])) + # # 接收指令应答 + # self.recv(12) + # # 接收注码 结果 + # self.recv(401) + # end = time.perf_counter() + # print("注码耗时:",end-start2) end = time.perf_counter() print("总耗时:",end-start) @@ -129,18 +130,16 @@ def main(): print("串口号为:{d1} ,运行次数为:{d2}".format(d1=com,d2=count)) # 检测赋码仪系统测试 - p.open(com,115200) - p.ecode_test(count) + # p.open(com,115200) + # p.ecode_test(count) # 赋码仪设备串口测试 - # p.open("com7",115200) - # p.coder_test(1) - # p.open("com16",115200) - # p.coder_test(1000) + p.open(com,115200) + p.coder_test(count) # 赋码仪设备网口测试 # p.open("utcp",0) - # p.coder_test(5) + # p.coder_test(count) diff --git a/coder_2ch/coder_main.py b/coder_2ch/coder_main.py index f3bd3aa..1bdef0a 100644 --- a/coder_2ch/coder_main.py +++ b/coder_2ch/coder_main.py @@ -70,14 +70,14 @@ class coder(QObject): self.sig_list_init() self.moterup_init() self.infotext_init() - self.recv_handler_table_init() - self.device_type_init() self.autoinc_init() self.check_but_init() self.posend_but_init() self.autotest_but_init() self.stop_but_init() self.code_but_init() + self.recv_handler_table_init() + self.device_type_init() self.widget.destroyed.connect(self.quit) def quit(self): @@ -245,7 +245,7 @@ class coder(QObject): self.autotest_but.clicked.connect(self.autotest_but_clicked) self.autotest_but.setText("开自动测试") - # 自动测试 + # 急停 def stop_but_init(self): self.stop_but=QPushButton(self.widget) self.stop_but.setObjectName(u"stop_but") @@ -389,6 +389,13 @@ class coder(QObject): device_type=self.device_type_list.itemText(index) self.recv_handler=self.recv_handler_table[device_type][0] self.uid_length=self.recv_handler_table[device_type][1] + try: + for i in self.recv_handler_table: + if(i!=device_type): + self.recv_handler_table[i][3]() + self.recv_handler_table[device_type][2]() + except Exception as err: + print(str(err)) self.set_infotext("设备已切换为:"+device_type) # 更换端口时关闭之前的 @@ -507,9 +514,26 @@ class coder(QObject): # 初始化处理函数列表 def recv_handler_table_init(self): - self.recv_handler_table={"批检仪检测后赋码":(self.recv_code_after_check_checker,16), - "批检仪检测时赋码":(self.recv_code_with_check_checker,15), - "赋码控制器":(self.recv_deal_coder2ch,15)} + self.recv_handler_table={"批检仪检测后赋码":(self.recv_code_after_check_checker,16,self.change_enter_checker,self.change_exit_checker), + "批检仪检测时赋码":(self.recv_code_with_check_checker,15,self.change_enter_checker,self.change_exit_checker), + "赋码控制器":(self.recv_deal_coder2ch,15,self.change_enter_coder2ch,self.change_exit_coder2ch)} + + # 切换设备类型时进行的额外处理 + def change_enter_coder2ch(self): + self.check_but.setEnabled(True) + self.posend_but.setEnabled(True) + self.autotest_but.setEnabled(True) + self.stop_but.setEnabled(True) + def change_exit_coder2ch(self): + self.check_but.setEnabled(False) + self.posend_but.setEnabled(False) + self.autotest_but.setEnabled(False) + self.stop_but.setEnabled(False) + def change_enter_checker(self): + self.moterup.setEnabled(True) + def change_exit_checker(self): + self.moterup.setEnabled(False) + def run(self,times:int): self.run_times=times*4 diff --git a/daemon/daemon.py b/daemon/daemon.py index 0b9ec5f..895df48 100644 --- a/daemon/daemon.py +++ b/daemon/daemon.py @@ -6,6 +6,8 @@ import shutil import threading import re import time +import socket +import json @@ -13,18 +15,87 @@ import time - - - - - - - - - # 日志文件路径 log_filepath = '/home/root/log/daemon_log.txt' + + + + + +# 定义udp操作 +class myudp(object): + def __init__(self): + self.udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + local_addr = ("", 0) + self.udp.bind(local_addr) + self.udp.settimeout(10) + + def send_cmd(self,text:str): + send_data = text+"\n" + self.udp.sendto(send_data.encode("utf-8"), ("127.0.0.1", 7777)) + while True: + recv=self.recv() + print(recv) + if(recv==None) or (recv[:4]=="ack:"): + return recv + + def recv(self): + try: + recv_data = self.udp.recvfrom(1024) + recv_msg = recv_data[0] + send_addr = recv_data[1] + # print ("收到的信息为:", recv_msg.decode("utf-8")) + text=recv_msg.decode("utf-8") + return text + except Exception as err: + print("err:",str(err)) + return None + def close(self): + # 5.关闭套接字 + self.udp.close() + + + +# 定义蜂鸣器 +class beep(object): + def __init__(self) -> None: + try: + # self.bee=open("/sys/class/leds/user-led/brightness","w+") + self.bee=open("/sys/class/leds/beep/brightness","w+") + except Exception as err: + write_info("beep init err:"+str(err)) + def power(self,p:bool): + if(self.bee!=None): + if(p==True): + self.bee.write("1") + else: + self.bee.write("0") + self.bee.flush() + def close(self): + if(self.bee!=None): + self.power(False) + self.bee.close() + + + +# 配置信息读取 +class cfg(object): + def __init__(self) -> None: + try: + file=open("/home/root/config/cfg.json","rb") + self.json_obj=json.loads(file.read()) + file.close() + except Exception as err: + print(str(err)) + def slave_addrs(self): + addrs="" + if(self.json_obj!=None): + num=self.json_obj["slave_num"] + for i in range(num): + addrs+=str(i+1)+',' + return addrs[:-1] + def write_info(text:str): fm = '%Y-%m-%d %X' nowtime = time.strftime(fm, time.localtime()) @@ -45,13 +116,20 @@ class auto_updata(object): # self.file_path=self.sd_path+'/updata' self.file_path=self.sd_path self.sd_inserd_state = False + self.beep_power=False self.file_list=[] def sd_check(self): ack=os.path.exists(self.sd_path) if(ack!=self.sd_inserd_state): if(ack==True): write_info("sd inserd.") - self.copy_file() + if(self.copy_file()==True): + time.sleep(5) + self.beep_tip(True) + self.updata_slave() + self.beep_tip(False) + time.sleep(2.3) + self.beep_end() else: write_info("sd extracted.") self.sd_inserd_state=ack @@ -66,22 +144,72 @@ class auto_updata(object): write_info("|---| "+i) _do_cmd("systemctl stop atk-qtapp-start.service") _do_cmd("mkdir /home/root/config") - _do_cmd("cp "+self.find_file_by_type(".elf")+" /usr/local/QDesktop-fb") + _do_cmd("cp "+self.find_file_by_type([".elf"])+" /usr/local/QDesktop-fb") _do_cmd("chmod 777 /usr/local/QDesktop-fb") - _do_cmd("cp "+self.find_file_by_type(".bin")+" /home/root/config/checker_slave.bin") + _do_cmd("cp "+self.find_file_by_type([".bin"])+" /home/root/config/checker_slave.bin") + _do_cmd("cp "+self.find_file_by_type([".pkt"])+" /home/root/config/checker_slave.pkt") _do_cmd("cp "+self.find_file_by_type("scheme.json")+" /home/root/config/checker_ye_cfg.json") _do_cmd("cp "+self.file_path+"/cfg.json /home/root/config/cfg.json") _do_cmd("cp "+self.find_file_by_type(".axf")+" /lib/firmware/checker_m4.axf") # _do_cmd("cp "+self.find_file_by_type(".dtb")+" /boot/stm32mp157d-atk.dtb") _do_cmd("sync") _do_cmd("systemctl restart atk-qtapp-start.service") - write_info("autoupdata end.") + write_info("copy file end.") return True - def find_file_by_type(self,type:str): + def find_file_by_type(self,types:list): for i in self.file_list: - if(i[-len(type):]==type): + sp=i.split(".")[-1] + sp='.'+sp + if(sp in types): return self.file_path+'/'+i return "unknown" + def updata_slave(self): + cfg_f=cfg() + addrs=cfg_f.slave_addrs() + write_info("slave addrs:"+addrs) + slave_file=self.find_file_by_type([".bin"]) + if(slave_file!="unknown"): + write_info("updata slave:"+slave_file) + u=myudp() + cmd="mcu updata "+addrs+" /home/root/config/checker_slave.bin" + a=u.send_cmd(cmd) + if(a!=None): + write_info("|--| "+a) + slave_file=self.find_file_by_type([".pkt"]) + if(slave_file!="unknown"): + write_info("updata slave:"+slave_file) + u=myudp() + cmd="mcu updata "+addrs+" /home/root/config/checker_slave.pkt" + a=u.send_cmd(cmd) + if(a!=None): + write_info("|--| "+a) + + # 升级完成时的连续三声提示 + def beep_end(self): + b=beep() + for i in range(3): + b.power(True) + time.sleep(0.05) + b.power(False) + time.sleep(0.2) + b.close() + # 升级时的蜂鸣器提示 + def beep_tip(self,power:bool): + if(power==True) and (self.beep_power!=True): + self.beep_power=power + t = threading.Thread(target=self._beep_run, args=()) + t.start() + elif(power==False): + self.beep_power=power + def _beep_run(self): + b=beep() + while(self.beep_power==True): + b.power(True) + time.sleep(0.05) + b.power(False) + time.sleep(1.95) + b.close() + if __name__ == '__main__': dir_name=os.path.dirname(log_filepath) @@ -91,8 +219,16 @@ if __name__ == '__main__': while True: updata.sd_check() time.sleep(5) - - + # u=myudp() + # if(len(sys.argv)>=2): + # cmd=sys.argv[1] + # else: + # cmd="whos" + # updata.beep_tip(True) + # u.send_cmd(cmd) + # updata.beep_tip(False) + # time.sleep(5) + # updata.beep_end() # if __name__ == "__main__":