Skip to main content

プロジェクトでのコントローラーアプリケーションのプログラミング

グローバル変数の宣言

まず、アプリケーション全体で使用する変数を宣言します。そのためには、以下にグローバル変数リストを作成します [アプリケーション]:

  1. 選択してください Application 入力してクリック オブジェクトの追加 → グローバル変数リスト コンテキストメニューで、デフォルト名を変更する GVLGlob_Var クリック 追加 確認します。

    ザル _cds_icon_gvl.png Glob_Var オブジェクトは下に表示されます _cds_icon_application.png Application。GVL エディタがデバイスツリーの右側に表示されます

  2. テキストビューが開くと、キーワードがすでに含まれています VAR_GLOBAL そして END_VAR例では、 _cds_img_button_decl_editor_tabular.png エディターの右側のサイドバーにあるボタンをクリックすると、表形式のビューがアクティブになります。

    空の行が表示されます。カーソルは [名前] カラム。

  3. コンテキストメニューで、 挿入

    入力フィールドが開きます。同時に、 スコープ VAR_GLOBALデータタイプ BOOL 行に自動的に入力されます。

  4. 指定 rTempActual名前 フィールド。

  5. フィールドをダブルクリックします データタイプ カラム。

    これでフィールドを編集できるようになり、 cds_icon_open_input_asisstant.png ボタンが表示されます。

  6. クリック cds_icon_open_input_asisstant.png ボタンを押して選択 入力アシスタント

    ザル 入力アシスタント ダイアログが開きます。

  7. データ型を選択 REAL クリック わかりました

  8. に数値を入力します [初期化] カラム (例: 8.0)。

以下の変数を同じ方法で宣言します。

データタイプ

初期化

コメント

rTempActual

REAL

8.0

実際の温度

rTempSet

REAL

8.0

温度を設定

xDoorOpen

BOOL

FALSE

ドアの状態

timAlarmThreshold

TIME

T#30S

コンプレッサーが作動してから信号が鳴るまでの時間

timDoorOpenThreshold

TIME

T#10S

ドアを開けてから信号が鳴る時間

xCompressor

BOOL

FALSE

制御信号

xSignal

BOOL

FALSE

制御信号

xLamp

BOOL

FALSE

ステータスメッセージ

CFC エディタでの冷却制御のメインプログラムの作成

次に、メインでアプリケーションプログラムの主な機能を説明します。 PLC_PRG POU。デフォルトで作成されます。実際の温度が設定温度とヒステリシスを加えた温度よりも高くなると、コンプレッサが作動して冷却されます。実際の温度が設定温度からヒステリシスを引いた値を下回ると、コンプレッサはオフになります

