diff --git a/analysis/analysis.py b/analysis/analysis.py index 2a0fdb7..95c927a 100644 --- a/analysis/analysis.py +++ b/analysis/analysis.py @@ -21,57 +21,101 @@ import build_html plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False +plt.rcParams['figure.max_open_warning'] = False # 定义一个可以嵌入到qt的figure class QFigure(QObject): def __init__(self,title:str) -> None: QObject.__init__(self) - self.__figure = plt.figure(figsize=(14,7)) - self.__canvas = FigureCanvas(self.__figure) - self.__ax = self.__figure.add_axes([0.1,0.1,0.8,0.8]) - self.__ax.set_title(title) + self._figure = plt.figure(figsize=(14,7)) + self._canvas = FigureCanvas(self._figure) + self._ax = self._figure.add_axes([0.1,0.1,0.8,0.8]) + self._ax.set_title(title) self._title=title + self._line_min=None + self._line_max=None + self._max=0 + self._min=0 - def draw(self,x,y,lable:str=None,limit_max:int=None,limit_min:int=None): - line,=self.__ax.plot(x,y,) + def set_lines(self,x,y,lable:str=None,limit_max:int=None,limit_min:int=None): + line,=self._ax.plot(x,y,) if(lable!=None): line.set_label(lable) - self.__ax.legend() - if(limit_max!=None): - self.__ax.axhline(y=limit_max,color='g',linestyle='--') - if(limit_min!=None): - self.__ax.axhline(y=limit_min,color='r',linestyle='--') - # start, end = self.__ax.get_ylim() - # self.__ax.yaxis.set_ticks(np.arange(start, end,(end-start)/20),minor=True) - # ticks=self.__ax.yaxis.get_ticklocs() - # self.__ax.yaxis.set_ticks(minor=True) - # self.__ax.yaxis.set_ticks(ticks) - self.__ax.grid(visible=True,which="major",axis="y") - self.__canvas.draw() + self._ax.legend() + self.set_max(limit_max) + self.set_min(limit_min) + self._ax.grid(visible=True,which="major",axis="y") + def draw(self): + # start, end = self._ax.get_ylim() + start=self._min + end=self._max + step=(end-start)//20 + bond=(end-start)//100+1 + self._ax.set_ylim(start-bond,end+bond) + if(step>0): + ticks=np.arange(start, end,step) + self._ax.yaxis.set_ticks(ticks,minor=True) + # ticks=self._ax.yaxis.get_ticklocs() + # self._ax.yaxis.set_ticks(minor=True) + # self._ax.yaxis.set_ticks(ticks) + # self._ax.autoscale(enable=True, axis='both', tight=None) + self._canvas.draw() + def set_max(self,limit_max:int=None): + if(limit_max is not None): + if(self._line_max is not None): + self._line_max.remove() + self._line_max=None + print("remove max line") + self._line_max=self._ax.axhline(y=limit_max,color='g',linestyle='--') + self._max=limit_max + def set_min(self,limit_min:int=None): + if(limit_min is not None): + if(self._line_min is not None): + print("remove min line") + self._line_min.remove() + self._line_min=None + self._line_min=self._ax.axhline(y=limit_min,color='r',linestyle='--') + self._min=limit_min + def save(self,path:str,perfix:str): path=os.path.join(path,"pic") if not os.path.exists(path): os.makedirs(path) name=os.path.join(path,perfix+self._title) - self.__figure.savefig(name+'.png') + self._figure.savefig(name+'.png') def lable(self,lablex,labley): - self.__ax.set_ylabel(labley) - self.__ax.set_xlabel(lablex) + self._ax.set_ylabel(labley) + self._ax.set_xlabel(lablex) def canvas(self): - return self.__canvas + return self._canvas # 定义一个任务需要的参数布局 class TParamLayout(QObject): - def __init__(self) -> None: + item_change_signal =pyqtSignal([int,str,str]) + def __init__(self,index) -> None: QObject.__init__(self) - self.__layout=QFormLayout() - self.__items=[] + self._layout=QFormLayout() + self._items=[] + self._index=index + def change_slot(self,text:str): + edit=self.sender() + # name=self.find_label(edit) + # print(edit.text()) 不用转换类型,直接就可以用 QLineEdit 的方法 + name=edit.objectName() + # print(name,"text changed",text) + self.item_change_signal.emit(self._index,name,text) + def find_label(self,edit): + for i in self._items: + if(i[1]==edit): + return i[0].text() + return "none" def add_item(self,name:str,value:str="",tooltip:str=None): line_edit = QLineEdit() - line_edit.setObjectName(value) + line_edit.setObjectName(name) line_edit.setText(value) + line_edit.textChanged.connect(self.change_slot) line_edit_label = QLabel() line_edit_label.setObjectName(name) line_edit_label.setText(name) @@ -79,20 +123,20 @@ class TParamLayout(QObject): if(tooltip!=None): line_edit_label.setToolTip(tooltip) line_edit.setToolTip(tooltip) - self.__layout.addRow(line_edit_label,line_edit) - self.__items.append((line_edit_label,line_edit)) + self._layout.addRow(line_edit_label,line_edit) + self._items.append((line_edit_label,line_edit)) def item_value(self,name:str): - for i in self.__items: + for i in self._items: if(i[0].text()==name): return i[1].text() return None def values(self): vals=[] - for i in self.__items: + for i in self._items: vals.append((i[0].text(),i[1].text())) return vals def layout(self): - return self.__layout + return self._layout class Analysis(QWidget): data_recv_end_signal =pyqtSignal([list,list]) @@ -102,18 +146,28 @@ class Analysis(QWidget): self.setWindowTitle("检测数据分析") self.calc_item_end_signal.connect(self.calc_item_end_slot) self.data_recv_end_signal.connect(self.data_recv_end_slot) - self.__import_but = QPushButton("导入方案",self) - self.__import_but.clicked.connect(self.import_but_clicked) - self.__import_but.setGeometry(QRect(0,0,100,27)) - self.__export_but = QPushButton("导出数据") - self.__export_but.clicked.connect(self.export_but_clicked) + self._import_but = QPushButton("导入方案",self) + self._import_but.clicked.connect(self.import_but_clicked) + self._import_but.setGeometry(QRect(0,0,100,27)) + self._export_but = QPushButton("导出数据") + self._export_but.clicked.connect(self.export_but_clicked) - self.__scroll=QScrollArea(self) - self.__scroll.setGeometry(0,30,1230,700) + self._scroll=QScrollArea(self) + self._scroll.setGeometry(0,30,1230,700) # 设置布局 - self.__layout = QFormLayout() - self.__layout.addRow(' ',self.__export_but) - self.__items=[] + self._layout = QFormLayout() + self._layout.addRow(' ',self._export_but) + self._items=[] + def item_changed_slot(self,index:int,name:str,value:str): + print(index,name,value) + if(len(value)==0): + return + figure=self._items[index][0] + if(name.find("LimitMax")>=0): + figure.set_max(int(value)) + if(name.find("LimitMin")>=0): + figure.set_min(int(value)) + figure.draw() def add_item(self,data_dict:dict): data=data_dict["data"] x=data_dict["x"] @@ -129,7 +183,7 @@ class Analysis(QWidget): y=data_dict["y"] figure = QFigure(name) figure.lable("序号","数值") - tplayout=TParamLayout() + tplayout=TParamLayout(self._item_index) tplayout.add_item(name+":Max",str(max)) tplayout.add_item(name+":Min",str(min)) tplayout.add_item(name+":Avg",str(avg)) @@ -137,11 +191,13 @@ class Analysis(QWidget): tplayout.add_item(name+":Std",str(std)) tplayout.add_item(name+":LimitMax",str(limit_max)) tplayout.add_item(name+":LimitMin",str(limit_min)) - self.__layout.addRow(figure.canvas(),tplayout.layout()) - figure.draw(range(len(data)),data,lable="原始值",limit_max=limit_max,limit_min=limit_min) - figure.draw(dat_count,y,lable="权重") + tplayout.item_change_signal.connect(self.item_changed_slot) + self._layout.addRow(figure.canvas(),tplayout.layout()) + figure.set_lines(range(len(data)),data,lable="原始值",limit_max=limit_max,limit_min=limit_min) + figure.set_lines(dat_count,y,lable="权重") + figure.draw() # figure.save(self._save_path,str(self._item_index)+".") - self.__items.append((figure,tplayout,self._item_index)) + self._items.append((figure,tplayout,self._item_index)) self._item_index+=1 def calc_item_end_slot(self,data:list): print("calc_item end.") @@ -149,8 +205,8 @@ class Analysis(QWidget): widget.setGeometry(QRect(0,0,1200,20000)) for i in data: self.add_item(i) - widget.setLayout(self.__layout) - self.__scroll.setWidget(widget) + widget.setLayout(self._layout) + self._scroll.setWidget(widget) def calc_item(self,data,name:str): length=len(data) @@ -188,7 +244,7 @@ class Analysis(QWidget): # 连接的绘制的方法 def import_but_clicked(self): self.sch_data=scheme_data.sch_data() - self.__import_but.setEnabled(False) + self._import_but.setEnabled(False) ack=self.sch_data.select_scheme() if(ack!=True): return @@ -219,7 +275,7 @@ class Analysis(QWidget): def export_but_clicked(self): ret_limit=[] ret_values=[] - for i,t in zip(self.__items,self.titles): + for i,t in zip(self._items,self.titles): max=i[1].item_value(t+":LimitMax") min=i[1].item_value(t+":LimitMin") ret_limit.append((max,min)) diff --git a/analysis/scheme_data.py b/analysis/scheme_data.py index e82cd6c..ff04068 100644 --- a/analysis/scheme_data.py +++ b/analysis/scheme_data.py @@ -325,5 +325,52 @@ class sch_data(object): save_f.write(json_str.encode("utf-8")) save_f.close() print("scheme export end.") + + + + +# 显示所有方案文件的方案id + + +# 找到指定后缀的文件 +def find_type(path:str,fix:str): + # path = os.getcwd() + # print("path",path) + list=os.listdir(path) + # print("list",list) + file_list=[] + for i in list: + ps=os.path.join(path, i) + if os.path.isdir(ps): + # print("path join",ps) + file_list+=find_type(ps,fix) + else: + if(ps[-len(fix):]==fix): + file_list.append(ps) + # print("file_list", file_list) + return file_list + + + +def show_scheme_id(file_list): + id_list=[] + for i in file_list: + with open(i,"rb") as f: + json_obj=json.loads(f.read()) + try: + id_list.append((i,json_obj["PlanID"])) + except Exception as e: + id_list.append((i,0)) + return id_list + + + + + + if __name__ == "__main__": - _main() + # _main() + file_list=find_type('./','.json') + id_list=show_scheme_id(file_list) + for i in id_list: + print(i[1],i[0]) diff --git a/updata/creat_slave_boot.py b/updata/creat_slave_boot.py index 2d970f2..658b626 100644 --- a/updata/creat_slave_boot.py +++ b/updata/creat_slave_boot.py @@ -5,10 +5,10 @@ import json import prottcp -BOOT_PATH ="file/checker_slave_boot_can.bin" -APP_PATH ="file/checker_slave_app_can.bin" -SCHEME_PATH = "file/YM硬件EX工厂注码091902--9.json" -OUT_PATH = "file/checker_slave_boot_can_.bin" +BOOT_PATH ="file/checker_slave_boot_uart--1.bin" +APP_PATH ="file/checker_slave_app_uart_20230912--2.bin" +SCHEME_PATH = "file/YM硬件EJ工厂注码103101--17.json" +OUT_PATH = "file/checker_slave_boot_uart_.bin" # 创建离线下载器的镜像