Página 1 de 1

Essa e Para Feras (STX/ETX) help

Enviado: 26 Jan 2006 18:26
por managercorp
Bem Pessoal, antes de mais nada parabens pelo sucesso do Forum, ai vai uma daquelas duvidas cabeludas que param a vida de um programador por conta de um cliente.

Preciso enviar uns comandos para a porta serial do micro, ate aqui tudo bem, pois ja faco isto com outras aplicacoes, o problema e enviar o que o manual da telefonia esta solicitando.

Para voces entederem melhor o caso e o seguinte, a central telefonica tem a opcao de atraves de um arquivo texto ou outro qualquer eu escrever uns comandos atraves da porta serial, para ela bloquear ou desbloquear um determinado ramal. abaixo vou relatar o que a central pede no manual.
Sim, outra coisa antes de eu expor o caso, vou logo disendo que faco isto atraves de um programinha em delphi e atraves de outro que vem na propria central, ambos sao um simples programinha EXE, o problema e que nao tenho os fontes de nenhum deles. Bom ai vai os dados.

CARCTERISTICA DO ENLACE FISICO
RS 232C;
ENLACE ASSINCRONO
VELOCIDADE 9600
DUPLEX TOTAL
CODIGO ASCII
FORMATO DE CARACTERES
1 START BIT
BIT DE 8 CARACTERES
1 BIT DE PARIDADE
S STOP BIT
CONTROLE DE FLUXO XON-XOFF
--------------------
TODAS AS MENSAGENS DE DIALOGO SAO CONFIRMADAS PELO ACK,NACK, ELAS SAO PRECEDIDAS POR UM STX SEGUIDO PELA DISCRIMINACAO DA MENSAGEM E TERMINADA POR UM CRC E ETX(FIM DE MENSAGEM)
----------------------
FORMATO DA MENSAGEM:
STX C MMMMM CRC ETX
STX=1 CARACTERE
C= 1 CARACTERE
MMMM=10 CARACTERES
CRC=2 CARACTERES
ETX=1 CARACTERE
-----------------------
O DIALOGO E EFETUADO ULTILIZANDO UM SISTEMA DE MENSAGEM SINCRONIZADA ENTRE A CENTRAL TELEFONICA E O COMPUTADOR
-----------------------
EXEMPLO DE COMO BLOQUEAR UM RAMAL

C=CODIGO DO BLOQUEIO QUE E A LETRA (D)
NNNN=NUMERO DO RAMAL

NO CASO FICARA ASSIM

STX,C,NNNN,CRC,ETX

QUE NA PRATICA SERIA PARA BLOQUEAR O RAMAL 1210 SERIA ASSIM

(NAO SEI 1)D1210(NAO SEI 2)(NAO SEI 3)

O NAO SEI 1 SERIA O -> STX
O NAO SEI 2 SERIA O -> CRC
O NAO SEI 3 SERIA O -> ETX

ALEM DE EU NAO SABER ESTES TRES ITENS QUAIS SERIA EM ASCCI, TAMBEM NAO ENTENDI O QUE SERIA O ACK E O NACK ?

----------- RESUMO ---------
NAO QUERO SABER COMO ESCREVER NA PORTA SERIAL, POIS ISTO EU JA SEI, PRECISO SABER E COMO ESCREVER O QUE O MANUAL PEDE.
NO MEU CASO SAO O ETX,CRC,ETX,ACK E O NACK ??????

Alexandre Pessoa
solucoeshotel@hotmail.com ou alexandre@managercorp.com.br
81-9615.2319

Enviado: 26 Jan 2006 20:52
por vagucs
Alexandre,

Este caracteres são caracteres de controles antigos que geralmente os equipamentos seriais usam para poder controlar os dados que estão sendo enviados, são marcadores de onde a informação começa e onde ela termina.

Se pegar o NG do clipper e pedir para ele exibir a tabela ASC vc vai ver os valores dos iniciadores e terminadores de comunicação direta, isso é um padrão muito usado para alguns hardwares por ser simples e eficiente.

STX = CHR(2)
ETX = CHR(3)
ACK = CHR(6)
NACK = CHR(21)

STX C MMMMM CRC ETX

Seri mais ou menos
STRING=CHR(2)+DADOS+CRC(DADOS)+CHR(3)
Enviando para o equipamento ele retornará sempre ACK se tudo ocorreu certo e NACK se houve algum erro e o comando nao foi processado.

O CRC pode ser a conta dos valores de cada byte que vc está enviado menos STX e ETX, tem que verificar o manual, vc tem que somar cada byte e transforma em um valor Binário de 16 bits, ou seja, composto por 2 digitos. Exemplo.

Código: Selecionar todos

FUNCTION CRC(DADOS)
Local crc,i
crc=0
for i=1 to len(DADOS)
   crc+=asc(substr(dados,i,1))
next
return i2bin(crc)
Isso acho que ja vai te dar uma luz, e so acompanhar a documentacao e fazer o que pede la agora.

Enviado: 26 Jan 2006 22:37
por rochinha
Amiguinho

Pra reforçar seus conhecimentos e agregandos aos do Vagner:

Protocolos e controle de erros

Paridade

O controle de erro por paridade consiste na adição de um bit de controle a cada símbolo ou conjunto de símbolos transmitidos. Se a paridade for definida como par, o bit de controle é setado em 0 ou 1 de forma que a quantidade de bits em 1 resulte par, e se for definida como paridade ímpar, de forma que resulte ímpar. Este método permite detectar erros em um único bit, mas quando mais bits apresentarem erros, estes podem não ser detectados.

O método que consiste na adição de um bit de controle para cada caracter transmitido é chamado de verificação de redundância vertical (VRC - Vertical Redundancy Checking) ou paridade vertical. A verificação ao final de cada bloco como se fosse transmitido um caracter extra ao final de cada bloco é conhecida como verificação de redundância longitudinal (LRC - Longitudinal Redundancy Checking).

A utilização desses dois métodos em conjunto (VRC + LRC) é chamada de paridade combinada. Isso possibilita a formação de um BCC (Block Check Character). Quando a mensagem chegar ao seu destino, o equipamento receptor calcula o novo BCC a partir dos bits recebidos e comapara-o com o BCC recebido ao final da mensagem (calculado pelo equipamento transmissor).

Echoplex

Echoplex é uma técnica no qual o receptor envia de volta (ou ecoa) cada caracter à medida que são recebidos. Quando um caracter ecoado é recebido em erro pelo remetente original, não é possível saber se os dados foram recebidos corretamente no destino e misturados no caminho de retorno, ou se eles foram recebidos com erro pelo receptor. De qualquer forma, alguma informação de erro chega ao transmissor.

Xmodem

Desenvolvido por Ward Christensen é um esquema simples de verificação de erros para a transferência de arquivos entre microcomputadores. Ele exige que um computador seja definido como transmissor e o outro como receptor. Após a inicialização do protocolo, o transmissor espera que o receptor envie um caracter NAK (Negative Acknowledge), enquanto o receptor é definido para enviar NAKs a cada 10 segundos. Quando o transmissor detecta o primeiro NAK, ele começa a enviar mensagens como blocos de 128 caracteres de dados, junto com alguns caracteres de controle de protocolo. O início de cada bloco é assinalado por um caracter SOH (Start Of Header). Um conjunto de 128 caracteres do arquivo é enviado seguido por um total de verificação que corresponde ao resto da divisão por 255 da soma do valor de cada caracter ASCII enviado, ou seja:

Total de verificação =

R [(valor C1 + valor C2 + ... + valor C128) / 255]


Onde R é o resto da divisão.

Número de caracteres recebidos = 128
O primeiro caracter = SOH
O número de bloco = número do bloco anterior +1
Total de verificação calculado = total de verificação recebido no bloco
Se o receptor ficar satisfeito, ele enviará um ACK de volta ao transmissor, caso contrário será enviado um NAK para que o transmissor reenvie o bloco que apresentou erro.

Uma das desvantagens deste protocolo half-duplex é que o bloco n+1 não pode ser enviado enquanto o bloco n não for confirmado. Também não consegue detectar rajadas de ruídos de curta duração, com 10 milisegundos ou menos (equivalente a 12 bits a 1200 bps).

Quando o Xmodem foi desenvolvido, nos anos 70, um bloco de dados do tamanho de 128 bytes era provavelmente um tamanho razoável em relação à qualidade da linha, pois o aumento do tamanho de bloco resultaria na retransmissão de mais caracteres caso fosse detectado um erro. Entretanto, atualmente o uso de fibras óticas permite cabos com dezenas de milhares de quilômetros, sendo que estas não sofrem interferências eletromagnéticas. Desta forma, este protocolo tornou-se ineficiente.

Xmodem/CRC

Esse protocolo é igual ao protocolo Xmodem, exceto pelo fato de que o total de verificação é substituído por um CRC gerado por polinômio. Como o uso de um CRC fornece um nível de detecção de erros mais alto que o total de verificação, esse protocolo reduz a probabilidade de um erro não detectado.

Xmodem/1K

O Xmodem/1K é essencialmente um protocolo Xmodem/CRC que utiliza blocos de dados de 1024 bytes (1 KB). Para a maior parte das transmissões, esse protocolo reduz o tempo de transmissão em comaparação com o Xmodem ou Xmodem/CRC, pois o tamanho de bloco maior reduz tanto o número de percursos de ida e volta na linha, quanto o número de vezes que o dispositivo transmissor tem que esperar por uma resposta antes de enviar o próximo bloco ou retransmitir o anterior.

