一、請求機器人上件步
二、程序代碼解釋:1、程序代碼1:
1、程序代碼:
fbVar_TonDelay2(IN := (bInPartPresentLeft AND bInPartPresentRight), PT := T#100MS);(* Go to the next step *)
stVar_SEQ.bTOK := stVar_SEQ.bRELEASE AND(stGV_SYS_ELEMENTS.arstELEMENT[idxProtectionSlider].stFeedBack.stSTATE.bIN_HPOR bEmptyModeInProgress(* Single part with delay *)OR fbVar_TonDelay.Q(* Two parts loaded *)OR fbVar_TonDelay2.Q);
1.1、代碼解釋:
第一部分:定時器控制邏輯
fbVar_TonDelay2(IN := (bInPartPresentLeft AND bInPartPresentRight), PT := T#100MS);
- 功能:啟動一個 100 毫秒的定時器(
fbVar_TonDelay2
)。 - 觸發條件:當左右兩側的零件檢測傳感器(
bInPartPresentLeft
?和?bInPartPresentRight
)同時檢測到零件時,定時器開始計時。 - 輸出結果:
fbVar_TonDelay2.Q
:定時器計時完成后變為TRUE
,表示 "兩個零件均已到位且穩定"。
第二部分:步驟轉換條件
stVar_SEQ.bTOK := stVar_SEQ.bRELEASE AND(stGV_SYS_ELEMENTS.arstELEMENT[idxProtectionSlider].stFeedBack.stSTATE.bIN_HPOR bEmptyModeInProgressOR fbVar_TonDelay.QOR fbVar_TonDelay2.Q);
- 核心邏輯:當滿足以下所有條件時,設置
bTOK
(步驟完成標志)為TRUE
,觸發狀態機進入下一步:- 釋放條件滿足:
stVar_SEQ.bRELEASE
?必須為TRUE
(通常表示當前步驟允許結束)。 - 或條件滿足其一:
- 保護滑塊到位:
bIN_HP
?為TRUE
,表示機械防護裝置已正確定位。 - 空運行模式:
bEmptyModeInProgress
?為TRUE
,允許跳過零件檢測直接執行。 - 單零件延遲完成:
fbVar_TonDelay.Q
?為TRUE
(代碼中未顯示該定時器的觸發邏輯,但推測為單側零件檢測的延遲)。 - 雙零件延遲完成:
fbVar_TonDelay2.Q
?為TRUE
(即左右零件同時到位并穩定 100ms)。
- 保護滑塊到位:
- 釋放條件滿足:
1.2 整體邏輯解析
- 雙零件檢測:當左右兩側同時檢測到零件時,啟動 100ms 定時器(防抖動或穩定檢測)。
- 步驟放行條件:
- 優先檢查保護裝置狀態(安全機制)。
- 支持空運行模式(調試或維護需求)。
- 兼容單零件和雙零件處理:
- 單零件:依賴
fbVar_TonDelay
(單側檢測延遲)。 - 雙零件:依賴
fbVar_TonDelay2
(雙側檢測延遲)。
- 單零件:依賴
- 狀態轉換:當
bTOK
被置為TRUE
時,通常會觸發 SFC(順序功能圖)的步驟轉換
2、程序代碼2
2.1 代碼
stvar_seq.bDisableTimeout := TRUE;stGV_Rotary_To_Mitsubishi.bRequestLoad := NOT bEmptyModeInProgress AND NOT bGV_FirstPartBuilded AND NOT bInPartPresentLeft ;IF PRG_Cell2.st_SHOW.bFirstPart_Active AND stGV_Rotary_From_Mitsubishi.bPartPlaced THEN // 首件已選擇 終止Roller3# 請求抓取bGV_FirstPartBuilded:=TRUE;END_IF//stVar_SEQ.bTOK:= GVL_Robot.stGV_ABBRobotIF.IN.i_bLoadEnd_ToNest1 OR bEmptyModeInProgress ;stVar_SEQ.bTOK:= stGV_Rotary_From_Mitsubishi.bPartPlacedOR (PRG_Cell2.st_SHOW.bFirstPart_Active AND bGV_FirstPartBuilded ) OR bEmptyModeInProgress ;
2.2?代碼解釋
第一部分:禁用超時與裝載請求
stvar_seq.bDisableTimeout := TRUE;
stGV_Rotary_To_Mitsubishi.bRequestLoad := NOT bEmptyModeInProgress AND NOT bGV_FirstPartBuilded AND NOT bInPartPresentLeft;
-
禁用超時功能:
stvar_seq.bDisableTimeout := TRUE
:在當前步驟中禁用超時檢測,防止因操作時間較長而觸發超時錯誤。
-
請求零件裝載:
- 觸發條件:當以下三個條件同時滿足時,向三菱控制器發送裝載請求:
- 非空運行模式:
NOT bEmptyModeInProgress
(空運行模式下跳過實際裝載)。 - 非首件已建立:
NOT bGV_FirstPartBuilded
(首件產品的處理流程不同)。 - 左側無零件:
NOT bInPartPresentLeft
(確保左側工位為空,避免重復裝載)。
- 非空運行模式:
- 觸發條件:當以下三個條件同時滿足時,向三菱控制器發送裝載請求:
第二部分:首件產品狀態更新
IF PRG_Cell2.st_SHOW.bFirstPart_Active AND stGV_Rotary_From_Mitsubishi.bPartPlaced THENbGV_FirstPartBuilded := TRUE;
END_IF
- 功能:標記首件產品已成功放置。
- 觸發條件:
- 首件激活:
PRG_Cell2.st_SHOW.bFirstPart_Active
?為?TRUE
(表示當前正在處理首件產品)。 - 零件已放置:
stGV_Rotary_From_Mitsubishi.bPartPlaced
?為?TRUE
(旋轉臺已成功放置零件)。
- 首件激活:
- 結果:設置?
bGV_FirstPartBuilded
?為?TRUE
,后續流程將不再按首件處理。
第三部分:步驟完成條件
stVar_SEQ.bTOK := stGV_Rotary_From_Mitsubishi.bPartPlacedOR (PRG_Cell2.st_SHOW.bFirstPart_Active AND bGV_FirstPartBuilded)OR bEmptyModeInProgress;
- 功能:設置步驟完成標志(
bTOK
),觸發狀態機進入下一步。 - 觸發條件(滿足任一即可):
- 零件已放置:
stGV_Rotary_From_Mitsubishi.bPartPlaced
?為?TRUE
(正常裝載完成)。 - 首件處理完成:
PRG_Cell2.st_SHOW.bFirstPart_Active
?為?TRUE
(首件模式激活)。bGV_FirstPartBuilded
?為?TRUE
(首件已成功建立)。
- 空運行模式:
bEmptyModeInProgress
?為?TRUE
(調試模式下直接跳過)。
- 零件已放置:
2.3 整體邏輯解析
-
首件產品特殊處理:
- 首件需要人工干預或特殊配置(通過?
bFirstPart_Active
?標記)。 - 首件成功放置后,系統自動切換為正常生產模式(
bGV_FirstPartBuilded
)。
- 首件需要人工干預或特殊配置(通過?
-
防重復裝載:
- 通過?
NOT bInPartPresentLeft
?確保左側工位無零件時才請求裝載。 - 首件建立后(
bGV_FirstPartBuilded
)不再發送裝載請求,可能依賴其他供料方式。
- 通過?
-
模式兼容:
- 支持正常生產(零件裝載)、首件生產(特殊流程)和空運行(調試)三種模式。
- 通過?
bTOK
?統一觸發步驟轉換,簡化狀態機邏輯。
三、ST01 工位程序
3.1 ST01 FB_SYS_SEQ_CONTROL_SFC_V1_0 功能塊內程序
3.2 代碼
stInOut_SEQ.stStep.enResultTransition := TNOK;(*Next Step*)
IF NOT bIn_SFCTransDoneAND ((stInOut_SEQ.bTOKOR stInOut_SEQ.bWOT)AND ( NOT bIn_CMD_Sequence_StepOR ( bIn_CMD_Sequence_StepAND ( bVar_IP_Step_ButtonOR stInOut_SEQ.bWOT))))THEN // 解析: SFCTrans =0 + SEQ.bTok/ SEQ.bWOT + Sequence_Step =0 /Sequence_Step =1 + Step觸發 /SEQ.bWOT <===> // SFC 執行中 把 LabelA =1 賦值到 enResultTransition 結果中 (即 stInOut_SEQ.bTOK = 1 時 賦值 過渡結果值 LabelA=1)(*Reset Binary Flags*)stInOut_SEQ.bTOK := FALSE;stInOut_SEQ.bDisableTimeout := FALSE;stInOut_SEQ.bIP_Release := FALSE;(* *)stInOut_SEQ.stStep.enResultTransition := stInOut_SEQ.stStep.enNextTransition;(*write next step to actual step*)stInOut_SEQ.stStep.enNextTransition := labelA;END_IF
3.3 代碼解釋
第一部分:初始狀態設置
st
stInOut_SEQ.stStep.enResultTransition := TNOK;
- 功能:將當前步驟的執行結果設為未完成(TNOK 通常表示 "Transition Not OK")。
- 作用:在進入條件判斷前初始化狀態,防止臟數據影響后續邏輯。
第二部分:步驟轉換條件判斷
st
IF NOT bIn_SFCTransDoneAND ((stInOut_SEQ.bTOK OR stInOut_SEQ.bWOT)AND (NOT bIn_CMD_Sequence_StepOR (bIn_CMD_Sequence_Step AND (bVar_IP_Step_Button OR stInOut_SEQ.bWOT)))) THEN
- 觸發條件(需同時滿足):
- SFC 轉換未完成:
NOT bIn_SFCTransDone
- 步驟激活條件:
stInOut_SEQ.bTOK
?為?TRUE
(當前步驟完成)或stInOut_SEQ.bWOT
?為?TRUE
(無需令牌,強制執行下一步)
- 步驟執行模式:
- 自動模式:
NOT bIn_CMD_Sequence_Step
(允許自動切換步驟)或 - 手動模式:
bIn_CMD_Sequence_Step
?為?TRUE
?且滿足:bVar_IP_Step_Button
?為?TRUE
(手動按鈕觸發)或stInOut_SEQ.bWOT
?為?TRUE
(強制跳過手動確認)
- 自動模式:
- SFC 轉換未完成:
第三部分:狀態重置與步驟更新
(*Reset Binary Flags*)
stInOut_SEQ.bTOK := FALSE;
stInOut_SEQ.bDisableTimeout := FALSE;
stInOut_SEQ.bIP_Release := FALSE;(*Update Transition*)
stInOut_SEQ.stStep.enResultTransition := stInOut_SEQ.stStep.enNextTransition;
stInOut_SEQ.stStep.enNextTransition := labelA;
-
狀態重置:
bTOK
:清除步驟完成標志,準備下一次觸發bDisableTimeout
:重新啟用超時檢測(防止長時間阻塞)bIP_Release
:重置資源釋放標志
-
步驟轉換:
enResultTransition := enNextTransition
:將預定義的下一步(enNextTransition
)設為當前執行結果enNextTransition := labelA
:將后續目標步驟設為?labelA
(通常是流程中的特定分支)
3.3 整體邏輯解析
這段代碼實現了一個雙緩沖狀態機機制:
- 初始狀態:將當前步驟標記為未完成(TNOK)
- 條件檢查:驗證是否滿足步驟轉換的所有條件(自動 / 手動模式、完成標志等)
- 狀態遷移:
- 使用?
enResultTransition
?作為當前執行狀態 - 使用?
enNextTransition
?作為預定義的下一步 - 通過?
labelA
?實現分支跳轉(類似 GOTO,但更安全)
- 使用?
- 安全機制:
- 自動重置關鍵標志,防止狀態滯留
- 支持手動干預和自動運行兩種模式
-
超時檢測機制(通過?
bDisableTimeout
?控制)