Protocole de communication série DPM
(Dilbertian protocole modifié)
Notez que le nom de protocole
Le nom “Dilbertiano” s'agit de la première version du présent protocole, Nous avons appelé “IDP inversé Dilbertian protocole” (2010), où les zéros sont représentées avec une cellule “fermer” et avec une cellule “grande” (“0” maigre et “1” matières grasses – selon la vignette suivante vient de “Dilbert” par Scott Adams – www.Dilbert.com).
Parce qu'un nouveau protocole ?
Theremino le système vise à fournir un système d'entrées-sorties simples pour PC, bon marché et facile à utiliser. Assurez-vous qu'il est facile d'utiliser la numérotation automatique sont nécessaires et la reconnaissance de leurs types, afin de simplifier et de réduire au minimum le coût des liens est nécessaire de communiquer sur un fil uniquement.
Il existe un protocole similaire, que nous avons eu à l'écrire. La version actuelle rassemble le meilleur des nombreuses années d'expérimentation et de recherche.
Télécharger ce document au format PDF:
DPM_Protocol_2015_ENG.pdf
DPM_Protocol_2015_ITA.pdf
Caractéristiques
- Communication série bidirectionnelle sur un seul fil.
- Configuration automatique.
- Détection automatique des périphériques connectés.
- Nombre d'appareils allant de 1 dans 200.
- Nombre d'octets transmis et reçus varie en fonction du type d'appareil.
- Vitesse de transmission jusqu'à 4 Mégabits/s afin de transmettre une grande quantité de données avec des câbles courts.
- Vitesse de transmission jusqu'à 100 Kilobits par seconde pour câbles longs (jusqu'à 10 Km).
- Haute efficacité de la communication (De 10 dans 20 fois plus grande que dans peut).
Volets roulants électriques
La transmission se fait sur un seul fil, mais vous avez besoin d'une référence masse et une tension d'alimentation, là où les fils sont normalement trois.
N'importe quel appareil supportant le DPM doit avoir un connecteur d'entrée (pour le maître) et une sortie aux dispositifs en aval (Esclaves)
Les connecteurs sont normalement utilisés par 3 poli, avec un espacement de 2.54 mm.
Sur la communication de la chaîne devrait avoir un Master (fournissant la puissance et du temps) et un certain nombre de périphériques connectés en cascade (appelé esclave).
Est la tension qui le maître fournit en ligne 5 V, avec la même tolérance et avec le même courant maximal de 5 V que retire le connecteur USB de.
Le courant maximum que peut fournir le maître limite le nombre et le type d'appareils qui peuvent être connectés. Ce courant, est normalement 250 mais, et peut être augmenté jusqu'à 500 mais. Va sur elle dépasserait la capacité de l'USB ’ et imposerait des caractéristiques inhabituelles aux connecteurs.
Le nombre maximal de périphériques connectables est limité par les facteurs suivants:
– Le courant maximum que la “Master” peut fournir.
– Le nombre maximal d'octets qui porte de la ligne dans les temps de cycle du riz-transmission.
Les deux les “Master” qui le “Esclave” sont connectés à la ligne avec une résistance d'amortissement, Il agit également comme un passe-bas, protection des interférences et des surtensions de radio. La valeur de cette résistance est normalement de 33 dans 330 Ohm
Format de diffusion
À l'aide d'un format Non-Retour à zéro (NRZ) norme.
Format par défaut = 8, N, 1
– 1 commencer peu
– 8 bits de données
– no-parity
– 1 bit d'arrêt
Niveaux de la ligne de données “Ligne de com.”
La ligne de côté il monter de niveau (3.3 V)
Le signal “1” est désignée par 3.3 V
Le signal “0” est désignée par 0 V
Débit et temps de répétition
Vitesse de transmission
En utilisant des vitesses faibles lorsque la longueur, et donc la capacité les câbles de raccordement, sont élevés. Lorsque les distances sont courtes et haute vitesse peut servir à communiquer avec un grand nombre de dispositifs (ou communiquer avec les périphériques qui requièrent un grand nombre d'octets) Sont établies les vitesses nommés de “1” (1 k bits/Sec) jusqu'à “12” (4 méga bits par seconde)
Nombre maximal d'octets
Selon la vitesse de transmission, le nombre maximal d'octets pouvant être transmise est répertorié dans le tableau suivant.
Fois, les distances et le nombre d'octets
Vitesse
|
peu de temps
|
bit
pour
seconde
|
Octets
chaque 15MS |
Octets chaque
30MS |
Distance max
|
Capacité maximum
|
Esclaves
Max
nombre
|
1
|
1 MS
|
1K
|
1
|
3
|
10 Km
|
1 UF
|
3
|
2
|
500 Nous
|
2K
|
3
|
6
|
5 Km
|
500 NF
|
6
|
3
|
200 Nous
|
5K
|
4
|
8
|
2 Km
|
200 NF
|
15
|
4
|
100 Nous
|
10K
|
15
|
30
|
1 Km
|
100 NF
|
30
|
5
|
50 Nous
|
20K
|
30
|
60
|
500 m
|
50 NF
|
60
|
6
|
20 Nous
|
50K
|
40
|
80
|
200 m
|
20 NF
|
150
|
7
|
10 Nous
|
100K
|
150
|
300
|
100 m
|
10 NF
|
160
|
8
|
5 Nous
|
200K
|
300
|
600
|
50 m
|
5 NF
|
80
|
9
|
2 Nous
|
500K
|
400
|
800
|
20 m
|
2 NF
|
32
|
10
|
1 Nous
|
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
|
Tous les appareils doivent implémenter au moins la vitesse “7” qui est considéré comme la vitesse par défaut. Si vous souhaitez définir une vitesse différente de la “7” tous les appareils dans la chaîne doivent prendre en charge.
Le “distance maximale” dépend des caractéristiques des câbles, les valeurs du tableau sont calculés pour un blindé câble RG58 50 Ohm avec possibilité de 100pF par mètre.
À basse vitesse le nombre de “esclaves” est limitée par le nombre maximal d'octets pouvant être transmises en 30 millisecondes. (chaque esclave utilise au moins un octet et de vous demander une rapide répétition assez pour faire des mouvements fluides)
À grande vitesse, le nombre de “esclaves” est limitée par la capacité maximale, chaque “esclave” Ajoute une capacité d'environ 40..60 PF et réduit la distance maximale d'environ 50 cm.
La capacité a été calculée sur la base de 30pF par “esclave” plus autres 20pF à un câble de raccordement de 20 cm et autres 10pF pour tenir compte de la résistance supplémentaire due à “interrupteur bilatéral” (total: 60pF)
Longueur maximale du câble de communication que le courant d'alimentation et de la résistance par mètre
Câble type de —>
Courant maximal
( courant de crête )
|
H1500/H1000/H500/H155/RG11
20 Milli ohm
ou moins
par mètre
|
RG58 /RG59U / H155 /
câbles nets
sur
50 Milli ohm
par mètre
|
Rg59/RG6 /Téléphone twisted wire /
câbles nets
sur
100 Milli ohm
par mètre
|
10 mais | 1 Km | 400 m | 200 m |
20 mais | 500 m | 200 m | 100 m |
50 mais | 200 m | 80 m | 40 m |
80 mais | 125 m | 50 m | 25 m |
100 mais | 100 m | 40 m | 20 m |
200 mais | 50 m | 20 m | 10 m |
400 mais | 25 m | 10 m | 5 m |
500 mais | 20 m | 8 m | 4 m |
800 mais | 12.5 m | 5 m | 2.5 m |
1 Dans | 10 m | 4 m | 2 m |
Dans le calcul de la distance, nous prenons en compte que la tension chute sur le sol, ne dépasse pas 200 MV. La chute de tension sur le câble d'alimentation, ne causant ne pas d'erreurs de transmission, Il peut aussi être beaucoup plus élevé (le 5 V peut descendre vers le bas 3.3 V sans créer de problèmes) Dans le cas des câbles blindés sur terre est l'écran, qui a généralement moins de résistance que déclarée, Si la distance sera plus grande.
Capacité de câble
Les valeurs de “longueur maximale” indiqué dans le tableau ci-dessus sont valables uniquement pour le câble de connexion avec une capacité d'env. 100 PF par mètre. Le tableau suivant indique les corrections à appliquer pour les câbles plus couramment utilisés.
Câble
|
External
diamètre
( mm )
|
Impédance
( Ohm )
|
Capacité
(pF/mt.)
|
Résistance
(milliohm
/ compteur)
|
Correcteur de longueur max
|
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 (TV)
|
10.3
|
75
|
60
|
21
|
x 1.7
|
RG59 (TV)
|
6.15
|
75
|
67
|
159
|
x 1.5
|
RG6_(TVsat)
|
6.8
|
75
|
51
|
100
|
x 2.0
|
RG56/en _(TV)
|
6.9
|
75
|
53
|
|
x 2.0
|
_ RG59/U(TV)
|
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
|
|
–
|
Câble net
|
|
|
min 50
Max 130
|
min 60
Max 200
|
x 2.0
x 0.7
|
Câble PC Audio
|
|
|
min 120
Max 300
|
min 500
Max 3000
|
x 0.8
x 0.5
|
Microphonique
câble
|
|
|
min 60
Max 300
|
|
x 1.7
x 0.3
|
Fil téléphonique torsadée
|
|
|
50
|
100
|
x 2.0
|
Il y a aussi des câbles de faible capacité (peu utilisé et difficiles à trouver):
- Rg62 – 93 Ohm – 44 PF/mt
- RG71 – 93 Ohm – 44 PF/mt
- Rg210 – 93 Ohm – 44 PF/mt
- RG63 – 125 Ohm – 33PF/mt
- RG114 – 185 Ohm – 27PF/mt
Mesurer la capacité d'un câble inconnu:
- Préparer le parfait dépouillement câble blindé et conservant le brin central isolé.
- Mesurez entre le bouclier Central et extérieur avec un compteur ou un compteur de capacité.
- Pour améliorer la précision des mesures, Utilisez les cinq ou dix mètres de câble.
- Diviser la valeur des Picofarads mesurée par le nombre de mètres de câble.
Types d'appareils
Les appareils sont étiquetés avec un certain nombre de 0 dans 199 identifier son « Type ».
Au stade de la reconnaissance et la numérotation de chaque périphérique s'identifie avec ce « Type ».
Actuellement sont définis les dispositifs suivants:
Type d'appareil
|
Vitesse
min
|
Vitesse max
|
Dans les Pins
|
Puissance
|
Nom
|
0
|
Spécial “personnalisé” type de
|
||||
1
|
1
|
12
|
1
|
12 mais
|
Capteur capacitif
Salut qualité
|
2
|
1
|
12
|
10
|
InOut Servo
|
|
3
|
1
|
12
|
12
|
InOut générique
|
|
4
|
1
|
12
|
12
|
InOut
|
|
5
|
6
|
Pins maître virtuels
(première version) |
|||
8
|
10
|
Pins maître virtuels – V2
|
|||
9 | 12 | Pins maître virtuels – V4 | |||
255 | Inconnu |
Nombre maximal de périphériques
Le nombre maximal de périphériques connectables est limité par:
– le nombre maximal d'octets pouvant être transmises selon la vitesse choisie.
– le courant maximum que peut fournir le « maître » (normalement 500 mais)
– le nombre maximal de périphériques pris en charge par le protocole est 200 (De 0 dans 199)
Types de broches
Les broches sont étiquetés avec un certain nombre de 0 dans 255 identifier ses « PinType ».
Types de broches de sortie
Broche de sortie
Type de
|
Nom
|
Master Slave
octets
|
Esclave de maître
octets
|
0
|
INUTILISÉS
|
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 | MOTEURS PAS À PAS | 4 | 0 |
7 | PWM_FAST | 5 | 0 |
Types de broches d'entrée
Broche d'entrée
Type de
|
Nom
|
Master Slave
octets
|
Esclave de maître
octets
|
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
|
COMPTEUR
|
0
|
2
|
141
|
COUNTER_PU
|
0
|
2
|
142
|
FAST_COUNTER
|
0
|
2
|
143
|
FAST_COUNTER_PU
|
0
|
2
|
144
|
PÉRIODE
|
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
|
Communications entre le maître et les esclaves (ligne série)
Premier octet | Type de transmission | Transmission | Recevant |
255 (*4) | Extraordinaire étendue (pour l'expansion future) |
1 octets (extension) >>>>> consultez le tableau des verbes étendus <<<<< |
— |
254 (*1) | RecogStart Reconnaissance précoce et la numérotation |
1 octets (nombre de bytes de données = 0) 1 octets (CRC de Cmd / 0) |
— |
253 (*2) | Recon Entrez le numéro de séquence et de la demande de type |
1 octets (nombre de bytes de données = 1) 1 octets (De 0 dans 199) 1 octets (CRC de Cmd/Nbytes/Type) |
1 octets ( type de ) 1 octets ( CRC ) |
251 (*3) | FastDataExchange Échange rapide des données. |
1 octets (nombre de bytes de données = 0) 1 octets (CRC de Cmd/0) De 0 dans 60 octets de données |
De 0 dans 63 octets de données |
249 (*4) | SetupSlavePins Entrez les paramètres du une broche “esclave” |
1 octets (index de l'esclave) 1 octets (nombre d'octets de données) Octets de NN (PinTypes: 1 octets par pin) 1 octets (CRC de Cmd/SlaveId/etc...) |
1 octets (index de l'esclave) 1 octets (CRC sur octets précédent) |
248 (*4) | SetMasterName Entrez le nom de la “maître” |
Octets de NN (caractères du nom terminé par zéro) | — |
247 (*4) | GetMasterName Lire le nom de la “maître” |
— | Octets de NN (personnages de nom terminé par zéro) |
246 (*4) | SendValuesToSlave Envoi “n” octets un esclave “m” (Max 56 octets) |
1 octets (index de l'esclave) 1 octets (nombre d'octets) octets 1 . . . n octets 1 octets (CRC Cmd/SlaveId/nBytes/n) |
1 octets (index de l'esclave) 1 octets (CRC sur octets précédent) |
245 (*4) | GetValuesFromSlave Demande de “n” octets à l'esclave “m” (Max 56 octets) |
1 octets (index de l'esclave) 1 octets (nombre d'octets) 1 octets (CRC de Cmd/SlaveId/nBytes) |
octet1 . . n octets 1 octets (index de l'esclave) 1 octets (CRC sur n + 1 octet précédent) |
244 (*4) | SendBytesToSlave Envoi “n” octets à l'esclave “m” (Max 56 octets) |
1 octets (index de l'esclave) 1 octets (nombre d'octets) octets 1 . . . n octets 1 octets (CRC Cmd/SlaveId/nBytes/n) |
1 octets ( index de l'esclave ) 1 octets ( CRC ) sur octets précédent |
243 (*4) | GetBytesFromSlave Demande de “n” octets à l'esclave “m” (Max 56 octets) |
1 octets (index de l'esclave) 1 octets (nombre d'octets) 1 octets (CRC de Cmd/SlaveId/nBytes) |
octets 1 . . . n octets 1 octets (index de l'esclave) 1 octets ( CRC ) sur n + 1 octet précédent |
199 (*5) | SetSpeed | 1 octets (Comm. Vitesse) 1 octets (CRC sur Cmd-comm. Vitesse) |
— |
0 | Aucune action |
(*1) Commandes de service.
(*2) La commande est utilisée uniquement par le maître et les esclaves Recon lors de la reconnaissance.
(*3) Communication rapide – le capitaine échange les valeurs de tous les esclaves à l'aide d'un seul échange de USB
(*4) Commandes de communication pour le seul esclave
(*5) Commandes spéciales
SendValuesToSlave envoie les valeurs sur la broche de sortie d'un esclave (Formes physiques sur le capitaine ou pratiquement des esclaves)
GetValuesFromSlave lit les valeurs de l'axe de l'entrée d'un esclave (Formes physiques sur le capitaine ou pratiquement des esclaves)
SendBytesToSlave Envoyer des octets génériques (exemple de configuration), vers un esclave (Formes physiques sur le capitaine ou pratiquement des esclaves)
GetBytesFromSlave génériques octets droit (exemple d'État), d'un esclave (Formes physiques sur le capitaine ou pratiquement des esclaves)
Toutes les commandes ont des codes de 200 dans 255, afin d'éviter, en cas d'erreurs, ID et les types de l'esclave (De 0 dans 199) pourrait être interprété comme une commande. (SETSPEED ne compte pas parce qu'il n'est jamais envoyé sur la ligne série mais seulement par HAL, pour le maître, via le port USB)
Communication entre l'ordinateur hôte et maître (USB)
Comandi da “Hôte” verso “Master”
Nom de la commande | ID USB_TxData[0] |
PARAMÈTRES USB_TxData[1 à n] |
RecogStart | CommandID, | Nbytes |
FastDataExchange | CommandID, | De 0 À 60 octets de données |
SetupSlavePins | CommandID, | SlaveId, Nbytes |
SetMasterName | CommandID, | MasterName (zéro terminée) |
GetMasterName | CommandID, | – |
SendValuesToSlave | CommandID, | SlaveId, Nbytes, Octet1….ByteN |
GetValuesFromSlave | CommandID, | SlaveId, Nbytes |
SendBytesToSlave | CommandID, | SlaveId, Nbytes, Octet1….ByteN |
GetBytesFromSlave | CommandID, | SlaveId, Nbytes |
SetSpeed | CommandID, | CommSpeed |
Risposte da “Master” verso “Hôte”
Nom de la commande | RÉPONSE USB_RxData[0] |
VALEURS DE RETOUR USB_RxData[1 à n] |
RecogStart | 0 = OK | Nslaves, Esclave Type1 … Esclave, Type N |
FastDataExchange | 0 = OK | De 0 À 63 octets de données |
SetupSlavePins | 0 = OK | – |
SetMasterName | 0 = OK | – |
GetMasterName | 0 = OK | Maître nom (zéro terminée) |
SendValuesToSlave | 0 = OK | – |
GetValuesFromSlave | 0 = OK | Octets 1 … Octet N |
SendBytesToSlave | 0 = OK | – |
GetBytesFromSlave | 0 = OK | Octets 1 … Octet N |
SetSpeed | 0 = OK | – |
La position zéro de la mémoire tampon USB indique si la commande a été exécutée de “Master” avec succès.
Calcul du CRC
Tous les CRC utilisés sont calculés sur un certain nombre d'octets consécutifs et le résultat de la CRC est un octet. Calcul de CRC à l'aide d'un algorithme basé sur le « contrôle de redondance longitudinale ».
Contrôle de redondance longitudinale
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
Next
Pour éviter les « collisions » entre séquences banals ( Par exemple, 0000 = 1111 ou 123 = 321 ) et des séquences simples qui produisent des CRC valide ( Par exemple, 0000 avec le CRC = 0 ) la méthode ci-dessus est modifiée avec une permutation.
Calcul de la CRC résultat est extrêmement simple et efficace.
Calcul du CRC utilisé dans le présent protocole
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
CRC = CRC + 1
Next
Réglage du débit en bauds
Si vous décidez d'utiliser une vitesse de transmission autre que celui par défaut, puis le « maître » devrait communiquer à tous les périphériques de la chaîne la nouvelle vitesse.
Ce paramètre devrait être possible même avant d'effectuer une reconnaissance de périphériques de boucle et doit être également possible avec des lignes de transmission très long. Par conséquent, il y a une commande spéciale qui est maintenant présentée.
1 – Le capitaine maintient la ligne haute pour 50 MS
2 – Tous les esclaves sont certainement placés en attente d'un caractère
3 – Le capitaine génère une pause (ligne de niveau faible 12 bit à vitesse minimum
4 – Le maître émet un caractère 55 (01010101) le débit désiré
5 – Tous les esclaves en déduire la vitesse de transmission de cette octets (Auto-baud)
6 – Le maître envoie un octet qui spécifie la « vitesse » (De 1 dans 12)
7 – Le maître envoie un octet de CRC calculé sur deux octets (cmd/Vitesse)
8 – Si l'esclave est une erreur ne modifie pas sa vitesse
Vérifier le débit en bauds
Si vous définissez une vitesse trop élevée pour ligne de transmission à utiliser certains appareils dans la chaîne est peut-être pas capables de supporter le réglage de vitesse et des erreurs peuvent survenir lors de la transmission des données.
Si des erreurs de transmission sont zéro ou moins que la 0.1% la vitesse réglée est alors valide.
Reconnaissance et numérotation
1 – Le capitaine sorties à l'esclave, la séquence entière du paramètre « Vitesse » pour s'assurer que tous les communiquent à la même vitesse.
2 – Le maître ne transmet pas les commandes pour 50 millisecondes.
3 – À ce stade tous les esclaves devrait être en attente pour une commande.
4 – Le capitaine envoie un code "254″ (RecogStart).
5 – Tous les esclaves qu'ils mettent le faibles-pull-up (100-400 UA) sur l'entrée-sortie et ouvrir la connexion de sortie aux dispositifs en aval. Ils ne répondent plus à toutes les commandes sauf "253″ (Recon).
6 – Le capitaine envoie un code "253″ (demande de type) et puis un octet avec le numéro 0″, le premier appareil de la chaîne rencontre un octet avec son type, Supprime le pull-up, se connecter à l'esclave en aval et ne répond ne pas à toutes les commandes.
7 – Le capitaine envoie un code "253″ (demande de type) et puis un octet avec le numéro 1″, le deuxième périphérique de la chaîne rencontre un octet avec son type, Supprime le pull-up, se connecter à l'esclave en aval et ne répond ne pas à toutes les commandes.
8 – Le capitaine envoie un code "253″ (demande de type) et puis un octet avec le numéro 2"″,
9 – Le capitaine délivre vers les esclaves toutes les séquence de réglage « Vitesse », qui représente tous les esclaves en mode normal de communication.
10 – Le capitaine informe l'hôte (PC) via USB esclave reconnaît le nombre et le type de chaque.
Roberto_Cena & Livio_Cicala (2010 – 2016)