この機能を CFC 実装言語で説明するには、以下の手順に従ってください。

  1. デバイスツリーで、ダブルクリック PLC_PRG

    で CFC エディタが開きます。 PLC_PRG タブ。デクラレーションエディターは、グラフィカルエディター領域の上部にテキスト形式または表形式で表示されます。 ツールボックス ビューは右側にあります。

  2. ツールボックス 表示、選択 入力 要素を選択し、下の CFC エディタにドラッグします。 PLC_PRG タブ。

    名もなきエントリー ??? が挿入されました。

  3. CFC エディターで、をクリックします。 ??? 入力画面で、クリックします _cds_icon_input_assistent.png 入力アシスタントを開きます。 変数 カテゴリを選択し、 rTempActual 以下の変数 アプリケーション → Glob_Var。これがグローバル変数を参照する方法です rTempActual ここ。

    入力された名前は Glob_Var.rTempActual

  4. ステップ 3 と同様に、グローバル変数の名前を使用して別の入力を作成します。 Glob_Var.rTempSet

  5. 別の入力を作成してクリック ??? そしてそれらを名前に置き換えてください rHysteresis

    これは既知の変数の名前ではないため、 自動宣言 ダイアログが開きます。その名前はダイアログですでに使用されています。

  6. の中に 自動宣言 ダイアログで、以下を指定します。 タイプ として REAL そして 初期化 として 1。をクリックします。 OK ボタン。

    変数 rHysteresis デクラレーションエディターに表示されます。

  7. の中に ツールボックス 表示、選択 [ブロック] エレメントを作成し、下の CFC エディタにドラッグします。 PLC_PRG タブ。

    POU が CFC エディタで開きます。

  8. 置換 ???ADD

    POU は、接続されているすべての入力を追加します。

  9. 接続する Glob_Var.rTempSet への入力 ADD POU。これを行うには、入力の出力ピンをクリックし、上の入力ピンにドラッグします ADD POU。

  10. 同様に、入力を接続します rHysteresis の入力値が低い場合 ADD POU。

    2 つの入力 rHysteresisGlob_Var.rTempSet 次の人によって追加されました ADD

  11. エディターで要素を移動するには、要素内の空白部分をクリックするか、フレームをクリックして、要素を選択します (赤い枠線、赤いハイライト)。エレメントを目的の位置にドラッグします。

  12. の右に別の POU を作成 ADD POU。その目的は比較することです。 Glob_Var.rTempActual の合計で Glob_Var.rTempSetrHysteresis。を割り当てます。 GT POU への関数 (より大きい)。

    ザル GT POU は次のように機能します。 IF (upper input > lower input) THEN output := TRUE;

  13. 入力を接続する Glob_Var.rTempActual の上位入力に GT POU。

  14. の出力を接続します ADD POU を以下の入力の下位に入力します。 GT POU。

  15. 次に、ブロック要素を使用して、の右側に関数ブロックを作成します GT 入力条件に応じてコンプレッサーを起動および停止するPOU (Set — Reset)。名前を指定してください。 SR??? フィールド。Enter キーを押して POU の上にある開いている入力フィールドを閉じますSR_0)。

    ザル 自動宣言 ダイアログが開きます。

  16. 変数を次の名前で宣言します。 SR_0 そしてデータタイプ SR。をクリックします。 OK ボタン。

    ザル SR からの POU Standard ライブラリはインスタンス化されます。 SR の定義には以下のように使用されます。 THEN GT POU のアウトプットで。 SET1RESET 現れる。

  17. の右側の出力ピンを接続します GT への POU SET1 の入力 SR_0 POU。

    SR 以下から Boolean 変数を設定できます。 FALSETRUE そしてまた戻って。入力時の条件の場合 SET1 が満たされると、Boolean 変数は次のように設定されます。 TRUE。条件が次の場合、変数は再びリセットされます RESET 満足しています。この例の Boolean (グローバル) 変数は Glob_Var.xCompressor

  18. を作成 出力 要素を作成してグローバル変数に代入します。 Glob_Var.xCompressor。間に接続線をドラッグします Glob_Var.xCompressor そして出力ピン Q1SR

次に、コンプレッサーが再びオフになる条件を指定します (この場合は RESET SR POU の入力は TRUE シグナル)。そのためには、上記とは逆の条件を定式化します。以下を使用してください SUB (減算) と LT これを行うにはPOUが (未満)

結果は次のCFCチャートです。

_cds_img_tutorial_refrigerator_plcprg_cfc_diagram.png

ラダーダイアグラムエディターでのシグナル管理用 POU の作成

別の POU では、アラームブザーとランプのオン/オフの切り替えの信号管理を実装します。これには、ラダーダイアグラム (LD) 実装言語が適しています

