「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
三菱電機製PLCにてModbus/TCP通信を行う場合、Modbus/TCPユニット(QJ71MT91)を使用する以外にCPU内蔵EthernetポートやEthernetユニットを使用して通信を行うことも可能です。
今回は、「通信プロトコル支援機能」を使用してModbus通信を行う方法をご紹介します。
SLMP(SeamLess Message Protocol。MCプロトコルの4E/3Eフレームと互換)、Modbus/TCP、BACnetの3種類のパケット形式の通信に対応した機能です。
また、ユーザーが任意にパケット形式を作成することもできます。
通信プロトコル支援機能では、パケットに含まれている開始/終端文字などの固定部分は意識することなく、通信ごとに変わる部分(読み出し先のアドレス等)のみを変更して送信することができ、また、相手から返ってきたデータの処理(上下バイト入れ替え等)を自動で行うことができます。
なお、通信プロトコル支援機能で対応することができるのは、PLCがModbusクライアント(=マスタ、データをもらいに行く側)となる場合です。
Modbusサーバー(=スレーブ)として動作するには、以下のユニットが必要です。
通信プロトコル支援機能が使用できるのは下記CPU、ユニットです。
通信プロトコル支援機能を使用するには、「プロトコルの設定・登録」「PLCパラメータの設定」および「プログラムの作成」が必要です。
「通信プロトコル支援機能」の設定ソフトはGX Works2またはGX Works3のメニューから起動します。
設定ファイルを新規に作成したあと、プロトコル番号の列にある「追加」をクリックすることでプロトコルを登録・設定することができます。
以下は、Modbusの保持レジスタ(Holding Registers)を読み出す場合の設定例です。
図1. 保持レジスタの読み出し設定
その後、プロトコルの要素の設定を進めていくことになります。
詳しい操作方法については、以下マニュアルをご確認ください。
・SH-080901-AC GX Works2オペレーティングマニュアル(インテリジェント機能ユニット操作編)
→ 4章 通信プロトコル支援機能 − 4.6 プロトコルを編集する
プロトコルの設定にあたって一部補足します。
(1)プロトコル設定ファイルの保管
図2. デバイス一括設定
ネットワークパラメータでEthernetユニットを追加した上でオープン設定を行います。
以下は、QシリーズEthernetユニットの例です。
図3. オープン設定例
オープン設定は16個の枠がありますが、図3のとおり受信/送信で2つの枠を消費しますので、通信できる相手は8つまでとなる点にご注意ください。
生存確認は「確認する」「確認しない」どちらでも通信できますが、通常は「確認する」としておき、環境やシステム構成により問題が発生する場合は「確認しない」に設定します。
交信相手ポート番号はModbus/TCPの仕様として「502」(10進数)が標準となります。
通信プロトコルの実行を行うためには、「ポートのオープン」「通信プロトコルの実行」「ポートのクローズ」のプログラム作成が必要です。
「ポートのクローズ」は通信異常が発生した場合に実行し、その後「ポートのオープン」から再開するようにします。
以下は、QシリーズEthernetユニットを使用した場合のプログラム例です。
(通信処理が動作する最低限のプログラムのみ含めています)
図4. プログラム例
「通信プロトコル支援機能」の設定ソフトにて指定した送信パケットのデバイスに通信条件を設定します。
プログラム例では、オープン命令(ZP.OPEN)、通信プロトコル実行命令(GP.ECPRTCL)、クローズ命令(ZP.CLOSE)の先頭にある実行条件デバイス(M90∼92)は手動でONさせて実行する前提となっています。
実際に実用的なプログラムとする場合は、タイマでの定期実行や、DECO命令などを使用したステップ処理などの条件に置き換えてください。
手元に通信相手の機器が無い場合、パソコン上でModbusサーバー(=スレーブ)ソフトを起動し、通信確認を行うことができます。
様々なModbusソフトがありますが、その1つが「ModRSsim2」です。
ModRSsim2は、オープンソースソフトウェア/バージョン管理システムサイトの「SourceForge.net」からダウンロードすることが可能です。
https://sourceforge.net/projects/modrssim2/
アプリケーション単体(ModRSsim2.exe)のみの構成となっており、インストール操作などは特に必要ありません。
また、設定も基本的には不要で、起動するとクライアント(=マスタ)からの接続待ちとなります。
図5. ModRSsim2の外観
“0”が表示されているところをダブルクリックすることでレジスタに値をセットすることができます。
ModRSsim2はすべてのモジュールID(=スレーブID)に対する接続を受け付けます。
その仕様が便利な場合もありますが、PLCから複数の通信先への接続があり、それぞれ個別に模擬データを入力して確認したいときに困ります。
ModRSsim2では待ち受けのポート番号を標準の「502」から変更できますので、別のポート番号(503等)に変更し、PLCパラメータのオープン設定の「交信相手ポート番号」も合わせて変更することで、複数起動したModRSsim2に接続を振り分けることができます。
図6. ModRSsim2 TCP/IP設定
「通信プロトコル支援機能」を利用することで、冒頭でも述べましたがプログラム上でのパケット(電文)の作成や、上下バイト入れ替えなどの処理が不要になることでプログラムの可読性が向上します。
しかし、Modbusはプロトコルとしてかなり簡素化された仕様のためパケット中の固定部分も少なく、通信プロトコル支援機能のメリットを受けにくいため、プログラム上でパケット内容を作成してソケット通信を行うほうがわかりやすい面もあります。
プロトコル支援機能を使用する場合と、使用しない場合の比較を表 1に示します。
表1. プロトコル支援機能の使用/不使用時の比較
No. | 項目 | プロトコル使用 | プロトコル不使用 |
---|---|---|---|
1 | プログラム作成 | △ (プロトコル設定+ラダー) |
○ (ラダーのみ) |
2 | プログラムの簡素化 | ○ (プロトコル固定部分記述なし) |
△ (プロトコル固定部分記述あり) |
3 | 送信/受信データ加工 | ○ (送信順、バイト入れ替え) |
× (すべてプログラムで処理) |
4 | 受信データ解析 | ○ (必要データのみ格納) |
× (データ切り出し・変換必要) |
5 | 保守性 | × (設定ファイル+ラダー必要) |
○ (ラダーのみで完結) |
また、「3. 対応機器」でも挙げた「シンプルCPU通信機能」は、ポートのオープン/クローズなども不要で通信条件を登録すれば自動的にデータ送受信を行ってくれますので、対応している場合はそちらを使用するほうが良いと感じます。
同じ機能を実現するのにも色々な手段があることを把握したうえで、使い分ける必要があります。
(S.T.)
関連ページへのリンク
関連するソフテックだより