La comunicación se realiza a una velocidad de 38400 Baudios, sin paridad, y con 8 bits de datos y 1 bit de 'stop', o sea, '38400N81'. Se utiliza el siguiente protocolo:
La definición de los comandos es como sigue:
Inicialización
PC -> Módulo | Módulo -> PC |
|
|
|
|
Paquete de inicialización: <ch> es el código de identificación que el módulo tendrá que utilizar como el propio. | El módulo retransmite el paquete de datos, con el código de identificación incrementado en 1 (y la suma de control corregida). De esta forma, el próximo módulo lo interpretará como comando de identificación. |
Envio de comando (excitación)
PC -> Módulo | Módulo -> PC |
|
|
|
|
Paquete de 'comando': el valor de cm será utilizado para la entrada del sistema a controlar, por ejemplo la intensidad de la fuente de luz, o la velocidad del motor. | Paquete de confirmación: el mismo de entrada, sin el valor de comando. |
Pedido de medición
PC -> Módulo | Módulo -> PC |
|
|
|
|
Paquete de 'pedido': el módulo tiene que responder con el valor de salida del proceso, por ejemplo, la medición de la intensidad de la luz o medición de temperatura. | Paquete de resultado: el mismo de entrada, pero contiene el valor de la medición pedido. |
Algunas aclaraciones sobre los códigos usados:
Código | Descripción |
C0 | Código de inicio y terminación de paquete (Hex 0xC0) |
s1 s2 s3 |
Códigos de comando. La 's' indica el 'canal interno' en módulo:
cada módulo está previsto (aunque no implementado todavía) para
controlar varios procesos simúltaneamente. El número del canal
está codificado en los 4 bits superiores. (s=0, s=1, s=2: Entradas analógicas. s=4: medidor de velocidad para el motor) |
ch | Número del módulo a controlar |
cs | Suma de control. La suma de todos los bytes, excepto los 0xC0 iniciales y finales, tiene que dar 0xFF. Nota: Esto es sin los códigos de escape! |
cm | Valor del comando (0 - 255) (excitación) |
md | Valor de respuesta (0 - 255) (medición). |
Un obervador atento habrá detectado una falla en el diseño de este protocolo: Qué pasa cuando uno de los datos enviados es actualmente 0xC0? En este caso sería imposible de sincronizar correctamente. Para esta caso existe un sistema con secuencias de escape.
(c) John Coppens ON6JC/LW3HAZ | correo |