DPM のシリアル通信プロトコル
(Dilbertian プロトコルの変更)
プロトコル名に注意してください。
名前 “Dilbertiano” このプロトコルの最初のバージョンから来る, 我々 が呼ばれる “IDP 反転 Dilbertian プロトコル” (2010), セルにゼロを上りました “閉じる” セル “大規模です” (“0” 細いと “1” 脂肪 – 次のビネットあたりから来る “ディルバート” Scott Adams によって – www.dilbert.com).
の新しいプロトコル ?
Theremino システムは PC の簡単な入力出力システムを提供することを目的と, 安くて使いやすい. それは自動付け番を使いやすいが必要と彼らのタイプの認識, 簡素化し、リンクのコストを最小限に抑えるために線のみで通信する必要があります。.
我々 はそれを書かなければならなかった同様のプロトコルがあります。. 実験や研究の多くの年の最高の現在のバージョンを収集します。.
この文書は PDF 形式でのダウンロードします。:
DPM_Protocol_2015_ENG.pdf
DPM_Protocol_2015_ITA.pdf
機能
- 単線の双方向シリアル通信.
- 自動構成.
- 接続されているデバイスの自動検出.
- までのデバイスの数 1 で 200.
- 送信および受信したバイトの数は、デバイスの種類によって異なります.
- 最大伝送速度 4 多くの短いケーブルを使用してデータを送信するメガ ビット/秒.
- 最大伝送速度 100 長いケーブルのキロビット/秒 (まで 10 Km).
- 通信の高効率化 (差出人 10 で 20 時間を超えることができます。).
電動シャッター
単線の伝達は起こる, 参照を必要とするが、質量と電源電圧, 配線が 3 つで、通常に.
DPM をサポートしているデバイスは、入力コネクタを持つ必要があります。 (マスターに) 1 つのダウン ストリームのデバイスに出力 (奴隷)
コネクタが通常使用します。 3 ポーリ, 間隔 2.54 mm.
通信のチェーン マスターが必要 (電力を提供してタイミング) カスケード接続されているデバイスの数 (スレーブと呼ばれる).
マスターは、ライン テンションが 5 V, 同じ許容値と最大電流 5 V を USB コネクタから撤退しました。.
マスターが提供できる最大の電流制限数と接続できるデバイスの種類. この電流, 通常は、します。 250 しかし, まで増加する可能性があります 500 しかし. USB の容量を超える場合それ以上行く ’ コネクタに珍しい特徴を課すと.
接続可能なデバイスの最大数は、次の要因によって制限されます。:
– 最大電流を “マスター” 提供することができます。.
– 米伝送のサイクル タイムでラインを負うバイトの最大数.
両方、 “マスター” を、 “スレーブ” ダンピング抵抗と回線に接続されて, また、低域として機能します。, 無線干渉および過電圧保護. 通常、この抵抗の値はから 33 で 330 オーム
放送形式
非ゼロ復帰方式 (NRZ) 標準.
既定の形式 = 8, N, 1
– 1 スタート ビット
– 8 データ ・ ビット
– no-parity
– 1 ストップ ビット
データ行のレベル “Com. ライン”
脇のラインをレベルアップするために (3.3 V)
信号 “1” 示されます 3.3 V
信号 “0” 示されます 0 V
繰り返し回数とスループット
伝送速度
低速を使用してとき、長さ, などの接続ケーブルの容量, 高い. 速度は、可能性があります多数のデバイスとの通信に使用する距離が短く、高 (または大きなバイト数を必要とするデバイスとの通信) 確立された名前付き速度します。 “1” (1 k ビット/秒) まで “12” (4 メガ ビット/秒)
最大バイト数
ボーレートによって転送できるバイト数の最大数は次の表に記載されています。.
回, 距離とのバイト数
速度
|
ビット時間
|
ビット
ため
2 番目
|
バイト
すべて 15Ms |
バイト毎
30Ms |
最大距離
|
最大容量
|
奴隷
マックス
番号
|
1
|
1 Ms
|
1K
|
1
|
3
|
10 Km
|
1 UF
|
3
|
2
|
500 私たち
|
2K
|
3
|
6
|
5 Km
|
500 NF
|
6
|
3
|
200 私たち
|
5K
|
4
|
8
|
2 Km
|
200 NF
|
15
|
4
|
100 私たち
|
10K
|
15
|
30
|
1 Km
|
100 NF
|
30
|
5
|
50 私たち
|
20K
|
30
|
60
|
500 m
|
50 NF
|
60
|
6
|
20 私たち
|
50K
|
40
|
80
|
200 m
|
20 NF
|
150
|
7
|
10 私たち
|
100K
|
150
|
300
|
100 m
|
10 NF
|
160
|
8
|
5 私たち
|
200K
|
300
|
600
|
50 m
|
5 NF
|
80
|
9
|
2 私たち
|
500K
|
400
|
800
|
20 m
|
2 NF
|
32
|
10
|
1 私たち
|
1M
|
1500
|
3000
|
10 m
|
1 NF
|
16
|
11
|
500 NS
|
2M
|
3000
|
6000
|
5 m
|
500 PF
|
8
|
12
|
250_nS
|
4M
|
6000
|
12000
|
2.5 m
|
250 PF
|
4
|
すべてのデバイスは、少なくとも速度を実装する必要があります。 “7” 既定の速度であるとされます。. 異なる速度を設定する場合は、 “7” チェーン内のすべてのデバイスがそれをサポートする必要があります。.
、 “最大距離” ケーブルの特性に依存します。, 表計算からシールド ケーブルついた rg58 同軸用 50 オーム メートル当たり 100 pf する能力を持つ.
低速度の数 “奴隷” 転送できる最大バイト数によって制限されます。 30 (ミリ秒). (それぞれのスレーブを使用して、少なくとも 1 バイトと流れるような動きをする十分な繰り返し速度を主張します。)
高速の数で “奴隷” 最大の容量に制限されます。, 各 “スレーブ” およその容量を追加します 40..60 PF とおよその最大距離を短縮 50 cm.
容量はあたり 30pF に基づいて計算されました。 “スレーブ” プラスから接続ケーブル他 20pF 20 cm と他 10pF を考慮するための追加の抵抗 “二国間のスイッチ” (合計: 60PF)
供給電流と 1 メートル当たりの抵抗よりも通信の最大ケーブル長
ケーブル タイプ —>
最大電流値
( ピーク電流 )
|
H1500/H1000、H500、H155、RG11
20 ミリ オーム
以下
1 メートルあたり
|
ついた rg58 同軸/Rg59u/H155/
net ケーブル
について
50 ミリ オーム
1 メートルあたり
|
Rg59/RG6/電話ツイスト ワイヤ/
net ケーブル
について
100 ミリ オーム
1 メートルあたり
|
10 しかし | 1 Km | 400 m | 200 m |
20 しかし | 500 m | 200 m | 100 m |
50 しかし | 200 m | 80 m | 40 m |
80 しかし | 125 m | 50 m | 25 m |
100 しかし | 100 m | 40 m | 20 m |
200 しかし | 50 m | 20 m | 10 m |
400 しかし | 25 m | 10 m | 5 m |
500 しかし | 20 m | 8 m | 4 m |
800 しかし | 12.5 m | 5 m | 2.5 m |
1 で | 10 m | 4 m | 2 m |
距離の計算に、我々 は地面にドロップ電圧ことを考慮します。, 超えない 200 MV. 電源ケーブルでの電圧降下, 送信エラーの原因でないです。, それははるかに高いことができます。 (、 5 V にドロップダウンすることができます。 3.3 問題を作成せず V) 地面にシールド ケーブルの場合は、画面です。, 通常宣言よりも少ない抵抗があります。, 距離が大きくなるので.
ケーブル容量
値 “最大長” 上記の表に示されている、およその容量とケーブルの接続に対してのみ有効 100 1 メートルあたり PF. 次の表は、最も一般的に使用されるケーブルに適用される修正.
ケーブル
|
外部
直径
( mm )
|
インピー ダンス
( オーム )
|
容量
(PF/mt。)
|
抵抗
(カスタムミリ オーム
/ メーター)
|
最大長さ補正
|
H1500
|
15
|
50
|
80
|
4
|
x 1.25
|
H1000
|
10.3
|
50
|
80
|
11
|
x 1.25
|
Rg213
|
10.3
|
50
|
100
|
|
–
|
H500
|
9.8
|
50
|
82
|
15
|
x 1.22
|
H155
|
5.8
|
50
|
82
|
32
|
x 1.22
|
Rg8
|
10
|
52
|
90
|
|
–
|
Rg11 (テレビ)
|
10.3
|
75
|
60
|
21
|
x 1.7
|
RG59 (テレビ)
|
6.15
|
75
|
67
|
159
|
x 1.5
|
RG6_(衛星テレビ)
|
6.8
|
75
|
51
|
100
|
x 2.0
|
RG56/で _(テレビ)
|
6.9
|
75
|
53
|
|
x 2.0
|
RG59/U _(テレビ)
|
4.5
|
75
|
53
|
45
|
x 2.0
|
ついた RG58 同軸
|
5.2
|
50
|
100
|
53
|
–
|
RG142
|
4.95
|
50
|
96
|
|
–
|
RG174
|
2.8
|
50
|
100
|
|
–
|
RG178
|
1.85
|
50
|
95
|
|
–
|
RG179
|
2.55
|
75
|
64
|
|
x 1.5
|
RG187
|
2.7
|
75
|
65
|
|
x 1.5
|
RG188
|
2.7
|
50
|
95
|
|
–
|
RG196
|
1.9
|
50
|
93
|
|
–
|
RG316
|
2.5
|
50
|
95
|
|
–
|
ネット ケーブル
|
|
|
分 50
マックス 130
|
分 60
マックス 200
|
x 2.0
x 0.7
|
PC オーディオ ケーブル
|
|
|
分 120
マックス 300
|
分 500
マックス 3000
|
x 0.8
x 0.5
|
スペクトラム
ケーブル
|
|
|
分 60
マックス 300
|
|
x 1.7
x 0.3
|
電線ツイスト
|
|
|
50
|
100
|
x 2.0
|
低容量ケーブルもあります。 (少し使用され、見つけるは難しい):
- Rg62 – 93 オーム – 44 PF/mt
- RG71 – 93 オーム – 44 PF/mt
- Rg210 – 93 オーム – 44 PF/mt
- RG63 – 125 オーム – 33PF/mt
- RG114 – 185 オーム – 27PF/mt
不明ケーブルの能力を測定します。:
- 完璧なシールド ケーブルをスキニングと中央繊維の絶縁を保持を準備します。.
- メーターまたはキャパシタンス ・ メータの中央と外側のシールド間を測定します。.
- 測定精度を改善するために, 5 または 10 メートルものケーブルを使用します。.
- ケーブルのメートルの数で測定したピコファラッドの値を分割します。.
デバイスの種類
デバイスが付けられてから数 0 で 199 彼女の「型」を識別します。.
認識と各デバイスの番号付けの段階で識別自体この「型」.
現在は、次のデバイスの定義:
デバイスの種類
|
速度
分
|
スピード最大
|
ピンを
|
電源
|
名
|
0
|
特別です “カスタム” タイプ
|
||||
1
|
1
|
12
|
1
|
12 しかし
|
静電容量センサー
こんにちは品質
|
2
|
1
|
12
|
10
|
InOut サーボ
|
|
3
|
1
|
12
|
12
|
InOut のジェネリック
|
|
4
|
1
|
12
|
12
|
InOut
|
|
5
|
6
|
仮想マスター ピン
(最初のバージョン) |
|||
8
|
10
|
仮想マスター ピン – V2
|
|||
9 | 12 | 仮想マスター ピン – V4 | |||
255 | 不明 |
デバイスの最大数
接続可能なデバイスの最大数によって制限されます。:
– 選択した速度によって転送できるバイト数の最大数.
– 「マスター」を提供することができます最大電流 (通常 500 しかし)
– プロトコルによってサポートされているデバイスの最大数は 200 (差出人 0 で 199)
ピンの種類
ピンが付けられてから数 0 で 255 彼女の"PinType"を識別します。.
出力ピンの種類
出力端子
タイプ
|
名
|
スレーブにマスター
バイト
|
マスターにスレーブ
バイト
|
0
|
未使用
|
0
|
0
|
1
|
DIG_OUT
|
1
|
0
|
2
|
PWM_8
|
1
|
0
|
3
|
PWM_16
|
2
|
0
|
4
|
SERVO_8
|
1
|
0
|
5
|
SERVO_16
|
2
|
0
|
6 | ステッピング | 4 | 0 |
7 | PWM_FAST | 5 | 0 |
入力ピンの種類
入力端子
タイプ
|
名
|
スレーブにマスター
バイト
|
マスターにスレーブ
バイト
|
129
|
DIG_IN
|
0
|
1
|
130
|
DIG_IN_PU
|
0
|
1
|
131
|
ADC_8
|
0
|
1
|
132
|
ADC_16
|
0
|
2
|
133
|
CAP_8
|
0
|
1
|
134
|
CAP_16
|
0
|
2
|
135
|
RES_8
|
0
|
1
|
136
|
RES_16
|
0
|
2
|
140
|
カウンター
|
0
|
2
|
141
|
COUNTER_PU
|
0
|
2
|
142
|
FAST_COUNTER
|
0
|
2
|
143
|
FAST_COUNTER_PU
|
0
|
2
|
144
|
期間
|
0
|
4
|
145
|
PERIOD_PU
|
0
|
4
|
146
|
SLOW_PERIOD
|
0
|
4
|
147
|
SLOW_PERIOD_PU
|
0
|
4
|
150
|
USOUND_SENSOR
|
0
|
2
|
160
|
CAP_SENSOR
|
0
|
3
|
165
|
STEPPER_DIR
|
0
|
4
|
180
|
ENCODER_A
|
0
|
2
|
181
|
ENCODER_A_PU
|
0
|
2
|
182
|
ENCODER_B
|
0
|
0
|
183
|
ENCODER_B_PU
|
0
|
0
|
175
|
ADC_24
|
0
|
1
|
176
|
ADC_24_DIN
|
0
|
0
|
177
|
ADC_24_DOUT
|
0
|
0
|
マスターとスレーブ間の通信 (シリアル回線)
最初のバイト | 伝送の種類 | 伝送 | 受信 |
255 (*4) | 特別延長 (将来の拡張) |
1 バイト (拡張機能) >>>>> 拡張された動詞の表を参照してください。 <<<<< |
— |
254 (*1) | RecogStart 早い認識 番号付け |
1 バイト (データ バイト数 = 0) 1 バイト (Cmd の CRC / 0) |
— |
253 (*2) | ファジーロジック シーケンス番号と型の要求を入力します。 |
1 バイト (データ バイト数 = 1) 1 バイト (差出人 0 で 199) 1 バイト (Cmd/Nbytes/型の CRC) |
1 バイト ( タイプ ) 1 バイト ( CRC ) |
251 (*3) | FastDataExchange 高速データ交換. |
1 バイト (データ バイト数 = 0) 1 バイト (Cmd/0 の CRC) 差出人 0 で 60 データのバイト |
差出人 0 で 63 データのバイト |
249 (*4) | SetupSlavePins 設定を入力、 1 つのピン “スレーブ” |
1 バイト (スレーブ インデックス) 1 バイト (データのバイト数) NN バイト (PinTypes: 1 ピンあたりのバイト数) 1 バイト (Cmd/SlaveId/etc の CRC.) |
1 バイト (スレーブ インデックス) 1 バイト (バイトの CRC 以前) |
248 (*4) | SetMasterName 名前を入力します “マスター” |
NN バイト (ゼロで終わる名前の文字) | — |
247 (*4) | GetMasterName 名前を読んで、 “マスター” |
— | NN バイト (文字 名前が 0 で終了) |
246 (*4) | SendValuesToSlave 送信します。 “n” バイト スレーブ “m” (マックス 56 バイト) |
1 バイト (スレーブ インデックス) 1 バイト (バイト数) バイト 1 . . . バイト n 1 バイト (CRC Cmd/SlaveId/nBytes/n) |
1 バイト (スレーブ インデックス) 1 バイト (バイトの CRC 以前) |
245 (*4) | GetValuesFromSlave 要求 “n” スレーブにバイト “m” (マックス 56 バイト) |
1 バイト (スレーブ インデックス) 1 バイト (バイト数) 1 バイト (Cmd/SlaveId/nBytes の CRC) |
byte1 . . バイト n 1 バイト (スレーブ インデックス) 1 バイト (CRC n + 1 前のバイト) |
244 (*4) | SendBytesToSlave 送信します。 “n” スレーブにバイト “m” (マックス 56 バイト) |
1 バイト (スレーブ インデックス) 1 バイト (バイト数) バイト 1 . . . バイト n 1 バイト (CRC Cmd/SlaveId/nBytes/n) |
1 バイト ( スレーブ インデックス ) 1 バイト ( CRC ) バイト 以前 |
243 (*4) | GetBytesFromSlave 要求 “n” スレーブにバイト “m” (マックス 56 バイト) |
1 バイト (スレーブ インデックス) 1 バイト (バイト数) 1 バイト (Cmd/SlaveId/nBytes の CRC) |
バイト 1 . . . バイト n 1 バイト (スレーブ インデックス) 1 バイト ( CRC ) について n + 1 前のバイト |
199 (*5) | SetSpeed | 1 バイト (通信. 速度) 1 バイト (Cmd/通信速度に CRC) |
— |
0 | アクションなし |
(*1) サービスのコマンド.
(*2) コマンドは、マスターとスレーブの視認による使用のみ認識中に.
(*3) 高速通信 – マスターは 1 つだけの USB 交換を使用してすべてのスレーブの値を交換します。
(*4) 1 つのスレーブの通信コマンド
(*5) 特別なコマンド
SendValuesToSlave 奴隷の出力端子に値を送信します。 (マスターまたは仮想奴隷物理フォーム)
GetValuesFromSlave スレーブの入力ピンの値を読み取ります (マスターまたは仮想奴隷物理フォーム)
SendBytesToSlave 一般的なバイトを送信します。 (構成の例), 奴隷の方 (マスターまたは仮想奴隷物理フォーム)
GetBytesFromSlave 法汎用バイト (状態の例), スレーブから (マスターまたは仮想奴隷物理フォーム)
すべてのコマンドからコードを持っています。 200 で 255, 防ぐために, エラーの場合, Id およびスレーブ タイプ (差出人 0 で 199) コマンドとして解釈される可能性があります。. (Setspeed は、シリアル ラインですがによってだけそれを決して送りませんのでカウントされません ’ HAL, マスターに, USB 経由で)
ホスト コンピューターとマスター間の通信 (USB)
Comandi ダ “ホスト” verso “マスター”
コマンド名 | ID USB_TxData[0] |
パラメーター USB_TxData[1 n] |
RecogStart | CommandID, | Nbytes |
FastDataExchange | CommandID, | 差出人 0 宛先 60 データのバイト数 |
SetupSlavePins | CommandID, | SlaveId, Nbytes |
SetMasterName | CommandID, | MasterName (0 で終了) |
GetMasterName | CommandID, | – |
SendValuesToSlave | CommandID, | SlaveId, Nbytes, Byte1….バイト |
GetValuesFromSlave | CommandID, | SlaveId, Nbytes |
SendBytesToSlave | CommandID, | SlaveId, Nbytes, Byte1….バイト |
GetBytesFromSlave | CommandID, | SlaveId, Nbytes |
SetSpeed | CommandID, | CommSpeed |
Risposte ダ “マスター” verso “ホスト”
コマンド名 | 応答 USB_RxData[0] |
値を返す USB_RxData[1 n] |
RecogStart | 0 [Ok] を = | Nslaves, スレーブ Type1 … スレーブ型 N |
FastDataExchange | 0 [Ok] を = | 差出人 0 宛先 63 データのバイト数 |
SetupSlavePins | 0 [Ok] を = | – |
SetMasterName | 0 [Ok] を = | – |
GetMasterName | 0 [Ok] を = | マスター名 (0 で終了) |
SendValuesToSlave | 0 [Ok] を = | – |
GetValuesFromSlave | 0 [Ok] を = | バイト 1 … バイト N |
SendBytesToSlave | 0 [Ok] を = | – |
GetBytesFromSlave | 0 [Ok] を = | バイト 1 … バイト N |
SetSpeed | 0 [Ok] を = | – |
USB バッファーのゼロの位置からコマンドが実行されたかどうかを示します “マスター” 正常に.
CRC の計算
使用すべての CRC で連続バイト数は計算であり、CRC バイト. 「縦の冗長性チェック」に基づいたアルゴリズムを使用して CRC 計算.
縦の冗長性チェック
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
Next
日常的なシーケンス間の「衝突」を避けるために ( たとえば、 0000 = 1111 または 123 = 321 ) 有効な CRC を生成する単純なシーケンス ( たとえば、 0000 CRC = 0 ) 順列と上記の方法を変更します。.
CRC の計算結果は効率的で非常に簡単.
このプロトコルで使われる CRC の計算
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
CRC = CRC + 1
Next
ボーレートを設定します。
既定以外のボー レートを使用する場合, その後、「マスター」する必要があります新しい速度チェーン内のすべてのデバイスに通信.
この設定は、ループ デバイス認識を行う前にも可能なはず、非常に長い送電線で可能な必要があります。. したがって今表示される特別なコマンドがあります。.
1 – マスター維持の高行 50 Ms
2 – すべてのスレーブが間違いなく保留中の 1 つの文字配置します。
3 – マスターは、ブレークを生成します (低レベル ライン 12 最低速度でビットします。
4 – マスター問題 55 文字 (01010101) 希望のボーレート
5 – すべてのスレーブがこのバイトからボー レートを推測します。 (自動ボーレート)
6 – マスターは「速度」を示す 1 バイトを送信 (差出人 1 で 12)
7 – マスターを 1 バイト 2 バイトで計算される CRC の送信します。 (cmd/速度)
8 – スレーブがミスによってその速度は変化しません。
ボーレートを確認します。
高すぎる速度を設定する場合使用伝送線路のチェーンのいくつかのデバイス可能性があります速度設定をサポートするできずデータを送信するときにエラーが発生することが.
伝送エラーがゼロまたは少ない場合よりも、 0.1% その後、スピード セットは有効.
認識と段落番号
1 – マスターはスレーブにすべてが同じ速度で通信することを保証する「スピード」セットアップの全体のシーケンスを出力します。.
2 – マスターするためのコマンドを送信しません。 50 (ミリ秒).
3 – この時点ですべてのスレーブ 必要があります。 コマンドを待っています。.
4 – マスター コード 254」を発行します。″ (RecogStart).
5 – すべてのスレーブが弱い・ プル ・ アップをかける (100-400 UA) 入力出力のダウン ストリームのデバイスに出力接続を開く. 彼らはもはや"253 を除く任意のコマンドに反応しません。″ (ファジーロジック).
6 – マスター コード 253」を発行します。″ (要求タイプ) 番号 0 バイト″, チェーン内の最初のデバイスとその型バイトを満たしています。, プルアップを削除します, 下流のスレーブとすべてのコマンドに応答していないに接続します。.
7 – マスター コード 253」を発行します。″ (要求タイプ) 番号 1 のバイト″, チェーン内の 2 番目のデバイスとその型バイトを満たしています。, プルアップを削除します, 下流のスレーブとすべてのコマンドに応答していないに接続します。.
8 – マスター コード 253」を発行します。″ (要求タイプ) 「2 番でバイトし″,
9 – マスター問題奴隷に向かってすべての設定順序「スピード」, 通常の通信モードですべての奴隷を示します。.
10 – マスター ホストに通知します (PC) USB スレーブを介してそれぞれの数と種類を認識しました。.
Roberto_Cena & Livio_Cicala (2010 – 2016)