次の各信号をそれぞれのネットワークで処理します。

  • 温度が高すぎるためにコンプレッサーが長時間作動すると、連続した音声信号が鳴ります。

  • ドアを長く開けすぎると、断続的に信号が鳴ります。

  • ドアが開いている間は明かりがついている。

  1. デバイスツリーの Application オブジェクト、タイプのPOUオブジェクトを作成します プログラム 使用して ラダー(LD2) 実装言語。

    プログラムに次の名前を付けます。 Signals

    ザック Signals プログラムはデバイスツリーの横に一覧表示されます。 PLC_PRG。ラダーダイアグラムエディタがで開きます。 Signals タブ。デクラレーションエディターが上部に表示されます。 ツールボックス 右を見る。ラダー図には空のネットワークが含まれています

  2. コンプレッサーが指定された温度に達せずに長時間稼働したときに可聴信号が鳴るように、ネットワークにプログラムを作成します。そのためには、を挿入します TON 次のステップではタイマー POU。Boolean 信号を次のように切り替えます TRUE 指定した時間が経過すると。

  3. ツールボックス 表示、ドラッグ [ブロック] エレメントを作成し、空のネットワーク内の空いている挿入位置にドロップします。

    ブロックは、入力と出力を含むボックスとして表示されます。

  4. 3 つの疑問符をダブルクリックします (???) ブロック内で [] をクリックし、 _ld_icon_input_assistant.png ラインエディターのシンボル。

    ザック 入力アシスタント ダイアログが開きます。

  5. 入力アシスタント ダイアログ、 標準ファンクションブロック カテゴリ、 スタンダード ライブラリ、選択してください TON タイマー そしてクリック OK

  6. これで、ブロックのラインエディターに、関数ブロック名が表示されます TON、Enter キーを押してください。

    ザック TON POU はその入力と出力とともに表示されます。

  7. を削除するには EN 入力と ENO 出力、ブロックを選択してクリック 英語/いいえEN コンテキストメニューで。

    これで、ブロックには INPT 入力と Q そして ET 出力。

  8. ブロックの上にある3つの疑問符[???]をダブルクリックし、 TON_0 インスタンス名として「」と入力し、Enter キーを押します。

    インスタンス名を確認しました。 自動宣言 ダイアログが開きます。

  9. クリック OK ダイアログを確認するため。

    挿入された TON POUは名前でインスタンス化されます TON_0

  10. コンプレッサーが起動したらすぐに起動するようにブロックをプログラムします。まず、をドラッグします。 Contact のラダーエレメント ツールボックス 正面からの眺め IN ブロックの入力。3 つの疑問符をダブルクリックし、ラインエディターのアイコンをクリックします (_ld_icon_input_assistant.png)。入力アシスタントで、すでに宣言されているグローバル変数を選択します コンプレッサー そしてクリック OK

    変数名 Glob_Var.xCompressor 連絡先の上に表示されます。

    ヒント

    入力位置で変数名を入力し始めると、入力した文字で始まる名前を持つすべての変数のリストが自動的に表示され、この時点で使用できます。このアシストは、のデフォルト設定です。 CODESYS スマートコーディングのオプション。

  11. アクティブにする信号を挿入します。これを行うには、 コイル から ツールボックス ビュー、 ラダー カテゴリー、 Q の出力 TON ブロック。名前を指定 Glob_Var.xSignal コイル用。

  12. POU のアクティベーションからの期間を定義します TON_0 信号が鳴るまで。この定義は変数を介して行われます Glob_Var.timAlarmThreshold、これをこの目的で入力に挿入します。 PTTON_0。これを行うには、マウスポインタを入力の入力ピンの左端に移動します PT。入力ピンの左側に表示されているエッジの細かいボックスをクリックし、変数名を指定します

  13. Enter キーを押します。

    ザック 自動宣言 ダイアログが開きます。

  14. クリック OK ダイアログを確定するため。

    新しく宣言された変数は宣言部分に表示されます。

  15. 選択してください TON POUをクリックして 未使用のピンを削除する コンテキスト メニューで。

    未使用の出力 ET が削除されました。

  16. LDの2番目のネットワークでは、ドアを長く開けすぎたときに信号が断続的に鳴るようにプログラムします。

    マウスを使用してドラッグします [ネットワーク] からの要素 ツールボックス ネットワーク 1 の下の挿入ポイントを見てください。

    番号の付いた空のネットワーク 2. 現れる。

  17. 最初のネットワークと同様に、 TON 信号を時間制御で起動するためのPOU。今回はグローバル変数によってトリガーされます。 Glob_Var.xDoorOpen 入力時 IN。入力時 PT、グローバル変数を追加します。 Glob_Var.timDoorOpenThreshold

  18. から Util ライブラリ、追加 BLINK 出力側の POU QTON このネットワーク内の POU を次の名前でインスタンス化します。 Blink_0

  19. ザル BLINK_0 POU はシグナル転送をクロックします。 Q それゆえ Glob_Var.xSignal

    まず、2 つドラッグ 連絡 からの要素 ツールボックス を見る OUT POU の出力。変数を割り当てます。 TON_1.Q 出力後すぐに連絡先に送信 Q とグローバル変数 Glob_Var.xDoorOpen 2 番目の連絡先へ。

  20. を挿入 コイル 2 つの接点の後に要素を追加し、グローバル変数を割り当てます。 Glob_Var.xSignal それに。

  21. ローカル変数を宣言する timSignalTime : TIME := T#1S; そして、この変数を入力部に挿入します。 TIMELOWTIMEHIGH。のサイクルタイムは 1 秒です。 TRUE そして 1 秒は FALSE

  22. 選択してください TON POUをクリックして 未使用のピンを削除する コンテキスト メニューで。

    未使用の出力 ET 削除されます。

  23. 3番目のネットワークでは、ドアが開いている間はランプが点灯するようにプログラムします。追加のネットワークと接点を追加します。変数を割り当てます。 GlobVar.xDoorOpen 連絡先へ。

  24. 挿入された接点はコイルに直接つながります。接点の右側にコイルを追加し、グローバル変数を割り当てます Glob_Var.xLamp コイルに。

  25. CODESYS LD のネットワークを 1 つずつ処理します。次に、ネットワーク 1 の最後にネットワーク 3 へのジャンプをインストールして、ネットワーク 1 のみ、またはネットワーク 2 のみが実行されるようにします。

    ネットワークの左上端の3番目の線にマウスポインターを合わせると、情報が表示されます。 <ここにジャンプを挿入> が表示されます。この位置をダブルクリックして入力してください ドアは開いています: 行エディタのジャンプ ラベルとして。

    ネットワーク1を選択します。 ツールボックス ビュー、 ラダー図 カテゴリをドラッグして ジャンプ 要素を、その前に三角形でマークされた挿入位置に移動します。 Glob_Var.xSignal コイル。

    ジャンプ要素が表示されます。ジャンプ先は引き続き次のように指定されています。 ???

  26. 3つの疑問符[???]をダブルクリックし、行エディタのアイコンをクリックします(_ld_icon_input_assistant.png)。 入力アシスタント ダイアログで選択 DoorIsOpen ラベル識別子の候補から選択してクリック わかりました 確認します。

    ネットワーク 3 へのラベルが実装されます。

