「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は主にPLCソフト開発に携わっている中堅社員です。
PLCにおいても機器との通信は年々重要度が増しています。
システムによっては同じ機器複数台と通信を行う場合があり、その際にはFB(Function Block)を使用すると便利です。
本稿では、テーマを「FBを使用したPLCソケット通信」として、1つのモデルケースに沿ったプログラム構築方法を記載いたします。
PLCは三菱電機IQ-Rシリーズ、PLCが通信する機器は計量器×2台とします。
PLCと計量器はEthernetで接続され、TCP/IP通信にて計量データを取得するものとします。
以下にシステム構成および通信仕様を示します。
図1. システム構成、および通信仕様
モデルケースに対してFB設計を行います。
まずはFBの種類を決定しましょう。
IQ-RシリーズではFBの種類として「マクロ型FB」と「サブルーチン型FB」の選択ができます。
「マクロ型FB」は呼び出し元プログラムに対して、呼び出された分だけFBプログラムを展開・実行します。
「サブルーチン型FB」は、FBプログラム実体は1つであり、呼び出し元プログラムからそのプログラム実体を呼び出して実行します。
スキャンタイムを優先したい場合は「マクロ型FB」を選択、プログラム容量を優先したい場合は「サブルーチン型FB」を選択すると効果的です。
今回は一般的に使用頻度が高い「サブルーチン型FB」を採用します。
計量データを取得する際、その都度コネクション接続/切断を行うことを考えると、ポートオープン 〜 ポートクローズまでの一連の通信処理をFB処理としたほうが良いでしょう。
そんな訳で、下図の赤点線内をまるまるFB処理にします。
図2. FB処理内容
FBがポートオープン 〜 ポートクローズまでの一連の通信処理を行うので、 呼び出し元のプログラムとのインターフェースとしてはFBの処理を開始させる信号と、FBから処理完了信号だけで良さそうです。
従って、入力変数は、
・取得要求信号
・通信先の計量器IPアドレス/ポートを指定(※1)する通信コネクション番号
の2つとなります。
(※1)RJ71EN71ユニットパラメータにおいて、ポート2のコネクションNo.1に計量器01、コネクションNo.2に計量器02を登録することにします。
出力変数は、
・取得完了信号
・計量データ
の2つとします。
図3. FB入出力変数
前項の設計のとおりプログラミングしていきます。
サブルーチン型のFBを作成し、ローカルラベルに変数を登録します。
変数命名規則として、変数名先頭Iは入力変数、Oは出力変数、Bはビット型、Wはワード型を付加することとします。
入出力変数の他に、通信処理命令パラメータで使用する変数も登録します。
FB処理、すなわちポートオープン 〜 ポートクローズまでの一連の通信処理をプログラミングします。
以下の流れでプログラミングします。
FBを呼び出す処理をプログラミングします。
まず、呼び出し元プログラムのローカルラベルに計量器01用と計量器02用のFBインスタンスを登録します。
次に、計量器01と計量器02のFB呼び出しプログラムを作成します。
通信コネクション番号は、今回はRJ71EN71のポート2を使用するため、通信コネクション番号は65、66を指定します。
(RJ71EN71はポート1のコネクション番号が1〜64、ポート2のコネクションが65〜128となります)
計量データはD1とD11に格納されるようにしました。
いかがでしたでしょうか。
本稿では単純なモデルケースではありますが、FBを使用したソケット通信についてプログラム構築方法を記載させていただきました。
FBの入力変数として、Ethernetユニットの先頭IO番号を採用して、ユニット装着位置に依存しない、 さらに汎用性が高いFBへ拡張するなど、まだまだ改良の余地はありますが、本稿ではここまでの内容とさせていただきます。
本稿が少しでも皆様のお役に立てれば幸いです。
(Y.S.)
関連ページへのリンク
関連するソフテックだより