FL-net(OPCN-2)について調べてみた。

# 要点

+ 日本発のオープンプロトコルの産業用ネットワーク
+ FL-netは通産省の外郭団体である(財)製造科学技術センターにおいて、FAオープン推進協議会が標準化を行ったオープンFAネットワークである。JEMA 一般社団法人 日本電機工業会 HPで仕様書のダウンロード可能
+ FL-net(OPCN-2)はFA Link network(Open Programmable Controller Network - level2)の略である
+ TCP/IPのUDPベースでFL-net専用の[FAリンクプロトコル]を使用
+ IPアドレス 標準 192.168.250.xxx で xxxがノード(局番)に相当する。 
  1～254が使用可能なのであるが、250～254はFL-netのメンテナンス用のため制御として利用できるのは1～249の249台です。
  192.168.250は変更可能であるが、サブネットマスクは255.255.255.0固定である。
+ 各機器が対等なマスターレス方式によるコントローラ間ネットワークで管理局がない(MELSECNET,CC-Link等とは違う)
+ コモンメモリと呼ばれるメモリエリアを共有して、ユーザーは通信を意識することなく、すべての機器で同じデータイメージを持てる
+ コモンメモリは領域1,領域2があり、一般的には領域1はビットデバイス用(512Word)、領域2はワードデバイス用(8192Word)
+ 送信権(トークン)を受け取った機器はブロードキャストアドレス(192.168.250.255)を使いデータを各機器に一斉送信して、そのうち受信側は必要なデータだけ受け取る。トークンを接続してる機器でぐるぐる回して通信を行う。

# 解説サイト
+ 計装豆知識

https://www.m-system.co.jp/mstoday/plan/mame/b_network/0508/index.html

+ 接続.com

https://www.keyence.co.jp/ss/products/controls/network/fieldnetwork/fl_net.jsp

+ JEMA FL-net のご案内

https://www.jema-net.or.jp/Japanese/standard/opcn/

+ JEMA FL-net に関するＱ&Ａ

https://www.jema-net.or.jp/Japanese/standard/opcn/opcn102.html

+ このFA Link プロトコル入門 第１版がポイントをおさえてあって理解しやすいです

http://taiga-dev.com/developer/fldocv1/index.html

技術レポート「FL-netについて」

https://www.softech.co.jp/mm_190403_tr.htm

# 使われている業界

FL-netは国産なのに使った事が無い人が多いと思います。
ではどこで使われるのかというと自動車関連で使われています。
オープンネットワークなので異なるメーカーのPLCが混在する環境でのネットワーク構築に便利です。
しかし自動車関連以外では使用されるケースがあまりないのでシェアは低いです。
オープンネットワークといえばEtherNet/IPが世界標準になっています。
いずれは置き換わるの運命かもしれません。

産業用ネットワーク市場シェア動向 2023

https://www.hms-networks.com/ja/news-and-insights/2023/05/05/industrial-network-market-shares-2023

公共インフラシステムではFL-netを標準採用とし…という記述があるので使われてるようだ

https://www.city.yokohama.lg.jp/city-info/zaisei/kokyo/sekkei-sekoh/20201215104719626.html

ダム管理用制御処理設備 標準設計仕様書・同解説

https://www.mlit.go.jp/river/shishin_guideline/dam/10.pdf

# 各PLCメーカーのユニット

## 三菱電機

### MELSEC-Qシリーズ QJ71FL71-T-F01

https://www.mitsubishielectric.co.jp/fa/products/faspec/point.do?kisyu=/plcnet&formNm=700005528

### MELSEC iQ-Rシリーズ ER-1FL2-T

https://www.mee.co.jp/sales/fa/meefan/product_information/products/er-1fl2-t.html

## キーエンス

### KV-5000 内蔵Ethernetポート (KV-5500は非対応)

https://www.keyence.co.jp/products/controls/plc-building/kv-5000_3000/models/kv-5000/

### KV-FL20V

https://www.keyence.co.jp/products/controls/plc-building/kv-8000/models/kv-fl20v/

## オムロン

### CJ1W-FLN22

https://www.fa.omron.co.jp/products/family/1549/

## JTEKT
トヨタグループの会社なのでどのメーカよりもFL-net対応機器が豊富です。
FL-netが2ポート標準装備のPLCやユニットも多いです。
なおこのTOYOPUCというPLCも自動車関連以外で見ることはほとんどないです。