LD プログラムは次のようになりました。

_cds_img_first_cds_program_ld_signals.png

メインプログラムの「Signals」プログラムの呼び出し

今回のプログラムサンプルでは、メインプログラムが PLC_PRG を呼び出す必要があります Signals 信号処理プログラム。

  1. デバイスツリーで、ダブルクリック PLC_PRG

    ザル PLC_PRG プログラムがエディタで開きます。

  2. の中に ツールボックス 表示、ドラッグ [ブロック] エレメントのエディターへ PLC_PRG

  3. 3 つの疑問符 [???] をダブルクリックしますそして、をクリックします _ld_icon_input_assistant.png ラインエディターのシンボル。 入力アシスタント ダイアログ、 POU/プログラムコールとファンクションコール カテゴリを選択し、 Signals プログラムしてクリック OK 確認のため。

シミュレーション用の ST POU の作成

このサンプルプロジェクトのアプリケーションは物理的なセンサーやアクチュエーターにはリンクされていないため、温度の上昇と下降をシミュレーションするプログラムも作成する必要があります。これにより、後で冷蔵庫コントローラーの動作をオンラインモードで監視できるようになります

シミュレーションプログラムは構造化テキストで作成します。

プログラムはメインプログラムまで温度を上げます PLC_PRG 設定温度を超えていると判断します。その後、プログラムはコンプレッサーを起動します。その後、メインプログラムがコンプレッサーを再び無効にするまで、シミュレーションプログラムは温度を下げます。

  1. デバイスツリーで、右クリックします [アプリケーション] オブジェクトを作成し、タイプの POU オブジェクトを追加します。 プログラム構造化テキスト (ST) 実装言語。POU には、という名前を付けます Simulation

  2. 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 プログラム。

  1. デバイスツリーで、ドラッグします Simulation へのエントリー MainTask 下に タスク設定

    ザル Simulation プログラムがタスク構成に挿入されます。

  2. タスク設定を表示するには、をダブルクリックします MainTask エディタを開くためのエントリ。

    エディターの下部にある表には、タスクによって呼び出される POU が表示されます。 PLC_PRG (デフォルトで入力) と Simulation。タスクのコールタイプは サイクリック 20 ミリ秒間隔で。オンラインモードでは、タスクが 2 つの POU を 1 サイクルに 1 回実行します

PLCとの通信用の「アクティブアプリケーション」の定義

の名前 Application には太字で表示されています。 デバイス 表示。これは、このアプリケーションが「アクティブなアプリケーション」として設定されていることを意味します。その後、コントローラーとの通信はこのアプリケーションを参照します。

プロジェクトにアプリケーションが 1 つしかない場合は、そのアプリケーションが自動的にアクティブなアプリケーションになります。アプリケーションがまだアクティブになっていない場合は、次のようにアクティブにします

  • のコンテキストメニューで Application、クリック アクティブアプリケーションを設定

    [アプリケーション] が太字で表示されるようになりました デバイス 表示。

アプリケーションプログラムのデバッグ

コードを入力する際、 CODESYS 問題のテキストの下に赤い波線の下線が表示され、構文エラーがすぐに通知されます。チェックの結果はメッセージビューにも表示されます。必要な場合は、をクリックします 表示 → メッセージ メッセージビューを開きます。メッセージは、に表示されます。 プリコンパイル メッセージカテゴリ。メッセージを選択して [] を押すことができます。 F4 キーを押すと、コード内の対応するポイントにジャンプします。アプリケーションがコントローラにダウンロードされると、アプリケーションプログラムのテストがさらに実行されます。

その後、エラーのないアプリケーションのみをコントローラーにダウンロードできます。