
简介面向西门子SINUMERIK ONE与840D sl/840DE sl控制系统的Analyze MyWorkpiece/Monitor操作手册适合机床调试、产线监控、工艺优化与质量分析工程师系统掌握软件用法压缩包内仅含1个PDF文档大小约3.26MB已有178人浏览学习适合作为随查随用的工具手册。手册先讲基本安全说明明确危险、警告、小心、注意四个风险等级强调现场须由具备培训与经验的合格专业人员操作随后按工作流程介绍导入生产现场采集的Capture数据、生成用于模型学习的训练数据集、训练参考模型并创建、编辑和管理监控任务。分析监控结果章节可帮助读者读懂报表与曲线识别工件偏差或异常用户自定义算法、直接监控和测量循环则支持定制监控逻辑借助周期测量持续改进加工质量。读者可据此快速走通数据准备、模型建立、任务运行与结果判读的完整链路减少试错成本提升质量管控效率。1. 西门子 AMW/Monitor把加工信号变成可监控的质量特征数控加工里最贵的损失是“不知道已经出问题”的那段等待。工件下了机床才上三坐标报告发现尺寸超差时后几道工序往往已用同一把磨损刀具继续切了几十件。西门子 SINUMERIK Edge 的 Analyze MyWorkpiece /MonitorAMW/Monitor版本 3.209/2022适配 SINUMERIK ONE 与 840D sl/840DE sl把监控点从“工件测完”前移到“加工过程中”采集主轴与进给轴的电流、扭矩、位置偏差信号建立正常工况参考模型再拿实时过程信号和基线比对。新手可把它当成过程信号版的 SPC 工具老手则能用直接监控、自定义算法和 MQTT 通知把报警拉回产线上位联动里。2. 数据源头Capture 数据导入与 TDU 生成2.1 先理清链路Record 和 TDU 在 AMW/Monitor 里的关系AMW/Monitor 本身不采集数据它消费机床已有的数据。控制器侧的 Capture 功能按工艺段记录过程信号每次加工循环产生一个 Record里面包含时间戳、轴名、电流、扭矩、位置偏差等通道数据。Record 只是原始记录想拿来做训练还缺一步把它导入到 Edge 端监控数据区手册第四章把这步叫“导入 Capture-Job 的 Record”。导入完成后下一个环节把记录再做一次筛选切片生成 Training Data Unit-Sets简称 TDU。TDU 是从若干 Record 中挑出的、与同一工序强相关的信号片段是训练参考模型的原材料。一条 Record 可能跨工件、跨多段工艺而一个 TDU 一般只对应一种工艺条件比如同程序名、同工件、相近刀具状态。新手最容易把二者当成一步直接在 Record 列表里挑几条就开始训练结果模型带宽被无关段撑宽异常检测灵敏度下降得很明显。2.2 导入 Record常见失败与定位方法导入是一个把数据搬运、再做通道校验的过程。如果机床侧 Capture-Job 和 Edge 端不在同一时区或者通道名配置不一致导入记录里很容易出现失败项。手册 4.4 节专门给了定位导入问题的入口实操中我一般直接看这几类现象现象常见原因排查点导入列表为空Capture-Job 未上传到 Edge 数据区确认 Capture 数据的共享路径和上传状态提示时间戳超出范围Edge 与 NC 时区不一致统一时区设置检查 UTC 偏移通道映射不全轴名大小写或机床轴标识不匹配用“显示详细信息”核对通道清单导入成功但记录不能选择用户权限角色不足检查当前用户的监控权限分配失败时不要反复重试导入先把时间戳对齐问题解决。我处理类似问题时会先对 Record 文件的采样质量做一个快速体检重点看重复时间戳占比和采样间隔分布。下面这段检查逻辑在导入前跑一遍能提前过滤掉一批问题记录import pandas as pd df pd.read_csv(capture_record/op10_20240918.csv, usecols[ts, spindle_torque]) df[ts] pd.to_datetime(df[ts]) print(起止时间:, df[ts].min(), df[ts].max()) print(重复时间戳数:, df[ts].duplicated().sum()) delta df[ts].diff().dropna().dt.total_seconds() print(delta.describe())这里做了三件事确认时间范围是否覆盖目标工序统计时间戳重复数量重复率达到一定比例说明一个采样周期内混入了多根主轴或多次启动的数据导入时容易产生通道错位最后用 diff 看相邻采样间隔的分布如果标准差偏大而最小值是 0说明捕获过程存在中断后续 TDU 生成前要先做重采样。这三个指标合格再进导入流程成功率会高很多。2.3 配置并生成 TDU选择哪些 Record 更稳生成 TDU 的入口是“创建/配置训练数据集”界面操作顺序是从已导入的 Record 列表中选中目标记录设置数据集名称、工艺号和通道范围然后执行生成。这里有一个容易忽略的点生成是重计算过程会占用 Edge 一部分算力所以手册把它单列成独立功能不要在机床批量很大的当天中午批量生成选一个生产间隙执行更稳妥。配置项作用实操建议数据集名称后续训练时的引用标识用“程序名_工件号_日期”方便批量筛选工艺号 / 程序名筛选同一工艺条件下的 Record避免把不同工件的记录混进一个 TDU信号通道范围决定特征空间的维度保留有物理量的扭矩、电流去掉辅助 IO 通道Record 条数训练的样本规模同一工艺至少 5 段以上太少模型边界过窄选择 Record 时我会在“显示详细信息”里逐条看曲线而不是只看数据条数。有些 Record 里包含调机、试切、排屑段这些曲线和稳定批产时的波形差异很大如果混入 TDU训练出的模型把这些非典型状态也当成正常后续真实异常就会被淹没。生成完 TDU 后建议先用复制功能备份一份后面训练、调参在副本上操作删错还能回滚。3. 训练参考模型通道权重、验证集与模型导入导出3.1 参考模型不是深度学习“参考模型”四个字容易让人以为训练了一个神经网络。实际上 AMW/Monitor 的参考模型是在做统计基线刻画对同一工艺条件下的大量正常信号计算各通道的分布特征和相关结构形成“正常状态的空间边界”。推理时把新信号映射到该空间里用偏差距离判断是否异常。这和图像识别里的模型完全不同反而更适合机床这类样本少、工况记录难的场景。模型的灵敏度上限由训练数据的纯度决定而不是算法复杂度。如果 TDU 混入了不同程序段的信号各通道方差会被明显拉宽边界自然变大磨损、碰撞前兆这类小偏移就检测不到。所以很多现场配置了 AMW/Monitor 但报警率很低不一定是模型不行而是 TDU 没做干净。3.2 创建并训练参考模型参数怎么配创建参考模型的界面入口是“创建/配置参考模型”接着选 TDU、配置通道权重和算法参数然后执行训练。通道权重建议遵循“扭矩大于电流、大于位置偏差”的顺序扭矩波形对刀具磨损最敏感电流在低速切削段容易被滤波抹平位置偏差是稳态值瞬态变化携带的信息量有限。先把权重倾向定下来比反复调触发阈值更有效。配置项作用建议模型名称监控任务引用的主键使用“工艺号_机床名_日期”TDU 列表训练输入集只选同一工序且时间跨度相近的 TDU通道权重影响异常得分的贡献度主轴扭矩 1.0电流 0.8进给力 0.7位置偏差 0.5训练集切分从 TDU 中分出验证部分80% 训练 / 20% 验证3.3 验证参考模型别只看“训练完成”四个字训练完成后用“验证参考模型”检查模型对正常样本的接纳度和对异常样本的识别度。我通常准备两段数据一段确认过的正常批次记录另一段是从故障报警记录里截出来的异常段。正常段应把虚报率压在 5% 以下异常段的检测率要到 90% 以上否则不急着调阈值先回去改通道权重或者补充 TDU。下面是我常用的快速验证脚本把模型阈值和验证集做一个距离统计import numpy as np mu, _ np.load(model_ref_op10.npy) X np.load(validation_normal_op10.npy) cov np.cov(X.T) inv_cov np.linalg.pinv(cov np.eye(cov.shape[0]) * 1e-6) dist np.array([np.sqrt((x - mu) (inv_cov (x - mu))) for x in X]) print(平均距离:, round(float(dist.mean()), 3)) print(99.7%分位数:, round(float(np.quantile(dist, 0.997)), 3))这段代码里最关键的是用马氏距离而不是单个通道的 3 倍标准差。多通道异常不一定体现为某一轴超限也可能表现为各轴之间的相关性发生偏移逐通道控制图抓不到这种模式。判断标准可以映射为正常样本 99.7% 落在分位数边界内而异常样本至少 90% 超过该边界。达不到就检查输入数据是否混入了非正常段。3.4 模型导出导入同构机床的复用方式多台同型号机床加工同一工件时不需要每台都从零训练。训练好的参考模型通过“导出和导入”可以复制到另一台同构机床前提是两台的机械配置、主轴功率等级和加工程序一致。我一般会在设备验收时做一次标准训练模型导出后归档到共享目录现场快速换型时直接导入省掉半夜等训练的时间。提示TDU 和参考模型是两个独立对象。导出模型不会自动带走 TDU以后在别的设备上要重新验证模型边界需要把对应 TDU 一起带上用同样版本的数据复验。4. 监控任务配置与报告获取任务生命周期、REST API 和 MQTT4.1 创建监控任务把参考模型绑定到实时数据流“创建/配置任务”是 AMW/Monitor 把模型推向生产的最后一环。任务里要指定参考模型、监控通道和触发级别。这里的触发级别不是简单的报警上限而是“偏离统计基线的程度”所以它和无量纲的偏差倍数。手册没有给出全局默认值不同版本算法内核也不一样但实操上有个通用经验触发级别先按模型 3 倍标准差带设置连续两次超限才触发避免单点抖动误报。配置项说明实操建议任务名称与报告、MQTT 主题关联用“设备号_工艺号_监控类型”例如 mill_op10_wear参考模型已训练并验证过的模型不选训练后从未验证的模型监控通道决定哪些信号计入报警默认沿用模型通道不建议在任务层临时关闭触发级别报警灵敏度先用默认值结合现场误报记录再调整任务创建之后还有一个容易忽略的状态问题。任务必须有激活动作才会开始消费数据只创建不激活报告区间内可能什么都没有。复制任务常用于同一模型的多工位部署模型训练一遍设备 1 和设备 2 各复制一份任务修改任务名和机床标识即可。删除任务不会删除参考模型模型可以继续复用这点在多人协作时要说清楚。4.2 归档与恢复释放计算资源又保留任务现场归档和删除的本质区别在于是否保留现场。归档把任务配置连同历史报警快照冻结起来退出实时计算但可以随时恢复删除是彻底清理。换型频繁的车间我会把标准化生产版本的任务归档换回该工艺时直接恢复恢复后任务马上进入监控状态不用重新绑模型。注意恢复的监控任务不会自动回补归档期间的过程数据。如果归档期间发生过故障报警应该先导入该时间段的 Record 单独分析再恢复任务。4.3 报告下载先走 REST API再做 MQTT 通知AMW/Monitor 的两种结果出口我会顺着用REST API 拉完整报告MQTT 推实时事件。REST 接口对应手册 8.3 节返回一般是 zip 包包含监控数据、报警时间和通道曲线。下面是我常用的下载命令curl -G http://edge-node:port/api/v1/amw-monitor/reports \ --data-urlencode taskIdmill_op10_wear \ --data-urlencode start2024-09-01T00:00:0008:00 \ --data-urlencode end2024-09-07T23:59:5908:00 \ -H Accept: application/zip \ -o op10_w36_report.zip这里用-G加--data-urlencode避免手写 URL 编码时把号漏掉。taskId是创建任务时给出的标识start和end使用 ISO8601 并带时区偏移如08:00如果不带时区Edge 默认按 UTC 解释报告时间区间会差 8 个小时。下载后建议用unzip -l校验压缩包内容防止拿到的是登录页 HTML。MQTT 通道用于实时事件。Edge 端发布任务状态和报警消息用 mosquitto 客户端最快能看到消息结构mosquitto_sub -h edge-node -p 1883 -t amw/monitor/# -v{ ts: 2024-09-03T10:54:2108:00, taskId: mill_op10_wear, event: threshold_exceeded, channel: feed_force, deviation: 4.1, message: feed force exceeds model baseline }消息体里ts是事件发生时间taskId对应监控任务deviation表示超过边界的倍数message是任务配置时定义的描述。下游衔接产线时我会做一个轻量网关订阅这些 topic把偏差值映射到 PLC 数据块西门子 S7-1200/1500 这类设备通过 MQTT 网关接入不需要额外写一堆 DB 扫描逻辑。关键是在网关侧对同一 taskId 做窗口去重否则报警恢复时的抖动会冲掉生产侧的确认流程。5. 用户自定义算法脚本包结构、验证规则与任务化5.1 自定义算法以脚本包为单位上传手册第九章是 AMW/Monitor 和默认功能区分度最好的一块用户自定义算法。这里的算法不是在界面填几个参数而是通过“管理脚本”上传脚本包包内是算法实现、依赖说明和元数据。上传后系统先验证再创建对应任务引用它本质是让 Edge 在每个窗口切片上跑自定义特征逻辑输出数值参与报警判定。一个典型的脚本包目录结构如下my_wear_algorithm/ ├── main.py # 入口文件导出特征计算函数 ├── requirements.txt # 第三方依赖版本锁死 ├── manifest.json # 算法名称、版本、函数名、输出字段 └── preprocess.py # 可选数据预处理我习惯把入口函数约定为process_window这只是一种常用的写法不同交付版本的具体入口签名以安装现场说明为准。但结构思路是通用的入口文件里导出一个能在窗口数据上调用的函数返回一个 dict键名会出现在报告和 MQTT 消息里。requirements.txt建议锁定版本不要写成避免 Edge 在验证时拿到不兼容的依赖。5.2 验证脚本包失败类型和处理方式上传后系统会执行验证验证不只是语法编译还包括依赖解析、入口探测和一次小规模试运行。实际使用中常见的失败大致有下面几类验证失败点主要原因处理方式依赖解析失败requirements 版本不存在或平台不匹配在相同 Python 版本下先本地装一遍入口函数缺失manifest 中函数名与代码不符保持名称一致检查导入路径试运行超时窗口长、循环内计算量过大先降采样窗口再优化算法输出类型错误返回结果不是数值型将 numpy 数值显式转为 float“入口函数缺失”几乎是出现最多的原因常见情形是 manifest 里写了某个模块名但实际目录嵌套深了一层验证器找不到声明路径。删包重传的成本高于提前校验我通常把 manifest 保持最少三键算法名、版本、入口函数。5.3 用自定义算法创建任务并接出报告脚本包验证通过后进入“创建/配置用户自定义算法的任务”除了任务名称、算法选择还要配置窗口长度和重叠比例这两个字段决定时序特征的分辨率。入口函数我一般写成下面这种风格import math from typing import Dict, Any def process_window(signal_window: Dict[str, Dict[str, Any]], context: dict) - Dict[str, float]: # signal_window: {spindle_torque: {values: [...], ts: [...]}} vals signal_window[spindle_torque][values] rms math.sqrt(sum(v * v for v in vals) / len(vals)) peak max(abs(v) for v in vals) crest peak / rms if rms 1e-6 else 0.0 return {torque_rms: rms, torque_crest: round(crest, 3)}这个函数只做两件事计算扭矩 RMS 和波峰因子。RMS 对均值漂移不敏感能量化信号能量层波峰因子对局部尖脉冲敏感切屑挤刀时一次短脉冲就能让值跳起来。返回值是两个标量特征系统会作为算法输出参与报警阈值判定如果任务配置里关闭了内置通道只用这个返回值做判定也可以。注意自定义算法任务和参考模型监控任务可以同时跑。我会把模型输出作为主线、自定义算法作为附加上下文而不是用算法任务简单替换掉模型这样报警时能同时看到统计偏差和自定义特征两个维度。6. 直接监控与测量循环免训练和周期性校验的搭配6.1 直接监控适合“还没有干净数据”的场景直接监控与参考模型监控最明显的差别是不依赖 TDU不需要训练。直接“创建/配置直接监控任务”激活并连接任务指定要盯的通道和阈值原始信号就开始实时评判。手册 10.3 里的“激活和连接任务”是把任务和实际数据流握手的动作不是点一下运行就算完连接失败时先检查数据是否已经推送到 Edge 端。我的排序建议是新产品导入、程序刚开始调试、加工参数还没稳定时直接用监控当程序确认不再改、连续两周报警次数也低时再生成 TDU、训练参考模型。这样比一上来就训练参考模型省去大量模型天天超限的调试成本。6.2 测量循环任务用 NC 周期测量补偿模型漂移测量循环任务走的是 NC 侧测量循环的路径周期触发测量结果以报告形式输出也有对应的 MQTT 消息示例。它不是替代信号监控而是信号监控之外的最后一道校验信号层面的模型报警只能说明数据形态偏离基线不能直接证明刀具已经磨损到尺寸超差只有测量循环的读数能最终确认是否换刀。监控路径是否需要训练适用场景报警粒度参考模型监控需要长期稳定批产统计基线偏差直接监控不需要调试期、新产品原始信号阈值测量循环不需要周期校验刀具状态测量结果判定现场同时跑多类任务时我把直接监控的采样窗口放在主轴加速段而不是匀速段加速段的电流变化率在刀具异常时最明显测量循环的结果每隔一个批次就回填一次模型验证集积累到三个批次后重新生成 TDU让模型边界跟随实际机床状态缓慢更新。这样配置后报警不再只是停在 Edge 界面上而是能用测量数据反过来订正模型边界。本文还有配套的精品资源点击获取