https://www.jtekt.co.jp/products/plc/plc/plc13.html

https://www.jtekt.co.jp/products/plc/plc/plc02.html

https://www.jtekt.co.jp/products/plc/plc/plc01.html

# 設定例

領域1(ビット)を次のように送信範囲を決めます。 
| 領域1   | 先頭アドレス | 最終アドレス | サイズ     | 
| ------- | ------------ | ------------ | ---------- | 
| ノード1 | 0x0000       | 0x003F       | 0x040=64W  | 
| ノード2 | 0x0040       | 0x00BF       | 0x080=128W | 
| ノード3 | 0x00C0       | 0x01BF       | 0x100=256W | 
| 未使用  | 0x01C0       | 0x01FF       | 0x040=64W  | 

領域2(ワード)を次のように送信範囲を決めます。 
| 領域2   | 先頭アドレス | 最終アドレス | サイズ       | 
| ------- | ------------ | ------------ | ------------ | 
| ノード2 | 0x0000       | 0x003FF      | 0x0400=1024W | 
| ノード3 | 0x0400       | 0x00BFF      | 0x0800=2048W | 
| ノード1 | 0x0C00       | 0x01BFF      | 0x1000=4096W | 
| 未使用  | 0x01C00      | 0x01FFF      | 0x0400=1024W | 

説明用にわざと領域1,2で順番を入れ替えてます
PLC側のデバイスはB,Wを使います。
このデバイスはMELSEC,KEYENCEどちらにも同じ名称で16進デバイスとして存在するので。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/ec93e045-5be7-ac21-fc0f-39a32cf1f4b8.png)






## ノード1 MELSEC-Qシリーズ QJ71FL71-T-F01

ノード1なのでIPの最後を1にします。
オンライン(オートネゴシエーション) を選ばないと100Mbpsになりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/376d280b-745b-a6dc-900b-b7a317e7c26b.png)


領域1 先頭はアドレスは0,サイズは64WordなのでBitに換算すると1024bitにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/67a8cd83-1246-9f57-e0aa-6f3ad5871baa.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/0a8e6bdb-525e-0af0-6a2f-7f60d4b2d19d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/5cb8c935-fdc8-7aad-52ee-5924bbe0d366.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/456f51c8-2b79-8fa6-2d6e-cb347af3f7cb.png)

## ノード2 キーエンス KV-5000 内蔵Ethernet
FL-net設定 <設定>を押すとKV-FL設定ウイザードが出ますがそれは使ってないです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/f6d87e16-c71e-9e88-445c-03add2ee7fcc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e185a05d-4019-5a88-04c0-e90a760a3bff.png)

## ノード3 キーエンス KV-FL20V
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/459a9ba7-2852-f1bf-879e-55b66fde3e69.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/cf77f636-f606-9a3a-2f08-1e0698c47558.png)

機種によって設定する値の単位がBitであったりWordであったり10進であったり16進であったりと難しいので表に書き出して整理することが大切です。

## 通信してみた
この絵ではわからないけど成功しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/ed56dc76-f091-91a3-c521-3f86a7478993.png)

KV STUDIOのユニットモニタ上で通信ステータスは確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/cd1ca093-3384-0805-eb42-4c57076b1223.png)

## エラー処理

FL-netには管理局がなく各ノードの自局送信範囲は各ノードで設定します。
FL-netのノードはネットワークに加入するタイミングで既に通信中のノードと送信範囲が重複していないか自動でチェックを行い重複の場合はエラーでネットワークに加入させない仕組みとなっています。
では試してみましょう。

ノード2の設定はそのままでノード1の領域を少しだけ伸ばした設定にして意図的にコモンメモリを重複にしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/8415f250-72ae-73e9-4e06-665ddcece95c.png)

設定が正常なノード2,3に設定ミスのノード1を加入してみましょう
PER パラメーターエラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/95ee8622-276f-4fc7-c930-ebd0407780e9.png)

エラーコード C02C : コモンメモリ領域の設定が他ノードの設定範囲と重複している。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/226b63de-3e07-f412-57ae-5da3dcf23f49.png)

他局からステータスを確認すると重複ありのノードと認識されサイクリック通信はされてません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/972cfa11-d8bc-0eed-5952-f8419a8e60ee.png)

# 小ネタ

トークン監視タイムアウト時間の計算方法

https://www.keyence.co.jp/support/user/controls/faq/answer.jsp?faq_id=67310