Comunicaçao serial - microcontrolador

Olá pessoal,
Para colocar os dados na aplicação que estou montado é necessário recebe valores de uma interface serial que montei, esta manda valores como (10, 20 ou ainda 30) para efeito de teste, acontece que quero ler no meu supervisório estes valores é possível utilizando o e3, qual o drive posso usar ?

agradeço

Edy,
Qual o protocolo utilizado nesta serial?
Se for 100% ASCII e não binário, você poderá utilizar o ‘Driver ASCII Generic’ bastando configurar um RX compatível com o protocolo e utilizar um tag de recebimento de comando (N1=3). No caso de valores com dois algarismos, o RX do driver ficaria ‘%2d’.

ótimo @enrico funcionou, só necessitei mudar o “d”, pois minha necessidade serias as strings.

Aproveitando, por lógica basta só escolher o TX e o padrão da informação, para mandar valores para o microcontrolador.

Agradeço

Olá.

Estou realizando a comunicação entre o TIVA, da Texas Instruments, e o supervisório E3 usando a porta serial. A comunicação para enviar dados do TIVA para o supervisório está funcionando. Entretanto, estou com um problema para enviar dados do supervisório para o dispositivo TIVA. Implementei a função no TIVA para sempre que receber a variável ‘J’ ele receba os dados até receber o valor \h00. No driver ASCII configurei o TX=J%4u/h00 e o RX em branco, onde N1.N2.N3.N4 = 1.7.0.0. Utilizei um sniffer de porta serial para verificar a comunicação e observei que o E3 não envia ‘J’. Quando faço a comunicação entre o TIVA usando um terminal serial ele recebe os dados perfeitamente.

Estou encaminhando logo abaixo o código em C e o elog de comunicação.

Desde já agradeço a atenção.

// Código baseado no exemplo do site da elipse
void envia(char rec){
switch(rec){
case ‘J’: // caso o supervisório envie ‘J’
i=0;
do{
dados[i] = UARTCharGet(UART0_BASE); // recebe os dados pela serial
index++;
} while(dados[i-1]!=0x00); // até receber o caracter \h00
break;
}
}

