HOME会社概況業務内容開発分野開発事例CANモジュールソフテックだよりお問い合わせ
HOME > ソフテックだより > 第65号(2008年5月7日発行) 技術レポート「CANのWindowsソフトウェアへの導入」

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

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


ソフテックだより 第65号(2008年5月7日発行)

技術レポート

「CANのWindowsソフトウェアへの導入」

1. はじめに

今までのWindowsアプリ開発の中で、お客様の要望によりCAN通信機能を具備することになった案件がありました。開発期間は2006年2月〜2006年8月で、ある状態監視装置へ設定データを作成しダウンロードするWindowsアプリケーションの案件でした。自分はその時にCANを全く知らなかった為に、「CANとは何?」から勉強することになりました。 CANとはとてもユニークな調停という仕掛けを持っているプロトコルです。 簡単ではありますが、CANについて概要を御紹介させて頂きたいと思います。

2. CANの概要

CAN(キャン) というのは「Controller Area Network」の略です。車載ネットワークを構築する目的に開発されたシリアル通信プロトコルで、ドイツのBOSCH(ボッシュ)という会社で開発されました。 現在では車の制御だけではなく、船舶、鉄道車両、工場、工作機械、医療器械、エレベータの制御にも使用されています。また、FAでよく使用されている「DeviceNet」もCANから発展したものです。

3. CANの特徴

CANはバス接続であり、1つのバス上に複数の端末が接続します。バス接続である為、どれか1つの端末が送信を行うと全部の端末が受信を行いますが、自身に関係のないメッセージは無視します。CANには次のような優れた特徴があります。

(1). 配線が簡単であり、低コストで済む。

もともとが車載用であった為であると思いますが、シリアルバス上に端末をつけていくシンプルな配線になっています。
またコスト的には次の点が有利です。

  • 1つの端末をバス上で繋がっている複数の端末から共有することができ、システムを構築する際に端末数を少なくすることができる。
  • CAN 対応ICはいろいろなメーカから販売されていて、容易に安く手に入る。
(2). 伝送の信頼性が高い。

伝送フレームにCRCがあり、誤りの検出が確実にできるよう配慮されています。
信号線は差動信号で伝送するので、ノイズの影響が出にくいようになっています。

(3). 端末の追加・削除が容易である。

他の通信と違って、バス上の端末にアドレス番号とかノード番号といったものをつける必要がありません。 各端末は送信フレーム中に付加されている固有のIDにより、内容を判別して処理を行います。

(4). 送信の衝突検出機能がある。(調停)

バス上の端末は、バスが空いていれば送信を行うことができます。 この時に複数の端末が同時に送信しバス上で信号の衝突が起きた場合、優先度によって送信してもよい端末と待ち合わせする端末が決まります。 これを調停といっています。 調停については、ユニークな仕掛けだと思うので後で詳しく説明します。

4. ユニークな調停の仕組み

CANのデータ伝送フレームの中には、Arbitration field(アービトレーションフィールド)と呼ばれる調停の際の判定に用いられる部分があります。(12ビットまたは32ビットで構成されます)このアービトレーションフィールドの送信の時に、送信したデータがバス上にきちんと出ているかを1ビットずつ端末が自ら監視しながら、送信の可不可を判定します。

アービトレーション
フィールドビット
1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 Bit 9 Bit 10 Bit 11 Bit 12 Bit
バス上の信号 1 1 0 1 0 1 1 0 1 1 1 0
端末A 1 1 0 1 0 1 1 0 1 1 1 0
端末B 1 1 0 1 1 1 1 1 1 1 1 1

表1. 衝突時の調停

表中の「1」はrecessive(レセシブ)状態を示します。バス上で信号線に電位差がない状態です。
表中の「0」はdominant(ドミナント)状態を示します。バス上で信号線に電位差が生じている状態です。

上記の表は端末Aと端末Bが同時に送信を開始して、アービトレーションフィールドをバス上に送信した場合の動きを示しています。
ちなみに、バス上で信号線の電位差がない場合の状態レセシブといい論理上(1)を表し、バス上で信号線の電位差がある場合の状態をドミナントといい論理上(0)を表します。どちらの端末も1ビット送信する度にバス上に自分が送信したデータが出ているか再確認しながら、送信を続けます。

上記では4ビット目までは、どちらも異常を検知することなく送信を続けています。
5ビット目になると端末Aはドミナント出力を行い、端末Bはレセシブ出力を行いますが、ここでどちらが出力を続けるか優先が決まります。
ドミナント出力とレセシブ出力では、ドミナント出力の方がバス上に出力されます。
端末Bは自分がレセシブ出力を行ったにも関わらず、バス上にドミナント出力がされていることを知ると以降は常にレセシブ出力を行って、再送のタイミングを待つようになります。アービトレーションフィールド12ビットが0に近いものが、伝送上優先されます。

5. Windowsソフトウェアへの導入

CAN通信用のカードは各メーカよりいろいろな製品が発売されていますが、今回使用した製品はInterface(インターフェース)社のCSI-485220というPCカードです。
開発したソフトウェアの概要は「ターゲットの状態監視装置とCAN通信を行って設定内容をアップロードしたりダウンロードしたり、編集などを行うシステム」です。
ノートパソコンでの運用を前提としているので、PCカードで通信します。

ドライバは製品付属のものを使用しましたので、CAN通信自体の導入はさほど困難ではありませんが、通信時間の短縮には工夫が必要でした。
設定データは2メガバイト以上の容量があり、ダウンロード・アップロードの時間を短縮する為に、データ圧縮を行って通信量を減らしています。データ圧縮はデータの初期化コード(0xff)が連続している場合に、送信側はその連続バイト数を送信し、受信側はその値から実データを復元する方法で行っています。

システム構成
図1. システム構成

6. おわりに

CAN通信のWindowsアプリへの導入は初めてでしたが、次のようなことを学ぶことができました。

(1)
各メーカより豊富に通信カードが出回っており、それらの使用で簡単に通信機能を実装できる。
(2)
CAN仕様自体が大変に信頼性が高く、制御システムのネットワークの構築に向いていて、各分野で使用広がっていること。
(3)
1つのデータ送信フレームで8バイトしかデータが送信できない為、大量データのやりとりを行うのにはあまり向いておらず、データの圧縮などの工夫が必要。

(T.S.)

[参考文献]
「CANチュートリアル」 Interface社ホームページより

関連ページへのリンク

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