JTEKT#Toyopuc Nano 10GXでPINGコマンドを発行しよう

今回の記事ではTOYOPUC-Nano 10GXを使用していて、PLC自身からPINGを実行するプログラムを説明します。実際に Nano 10GXから 192.168.250.199 へPINGを送信し、成功したらM10をONするところまで試してみました。

さ、FAを楽しもう。

Point1:Nano 10GXのL1/L2とLink No.は違う

最初に少し分かりにくかったのがここです。Nano 10GXには物理的な通信ポートとしてL1、L2などがありますが、PCwin2ではそれとは別にLink No.1~8を設定します。

Nano 10GXモードでは、プログラムごとにLink No.1~8を持つ仕様になっています。またPCwin2では、ポートL1/L2がそれぞれ実機のL1/L2ポートに対応します。

つまり、Link No.1 = 物理L1とは限りません。

たとえば今回の構成では、

Link No.1 → Built-in L1 → EtherNet/IP

Link No.2 → Built-in L2 → Ethernet

としました。

PCwin2の取説でも、内蔵L1および内蔵L2にはEthernetを設定でき、リンクモジュールとして「イーサネット(32ポート)」を選択できます。今回はL1をすでにEtherNet/IPで使用していたため、PING用としてL2をEthernetに割り付けました。

Point2:PINGの宛先は特殊レジスタへ書き込む

TOYOPUCのEthernet PINGでは、一般的なPLC命令のように”PING 192.168.251.199”という命令を書くわけではありません。PINGしたいIPアドレスを、Link No.に対応した特殊レジスタへ書き込みます。PING先IPを書き込むアドレスは次のようになっています。

1 S31C~S31D

2 S33C~S33D

3 S35C~S35D

4 S37C~S37D

5 S39C~S39D

6 S3BC~S3BD

7 S3DC~S3DD

8 S3FC~S3FD

今回はLink No.2なので、S33CとS33Dを使用します。

Point3:IPアドレスを16進数へ変換する

今回PINGしたいIPは、192.168.251.199です。

各オクテットを16進数に変換します。

192 = C0h

168 = A8h

251 = FBh

199 = C7h

したがって、

192.168.251.199

C0 A8 FB C7

となります。

TOYOPUCではこれを16bitずつ逆側から格納します。

S33C = FBC7h

S33D = C0A8h

マニュアルにも、例として

172.16.93.133

= AC 10 5D 85

S31C = 5D85h

S31D = AC10h

という格納方法が示されています。

この規則をそのまま今回のIPへ当てはめています。

Point4:PINGは2秒ごとに繰り返される

PING先IPを特殊レジスタへ設定すると、PINGテストは2秒ごとに繰り返し実行されます。PINGを終了したい場合は、PING先を書き込んだ特殊なレジスタを0000hへ戻します。

つまり、一度、

S33C = FBC7h

S33D = C0A8h

を設定すれば、毎スキャンWMOVする必要はありません。

例えば初回スキャンだけ実行するようにしておくと分かりやすいです。

Point5:300番台の状態モニタを使う

PING結果は、CPUのS300番台の状態モニタ領域にも反映されます。マニュアルではLink No.ごとの状態モニタ範囲が次のように定義されています。

1 S300~S30F

2 S320~S32F

3 S340~S34F

4 S360~S36F

5 S380~S38F

6 S3A0~S3AF

7 S3C0~S3CF

8 S3E0~S3EF

今回はLink No.2なので、S320~S32Fを使用します。マニュアル上では、

*8 = PING正常

*9 = PING異常

と定義されています。

Link No.2の場合、S325-A = PING正常、S325-B = PING異常となります。

Implementation

ここからプロジェクトを構築します。

Link設定

最初にTOYOPUC-Nano 10GXのLinkパラメータをセットアップします。Parameter→Link Parametersをクリックします。

P1-2を選び→Link Setupします。

下図のように、

  • Rack No:Build-in
  • Slot.no:L2
  • Link module name:Ethernet(32Port)

設定します。

IP設定

先程設定したLinkを選び→Detailをクリックします。

Own Node IP AddressでL2のIPアドレスを設定します。

下図のようにLink1=Ethernet/IP、Link2=Ethernet(32Port)になります。

プログラム

次はPINGコマンドを発行するプログラムを作成します。今回はPorgram1を使用します。

こちらはプログラムの全体です。

Line003-Line004

M4をONするとS033CとS033DをWMOVに使用しデータ転送します。

  • W033C=FAC7h=250.199
  • W033D=C0A8h=192.168

W033CとW033Dが0以外の値を書き込むとPLCが自動的にPINGコマンドを発行します。

M4をOFFすると0をS033CとS033DをWMOVに使用しデータ転送し、PINGコマンドを停止します。

最後はPING正常とエラーの状態を判断し、M10とM11をONにします。

結果

下図のようにM4がONし、192.168.250.199とPINGコマンドが通過できればM10がONになります。

また192.168.250.199とPINGコマンドが通過できればM11がONになります。

ハマったところ-PINGコマンド発行しない

自分のプロジェクトではもともと:

  • Link No.1
  • Built-in L1
  • EtherNet/IP

としてL1を使用していました。そしてそこで最初は、

  • S31C
  • S31D

PING先を書き込んでいました。

しかしPING機能はEthernetとして設定したLinkに対して使用する機能です。そこで、

  • Link No.1 → Built-in L1 → EtherNet/IP
  • Link No.2 → Built-in L2 → Ethernet

と役割を分離しました。

結果として、

  • L1:EtherNet/IP
  • L2:PING用Ethernet

という構成にすることで、既存のEtherNet/IP通信を残したままPING監視を追加できました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする