DCC(Digital Command Control)について

( DCCシステム説明、および各規格の日本語訳です。)

DCCシステム説明

DCCの内容については経験のあるサイトが多くありますので、ここではシステム的な側面から説明をしていきます。
私自身の理解不足が多々あります。間違いがありましたら是非、ご指摘お願いします。

1.電力伝送と通信
2.DCCパルスついて
3.DCCパケットについて
4.DCCパケットフォーマット

1.電力伝送と通信
鉄道模型を走らせるためには、動力と制御するための通信が必要となります。DCCでは、動力用の電気エネルギー(電力)と通信を2本のレールを用いて、コマンドステーション(あるいはブースタ)から車両に伝達しています。また、通信では、現在は、コマンドステーション(あるいはブースタ)からデコーダへの通信が主です。

電力と通信を同一の線で伝達するシステムとしては、100VACの電力線に信号を乗せる電力線搬送通信があり、この高速版として高速電力線搬送通信があります。両者共に、電力線上に高周波の搬送波をのせた通信方式で、電話線上に搬送波をのせたADSL方式と同じ原理となっています。数百KHzから数十MHzの帯域を用いて通信を行っています。電力線は50-60Hzなので、フィルター等で電力は減衰させ、信号を伝達しています。また、電話線は、3KHz以下が通話に用いられるため、3KHz以上の帯域で通信を行っています。この原理は、DCCのTransponderでも使用されていると思います(?)。

DCCでは、交流で電力を車両に送っています。と共にこの交流に周波数変調を行って、通信の役割を果たしています。電力と通信伝達を同一周波数で行っています。

デジタル信号は基本的に ‘ 0 ‘ と ‘ 1 ‘ を伝達することにより、通信ができます。DCCでは、’ 0 ‘を伝達するときは長いパルス(桂庵では236us / 4.24KHz), ‘ 1 ‘を伝達するときには短いパルス(116us / 8.47KHz)を出力します。車両を動かすため常にこのパルスは出力されています。デコーダに伝える信号がない時は、’ 1 ‘ (116us / 8.47KHz)のパルスが連続してレールに流されています。パルスとは+、−の信号を一つづつ持った電気信号で、パルスが続くと交流となります。

2.DCCパルスについて
DCCパルスとは、1ビットのデータを送るための電気信号です。NMRA DCC規格 S 9.1 で詳しく記述されています。
概略をここで説明します。

‘ 1 ‘を出力する場合のレール上の電圧波形です。+−電圧波形期間は58us±3usと決められています。下の図では、−電圧 波形から信号が開始していますが、DCC規格上では規定はなく、+電圧波形から信号が開始しても構いません。+電圧波形と−電圧波形期間の差が3us以内であることが要求されています。出力電圧の最大値は22V、最小値は7Vです。桂庵の車載用デコーダは、半導体の耐圧の関係で最大20Vとしています(手抜きです)。

‘1’出力パルス波形

 


‘0’を出力する場合のレール上の電圧波形です。±の電圧波形の期間は95us - 9900usとなっています。‘0’信号は、+電圧波形と−電圧波形期間が同じ長さでなくても良いことになっていますが、トータルの長さは10000us以下と規定されています。これは、アナログ車両用と思われます。(調べたことがありません)‘0’信号出力時の+−電圧波形幅でアナログ車両のモータをある程度制御は可能と思います。桂庵のコマンドステーションでは対応をしておらず、‘0’信号出力時は、+−電圧波形共に116 us(計232us)としています。長いパルス幅を用いると、伝送時間が必要となり、実効伝送速度が落ちます。

‘0’出力パルス波形

 


3.DCC パケットについて
パケットとは、“送信先のアドレスなどの制御情報を付加されたデータの小さなまとまりのこと。”とIT用語辞典e-wordでは説明されています。DCCでは、デコーダを制御する時に必要なビット列をパケットとしています。逆にインターネットプロトコルでは、ある大きなデータを伝送しやすいように分割したデータをパケットとしています。携帯電話においては128バイトのデータを1パケットしています。以上のようにパケットの意味は使用される通信環境によって異なります。ここでは、パケットとは、送り先を含み意味のあるデータのかたまりと考えることにします。NMRA DCCパケットの規格は S-9.2 RP9.2.1に詳しく出ています。

