Omron FINSプロトコル：基本とMQTTへのブリッジングのメリット

![Omron FINSプロトコル：基本とMQTTへのブリッジングのメリット](https://assets.emqx.com/images/8c556d3eeba33245e623b83af5d893bb.png?imageMogr2/thumbnail/1520x684)

**目次**

- [Omron FINSとは](https://www.emqx.com/en/blog/omron-fins-protocol#what-is-omron-fins)
- [FINSのIOメモリ領域の読み書き](https://www.emqx.com/en/blog/omron-fins-protocol#fins-read-write-io-memory-area)
- [FINSコマンドリスト](https://www.emqx.com/en/blog/omron-fins-protocol#fins-command-list)
- [なぜFINSをMQTTにブリッジングするのか](https://www.emqx.com/en/blog/omron-fins-protocol#why-bridge-fins-to-mqtt)
- [まとめ](https://www.emqx.com/en/blog/omron-fins-protocol#summary)

## Omron FINSとは

Omron FINS（Factory Interface Network Service）は、産業オートメーション制御用にオムロンが開発したネットワーク通信プロトコルです。イーサネット、制御ネットワークController Link、およびRS232C/485シリアル通信間でFINSコマンドを通じてシームレスな通信を実現します。FINSプロトコルはTCP/IPモデルのアプリケーション層で動作し、その拡張性、実用性、リアルタイム性を保証し、クライアントアプリケーション（HMI、SCADA、Historian、MES、ERPなど）をOmron FINSイーサネットドライバーを通じてコントローラーと接続します。

FINSプロトコルには2つのバリアントがあります。FINS/UDPプロトコルは通信にUDPパケットを使用し、FINS/TCPプロトコルはTCP接続を使用します。

### FINSセッションプロセス

FINSセッションプロセスはTCP/IPプロトコルに基づいています。以下の図は、FINSセッションの開始時にいくつかのデータフレームの役割を説明しています。FINSプロトコルのセッションにはリクエストフレームがあり、リクエストフレームには開始者のノードパラメータが添付されます。サーバー側（例：PLC）は確認してリクエスターにそのノードパラメータを返します。FINS over TCPのみがセッションプロセスを必要とします。

![FINS Session Process](https://assets.emqx.com/images/0d8af5289a27e88ab5a6f415cb8c3b34.png?imageMogr2/thumbnail/1520x)

### FINSフレーム構造

FINSフレーム構造は、FINSヘッダー、FINSコマンドコード、FINSコマンドデータの3つの部分から構成されます。

![FINS Frame Structure](https://assets.emqx.com/images/c7c31b73393dedb48c4cc1be9e0e1464.png?imageMogr2/thumbnail/1520x)

コマンドフレームとレスポンスフレームは、転送制御情報を格納するFINSヘッダー、コマンドを格納するFINSコマンドフィールド、コマンドパラメーターと送信/応答データを格納するFINSパラメーター/データフィールドで構成されます。

![FINS header](https://assets.emqx.com/images/58272c4a564c4b6a36879a61c1270837.png?imageMogr2/thumbnail/1520x)

コマンドに対する応答コード（MRESとSRESそれぞれにつき1バイト）は、応答フレームのFINSパラメーター/データフィールドの最初に追加されます。

![FINS Response Frame Config](https://assets.emqx.com/images/4ad7fb747e362f0bc2cebf6fcdda12e2.png?imageMogr2/thumbnail/1520x)

FINS応答フレーム設定

FINS over UDPは、FINSコマンドコードとFINSコマンドデータの2部分で構成されます。

## FINSのIOメモリ領域の読み書き

以下の表は、PCデータの読み取りまたは書き込み時に使用するアドレスを示しています。

- データエリアアドレス列は、PCプログラムで通常使用されるアドレスを示します。

- 通信で使用されるアドレス列は、CVモードコマンドおよびレスポンスで使用されるアドレスです（CVモードコマンドはFINSコマンドの別名）。これらのアドレスはメモリエリアコードと組み合わせてPCのメモリ位置を指定します。これらはデータの実際のメモリアドレスとは異なります。 

- バイト数列は、そのエリアのデータを読み書きするためのバイト数を指定します。同じエリアでもメモリエリアコードによってバイト数は異なります。

異なるPLC CPUモデルには異なるメモリ領域があります。例としてCV500やCVM1-CPU01-Eを挙げます。

![FINSのIOメモリ領域の読み書き](https://assets.emqx.com/images/fb21a9091c3f037fb1b3d5d18e65c80e.png?imageMogr2/thumbnail/1520x)

## FINSコマンドリスト

以下の表に示されるコマンドコードフィールドの各セルは1バイト（16進数2桁）を表します。次の表は、CVシリーズPCがサポートするFINSコマンドと、それらが有効になるPCの動作モードをリストアップしています。

![FINSコマンドリスト](https://assets.emqx.com/images/28160d8d452c41d9c73bc7b1a4c411de.png?imageMogr2/thumbnail/1520x)

> **注記**: PCがRUNモードにある場合、プログラム領域からファイルへのデータ転送は不可能ですが、ファイルからプログラム領域への転送は可能です。

## なぜFINSをMQTTにブリッジングするのか

産業4.0の波が到来し、産業分野ではデータインテリジェンス、相互接続、およびクラウド-エッジの協力に対する需要が高まっています。この背景の中で、FINSプロトコルはいくつかの問題に直面する可能性があります。

まず、FINSはイントラネットアプリケーションプロトコルとして設計されており、セキュリティは考慮されていません。その通信方法は単純で、ハッカー攻撃やデータの改ざんによって生産環境に脅威を与える可能性があります。

また、FINSは複雑なアプリケーションアーキテクチャで1対1の通信しか行うことができず、分散型およびクラウドネイティブアプリケーションの開発を効果的にサポートすることができません。

FINSと比較して、[MQTT](https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt)には大きな利点があります。MQTTは、IoTアプリケーションでのリモート監視および通信によく使用される軽量のパブリッシュ/サブスクライブメッセージトランスポートプロトコルです。MQTTは、デバイス間でメッセージを簡単かつ柔軟に転送し、多数の同時接続を効果的に処理する方法を提供します。現在、IoT、モバイルインターネット、スマートハードウェア、コネクテッドカー、スマートシティ、リモート医療、電力、石油、エネルギーなどのさまざまな分野で使用されています。

IoT分野において、MQTTは明らかに分散システムでのメッセージ伝送により適しています。したがって、FINSをMQTTにブリッジングして相互補完することができます。

## まとめ

この記事では、FINSプロトコルについての基本知識を提供しています。FINSデータをMQTTにブリッジングすることで、産業シナリオにさらなるメリットをもたらし、効率を向上させることができます。両者をブリッジングする方法についての詳細なガイドは[こちら](https://www.emqx.com/en/blog/bridging-fins-data-to-mqtt)で学ぶことができます。