AgentStack
SKILL verified Apache-2.0 Self-run

Modelbase Fsm

skill-grasscaograss-awesomeweldoneskills-modelbase-fsm · by grasscaograss

>

No reviews yet
0 installs
3 views
0.0% view→install

Install

$ agentstack add skill-grasscaograss-awesomeweldoneskills-modelbase-fsm

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Modelbase Fsm? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

ModelBase FSM 状态机参考

源文件位置

| 类别 | 路径 | |------|------| | FSM 脚本(拓扑定义) | src/Weldone.Application/StateEngines/ModelBase/ModelBaseFSM.FSMScript | | 枚举定义 | src/Weldone.Application/StateEngines/ModelBase/ModelBaseFSMEngine_EnumDefine.cs | | Engine 类 | src/Weldone.Application/StateEngines/ModelBase/ModelBaseFSMEngine.cs | | AppService | src/Weldone.Application/StateEngines/ModelBase/ModelBaseFSMAppService.cs | | 节点实现 | src/Weldone.Application/States/ModelBase/ | | 工作流数据 | src/Weldone.Application.Contracts/Workflows/ScanWeldWorkflowData.cs | | 全局数据 | src/Weldone.Application.Contracts/Workflows/FullWorkflowData.cs |


顶层状态图 (ModelBaseNode)

Init ──Init2WhileEvent──> While ──While2CoarseEvent──> Coarse ──Coarse2ScanWeldEvent──> ScanWeldPrepare
  │                         │                                                                      │
  └─Any2Exception──>Exn     └─While2ExitEvent──> Exit                               ScanWeldPrepare2WhileEvent
                                      ▲                                              │
                                      │                                              ▼
                          ScanWeldEnd ──ScanWeldEnd2WhileEvent──> ScanWeldWhile ──ScanWeldWhile2ExecuteEvent──> ScanWeldExecute
                                       (外层循环)         │
                                                          └─ScanWeldWhile2BreakEvent──> Exit

顶层枚举

enum ModelBaseNode { Init, While, Coarse, ScanWeldPrepare, ScanWeldWhile, ScanWeldExecute, ScanWeldEnd, Exit, Exception }
enum ModelBaseEvent { Init2WhileEvent, While2CoarseEvent, While2ExitEvent, Coarse2ScanWeldEvent, ScanWeldPrepare2WhileEvent, ScanWeldWhile2ExecuteEvent, ScanWeldWhile2BreakEvent, ScanWeldExecute2EndEvent, ScanWeldEnd2WhileEvent, EndEvent, Any2ExceptionEvent }

三个 Executor

| Executor | 起始节点 | 终止事件 | 用途 | |----------|----------|----------|------| | Executor | Init | EndEvent | 完整流程 | | ScanWeldExecutor | ScanWeldPrepare | EndEvent | 仅扫描焊接循环 | | CoarseExecutor | Coarse | Coarse2ScanWeldEvent | 仅粗定位 |


内层 ScanWeld 状态图 (ScanWeldNode)

这是 ScanWeldExecute 节点 [ScanWeldPlan -> ScanWeldEndEvent] 的内部子状态机。

ScanWeldPlan ──SWPlan2Next──> ForeachScanWeld ──ForeachSW2Next──> ForeachScanUnit ──ForeachWS2Next──> CheckIfCG4S
  │                              │                      │              │                              │
  │                              │                      │              └──ForeachWS2Break──> ForeachWeldMultiPass
  │                              │                      │                                             │
  │                              └──ForeachSW2Break──> ScanWeldExit                                    │
  │                                                                                 ┌───────────┘
  │                                                                                 │
  │  ┌──────────────────── 循环回来 ──────────────────────┐                         │
  │  │                                                    │                         ▼
  │  ▼                                           ForeachWeldMultiPass ──ForeachMultiPass2Next──> CheckIfCG4W
  │ MoveToNextWeldSeam ──NextWeldSeam2Next──> ForeachScanWeld          │                    │
  │  ▲                                       (外层循环)    └──ForeachMultiPass2Break──> ForeachScanWeld
  │  │                                                                                      │
  │  │                      ScanTransPlan ◄──CGBackPlan4S── CG4SExecute ◄── CGTrans4S ◄── CGPrepare4S
  │  │                       │    ▲             │                     │             │
  └──┼── Scan2Failed ◄── ScanExecute/RhScanExecute                  └─CG4WExecute ◄── CGTrans4W ◄── CGPrepare4W
     │                     │    │
     │                  Scan2Next──> ForeachScanUnit
     │
     └── Weld2Failed ◄── WeldExecute/RhWeldExecute
            │    │
            │  Weld2Next──> ForeachWeldMultiPass
            │
            └── Weld2Break──> WeldUnrecognized
                                ├── WeldUnrecognized2Failed──> ScanTransPlan (重新扫描)
                                ├── WeldUnrecognized2Break──> MoveToNextWeldSeam (跳过)
                                └── WeldDeviationConfirmed──> WeldExecute (继续焊接)

