プロジェクトでのコントローラーアプリケーションのプログラミング
グローバル変数の宣言
まず、アプリケーション全体で使用する変数を宣言します。そのためには、以下にグローバル変数リストを作成します [アプリケーション]:
選択してください
Application
入力してクリック コンテキストメニューで、デフォルト名を変更するGVL
にGlob_Var
クリック 追加 確認します。ザル
Glob_Var
オブジェクトは下に表示されますApplication
。GVL エディタがデバイスツリーの右側に表示されますテキストビューが開くと、キーワードがすでに含まれています
VAR_GLOBAL
そしてEND_VAR
例では、エディターの右側のサイドバーにあるボタンをクリックすると、表形式のビューがアクティブになります。
空の行が表示されます。カーソルは [名前] カラム。
コンテキストメニューで、 挿入。
入力フィールドが開きます。同時に、 スコープ
VAR_GLOBAL
と データタイプBOOL
行に自動的に入力されます。指定
rTempActual
で 名前 フィールド。フィールドをダブルクリックします データタイプ カラム。
これでフィールドを編集できるようになり、
ボタンが表示されます。
クリック
ボタンを押して選択 入力アシスタント。
ザル 入力アシスタント ダイアログが開きます。
データ型を選択
REAL
クリック わかりました。に数値を入力します [初期化] カラム (例:
8.0
)。
以下の変数を同じ方法で宣言します。
姓 | データタイプ | 初期化 | コメント |
---|---|---|---|
|
|
| 実際の温度 |
|
|
| 温度を設定 |
|
|
| ドアの状態 |
|
|
| コンプレッサーが作動してから信号が鳴るまでの時間 |
|
|
| ドアを開けてから信号が鳴る時間 |
|
|
| 制御信号 |
|
|
| 制御信号 |
|
|
| ステータスメッセージ |
CFC エディタでの冷却制御のメインプログラムの作成
次に、メインでアプリケーションプログラムの主な機能を説明します。 PLC_PRG
POU。デフォルトで作成されます。実際の温度が設定温度とヒステリシスを加えた温度よりも高くなると、コンプレッサが作動して冷却されます。実際の温度が設定温度からヒステリシスを引いた値を下回ると、コンプレッサはオフになります
この機能を CFC 実装言語で説明するには、以下の手順に従ってください。
デバイスツリーで、ダブルクリック
PLC_PRG
。で CFC エディタが開きます。
PLC_PRG
タブ。デクラレーションエディターは、グラフィカルエディター領域の上部にテキスト形式または表形式で表示されます。 ツールボックス ビューは右側にあります。で ツールボックス 表示、選択 入力 要素を選択し、下の CFC エディタにドラッグします。
PLC_PRG
タブ。名もなきエントリー
???
が挿入されました。CFC エディターで、をクリックします。
???
入力画面で、クリックします入力アシスタントを開きます。 変数 カテゴリを選択し、
rTempActual
以下の変数 。これがグローバル変数を参照する方法ですrTempActual
ここ。入力された名前は
Glob_Var.rTempActual
。ステップ 3 と同様に、グローバル変数の名前を使用して別の入力を作成します。
Glob_Var.rTempSet
。別の入力を作成してクリック
???
そしてそれらを名前に置き換えてくださいrHysteresis
。これは既知の変数の名前ではないため、 自動宣言 ダイアログが開きます。その名前はダイアログですでに使用されています。
の中に 自動宣言 ダイアログで、以下を指定します。 タイプ として
REAL
そして 初期化 として1
。をクリックします。 OK ボタン。変数
rHysteresis
デクラレーションエディターに表示されます。の中に ツールボックス 表示、選択 [ブロック] エレメントを作成し、下の CFC エディタにドラッグします。 PLC_PRG タブ。
POU が CFC エディタで開きます。
置換
???
とADD
。POU は、接続されているすべての入力を追加します。
接続する
Glob_Var.rTempSet
への入力ADD
POU。これを行うには、入力の出力ピンをクリックし、上の入力ピンにドラッグしますADD
POU。同様に、入力を接続します
rHysteresis
の入力値が低い場合ADD
POU。2 つの入力
rHysteresis
とGlob_Var.rTempSet
次の人によって追加されましたADD
。エディターで要素を移動するには、要素内の空白部分をクリックするか、フレームをクリックして、要素を選択します (赤い枠線、赤いハイライト)。エレメントを目的の位置にドラッグします。
の右に別の POU を作成
ADD
POU。その目的は比較することです。Glob_Var.rTempActual
の合計でGlob_Var.rTempSet
とrHysteresis
。を割り当てます。GT
POU への関数 (より大きい)。ザル
GT
POU は次のように機能します。IF (upper input > lower input) THEN output := TRUE;
入力を接続する
Glob_Var.rTempActual
の上位入力にGT
POU。の出力を接続します
ADD
POU を以下の入力の下位に入力します。GT
POU。次に、ブロック要素を使用して、の右側に関数ブロックを作成します
GT
入力条件に応じてコンプレッサーを起動および停止するPOU (Set — Reset)。名前を指定してください。SR
に???
フィールド。Enter キーを押して POU の上にある開いている入力フィールドを閉じますSR_0
)。ザル 自動宣言 ダイアログが開きます。
変数を次の名前で宣言します。
SR_0
そしてデータタイプSR
。をクリックします。 OK ボタン。ザル
SR
からの POUStandard
ライブラリはインスタンス化されます。SR
の定義には以下のように使用されます。THEN
GT POU のアウトプットで。SET1
とRESET
現れる。の右側の出力ピンを接続します
GT
への POUSET1
の入力SR_0
POU。SR
以下から Boolean 変数を設定できます。FALSE
にTRUE
そしてまた戻って。入力時の条件の場合SET1
が満たされると、Boolean 変数は次のように設定されます。TRUE
。条件が次の場合、変数は再びリセットされますRESET
満足しています。この例の Boolean (グローバル) 変数はGlob_Var.xCompressor
。を作成 出力 要素を作成してグローバル変数に代入します。
Glob_Var.xCompressor
。間に接続線をドラッグしますGlob_Var.xCompressor
そして出力ピンQ1
のSR
。
次に、コンプレッサーが再びオフになる条件を指定します (この場合は RESET
SR POU の入力は TRUE
シグナル)。そのためには、上記とは逆の条件を定式化します。以下を使用してください SUB
(減算) と LT
これを行うにはPOUが (未満)
結果は次のCFCチャートです。

