当前位置: 首页 > news >正文

这里模拟各种操作并断言结果

自动化模型框架搭建脚本,读取项目文件夹中的 XML 文件,提取出信号信息,创建模型的框架,然后根据输入信号和输出信号的数量添加对应的端口。 还能够动态更新XML文件,在原有模型基础上根据输入参数修改原有的模型,添加或删除对应的端口,最后将这些功能集成在一起,形成一个完整的自动化建模工具,提高模型构建的效率和准确性。 使用方法: 运行 model_builder_test 脚本即可对整个工具进行测试。 1、SignalsRecord 记录模型框架的输入输出信号名称和序号,这个模型搭建的基础。 2、当模型修改后,仍能够自动化更新模型接口,且不破环原有模型中的内容。 3、全部脚本皆开放,注释完整,同时分函数调用,是学习自动化Simulink建模的良好范例。 4、支持适当解惑。 5、详见说明文档

项目里需要频繁修改Simulink模型接口?手工操作容易出错还费时间?这个用Python写的自动化建模工具能让你彻底摆脱重复劳动。核心就三件事:解析XML信号配置、自动生成模型框架、动态维护接口一致性。

先看怎么吃透XML配置。用xml.etree.ElementTree模块解析文件时,关键要处理嵌套结构:

def parse_signals(xml_path): tree = ET.parse(xml_path) root = tree.getroot() signals = {'input': [], 'output': []} for port in root.findall('.//port'): port_type = port.get('type') name = port.find('name').text index = int(port.find('index').text) signals[port_type].append({'name': name, 'index': index}) return signals

这段代码特别处理了XML里的port标签,按输入输出分类存储信号名和序号。注意.findall()方法里的XPath表达式,这个.//port写法能穿透任意层级的嵌套,比写死路径更灵活。

生成的信号记录类SignalsRecord才是灵魂所在。它用两个OrderedDict分别存输入输出信号,保证顺序不会乱:

class SignalsRecord: def __init__(self): self.inputs = OrderedDict() self.outputs = OrderedDict() def add_signal(self, signal_type, name, index): target = self.inputs if signal_type == 'input' else self.outputs if name not in target: target[name] = index print(f"Added {signal_type} port: {name}[{index}]")

用OrderedDict而不用普通字典,是因为模型端口序号必须严格对应。这里有个小技巧——添加新信号时自动检查是否重名,避免重复添加。

自动化模型框架搭建脚本,读取项目文件夹中的 XML 文件,提取出信号信息,创建模型的框架,然后根据输入信号和输出信号的数量添加对应的端口。 还能够动态更新XML文件,在原有模型基础上根据输入参数修改原有的模型,添加或删除对应的端口,最后将这些功能集成在一起,形成一个完整的自动化建模工具,提高模型构建的效率和准确性。 使用方法: 运行 model_builder_test 脚本即可对整个工具进行测试。 1、SignalsRecord 记录模型框架的输入输出信号名称和序号,这个模型搭建的基础。 2、当模型修改后,仍能够自动化更新模型接口,且不破环原有模型中的内容。 3、全部脚本皆开放,注释完整,同时分函数调用,是学习自动化Simulink建模的良好范例。 4、支持适当解惑。 5、详见说明文档

动态更新模型最考验代码设计。看这个增量更新函数怎么玩转XML节点:

def update_xml_port(xml_path, new_port, operation='add'): tree = ET.parse(xml_path) root = tree.getroot() ports_node = root.find('.//ports') existing = [p for p in ports_node if p.find('name').text == new_port['name']] if operation == 'add' and not existing: port_node = ET.SubElement(ports_node, 'port', type=new_port['type']) ET.SubElement(port_node, 'name').text = new_port['name'] ET.SubElement(port_node, 'index').text = str(new_port['index']) elif operation == 'del' and existing: ports_node.remove(existing[0]) tree.write(xml_path, encoding='utf-8', xml_declaration=True)

处理新增和删除操作时,先用XPath定位现有节点。有个坑要注意——ET模块默认不保留XML声明,所以write时要显式加上xml_declaration=True参数,否则再次读取可能报错。

测试环节建议用pytest搞个参数化测试,模拟各种边界情况。比如测试删除不存在的端口时会不会报错:

@pytest.mark.parametrize("port_data,expected", [ ({'type':'input','name':'throttle','index':3}, "Add"), ({'type':'output','name':'RPM','index':2}, "DelFail") ]) def test_port_operations(port_data, expected): assert operation_log.startswith(expected)

这种测试用例能有效防止手滑误删关键端口。建议用临时文件做测试沙盒,别直接动生产环境的配置文件。

实际用起来,先跑modelbuildertest.py看demo效果。注意系统环境变量可能需要配Python的PYTHONPATH,把项目目录加进去才能正确导入模块。遇到XML格式错误时,工具会抛出自定义的ConfigException,这时候去查说明文档里的XML模板示例最快。

http://www.jsqmd.com/news/540728/

相关文章:

  • ABAQUS盾构隧道开挖模型:一环七片含螺栓配筋的Cae文件(单位:毫米)
  • 2026零基础学化妆怎么选?新手择校全攻略,实用好懂易上手 - 品牌测评鉴赏家
  • CentOS7下docker方式安装magento2
  • HUNYUAN-MT企业级Java集成指南:构建高并发翻译微服务
  • 如何使用 Java 替换特定字符串后的文本
  • 代码随想录一刷记录Day6——leetcode454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
  • Altium Designer 19导出Gerber文件,我踩过的这些坑希望你别再踩(附完整配置清单)
  • APP测试 - adb基础命令2
  • 手把手教你无损合并磁盘分区:从删除卷到空间分配的5个关键陷阱
  • 无线通信入门:为什么说DFT是提升OFDM信道估计性能的“降噪神器”?
  • 二手圆锯机市场2026评测:实力企业大盘点,行业内二手圆锯机厂商推荐耀本机械专注行业多年经验,口碑良好 - 品牌推荐师
  • 避坑指南:Joern生成PDG时行号丢失问题的3种解决方案
  • Llama-3.2V-11B-cot开发者案例:基于Streamlit定制化UI扩展实践
  • 2026年最新化妆学校权威排行榜 小白择校必看 - 品牌测评鉴赏家
  • gdb 之 attach
  • 扎根工业一线!JBoltAI两款数智化产品解锁工厂提效新路径
  • DevEco Studio NEXT实战:如何快速定位并解决hvigor的configProps报错问题
  • 抖音无水印视频智能下载与高效管理解决方案:从技术原理到行业应用
  • 生发机构哪家好?黑奥秘AI智能检测让效果可量化 - 美业信息观察
  • 保姆级教程:在CherryStudio中为Qwen/DeepSeek模型配置专属知识库(含思源笔记API对接全流程)
  • COS化妆培训学校哪家好?零基础择校全攻略,轻松选对优质院校 - 品牌测评鉴赏家
  • 防脱生发哪家机构靠谱?黑奥秘四大自研成分提供科技支撑 - 美业信息观察
  • Qwen3-32B-Chat镜像性能实测:OpenClaw任务执行效率提升30%
  • 在遵义学美容,我跑了几家培训学校后的真实感受 - 品牌测评鉴赏家
  • 道心网络安全学习笔记系列之好靶场的信息收集2
  • CentOS 6.5 yum 安装 MongoDB 2.6及 相关配置
  • 3.26软工
  • Doris从入门到上天系列第五篇:Doris中的物化视图
  • 如何去选择品质优秀的段码屏厂家
  • Redis 异步方式与高级特性