DCCパケットはレール上で伝送されます。レール上にはたくさんのデコーダがつながっていて、これらのデコーダは常にレール上のDCCパケットを監視しています。もし、DCCパケットが自分宛のパケットであれば、このデコーダは、パケット内容を解析し、パケットに含まれる命令を実行します。例えば、速度を80(128 step時)にする命令であればこのデコーダはモータの速度を80に制御します。この意味で、DCCシステムはコマンドステーションを中心とした1対N型の通信システムと言えます。この通信方式は、携帯電話の呼び出しにも用いられます。携帯電話は、自分宛の通話あるいはメールをページング信号と言われるコントロール信号を常に受信し監視しています。もし、自分宛の通話であれば、ページング信号を解析し通話信号を送受信できるように動作します。


DCCパケットは、上述したように送り先を含んでいます。この送り先はデコーダのアドレスです。また、DCCパケットは8ビット(1バイト)のデータを単位として伝送しています。最小のDCCパケット例を以下に示します。

 第一バイト アドレス...1バイト 例 0011 0111 アドレス55(10進) 
 第二バイト 速度命令...1バイト 例 0111 0100 速度命令、前進、速度6 (28step)
 第三バイト エラー検出バイト.1バイト 例 0100 0011 エラーバイト

エラー検出バイトは アドレス、速度命令バイトの各ビット毎の排他的論理輪です。デコーダは、パケット確認時、第一バイトと第二バイトの排他的論理輪を取り、第三バイトと比較します。もし、同じであれば通信エラーなしです。もし異なっていた場合は通信エラーとし、このパケットを破棄(無視)します。エラーなく受信出来たときは、アドレス55(10進)のデコーダは、速度6 前進に車両を制御します。現時点では、DCCパケットは最小3バイト、最大6バイト(エラー検出バイト含む)です。

DCCパケットはシリアル通信です。1ビットづつ順にレール上に出力されます。デコーダから見てどのビットからデータが開始し、終了しているかが分からないといけません。そのためにプリアンブル、パケットスタートビット等が規定されています。基本的にPCのシリアル通信と同じです。異なる部分は、各バイトのストップビット、最初に伝送されるビットがそのバイトの最上位ビットであると言うことです。

プリアンブルは、DCCパケットの最初に付けられる’1’の連続データです。最小14ビット連続しなければいけません(CV書き込み時は最小20ビット)。通常の通信では、プリアンブルはタイミングの同期化に用いられますが、DCCパケット伝送において、PCのシリアル通信と同様にデータ開始のためのみに用いられます。

DCCパケットは、14ビット以上の連続した’1’を出力後、パケットスタートビット’0’ を出力します。その後第一バイトデータ、’0’(第二バイト用スタートビット)、第二バイトデータ、’0’(第三バイト用スタートビット)、第三バイトデータ、’1’パケットストップビットを出力し、3バイトパケットの場合は終了です。4バイト、5バイト、6バイト等の場合は、スタートビットとデータバイトが追加になります。デコーダは、第一バイト読み込み時、読み込むべきバイト数は分かりません。そのため、各バイト伝送の最後にストップビットは置かず、次のスタートビット’0’として、最後のバイトを転送後のみストップビット(パケットエンドビット)’1’を置き、パケット終了を検出できるようにしています。

上記の最小のDCCパケット例の場合、下の波形がレール上に伝送されます。


4.DCCパケットフォーマットについて
DCCパケットフォーマットは、CV書き込みフォーマットを除き通常動作(動作モードCV含む)では、デコーダアドレスを基準として構成されています。

4−1 通常動作(動作モードCV含む)時のDCCパケットフォーマット
DCCパケットフォーマットは、
1.アドレス  1または2バイト
2.命令 命令による
3.エラー検出 1バイト
の構成になっています。

4−1−1 アドレス
DCCパケット第一バイトは、primary address(基本アドレス)と呼ばれ、アドレス値により対象となるデコーダ機能が分けられています。以下のように分けられています。
アドレス(第一バイト)
00000000 (0)  ブロードキャストアドレス。全てのデコーダ向け
        リセット等に用いられます。
00000001-01111111 (1-127) 7ビットアドレスマルチ機能デコーダ用
        通常の車載用デコーダアドレス(7ビット用)
10000000-10111111 (128-191) アクセサリー用アドレス9/11ビット用
        第二バイトにもアドレスが含まれます。
