Loading article…
構造化テキスト( STまたはSTXと略される)は、 IEC 61131-3規格でサポートされている5つの言語の1つで、プログラマブルロジックコントローラ(PLC)用に設計されています。[1] [2]これはブロック構造の高級言語であり、構文はPascalに似ており、Pascalがベースとなっています。[3]すべての言語はIEC61131共通要素を共有しています。変数と関数呼び出しは共通要素によって定義されるため、IEC 61131-3規格内の異なる言語を同じプログラムで使用できます。
複雑なステートメントとネストされた命令がサポートされています。
- 反復ループ (REPEAT-UNTIL; WHILE-DO)
- 条件付き実行(IF-THEN-ELSE; CASE)[3]
- 関数 (SQRT()、SIN())
サンプルプログラム
(* シンプルなステートマシン *)
TxtState := STATES [ StateMachine ] ;
CASE StateMachine OF 1 : ClosingValve () ; StateMachine := 2 ; 2 : OpeningValve () ; ELSE BadCase () ; END_CASE ;
他のプログラミング言語とは異なり、 CASE ステートメントにはフォールスルーがありません。つまり、最初に一致する条件が入力され、そのステートメントを実行した後、他の条件をチェックせずに CASE ブロックが残されます。
追加のSTプログラミング例
// PLC 構成
CONFIGURATION DefaultCfg VAR_GLOBAL b_Start_Stop : BOOL ; // ブール値を表すグローバル変数。b_ON_OFF : BOOL ; // ブール値を表すグローバル変数。Start_Stop AT % IX0 . 0 : BOOL ; // PLC のデジタル入力 (アドレス 0.0) ON_OFF AT % QX0 . 0 : BOOL ; // PLC のデジタル出力 (アドレス 0.0)。 (コイル) END_VAR
//メインプログラムを 20 ミリ秒ごとに実行するようにスケジュールします。TASK Tick ( INTERVAL := t #20 ms ) ;
PROGRAM Main WITH Tick : Monitor_Start_Stop ; END_CONFIGURATION
PROGRAM Monitor_Start_Stop // 実際のプログラムVAR_EXTERNAL Start_Stop : BOOL ; ON_OFF : BOOL ; END_VAR VAR // ロジック処理用の一時変数ONS_Trig : BOOL ; Rising_ONS : BOOL ; END_VAR
// ロジックの開始
// Start_Stop 入力の立ち上がりエッジのワンショットをキャッチONS_Trig := Start_Stop AND NOT Rising_ONS ; // Run_Contact のメイン ロジック -- トグル ON / トグル OFF --- ON_OFF := ( ONS_Trig AND NOT ON_OFF ) OR ( ON_OFF AND NOT ONS_Trig ) ;
// ライジングワンショットロジック
Rising_ONS := Start_Stop ; END_PROGRAM
ファンクションブロックの例
//=============================================== =======================
// 関数ブロック 時間カウンタ: 時間間隔の増分カウント
//=============================================== =======================
FUNCTION_BLOCK FB_タイムドカウンター
変数入力
Execute : BOOL := FALSE ; // 時間カウントを開始するためのトリガー信号
Time_Increment : REAL := 1.25 ; // カウント間のサイクル時間(秒)を入力
Count_Cycles : INT := 20 ; // 希望するカウントサイクル数
END_VAR
変数出力
Timer_Done_Bit : BOOL := FALSE ; // タイマーサイクルの完了を示すワンショットビット
Count_Complete : BOOL := FALSE ; // カウントが完了したことを示す出力ビット
Current_Count : INT := 0 ; // カウンターの値を累積する
END_VAR
付加価値税
CycleTimer : TON ; // コマンドライブラリからのタイマーFB
CycleCounter : CTU ; // コマンドライブラリからのカウンタFB
TimerPreset : TIME ; // Time_Increment を秒単位でミリ秒に変換
END_VAR
// ファンクションブロックプログラミングの開始
TimerPreset := REAL_TO_TIME ( in := Time_Increment ) * 1000 ;
サイクルタイマー(
in := Execute AND NOT CycleTimer . Q 、
pt :=タイマープリセット);
Timer_Done_Bit := CycleTimer . Q ;
サイクルカウンター(
cu : = CycleTimer.Q ,
r :=実行しない、
pv := Count_Cycles );
Current_Count : = CycleCounter.cv ;
Count_Complete := CycleCounter . q ;
END_FUNCTION_BLOCK
参考文献
- ^ Bacidore, Mike (2018 年 5 月 16 日)。「プログラミングをラダー ロジックに限定するか、IEC 61131 内のすべての標準を使用するか?」。制御設計。
- ^ Stevic, Tom (2017 年 5 月 5 日). 「PLC プログラミング プラットフォームのごく短い歴史」. Control Design。
- ^ ab Roos, Nieke. 「構造化テキストを使用した PLC のプログラミング」。ナイメーヘン大学、コンピューテ ィング科学部。CiteSeerX 10.1.1.49.2016。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です