ラダーダイアグラムエディターでのシグナル管理用 POU の作成
別の POU では、アラームブザーとランプのオン/オフの切り替えの信号管理を実装します。これには、ラダーダイアグラム (LD) 実装言語が適しています
次の各信号をそれぞれのネットワークで処理します。
温度が高すぎるためにコンプレッサーが長時間作動すると、連続した音声信号が鳴ります。
ドアを長く開けすぎると、断続的に信号が鳴ります。
ドアが開いている間は明かりがついている。
デバイスツリーの
Application
オブジェクト、タイプのPOUオブジェクトを作成します プログラム 使用して ラダー(LD2) 実装言語。プログラムに次の名前を付けます。
Signals
。ザック
Signals
プログラムはデバイスツリーの横に一覧表示されます。PLC_PRG
。ラダーダイアグラムエディタがで開きます。Signals
タブ。デクラレーションエディターが上部に表示されます。 ツールボックス 右を見る。ラダー図には空のネットワークが含まれていますコンプレッサーが指定された温度に達せずに長時間稼働したときに可聴信号が鳴るように、ネットワークにプログラムを作成します。そのためには、を挿入します
TON
次のステップではタイマー POU。Boolean 信号を次のように切り替えますTRUE
指定した時間が経過すると。で ツールボックス 表示、ドラッグ [ブロック] エレメントを作成し、空のネットワーク内の空いている挿入位置にドロップします。
ブロックは、入力と出力を含むボックスとして表示されます。
3 つの疑問符をダブルクリックします (
???
) ブロック内で [] をクリックし、ラインエディターのシンボル。
ザック 入力アシスタント ダイアログが開きます。
で 入力アシスタント ダイアログ、 標準ファンクションブロック カテゴリ、 スタンダード ライブラリ、選択してください
TON
タイマー そしてクリック OK。これで、ブロックのラインエディターに、関数ブロック名が表示されます
TON
、Enter キーを押してください。ザック
TON
POU はその入力と出力とともに表示されます。を削除するには
EN
入力とENO
出力、ブロックを選択してクリック 英語/いいえ → EN コンテキストメニューで。これで、ブロックには
IN
とPT
入力とQ
そしてET
出力。ブロックの上にある3つの疑問符[???]をダブルクリックし、
TON_0
インスタンス名として「」と入力し、Enter キーを押します。インスタンス名を確認しました。 自動宣言 ダイアログが開きます。
クリック OK ダイアログを確認するため。
挿入された
TON
POUは名前でインスタンス化されますTON_0
。コンプレッサーが起動したらすぐに起動するようにブロックをプログラムします。まず、をドラッグします。
Contact
のラダーエレメント ツールボックス 正面からの眺めIN
ブロックの入力。3 つの疑問符をダブルクリックし、ラインエディターのアイコンをクリックします ()。入力アシスタントで、すでに宣言されているグローバル変数を選択します コンプレッサー そしてクリック OK。
変数名
Glob_Var.xCompressor
連絡先の上に表示されます。ヒント
入力位置で変数名を入力し始めると、入力した文字で始まる名前を持つすべての変数のリストが自動的に表示され、この時点で使用できます。このアシストは、のデフォルト設定です。 CODESYS スマートコーディングのオプション。
アクティブにする信号を挿入します。これを行うには、 コイル から ツールボックス ビュー、 ラダー カテゴリー、
Q
の出力TON
ブロック。名前を指定Glob_Var.xSignal
コイル用。POU のアクティベーションからの期間を定義します
TON_0
信号が鳴るまで。この定義は変数を介して行われますGlob_Var.timAlarmThreshold
、これをこの目的で入力に挿入します。PT
のTON_0
。これを行うには、マウスポインタを入力の入力ピンの左端に移動しますPT
。入力ピンの左側に表示されているエッジの細かいボックスをクリックし、変数名を指定しますEnter キーを押します。
ザック 自動宣言 ダイアログが開きます。
クリック OK ダイアログを確定するため。
新しく宣言された変数は宣言部分に表示されます。
選択してください
TON
POUをクリックして 未使用のピンを削除する コンテキスト メニューで。未使用の出力
ET
が削除されました。LDの2番目のネットワークでは、ドアを長く開けすぎたときに信号が断続的に鳴るようにプログラムします。
マウスを使用してドラッグします [ネットワーク] からの要素 ツールボックス ネットワーク 1 の下の挿入ポイントを見てください。
番号の付いた空のネットワーク 2. 現れる。
最初のネットワークと同様に、
TON
信号を時間制御で起動するためのPOU。今回はグローバル変数によってトリガーされます。Glob_Var.xDoorOpen
入力時IN
。入力時PT
、グローバル変数を追加します。Glob_Var.timDoorOpenThreshold
。から
Util
ライブラリ、追加BLINK
出力側の POUQ
のTON
このネットワーク内の POU を次の名前でインスタンス化します。Blink_0
。ザル
BLINK_0
POU はシグナル転送をクロックします。Q
それゆえGlob_Var.xSignal
。まず、2 つドラッグ 連絡 からの要素 ツールボックス を見る
OUT
POU の出力。変数を割り当てます。TON_1.Q
出力後すぐに連絡先に送信Q
とグローバル変数Glob_Var.xDoorOpen
2 番目の連絡先へ。を挿入 コイル 2 つの接点の後に要素を追加し、グローバル変数を割り当てます。
Glob_Var.xSignal
それに。ローカル変数を宣言する
timSignalTime : TIME := T#1S;
そして、この変数を入力部に挿入します。TIMELOW
とTIMEHIGH
。のサイクルタイムは 1 秒です。TRUE
そして 1 秒はFALSE
。選択してください
TON
POUをクリックして 未使用のピンを削除する コンテキスト メニューで。未使用の出力
ET
削除されます。3番目のネットワークでは、ドアが開いている間はランプが点灯するようにプログラムします。追加のネットワークと接点を追加します。変数を割り当てます。
GlobVar.xDoorOpen
連絡先へ。挿入された接点はコイルに直接つながります。接点の右側にコイルを追加し、グローバル変数を割り当てます
Glob_Var.xLamp
コイルに。CODESYS LD のネットワークを 1 つずつ処理します。次に、ネットワーク 1 の最後にネットワーク 3 へのジャンプをインストールして、ネットワーク 1 のみ、またはネットワーク 2 のみが実行されるようにします。
ネットワークの左上端の3番目の線にマウスポインターを合わせると、情報が表示されます。 <ここにジャンプを挿入> が表示されます。この位置をダブルクリックして入力してください ドアは開いています: 行エディタのジャンプ ラベルとして。
ネットワーク1を選択します。 ツールボックス ビュー、 ラダー図 カテゴリをドラッグして ジャンプ 要素を、その前に三角形でマークされた挿入位置に移動します。
Glob_Var.xSignal
コイル。ジャンプ要素が表示されます。ジャンプ先は引き続き次のように指定されています。
???
。3つの疑問符[???]をダブルクリックし、行エディタのアイコンをクリックします(
)。 入力アシスタント ダイアログで選択
DoorIsOpen
ラベル識別子の候補から選択してクリック わかりました 確認します。ネットワーク 3 へのラベルが実装されます。
LD プログラムは次のようになりました。