11000000-11100111 (192-231) 14ビットアドレスマルチ機能デコーダ
        通常の車載用デコーダアドレス(14ビット用)
        第二バイトもアドレス
11101000-11111110 (232-254) 未使用(予約のため使用不可)
11111111 (255) アイドルパケット用


ブロードキャスト、マルチ機能7ビット、アイドルパケット用のアドレスは1バイトでアドレスが確定するので、そのままこのバイトがアドレスになります。第二バイトは命令バイトになります。
14ビットマルチ機能デコーダあるいはアクセサリー用デコーダアドレスは、1バイトではアドレスが確定せず、第二バイトによりデコーダアドレスが確定します。

4−1−1−1 マルチ機能デコーダアドレスとCV値
マルチ機能デコーダアドレスは、以下のように構成されています。
          第一バイト         第二バイト
7ビットアドレス 00000001 - 01111111   なし(命令バイトとなる)
14ビットアドレス 11000000 - 11100111   00000000 - 11111111

14ビットアドレスは、第一バイト内の下位6ビット、第二バイトの8ビットで構成されており、最上位ビットは第一バイトのビット5になります。
7ビット、14ビットを含めたアドレス空間は不連続となり以下のようになります。
1 - 127 (00000001 - 01111111)
49152 - 59391 (11000000_00000000 - 11100111_11111111)
アドレス数として計 10367個の アドレスが割り当てられる事になります。

このままの値でデコーダアドレスとすると間違いやすいアドレスになってしまいます。
しかし、NMRA規格はここまでしか規定していません。後は、各メーカの都合となります。
桂庵のコマンドステーションにおけるアドレス設定では、以下のようにアドレスの変換をしています。
(注:以下の内容でDCCパケットに出力されるアドレスを実アドレスとし、ユーザ表示、設定用アドレスを論理アドレスとします。)

実アドレス1 - 127は、そのまま論理アドレス1 - 127としています。
(デコーダCV29 ビット5は’0’に設定のこと)
デコーダ側は、CV1に実アドレス(= 論理アドレス)を書き込みます。

実アドレス49152から59391は、128からの論理アドレスとして
49152 - 59391  => 128 - 10367 に変換。
(デコーダCV29 ビット5は’1’に設定のこと)

従って、128を論理アドレスとして指定した場合、実際のDCCパケットに出力される実アドレスは、
 第一バイト11000000 , 第二バイト00000000 が出力されます。
 デコーダ側はCV17に11000000, CV18に00000000を書き込みます。

例として9999を論理アドレスとして設定した場合は、
 第一バイト 11100110, 第二バイト10001111 が出力されます。
 デコーダ側は、CV17に11100110, CV18に10001111を書き込みます。


このアドレス変換方法の、他のコマンドステーションとの互換性は確認していません。Digitrax社のマニュアルに4Digitアドレスは128からと書いてあったので、このようにしました。しかし、どのようにも変換は可能なので互換性はないかも知れませんが、CV17 / 18を確認すれば問題はないと思います。この方法は最大限アドレス空間の有効利用が出来ます。

4−1−1−2 アクセサリーアドレスとCV値
私はアクセサリーアドレスについては、もう一歩理解していません。アドレスは、通常のデコーダアドレスと出力アドレスタイプの2種類があるようです。アクセサリーの動作をポイント(スイッチ)を対象としています。

概略ですが9ビット、デコーダアドレスタイプの説明します。
( Basic Accessory Decoder Packet )

アクセサリーアドレスは、第一バイトに9ビットアドレスの下位6ビットを指定します。残りの上位3ビットは、第二バイトのビット4,5,6に指定します。マルチ機能デコーダと異なり、第一バイトには下位6ビット(マルチ機能デコーダは上位6ビット)が格納されます。また、第二バイトは、マルチ機能デコーダはすべて下位アドレス用ビットですが、アクセサリーの第二バイトは、アドレス(上位3ビット)と命令の複合となっています。

第一バイト 第二バイト 第三バイト
10AAAAAA 1AAACDDD EEEEEEEE

A…アドレスビット、C…コントロールビット、D…データビット、E…エラービット
です。

アドレスビットの上位3ビットが命令との複合になっていることと、第一バイトが下位6ビットアドレスを示すことにより、第一バイト、第二バイトを含めたアドレス空間という考え方ができず、単純にアドレス9ビットを取り出し、アドレスと考えます。

