構造化テキスト

構造化テキスト( 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

参考文献

  1. ^ Bacidore, Mike (2018年5月16日). 「プログラミングをラダーロジックに限定すべきか、それともIEC 61131のすべての規格を使用するべきか?」制御設計.
  2. ^ Stevic, Tom (2017年5月5日). 「PLCプログラミングプラットフォームのごく短い歴史」. Control Design .
  3. ^ ab Roos, Nieke. 「構造化テキストを用いたPLCプログラミング」. ナイメーヘン大学 計算科学科. CiteSeerX 10.1.1.49.2016 .  {{cite journal}}:ジャーナルを引用するには|journal=ヘルプ)が必要です
「https://en.wikipedia.org/w/index.php?title=Structured_text&oldid=1311678594」より取得