28/07/2018 08:53:22.857 (170C) DRIVER Driver name: Driver ASCII Generic v2.0.2 (IOKitLib v2.0.99)
28/07/2018 08:53:22.858 (170C) DRIVER IOKitLib version 2.0.99 of May 22 2018 09:46:55
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[0].ID = 1
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[0].TX , id=1, A
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[0].RX , id=1, (02%b)03
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[1].ID = 2
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[1].TX , id=2, B
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[1].RX , id=2, (02%b)03
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[2].ID = 3
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[2].TX , id=3, C
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[2].RX , id=3, (02%b)03
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[3].ID = 4
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[3].TX , id=4, D
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[3].RX , id=4, (02%b)03
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[4].ID = 7
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[4].TX , id=7, J%4u/h00
28/07/2018 08:53:22.858 (170C) DRIVER ASCII.Target[4].RX , id=7,
28/07/2018 08:53:22.858 (170C) DRIVER drvStartComm(0,0,0,0)
28/07/2018 08:53:22.859 (170C) DRIVER Current configuration (83 parameters):
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.MaxBytes = 255
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.MaxElements = 10
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[0].ID = 1
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[0].RX = ‘(02%b)03’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[0].TX = ‘A’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[1].ID = 2
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[1].RX = ‘(02%b)03’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[1].TX = ‘B’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[2].ID = 3
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[2].RX = ‘(02%b)03’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[2].TX = ‘C’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[3].ID = 4
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[3].RX = ‘(02%b)03’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[3].TX = ‘D’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[4].ID = 7
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[4].RX = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[4].TX = ‘J%4u/h00’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[5].ID = 7
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[5].RX = ‘/h00’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.Target[5].TX = ‘J%4u/h00’
28/07/2018 08:53:22.859 (170C) DRIVER - ASCII.TotalIds = 5
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.BackupIP = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.BackupIP2 = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.BackupIP3 = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.IPFilter = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.ListenIP = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.MainIP = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.PingTimeoutMs = 4000
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.PingTries = 1
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Ethernet.Transport = ‘TCP’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.GiveUpTries = 1
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Log.Enable = 1
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Log.Filename = ‘C:\eeLogs\ASCII_%DATE%.log’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.RAS.ATCommand = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.RecoverEnable = 1
28/07/2018 08:53:22.859 (170C) DRIVER - IO.RecoverPeriodSec = 20
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Serial.Baudrate = 9600
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Serial.DataBits = 8
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Serial.Port = 3
28/07/2018 08:53:22.859 (170C) DRIVER - IO.TAPI.ModemID = 4294967295
28/07/2018 08:53:22.859 (170C) DRIVER - IO.TAPI.PhoneNumber = ‘’
28/07/2018 08:53:22.859 (170C) DRIVER - IO.TimeoutMs = 10000
28/07/2018 08:53:22.859 (170C) DRIVER - IO.Type = ‘Serial’
28/07/2018 08:53:22.859 (170C) DRIVER - 40 parameters with value = 0 were omitted
28/07/2018 08:53:22.859 (37B4) IOKIT INITIALIZING…
28/07/2018 08:53:22.859 (37B4) IOKIT INITIALIZED!
28/07/2018 08:53:22.859 (37B4) IOKIT Request handler enabled
28/07/2018 08:53:22.859 (37B4) IOKIT CONNECTING…
28/07/2018 08:53:22.859 (37B4) SERIAL Opening COM3:9600,8,NONE,1 …
28/07/2018 08:53:22.859 (0F70) TAG Tag(1.7.0.0).Validate = SUCCESS (type=10;flags=9)
28/07/2018 08:53:22.861 (37B4) SERIAL Port opened!
28/07/2018 08:53:22.861 (37B4) IOKIT CONNECTED!
28/07/2018 08:53:22.870 (170C) DRIVER Added Slave = 0
28/07/2018 08:53:22.870 (170C) TAG <== (0.010) Tag(1.7.0.0).ReadValue = (08:53:22.859) 0
28/07/2018 08:53:23.871 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:23.871) 0
28/07/2018 08:53:24.872 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:24.872) 0
28/07/2018 08:53:25.241 (170C) TAG ==> (0.000) Tag(1.7.0.0).WriteValue (08:53:25.241) 2 = SUCCESS
28/07/2018 08:53:25.241 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:25.241) 2
28/07/2018 08:53:25.241 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:25.241) 2
28/07/2018 08:53:26.242 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:26.242) 2
28/07/2018 08:53:27.243 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:27.243) 2
28/07/2018 08:53:27.504 (170C) TAG ==> (0.000) Tag(1.7.0.0).WriteValue (08:53:27.504) 3 = SUCCESS
28/07/2018 08:53:27.504 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:27.504) 3
28/07/2018 08:53:27.504 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:27.504) 3
28/07/2018 08:53:28.505 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:28.505) 3
28/07/2018 08:53:29.506 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:29.506) 3
28/07/2018 08:53:30.507 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:30.507) 3
28/07/2018 08:53:31.508 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:31.508) 3
28/07/2018 08:53:32.509 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:32.509) 3
28/07/2018 08:53:33.510 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:33.510) 3
28/07/2018 08:53:34.511 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:34.511) 3
28/07/2018 08:53:35.512 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:35.512) 3
28/07/2018 08:53:36.512 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:36.512) 3
28/07/2018 08:53:37.513 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:37.513) 3
28/07/2018 08:53:38.514 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:38.514) 3
28/07/2018 08:53:39.515 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:39.515) 3
28/07/2018 08:53:40.516 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:40.516) 3
28/07/2018 08:53:41.517 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:41.517) 3
28/07/2018 08:53:42.517 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:42.517) 3
28/07/2018 08:53:43.518 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:43.518) 3
28/07/2018 08:53:44.519 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:44.519) 3
28/07/2018 08:53:45.520 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:45.520) 3
28/07/2018 08:53:46.521 (170C) TAG <== (0.000) Tag(1.7.0.0).ReadValue = (08:53:46.521) 3
28/07/2018 08:53:46.761 (170C) DRIVER drvStopComm(0,0,0,0)
28/07/2018 08:53:46.761 (170C) IOKIT Stopping physical layer thread…
28/07/2018 08:53:46.761 (170C) IOKIT Waiting for termination of physical layer thread…
28/07/2018 08:53:46.762 (37B4) SERIAL Port closed!
28/07/2018 08:53:46.763 (37B4) IOKIT Request handler disabled
28/07/2018 08:53:46.763 (37B4) IOKIT Request handler enabled
28/07/2018 08:53:46.763 (37B4) IOKIT TERMINATING…
28/07/2018 08:53:46.763 (37B4) IOKIT TERMINATED! (0 bytes sent, 0 bytes received)
28/07/2018 08:53:46.763 (37B4) IOKIT Request handler disabled
28/07/2018 08:53:46.763 (170C) IOKIT Physical layer thread stopped!