従って、例えば、アドレスが19(10進)であれば、
2進数(9ビット)で000010011となるので、
第一バイトは下位6ビットに10を付け加え、
10010011 がコマンドステーションから出力され
第二バイトは
1000CDDD が出力されます。

アクセサリーアドレス用CVは、下位6ビットはCV513, 上位3ビットはCV521に格納されます。マルチ機能デコーダとは異なり、CV513には6ビットのみの値が格納されます。
CV521には3ビットのみの値が格納されます。(と思う。)

もう一つの例として、アドレス値432(10進)の場合は、432は2進で、110110000なので
コマンドステーションは
第一バイト 10110000 を出力し
第二バイト 1110CDDDを出力します。
デコーダ側は、CV513に00110000が書き込まれ、CV521に00000110が書き込まれます。


4−1−2 命令
命令(Command)についても、マルチ機能デコーダとアクセサリーデコーダで異なります。

4−1−2−1 マルチ機能デコーダの命令
命令はアドレス(1バイトあるいは2バイト)の後、最小1バイト、最大3バイトで出力されます。最初の命令バイトは、以下のようになっており、この命令バイトの上位3ビットで基本命令が決定されます。

000***** デコーダ、総括制御命令
001***** アドバンスト動作命令
010***** 逆方向、速度方向命令
011***** 正方向、速度方向命令
100***** 機能1グループ命令
101***** 機能2グループ命令
110***** 未使用(予約のため使用不可)
111***** 動作モードCV命令
*は命令内容によって異なる部分です。
命令内容により、命令バイトの追加があります。

以下にマルチ機能デコーダ命令の説明を行います。すべての命令は説明出来ませんので、桂庵で使用している命令を主に説明します。詳しくはNMRA RP 9.2.1をご覧下さい。

000***** デコーダ、制御総括命令
この命令にはデコーダ制御、総括制御命令が含まれています。
デコーダ制御命令は、0000 ****で、総括制御命令は0001 ****です。

:デコーダ制御命令
主な命令はリセット命令です。
命令は、00000000 となります。その他の命令もありますが、桂庵コマンドステーションでは使用していません。

例、全デコーダ向けリセットDCCパケット
第一バイト 第二バイト 第三バイト
00000000 00000000 00000000
アドレスはブロードキャストとして00000000です。命令はリセットで00000000です。エラー検出バイトは、第一バイトと第二バイトの排他的論理輪をとり、00000000となります。

:総括制御命令
総括制御命令は、2バイトの命令です。
命令第一バイト 命令第二バイト
0001CCCC  0AAAAAAA
となります。

命令第二バイトの7ビットのAが総括アドレスです。この総括アドレスを全て0にすると総括運転停止になり通常のアドレス(CV1または、CV17/18)による制御になります。

命令第一バイト内のCCCCは以下のようになっています。
CCCC = 0010 正方向での総括運転命令(ただし総括アドレスが0出ない時)
CV19に0AAAAAAAを書き込みます。
CCCC = 0011 逆方向での総括運転命令(ただし総括アドレスが0出ない時)
CV19に1AAAAAAAを書き込みます。

総括アドレスによる機能1,2(FL, F1…..F12)の動作はCV21, 22内の対応ビット設定により動作します。ただし、デコーダアドレスへの機能1,2命令は無条件にデコーダは動作します。

例:アドレス3のデコーダに総括アドレス99で正方向総括運転DCCパケット
(注:総括アドレス99は2進で1100011です。)
第一バイト 第二バイト 第三バイト 第四バイト
00000011 00010010 01100011 01110010

第一バイトはデコーダアドレスバイト、第二、第三バイトは命令バイト、第四バイトはエラー検出バイトです。

001***** アドバンスト動作命令
この命令は、128step速度制御命令に使用され、2バイト命令です。
命令第一バイト 命令第二バイト
001CCCCC  DDDDDDDD

命令第一バイトのCCCCCが11111の場合128step速度制御命令になります。
命令第二バイトDDDDDDDDはビット7が方向を示し、下位7ビットが速度データとなります。ビット7が”1”の時前進、”0”の時は後進となります。

例:アドレス3のデコーダにアドバンスト動作命令で、後進、速度ステップ55(10進)のDCCパケット。(速度ステップ55は2進で110111です)
第一バイト 第二バイト 第三バイト 第四バイト
00000011 00111111 00110111 00001011

第一バイトはデコーダアドレスバイト、第二、第三バイトは命令バイト、第四バイトはエラー検出バイトです。

