mop-twin

MOP manufacturing line digital twin helpers: takt beat (JPH × speed), station timing, traffic gate, branch routing, visualization ping for n8n

Package Information

Released: 6 mo ago
Downloads: 15 weekly / 81 monthly
Latest Version: 0.5.6
Author: MOP

Available Nodes

Documentation

n8n-nodes-mop-twin

面向 MOP 产线数字孪生 / 节拍仿真 的 n8n 自定义社区节点包(v0.3.8):节拍放行、工位墙钟、操作工位(带 stationId)、工位缓冲区(占用分流或 工作流 FIFO 池)、信号灯(绿/黄/红三路)、多路分支、可视化上报;与内置 MySQL、Wait、HTTP Request(PLC) 组合使用。

从 n8n-nodes-des-twin 更名而来:npm 包名、节点 name、输出 JSON 字段前缀均已改为 MOP(mopStation、mopTraffic 等)。旧工作流中的 des* 节点需手动替换。


一、节点一览

节点 name 说明
MOP 节拍放行 mopTaktBeat(v1/v2,默认 v2) 整批 或 流水线循环(每次执行 1 辆车 + 静态队列回本节点,无需 Split In Batches);见下文
MOP 工位墙钟 mopStationTiming mopStation.waitWallSeconds(Wait:$json.mopStation.waitWallSeconds)
操作工位 mopWorkstation mopWorkstation(stationId、waitWallSeconds 等);可与墙钟二选一或串联
工位缓冲区 mopBuffer(v1/v2) 双输出:可入区 / 已满。v2:按占用数字段 或 工作流 FIFO 池(入队/出队,跨执行,见下文)
MOP 信号灯 mopTrafficLight 三个主输出:绿灯 / 黄灯 / 红灯;每条带 mopTraffic(含 branch、branchName、reason)
MOP 多路分支 mopBranchRoute(v2) 单输出;mopBranch.lane;多行匹配 + 下游 Switch
MOP 可视化上报 mopVisualizationPing mopVisual,默认 eventName: mopBatch

二、构建

cd n8n-nodes-mop-twin
npm install
npm run build

仓库根:npm run n8n-nodes:build。


三、安装到 n8n

  • Community nodes:安装 n8n-nodes-mop-twin(或 @版本)。
  • 命令行:cd ~/.n8n/nodes && npm i n8n-nodes-mop-twin,重启 n8n。
  • 画布搜索:「MOP」、「工厂」(各节点 codex.alias 已带工厂/MOP 产线词,便于在 Search nodes 里一次搜出一组)、「操作工位」、「工位缓冲区」。

四、推荐拓扑

MOP 节拍放行:整批 vs 流水线(一辆接一辆)

整批 item(默认「整批 item」):一次执行产出 N 条 item,每行 JSON 仍是一辆车;下游在同一次 execute 里收到整份 items 数组,不会在墙钟上自动间隔。切勿把本节点输出经 Code 等再接回本节点入口(会形成执行环、连线显示上千条 item)。若仍用这种模型又要墙钟间隔,可在下游用 Wait($json.spawnIntervalSimMs)等自行控节奏,或 Split In Batches(批量 1)类方案。

流水线循环(节点里选「流水线循环」):每次节点执行 只输出 1 辆车,剩余车保存在 工作流静态数据 队列中。拓扑为 [MOP 节拍放行] → …处理… → [Wait 可选] → 回到 [MOP 节拍放行];仅当上一辆车 JSON 里 mopTwinTaktPipelineContinuation === true 时应继续回路,队列为空后不要再回本节点(否则会报错)。可选打开 「续发前在本节点内等待」 用 spawnIntervalSimMs 做节拍的 sleep(若下游再接 Wait,注意避免双重间隔)。不需要 Split In Batches。

[触发] → [MOP 节拍放行] → [MySQL] → [MOP 信号灯]
            ├ 绿灯 → …
            ├ 黄灯 → …
            └ 红灯 → …
     → [MOP 多路分支] → [Switch:按 $json.mopBranch.lane]
     → [工位缓冲区](可入区)→ …
     → [操作工位] 或 [MOP 工位墙钟] → [Wait] → [HTTP PLC] → [MOP 可视化上报]

工位缓冲区:n8n 里能做「池子、先进先出」吗?

可以部分实现。同一次执行里,数据本来就是按 item 顺序往下传的,不需要额外池子。跨多次执行(例如定时器多次进站、另一次执行再出站)要在 n8n 里记住队列,必须用持久化载体。本包 v2 在 「工作流 FIFO 池(跨执行)」 模式下使用 n8n 的 getWorkflowStaticData('global'):入队节点把每条 item 的 json 序列化进工作流级队列,出队节点在之后的执行里按 FIFO 取出并交给下游。

注意:仅存可 JSON.stringify 的字段,不含 binary;并行触发多次执行时不能保证原子性(适合孪生/演示,硬生产建议 Redis 或数据库队列)。

典型接法:一条分支 入队(动作选「入队」)接在上游之后;另一条分支用 Schedule 等触发 出队(同一 bufferId、动作选「出队」),「可入区」输出即池头弹出的 payload。


五、发布 npm

见包内 scripts/pre-publish-check.mjs 与 npm run publish:npm(需 npm login)。


六、许可

MIT。

Discussion