HOME > ソフテックだより > 第161号(2012年5月9日発行) 技術レポート「PLCでのCAN通信 〜ラダープログラム実装編〜」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより(技術分野別)のページへ
ソフテックだより(シーン別)のページへ


ソフテックだより 第161号(2012年5月9日発行)

技術レポート

「PLCでのCAN通信 〜ラダープログラム実装編〜」

1. はじめに

以前のソフテックだより第131号『CAN通信モジュール紹介』で、弊社で開発を行いましたCAN通信モジュール(SZ20)についてご紹介しました。
今回はその続編として、実際にPLC(※1)でCAN通信モジュールを使用してどのようにラダープログラムを実装するのか?をご紹介したいと思います。

また、以降はCAN通信モジュールを『SZ20』の呼称で使用いたします。

2. CAN通信モジュール『SZ20』とは?

SZ20は、横河電機株式会社殿のPLCのFA-M3Rに対応するモジュールです。
FA-M3Rユニットと外部機器との間のCAN(※2)通信を実現する機能を持っています。

CAN通信では、同一バス上に複数のCAN通信機器が接続可能で、それぞれの機器はアドレスのようなものは持たず、メッセージに個別のIDを付けて送信し、各々の機器がそのIDで必要なメッセージを区別し受信処理する、という方式になっています。

以下でSZ20の具体的な使用方法について、説明いたします。

まず、SZ20では内部に15個の制御バッファを持っています。
この15個の制御バッファはユーザーにて送信/受信のどちらで使用するか?を自由に設定することができ、ラダープログラムにてそのバッファを制御することでCAN通信による送受信を行うことが可能となります。

また、上記の制御バッファ以外に接続機器(通信相手)から受け取った受信データを格納するバッファがあります。
受信データ格納用バッファは、8個×40ブロック(8個で1ブロックとなります)が用意されていて、1つのバッファで1つのCAN IDのデータを受信できるので、最大320種類のCAN IDの受信データを受信することができます。

2-1. 送信制御

PLCから通信相手にデータの送信を行うには、制御バッファを送信で使用する設定にします。
ラダープログラムでは、そのバッファに対して『送信先の設定(CAN ID設定)』『送信データの設定』、『送信指示』を行うことで、SZ20から送信が行われます。

送信制御
図1.送信制御

2-2. 受信制御

通信相手からの受信データをPLCにて受け取るには、制御バッファを受信で使用する設定にします。
ただし、実際に通信相手から受信したデータは、制御バッファに受信されるわけではなく、8個×40ブロック 用意されている受信データ格納用バッファに展開されます。
各受信データ格納バッファは、そのバッファで受信したいCAN IDを設定することでSZ20によって自動的に受信が行われます。
また、受信データは制御バッファに一度受信され、その後に格納用バッファへデータがコピーされます。そのため、通信相手から受信するCAN IDが多い場合には、複数の制御バッファを受信用として使用することで受信処理速度が速くなります。

ラダープログラムでは、この受信バッファに受信データがあるかチェックを行い、受信データがあればPLC内部へ読出しを行います。この処理を使用する受信バッファの数(受信するCAN IDの数)だけ行います。

受信制御
図2. 受信制御

3. SZ20使用時の注意点

ここまでに紹介してきた内容の処理を実装すれば、CAN通信を実現することができます。
ただし、単純に通信を行うだけであれば難しくはありませんが、処理を実装するうえで注意が必要な点もあります。

実際の処理実装時に注意が必要となった点についてご紹介したいと思います。

PLCの内部では、登録したプログラムが常に繰り返し動きます。このプログラムが1回実行されるのにかかる時間がスキャンタイムと呼ばれています。
SZ20へのアクセスにはREAD/WRITE命令を使用しますが、READ/WRITE命令は処理に時間がかかる命令で、1スキャンにSZ20 1台で受信できる最大のID数(320 ID)全ての受信が行われた場合には、そのスキャンだけ極端にスキャンタイムが長くなってしまいます。

スキャンタイムが長くなってしまうと、以下のようなことが起きる可能性があります。

3-1. 他処理に影響を与えてしまう

以前に担当した案件ではCAN通信で受信データをモニタリングする機能以外に、PLCへ取り込んだアナログ入力データを100[ms]周期で収集してSDカードへファイル保存するという時間の制約がある機能がありました。

データの収集は100[ms]経過した次のスキャンで行われるので、カウントアップしたタイミングのスキャンが極端に長くなってしまうと、データの収集も本来のタイミングから大きく遅れてしまうことになります。そのため、時間の精度が求められる場合には問題となってしまいます。