メインプログラムの「Signals」プログラムの呼び出し
今回のプログラムサンプルでは、メインプログラムが PLC_PRG
を呼び出す必要があります Signals
信号処理プログラム。
デバイスツリーで、ダブルクリック
PLC_PRG
。ザル
PLC_PRG
プログラムがエディタで開きます。の中に ツールボックス 表示、ドラッグ [ブロック] エレメントのエディターへ
PLC_PRG
。3 つの疑問符 [???] をダブルクリックしますそして、をクリックします
ラインエディターのシンボル。 入力アシスタント ダイアログ、 POU/プログラムコールとファンクションコール カテゴリを選択し、
Signals
プログラムしてクリック OK 確認のため。
シミュレーション用の ST POU の作成
このサンプルプロジェクトのアプリケーションは物理的なセンサーやアクチュエーターにはリンクされていないため、温度の上昇と下降をシミュレーションするプログラムも作成する必要があります。これにより、後で冷蔵庫コントローラーの動作をオンラインモードで監視できるようになります
シミュレーションプログラムは構造化テキストで作成します。
プログラムはメインプログラムまで温度を上げます PLC_PRG
設定温度を超えていると判断します。その後、プログラムはコンプレッサーを起動します。その後、メインプログラムがコンプレッサーを再び無効にするまで、シミュレーションプログラムは温度を下げます。
デバイスツリーで、右クリックします [アプリケーション] オブジェクトを作成し、タイプの POU オブジェクトを追加します。 プログラム と 構造化テキスト (ST) 実装言語。POU には、という名前を付けます
Simulation
。ST エディターで次のコードを実装します。
宣言部分:
PROGRAM Simulation VAR TON_1: TON; //The temperature is decreased on a time delay, when the comepressor has been activated P_Cooling: TIME:=T#500MS; xReduceTemp: BOOL; //Signal for dereasing the temperature TON_2: TON; //The temperature is increased on a time delay P_Environment: TIME:=T#2S; //Delay time when the door is closed P_EnvironmentDoorOpen: TIME:=T#1S; //Delay time when the door is open xRaiseTemp: BOOL; //Signal for increasing the temperature timTemp: TIME; //Delay time iCounter: INT; END_VAR
実装部分:
iCounter := iCounter + 1; // No function, just for demonstration purposes. // After the compressor has been activated due to TempActual being too high, the temperature decreases. // The temperature is decremented by 0.1°C per cycle after a delay of P_Cooling IF Glob_VAR.xCompressor THEN TON_1(IN:= Glob_Var.xCompressor, PT:= P_Cooling, Q=>xReduceTemp); IF xReduceTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual-0.1; TON_1(IN:=FALSE); END_IF END_IF //If the door is open, the warming occurs faster; SEL selects P_EnvironmentDoorOpen timTemp:=SEL(Glob_Var.xDoorOpen, P_Environment, P_EnvironmentDoorOpen); //If the compressor is not in operation, then the cooling chamber becomes warmer. //The temperature is incremented by 0.1°C per cycle after a delay of tTemp TON_2(IN:= TRUE, PT:= timTemp, Q=>xRaiseTemp); IF xRaiseTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual + 0.1; TON_2(IN:=FALSE); END_IF
ヒント
コントローラープログラム全体の操作と監視を便利にするために、ビジュアライゼーションを使用することをお勧めします。で作成したビジュアライゼーションです CODESYS ビジュアライゼーションは、このチュートリアル用に完成したサンプルプロジェクトにインストールされます。このサンプルプロジェクトには、 CODESYS 標準インストール (Projects
ディレクトリ)。このプロジェクトをコントローラーにダウンロードして起動すると、ビジュアライゼーションと連携して動作することを確認できます。開始すると、 Live_Visu
、データを入力しなくてもシミュレーションプログラムの動作を再現する冷蔵庫の表現から始めます。ただし、オン/オフスイッチをクリックするとドアを開閉できます。ロータリーコントロールの針を使ってデフォルトの温度を調整することができます。このチュートリアルでは、ビジュアライゼーションの作成については説明しません。対応するチュートリアルは、のヘルプで予定されています。 CODESYS 視覚化。
タスク設定で実行するプログラムの定義
デフォルトのタスク設定には、メインプログラムの呼び出しが含まれています。 PLC_PRG
。このサンプルプロジェクトでは、の呼び出しも追加する必要があります Simulation
プログラム。
デバイスツリーで、ドラッグします
Simulation
へのエントリーMainTask
下に タスク設定。ザル
Simulation
プログラムがタスク構成に挿入されます。タスク設定を表示するには、をダブルクリックします
MainTask
エディタを開くためのエントリ。エディターの下部にある表には、タスクによって呼び出される POU が表示されます。
PLC_PRG
(デフォルトで入力) とSimulation
。タスクのコールタイプは サイクリック 20 ミリ秒間隔で。オンラインモードでは、タスクが 2 つの POU を 1 サイクルに 1 回実行します
PLCとの通信用の「アクティブアプリケーション」の定義
の名前 Application
には太字で表示されています。 デバイス 表示。これは、このアプリケーションが「アクティブなアプリケーション」として設定されていることを意味します。その後、コントローラーとの通信はこのアプリケーションを参照します。
プロジェクトにアプリケーションが 1 つしかない場合は、そのアプリケーションが自動的にアクティブなアプリケーションになります。アプリケーションがまだアクティブになっていない場合は、次のようにアクティブにします
のコンテキストメニューで
Application
、クリック アクティブアプリケーションを設定。[アプリケーション] が太字で表示されるようになりました デバイス 表示。
アプリケーションプログラムのデバッグ
コードを入力する際、 CODESYS 問題のテキストの下に赤い波線の下線が表示され、構文エラーがすぐに通知されます。チェックの結果はメッセージビューにも表示されます。必要な場合は、をクリックします メッセージビューを開きます。メッセージは、に表示されます。 プリコンパイル メッセージカテゴリ。メッセージを選択して [] を押すことができます。 F4 キーを押すと、コード内の対応するポイントにジャンプします。アプリケーションがコントローラにダウンロードされると、アプリケーションプログラムのテストがさらに実行されます。
その後、エラーのないアプリケーションのみをコントローラーにダウンロードできます。