010***** 後進方向、速度方向命令 011***** 正進方向、速度方向命令
これらの二つの命令は、14ステップ、あるいは、28ステップによる速度、方向制御に用いられ、1バイト命令です。
 010(又は011) CDDDDで命令は構成されます。Dは速度を示します。
D = 0000は停止、D = 0001は緊急停止です。

Cは、CV29ビット1の値で、内容が変わります。
CV29 ビット1 = 0の場合は、Cは、FL(F0)の制御になります。
この場合、速度は14ステップ動作となります。
CV29 ビット1 = 1 の場合は、Cは、速度制御の最下位のビットとなります。
この場合、速度は、28ステップとなります。(S-9.2 参照)
 
例:アドレス3のデコーダに後進、速度ステップ8のDCCパケット。
CV29ビット1 = 1(28ステップ)時
第一バイト 第二バイト 第三バイト 
00000011 01010101 01010110

第一バイトはデコーダアドレスバイト、第二バイトは命令バイト、第三バイトはエラー検出バイトです。

 桂庵のコマンドステーション、デコーダともにこの命令はサポートしておりません。速度制御は、アドバンスト動作命令にて行っています。

100***** 機能1グループ命令
この命令は、機能1(FL(F0), F1, F2, F3, F4 )を制御する1バイト命令です。CV29ビット1の内容により、FL(F0)の制御が可能となったり、不可能となったりします。

この命令の構成は100DDDDDとなっています。
ビット0 F1
ビット1 F2
ビット2 F3
ビット3 F4
です。ビット4はFL(F0)用でが、CV29ビット1が”0”の時は、無視されます(FL(F0)の制御は出来ません)。CV29ビット1が”1”の時ビット4がFL(F0)の制御として有効になります。

101***** 機能2グループ命令
この命令は、機能2( F5, F6, F7, F8 , F9, F10, F11, F12)を制御する1バイト命令です。
一つのパケットでは、4つの機能しか制御できません。
この命令の構成は101SDDDDとなっています。
Sの値により、F5-F8の制御と、F9-F12までの制御に分かれています。
S = 0の時
ビット0 F9
ビット1 F10
ビット2 F11
ビット3 F12

S = 1の時
ビット0 F5
ビット1 F6
ビット2 F7
ビット3 F8

です。

111***** 動作モードCV命令
動作モードCV命令はショートフォームとロングフォーム命令の2種類があります。
ショートフォーム命令は、加速度(CV23)および減速度制御(CV24)に書く込むための動作モードCV命令です。ロングフォーム命令は、全てのCVに対して書き込み、確認が可能な命令構成となっています。ここでは、ロングフォーム命令の説明を行います。この命令が総括アドレス向けに出力された場合は、無視しなければなりません。

この命令の構成は以下のようになっており、3バイト命令です。
命令第一バイト 命令第二バイト  命令第三バイト
1110CCAA  AAAAAAAA DDDDDDDD

CCにより、CV書き込み、確認、ビット操作の制御を行います。
CC = 01 バイト確認
CC = 11バイト書き込み
CC = 10 ビット操作(操作内容は、DDDDDDDDに含まれます)

AはCVアドレスです。CVアドレスの最上位ビットは命令第一バイトビット1です。最下位ビットは命令第二バイトのビット0です。10ビットのCVアドレスを指定出来ます。CV1のアドレスは 00 0000 0000となります(CV番号より一つ小さい)。

Dはデータです。バイト操作の場合は、書き込み、あるいは、確認データとなります。ビット操作の場合は、操作内容、ビット位置、データとなります。

ビット操作時のD内容
ビット操作時の8ビットのDは以下のようになります。
111CDAAA
C = 1 ビット書き込み
C = 0 ビット確認
Dは書き込みあるいは比較する1ビットデータ
AAAは、書き込みあるいは確認するビット位置です。AAA = 000でビット0, AAA = 111でビット7を示します。

例:アドレス3のデコーダのCV23にバイトで55(10進)を書き込む。
CV23のアドレスは、23 - 1 = 22の2進で表し  00 0001 0110 ( 10bit)
データ55を2進で表し 0011 0111( 8bit)
第一バイト 第二バイト 第三バイト  第四バイト  第五バイト
00000011 11101100 00010110 00110111 11001010
デコーダアドレス 命令第一バイト 命令第二バイト 命令第三バイト エラー検出バイト