他処理への影響
図3. 他処理への影響

3-2. 受信データの読出しが間に合わない

SZ20ではCAN ID毎に受信バッファを割り振って受信を行います。
そのため、同じCAN IDのデータは同じバッファに受信されるため、ラダープログラムでは通信相手から次のデータが送信される前に受信バッファからデータの読出しを終える必要があります。
つまり、スキャンタイムが通信相手からの送信周期より長くなってしまった場合には、受信データの取りこぼしが起きてしまいます。

これを回避するためには、上記と同様にプログラム全体のスキャンタイムを短くすることが必要となります。
ただし、プログラム全体の処理量や、受信するCAN IDの数によっては、どうしても時間がかかってしまう場合もあるかと思います。そういった場合には、通信相手側で送信周期を少しずらすなど、システム全体として調整するというのも1つの手段となります。

3-3. 送信周期が乱れる

ある案件では、一定の周期で通信相手にデータを送信する必要がありました。
SZ20の定周期送信機能は、同じデータを送信する場合であれば有効ですが、PLCから通信相手に送るデータの内容は毎回変える必要があり、ラダープログラムから送信データの書き換え中に送信が行われてしまうことを防ぐため、送信はOne Shot送信機能にて行いました。

One Shot送信機能で送信を行う周期はラダープログラムで管理する必要があり、もし送信タイミングの直前でスキャンタイムが長くなった場合、送信するタイミングが遅れてしまいます。
また、単純にタイマで時間をカウントしていた場合、一度送信が遅れると次の送信周期のカウント開始が遅れます。そのため、それ以降の送信もそのとき遅れた分だけ遅れてしまいます。

これを回避するため、送信周期のタイマカウントはCPUの割り込み処理を使用しました。割り込み処理であれば、一定の周期で処理が実行されるため、正確に送信周期を検出することができます。割り込みによる送信周期の検出を行うことで、もしスキャンタイムが長くなり一度送信が遅れても、次の周期では遅れることなく送信が可能となりました。

ただし、送信処理を通常スキャンで行っている場合、送信周期(送信タイミング)を割り込み処理によって検出しても、割り込みのタイミングによっては、実際の送信処理が次のスキャンとなります。そのため、スキャンタイムが長い場合にはやはり送信が遅れてしまう可能性があります。

送信周期
図4. 送信周期

4. エラー処理について

通信を行う際には、送受信動作だけでなくエラー処理についても考える必要があります。
SZ20では、以下のエラー検出が行われます。

  • バスオフエラー
  • CRCエラー
  • ビット0エラー
  • ビット1エラー
  • ACKエラー
  • フォームエラー
  • スタッフエラー

この中で、『バスオフエラー』はCANバスから切り離された状態なのでエラーリセット処理が必要となります。
このとき注意が必要なのが『バスオフエラー』以外のエラーは、送受信を行った際に発生するもので、原因(ノイズや断線など)が取り除かれれば以降は正常に通信ができるという点です。
つまり、これらのエラーは自動復帰が可能となります。

ただし、自動復帰はしてもエラー状態のときには正常に送受信ができるわけではないので、通信の内容によって(受信データを使って別の制御を行っている場合など)は一度でもエラーが発生したら通信を止めた方がよい場合もあります。
また、ケーブル断線などの場合はエラー状態が続いてしまいますので、一定回数や一定時間で通信を止めた方がよいと思います。
そのため、システム全体を考慮したうえで、エラー発生時の処理決定が必要となります。

5. おわりに

今回は、SZ20を使用した処理の実装についてご紹介しました。
正常時の通信処理の実装自体は難しいことはありませんが、注意点でご紹介したようにSZ20の送受信処理能力は十分でも、PLC側の処理が間に合わなくなる場合もあります。
また、接続機器がMAX構成時を想定した設計/動作検証、実際の使用環境下でたまにしか発生しない通信異常の想定と対策/動作検証など、対象の制御システムで必要とされることをきちんと考慮する必要があります。
そのため、弊社ではFA-M3Rの特徴を十分に把握したうえで、対象の制御機器の動作をシミュレーションする機器なども駆使してシステムの開発を行っております。

(Y.R.)

[注釈]
※1
PLC(Programmable Logic Controller)
※2
CAN(Controller Area Network)

関連ページへのリンク

関連するソフテックだより

ページTOPへ