EL1904 Documentation
https://download.beckhoff.com/download/document/automation/twinsafe/el1904en.pdf
EL2904 Documentation
https://download.beckhoff.com/download/document/automation/twinsafe/el2904en.pdf
EL6900 Documentation
https://download.beckhoff.com/download/document/automation/twinsafe/el6900en.pdf
EL6910 Documentation
https://download.beckhoff.com/download/document/automation/twinsafe/el6910en.pdf
EK1960 Documentation
https://download.beckhoff.com/download/document/automation/twinsafe/ek1960en.pdf
EL1918 Documentation
https://download.beckhoff.com/download/document/automation/twinsafe/el1918en.pdf
KL6904 / EL6900 / EL6910 / EJ6910 / EK1960 TwinSAFE logic FB
https://www.beckhoff.com/media/downloads/downloads/twinsafe-logic-fb-3.pdf
TwinSAFE Application Guide
https://download.beckhoff.com/download/document/automation/twinsafe/applicationguidetwinsafeen.pdf
8.2. PLC プログラムによる、Run・ErrorAcknowledgement 信号の制御サンプルプログラム
イメージとしては、以下を接続(リンク)します。
TwinSAFE group のInfo Data は以下を参照してください。
Documentation TwinCAT Function Blocks for TwinSAFE Logic Components
https://download.beckhoff.com/download/Document/automation/twinsafe/twinsafe-logic-fb_en.pdf
PLC でプログラムを作成します。
TwinSAFE group のInfo Data を利用し、TwinSAFE 状態のマッピングをします。
// -------- TwinSAFE 状態のマッピング --------
bState_RUN := uiTwinSAFE_Group1_State = 1;
bState_STOP := uiTwinSAFE_Group1_State = 2;
bState_ERROR := uiTwinSAFE_Group1_State = 4;
bState_RESET := uiTwinSAFE_Group1_State = 5;
bState_START := uiTwinSAFE_Group1_State = 6;
bState_STOPERROR := uiTwinSAFE_Group1_State = 7;
同様に、TwinSAFE 診断コードのマッピングし、0=正常、0以外=Error とします。
// -------- TwinSAFE 診断コードのマッピング --------
bDiag_OK := uiTwinSAFE_Group1_Diag = 0;
bDiag_HasError := uiTwinSAFE_Group1_Diag <> 0;
TwinSAFE group のInfo Data を利用し、TwinSAFE 状態から、RUN 信号とErrorAcknowledgement 信号を出力するプログラムを作ります。
// -------- 状態遷移 --------
CASE uiState OF
10: // INIT:初期・復帰時
IF bState_START OR bState_RESET OR bState_STOP OR bState_STOPERROR THEN
uiState := 20;
END_IF;
20: // MONITOR:TwinSAFE Group 状態を監視
IF NOT bState_ERROR THEN
bRUN_OUT := TRUE; // ERROR 以外は出力ON(RUN, STOP, START, RESET など)
ELSE
bRUN_OUT := FALSE;
bError_Ack_req := TRUE;
uiState := 21;
END_IF;
21: // ERROR_ACK:1 ショット送信後に遷移
IF NOT bError_Ack_OUT THEN
uiState := 22;
END_IF;
22: // CHECK_DIAG:診断に応じてリカバリ判断
IF bDiag_OK THEN
uiState := 10; // 正常に戻った
ELSE
bRUN_OUT := FALSE; // 一度RUN 出力をOFF
uiState := 23; // 次に再起動処理へ
END_IF;
23: // RESTART_WAIT:1 サイクル空ける
uiState := 24;
24: // RESTART_TRY:RUN 出力を再度ON して再起動促進
bRUN_OUT := TRUE;
uiState := 10;
END_CASE;
状態遷移処理の前に、Error_Ack の1ショット処理を追加します。
// -------- 1 ショット処理(Error_Ack) --------
IF bError_Ack_req THEN
bError_Ack_OUT := TRUE;
bError_Ack_req := FALSE;
ELSE
bError_Ack_OUT := FALSE;
END_IF
プログラム全体は以下になります。
// -------- TwinSAFE 状態のマッピング --------
bState_RUN := uiTwinSAFE_Group1_State = 1;
bState_STOP := uiTwinSAFE_Group1_State = 2;
bState_ERROR := uiTwinSAFE_Group1_State = 4;
bState_RESET := uiTwinSAFE_Group1_State = 5;
bState_START := uiTwinSAFE_Group1_State = 6;
bState_STOPERROR := uiTwinSAFE_Group1_State = 7;
// -------- TwinSAFE 診断コードのマッピング --------
bDiag_OK := uiTwinSAFE_Group1_Diag = 0;
bDiag_HasError := uiTwinSAFE_Group1_Diag <> 0;
// -------- 1 ショット処理(Error_Ack) --------
IF bError_Ack_req THEN
bError_Ack_OUT := TRUE;
bError_Ack_req := FALSE;
ELSE
bError_Ack_OUT := FALSE;
END_IF
// -------- 状態遷移 --------
CASE uiState OF
10: // INIT:初期・復帰時
IF bState_START OR bState_RESET OR bState_STOP OR bState_STOPERROR THEN
uiState := 20;
END_IF;
20: // MONITOR:TwinSAFE Group 状態を監視
IF NOT bState_ERROR THEN
bRUN_OUT := TRUE; // ERROR 以外は出力ON(RUN, STOP, START, RESET など)
ELSE
bRUN_OUT := FALSE;
bError_Ack_req := TRUE;
uiState := 21;
END_IF;
21: // ERROR_ACK:1 ショット送信後に遷移
IF NOT bError_Ack_OUT THEN
uiState := 22;
END_IF;
22: // CHECK_DIAG:診断に応じてリカバリ判断
IF bDiag_OK THEN
uiState := 10; // 正常に戻った
ELSE
bRUN_OUT := FALSE; // 一度RUN 出力をOFF
uiState := 23; // 次に再起動処理へ
END_IF;
23: // RESTART_WAIT:1 サイクル空ける
uiState := 24;
24: // RESTART_TRY:RUN 出力を再度ON して再起動
bRUN_OUT := TRUE;
uiState := 10;
END_CASE;
作成される変数は以下になります。
PROGRAM MAIN
VAR
// TwinSAFE 状態・診断信号(USINT)
uiTwinSAFE_Group1_State AT %I* : USINT;
uiTwinSAFE_Group1_Diag AT %I* : USINT;
// 状態管理(USINT)
uiState : USINT := 10;
// TwinSAFE Group の状態フラグ
bState_RUN : BOOL := FALSE;
bState_STOP : BOOL := FALSE;
bState_ERROR : BOOL := FALSE;
bState_RESET : BOOL := FALSE;
bState_START : BOOL := FALSE;
bState_STOPERROR: BOOL := FALSE;
// TwinSAFE 診断コードフラグ
bDiag_OK : BOOL := FALSE;
bDiag_HasError : BOOL := FALSE;
// 出力・制御信号
bRUN_OUT AT %Q* : BOOL := FALSE;
bError_Ack_OUT AT %Q* : BOOL := FALSE;
bError_Ack_req : BOOL := FALSE;
// LED ランプを常時ON させる信号を作ります
bControl_Out AT %Q* :BOOL := TRUE;
END_VAR