ABB机器人搬运程序逻辑图

💡 点击下方蓝色的方块,可直接查看对应的子程序详情。
flowchart TD classDef subProc fill:#e1f5fe,stroke:#0277bd,stroke-width:2px,cursor:pointer; classDef logic fill:#f1f8e9,stroke:#558b2f; classDef trap fill:#ffebee,stroke:#c62828,stroke-dasharray: 5 5; M_Start((程序开始)) --> M_Init[初始化: 链接中断 & 计算标签坐标] M_Init --> M_Loop{{"While TRUE 主循环"}}:::logic %% 搬瓶 M_Loop --> M_WaitPZ[WaitDI diPZ] M_WaitPZ --> M_Mode{{"判断模式 diMS"}}:::logic M_Mode -- 顺时针 --> M_CW["调用 banPZ (顺)"]:::subProc M_Mode -- 逆时针 --> M_CCW["调用 banPZ (逆)"]:::subProc M_CW --> M_PulsePZ[发送完成脉冲] M_CCW --> M_PulsePZ %% 搬盖 M_PulsePZ --> M_WaitGZ[WaitDI diGZ] M_WaitGZ --> M_CallGZ["调用 banGZ (搬盖)"]:::subProc M_CallGZ --> M_PulseGZ[发送完成脉冲] %% 搬标 M_PulseGZ --> M_WaitBQ[WaitDI diBQ] M_WaitBQ --> M_CallBQ["调用 banBQ (搬标)"]:::subProc M_CallBQ --> M_PulseBQ[发送完成脉冲] M_PulseBQ --> M_Loop %% 中断 M_Int((中断触发)) -.-> M_Trap[执行 TRAP fuwei: 复位]:::trap %% 点击跳转 click M_CW clickHandler click M_CCW clickHandler click M_CallGZ clickHandler click M_CallBQ clickHandler

子程序: banPZ (搬瓶子)

flowchart TD classDef action fill:#fff3e0,stroke:#e67e22; classDef loop fill:#f3e5f5,stroke:#7b1fa2; PZ_Start(开始) --> PZ_Loop{{"循环: 1 到 瓶子数量"}}:::loop PZ_Loop --> PZ_Wait[等待有瓶 diYP]:::action PZ_Wait --> PZ_Pick["MoveL 抓瓶点
闭合夹具"]:::action PZ_Pick --> PZ_Up1[抬起] PZ_Up1 --> PZ_Place["MoveL 放瓶点 (数组pList)
松开夹具"]:::action PZ_Place --> PZ_Up2[抬起并回原点] PZ_Up2 --> PZ_Loop

子程序: banGZ (搬盖子)

flowchart TD classDef action fill:#e8f5e9,stroke:#27ae60; GZ_Start(开始) --> GZ_Home[回原点 Home2] GZ_Home --> GZ_Pick["去取盖点 xigaizi
吸气 (doXP1, doXP2)"]:::action GZ_Pick --> GZ_Place["去放盖点 fanggaizi
放气 (松开)"]:::action GZ_Place --> GZ_End(结束)

子程序: banBQ (搬标签)

flowchart TD classDef action fill:#ede7f6,stroke:#5e35b1; classDef check fill:#e0f2f1,stroke:#00695c; BQ_Start(开始) --> BQ_Loop1{{"外循环: 处理每个瓶子"}}:::check BQ_Loop1 --> BQ_Loop2{{"内循环: 扫描标签 1-24"}}:::check BQ_Loop2 -- "已取走 (TRUE)" --> BQ_Loop2 BQ_Loop2 -- "未取走 (FALSE)" --> BQ_Pick["MoveL 取标点 pQuBQ
吸气"]:::action BQ_Pick --> BQ_Place["MoveL 贴标点 pFangBQ
破真空"]:::action BQ_Place --> BQ_Set["标记 quleBQ = TRUE"]:::action BQ_Set --> BQ_Break["GOTO NextBottle
(跳出内循环)"] BQ_Break --> BQ_Loop1

初始化: BQchushihua (计算24个标签点)

此逻辑在上电或中断复位时执行,用于生成4行6列的矩阵坐标。
flowchart TD classDef calc fill:#fff9c4,stroke:#fbc02d; classDef loop fill:#f3e5f5,stroke:#7b1fa2; Init_Start(开始) --> Init_SetI[设索引 i = 1] Init_SetI --> Init_Row{{"外循环 Row: 1 到 4"}}:::loop Init_Row -- 下一行 --> Init_Col{{"内循环 Col: 1 到 6"}}:::loop Init_Col -- 下一列 --> Init_Calc["计算坐标偏移:
X偏移 = -(row-1)*30
Y偏移 = (col-1)*30"]:::calc Init_Calc --> Init_Assign["赋值 pQuBQ(i)
重置状态 quleBQ(i) = FALSE"]:::calc Init_Assign --> Init_Inc[i = i + 1] Init_Inc --> Init_Col Init_Col -- 列结束 --> Init_Row Init_Row -- 行结束 --> Init_End(计算完成)