内层枚举

enum ScanWeldNode {
    ScanWeldPlan, ForeachScanWeld, ForeachScanUnit,
    ScanTransPlan, ScanTrans, ScanExecute, RhScanExecute,
    ForeachWeldMultiPass, WeldTransPlan, WeldTrans,
    WeldExecute, RhWeldExecute,
    CheckIfCleanGun, RobotCleanGun,
    MoveToNextWeldSeam, ScanWeldExit, Exception
}

enum ScanWeldEvent {
    SWPlan2Next, ForeachSW2Next, ForeachSW2Break,
    ForeachWS2Next, ForeachWS2Break,
    ScanTransPlan2Next, ScanTransPlan2Skip, ScanTrans2Next,
    Scan2Next, Scan2Failed,
    ForeachMultiPass2Next, ForeachMultiPass2Break,
    WeldTransPlan2Next, WeldTrans2Next,
    Weld2Next, Weld2Failed,
    NextWeldSeam2Next, ScanWeldEndEvent, Any2ExceptionEvent
}

图变换(Normal vs Complex Contour)

Engine 在运行时通过 Transform2NormalConnect()Transform2ComplexContourConnect() 动态切换 Scan/Weld 节点:

| 模式 | Scan 节点 | Weld 节点 | CGBack 回归目标 | |------|-----------|-----------|----------------| | Normal | ScanExecute | WeldExecute | CGBack4S→ScanTransPlan, CGBack4W→WeldTransPlan | | Complex (Rhino) | RhScanExecute | RhWeldExecute | CGBack4S→RhScanExecute, CGBack4W→RhWeldExecute |


清枪 (Clean Gun) 子流程

扫描前清枪 (4S 分支):

CheckIfCG4S ──CheckCG4S2Break──> ScanTransPlan (无需清枪)
             └──CheckCG4S2Next──> CGPrepare4S -> CGTrans4S -> CG4SExecute -> CGBackPlan4S -> ScanTransPlan

焊接前清枪 (4W 分支):

CheckIfCG4W ──CheckCG4W2Next──> WeldExecute (无需清枪)
             └──CheckClean2Next──> CGPrepare4W -> CGTrans4W -> CG4WExecute -> CGBackPlan4W -> WeldTransPlan

Yield API

节点实现为 IEnumerable 协程,通过 yield return 返回:

| Yield | 含义 | 对应 FSMScript 事件 | |-------|------|---------------------| | Yield.Next (值=1) | 正常推进到下一节点 | xxx2Next | | Yield.Break (值=3) | 跳出循环/跳过 | xxx2Break / xxx2Skip | | Yield.Failed (值=2) | 失败,走失败路径 | xxx2Failed | | Yield.Pause | 暂停当前节点 | - | | Yield.Event(int) | 发射自定义事件号 | FSMScript 中 10086->WeldDeviationConfirmed | | Yield.ToNodeStart | 重新执行当前节点 | - | | Yield.Delay(ms) | 延迟后继续 | - | | Yield.None | 什么都不做,继续执行 | - | | Yield.RetryIfPaused(fn) | 暂停恢复后重试 fn | - | | Yield.TryCatch(fn) | 带错误捕获执行 fn | - |


节点实现速查

| 文件 | 节点 Type | 行数 | 职责 | |------|-----------|------|------| | Plan/1.ScanWeldPlan.cs | ScanWeldPlan | 348 | 规划:启动后台任务生成扫描焊接计划,通过 Channel 投喂任务 | | 2.ForeachScanWeldExecute.cs | ForeachScanWeldExecute | 98 | 迭代器:从 ExecuteTaskChannel 取焊缝对,初始化精定位任务 | | 3.CheckScanState.cs | CheckScanState | 41 | 判断:首次进→扫描,二次进→跳到焊接 | | 3.ForeachScanUnit.cs | ForeachScanUnit | 95 | 迭代器:遍历焊缝段,跳过已完成精定位的段 | | 4.ScanTransitionPlan.cs | ScanTransPlan | 129 | 规划:P2P 过渡到扫描起点 | | 5.TransitionExecute.cs | TransitionExecute | 52 | 执行:运行过渡路径(暂未使用) | | 6.ScanExecute.cs | ScanExecute | 518 | 核心:精定位扫描,机器人运动+相机拍照+精定位计算 | | 6-2.RhScanExecute.cs | RhScanExecute | 99 | Rhino 变体扫描 | | 7.ForeachWeldMultiPass.cs | ForeachWeldMultiPass | 58 | 迭代器:遍历多层多道 | | 8.WeldTransitionPlan.cs | WeldTransitionPlan | 92 | 规划:P2P 过渡到焊接起点 | | 10.WeldExecute.cs | WeldExecute | 488 | 核心:焊接执行,含 LS 文件生成、偏差检查、清枪判断 | | 10-2.RhWeldExecute.cs | RhWeldExecute | 97 | Rhino 变体焊接 | | 10.1CheckIfCleanGun.cs | CheckIfCleanGun | 112 | 判断:累计焊长/弧时是否达阈值 | | 10.2CleanGunPrepare.cs | CleanGunPrepare | 44 | 规划:到清枪站的过渡 | | 10.5RobotCleanGun.cs | RobotCleanGun | 50 | 执行:调用机器人清枪 | | 10.6CleanGunPrepare.cs | CleanGunBackPlan4Scan | 113 | 规划:清枪后回扫描位 | | 10.9WeldUnrecognized.cs | WeldUnrecognized | 103 | 错误处理:Cancel/Retry/Skip/Continue 四种结果 | | 11.MoveToNextWeldSeam.cs | MoveToNextWeldSeam | 74 | 恢复:同步关节位置,发布失败状态 | | 12.ScanWeldExit.cs | ScanWeldExit | 31 | 终止:发布 TaskInfoUpdateEvent | | EHomeTransitionPlan.cs | - | 48 | E-Home 过渡规划 | | MoveNext.cs | - | 24 | 递增 ExecuteIndex | | TakeExecuteTask.cs | - | 45 | 阻塞式从 ExecuteTaskCollection 取任务 |


