Rockwell EtherNet/IP
EtherNet/IP(CIP)で Allen-Bradley の Logix コントローラーにつなぎます。コントローラータグの名前、バイトのオフセット、CIP の基本型、そしてネットワークの機器検出。
Rockwell EtherNet/IP のドライバーは、CIP のタグでアドレスを取る EtherNet/IP で、Allen-Bradley / Rockwell の Logix のコントローラー(ControlLogix、CompactLogix)と話します。値は、Logix のプロジェクトで宣言されたコントローラータグの名前で指します。レジスターの割り付けは関係ありません。Connector の Rockwell EtherNet/IP のドライバーの下に機器を追加してください。パネルは、このプロトコルが使う項目だけを見せます。
接続
| 項目 | 意味 | 既定 |
|---|---|---|
| ホスト | コントローラーのイーサネットのポートの IP アドレスかホスト名。 | 空 |
| スロット | コントローラーが挿さっているシャーシの位置で、0 から数えます。 | 0 |
| 読み出し周期(ms) | 上書きしないタグに対する、機器全体の読み取りの周期。 | 1,000 |
ポートの項目はありません。EtherNet/IP は標準の TCP ポート 44818 を使います。CIP の経路はバックプレーンとスロットなので、シャーシのどこに挿さっているコントローラーにも届きます。検出されたコントローラーはスロット 0 から始まるので、この項目で直します。ラックの項目はありません。CIP の経路はラック番号を運ばないからです。要求は 10 秒でタイムアウトします。機器の見出しは、組み立てられた接続先を見せます。たとえば eip://192.168.0.10:0 で、アドレスのあとの数字がスロットです。
各タグは自分の読み出し周期(ms)を持てます。タグの値が 0 のときは、機器の周期に戻ります。
アドレス指定
Rockwell のタグは、タグの「取得元」のカードの 2 つの項目でアドレスを取ります。
| 項目 | 意味 | 受け付ける値 | 既定 |
|---|---|---|---|
| コントローラータグ | コントローラーで宣言されているとおりのタグの名前。必須です。 | 自由記述 | 空 |
| タグ内のオフセット(バイト、BOOL ではビット) | そのタグのデータの中で値がある位置です。バイトの位置、ブール値のタグではビットの位置になります。 | 0~255 | 0 |
このドライバーは、名指しされたコントローラータグを開き、そのデータの中の指定した位置から値を取り出します。単純な基本型のタグでは、オフセットは 0 のままです。オフセットがあるから、1 つのコントローラータグが複数のチャネルを受け持てます。構造体の先頭の DINT はオフセット 0、その 4 バイト後の REAL はオフセット 4 で、ブール値のタグではオフセットがバイトではなくビットを数えます。
| 読みたいもの | コントローラータグ | オフセット | データ型 |
|---|---|---|---|
コントローラー範囲の DINT Counter |
Counter |
0 | Int32 |
Main の中のプログラム範囲の DINT |
Program:Main.Counter |
0 | Int32 |
REAL の配列の要素 Temps[2] |
Temps[2] |
0 | Float |
構造体 Recipe の中の 2 つ目の DINT |
Recipe |
4 | Int32 |
Flags のデータのビット 3 |
Flags |
3 | Boolean |
名前はピリオドも含めて丸ごとコントローラーに届き、同じタグの読み取りと書き込みは同じ場所に届きます。だから Program:Main.Counter のようなプログラム範囲の名前が働きます。ピリオドでつないだメンバーの経路(MyUdt.Member)は、コントローラーがそのメンバーを名前で公開している場合に、コントローラーが解決します。公開していない場合は、コントローラー範囲の元のタグを名指しして、バイトのオフセットでその中に届いてください。こちらは必ず働きます。「取得元」のカードの読み取り専用の取得元のアドレス(バス上)の行が、編集しているそばから組み立てられたアドレスを見せます。
データ型
CIP の基本型は、すべてタグのデータ型として使えます。
| データ型 | CIP の型 | 大きさ |
|---|---|---|
| Boolean | BOOL | ビットの位置での 1 ビット |
| SByte | SINT | 1 バイト |
| Byte | USINT | 1 バイト |
| Int16 | INT | 2 バイト |
| UInt16 | UINT | 2 バイト |
| Int32 | DINT | 4 バイト |
| UInt32 | UDINT | 4 バイト |
| Int64 | LINT | 8 バイト |
| UInt64 | ULINT | 8 バイト |
| Float | REAL | 4 バイト |
| Double | LREAL | 8 バイト |
構造体と UDT には対応しません。読み書きできるのは上の基本型だけで、その中のメンバーに届くためにバイトのオフセットがあります。文字列が選択肢にないのは意図したものです。Logix の STRING は基本型ではなく、長さと 82 バイトの配列でできた構造体であり、このドライバーは読むことも書くこともできません。バス上のバイト順は CIP 自身のリトルエンディアンで、自動的に扱われます。バイト順の選択肢はありません。
書き込み
アクセスが読み書きか書き込みのみのタグは書き込めます。書き込みは、コントローラータグを読み、指定した位置のバイト(ブール値では指定した位置のビット)を変え、書き戻します。新しいタグは読み取りのみから始まります。
機器検出
Connector の機器検出のボタンは、このコンピューターがつながっているすべてのネットワークに CIP の List Identity の要求を同報し、新しい答えのないまま 10 秒たつまで聞き続けます。動いているあいだ、スキャンはそのネットワークを名指しするので、結果が 0 でも、問いが実際にどこへ行ったのかが分かります。仮想機械、WSL、VPN の仮想アダプターを持つステーションは、操作する人が思っているよりネットワークが多いことがよくあり、候補がそのうちの 1 つから届くこともあります。
要求を運べないインターフェースは飛ばされます。上がっていないもの、ループバックとトンネルのアダプター、そして DHCP に誰も答えなかったためにインターフェースが自分で付けたアドレス(169.254.x.x)です。候補の機器になるのは、コントローラー自身の身元の答えである応答だけで、eip:// にそのアドレスをつないだ名前が付きます。EtherNet/IP のポートで答えるほかのものは無視され、そのことが診断ログに残ります。続けてスキャンは、候補ごとにコントローラー範囲のタグの一覧を読み、その基本型のタグを候補のチャネルとして、いずれもオフセット 0 で出します。
機器検出は、このドライバーが読み出せないものを捨てます。構造体と UDT のタグ(Logix の STRING を含みます)は落とされ、Program:、Task:、Map: の項目は飛ばされます。このコンピューターがつながっていないネットワーク上のコントローラーは、同報に答えません。手で追加してください。
知っておくとよいこと
- コントローラーへの要求はどれも 10 秒でタイムアウトし、機器検出の待ち受けは無音が 10 秒続くと閉じます。
- ドライバーはコントローラーのタグを一度だけ開き、機器がつながっているあいだは開いたままにします。ですから何十ものタグを持つコントローラーは、すでに開いてあるセッションの上で読まれ、読み取りのたびに開いては閉じることはありません。失敗した読み取りは自分のタグを手放し、次の読み取りが名前でもう一度開きます。
- Logix のプロジェクトでタグの名前を変えると、そのチャネルは黙って壊れます。そのタグは、設定した名前がふたたび一致するまで品質が悪いものとして読まれます。