{"id":"1fa846eb-ca1d-42bf-a2e8-a1f04698e060","entityType":"agent","slug":"clawhub-zw008-iaiops-factory","name":"iaiops-factory","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zw008-iaiops-factory","canonicalPath":"/agent/clawhub-zw008-iaiops-factory","generatedAt":"2026-10-10T09:04:16.903Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":null},"description":"Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ/CP/NX), Allen-Bradley EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level visibility), MQTT/Sparkplug B/UNS, plus the cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC, CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers). Skill: iaiops-factory Owner: zw008 Summary: Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ/CP/NX), Allen-Bradley EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level visibility), MQTT/Sparkplug B/UNS, plu","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s171xgnmqse0nqvgqvqnaq5f9183kyre:iaiops-factory","sourceUrl":"https://clawhub.ai/zw008/iaiops-factory","homepage":"https://clawhub.ai/zw008/skills/iaiops-factory","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zw008/iaiops-factory","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zw008/skills/iaiops-factory","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":null},"stars":null,"forks":null,"downloads":1991,"packageName":null,"latestVersion":"0.28.0","tractionLabel":"2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T21:11:24.552Z","lastCrawledAt":"2026-10-09T21:11:24.552Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T21:11:24.552Z","lastVerifiedAt":null,"highlights":[{"version":"0.28.0","createdAt":"2026-09-16T05:08:49.667Z","changelog":"0.28.0: MQTT/Sparkplug collectable; onboard's two journeys (devices / uns with a B1/B2 namespace fork)","fileCount":3,"zipByteSize":11012},{"version":"0.27.0","createdAt":"2026-09-03T03:20:00.111Z","changelog":"router now routes to the pharma edition · contextual baselines · downtime attribution (D18) · alarm event-type clustering · device advisory matching · GxP crosswalk","fileCount":3,"zipByteSize":10652},{"version":"0.26.0","createdAt":"2026-09-01T12:29:02.039Z","changelog":"verify determinism (executed model-free claim) · PLC program change baseline · pharma edition","fileCount":3,"zipByteSize":9400},{"version":"0.23.1","createdAt":"2026-08-28T05:18:59.176Z","changelog":"iaiops-factory 0.23.1 - Expanded SKILL.md with new sections for site/investigation readiness and production line/mechanism library features. - Added tools: `site_readiness`, `investigation_readiness`, `investigation_open`, `investigation_show`, `investigation_list`, `line_relation_declare`, `line_relations_list`, `mechanism_library_check`, `mechanism_library_list`, and `nothing_known`. - Removed file: skill-card.md. - No changes to protocol support or risk controls.","fileCount":3,"zipByteSize":8598},{"version":"0.23.0","createdAt":"2026-08-25T04:31:57.706Z","changelog":"iaiops-factory 0.23.0 - Updated documentation in SKILL.md with latest protocol, tool, and workflow details. - Removed the obsolete skill-card.md file.","fileCount":3,"zipByteSize":8089},{"version":"0.22.0","createdAt":"2026-08-02T13:09:11.352Z","changelog":"0.22.0 — asyncua 2.x floor; OPC-UA vs a third-party stack + cert trust; TDengine REST/WS; second MCP implementation; EtherNet/IP program scope","fileCount":3,"zipByteSize":8103},{"version":"0.21.1","createdAt":"2026-08-02T07:24:47.534Z","changelog":"0.21.1 — review round two: RCA window dilution, IoTDB header names, OPC-UA malformed-URL leak","fileCount":3,"zipByteSize":8223},{"version":"0.21.0","createdAt":"2026-08-02T03:07:28.556Z","changelog":"0.21.0 — verification sweep: 5 product fixes (IoTDB tag mislabelling, TDengine coverage, OPC-UA thread leak + interop verdict, PROFINET doc fields)","fileCount":3,"zipByteSize":8093}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s171xgnmqse0nqvgqvqnaq5f9183kyre:iaiops-factory","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T09:04:16.900Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zw008-iaiops-factory/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":null},"readme":"Skill: iaiops-factory\n\nOwner: zw008\n\nSummary: Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ/CP/NX), Allen-Bradley EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level visibility), MQTT/Sparkplug B/UNS, plus the cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC, CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n\nTags: latest:0.28.0\n\nVersion history:\n\nv0.28.0 | 2026-09-16T05:08:49.667Z | user\n\n0.28.0: MQTT/Sparkplug collectable; onboard's two journeys (devices / uns with a B1/B2 namespace fork)\n\nv0.27.0 | 2026-09-03T03:20:00.111Z | user\n\nrouter now routes to the pharma edition · contextual baselines · downtime attribution (D18) · alarm event-type clustering · device advisory matching · GxP crosswalk\n\nv0.26.0 | 2026-09-01T12:29:02.039Z | user\n\nverify determinism (executed model-free claim) · PLC program change baseline · pharma edition\n\nv0.23.1 | 2026-08-28T05:18:59.176Z | auto\n\niaiops-factory 0.23.1\n\n- Expanded SKILL.md with new sections for site/investigation readiness and production line/mechanism library features.\n- Added tools: `site_readiness`, `investigation_readiness`, `investigation_open`, `investigation_show`, `investigation_list`, `line_relation_declare`, `line_relations_list`, `mechanism_library_check`, `mechanism_library_list`, and `nothing_known`.\n- Removed file: skill-card.md.\n- No changes to protocol support or risk controls.\n\nv0.23.0 | 2026-08-25T04:31:57.706Z | auto\n\niaiops-factory 0.23.0\n\n- Updated documentation in SKILL.md with latest protocol, tool, and workflow details.\n- Removed the obsolete skill-card.md file.\n\nv0.22.0 | 2026-08-02T13:09:11.352Z | user\n\n0.22.0 — asyncua 2.x floor; OPC-UA vs a third-party stack + cert trust; TDengine REST/WS; second MCP implementation; EtherNet/IP program scope\n\nv0.21.1 | 2026-08-02T07:24:47.534Z | user\n\n0.21.1 — review round two: RCA window dilution, IoTDB header names, OPC-UA malformed-URL leak\n\nv0.21.0 | 2026-08-02T03:07:28.556Z | user\n\n0.21.0 — verification sweep: 5 product fixes (IoTDB tag mislabelling, TDengine coverage, OPC-UA thread leak + interop verdict, PROFINET doc fields)\n\nv0.20.4 | 2026-08-02T00:28:43.103Z | user\n\nNATS egress 120s hang bounded to 5s; BACnet write now reports a read-back instead of claiming applied; MCP interface + egress sinks now driven by real counterparties\n\nv0.20.3 | 2026-08-01T04:32:19.637Z | user\n\naudit status now reflects real outcome; runaway guard sees retried denials; approval-gate contract over the real write surface\n\nv0.20.2 | 2026-07-31T14:46:10.760Z | user\n\ncredential redaction in audit log; retained mqtt_publish undo; pyopenssl resolver guard\n\nv0.20.1 | 2026-07-29T09:37:46.275Z | user\n\niaiops 0.20.1 — MCP tool annotations derived from the governance harness\n\nv0.19.0 | 2026-07-21T14:36:49.391Z | user\n\n0.19.0 — read-only gate removed; audit on both MCP+CLI; effect-based write risk\n\nv0.18.1 | 2026-07-19T17:13:41.343Z | auto\n\n# iaiops-factory 0.18.1 – Changelog\n\n- Removed the file: `skill-card.md`  \n- No changes to logic or features; documentation file cleanup only\n\nv0.18.0 | 2026-07-19T11:30:20.999Z | auto\n\niaiops-factory 0.18.0\n\n- Removed the file: skill-card.md.\n- No changes to functionality or tools.\n\nv0.17.0 | 2026-07-19T09:22:36.238Z | auto\n\nVersion 0.17.0\n\n- Removed the documentation file skill-card.md from the project.\n- No changes to functionality or code—only documentation cleanup.\n\nv0.16.0 | 2026-07-17T05:13:36.784Z | user\n\n0.16.0 — protocol + intelligence depth (8 features, tool surface unchanged)\n\nv0.13.0 | 2026-07-13T06:55:27.427Z | user\n\n0.13.0: Ignition Gateway MES/SCADA read layer — ignition_gateway_status/tag_browse/tag_read/alarm_status/tag_history (all READ-only).\n\nv0.12.0 | 2026-07-13T01:08:43.075Z | user\n\niaiops 0.12.0 edition — aligns ClawHub with the current per-industry edition architecture\n\nArchive index:\n\nArchive v0.28.0: 3 files, 11012 bytes\n\nFiles: skill-card.md (2672b), SKILL.md (17826b), _meta.json (134b)\n\nFile v0.28.0:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 告警事件聚类：`alarm_event_clusters` — `alarm_bad_actors` 按**来源**排名,回答的是「哪台仪表最吵」,\n  不是「哪个故障最吵」;一个把同一条件写成十种说法的厂会得到十个 bad actor。这个按事件**说了什么**分组。\n  合并规则是**去掉大小写/标点/数字后的精确相等,不是相似度** —— 故意做笨,所以不需要模型、且可核对;\n  每个簇都列出被合并的原文与来源。**它不主张两条措辞不同的告警是同一个故障**,那由人判断。\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 上下文基线：`baseline_learn_contextual` `baseline_check_in_context` —— 一个位号只学一条带,\n  在它有不止一个「正常」时就是错的(同一台干燥机 recipe A 走 180 °C、B 走 240 °C,一条带横跨两者,\n  于是两个工况都不可能出错)。**上下文由人声明,绝不推断**(D16);某个上下文历史太薄就**拒学**,\n  不借用别的上下文的样本;读数落在没学过的上下文里报 `unknown_context`,**绝不回落到全局带** ——\n  回落等于把「这个工况从没见过」说成「这个工况正常」。\n- 上下游归因：`downtime_attribution` —— RCA 只按**时间**加权,所以一次上游停机会让每台下游设备\n  各自给出一个自信的本地根因。方向来自**声明的**产线顺序(D25:产线上共现是必然,拿它挖边等于\n  制造因果),顺序来自时间戳,**两者都要成立**;没声明关系就报 `not_evaluable` 并给出补法。\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 设备公告对照：`device_advisory_check` —— `scan` 早就在读 vendor/model/firmware,却什么都没做。\n  这条把它接上,并**刻意停在漏洞扫描器会继续往前走的地方**:只报「落在公告声明的版本范围内」,\n  **不说「可利用」、不给严重度** —— 可达性与补偿控制决定那件事,而只读扫描看不见它们。\n  **不内置任何 CVE 库**(过期却看着像最新的库比没有更糟),由现场挂载文件、离线可用,每条必须带来源。\n  读不出固件报 `version_unknown`,读得出但排不了序报 `version_unparsed` —— 都不算通过;\n  公告没提到的设备**不出现在结果里**,那是「未知」不是「没有」。\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `uns_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 程序变更基线：`plc_program_snapshot` `plc_program_drift` `plc_program_history` — 把「认可的那一版」\n  的结构记下来（文件 SHA-256 + 每个 block 的结构指纹：声明/调用/分支条件/定时器，**不含行号、注释、\n  block 顺序**，所以在文件顶上加一行注释不会把整份程序报成变更），之后问某一次导出**动没动**。\n  三个判词咬得很紧：`identical` **只**由 SHA-256 相同得出；`logic_changed` 逐 block 指出哪一类变了；\n  `changed_outside_extracted_structure` = 字节变了而结构指纹全同 —— 多半是注释/排版，但这些 parser\n  是结构抽取不是文法，**所以它不叫「仅文档」，也不构成放行**。删历史只在 CLI（`iaiops program forget`）：\n  删变更控制证据不该离 agent 只有一次调用。存的是 block 名 + 哈希 + 计数，**不落声明、源码行和注释**。\n- 自证：`verify_determinism` — 把「拿掉模型、断网、同一份数据重跑、输出逐字节相同」**跑出来**：\n  固定数据集过一遍分析层，规范化后取 SHA-256，在本进程跑两遍、再在两个不同 PYTHONHASHSEED 的\n  全新解释器里各跑一遍（这一臂才抓得到集合/字典迭代顺序渗进结果），全程 socket 抛异常。\n  给 CSV/验证团队的是一条能写进 IQ/OQ 的测试用例，不是一句形容词。\n- 元：`protocols_supported`(产品能做什么)· `site_readiness`(这个站点今天能跑什么、还差什么;零联网)\n  · `onboarding_status`(先判定路线：设备直读 / 已在 UNS broker，UNS 再按已存体检分 B1/B2；再给这条路上的下一步;零联网)\n  · `onboarding_config_draft`(把已存的 scan 变成 config.yaml 端点草稿 —— **只写连接事实**：\n    `value: null` 的字段是扫描没确认的，照抄它的 `caution`，别替人填也别删；`tags` 永远是空的，\n    点位语义只能人来确认 `iaiops tags export|apply`)\n- 调查层（§13，八步证据闭环）：`investigation_readiness` `investigation_open` `investigation_show`\n  `investigation_list` — 「真出事时这个站能走到第几步、每个缺口还差什么」，以及对一个**已过去的窗口**\n  逐步走完并留档（不碰设备）。缺口分两种:**你没供**(给命令) 与 **产品供不了**。\n- 产线关系与机制库：`line_relation_declare` `line_relations_list` `mechanism_library_check`\n  `mechanism_library_list` — 上下游由**人声明**（D25:线上下游共现是必然，推不出因果）；\n  机制库按 ISO 14224 分 mode/mechanism/cause，**可排除、绝不确认**，\n  库里没有这条原因 → `nothing_known`（不是「无异议」）。\n\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=2.0,<3` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.28.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.28.0\",\n  \"publishedAt\": 1789535329667\n}\n\nFile v0.28.0:skill-card.md\n\n## Description:\n\nFactory edition of iaiops for discrete-manufacturing lines, covering OPC-UA, Modbus, Siemens S7comm, Mitsubishi MC/MELSEC, Omron FINS, Allen-Bradley EtherNet/IP, EtherCAT, PROFINET, MTConnect, IO-Link, MQTT/Sparkplug B/UNS, and cross-protocol analysis for downtime root cause, OEE, asset inventory, and production-line troubleshooting.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zw008](https://clawhub.ai/user/zw008)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFactory engineers, automation developers, and operations teams use this skill to inspect industrial protocol endpoints, troubleshoot production-line dataflow and downtime, compute OEE signals, inventory assets, and prepare governed configuration drafts. Write-capable operations are intended to stay gated by management-of-change approval, dry-run behavior, and rollback procedures.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Write-capable industrial control actions can affect PLCs, EtherCAT device state, PROFINET station configuration, or MQTT topics.\n\nMitigation: Keep production write tools disabled unless the site has explicit change-control approval, dry-run review, named approval, and rollback procedures.\n\nRisk: Industrial protocol access may require privileged host or network access and can expose sensitive plant operations.\n\nMitigation: Install and run the skill in an isolated environment from a trusted package source with pinned and hash-verified dependencies.\n\nRisk: Some live hardware, gateway paths, and site-specific protocol coverage require local verification before operational use.\n\nMitigation: Use the documented doctor-first and read-first workflows, validate discovered facts against site equipment, and avoid acting on unverified placeholders.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/zw008/skills/iaiops-factory)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline commands, structured findings, configuration drafts, and analysis summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include read-only industrial telemetry summaries, bounded scans, cited evidence chains, and gated write proposals.]\n\n## Skill Version(s):\n\n0.28.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.27.0: 3 files, 10652 bytes\n\nFiles: skill-card.md (2527b), SKILL.md (17369b), _meta.json (134b)\n\nFile v0.27.0:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 告警事件聚类：`alarm_event_clusters` — `alarm_bad_actors` 按**来源**排名,回答的是「哪台仪表最吵」,\n  不是「哪个故障最吵」;一个把同一条件写成十种说法的厂会得到十个 bad actor。这个按事件**说了什么**分组。\n  合并规则是**去掉大小写/标点/数字后的精确相等,不是相似度** —— 故意做笨,所以不需要模型、且可核对;\n  每个簇都列出被合并的原文与来源。**它不主张两条措辞不同的告警是同一个故障**,那由人判断。\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 上下文基线：`baseline_learn_contextual` `baseline_check_in_context` —— 一个位号只学一条带,\n  在它有不止一个「正常」时就是错的(同一台干燥机 recipe A 走 180 °C、B 走 240 °C,一条带横跨两者,\n  于是两个工况都不可能出错)。**上下文由人声明,绝不推断**(D16);某个上下文历史太薄就**拒学**,\n  不借用别的上下文的样本;读数落在没学过的上下文里报 `unknown_context`,**绝不回落到全局带** ——\n  回落等于把「这个工况从没见过」说成「这个工况正常」。\n- 上下游归因：`downtime_attribution` —— RCA 只按**时间**加权,所以一次上游停机会让每台下游设备\n  各自给出一个自信的本地根因。方向来自**声明的**产线顺序(D25:产线上共现是必然,拿它挖边等于\n  制造因果),顺序来自时间戳,**两者都要成立**;没声明关系就报 `not_evaluable` 并给出补法。\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 设备公告对照：`device_advisory_check` —— `scan` 早就在读 vendor/model/firmware,却什么都没做。\n  这条把它接上,并**刻意停在漏洞扫描器会继续往前走的地方**:只报「落在公告声明的版本范围内」,\n  **不说「可利用」、不给严重度** —— 可达性与补偿控制决定那件事,而只读扫描看不见它们。\n  **不内置任何 CVE 库**(过期却看着像最新的库比没有更糟),由现场挂载文件、离线可用,每条必须带来源。\n  读不出固件报 `version_unknown`,读得出但排不了序报 `version_unparsed` —— 都不算通过;\n  公告没提到的设备**不出现在结果里**,那是「未知」不是「没有」。\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `uns_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 程序变更基线：`plc_program_snapshot` `plc_program_drift` `plc_program_history` — 把「认可的那一版」\n  的结构记下来（文件 SHA-256 + 每个 block 的结构指纹：声明/调用/分支条件/定时器，**不含行号、注释、\n  block 顺序**，所以在文件顶上加一行注释不会把整份程序报成变更），之后问某一次导出**动没动**。\n  三个判词咬得很紧：`identical` **只**由 SHA-256 相同得出；`logic_changed` 逐 block 指出哪一类变了；\n  `changed_outside_extracted_structure` = 字节变了而结构指纹全同 —— 多半是注释/排版，但这些 parser\n  是结构抽取不是文法，**所以它不叫「仅文档」，也不构成放行**。删历史只在 CLI（`iaiops program forget`）：\n  删变更控制证据不该离 agent 只有一次调用。存的是 block 名 + 哈希 + 计数，**不落声明、源码行和注释**。\n- 自证：`verify_determinism` — 把「拿掉模型、断网、同一份数据重跑、输出逐字节相同」**跑出来**：\n  固定数据集过一遍分析层，规范化后取 SHA-256，在本进程跑两遍、再在两个不同 PYTHONHASHSEED 的\n  全新解释器里各跑一遍（这一臂才抓得到集合/字典迭代顺序渗进结果），全程 socket 抛异常。\n  给 CSV/验证团队的是一条能写进 IQ/OQ 的测试用例，不是一句形容词。\n- 元：`protocols_supported`(产品能做什么)· `site_readiness`(这个站点今天能跑什么、还差什么;零联网)\n- 调查层（§13，八步证据闭环）：`investigation_readiness` `investigation_open` `investigation_show`\n  `investigation_list` — 「真出事时这个站能走到第几步、每个缺口还差什么」，以及对一个**已过去的窗口**\n  逐步走完并留档（不碰设备）。缺口分两种:**你没供**(给命令) 与 **产品供不了**。\n- 产线关系与机制库：`line_relation_declare` `line_relations_list` `mechanism_library_check`\n  `mechanism_library_list` — 上下游由**人声明**（D25:线上下游共现是必然，推不出因果）；\n  机制库按 ISO 14224 分 mode/mechanism/cause，**可排除、绝不确认**，\n  库里没有这条原因 → `nothing_known`（不是「无异议」）。\n\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=2.0,<3` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.27.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.27.0\",\n  \"publishedAt\": 1788405600111\n}\n\nFile v0.27.0:skill-card.md\n\n## Description:\n\nFactory edition of iaiops helps agents inspect and troubleshoot discrete-manufacturing lines across PLC, CNC, fieldbus, MES/SCADA, MQTT/Sparkplug B, and Unified Namespace environments with read-first diagnostics and change-control-gated writes.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zw008](https://clawhub.ai/user/zw008)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and industrial operations engineers use this skill to connect an agent to factory systems, read operational data, diagnose dataflow and downtime issues, build asset inventories, analyze OEE, and prepare controlled write proposals for production equipment.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Connecting an agent to industrial automation systems can expose live operational technology environments to unintended actions.\n\nMitigation: Install only for intended industrial automation use, use dedicated OT network access for raw-socket protocols, and validate site readiness before connecting to live equipment.\n\nRisk: High-impact write tools could change PLC, fieldbus, MQTT, or station configuration if enabled without governance.\n\nMitigation: Keep write tools disabled by default and require a real change-control process, named approval, dry-run review, and rollback planning before any production write.\n\nRisk: Misconfigured secrets or approval gates could allow unauthorized access to MES, SCADA, broker, or controller interfaces.\n\nMitigation: Verify secret-store configuration, network scope, and approval gates before using the skill on live equipment.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with tool names, configuration values, command examples, diagnostics, and structured operational findings]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-first behavior is expected; write actions are high-impact and should remain disabled unless an explicit change-control process approves them.]\n\n## Skill Version(s):\n\n0.27.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.26.0: 3 files, 9400 bytes\n\nFiles: skill-card.md (2436b), SKILL.md (15147b), _meta.json (134b)\n\nFile v0.26.0:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `uns_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 程序变更基线：`plc_program_snapshot` `plc_program_drift` `plc_program_history` — 把「认可的那一版」\n  的结构记下来（文件 SHA-256 + 每个 block 的结构指纹：声明/调用/分支条件/定时器，**不含行号、注释、\n  block 顺序**，所以在文件顶上加一行注释不会把整份程序报成变更），之后问某一次导出**动没动**。\n  三个判词咬得很紧：`identical` **只**由 SHA-256 相同得出；`logic_changed` 逐 block 指出哪一类变了；\n  `changed_outside_extracted_structure` = 字节变了而结构指纹全同 —— 多半是注释/排版，但这些 parser\n  是结构抽取不是文法，**所以它不叫「仅文档」，也不构成放行**。删历史只在 CLI（`iaiops program forget`）：\n  删变更控制证据不该离 agent 只有一次调用。存的是 block 名 + 哈希 + 计数，**不落声明、源码行和注释**。\n- 自证：`verify_determinism` — 把「拿掉模型、断网、同一份数据重跑、输出逐字节相同」**跑出来**：\n  固定数据集过一遍分析层，规范化后取 SHA-256，在本进程跑两遍、再在两个不同 PYTHONHASHSEED 的\n  全新解释器里各跑一遍（这一臂才抓得到集合/字典迭代顺序渗进结果），全程 socket 抛异常。\n  给 CSV/验证团队的是一条能写进 IQ/OQ 的测试用例，不是一句形容词。\n- 元：`protocols_supported`(产品能做什么)· `site_readiness`(这个站点今天能跑什么、还差什么;零联网)\n- 调查层（§13，八步证据闭环）：`investigation_readiness` `investigation_open` `investigation_show`\n  `investigation_list` — 「真出事时这个站能走到第几步、每个缺口还差什么」，以及对一个**已过去的窗口**\n  逐步走完并留档（不碰设备）。缺口分两种:**你没供**(给命令) 与 **产品供不了**。\n- 产线关系与机制库：`line_relation_declare` `line_relations_list` `mechanism_library_check`\n  `mechanism_library_list` — 上下游由**人声明**（D25:线上下游共现是必然，推不出因果）；\n  机制库按 ISO 14224 分 mode/mechanism/cause，**可排除、绝不确认**，\n  库里没有这条原因 → `nothing_known`（不是「无异议」）。\n\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=2.0,<3` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.26.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.26.0\",\n  \"publishedAt\": 1788265742039\n}\n\nFile v0.26.0:skill-card.md\n\n## Description:\n\nFactory edition of iaiops for discrete-manufacturing troubleshooting across PLC, CNC, servo and drive bus, tag browsing, Unified Namespace, OEE, downtime root-cause, asset inventory, and read-first industrial protocol workflows with MOC-gated writes.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zw008](https://clawhub.ai/user/zw008)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, engineers, and authorized industrial-operations teams use this skill to inspect and troubleshoot discrete-manufacturing systems across factory protocols, production data, asset models, alarms, OEE, and program-change baselines. Write-capable actions are intended to remain gated by management-of-change review, dry-run checks, approval, and rollback planning.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: High-impact write tools can affect industrial control systems when enabled.\n\nMitigation: Keep write tools disabled unless the operator has authorization, a real MOC process, named approval, dry-run review, and a rollback plan.\n\nRisk: Factory-network access, raw-socket use, root privileges, or API tokens may broaden operational exposure.\n\nMitigation: Restrict privileges and tokens to the specific factory network, gateway, and assessment scope.\n\nRisk: Troubleshooting advice may influence production-line decisions.\n\nMitigation: Use the skill only in environments where the operator is authorized to inspect or control industrial systems and review recommendations before acting.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands, configuration notes, and structured troubleshooting guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs should preserve read-first posture, cite concrete operational evidence where available, and distinguish advisory analysis from approved control actions.]\n\n## Skill Version(s):\n\n0.26.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.23.1: 3 files, 8598 bytes\n\nFiles: skill-card.md (2313b), SKILL.md (13745b), _meta.json (134b)\n\nFile v0.23.1:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `uns_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`(产品能做什么)· `site_readiness`(这个站点今天能跑什么、还差什么;零联网)\n- 调查层（§13，八步证据闭环）：`investigation_readiness` `investigation_open` `investigation_show`\n  `investigation_list` — 「真出事时这个站能走到第几步、每个缺口还差什么」，以及对一个**已过去的窗口**\n  逐步走完并留档（不碰设备）。缺口分两种:**你没供**(给命令) 与 **产品供不了**。\n- 产线关系与机制库：`line_relation_declare` `line_relations_list` `mechanism_library_check`\n  `mechanism_library_list` — 上下游由**人声明**（D25:线上下游共现是必然，推不出因果）；\n  机制库按 ISO 14224 分 mode/mechanism/cause，**可排除、绝不确认**，\n  库里没有这条原因 → `nothing_known`（不是「无异议」）。\n\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=2.0,<3` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.23.1:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.23.1\",\n  \"publishedAt\": 1787894339176\n}\n\nFile v0.23.1:skill-card.md\n\n## Description:\n\nFactory edition of iaiops for discrete-manufacturing troubleshooting across OPC-UA, Modbus, S7comm, MELSEC, FINS, EtherNet/IP, EtherCAT, PROFINET, MTConnect, IO-Link, MQTT/Sparkplug B/UNS, and cross-protocol diagnostics such as downtime root cause, OEE, and asset inventory.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zw008](https://clawhub.ai/user/zw008)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nIndustrial automation engineers and site operators use this skill to inspect PLC, CNC, fieldbus, MES/SCADA gateway, Unified Namespace, and production-line data, then produce diagnostic guidance for root-cause analysis, OEE, asset inventory, readiness checks, and investigation records. Write-capable paths should be used only through explicit MOC approval in controlled environments.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: High-impact PLC and network capabilities could affect industrial operations if used outside an authorized change-management process.\n\nMitigation: Install only in controlled industrial environments, use read-only diagnostics first, and keep write tools disabled unless explicit authorization and MOC approval are in place.\n\nRisk: Gateway or API credentials for MES, SCADA, or fieldbus access could expose sensitive operational systems if mishandled.\n\nMitigation: Store gateway and API credentials only in the intended secret store and avoid inline credential handling.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown or text with inline shell commands and structured diagnostic summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-first diagnostics; write-capable actions require explicit MOC approval and default-disabled write tooling according to evidence.]\n\n## Skill Version(s):\n\n0.23.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.23.0: 3 files, 8089 bytes\n\nFiles: skill-card.md (2323b), SKILL.md (12906b), _meta.json (134b)\n\nFile v0.23.0:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `uns_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=2.0,<3` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.23.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.23.0\",\n  \"publishedAt\": 1787632317706\n}\n\nFile v0.23.0:skill-card.md\n\n## Description:\n\nFactory edition of iaiops for discrete-manufacturing operations across PLC, CNC, servo and drive bus, tag browsing, Unified Namespace, production-line troubleshooting, downtime root-cause analysis, OEE, and asset inventory workflows with read-first behavior and MOC-gated writes.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zw008](https://clawhub.ai/user/zw008)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, automation engineers, and operations teams use this skill to inspect and troubleshoot discrete-manufacturing lines across industrial protocols, SCADA/MES read layers, MQTT/Sparkplug B/UNS, and cross-protocol diagnostics. It supports advisory analysis, asset inventory, OEE and downtime workflows, and tightly controlled write paths that require MOC approval.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill covers high-impact factory-control capabilities and may be used around industrial control or production data.\n\nMitigation: Install only where the operator is authorized to access those systems, and keep write-capable tools disabled unless formal MOC approval, dry-run review, rollback planning, and network isolation are in place.\n\nRisk: EtherCAT, PROFINET, publishing, and export workflows can affect raw networks or move operational data outside the source system.\n\nMitigation: Pay special attention to raw network access and publishing or export tools; restrict them to approved networks and reviewed data-transfer paths.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with inline shell commands and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-first industrial operations guidance with explicit approval gates for high-impact write actions.]\n\n## Skill Version(s):\n\n0.23.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.22.0: 3 files, 8103 bytes\n\nFiles: skill-card.md (2372b), SKILL.md (12892b), _meta.json (134b)\n\nFile v0.22.0:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=2.0,<3` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.22.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.22.0\",\n  \"publishedAt\": 1785676151352\n}\n\nFile v0.22.0:skill-card.md\n\n## Description: <br>\nFactory edition of iaiops for discrete-manufacturing lines across OPC-UA, Modbus-TCP/RTU, Siemens S7comm, Mitsubishi MC/MELSEC, Omron FINS, Allen-Bradley EtherNet/IP, EtherCAT, PROFINET, MTConnect, IO-Link, MQTT/Sparkplug B/UNS, plus downtime root-cause, OEE, and asset-inventory workflows with read-first and MOC-gated write behavior. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zw008](https://clawhub.ai/user/zw008) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nManufacturing engineers, controls engineers, and operations teams use this skill to inspect, troubleshoot, and analyze discrete-manufacturing PLC, CNC, gateway, UNS, and production-line data. It emphasizes read-first diagnostics and requires managed change approval for high-impact write actions. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: High-impact write tools could affect production control systems if enabled without authorization. <br>\nMitigation: Keep write tools disabled by default, require formal management-of-change approval, verify dry-run behavior, and confirm undo or rollback data before any production write. <br>\nRisk: Broad access to PLCs, gateways, brokers, and credentials can expand operational blast radius. <br>\nMitigation: Install only where industrial-control access is intended and restrict credentials and network reach to the specific devices, gateways, and brokers required for the task. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, shell commands, configuration, analysis] <br>\n**Output Format:** [Markdown with inline shell commands and structured troubleshooting guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include protocol-specific tool names, diagnostic sequences, risk labels, and MOC-gated write guidance.] <br>\n\n## Skill Version(s): <br>\n0.22.0 (source: ClawHub release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.21.1: 3 files, 8223 bytes\n\nFiles: skill-card.md (2643b), SKILL.md (12892b), _meta.json (134b)\n\nFile v0.21.1:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=1.0,<2` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.21.1:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.21.1\",\n  \"publishedAt\": 1785655487534\n}\n\nFile v0.21.1:skill-card.md\n\n## Description: <br>\nFactory edition of iaiops for discrete-manufacturing lines, covering OPC-UA, Modbus-TCP/RTU, Siemens S7comm, Mitsubishi MC/MELSEC, Omron FINS, Allen-Bradley EtherNet/IP, EtherCAT, PROFINET discovery, MTConnect, IO-Link, MQTT/Sparkplug B/UNS, and cross-protocol factory troubleshooting for downtime root cause, OEE, and asset inventory. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zw008](https://clawhub.ai/user/zw008) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, automation engineers, and factory operations teams use this skill to inspect PLC, CNC, servo and drive bus, tag browse, Unified Namespace, MES/SCADA, and production-line evidence, then perform root-cause, OEE, asset-inventory, data-quality, and compliance workflows. The skill is read-first, with high-impact control-system writes requiring MOC approval, dry-run behavior, and undo data. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can guide an agent toward high-impact factory control-system write operations. <br>\nMitigation: Keep write tools disabled by default, require named MOC approval, use dry runs, capture backups or undo data, and avoid production credentials unless operating inside a governed industrial network. <br>\nRisk: Factory diagnostics may depend on live operational technology access, raw-socket privileges, or protocol-specific network reachability. <br>\nMitigation: Install only where the agent is intentionally authorized to inspect factory systems, and avoid raw-socket or production network privileges outside governed industrial environments. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Configuration, Analysis, Markdown, Code] <br>\n**Output Format:** [Markdown with inline commands, tool recommendations, configuration guidance, and structured diagnostic analysis] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include read-first factory diagnostics, protocol-specific tool selection, risk-gated write guidance, and evidence-backed root-cause or OEE summaries.] <br>\n\n## Skill Version(s): <br>\n0.21.1 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.21.0: 3 files, 8093 bytes\n\nFiles: skill-card.md (2385b), SKILL.md (12892b), _meta.json (134b)\n\nFile v0.21.0:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=1.0,<2` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.21.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.21.0\",\n  \"publishedAt\": 1785640048556\n}\n\nFile v0.21.0:skill-card.md\n\n## Description: <br>\nFactory edition of iaiops for discrete-manufacturing lines, covering industrial protocol access, PLC and CNC troubleshooting, Unified Namespace tasks, downtime root-cause analysis, OEE, asset inventory, read-first workflows, and MOC-gated writes. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zw008](https://clawhub.ai/user/zw008) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, automation engineers, and industrial operations teams use this skill to inspect and troubleshoot discrete-manufacturing systems across OPC-UA, Modbus, S7comm, MC/MELSEC, FINS, EtherNet/IP, EtherCAT, PROFINET, MTConnect, IO-Link, MQTT/Sparkplug B, and related MES/SCADA gateway data. It supports read-first diagnostics, data quality checks, asset inventory, OEE and downtime analysis, and tightly governed production write proposals. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: High-impact PLC and network write tools could affect production equipment if used without authorization or change control. <br>\nMitigation: Install only where the operator is authorized, keep writes default-off and dry-run gated, require explicit MOC approval, and verify undo data before any production change. <br>\nRisk: Raw-socket or root-level network features can broaden operational impact on industrial networks. <br>\nMitigation: Run raw-socket or root-required features only on a dedicated industrial network interface. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Configuration, Analysis] <br>\n**Output Format:** [Markdown with tool names, workflows, configuration variables, and inline shell commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include production-impacting write proposals only as dry-run, approval-gated operations with undo data.] <br>\n\n## Skill Version(s): <br>\n0.21.0 (source: release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.20.4: 3 files, 8227 bytes\n\nFiles: skill-card.md (2705b), SKILL.md (12892b), _meta.json (134b)\n\nFile v0.20.4:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=1.0,<2` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.20.4:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.20.4\",\n  \"publishedAt\": 1785630523103\n}\n\nFile v0.20.4:skill-card.md\n\n## Description: <br>\nFactory edition of iaiops for discrete-manufacturing operations across OPC-UA, Modbus, Siemens S7comm, Mitsubishi MC, Omron FINS, Allen-Bradley EtherNet/IP, EtherCAT, PROFINET DCP discovery, MTConnect, IO-Link, MQTT/Sparkplug B/UNS, and cross-protocol diagnostics for downtime, OEE, and asset inventory. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zw008](https://clawhub.ai/user/zw008) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nFactory engineers, controls engineers, and operations teams use this skill to inspect industrial automation systems, troubleshoot production-line dataflow and downtime, compute OEE inputs, inventory assets, and prepare controlled write actions under MOC approval. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill targets industrial systems where inspection or control actions can affect operational environments if used without authorization. <br>\nMitigation: Install only where the operator is authorized to inspect the systems, start on segmented or test networks, and keep write tools disabled unless a real MOC process is in place. <br>\nRisk: Write-capable tools for PLCs, EtherCAT state changes, PROFINET addressing, and MQTT publishing can change production behavior. <br>\nMitigation: Use the documented read-first workflow, require named approval and double confirmation for MOC writes, keep dry-run defaults, and preserve pre-change values for undo planning. <br>\nRisk: Gateway or API tokens referenced by the skill could expose production data or control surfaces if mishandled. <br>\nMitigation: Store tokens in a protected secret store, avoid inline credentials, and scope access to the minimum required read or approved-write capability. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance, Analysis] <br>\n**Output Format:** [Markdown with inline commands, configuration values, diagnostic summaries, and operational guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Read-first workflows with write-capable actions gated by dry-run defaults, approval, and MOC expectations.] <br>\n\n## Skill Version(s): <br>\n0.20.4 (source: server evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.20.3: 3 files, 8084 bytes\n\nFiles: skill-card.md (2582b), SKILL.md (12892b), _meta.json (134b)\n\nFile v0.20.3:SKILL.md\n\n---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文件目录）、\n  `micro800`（Micro820/850/870 符号变量，仅 IP）。真 PLC-5/SLC/MicroLogix/Micro800 待核实。\n\n### EtherCAT（pysoem/SOEM；**Linux + root/CAP_NET_RAW + 专用网卡 + 真从站**）\n- `ethercat_master_state` `ethercat_slaves` `ethercat_slave_info`\n- `ethercat_read_sdo`(CoE SDO 上载) `ethercat_read_pdo`(输入过程映像单帧)\n- `ethercat_write_sdo` / `ethercat_set_state` — **[WRITE][HIGH][MOC]**\n  （AL-state 切换可 START/STOP 运动；默认 off）\n\n### PROFINET（DCP 发现，layer-2 raw socket；不碰 RT 循环数据）\n- `profinet_discover`(IdentifyAll) `profinet_identify_station`\n  `profinet_station_params` `profinet_asset_inventory`\n- `profinet_dcp_set` — **[WRITE][HIGH][MOC]** 重编址 name/IP（可断 IO 关系；默认 off）\n\n### MTConnect（只读；CNC 机床 agent）\n- `mtconnect_probe` `mtconnect_current` `mtconnect_sample` `mtconnect_assets`\n- `mtconnect_oee_snapshot` — availability/execution/mode/program（OEE 输入）\n\n### IO-Link（只读；主站 JSON 接口 — 传感器级可见性）\n- `iolink_master_info` — 主站身份（/deviceinfo：productcode/serial/hw/sw）\n- `iolink_ports` — 有界端口扫描（≤32：mode/status + 在线设备身份）\n- `iolink_device_info` — 单端口设备身份（vendorid/deviceid/productname/serial/status）\n- `iolink_read_pdin` — 过程数据输入（raw hex + 字节数组；按 IODD 解码）\n- `iolink_read_isdu` — ISDU 参数读（iolreadacyclic，index/subindex 有界）\n- `iolink_scan` — 主站 + 全端口一次性快照\n- 配置 `flavor: iotcore`（ifm IoT-Core POST envelope，默认）或 `rest`\n  （plain-REST GET，Balluff/Turck 类）；v1 只读，无写工具\n\n### MQTT / Sparkplug B / UNS（含裸 MQTT）\n- `mqtt_read_topic` `sparkplug_decode_payload` `sparkplug_subscribe_sample`\n  `sparkplug_node_list`\n- `uns_browse` `uns_topic_audit` `uns_schema_drift` `uns_live_audit`\n  `sparkplug_live_schema` `uns_live_drift`\n- `mqtt_publish` — **[WRITE][HIGH][MOC]**（默认 off）\n\n### 离散制造专属（edition 工具;仅随 factory edition 加载,不进全局脑）\n- `changeover_analysis` — **换型/SMED 时长**:换型 = 上个产品末件到下个产品首件的间隔(OEE 可用率\n  只汇总、不拆解)。从好件完成流按产品切换测每次换型,排最长、算均值/总换型时间,worst-first,\n  每时长引用两端时间戳。纯分析,喂 MES/PLC 好件计数。\n\n### Gateway MES/SCADA 读层（edition 工具；厂商 SCADA/MES 平台 HTTP web API — **只读**）\n厂商 SCADA/MES 平台的 **Gateway HTTP/web API** 暴露 MES 侧生产面（模块健康、tag 树、当前值、\n活动告警、tag 历史）——这是基座 `opcua` connector 覆盖不到的部分。该平台**同时**跑一个 OPC-UA\nserver，但那已由 `opcua` connector 处理，本读层**不碰 OPC-UA**。全部**只读**（`risk=low`），\n**无任何写工具**——是厂商官方 MCP 模块的受治理/只读补集（差异化在审计/预算/回滚 harness，不在写）。\n- `ignition_gateway_status` — 网关/模块健康 + 可达性（Gateway doctor 步；`{gateway, modules[]}`）\n- `ignition_tag_browse` — 按 provider/path 浏览 tag 树（`{name, path, type, has_children}`）\n- `ignition_tag_read` — 单/多 tag 当前值/质量/时间戳（`{path, value, quality, timestamp}`）\n- `ignition_alarm_status` — 活动/已确认告警列表（归一化）\n- `ignition_tag_history` — 单 tag 时间窗历史（有界聚合样本 ≤5000）\n- API token/key 从加密 secret store 按 key 名取，绝不内联；`flavor`（webdev/gateway：资源路径 +\n  字段别名）仅存在于连接器内；确切 API 版本/路径 + live gateway 待核实。\n\n### 跨协议脑（永远随 server 暴露）\n- 诊断：`diagnose_dataflow` `downtime_root_cause` `downtime_root_cause_live` `downtime_triage`\n  `learn_cause_weights` `rca_corpus_from_maintenance` `historian_health` `alarm_bad_actors` `tag_health`\n  `subscription_health` `heartbeat_health` `alarm_flood_analysis` `alarm_cascade`\n  `alarm_rationalization_worksheet`\n- 数据质量：`data_quality_scorecard` `data_quality_fleet_rollup`\n- 分析：`oee_compute` `downtime_events` `oee_multidim` `monitor_changes`\n  `health_summary` (deprecated) `anomaly_scan` (deprecated)\n- 资产：`asset_inventory` `cross_protocol_asset_model` `adopt_alias_map` `diff_alias_map`\n- 基线：`baseline_learn` `baseline_check` `baseline_record_change` `baseline_status`\n  （change-log 基线：拒学薄历史、只报持续越带、每次告警必引基线样本 —— 非黑盒异常检测）\n- 合规/信创：`compliance_mapping` `compliance_frameworks` `compliance_dengbao_levels`\n  `compliance_report` `compliance_evidence_bundle`\n  `historian_push` `export_data` `historian_query` `historian_coverage` `stream_publish` `stream_publish_event` `rca_narrate` `fleet_status` `fleet_incidents` `pdm_forecast`\n- 程序解读：`plc_program_outline` `plc_program_xref` `plc_program_section` `plc_program_visibility`（解读导出的 ST/AWL/L5X 程序,只读文件,强制引用行号）\n- 元：`protocols_supported`\n\n## Workflows\n\n1. **Doctor-first**：`protocols_supported` → `iaiops doctor`（或 `opcua_diagnose_connection`\n   之类协议自检）→ 再读数。\n2. **Read-first**：browse/list → 单点读 → 批量/采样；\"没数据\"用 `diagnose_dataflow`，\n   停机用 `downtime_root_cause_live`（advisory + 证据链）。\n3. **MOC 写**：本 edition 的 8 个写工具（s7/mc/fins/eip/ethercat×2/profinet/mqtt）统一\n   `risk=HIGH` + 默认 `dry_run=True` + 改前值 undo + `iaiops approve` 具名审批\n   双确认。未经授权绝不写生产控制系统。\n\n## 支持版本矩阵（内部 HLD §8，设计文档不随本仓发布；`待核实` 不得当既成事实）\n\n| 协议 | 库(pin) | 规范/版本 | 覆盖 | 传输 | 自测 |\n|---|---|---|---|---|---|\n| OPC-UA | `asyncua>=1.0,<2` | OPC UA 1.0x（DA+HA+AC 子集） | 任意合规 Server | opc.tcp | ✅ mock+HDA |\n| Modbus-TCP | `pymodbus>=3.5,<4` | App 1.1b3；FC 1/2/3/4（读）；写 FC05/06/15/16 未实现（read-only）；字节序探测+厂商模板 | 任意 TCP 从站 | TCP/502 | ✅ |\n| Modbus-RTU | `pymodbus>=3.5,<4` + `pyserial>=3.5` | Modbus serial (RTU) | 串口从站 | RS-485/serial | ✅ socat PTY 真串口链路 verified 2026-07-02；物理 RS-485 待核实 |\n| S7comm | `pyS7>=2.8,<3` | ISO-on-TCP (RFC1006) | S7-300/400/1200/1500（后者需开 PUT/GET、关 optimized DB） | TCP/102 | ✅ |\n| 三菱 MC | `pymcprotocol>=0.3,<1` | MC/SLMP 3E（1E 待核实） | Q/L/QnA/iQ-R/iQ-L | TCP/UDP | ✅ |\n| Omron FINS | in-repo stdlib client（无第三方 pin） | FINS per Omron W227/W342（0101/0102/0501/0601 子集；CS/CJ-mode 区码） | CS/CJ/CP/NX(NJ via FINS) 家族（厂内覆盖 待核实） | UDP 9600（默认）+ FINS/TCP | ✅ in-repo mock responder 验证（tests/test_fins.py）；live PLC 待核实 |\n| EtherNet/IP | `pycomm3>=1.2,<2` | EtherNet/IP+CIP：Logix tag + PCCC 数据表 | AB Logix（ControlLogix/CompactLogix/GuardLogix）+ PLC-5/SLC-500/MicroLogix（PCCC）+ Micro800（`plctype` 选） | TCP/44818 | ✅ mock（Logix + SLCDriver）；真 PLC-5/SLC/MicroLogix/Micro800 待核实 |\n| EtherCAT | `pysoem>=1.1,<2`（extra） | EtherCAT；CoE SDO/PDO | SOEM 兼容主从 | Linux+root+真从站 | ⚠️ 无软仿真；真机 待核实 |\n| PROFINET | `pnio-dcp>=1.1,<3`（extra） | DCP 发现/诊断，**不碰 RT 循环** | 西门子系 PN 站 | L2 raw socket | ✅ mock；真机 待核实 |\n| MTConnect | `requests>=2.31,<3` | MTConnect 1.x | CNC/机床（agent） | HTTP REST | ✅ 静态XML |\n| IO-Link | `requests>=2.31,<3`（复用 MTConnect pin） | IO-Link Master JSON Integration（IOLINK-JSON）；ifm IoT-Core / plain-REST 双 flavor | 带 JSON/REST 接口的主站（ifm/Balluff/Turck 类） | HTTP REST/JSON | ✅ mock 主站（双 flavor）；live master 待核实 |\n| MQTT/Sparkplug B | `paho-mqtt>=2.0,<3` + `protobuf>=4.25,<8` | MQTT 3.1.1/5；SpB(Tahu)；亦支持裸 MQTT | SpB 边缘/Broker；UNS | TCP/1883/8883 | ✅ |\n| PLCnext vPLC | 复用 OPC-UA/Modbus pin | 菲尼克斯 PLCnext 内建 OPC-UA(4840)+Modbus-TCP | Phoenix Contact vPLC | opc.tcp+TCP/502 | ✅ 路由验证（`tests/test_plcnext_route.py`）；活体 待核实 |\n| Gateway MES/SCADA 读层: WebDev | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（WebDev 模块 JSON 端点：`/system/webdev/...` — status·tags/browse·tags/read·alarms·tags/history）；**只读**，不碰平台 OPC-UA server（由 opcua connector 覆盖）；确切 API 版本/路径 待核实 | 平台 Gateway 聚合的 provider tag / 告警 / 历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n| Gateway MES/SCADA 读层: Gateway | `requests>=2.31,<3`（复用 MTConnect pin，无新 HTTP 依赖） | Gateway HTTP web API（内建状态/系统函数 REST：`/data/status`·`/data/tags`·`/data/alarms` 布局）；**只读**，JSON 建模，确切路径树 待核实 | 平台 Gateway 状态/模块/tag/告警/历史 | HTTPS + token/API-key | ✅ mock 网关（in-repo，双 flavor）；live gateway + 确切 API 版本/路径 待核实 |\n\nFile v0.20.3:_meta.json\n\n{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.20.3\",\n  \"publishedAt\": 1785558739637\n}\n\nFile v0.20.3:skill-card.md\n\n## Description: <br>\nFactory edition of iaiops for discrete-manufacturing operations across PLC, CNC, gateway, MQTT/Sparkplug/UNS, and industrial protocol workflows, with read-first diagnostics and management-of-change-gated writes. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zw008](https://clawhub.ai/user/zw008) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nManufacturing engineers, controls engineers, and operations teams use this skill to inspect and troubleshoot discrete-manufacturing production lines, including PLCs, CNC assets, industrial networks, SCADA/MES gateways, and Unified Namespace data. It supports read-first diagnostics, OEE and downtime analysis, asset inventory, and explicitly gated write workflows that require management-of-change approval. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can guide high-impact write operations against industrial control systems. <br>\nMitigation: Keep write tools disabled unless a real management-of-change approval is in place, and require explicit approval before production changes. <br>\nRisk: Raw industrial protocols and fieldbus diagnostics may require privileged network access or dedicated interfaces. <br>\nMitigation: Install only where the agent is authorized to inspect industrial systems and use dedicated network interfaces for raw industrial protocols. <br>\nRisk: SCADA/MES credentials could expose production data or operational controls if mishandled. <br>\nMitigation: Store SCADA/MES tokens only in the configured secret store and avoid inline credentials. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zw008/skills/iaiops-factory) <br>\n- [ClawHub publisher profile](https://clawhub.ai/user/zw008) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with tool and shell command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include diagnostic findings, operational recommendations, configuration steps, and gated write plans for industrial systems.] <br>\n\n## Skill Version(s): <br>\n0.20.3 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: iaiops-factory Owner: zw008 Summary: Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ/CP/NX), Allen-Bradley EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level visibility), MQTT/Sparkplug B/UNS, plu","codeSnippets":[],"executableExamples":[],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: iaiops-factory\ndescription: >-\n  Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU,\n  Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS\n  (CS/CJ/CP/NX), Allen-Bradley\n  EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP\n  discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level\n  visibility), MQTT/Sparkplug B/UNS, plus the\n  cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC,\n  CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or\n  production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers\n  Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers).\n---\n\n# iaiops-factory — 离散制造 edition（11 协议 + 脑）\n\n启动：`IAIOPS_MCP=factory` / `iaiops-mcp-factory`。PLCnext vPLC 现场用精简\n`IAIOPS_MCP=plcnext` / `iaiops-mcp-plcnext`（= opcua+modbus，走 vPLC 内建服务）。\n单协议现场直接 `IAIOPS_MCP=<协议>`。EtherCAT 需 extra：`pip install iaiops[ethercat]`；\nPROFINET：`pip install iaiops[profinet]`（或 `iaiops[factory]` bundle）；Omron FINS 客户端为 in-repo 纯 stdlib 实现，无需第三方库。\n\n## 工具\n\n### OPC-UA（只读）\n- `opcua_server_info` / `opcua_browse` / `opcua_read_node` / `opcua_read_many`\n- `opcua_subscribe_sample` `opcua_read_alarms` `opcua_alarm_events`(A&C 带时间戳) `opcua_read_history`(HDA)\n- `opcua_diagnose_connection` — 连接失败五类归因（证书/策略/认证/网络/配置）\n- `opcua_discover_tags` — 自动发现 + 语义资产建模\n- `opcua_health_summary` — tag vs 阈值分类；`opcua_anomaly_scan` — 有界统计异常扫描\n\n### Modbus-TCP / Modbus-RTU（本 edition 只读）\n- `modbus_read_holding`(FC03) `modbus_read_input`(FC04) `modbus_read_coils`(FC01)\n  `modbus_read_discrete`(FC02) — 带解码提示\n- `modbus_detect_byte_order` — 自动探测寄存器块字节/字序\n- `modbus_list_templates` / `modbus_apply_template` — 厂商寄存器模板 → 命名 tag\n- `modbus_health_summary` — 寄存器 vs 阈值分类\n\n### Siemens S7comm（pyS7）\n- `s7_cpu_info` `s7_read_area` `s7_read_db` `s7_read_many`\n- `s7_write_db` — **[WRITE][HIGH][MOC]** 写 DB 单值（默认 off）\n\n### 三菱 MC（3E；Q/L/iQ）\n- `mc_cpu_status` `mc_read_words` `mc_read_bits` `mc_read_many`\n- `mc_write_words` — **[WRITE][HIGH][MOC]**（默认 off）\n- CC-Link 经主站读（零 CC-Link 硬件，见 docs/CCLINK.md）：`mc_cclink_templates`\n  `mc_cclink_link_read`（RX/RY/RWr/RWw 刷新映像，模板默认值 `待核实` per 项目）\n  `mc_cclink_network_health`（SB/SW 每站链路诊断：classic SW0080–；IE Field\n  SB0049 + SW00B0– + SW00A0– baton pass）\n\n### Omron FINS（in-repo stdlib 客户端；CS/CJ/CP/NX-via-FINS）\n- `fins_cpu_info`(0501 CPU 型号/版本) `fins_cpu_status`(0601 运行状态/模式/故障字)\n- `fins_read_words`(0101; DM/CIO/W/H/A/EM, ≤500 字) `fins_read_bits`\n  `fins_read_many`(单会话批量, ≤20 项)\n- `fins_write_words` — **[WRITE][HIGH][MOC]**（0102；默认 off）\n\n### Allen-Bradley EtherNet/IP（pycomm3）\n- `eip_controller_info` `eip_list_tags` `eip_read_tag` `eip_read_many`\n- `eip_write_tag` — **[WRITE][HIGH][MOC]**（默认 off）\n- **`plctype` 选驱动**（config key 或工具入参）：`logix`（默认；ControlLogix/CompactLogix/\n  GuardLogix 符号 tag）、`slc`（PLC-5/SLC-500/MicroLogix PCCC 数据表：`N7:0` 整数、\n  `B3:0/0` 位、`F8:0` 浮点、`T4:0.ACC`/`C5:0.ACC`；`eip_list_tags` 改列数据文"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7b067awq2s97bn3d7p5qfhw5827pxc\",\n  \"slug\": \"iaiops-factory\",\n  \"version\": \"0.28.0\",\n  \"publishedAt\": 1789535329667\n}"},{"path":"skill-card.md","content":"## Description:\n\nFactory edition of iaiops for discrete-manufacturing lines, covering OPC-UA, Modbus, Siemens S7comm, Mitsubishi MC/MELSEC, Omron FINS, Allen-Bradley EtherNet/IP, EtherCAT, PROFINET, MTConnect, IO-Link, MQTT/Sparkplug B/UNS, and cross-protocol analysis for downtime root cause, OEE, asset inventory, and production-line troubleshooting.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zw008](https://clawhub.ai/user/zw008)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFactory engineers, automation developers, and operations teams use this skill to inspect industrial protocol endpoints, troubleshoot production-line dataflow and downtime, compute OEE signals, inventory assets, and prepare governed configuration drafts. Write-capable operations are intended to stay gated by management-of-change approval, dry-run behavior, and rollback procedures.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Write-capable industrial control actions can affect PLCs, EtherCAT device state, PROFINET station configuration, or MQTT topics.\n\nMitigation: Keep production write tools disabled unless the site has explicit change-control approval, dry-run review, named approval, and rollback procedures.\n\nRisk: Industrial protocol access may require privileged host or network access and can expose sensitive plant operations.\n\nMitigation: Install and run the skill in an isolated environment from a trusted package source with pinned and hash-verified dependencies.\n\nRisk: Some live hardware, gateway paths, and site-specific protocol coverage require local verification before operational use.\n\nMitigation: Use the documented doctor-first and read-first workflows, validate discovered facts against site equipment, and avoid acting on unverified placeholders.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/zw008/skills/iaiops-factory)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline commands, structured findings, configuration drafts, and analysis summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include read-only industrial telemetry summaries, bounded scans, cited evidence chains, and gated write proposals.]\n\n## Skill Version(s):\n\n0.28.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ/CP/NX), Allen-Bradley EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level visibility), MQTT/Sparkplug B/UNS, plus the cross-protocol brain (downtime root-cause, OEE, asset inventory). Use for PLC, CNC, servo/drive bus, name-of-station, tag browse, Unified Namespace, or production-line troubleshooting tasks. Read-first, MOC-gated writes. Also covers Phoenix Contact PLCnext vPLC (via its built-in OPC-UA + Modbus servers). Skill: iaiops-factory Owner: zw008 Summary: Factory edition of iaiops — discrete-manufacturing lines: OPC-UA, Modbus-TCP/RTU, Siemens S7comm (S7-300/400/1200/1500), Mitsubishi MC/MELSEC, Omron FINS (CS/CJ/CP/NX), Allen-Bradley EtherNet/IP (ControlLogix/CompactLogix), EtherCAT (CoE/SOEM), PROFINET (DCP discovery), MTConnect (CNC machine tools), IO-Link (master JSON — sensor-level visibility), MQTT/Sparkplug B/UNS, plu","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1405,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T21:11:24.552Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:04:16.903Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}