关键服务依赖

节点通过 DI 注入以下服务:

| 服务 | 用途 | 使用节点 | |------|------|----------| | IRobotManagementAppService | 机器人管理(Home位姿、清枪、过渡执行) | ScanTransPlan, CleanGun*, TransitionExecute | | IVisionRobotAppService | 视觉机器人(拍照、精定位) | ScanExecute, ScanWeldPlan | | IWeldRobotAppService | 焊接机器人(焊接执行) | WeldExecute, WeldTransPlan, RhWeldExecute | | DualPrecisePositionAppService | 精定位服务 | ScanExecute, WeldExecute, ScanWeldPlan | | PrecisePositioningManager | 精定位管理器 | ScanTransPlan | | PlanManager | 规划管理器 | ScanWeldPlan, ScanTransPlan | | SolverContextRepository | 几何/工艺数据 | ScanWeldPlan, ForeachScanUnit, ForeachWeldMultiPass, WeldExecute | | AccumulatorForCleanGunAppService | 清枪累计器 | CheckIfCleanGun, RobotCleanGun | | VisionCaptureManager | 视觉拍照管理 | ScanExecute | | ISettingProvider | 配置读取 | WeldExecute, CheckIfCleanGun |


工作流数据结构

FullWorkflowData(全局,Context.Data)

FullWorkflowData
├── Tasks: List           # 自动排单任务列表
├── WpItems: List    # 手动排单工件列表
├── SkipList: List                # 跳过列表
├── CurrentWorkpieces: List       # 当前工件
├── Template: PlateTemplate             # 模板
├── Coarses: Dict      # 粗定位结果
├── CurrentScanWeldFlowData             # 当前扫描焊接数据
├── PosBeforeExecute: JointPoseDto      # 执行前位姿
└── ScanWeldWorkflowDataDict            # 按工件Guid索引的扫描焊接数据

ScanWeldWorkflowData(内层,通过 Dict 按 Guid 取)

ScanWeldWorkflowData
├── Id, WorkpieceId, Round
├── WsgIds: List                  # 全部焊缝组ID
├── SuccessWsgIds: List           # 已成功焊缝组ID
├── SkipScan: bool                      # 是否跳过扫描
├── SkipList: List                # 跳过列表
├── ArmJointPoses: Dict  # 各机械臂关节位姿
├── TransitionProcess: Process          # 过渡工艺
├── ExecuteTaskChannel: Channel   # 异步任务队列
├── CurrentWeldSeamPair: WeldSeamPairContext  # 当前焊缝对(双机)
├── CurrentPassIndex: int               # 多层多道当前道次
├── CrtCraftId: Guid                    # 当前工艺ID
├── NeedRePlanScanTrans / NeedRePlanWeldTrans  # 重规划标记
├── DeviationConfirmed: bool            # 偏差已确认
├── ScanCaches / ScanTransCaches        # 扫描缓存
├── WeldCaches / WeldTransCaches        # 焊接缓存
├── PreciseCaches                       # 精定位缓存
└── ExternalCaches                      # 外部轴缓存

注意事项

  1. FSMScript 是单一真相源:节点名、Type、转移关系都在 .FSMScript 文件中定义。新增/修改节点必须同步更新此文件。
  2. 节点 Type 映射def ScanExecute(ScanExecute) 中括号内是 Type,用于 DI 创建节点实例。多个 def 可共享同一个 Type(如 CG4SExecuteCG4WExecute 都用 RobotCleanGun)。
  3. 图变换是运行时的Transform2NormalConnect() / Transform2ComplexContourConnect() 在 Engine 初始化后调用,修改连线关系,不修改节点定义。
  4. Deprecated 字段CurrentWSGIDCrtScanWsgIdsArmIndex 已废弃,应使用 CurrentWeldSeamPair 相关 API。

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.