例:アドレス3のデコーダのCV23のビット位置5に0を書き込む。
CV23のアドレスは、23 - 1 = 22の2進で表し  00 0001 0110 ( 10bit)
ビット位置5を2進で表し 101( 3bit)
第一バイト 第二バイト 第三バイト  第四バイト  第五バイト
00000011 11101000 00010110 11110101 00001100
デコーダアドレス 命令第一バイト 命令第二バイト 命令第三バイト エラー検出バイト

4−1−2−2 アクセサリデコーダ命令(Basic Accessory Decoder )
桂庵は、アクセサリーデコーダの動作がいまいち分かっておりません。ここでは、桂庵が正しいと思っておる内容で説明したいと思います。

アクセサリーデコーダの命令は、前述したように、アクセサリーアドレスとの複合となっており、命令構成(アドレス含む)は以下のようになっています。

第一バイト 第二バイト 第三バイト
10AAAAAA 1AAACDDD EEEEEEEE

A…アクセサリーデコーダアドレスビット、C…コントロールビット、D…データビット、E…エラービット
です。
アドレスに関しては、上位3ビットが第二バイト、下位6ビットが第一バイトに含まれています。

このBasic Accessory Decoderの制御方法としては、以下のような想定をしていると思っています。
1.制御対象はペアー(一つの制御対象に二つの制御すべきものがある。)
2.ON/OFF制御(ただし、デコーダ自身でON後ある時間に自動的にOFFになる場合は、OFF制御の必要はない)

1,2の想定を元にこのデコーダ命令の内容を桂庵が正しいと思っている内容です。

C...”1”の時、制御対象をONとする。”0”の時は制御対象をOFFとする。
DDD..ビット2, 1のDは制御対象選択。ビット0は選択された制御対象のペアーのどちらかを示す。従って、 一つのアクセサリーデコーダには、4つのペアーあるので、結果的に8つの制御対象までON/OFFできることになります。以下にDDD(bit2, 1, 0)による制御対象の図をかきました。



桂庵ではポイント(KATO 6番ポイントを使用)を制御する時、F1(あるいはF2,3,4)の二つの出力を直接6番ポイントから出ている線に接続しています。桂庵のアクセサリーデコーダ出力はフルブリッジ構成(モータ駆動とほぼ同じ)としており、2本の線で制御しています。

例:アクセサリーデコーダアドレス1、F3のペアー1側をONとする。(上の図の赤丸)
第一バイト 第二バイト 第三バイト
10000001 10001101 00001100
第一バイト、第二バイトでアドレス、命令バイトとなり、第三バイトはエラー検出バイトです。

KATOあるいはTOMIXのポイントのように切り替える時のみONとするため、アクセサリーデコーダのCV515(F1), CV516(F2), CV517(F3), CV518(F4)にてON時間の選択が出来るようになっています。


以上で、通常動作モードにおけるパケットの説明を終わります。詳しくは、RP-9.2.1(パケット)、RP-9.2.2(CV)を参照してください。

4−2 サービスモード
サービスモードはデコーダの設定のために用いられるモードです。デコーダの設定はCV (Configuration Variables)に設定値を設定します。サービスモードに関してはPR-9.2.3に詳しく出ています。

4−2−1 サービスモードへ入る、および、サービスモードから抜ける。
デコーダがサービスモードに入るためには、リセットパケットを受けた後20ms以内にサービス用パケットを受け取った場合のみ、このデコーダはサービスモードに入ることが出来ます。
サービスモードから抜けるためには、サービスモード以外のパケットを受け取った、あるいは、サービスモード中の最後のパケットから20msが経過したことで、サービスモードから抜けることが出来ます。一旦サービスモードを抜けた場合、再びサービスモードに入るためには、同じくリセットパケット受け取り後20ms以内にサービス用パケットを受け取らなければなりません。

4−2−2 デコーダアクノレッジ
サービスモードにて、正しくCV値を書き込めた場合、あるいは、正しい確認が出来た場合、デコーダはアクノレッジを出力します。
アクノレッジには2種類あります。一つはBasic Acknowledgmentで、もう一つはAdvanced Acknowledgementです。通常はBasic Acknowledgementを使用します。Advanced Acknowledgementは、デコーダからシリアルデータを出力するタイプで、色々なデコーダ情報をすばやくコマンドステーションは受け取ることが出来ますが、現在はまだあまり使用されていないようです。(RP 9.3.1, RP9. 3. 2に詳しく出ています)。

