今回の記事ではPILZのPNOZ m B1 SideにModbus TCP Serverを立ち上げ、OMRON R88D ServoのFSOE状態を公開します。そしてWAGO社のCC100にCDP Runtimeをインストールし、Modbus TCP Clientを構築しそのModbus TCP Serverにアクセスします。また、CDP StudioのWEBUIを使用します。
さ、FAを楽しもう。

前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
技術は独り占めせず、届けるもの
私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。
また、もしあなたの現場で…
- 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
- 「EtherCAT通信でうまくいかない部分を検証してほしい」
- 「新しいリモートI/Oを試したいけど社内に検証環境がない」
など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。
支援のかたち
現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。
メンバーシップ(ラジオの応援)
Fullさんとのラジオをより充実させるための支援プランです。
https://note.com/fulhause/membership/join
Amazonギフトリスト
コンテンツ制作に必要な機材・書籍をリストにしています。
https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share
Patreon(ブログ・動画活動への応援)
月額での小さなご支援が、記事の執筆・検証環境の充実につながります。
https://www.patreon.com/user?u=84249391
Paypal
小さな支援が大きな力になります。
https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
Reference Link
http://soup01.com/ja/category/cmz/
PNOZ Modbus TCP
Modbus/TCPによるデータ交換では、PNOZmulti 2が接続サーバーとなります。 すべての
サービスデータは1つのデータレコードに定義され、クライアントが直接アクセスできます。
System requirements
PNOZ m B1 SideでModbus TCPを使用するには、最低限下記のシステム要件を満たす必要があります。
- PNOZmulti Configurator: バージョン9.0.0より
- PNOZ m B0 + PNOZ m ES ETH
Modbus/TCP – Basics
Modbus/TCPはユーザーグループMODBUS-IDAによって発行されたオープンなフィールドバス規格です。Modbus/TCPは産業用イーサネット(TCP/IP over Ethernet)をベースとしたプロトコルです。 これはクライアント/サーバ通信のプロトコルの1つです。 データはファンクションコード(FC)を使用したリクエスト/レスポンス・メカニズムで転送されます。
Modbus/TCPはコネクション指向で、使用可能なデータがModbus/TCPで転送される前に、まず2つのModbus/TCPインターフェース間でコネクションを確立する必要があります。
接続が2つのModbus/TCPインターフェース間で確立されなければなりません。
接続のイニシエータはクライアントと呼ばれます。 クライアントが接続を確立する通信パートナーはサーバと呼ばれます。
Modbus/TCP with PNOZmulti 2
Modbus/TCP 経由の通信用インターフェースは、通信モジュールPNOZ m ES ETHを介してPNOZmulti 2に提供されます。
PNOZ m ES ETHは最大8つのModbus/TCP接続を管理できます。 PNOZmulti 2は常に接続のサーバーです。 接続クライアントは、PC(PNOZmulti Configurator)、制御システム、ディスプレイユニットなど、さまざまなデバイスになります。 これらは同時に設定可能な
制御システムPNOZmulti 2にアクセスできます。
仮想I/Oとフィールドバス通信中にポーリングされるすべての情報はデータエリアに含まれます。 データは直接アクセスされます。 もはやテーブル/セグメントを経由して切り替える必要はありません。
Modbus/TCPに必要なコンフィグレーションは、PNOZmulti 2オペレーティングシステムで事前に完全にコンフィグレーションされています。 PNOZmulti Configuratorで必要なのは、仮想入出力をアクティブにすることだけです。
設定可能な制御システムPNOZmulti 2では、Modbus/TCP接続によるデータ交換のためのポート番号「502」がデフォルトとして固定されています。 PNOZmulti Configuratorには表示されず、変更もできません。
Data areas
設定可能な制御システムPNOZmulti 2は、以下のModbus/TCPデータ領域をサポートしています。注意するのはPNOZmultiシステムのアドレス指定は “0 “から始まる。 他のメーカーのデバイスでは、アドレス指定は “1 “から開始できます。
Function codes
Modbus/TCP 経由で PNOZmulti 2 と通信する場合、次のファンクションコード(FC)を使用できます:
Input and output data
以下の表は、PNOZmulti 2の仮想入力の現在の状態を含むModbus/TCPデータ領域について説明しています。 これらはユーザが設定できる仮想入力です。 データの関連領域は、各 Modbus/TCP データ領域(コイル (0x)、ディスクリート入力 (1x)、入力レジスタ (3x)、保持レジスタ (4x))に定義されています。 リード/ライト・アクセスは Modbus/TCP データ領域に依存します。
以下の表は、PNOZmulti 2 の仮想出力の状態を含む Modbus/TCP データ領域について説明しています。 データの関連領域は Modbus/TCP データ領域 Discrete Inputs (1x) と Input Register (3x) に定義されています。 これらのデータ領域にはリード・アクセスが可能です。
Implementation
PNOZ Side
最初はPILZのPnoz Controller側を構築します。
Add Virtual Interface
PNOZ Mult コントローラーにMODBUS TCP通信を使用するには、PNOZmulti ConfiguratorのプロジェクトからVirutal I/O>> Modules/Interfacesを追加していきます。
Done!
次はModbus TCP Interfaceをわかりやすい名前に変更しましょう。
Program
次はPNOZ 小型コントローラーのプログラムを作成します。
Main Program – Page1
最初はMain Program>Page1を開きます。
こちらはPage1のプログラムになります。
まず非常停止の状態をMODBUS TCPの仮想出力0番と繋がります。
Equipment IDに先ほど追加したVirtual Interfaceを設定してください。
I/Oは仮想出力の番号を設定できます。
次はModbus TCP Clientから信号も受けとりたいので、仮想入力を追加します。
I/Oは仮想入力の番号を設定していきましょう。
Main Program – Page2
次はMain Programのプログラムシート2 Page2を作成します。
OMRONの各R88DのSERVOのFSOE状態をMODBUS TCPの仮想出力と繋がります。
CDP Studio
次はCDP Studio側を構築します。今回のCDP Studio RuntimeはWAGO社のCC100にインストールします。
Add Modbus TCP
プロジェクトにModbus TCP Clientを追加するためにModbusIO>Generic Master/Client>ModbusMasterTCPをDropします。このブロックはModbus TCP Clientとして稼働するためのブロックです。
Add ModbusMaster Packet
ModbusMasterTCPブロックを開き、2つのModbusMaster Packetブロックを追加してください。このブロックは該当するModbusMaster の接続設定を行います。1つのブロックは1つの設定になります。
- FC コード
- レジスタ番号
- レジスタ数
などなどです。
ModbusMasterPacketブロックをクリックし、Propertiesを開いてください。
Read Input Register
1つ目のModbusMasterPacketはInput Registerを読み込みたいので、FunctionCodeをReadInputRegistersに設定します。
ReadAddressとWriteAddressは該当するModbusMasterPacketのアクセスレジスタOFFSETになります。注意するのはこの欄の設定は16進数です。
先ほど追加したModbusMasterPacketを開き→8-AI-shortを追加します。
Done!レジスタは1つ1ワードなので、このブロックは連続8ワードにアクセスすることになります。先ほどReadInputRegistersを200Fに設定しましたので、このブロックにアクセスするのはInput Register200-207になります。
ブロック名を変更したい場合はNameで行ってください。
Write Multiple Register
もう1つのModbusMasterPacketブロックのPropertiesを開き、FunctionCodeにWriteMultipleRegistersを設定します。
WriteAddressは0に設定します。PNOZ m B1 のModbusの仮想入力はModbus Register0から始めるからです。
ModbusMasterPacketを開き、WriteMultipleRegistersを追加します。
数は8-AO Shortのブロックなので、Register0-7を書き込むことになります。
Add HMI Apps
今回はCPD StudioにHMIアプリケーションを追加します。そのアプリケーションもCC100上で実行することになります。プロジェクトに右クリック>Add Newします。
CDP Applicationを選び>Chooseで進みます。
Application TypeをWebUIに選択します。
アプリケーション名を入力し、Nextで進みます。
Finishでプロジェクトを作成しましょう。
Done!
Designをクリックし、WebUIの作成画面に進みましょう。
Add Container
WebUIの作成はGUIアプリケーションと少し異なり、最初は画面にContainerを追加する必要があります。
Configure Screen
こちらは今回の記事で作成した画面です。
- 非常停止の状態
- オムロン R88D 3軸の安全状態
- PNOZ m B1 SideのModbus仮想入力0をON/OFFするボタン
Add CDP Container
WebUIを作成したあと、それと接続する信号を作成します。CDPCore>CDPComponentを追加します。
Done!
CDPComponentに入出力信号を増やしたいので、ResourcesからCDPSignal<bool>をCDPComponentにDropしてください。
Done!
Bit Extract
Bit Extract関数を使用し、16Bitのワード変数にある位置のBitを指定し出力します。
こちらはBitExtractブロックです。
- Source:入力
- BitNo:Sourceワードから取り出したいBit位置(0から計算)
Sourceパラメータを右クリック>Connect Fromをクリックし変数と接続します。
Path設定画面が表示され、先程ModbusMasterPacketに追加した8-AIブロックのAI1…などと接続しましょう。
Done!
Bit Pack
次はBit Packブロックを使用し、ワード変数の指定BitをON/OFFします。
- Source:ワード変数元
- BitNo:アクセスしたいBit位置
- Out:計算結果
Map Write Register
先ほどのBitPack関数と繋がりたいので、ModbusMasterPacket1(WriteMultipleRegisters用)を開きます。
今回の記事では仮想入力にデータを書き込みたいので、AO0を右クリック>Connect Fromクリック>先ほどのBitPack関数の出力と接続しましょう。
Deloy
最後はプログラムとWEBUIプロジェクトをCC100にDownloadしてください。
Result
Done!CC100に必要なアプリケーションをDownloadできました。
下記のLinkにアクセスします(IPアドレスはCC100のアドレスに変更してください)。
http://192.168.0.200:7689/browse/
CDP Studio Runtimeの内部の変数や状態をWeb Browser上で確認できます。
例えばModbusMasterPacketのレジスタ読みの現在値をそのまま確認できます。
WEBUIのURLを確認するにはWEBUIアプリケーション>WebURL変数>その現在値がWebUIのURLになります。
Done!CDP Studio RuntimeとCC100の組み合わせで、PNOZ m B1 Sideコントローラーの状態をModbus経由で取得できました。
また、WEBUIのボタンを押すと、PNOZ m B1 Side側でも信号を受け取れたことを確認できました。