HOME > ソフテックだより > 第449号(2024年5月1日発行) 技術レポート「FBを使用したPLCソケット通信」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第449号(2024年5月1日発行)
技術レポート

「FBを使用したPLCソケット通信」

1. はじめに

私は主にPLCソフト開発に携わっている中堅社員です。

PLCにおいても機器との通信は年々重要度が増しています。
システムによっては同じ機器複数台と通信を行う場合があり、その際にはFB(Function Block)を使用すると便利です。

本稿では、テーマを「FBを使用したPLCソケット通信」として、1つのモデルケースに沿ったプログラム構築方法を記載いたします。

2. モデルケース

PLCは三菱電機IQ-Rシリーズ、PLCが通信する機器は計量器×2台とします。
PLCと計量器はEthernetで接続され、TCP/IP通信にて計量データを取得するものとします。
以下にシステム構成および通信仕様を示します。

システム構成、および通信仕様
図1. システム構成、および通信仕様

3. FB設計

モデルケースに対してFB設計を行います。

3-1. FB種類

まずはFBの種類を決定しましょう。
IQ-RシリーズではFBの種類として「マクロ型FB」と「サブルーチン型FB」の選択ができます。

「マクロ型FB」は呼び出し元プログラムに対して、呼び出された分だけFBプログラムを展開・実行します。

「サブルーチン型FB」は、FBプログラム実体は1つであり、呼び出し元プログラムからそのプログラム実体を呼び出して実行します。

スキャンタイムを優先したい場合は「マクロ型FB」を選択、プログラム容量を優先したい場合は「サブルーチン型FB」を選択すると効果的です。

今回は一般的に使用頻度が高い「サブルーチン型FB」を採用します。

3-2. FB処理内容

計量データを取得する際、その都度コネクション接続/切断を行うことを考えると、ポートオープン 〜 ポートクローズまでの一連の通信処理をFB処理としたほうが良いでしょう。
そんな訳で、下図の赤点線内をまるまるFB処理にします。

FB処理内容
図2. FB処理内容

3-3. FB入出力変数

FBがポートオープン 〜 ポートクローズまでの一連の通信処理を行うので、 呼び出し元のプログラムとのインターフェースとしてはFBの処理を開始させる信号と、FBから処理完了信号だけで良さそうです。

従って、入力変数は、
・取得要求信号
・通信先の計量器IPアドレス/ポートを指定(※1)する通信コネクション番号
の2つとなります。
(※1)RJ71EN71ユニットパラメータにおいて、ポート2のコネクションNo.1に計量器01、コネクションNo.2に計量器02を登録することにします。

出力変数は、
・取得完了信号
・計量データ
の2つとします。

FB入出力変数
図3. FB入出力変数

4.プログラミング

前項の設計のとおりプログラミングしていきます。

4-1. FB変数登録

サブルーチン型のFBを作成し、ローカルラベルに変数を登録します。
変数命名規則として、変数名先頭Iは入力変数、Oは出力変数、Bはビット型、Wはワード型を付加することとします。
入出力変数の他に、通信処理命令パラメータで使用する変数も登録します。

クリックで拡大
図4. FB変数登録

4-2. FBプログラミング

FB処理、すなわちポートオープン 〜 ポートクローズまでの一連の通信処理をプログラミングします。
以下の流れでプログラミングします。

  1. 取得要求がONしたらポートオープン処理
  2. 計量器とコネクション確立したら計量データ取得コマンド送信処理
  3. 計量器からの計量データ受信処理、およびASCII⇒10進BIN変換
  4. ポートクローズ処理
  5. 取得完了をONする

4-3. FB呼び出し

FBを呼び出す処理をプログラミングします。

まず、呼び出し元プログラムのローカルラベルに計量器01用と計量器02用のFBインスタンスを登録します。

クリックで拡大
図5. FBインスタンス登録

次に、計量器01と計量器02のFB呼び出しプログラムを作成します。

クリックで拡大
図6. FB呼び出しプログラム

通信コネクション番号は、今回はRJ71EN71のポート2を使用するため、通信コネクション番号は65、66を指定します。
(RJ71EN71はポート1のコネクション番号が1〜64、ポート2のコネクションが65〜128となります)

計量データはD1とD11に格納されるようにしました。

4-4. プログラム実行

それでは実際に計量器と接続し、プログラムを実行してみます。
計量器01は+1208g、計量器02は−512gの計量結果という状況で、計量データ取得要求をONしてみます。
・・・結果は、見事下図のとおりD1とD11に計量データが格納され、想定していた動作となっていることが確認できました!

クリックで拡大
図7. プログラム実行結果

5. おわりに

いかがでしたでしょうか。
本稿では単純なモデルケースではありますが、FBを使用したソケット通信についてプログラム構築方法を記載させていただきました。

FBの入力変数として、Ethernetユニットの先頭IO番号を採用して、ユニット装着位置に依存しない、 さらに汎用性が高いFBへ拡張するなど、まだまだ改良の余地はありますが、本稿ではここまでの内容とさせていただきます。

本稿が少しでも皆様のお役に立てれば幸いです。

(Y.S.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