Basic Acknowledgementの動作は、デコーダはアクノレッジとして、動作電流を増やします。このため、モータの駆動、ランプの点灯を行います。規格上は、電流の増加分は60mA以上、電流増加時間は6ms ±0.5msとなっていますが、実際は、増加電流10mA程度、電流増加時間は20ms程度となっているようです。

 デコーダを車両に搭載していない状態でデコーダアクノレッジがうまく取れない場合は、モータ駆動線(橙色、灰色)に200Ω(1W)程度の抵抗を付けると良いと思います。駆動電圧は12Vですので、約60mA程度流すことが出来、アクノレッジの検出がうまくいくと思います。桂庵のコマンドステーションでは、約20mAの電流増加でアクノレッジ検出が出来るように設計しています。

4−2−3 サービスモード用パケット
 サービスモード用パケットは、各社の考えや歴史で色々な方式があるようです。
ここでは、桂庵のコマンドステーションに搭載しているダイレクトモードで説明をします。

サービスモードパケットは、一つのパケットではなく、複数のパケットで成り立っています。ダイレクトモードにおいて使用するパケットは、2種類です。他の方式では、もっと多くの種類のパケットが必要となります。
必要なパケットは、リセットパケットと書き込み(確認)用パケットです。

リセットパケットは、通常動作時のリセットパケットそのものです。
第一バイト 第二バイト 第三バイト
00000000 00000000 00000000
です。

書き込み(確認)用パケットは、動作モードCV命令とほぼ同じです。命令第一バイトの上位4ビットが異なるだけです。また、動作モードCVパケットでは、デコーダアドレスが必要でしたが、今回はサービスモードなのでデコーダアドレスは必要ありません。
このパケット命令構成は以下のようになっています。
第一バイト 第二バイト 第三バイト 第四バイト
0111CCAA AAAAAAAA DDDDDDDD EEEEEEEE

CCにより、CV書き込み、確認、ビット操作の制御を行います。
CC = 01 バイト確認
CC = 11バイト書き込み
CC = 10 ビット操作(操作内容は、DDDDDDDDに含まれます)

AはCVアドレスです。CVアドレスの最上位ビットは命令第一バイトビット1です。最下位ビットは命令第二バイトのビット0です。10ビットのCVアドレスを指定出来ます。CV1のアドレスは 00 0000 0000となります(CV番号より一つ小さい)。

Dはデータです。バイト操作の場合は、書き込み、あるいは、確認データとなります。ビット操作の場合は、操作内容、ビット位置、データとなります。

ビット操作時のD内容
ビット操作時の8ビットのDは以下のようになります。
111CDAAA
C = 1 ビット書き込み
C = 0 ビット確認
Dは書き込みあるいは比較する1ビットデータ
AAAは、書き込みあるいは確認するビット位置です。AAA = 000でビット0, AAA = 111でビット7を示します。

Eはエラー検出ビットデータです。

以上のリセットおよび書き込み(確認)用パケットを以下のようにコマンドステーションから出力します。

リセットパケット 3パケット以上(続けて)
書き込み(確認)パケット 5パケット以上(続けて)
書き込み(確認)あるいはリセットパケット 6パケット以上(書き込み時間稼ぎ)

コマンドステーションは、各パケットの前に出力するプリアンブル数を20ビットにし出力します。
デコーダは、書き込み(確認)パケットが続けて2回、全く同じであった場合、CVへの書き込み、確認を行います。

再びCVへの書き込み、確認を行う時は、上記パケット列を出力します。



以上で、DCCパケットの概略について説明しました。
詳しくは、NMRAの規格を読んで下さい。また、桂庵のコマンドステーションあるいは
デコーダのソースコードで、命令の生成、命令の解析等が分かると思います。

このページの
pdfファイルです。

間違いがありましたらご指摘くださるようお願いします。

規格の日本語訳

桂庵が訳した規格です。著作権等の確認はしていません。あくまでも個人での利用として下さい。

NMRA規格の日本語訳です。(青字をクリックして下さい)

S-9.1.....DCC電気規格
S-9.2.....DCC通信規格

Digitrax社..
Loconet規格 (Digitrax社のLoconetの規格が現在web上で見つかりませんでした。)


以上です。