コンテンツにスキップ

条件成立時のPLCへの制御信号書き込み

PLCから収集した値が特定条件を満たしたときに、PLCへ制御信号や指示値を書き込めるようにする。

本事例で使用しているプロジェクトファイルです。通常版と、PLCコレクタをシミュレーションモードで設定したファイルを用意しています。

※SpeeDBee Synapseバージョン4.9.9以降でインポートできます。

  • PLCから収集したデータを条件判定に使う方法
  • 演算コレクタで複数の収集値をもとに条件を判定する方法
  • イベントデータコンポーネントで条件成立時だけ書き込み用データを出力する方法
  • PLC書き込みコンポーネントでPLCの指定アドレスへ値を書き込む方法

PLCから設備状態と測定値を収集し、条件を満たした場合にPLCへ制御信号を書き込みます。

例として、以下のデータをPLCから収集しているものとします。

データ名アドレス例データ型内容
operation_modeD0100WORD運転モード。1のとき自動運転
temperature_cD0101WORD温度(℃)
pressure_kpaD0102WORD圧力(kPa)

条件が成立したとき、PLCのW100.00へ制御信号を書き込みます。

書き込み先アドレス例データ型書き込み値条件
W100.00BIT1operation_mode = 1 かつ temperature_c >= 80 かつ pressure_kpa >= 500
  • PLCコレクタ(条件判定に使うデータの収集)
  • 演算コレクタ(複数の収集値をもとにした書き込み条件の判定と1/0の出力)
  • イベントデータ(演算コレクタからの出力データが1の場合のみ後続へ出力)
  • PLC書き込み(イベントデータからのデータをトリガにPLCへの値書き込み)
  1. PLCコレクタでoperation_mode、temperature_c、pressure_kpaを収集
  2. 演算コレクタで、収集値が書き込み条件をすべて満たす場合はresult = 1、それ以外の場合はresult = 0を出力
  3. イベントデータコンポーネントで、result = 1の場合のみ値を出力
  4. PLC書き込みコンポーネントで、イベントデータからresultが入力された場合にPLCのW100.00へ1を書き込み

今回のデータフローは次のようになります。

  1. PLCコレクタの設定を行います。 PLCの接続先、収集周期、収集対象のアドレスを指定し、条件判定に必要なデータを収集できるようにします。

    データ名アドレス例データ型
    operation_modeD0100WORD
    temperature_cD0101WORD
    pressure_kpaD0102WORD
  2. 演算コレクタを追加し、PLCコレクタと接続します。 演算コレクタ新規登録時は、入力ポートに接続するコンポーネントを選択するダイアログが表示されるので、手順1で設定したPLCコレクタを選択し、接続をクリックします。
    ※PLCコレクタが起動していないと選択できないため、あらかじめ起動しておいてください。▶ボタンからも起動できます。

  3. 演算コレクタの入力データと演算式を設定します。 まず、入力データ設定でPLCコレクタから受け取ったデータを$A、$B、$Cに割り当てます。

    変数入力データ
    $Aoperation_mode
    $Btemperature_c
    $Cpressure_kpa

    演算式に次の式を設定し、出力データ名をresultとします。$A、$B、$Cがすべて条件を満たす場合は1、それ以外の場合は0が出力されます。

    出力データ名演算式
    resultIF($A = 1 AND $B >= 80 AND $C >= 500, 1, 0)
  4. イベントデータコンポーネントを追加し、演算コレクタと接続します。 イベントデータコンポーネント新規登録時は、入力ポートに接続するコンポーネントを選択するダイアログが表示されるので、前の手順で設定した演算コレクタを選択し、接続をクリックします。
    ※演算コレクタが起動していないと選択できないため、あらかじめ起動しておいてください。▶ボタンからも起動できます。

  5. イベントデータコンポーネントで、演算コレクタから受け取ったresultが1の場合に、resultを後続へ出力するように設定します。 条件種別にはraiseを選択し、条件式には$VALUE = 1($VALUE=result)を指定します。これにより、resultが0から1へ変化したタイミングだけデータを出力できます。

    入力データ条件種別条件式
    CalculateWriteCondition:resultraise$VALUE = 1

    条件が成立していない間は、PLC書き込みコンポーネントへデータを渡さないようにします。 これにより、条件成立時だけPLCへ書き込みが実行されます。

  6. PLC書き込みコンポーネントを追加し、イベントデータコンポーネントと接続します。 PLC書き込みコンポーネント新規登録時は、入力ポートに接続するコンポーネントを選択するダイアログが表示されるので、前の手順で設定したイベントデータコンポーネントを選択し、接続をクリックします。
    ※イベントデータコンポーネントが起動していないと選択できないため、あらかじめ起動しておいてください。▶ボタンからも起動できます。

  7. 接続先には書き込み対象のPLCを指定し、入力データには、イベントデータコンポーネントから出力されるresultを割り当てます。resultが入力された場合に、書き込み先アドレスW100.00へ固定値1を書き込むように設定します。

    トリガデータ書き込み先アドレス例データ型書き込み値(固定値)
    DetectWriteCondition:ed1-CalculateWriteCondition-resultW100.00BIT1
  8. PLC書き込みコンポーネントの入力ポート設定で遅延時間を設定します。 今回のように演算コレクタやイベントデータを経由する場合、PLC書き込みコンポーネントにデータが届くまでに遅延が発生します。 そのため遅延時間を設定して入力データの検索範囲を遅延分だけずらします。今回は6000ミリ秒に設定します。 遅延時間の詳細は、補足の「遅延時間について」を参照してください。

  9. 設定を保存し、各コンポーネントを起動します。

PLC側の値を変更し、条件成立時にW100.00へ1が書き込まれることを確認します。

PLCコレクタとイベントデータコンポーネントの出力データを確認し、条件を満たしたタイミングだけイベントデータからresult(1)が出力されていることを確認します。以下の例では10:53:57にresult(1)が出力されていることが確認できます。

続いて、PLC書き込みコンポーネントのログを確認します。 10:53:57のresult(1)出力後、約7秒後の10:54:04.594に書き込みが実行されているログを確認します。 この約7秒には、設定した6000ミリ秒の遅延時間などが含まれます。

実際のデータが届くまでの遅延が、設定されている遅延時間より大きい場合、後続コンポーネントで入力データを取得できないことがあります。 これは、出力データが遅延して後続コンポーネントの入力データの検索範囲に入らなくなるためです。 入力データを取得できない場合、後続コンポーネントでは出力や書き込みなどの処理は行われません。 遅延時間は、この検索範囲をずらすための設定です。データが届くまでの遅延を考慮して設定してください。

遅延時間の目安は、イベントデータコンポーネントであればのDEBUGログから確認できます。

この例では、インサート時刻とデータに付与されたタイムスタンプの差である約4.1秒が遅延に相当します。今回の例では、この時間に余裕を持たせて遅延時間を6000ミリ秒程度に設定することで、データの入力を検知できるようになります。

インサート時刻付与されたタイムスタンプ差分
2026-09-15T09:47:27.1831789433243063622411 (2026-09-15T09:47:23.064)4.119秒
2026-09-15T09:47:42.1921789433258063622411 (2026-09-15T09:47:38.064)4.128秒
2026-09-15T09:47:57.2001789433273063622411 (2026-09-15T09:47:53.064)4.136秒