構造化テキスト
構造化テキスト( STまたはSTXと略される)は、 IEC 61131-3規格でサポートされている5つの言語の1つで、プログラマブルロジックコントローラ(PLC)向けに設計されています。[1] [2]これはブロック構造の高水準言語であり、構文的にはベースとなっている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_Timed_Counter 変数入力 実行: 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 VAR CycleTimer : TON ; // コマンドライブラリからのタイマーFB CycleCounter : CTU ; // コマンドライブラリからのカウンタFB TimerPreset : TIME ; // Time_Increment(秒単位)をMSに変換 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 := NOT実行、 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=(ヘルプ)が必要です