From 22f370322412074174cde20ecfd14ec03657ab63 Mon Sep 17 00:00:00 2001 From: lyg <1543117173@qq.com> Date: 星期一, 07 七月 2025 16:20:25 +0800 Subject: [PATCH] 生成数据库 --- knowledgebase/gen_base_db/json_generate.py | 640 +++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 391 insertions(+), 249 deletions(-) diff --git a/knowledgebase/gen_base_db/json_generate.py b/knowledgebase/gen_base_db/json_generate.py index 52084bb..062ed24 100644 --- a/knowledgebase/gen_base_db/json_generate.py +++ b/knowledgebase/gen_base_db/json_generate.py @@ -9,15 +9,32 @@ import time import json +import data_templates +from knowledgebase.db.doc_db_helper import doc_dbh from knowledgebase.llm import llm from knowledgebase import utils from langchain_core.prompts import ChatPromptTemplate -from langchain_core.messages import HumanMessage,SystemMessage +from langchain_core.messages import HumanMessage, SystemMessage +import textwrap + +from knowledgebase.log import Log USE_CACHE = True + class JsonGenerate: + project: dict + devs: list[dict] + cadu: dict + vcs: list[dict] + tm_pkts: list[dict] + vc_pkts: list[dict] + bus_pkts: list[dict] + tc_frame: dict + tc_pkt_format: dict + tc_pkts: dict + def __init__(self): self.llm = llm self.systemPrompt = """ @@ -68,9 +85,18 @@ - 鎵�杈撳嚭鐨勫唴瀹瑰繀椤绘寜鐓SON鏍煎紡杩涜缁勭粐锛屼笉鑳藉亸绂绘鏋惰姹傦紝涓斾弗鏍奸伒寰枃妗e唴瀹硅繘琛岃緭鍑猴紝鍙緭鍑� JSON 锛屼笉瑕佽緭鍑哄叾瀹冩枃瀛椼�� - 涓嶈緭鍑轰换浣曟敞閲婄瓑鎻忚堪鎬т俊鎭�� """ - + # 妯″瀷璋冪敤 - def call_model(self, msg, cache_file, doc, validation=None, try_cnt=3): + def call_model(self, msg: str, cache_file: str, doc: str, validation=None, try_cnt=3) -> str: + """ + 璋冪敤澶фā鍨� + :param msg: 闂 + :param cache_file: 鐢熸垚缁撴灉缂撳瓨鏂囦欢 + :param doc: 鏂囨。鏂囨湰 + :param validation: 鏍¢獙鍑芥暟锛�(text: str)-> None + :param try_cnt: 澶辫触閲嶈瘯娆℃暟 + :return: 鐢熸垚鐨勬枃鏈� + """ if USE_CACHE and os.path.isfile(cache_file): with open(cache_file, 'r', encoding='utf-8') as f: text = f.read() @@ -81,44 +107,64 @@ messages.append(HumanMessage(info)) prompt = ChatPromptTemplate.from_messages(messages) chain = prompt | self.llm + # 鍘婚櫎澶氫綑鐨勭缉杩� + msg = textwrap.dedent(msg).strip() resp = chain.invoke({"msg": msg}) text = resp.content if validation: try: validation(text) except BaseException as e: - print(e) + Log.error(e) if try_cnt <= 0: raise RuntimeError('鐢熸垚澶辫触锛岄噸璇曟鏁板お澶氾紝寮哄埗缁撴潫锛�') return self.call_model(msg, cache_file, validation, try_cnt - 1) if cache_file: with open(cache_file, 'w', encoding='utf-8') as f: f.write(text) - print(f'鑰楁椂锛歿time.time() - s}') + Log.info(f'鑰楁椂锛歿time.time() - s}') return text - # :param type: int - None 鍏ㄩ儴銆�1 閬ユ祴銆�2 閬ユ帶 - def run(self,type): + @staticmethod + def get_text_with_entity(entity_names: list[str]) -> str: + """ + 鏍规嵁瀹炰綋璇嶈幏鍙栨枃妗f枃鏈� + :param entity_names: str - 瀹炰綋璇嶅悕绉� + :return: str - 鏂囨湰鍐呭 + """ + return doc_dbh.get_text_with_entities(entity_names) + + @staticmethod + def get_texts_with_entity(entity_names: list[str]) -> list[str]: + """ + 鏍规嵁瀹炰綋璇嶈幏鍙栨枃妗f枃鏈� + :param entity_names: str - 瀹炰綋璇嶅悕绉� + :return: str - 鏂囨湰鍐呭 + """ + return doc_dbh.get_texts_with_entities(entity_names) + + def run(self): # 鏍规嵁鏂囨。锛岀敓鎴愮粨鏋勫寲鏁版嵁 - if type is not None: - if type == 1: - self.handle_yc_structured_data() - if type == 2: - self.handle_yk_structured_data() - else: - self.handle_yc_structured_data() - self.handle_yk_structured_data() - - # 閬ユ祴-start - def handle_yc_structured_data(self): + self.handle_tm_structured_data() + self.handle_tc_structured_data() + + # region start 閬ユ祴 + def handle_tm_structured_data(self): self.gen_project() self.gen_device() # 鑾峰彇椤圭洰淇℃伅 def gen_project(self): - _msg = '鏍规嵁鏂囨。杈撳嚭鍨嬪彿淇℃伅锛屽瀷鍙峰瓧娈靛寘鎷細鍚嶇О鍜屼唬鍙枫�備粎杈撳嚭鍨嬪彿杩欎竴绾с�備緥濡傦細{"name":"xxx","id":"xxx"}' - result = self.call_model(_msg, 'out/鍨嬪彿淇℃伅.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�']) - print('鍨嬪彿淇℃伅锛�' + result) + _msg = """ + # 鎸囦护 + 鏍规嵁鏂囨。鍐呭鍒嗘瀽鍨嬪彿淇℃伅锛屽瀷鍙峰瓧娈靛寘鎷細鍚嶇О鍜屼唬鍙枫�� + # 渚嬪瓙 + {"name":"xxx","id":"xxx"} + """ + doc_text = self.get_text_with_entity(['绯荤粺姒傝堪']) + text = self.call_model(_msg, 'out/鍨嬪彿淇℃伅.json', doc_text) + self.project = json.loads(text) + Log.info('鍨嬪彿淇℃伅锛�' + self.project) # 鑾峰彇璁惧淇℃伅 def gen_device(self): @@ -155,39 +201,100 @@ } ] """ - result = self.call_model(_msg, 'out/璁惧鍒楄〃.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�']) - print('璁惧鍒楄〃锛�' + result) + doc_text = self.get_text_with_entity(['绯荤粺姒傝堪', '鎬荤嚎绠$悊']) + text = self.call_model(_msg, 'out/璁惧鍒楄〃.json', doc_text) + Log.info('璁惧鍒楄〃锛�' + text) - devs = json.loads(result) + self.devs = json.loads(text) # 绫籗MU璁惧锛屽寘鍚仴娴嬪拰閬ユ帶鍔熻兘锛屽悕绉扮粨灏句负鈥滅鐞嗗崟鍏冣�� - like_smu_devs = list(filter(lambda it: it['hasTcTm'] and it['name'].endswith('绠$悊鍗曞厓'), devs)) + like_smu_devs = list(filter(lambda it: it['hasTcTm'] and it['name'].endswith('绠$悊鍗曞厓'), self.devs)) for dev in like_smu_devs: self.gen_tm_frame(dev) # 鎬荤嚎 - self.gen_bus() + hasBus = any(d['hasBus'] for d in self.devs) + if hasBus: + self.gen_bus() - def gen_tm_frame(self,dev): + def gen_tm_frame(self, dev): # 鎻掑叆鍩熷弬鏁板垪琛� - self.gen_insert_domain_params(dev) + insert_domain = self.gen_insert_domain_params(dev) + # VC婧愬寘鏍煎紡 + vc_pkt_fields = data_templates.vc_pkt_fields # 鑾峰彇铏氭嫙淇¢亾 vc - vcs = self.gen_vc(dev) + self.vcs = self.gen_vc(dev) + for vc in self.vcs: + vc['children'] = [] + vc['VCID'] = str(int(vc['VCID'], 2)) + for field in vc_pkt_fields: + if field['name'] == '鏁版嵁鍩�': + field['children'] = [] + vc['children'].append(dict(field)) + + def build_vcid_content(vcs): + _vcs = [] + for _vc in vcs: + _vcs.append(_vc['name'] + ',' + _vc['VCID']) + return ' '.join(_vcs) + + # VCID 瀛楁鍐呭 + vcid_content = build_vcid_content(self.vcs) + # 閬ユ祴甯х粨鏋勭敱妯℃澘鐢熸垚锛屽彧闇�鎻愪緵鐗瑰畾鍙傛暟 + tm_data = { + "vcidContent": vcid_content, + 'insertDomain': insert_domain, + } + self.cadu = data_templates.get_tm_frame(tm_data) + # 鑾峰彇vc婧愬寘 - vc_pkts = self.gen_pkt_vc(dev) + self.vc_pkts = self.gen_pkt_vc(dev) # 鑾峰彇婧愬寘鍒楄〃 - tm_pkts = self.gen_pkts(dev) + self.tm_pkts = self.gen_pkts(dev) # 鑾峰彇VC涓嬮潰鐨勯仴娴嬪寘鏁版嵁 - for vc in vcs: + for vc in self.vcs: # 姝C涓嬬殑閬ユ祴鍖呰繃婊� - _vc_pkts = filter(lambda it: it['vcs'].__contains__(vc['id']), vc_pkts) + _vc_pkts = filter(lambda it: it['vcs'].__contains__(vc['id']), self.vc_pkts) for _pkt in _vc_pkts: # 鍒ゆ柇閬ユ祴鍖呮槸鍚︽湁璇︾粏瀹氫箟 - if not next(filter(lambda it: it['name'] == _pkt['name'] and it['hasParams'], tm_pkts), None): + if not next(filter(lambda it: it['name'] == _pkt['name'] and it['hasParams'], self.tm_pkts), None): continue # 鑾峰彇鍖呰鎯� _pkt = self.gen_pkt_details(_pkt['name'], _pkt['id']) + epdu = next(filter(lambda it: it['name'] == '鏁版嵁鍩�', vc['children']), None) + if epdu and _pkt: + _pkt['children'] = _pkt['datas'] + _last_par = _pkt['children'][len(_pkt['children']) - 1] + _pkt['length'] = (_last_par['pos'] + _last_par['length']) + _pkt['pos'] = 0 + if 'children' not in epdu: + epdu['children'] = [] + # 娣诲姞瑙f瀽瑙勫垯鍚庣紑闃叉閲嶅 + _pkt['id'] = _pkt['id'] + '_' + vc['VCID'] + # 缁欏寘鍚嶅姞浠e彿鍓嶇紑 + if not _pkt['name'].startswith(_pkt['id']): + _pkt['name'] = _pkt['id'] + '_' + _pkt['name'] + epdu['children'].append(_pkt) + apid_node = next(filter(lambda it: it['name'].__contains__('搴旂敤杩囩▼'), _pkt['headers']), None) + ser_node = next(filter(lambda it: it['name'] == '鏈嶅姟', _pkt['headers']), None) + sub_ser_node = next(filter(lambda it: it['name'] == '瀛愭湇鍔�', _pkt['headers']), None) + _pkt['vals'] = \ + f"{apid_node['content']}/{int(ser_node['content'], 16)}/{int(sub_ser_node['content'], 16)}/" + # 閲嶆柊璁℃暟璧峰鍋忕Щ + self.compute_length_pos(self.cadu['children']) - def gen_insert_domain_params(self,dev): + def compute_length_pos(self, items: list): + length = 0 + pos = 0 + for child in items: + if 'children' in child: + self.compute_length_pos(child['children']) + child['pos'] = pos + if 'length' in child and isinstance(child['length'], int): + length = length + child['length'] + pos = pos + child['length'] + # node['length'] = length + + def gen_insert_domain_params(self, dev): _msg = """ # 鎸囦护 鎴戦渶瑕佷粠鏂囨。涓彁鍙栨彃鍏ュ煙鐨勫弬鏁板垪琛紝浣犺甯姪鎴戝畬鎴愭彃鍏ュ煙鍙傛暟鍒楄〃鐨勬彁鍙栥�� @@ -203,23 +310,28 @@ - 浠呰緭鍑篔SON鏂囨湰銆� # 渚嬪瓙 [ - { - "name": "閬ユ祴妯″紡瀛�", - "id": "TMS215", - "pos": 0, - "length": 8, - "type": "para" - } + { + "name": "閬ユ祴妯″紡瀛�", + "id": "TMS215", + "pos": 0, + "length": 8, + "type": "para" + } ] """ + def validation(gen_text): params = json.loads(gen_text) assert isinstance(params, list), '鎻掑叆鍩熷弬鏁板垪琛ㄦ暟鎹粨鏋勬渶澶栧眰蹇呴』鏄暟缁�' assert len(params), '鎻掑叆鍩熷弬鏁板垪琛ㄤ笉鑳戒负绌�' - result = self.call_model(_msg, 'out/'+dev.code+'_鎻掑叆鍩熷弬鏁板垪琛�.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation) - print('鎻掑叆鍩熷弬鏁板垪琛細' + result) - - def gen_vc(self,dev): + + doc_text = self.get_text_with_entity(['鎻掑叆鍩�']) + result = self.call_model(_msg, 'out/' + dev.code + '_鎻掑叆鍩熷弬鏁板垪琛�.json', doc_text, + validation) + Log.info('鎻掑叆鍩熷弬鏁板垪琛細' + result) + return json.loads(result) + + def gen_vc(self, dev): _msg = """ # 鎸囦护 鎴戦渶瑕佷粠鏂囨。涓彁鍙栬櫄鎷熶俊閬撳垪琛紝浣犺甯姪鎴戝畬鎴愯櫄鎷熶俊閬撳垪琛ㄧ殑鎻愬彇銆� @@ -246,11 +358,13 @@ def validation(gen_text): vcs = json.loads(gen_text) assert next(filter(lambda it: re.match('^[0-1]+$', it['VCID']), vcs)), '鐢熸垚鐨刅CID蹇呴』鏄簩杩涘埗' - result = self.call_model(_msg, 'out/'+dev.code+'_铏氭嫙淇¢亾.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation) - print('铏氭嫙淇¢亾锛�' + result) + + doc_text = self.get_text_with_entity(['铏氭嫙淇¢亾瀹氫箟']) + result = self.call_model(_msg, 'out/' + dev.code + '_铏氭嫙淇¢亾.json', doc_text, validation) + Log.info('铏氭嫙淇¢亾锛�' + result) return json.loads(result) - - def gen_pkt_vc(self,dev): + + def gen_pkt_vc(self, dev): _msg = """ # 鎸囦护 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭紝浣犺甯姪鎴戝畬鎴愰仴娴嬫簮鍖呬俊鎭殑鎻愬彇銆� @@ -263,22 +377,25 @@ - 涓嶈閬楁紡浠讳綍閬ユ祴婧愬寘銆� # 渚嬪瓙锛� [ - { - "id": "PMS001", - "name": "鏁扮鏁板瓧閲忓揩閫熸簮鍖�", - "vcs": ["VC1"], - "timeTags": ["瀹炴椂"] - }, + { + "id": "PMS001", + "name": "鏁扮鏁板瓧閲忓揩閫熸簮鍖�", + "vcs": ["VC1"], + "timeTags": ["瀹炴椂"] + }, ] """ + def validation(gen_text): pkts = json.loads(gen_text) assert len(pkts), 'VC婧愬寘鍒楄〃涓嶈兘涓虹┖' - result = self.call_model(_msg, 'out/'+dev.code+'_閬ユ祴VC婧愬寘.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation) - print('閬ユ祴婧愬寘鎵�灞炶櫄鎷熶俊閬擄細' + result) - return json.loads(result) - def gen_pkts(self,dev): + doc_text = self.get_text_with_entity(['閬ユ祴婧愬寘涓嬩紶鏃舵満']) + text = self.call_model(_msg, 'out/' + dev.code + '_閬ユ祴婧愬寘涓嬩紶鏃舵満.json', doc_text, validation) + Log.info('閬ユ祴婧愬寘鎵�灞炶櫄鎷熶俊閬擄細' + text) + return json.loads(text) + + def gen_pkts(self, dev): _msg = """ # 鎸囦护 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬪寘鏁版嵁锛屼綘瑕佹牴鎹枃妗e唴瀹瑰府鎴戝畬鎴愰仴娴嬪寘鏁版嵁鐨勬彁鍙栥�� @@ -304,190 +421,196 @@ } ] """ - result = self.call_model(_msg, 'out/'+dev.code+'_婧愬寘鍒楄〃.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�']) - print('閬ユ祴婧愬寘鍒楄〃锛�' + result) + doc_text = self.get_text_with_entity(['婧愬寘鍒楄〃']) + result = self.call_model(_msg, 'out/' + dev.code + '_婧愬寘鍒楄〃.json', doc_text) + Log.info('閬ユ祴婧愬寘鍒楄〃锛�' + result) return json.loads(result) - + def gen_pkt_details(self, pkt_name, pkt_id): - _msg = f""" - # 鎸囦护 - 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呯殑鏈�鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟锛屼綘瑕佸府鎴戝畬鎴愬弬鏁癰it浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟鐨勬彁鍙栥�� - # 闇�姹� - 杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘鐨勬渶鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟銆� - # 绾︽潫 - - 閬ユ祴婧愬寘鐨勫唴瀹瑰湪涓�涓〃鏍间腑瀹氫箟锛岃〃鏍肩粨鏉熷垯鍖呭唴瀹圭粨鏉燂紱 - - 鏁版嵁鍩熶腑姣忎竴琛屽搴斾竴涓弬鏁帮紱 - - 涓嶈璺ㄨ〃鏍兼彁鍙栵紱 - - 瀛楄妭浣嶇疆涓瓧鑺備綅缃槸浠�1寮�濮嬬殑锛宐it浣嶇疆鏄粠0寮�濮嬬殑锛� - - bit浣嶇疆璁$畻鍏紡涓猴細(N-1)*8+B锛屽叾涓璑鏄瓧鑺傛暟锛孊鏄痓it鏁帮紱 - - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑哄叾浠栦换浣曞瓧绗︺�� - # 渚嬪瓙锛� - {"last_par_pos":128, "par_num": 20} - """ - text = self.call_model(_msg, '', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�']) - result = json.loads(text) - last_par_pos = result['last_par_pos'] - par_num = result['par_num'] + cache_file = f'out/鏁版嵁鍖�-{pkt_name}.json' + if not os.path.isfile(cache_file): + # 鍏堥棶鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆 + Log.info(f'閬ユ祴婧愬寘鈥渰pkt_name}鈥濅俊鎭細') + _msg = f""" + # 鎸囦护 + 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呯殑鏈�鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟锛屼綘瑕佸府鎴戝畬鎴愬弬鏁癰it浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟鐨勬彁鍙栥�� + # 闇�姹� + 杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘鐨勬渶鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟銆� + # 绾︽潫 + - 閬ユ祴婧愬寘鐨勫唴瀹瑰湪涓�涓〃鏍间腑瀹氫箟锛岃〃鏍肩粨鏉熷垯鍖呭唴瀹圭粨鏉燂紱 + - 鏁版嵁鍩熶腑姣忎竴琛屽搴斾竴涓弬鏁帮紱 + - 涓嶈璺ㄨ〃鏍兼彁鍙栵紱 + - 瀛楄妭浣嶇疆涓瓧鑺備綅缃槸浠�1寮�濮嬬殑锛宐it浣嶇疆鏄粠0寮�濮嬬殑锛� + - bit浣嶇疆璁$畻鍏紡涓猴細(N-1)*8+B锛屽叾涓璑鏄瓧鑺傛暟锛孊鏄痓it鏁帮紱 + - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑哄叾浠栦换浣曞瓧绗︺�� + # 渚嬪瓙锛� + {"last_par_pos":128, "par_num": 20} + """ + doc_text = self.get_text_with_entity([pkt_id]) + text = self.call_model(_msg, '', doc_text) + result = json.loads(text) + last_par_pos = result['last_par_pos'] + par_num = result['par_num'] - _msg = f""" - # 鎸囦护 - 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭垪琛紝浣犺甯垜瀹屾垚閬ユ祴婧愬寘淇℃伅鍒楄〃鐨勬彁鍙栥�� - # 闇�姹� - 杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘銆� - 娉ㄦ剰锛氭渶鍚庝竴涓弬鏁扮殑璧峰bit鍋忕Щ浣嶇疆涓簕last_par_pos}銆� - """ + """ - 閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佺被鍨�(type)銆佸寘澶村睘鎬у垪琛�(headers)銆佹暟鎹煙鍙傛暟鍒楄〃(datas)锛岀被鍨嬩负 linear锛� - 鍖呭ご鐨勫睘鎬х殑瀛楁鍖呮嫭锛氬悕绉�(name)銆佷唬鍙�(id)銆佷綅缃�(pos)銆佸畾涔�(content)銆侀暱搴�(length)銆佺被鍨�(type)锛岀被鍨嬩负 para锛� - 鏁版嵁鍩熷弬鏁板瓧娈靛寘鎷細鍙傛暟鍚嶇О(name)銆佸弬鏁颁唬鍙�(id)銆佷綅缃�(pos)銆侀暱搴�(length)銆佸瓧鑺傞『搴�(byteOrder)锛岀被鍨嬩负 para锛� - - 鍖呭ご灞炴�у寘鎷細鍖呯増鏈彿銆佸寘绫诲瀷銆佸壇瀵煎ご鏍囪瘑銆佸簲鐢ㄨ繃绋嬫爣璇嗐�佸簭鍒楁爣璁般�佸寘搴忓垪璁℃暟銆佸寘闀裤�佹湇鍔°�佸瓙鏈嶅姟銆� - 鍖呭ご灞炴�х殑闀垮害锛氬寘鐗堟湰鍙凤紙3锛夈�佸寘绫诲瀷锛�1锛夈�佸壇瀵煎ご鏍囪瘑锛�1锛夈�佸簲鐢ㄨ繃绋嬫爣璇嗭紙11锛夈�佸簭鍒楁爣璁帮紙2锛夈�佸寘搴忓垪璁℃暟锛�14锛夈�佸寘闀匡紙16锛夈�佹湇鍔★紙8锛夈�佸瓙鏈嶅姟锛�8锛夈�� - - 琛ㄦ牸鍗曞厓鏍煎悎骞惰鏄庯細鍖呮牸涓瓨鍦ㄥ崟鍏冩牸鍚堝苟鐨勬儏鍐碉紝濡傛灉姘村钩鎴栧瀭鐩寸浉閭荤殑鍗曞厓鏍煎唴瀹逛竴鏍烽偅涔堣繖鍑犱釜鍐呭涓�鏍风殑鍗曞厓鏍兼湁鍙兘鏄竴涓悎骞跺崟鍏冩牸鍦ㄥ垎鏋愭椂搴旇褰撲綔鍚堝苟鍗曞厓鏍煎垎鏋愩�� - # 绾︽潫 - - 浠e彿鍛藉悕瑙勫垯锛氭暟瀛椼�佽嫳鏂囧瓧姣嶅拰涓嬪垝绾跨粍鎴愪笖浠ヨ嫳鏂囧瓧姣嶅拰涓嬪垝绾垮紑澶达紱 - - 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紝濡傛灉娌℃湁浠e彿鐢ㄥ悕绉扮殑鑻辨枃缈昏瘧浠f浛锛岀炕璇戝敖閲忕畝鐭紱 - - 濡傛灉鏈変唬鍙蜂弗鏍间緷鐓ф枃妗d腑鐨勪唬鍙凤紝鏂囨。涓殑浠e彿濡傛灉涓嶇鍚堜唬鍙峰懡鍚嶈鍒欏皢鐗规畩瀛楃杞崲涓轰笅鍒掔嚎锛屼緥濡傦細Rsv-1杞崲涓篟sv_1锛� - - 浣犻渶瑕佺悊瑙f暟鎹寘鐨勪綅缃俊鎭紝鐢变綅缃俊鎭緱鍒伴暱搴︼紝骞朵笖灏嗘墍鏈夎緭鍑哄崟浣嶇粺涓�杞崲涓� bits锛� - - pos瀛楁锛氭暟鍊肩被鍨嬶紝浠�0寮�濮嬭绠楋紝鐢遍暱搴︼紙length锛夌疮鍔犲緱鍒帮紱 - - 搴旂敤杩囩▼鏍囪瘑锛氬鏋滀笉鏄崄鍏繘鍒惰浆鎹负鍗佸叚杩涘埗锛岃浆鎹㈠畬鎴愬悗瑕侀獙璇佹槸鍚︽纭紝浠�0x寮�澶达紝锛� - - 鍖呭ご鍚庨潰鐨勬瘡涓�琛岄兘瀵瑰簲涓�涓弬鏁帮紝閫愯杈撳嚭鍙傛暟锛屼笉瑕侀仐婕忎换浣曞弬鏁帮紱 - - 绫讳技鈥濅繚鐣欙紙Rsv锛夆�滅殑琛屼篃瑕佸綋鍙傛暟鐢熸垚锛� - - 閲嶅鐨勮涔熻鐢熸垚锛� - - 娉ㄦ剰鍖呭唴瀹圭殑鑼冨洿锛屼笉瑕佹彁鍙栧埌鍏朵粬鍖呬腑鐨勫唴瀹癸紝鍖呭唴瀹归兘鍦ㄥ悓涓�涓〃鏍间腑锛� - - 瀛楄妭椤哄簭锛氬�间负澶х鈥淏鈥濓紝灏忕鈥淟鈥濓紝榛樿涓衡�淏鈥濓紱 - - 杈撳嚭涓ユ牸鎸夌収鏂囨。涓殑鍐呭鐢熸垚锛屼笉瑕佸垱閫犳枃妗d腑涓嶅瓨鍦ㄧ殑鍐呭锛� - - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑轰换浣曞叾浠栧唴瀹广�� - # 渚嬪瓙 - { - "name": "鏁扮缂撳彉閬ユ祴鍖�", - "id": "PMS003", - "type": "linear", - "headers": [ + _msg = f""" + # 鎸囦护 + 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭垪琛紝浣犺甯垜瀹屾垚閬ユ祴婧愬寘淇℃伅鍒楄〃鐨勬彁鍙栥�� + # 闇�姹� + 杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘銆� + 娉ㄦ剰锛氭渶鍚庝竴涓弬鏁扮殑璧峰bit鍋忕Щ浣嶇疆涓簕last_par_pos}銆� + """ + """ + 閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佺被鍨�(type)銆佸寘澶村睘鎬у垪琛�(headers)銆佹暟鎹煙鍙傛暟鍒楄〃(datas)锛岀被鍨嬩负 linear锛� + 鍖呭ご鐨勫睘鎬х殑瀛楁鍖呮嫭锛氬悕绉�(name)銆佷唬鍙�(id)銆佷綅缃�(pos)銆佸畾涔�(content)銆侀暱搴�(length)銆佺被鍨�(type)锛岀被鍨嬩负 para锛� + 鏁版嵁鍩熷弬鏁板瓧娈靛寘鎷細鍙傛暟鍚嶇О(name)銆佸弬鏁颁唬鍙�(id)銆佷綅缃�(pos)銆侀暱搴�(length)銆佸瓧鑺傞『搴�(byteOrder)锛岀被鍨嬩负 para锛� + + 鍖呭ご灞炴�у寘鎷細鍖呯増鏈彿銆佸寘绫诲瀷銆佸壇瀵煎ご鏍囪瘑銆佸簲鐢ㄨ繃绋嬫爣璇嗐�佸簭鍒楁爣璁般�佸寘搴忓垪璁℃暟銆佸寘闀裤�佹湇鍔°�佸瓙鏈嶅姟銆� + 鍖呭ご灞炴�х殑闀垮害锛氬寘鐗堟湰鍙凤紙3锛夈�佸寘绫诲瀷锛�1锛夈�佸壇瀵煎ご鏍囪瘑锛�1锛夈�佸簲鐢ㄨ繃绋嬫爣璇嗭紙11锛夈�佸簭鍒楁爣璁帮紙2锛夈�佸寘搴忓垪璁℃暟锛�14锛夈�佸寘闀匡紙16锛夈�佹湇鍔★紙8锛夈�佸瓙鏈嶅姟锛�8锛夈�� + + 琛ㄦ牸鍗曞厓鏍煎悎骞惰鏄庯細鍖呮牸涓瓨鍦ㄥ崟鍏冩牸鍚堝苟鐨勬儏鍐碉紝濡傛灉姘村钩鎴栧瀭鐩寸浉閭荤殑鍗曞厓鏍煎唴瀹逛竴鏍烽偅涔堣繖鍑犱釜鍐呭涓�鏍风殑鍗曞厓鏍兼湁鍙兘鏄竴涓悎骞跺崟鍏冩牸鍦ㄥ垎鏋愭椂搴旇褰撲綔鍚堝苟鍗曞厓鏍煎垎鏋愩�� + # 绾︽潫 + - 浠e彿鍛藉悕瑙勫垯锛氭暟瀛椼�佽嫳鏂囧瓧姣嶅拰涓嬪垝绾跨粍鎴愪笖浠ヨ嫳鏂囧瓧姣嶅拰涓嬪垝绾垮紑澶达紱 + - 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紝濡傛灉娌℃湁浠e彿鐢ㄥ悕绉扮殑鑻辨枃缈昏瘧浠f浛锛岀炕璇戝敖閲忕畝鐭紱 + - 濡傛灉鏈変唬鍙蜂弗鏍间緷鐓ф枃妗d腑鐨勪唬鍙凤紝鏂囨。涓殑浠e彿濡傛灉涓嶇鍚堜唬鍙峰懡鍚嶈鍒欏皢鐗规畩瀛楃杞崲涓轰笅鍒掔嚎锛屼緥濡傦細Rsv-1杞崲涓篟sv_1锛� + - 浣犻渶瑕佺悊瑙f暟鎹寘鐨勪綅缃俊鎭紝鐢变綅缃俊鎭緱鍒伴暱搴︼紝骞朵笖灏嗘墍鏈夎緭鍑哄崟浣嶇粺涓�杞崲涓� bits锛� + - pos瀛楁锛氭暟鍊肩被鍨嬶紝浠�0寮�濮嬭绠楋紝鐢遍暱搴︼紙length锛夌疮鍔犲緱鍒帮紱 + - 搴旂敤杩囩▼鏍囪瘑锛氬鏋滀笉鏄崄鍏繘鍒惰浆鎹负鍗佸叚杩涘埗锛岃浆鎹㈠畬鎴愬悗瑕侀獙璇佹槸鍚︽纭紝浠�0x寮�澶达紝锛� + - 鍖呭ご鍚庨潰鐨勬瘡涓�琛岄兘瀵瑰簲涓�涓弬鏁帮紝閫愯杈撳嚭鍙傛暟锛屼笉瑕侀仐婕忎换浣曞弬鏁帮紱 + - 绫讳技鈥濅繚鐣欙紙Rsv锛夆�滅殑琛屼篃瑕佸綋鍙傛暟鐢熸垚锛� + - 閲嶅鐨勮涔熻鐢熸垚锛� + - 娉ㄦ剰鍖呭唴瀹圭殑鑼冨洿锛屼笉瑕佹彁鍙栧埌鍏朵粬鍖呬腑鐨勫唴瀹癸紝鍖呭唴瀹归兘鍦ㄥ悓涓�涓〃鏍间腑锛� + - 瀛楄妭椤哄簭锛氬�间负澶х鈥淏鈥濓紝灏忕鈥淟鈥濓紝榛樿涓衡�淏鈥濓紱 + - 杈撳嚭涓ユ牸鎸夌収鏂囨。涓殑鍐呭鐢熸垚锛屼笉瑕佸垱閫犳枃妗d腑涓嶅瓨鍦ㄧ殑鍐呭锛� + - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑轰换浣曞叾浠栧唴瀹广�� + # 渚嬪瓙 { - "name": "鍖呮爣璇�", - "id": "packetIdentifier", - "pos": 0, - "content": "000", - "length": 8, - "type": "para" - } - ], - "datas": [ - { - "name": "XXX鍖�", - "id": "XXX", - "pos": 0, - "length": 8, - "byteOrder": "" - } - ] - """ - + "name": "鏁扮缂撳彉閬ユ祴鍖�", + "id": "PMS003", + "type": "linear", + "headers": [ + { + "name": "鍖呮爣璇�", + "id": "packetIdentifier", + "pos": 0, + "content": "000", + "length": 8, + "type": "para" + } + ], + "datas": [ + { + "name": "XXX鍖�", + "id": "XXX", + "pos": 0, + "length": 8, + "byteOrder": "" + } + ] + """ - def validation(gen_text): - _pkt = json.loads(gen_text) - with open(f'out/tmp/{time.time()}.json', 'w') as f: - f.write(gen_text) - assert 'headers' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈headers瀛楁' - assert 'datas' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈datas瀛楁' - print(f'鍙傛暟涓暟锛歿len(_pkt["datas"])}') - # assert par_num == len(_pkt['datas']), f'鏁版嵁鍩熷弬鏁颁釜鏁颁笉瀵癸紒棰勮{par_num}涓紝瀹為檯{len(_pkt["datas"])}' - assert last_par_pos == _pkt['datas'][-1]['pos'], '鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆涓嶅锛�' + def _validation(gen_text): + _pkt = json.loads(gen_text) + with open(f'out/tmp/{time.time()}.json', 'w') as f: + f.write(gen_text) + assert 'headers' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈headers瀛楁' + assert 'datas' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈datas瀛楁' + Log.info(f'鍙傛暟涓暟锛歿len(_pkt["datas"])}') + # assert par_num == len(_pkt['datas']), f'鏁版嵁鍩熷弬鏁颁釜鏁颁笉瀵癸紒棰勮{par_num}涓紝瀹為檯{len(_pkt["datas"])}' + assert last_par_pos == _pkt['datas'][-1]['pos'], '鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆涓嶅锛�' - result = self.call_model(_msg, f'out/鏁版嵁鍖�-{pkt_name}.json', [], ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation) - print(f'鏁版嵁鍖呪�渰pkt_name}鈥濅俊鎭細'+result) + result = self.call_model(_msg, f'out/鏁版嵁鍖�-{pkt_name}.json', doc_text, _validation) + Log.info(f'鏁版嵁鍖呪�渰pkt_name}鈥濅俊鎭細' + result) + pkt = json.loads(result) + else: + pkt = json.loads(utils.read_from_file(cache_file)) + pkt_len = 0 + for par in pkt['datas']: + par['pos'] = pkt_len + pkt_len += par['length'] + pkt['length'] = pkt_len + return pkt def gen_bus(self): - _msg = """ - # 鎸囦护 - 鎴戦渶瑕佷粠鏂囨。涓彁鍙栫粡鎬荤嚎鐨勬暟鎹寘鍒楄〃锛屼綘瑕佸府鍔╂垜瀹屾垚缁忔�荤嚎鐨勬暟鎹寘鍒楄〃鐨勬彁鍙栥�� - # 闇�姹� - 璇锋瀽鏂囨。锛屽垪鍑烘�荤嚎閫氫俊鍖呬紶杈撶害瀹氫腑鎻忚堪鐨勬墍鏈夋暟鎹寘鍒楄〃锛� - 鏁版嵁鍖呭瓧娈靛寘鎷細id(鏁版嵁鍖呬唬鍙�)銆乶ame(鏁版嵁鍖呭悕绉�)銆乤pid(16杩涘埗瀛楃涓�)銆乻ervice(鏈嶅姟瀛愭湇鍔�)銆乴ength(bit闀垮害)銆乮nterval(浼犺緭鍛ㄦ湡)銆乻ubAddr(瀛愬湴鍧�/妯″紡)銆乫rameNum(閫氫俊甯у彿)銆� - transSer(浼犺緭鏈嶅姟)銆乶ote(澶囨敞)銆乺tAddr(鎵�灞濺T鐨勫湴鍧�鍗佽繘鍒�)銆乺t(鎵�灞瀝t鍚嶇О)銆乼hroughBus(鏄惁缁忚繃鎬荤嚎)銆乥urst(鏄惁绐佸彂)銆乼ransDirect(浼犺緭鏂瑰悜)銆� - # 绾︽潫 - - frameNum锛氫娇鐢ㄦ枃妗d腑鐨勬枃鏈笉瑕佸仛浠讳綍杞崲锛� - - subAddr锛氬�间负鈥滄繁搴︹�濄�佲�滃钩閾衡�濄�佲�滄暟瀛椻�濇垨null锛� - - 鏄惁缁忚繃鎬荤嚎鐨勫垽鏂緷鎹細鈥滃娉ㄢ�濆垪濉啓浜嗗唴瀹圭被浼尖�滀笉缁忚繃鎬荤嚎鈥濈殑鏂囧瓧琛ㄧず涓嶇粡杩囨�荤嚎鍚﹀垯缁忚繃鎬荤嚎锛� - - 浼犺緭鏈嶅姟鍒嗕笁绉嶏細SetData(缃暟)銆丟etData(鍙栨暟)銆丏ataBlock(鏁版嵁鍧椾紶杈�)锛� - - 浼犺緭鏂瑰悜鍒嗏�濇敹鈥滃拰鈥濆彂鈥滐紝浼犺緭鏈嶅姟濡傛灉鏄�濆彇鏁扳�滄槸鈥濇敹鈥滐紝濡傛灉鏄�濇暟鎹潡浼犺緭鈥滃垯鏍规嵁鍖呮墍鍦ㄧ殑鍒嗙郴缁熶互鍙婅〃鏍肩殑鈥濅紶杈撴柟鍚戔�滃垪杩涜鍒ゆ柇锛屽垽鏂浜嶴MU鏉ヨ鏄敹杩樻槸鍙戯紱 - - 鏄惁绐佸彂锛氭牴鎹〃鏍间腑鐨勨�濅紶杈撳懆鏈熲�滃垪杩涜鍒ゆ柇锛屽鏋滃~鍐欎簡绫讳技鈥濈獊鍙戔�滅殑鏂囧瓧琛ㄧず鏄獊鍙戝惁鍒欒〃绀轰笉鏄獊鍙戯紱 - - 涓嶈婕忔帀浠讳綍涓�涓暟鎹寘锛� - - 鏁版嵁缁撴瀯鏈�澶栧眰鏄暟缁勶紝鏁扮粍鍏冪礌涓烘暟鎹寘锛屼互JSON鏍煎紡杈撳嚭锛屼笉瑕佽緭鍑篔SON浠ュ鐨勪换浣曟枃鏈�� - # 渚嬪瓙 - [ - { - "id": "PCS005", - "name": "鎬荤嚎绠$悊锛堝唴閮ㄦ寚浠わ級", - "apid": "418", - "service": "(1, 2)", - "length": 1, - "interval": 1000, - "subAddr": null, - "frameNum": "1|2", - "transSer": "DataBlock", - "note": "", - "rtAddr": 28, - "rt": "鏁版嵁鎺ュ彛鍗曞厓XIU", - "throughBus": true, - "burst": true, - "transDirect": "鍙�" - } - ] - """ + self.bus_pkts = [] + doc_text_list = self.get_texts_with_entity(['鍒嗙郴缁熸簮鍖�']) + for doc_text in doc_text_list: + _msg = """ + # 鎸囦护 + 鎴戦渶瑕佷粠鏂囨。涓彁鍙栫粡鎬荤嚎鐨勬暟鎹寘鍒楄〃锛屼綘瑕佸府鍔╂垜瀹屾垚缁忔�荤嚎鐨勬暟鎹寘鍒楄〃鐨勬彁鍙栥�� + # 闇�姹� + 璇锋瀽鏂囨。锛屽垪鍑烘�荤嚎閫氫俊鍖呬紶杈撶害瀹氫腑鎻忚堪鐨勬墍鏈夋暟鎹寘鍒楄〃锛� + 鏁版嵁鍖呭瓧娈靛寘鎷細id(鏁版嵁鍖呬唬鍙�)銆乶ame(鏁版嵁鍖呭悕绉�)銆乤pid(16杩涘埗瀛楃涓�)銆乻ervice(鏈嶅姟瀛愭湇鍔�)銆乴ength(bit闀垮害)銆乮nterval(浼犺緭鍛ㄦ湡)銆乻ubAddr(瀛愬湴鍧�/妯″紡)銆乫rameNum(閫氫俊甯у彿)銆� + transSer(浼犺緭鏈嶅姟)銆乶ote(澶囨敞)銆乺tAddr(鎵�灞濺T鐨勫湴鍧�鍗佽繘鍒�)銆乺t(鎵�灞瀝t鍚嶇О)銆乼hroughBus(鏄惁缁忚繃鎬荤嚎)銆乥urst(鏄惁绐佸彂)銆乼ransDirect(浼犺緭鏂瑰悜)銆� + # 绾︽潫 + - frameNum锛氫娇鐢ㄦ枃妗d腑鐨勬枃鏈笉瑕佸仛浠讳綍杞崲锛� + - subAddr锛氬�间负鈥滄繁搴︹�濄�佲�滃钩閾衡�濄�佲�滄暟瀛椻�濇垨null锛� + - 鏄惁缁忚繃鎬荤嚎鐨勫垽鏂緷鎹細鈥滃娉ㄢ�濆垪濉啓浜嗗唴瀹圭被浼尖�滀笉缁忚繃鎬荤嚎鈥濈殑鏂囧瓧琛ㄧず涓嶇粡杩囨�荤嚎鍚﹀垯缁忚繃鎬荤嚎锛� + - 浼犺緭鏈嶅姟鍒嗕笁绉嶏細SetData(缃暟)銆丟etData(鍙栨暟)銆丏ataBlock(鏁版嵁鍧椾紶杈�)锛� + - 浼犺緭鏂瑰悜鍒嗏�濇敹鈥滃拰鈥濆彂鈥滐紝浼犺緭鏈嶅姟濡傛灉鏄�濆彇鏁扳�滄槸鈥濇敹鈥滐紝濡傛灉鏄�濇暟鎹潡浼犺緭鈥滃垯鏍规嵁鍖呮墍鍦ㄧ殑鍒嗙郴缁熶互鍙婅〃鏍肩殑鈥濅紶杈撴柟鍚戔�滃垪杩涜鍒ゆ柇锛屽垽鏂浜嶴MU鏉ヨ鏄敹杩樻槸鍙戯紱 + - 鏄惁绐佸彂锛氭牴鎹〃鏍间腑鐨勨�濅紶杈撳懆鏈熲�滃垪杩涜鍒ゆ柇锛屽鏋滃~鍐欎簡绫讳技鈥濈獊鍙戔�滅殑鏂囧瓧琛ㄧず鏄獊鍙戝惁鍒欒〃绀轰笉鏄獊鍙戯紱 + - 涓嶈婕忔帀浠讳綍涓�涓暟鎹寘锛� + - 鏁版嵁缁撴瀯鏈�澶栧眰鏄暟缁勶紝鏁扮粍鍏冪礌涓烘暟鎹寘锛屼互JSON鏍煎紡杈撳嚭锛屼笉瑕佽緭鍑篔SON浠ュ鐨勪换浣曟枃鏈�� + # 渚嬪瓙 + [ + { + "id": "PCS005", + "name": "鎬荤嚎绠$悊锛堝唴閮ㄦ寚浠わ級", + "apid": "418", + "service": "(1, 2)", + "length": 1, + "interval": 1000, + "subAddr": null, + "frameNum": "1|2", + "transSer": "DataBlock", + "note": "", + "rtAddr": 28, + "rt": "鏁版嵁鎺ュ彛鍗曞厓XIU", + "throughBus": true, + "burst": true, + "transDirect": "鍙�" + } + ] + """ - def validation(gen_text): - json.loads(gen_text) + def validation(gen_text): + json.loads(gen_text) - result = self.call_model(_msg, 'out/鎬荤嚎.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation) - print('鎬荤嚎鏁版嵁鍖咃細' + result) - - pkts = json.loads(result) - # 绛涢�夌粡鎬荤嚎鐨勬暟鎹寘 - pkts = list(filter(lambda it: it['throughBus'], pkts)) - # 绛涢�夋湁apid鐨勬暟鎹寘 - pkts = list(filter(lambda it: it['apid'], pkts)) + result = self.call_model(_msg, 'out/鎬荤嚎.json', doc_text, validation) + Log.info('鎬荤嚎鏁版嵁鍖咃細' + result) - pkts2 = [] - for pkt in pkts: - if self.pkt_in_tm_pkts(pkt["name"]): - pkts2.append(pkt) - for pkt in pkts2: - self.gen_pkt_details(pkt['name'], pkt['id']) + pkts = json.loads(result) + # 绛涢�夌粡鎬荤嚎鐨勬暟鎹寘 + pkts = list(filter(lambda it: it['throughBus'], pkts)) + # 绛涢�夋湁apid鐨勬暟鎹寘 + pkts = list(filter(lambda it: it['apid'], pkts)) - def pkt_in_tm_pkts(self, pkt_name): - _msg = f""" - # 鎸囦护 - 鎴戦渶瑕佷粠鏂囨。涓垎鏋愬垽璇绘槸鍚︽湁鏌愪釜閬ユ祴鍖呯殑瀛楁琛ㄦ弿杩帮紝浣犺甯姪鎴戝垽鏂�� - # 闂 - 鏂囨。涓湁閬ユ祴鍖呪�渰pkt_name}鈥濈殑瀛楁琛ㄦ弿杩板悧锛� - 娉ㄦ剰锛氶仴娴嬪寘鐨勫瓧娈佃〃绱ф帴鐫�閬ユ祴鍖呯珷鑺傛爣棰橈紝濡傛灉绔犺妭鏍囬鍚庨潰鐪佺暐浜嗘垨鑰呰瑙亁xx鍒欐槸娌℃湁瀛楁琛ㄦ弿杩般�� - # 绾︽潫 - - 鏍规嵁鏂囨。鍐呭杈撳嚭锛� - - 閬ユ祴鍖呭悕绉板繀椤诲畬鍏ㄥ尮閰嶏紱 - - 杈撳嚭鈥滄棤鈥濇垨鈥滄湁鈥濓紝涓嶈杈撳嚭鍏朵粬浠讳綍鍐呭銆� - # 渚嬪瓙 - 鏈� - """ - text = self.call_model(_msg, f'out/pkts/鏈夋棤鏁版嵁鍖�-{pkt_name}.txt', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�']) - print(f'鏂囨。涓湁鏃犫�渰pkt_name}鈥濈殑瀛楁鎻忚堪锛�'+ text) - return text == '鏈�' + # pkts2 = [] + # todo 杩欎竴姝ュ簲璇ラ�氳繃鏁版嵁搴撶瓫閫夛紝鏁版嵁搴撲腑瀛樺偍浜嗘瘡涓暟鎹寘鐨勪唬鍙峰疄浣� + # for pkt in pkts: + # if self.pkt_in_tm_pkts(pkt["name"]): + # pkts2.append(pkt) + for pkt in pkts: + self.gen_pkt_details(pkt['name'], pkt['id']) + _pkt = self.gen_pkt_details(pkt['name'], pkt['id']) + if _pkt: + pkt['children'] = [] + pkt['children'].extend(_pkt['datas']) + pkt['length'] = _pkt['length'] + self.bus_pkts.extend(pkts) - # 閬ユ祴-end + # endregion 閬ユ祴-end - # 閬ユ帶-start - def handle_yk_structured_data(self): + # region start 閬ユ帶 + def handle_tc_structured_data(self): # 鏁版嵁甯ф牸寮� - self.gen_tc_transfer_frame_format() + self.tc_frame = self.gen_tc_transfer_frame_format() # 閬ユ帶鍖呮牸寮� - self.gen_tc_pkt_format() + self.tc_pkt_format = self.gen_tc_pkt_format() # 閬ユ帶鍖呭垪琛� - pkts = self.gen_tc_transfer_pkts() - for pkt in pkts: + self.tc_pkts = self.gen_tc_transfer_pkts() + for pkt in self.tc_pkts: # 閬ユ帶鍖呮暟鎹尯鍐呭 self.gen_tc_pkt_details(pkt) - + def gen_tc_transfer_frame_format(self): _msg = ''' # 鎸囦护 @@ -517,8 +640,14 @@ def validation(gen_text): json.loads(gen_text) - result = self.call_model(_msg, 'out/tc_transfer_frame.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation) - print('閬ユ帶甯ф牸寮忥細' + result) + doc_text = self.get_text_with_entity(['閬ユ帶甯ф牸寮�']) + text = self.call_model(_msg, 'out/tc_transfer_frame.json', doc_text, validation) + result: dict = json.loads(text) + format_text = utils.read_from_file('tpl/tc_transfer_frame.json') + format_text = utils.replace_tpl_paras(format_text, result) + frame = json.loads(format_text) + Log.info('閬ユ帶甯ф牸寮忥細' + format_text) + return frame def gen_tc_pkt_format(self): _msg = ''' @@ -551,28 +680,40 @@ def validation(gen_text): json.loads(gen_text) - result = self.call_model(_msg, 'out/tc_transfer_pkt.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation) - print('閬ユ帶鍖呮牸寮忥細' + result) - + doc_text = self.get_text_with_entity(['閬ユ帶鍖呮牸寮�']) + text = self.call_model(_msg, 'out/tc_transfer_pkt.json', doc_text, validation) + result = json.loads(text) + + format_text = utils.read_from_file('tpl/tc_pkt_format.json') + format_text = utils.replace_tpl_paras(format_text, result) + pkt_format = json.loads(format_text) + Log.info('閬ユ帶鍖呮牸寮忥細' + format_text) + return pkt_format + def gen_tc_transfer_pkts(self): - _msg = ''' - # 鎸囦护 - 鍒嗘瀽鏂囨。鍒楀嚭鎵�鏈夌殑閬ユ帶婧愬寘銆� - # 杈撳嚭渚嬪瓙锛� - [{ - "name": "xxx", - "code":"pkt", - "搴旂敤杩囩▼鏍囪瘑绗�":"0xAA", - "鏈嶅姟绫诲瀷":"0x1", - "鏈嶅姟瀛愮被鍨�":"0x2" - }] - ''' + doc_text_list = self.get_texts_with_entity(['APID鍒嗛厤']) + pkts = [] + for doc_text in doc_text_list: + _msg = ''' + # 鎸囦护 + 鍒嗘瀽鏂囨。鍒楀嚭鎵�鏈夌殑閬ユ帶婧愬寘銆� + # 杈撳嚭渚嬪瓙锛� + [{ + "name": "xxx", + "code":"pkt", + "搴旂敤杩囩▼鏍囪瘑绗�":"0xAA", + "鏈嶅姟绫诲瀷":"0x1", + "鏈嶅姟瀛愮被鍨�":"0x2" + }] + ''' - def validation(gen_text): - json.loads(gen_text) + def validation(gen_text): + json.loads(gen_text) - result = self.call_model(_msg, 'out/tc_transfer_pkts.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation) - print('閬ユ帶鍖呭垪琛細' + result) + text = self.call_model(_msg, 'out/tc_transfer_pkts.json', doc_text, validation) + Log.info('閬ユ帶鍖呭垪琛細' + text) + pkts.extend(json.loads(text)) + return pkts def gen_tc_pkt_details(self, pkt): tc_name = pkt['name'] @@ -620,7 +761,8 @@ def validation(gen_text): json.loads(gen_text) - result = self.call_model(_msg, f'out/閬ユ帶鎸囦护鏁版嵁鍩�-{tc_code}-{utils.to_file_name(tc_name)}.json', ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'],validation) - print('閬ユ帶鎸囦护鏁版嵁鍩燂細' + result) + result = self.call_model(_msg, f'out/閬ユ帶鎸囦护鏁版嵁鍩�-{tc_code}-{utils.to_file_name(tc_name)}.json', + ['杩欓噷鏄枃妗d腑鎶藉彇鐨勫唴瀹�'], validation) + Log.info('閬ユ帶鎸囦护鏁版嵁鍩燂細' + result) - # 閬ユ帶-end \ No newline at end of file + # endregion 閬ユ帶-end -- Gitblit v1.9.1