Rodolfo,
Sugiro que você utilize um tag com N1=5, N2=0, N3=0 e N4=0. Desta forma não é necessário configurar um TX para o tag.

Com este tag você irá escrever o valor diretamente via script.
Exemplo:
Application.GetObject(“Driver1.TagCmd”).WriteEx “J” & variavel & Chr(0)

A propósito, na rotina em ‘C’, a linha “index++;” não deveria ser apenas “i++;” ?

1 Like

Muito obrigado pela resposta Enrico. Funcionou perfeitamente.

O i++ no meu código estava correto, menos mal.

Boa noite Rodolfo, estou fazendo meu tcc onde irei utilizar o microcontrolador TM4C123GXL da Texas Instruments, vi que você já esta bem avançado, poderia me dar umas dicas de como comunicar, qual driver utilizar como configurar?? ou chama no instagram @jeanstral

Boa noite @jeanstral, utilizei o driver ASCII, disponível no site da elipse. Faz algum tempo, então posso esquecer algum detalhe. A solução que utilizei pode não ser a melhor, porém resolveu o problema naquele momento. Neste projeto que tive este problema, acabei colocando o E3 para requisitar dados do TIVA. Quando o E3 envia “A” o TIVA retorna retorna uma variável específica, enviando “B” o TIVA retorna outra variável. Caso seja isto que você precise, a implementação é simples. Nas propriedades do Driver ASCII, Aba ASCII, coloquei ID:1, TX: A, RX:(02%b)03, assim ao enviar “A” ele espera receber uma pacote de dados com início em 02 e final 03, que indicam o início e fim dos dados. Adicionei uma “Tag de Comunicação” com parâmetros: P1:0, P2:1, P3:0 e P4:0. No TIVA coloquei:
void UARTCommunication(char rec){
switch(rec){
case ‘A’:
UARTCharPut(UARTBase, 0x02); // Caracter de inicio de transmissão
UARTCharPut(UARTBase, VariavelParaEnviar); // AI1
UARTCharPut(UARTBase, 0x03);// Caracter de fim de transmissão
break;
}
}
Espero ter ajudado.

Bom Dia @rodolfolv, na minha aplicação tenho um sensor de temperatura no microcontrolador, para printar no teraterm eu utilizo o codigo:
UARTprintf(“AIN7 = %4d TEMPERATURA = %d,%dºC\r”, ADC1VALUE_MEDIA,volt, dec_volt);

a variavel volt ela me mostra a temperatura
1

no elipse eu precisaria ler essa variavel “volt”, já instalei o driver ASCII qual seria o meu Tx e Rx? e os parâmetros de comunicação? e como vinculo isso na minha tag interna de temperatura?

Desde já agradeço
Se puder me chama no whatsapp (54)99161-5866