7E1 a 8N1 ... Paridad Dudas de bit

1

Tengo dudas en la relación entre 7E1 y 8N1. Suponiendo que estoy transmitiendo un envío de caracteres entre un cliente y un servidor; el cliente envía con 7 bits y 1 bit de paridad par (7E1) y el servidor debe responder a la misma información cambiando a 8bits sin bit de paridad (8N1), cómo ocurre la conversión. Tengo un ejemplo, pero parece que no entiendo cómo sucedió la conversión. Aquí está el ejemplo Estoy transmitiendo desde el cliente: "06H 02H 05H 02H 0DH OAH" (7E1) El servidor responde: "06H B2H 35H B2H 8DH 0AH" (8N1).

¿Cómo pudo el servidor responder con tales caracteres en 8N1 desde 7E1 que recibió?

Gracias.

    
pregunta Paul A.

4 respuestas

1

La paridad y la cantidad de bits transmitidos se controlan mediante la configuración del dispositivo UART (receptor / transmisor asíncrono universal) en cada pieza del equipo. Este componente convierte los datos escritos en él (generalmente) en un formato paralelo a la corriente de bits de datos que se envía en serie entre el cliente y el servidor (en su ejemplo).

Para transmitir en 7E1, el UART está configurado para ignorar el MSB y luego agregar el bit de paridad como el último bit de datos transmitidos dando 8 bits de datos transmitidos. En 8N1 el UART transmite los 8 bits de datos. Por convención, los datos se transmiten primero a LSB.

Mirando sus datos, sospecho que donde ha escrito B realmente quiere decir 8 (esto encajaría con los modos de transmisión de datos especificados).

Al transmitir los datos a través de un enlace 7E1, los 8 bits transmitidos para sus datos serán

Data   Parity Transmitted byte
 06      0       0x06
 02      1       0x82
 05      0       0x05
 02      1       0x82
 0D      1       0x8D
 0A      0       0x0A

¿Las tres representaciones ASCII de los bytes del medio de los valores que ha declarado en su pregunta (2 - > 0x32, 5- > 0x35)? Si este es el caso, los datos recibidos coincidirán con los datos transmitidos con la adición de un bit de paridad.

Data   Parity Transmitted byte
 06      0       0x06
 32      1       0xB2
 35      0       0x35
 32      1       0xB2
 0D      1       0x8D
 0A      0       0x0A
    
respondido por el uɐɪ
1

¿Por qué hay una discrepancia entre el protocolo del cliente y el del servidor? Eso no tiene sentido. Por cierto, la paridad es una reliquia antigua que casi no se usa hoy en día.

Sin embargo, tenga en cuenta que 8N1 es un superconjunto de 7E1. En el protocolo 7E1 (7 bits de datos, paridad par, 1 bit de parada), el bit de paridad es dictado por los otros 7 bits. Realmente solo puedes enviar 7 bits de información a cada personaje. En el protocolo 8N1 (8 bits de datos, sin bit de paridad, 1 bit de parada), el remitente controla los 8 bits. En ese caso, el remitente podría elegir emular 7E1 en el software completando el bit de paridad de forma apropiada.

    
respondido por el Olin Lathrop
1

Los modos de siete bits con paridad tienen el mismo encuadre que los modos de 8 bits sin paridad; la única pregunta es qué sucede con el octavo bit (vale la pena señalar, por cierto, que algunos UART admiten modos de 7 bits solo con paridad, y modos de 8 bits solo sin, ya que el hardware fundamental está diseñado para 8 bits de datos). Los dispositivos que envían datos de 8 bits tienen que hacer "algo" con el octavo bit en la transmisión: pueden configurarlo, borrarlo o hacer que dependa de la paridad de los siete bits restantes, pero algo tiene que desaparecer. Alambre durante ese poco tiempo. Por otro lado, no hay nada que diga que los dispositivos tienen que hacer nada con todos los bits de datos que reciben. Muchos dispositivos simplemente ignorarán el MSB de los datos entrantes. Otros intentarán usarlo para deducir si deberían hacer algo con la parte superior de los datos que devuelven.

Un módem que usa comandos Hayes® generalmente buscará caracteres "AT" consecutivos para determinar la velocidad en baudios y la configuración de paridad para usar con la transmisión. Se elige la "A" porque comienza con "1010" en la línea (incluido el tiempo de inactividad anterior), que proporciona intervalos alto y bajo de un bit de ancho. Los cinco ceros consecutivos no pueden aparecer en ningún dato válido que se envíe al doble de la velocidad de datos o superior. La "T" debe tener su bit de paridad en el estado opuesto a la "A" si se usa la paridad. Una vez que el módem ha recibido el "AT", ignora los bits de paridad en otros bytes entrantes, pero hace que su propia transmisión saliente coincida con los caracteres "AT" que recibió.

    
respondido por el supercat
0

¿Implementas el modo E de IEC62056-21 llamado HDLC / DLMS?

La secuencia de entrada es 06 B2 xx B2 8D 0A.

El xx para las tasas de transmisión solicitadas:

300: 30

600: B1

1200: B2

2400: 33

4800: B4

9600: 35

19200: 36

38400: B7

57600: B8

115200: 39

¡Prepárate para lo que pueda pasar! El estándar actual (11º) es incompatible con versiones anteriores (por ejemplo, 2º). Se cambió el significado de algunos códigos y los datos estándar pueden tener un significado diferente de medidor a medidor. Por ejemplo, 1-1: 1.36.0 * xx - xx = período de facturación según las versiones 1 a 9 y umbral múltiple según 11. Además, el 62056-21 define la velocidad en baudios de la secuencia de apertura como 300. El DLMS define diferente. Consulte la clase de configuración de puerto local IEC. El default_baud siempre será enum (0) y el campo no existirá.

Parte de los medidores no necesitan ingresar al modo 62056-21. Además, parte de los medidores no lo admiten.

La verdad: el DLMS no es un verdadero estándar. Es casi estándar. Como el idioma inglés: los chinos hablan inglés. La gente eslovaca habla inglés. Eslovaco no puede entender el chino y el chino no puede entender el eslovaco ... a través del idioma inglés ...

Necesitamos más estándares para ser felices. Más idiomas.

    
respondido por el 0-0ːC.C.C ̇ P

Lea otras preguntas en las etiquetas