Xmodem/G

Este protocolo é semelhante ao Xmodem/1K, exceto pela falta do recurso de detecção e correção de erros. Este protocolo leva em consideração que a maioria dos modems já tem embutido o recurso de detecção e correção de erros. Isso torna o Xmodem/G um protocolo de fluxo, onde os blocos de 1KB são enviados um após o outro.

Ymodem

Diferente do Xmodem e de suas variações, as quais se limitam à transferência de um único arquivo, o Ymodem admite a transmissão de vários arquivos. Como este protocolo admite incluir um grupo de arquivos em um lote para transmissão, alguns programadores referem-se a ele como Ymodem "batch".

O Ymodem substitui o caractere SOH usado pelo Xmodem por um caracter STX (Start of Text). Esse caracter informa o receptor que o blococontém 1024 caracteres. O Ymodem pode alternar para um bloco de 128 caracteres de dados, substituindo o caractere STX pelo caractere SOH. Ele faz isso automaticamente quando o uso de um ou mais blocos de 128 caracteres é mais eficiente que o uso de um único bloco de 1024 caracteres.

Uma segunda diferença entre os formatos de blocos do Xmodem e do Ymodem está relacionada com o campo do número de bloco. Diferente do Xmodem, que começa com a numeração dos blocos em 1, o Ymodem admite o bloco número 0, um bloco especial usado para transportar o nome do arquivo, a data da última modificação e seu comprimento.

Outra diferença importante é que o Ymodem contém 2 byets de dados para o CRC, portanto com a capacidade de transportar um polinômio de 16 bits em lugar do total de verificação de 8 bits do Xmodem.

Ymodem/G

O Ymodem/G pode ser considerado uma versão de transferência em lotes do Xmodem/G, ou seja, transmite dados de um arquivo após outro em blocos de dados de 1024 bytes (1 KB), sem proporcionar detecção e correção de erros. Este protocolo assume que a tarefa de detecção e correção de erros fica a cargo do modem.

WXmodem

O WXmodem é um protocolo full-duplex que permite a transmissão de até 4 blocos de dados Xmodem de 128 bytes antes de exigir um reconhecimento. Esse protocolo utiliza um CRC para verificação de erros e foi desenvolvido para uso em redes de comutação de pacotes. Entretanto não admite a transmissão de vários arquivos.

Zmodem

O Zmodem é um protocolo full-duplex que admite a transferência de blocos de dados de 128 e 1024 bytes. Diferente dos protocolos anteriores, o Zmodem faz variar o tamanho do bloco de acordo com a qualidade da linha, determinada pelo número de pedidos de retransmissão recebidos. Ou seja, para uma linha de má qualidade com um grande número de pedidos de retransmissão, o Zmodem utiliza blocos de 128 bytes porque o pequeno tamanho de bloco requer a retransmissão de menos caracteres quando ocorre um erro. Além disso, o Zmodem permite que uma transferência de arquivo interrompida seja reiniciada a partir do ponto de falha.

O Zmodem admite a verificação de erros por CRC convencional e extendida. A verificação extendida do CRC resulta na geração de um CRC de 4 bytes (32 bits) e reduz a probabilidade de erro não detectado a menos de 1 em muitos milhões de caracteres.

Sealink

O protocolo Sealink foi desenvolvido pela System Enhancement Associates para minimizar o efeito dos ertardos sobre os dados transmitidos por uma rede de comutação de pacotes. Utiliza blocos de 128 bytes com CRC e admite que até 6 blocos sejam enviados antes do reconhecimento ser exigido.

Kermit

Este protocolo half-duplex com nome de um personagem de cartoon, foi desenvolvido para a transferência de arquivos entre microcomputadores e mainframes, possibilitando trabalhar com os caracteres de controle ASCII e o caractere de exclusão.

Este protocolo foi aperfeiçoado e hoje é full-duplex,admitindo blocos de tamanhos variáveis até 1024 bytes.

Protocolo Suporte em lote Tamanho do bloco Deteção e correção de erros Modo de transmissão
Xmodem Não 128 Total de verif. Half-duplex
Xmodem/CRC Não 128 CRC Half-duplex
Xmodem/1K Não 128 ou 1024 CRC Half-duplex
Xmodem/G Não 128 ou 1024 Nenhum Half-duplex
Ymodem Sim 128 ou 1024 CRC Half-duplex
Ymodem Sim 128 ou 1024 Nenhum Half-duplex
WXmodem Não 128 CRC Full-duplex
Zmodem Sim 128 ou 1024 CRC Full-duplex
Sealink Sim 128 CRC Full-duplex
Kermit Sim 1024 Total de verif.
CRC Half-duplex
Full-duplex

@braços :?)