Página 1 de 1

Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 13:25
por MOR_AL
Olá pessoal.
Não podia deixar de compartilhar isso.
Estava querendo saber fazer uma comunicação entre o PC e um uC.
Para a programação no PC, escolhi a linguagem C# porque já tem muitos tutoriais e o aplicativo Visual C# Express é free e dá para fazer muita coisa com ele.
Comprei duas vídeo aulas sobre C#, C# Básico e C# Avançado. Tem um total de aprox. 70 horas de vídeo aulas. Ensina o normal direitinho, mas é voltado para o mercado como lojas, bancos etc., não para a eletrônica.
A partir daí, comecei a pesquisar sobre comunicação via porta serial em C#. Baixei muita coisa, mas cada um optava por um caminho para acessar a porta serial, gerando além de muitas dúvidas com instruções que eu não compreendia, muitas falhas na comunicação.
Comecei a estudar cada uma das opções baixadas para acessar a porta serial. Descartei as mais difíceis por não entender o procedimento e agrupei as restantes em grau de dificuldade e de sucesso no procedimento. Após muitas horas de estudo já tinha uma noção de como proceder, mas mesmo assim, ainda ficaram muitas dúvidas. Não queria simplesmente copiar e colar.
Certo dia, despretensiosamente, pesquisei em livros sobre o C#. Dentre vários deles, um me chamou a atenção. Era em português e seu nome era “Criação de Sistemas Supervisórios em Visual C# 2010 Express”. Acessei o menu e não acreditei no conteúdo. Tinha tudo o que eu procurava e mais um pouco, além do preço ser menor que outros sobre C#.
Encomendei e comprei o livro. Ele é extremamente didático e tudo muito bem explicado. O livro começava com o básico em C# e depois vai criando um aplicativo relacionado a uma conexão serial entre PC e o uC. Nos capítulos seguintes evolui para um sistema completo que transmite o dado do PC para o uC e este envia de volta para o PC. Como se não fosse suficiente, ele cria um sistema que lê no PC um valor da conversão AD do uC, cria um gráfico e ainda salva os dados em um arquivo. É um sistema SCADA (Supervisory Control and Data Acquisition).
No final do livro o autor ainda mostra como fazer uma conexão via USB.
Os firmwares são completos e feitos tanto em CCS como em C18.
Para quem se interessa pelo assunto, esse livro é excelente.
Não possuo nenhum relacionamento com o autor e nem com a editora, mesmo porque, para chegar até o livro é necessário procurar na net. A propaganda é função apenas do conteúdo e da qualidade da didática do livro. Até eu entendi quase tudo!
Boas leituras.
MOR_AL

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 16:10
por KrafT
Boa dica, MOR_AL.

Creio que seja esse: http://www.erica.com.br/detalhes.asp?cod=4087

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 21:33
por MOR_AL
KrafT escreveu:Boa dica, MOR_AL.

Creio que seja esse: http://www.erica.com.br/detalhes.asp?cod=4087

É esse mesmo, Kraft!
[]'s
MOR_AL

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 21:53
por KrafT
Eu faço uso semelhante do C# ao que você pretende Mor_Al, e lembro que a parte mais chata foi resolver a fragmentação de pacotes grandes recebidos pela serial.

O windows gera interrupções de pacotes recebidos que não estão sincronizados com o fim do (meu) pacote. Mas isso resolvido, ficou mais tranquilo trabalhar com C#, inclusive registrando os dados num banco de dados via Sql Server.

Mas para quem "aprendi" programar em Clipper Summer 87, é bem difícil se adaptar com as modernidades do C#. Dá para fazer a mesma coisa de tantas formas diferentes, que muitas vezes a busca de informações na net não é nada produtiva, pois só te dispersa mais ainda.

Acho que vou dar uma força para o autor desse livro, adquirindo-o.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 22:38
por MOR_AL
O endereço que você passou possui uma aba "Sumário" na parte inferior.
Clique lá e dê uma olhada no índice disponibilizado.
Também disponibiliza a leitura parcial de 26 páginas. Não acessei, mas se puder opte pelo início do capítulo 7 em diante.
[]'s
MOR_AL

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 22:53
por Red Neck Guy
Esse livro parece legal. Mas cabe uma ressalva aqui, não é que seja difícil programar utilizando C# ou Java qqs, o caso é que o pre-requisito para se conseguir trabalhar com essas linguagens sem utilizar de POG ou GO-HORSE é manjar de orientação a objetos. Uma vez dominada, tudo fica mais fácil.
Alias, não existe fragmentação da porta serial por parte do windows... Isso é coisa da classe SerialPort, já que o que é disparado é um evento de timeout do buffer recebido...

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 01 Set 2013 22:58
por Maffeis
Kraft, como vc fez pra resolver a fragmentação?

Parei de mexer mais ou menos nessa parte, enrosquei na parte de thread tb.

Obrigado.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 02 Set 2013 13:06
por MOR_AL
Fiz e está funcionando a parte que envia uma string para a porta serial real (não virtual) e, por meio de loop back, recebo a string transmitida.
Agora vou continuar com a comunicação serial com microcontrolador.
MOR_AL

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 02 Set 2013 14:52
por KrafT
Então, usar strings e se limitar ao ASCII "imprimível", facilita muito as coisas.

No meu caso como sou teimoso, uso formato binário e para identificar se o caractere escolhido é o STX ou dado, eu usei a técnica de "transparency check" do protocolo IrDA.

Assim não importa a fragmentação, pois o pacote já carrega a informação do seu início, tamanho e por consequência, seu fim.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 02 Set 2013 19:42
por Red Neck Guy
Olhei o sumário do livro.
É interessante.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 03 Set 2013 13:13
por Maffeis
eu consegui receber o dado pela serial calcular o crc e colocar os valores recebidos em textbox's

porém recebia 1 2 3 pacotes depois de um tempo começava a fragmentar a msg e a comunicação se perdia

tentei fazer com que o sw detectasse o tamanho da msg tipo assim tenho que receber 10 valores se receber somente 5 espera os outros 5

porém ficou meia boca outra ideia era fazer por timeout.

Oq eu que eu fiquei na duvida na época era em como eu iria fazer um sw de comunicação que eu pudesse usar em vários programas

como criar a classe corretamente.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 03 Set 2013 22:51
por Rodrigo_P_A
Depois de muitos anos... eu sempre uso o mesmo protocolo para tudo, nesse protocolo eu posso transferir o que eu quiser, do tamanho que eu quiser, sem me preocupar com fragmentação nem timeout ( *opcional )

A idéia é a seguinte: Usar caracteres coringas ( eu sei, a maioria dos protocolos usa ) mas eu faço assim por exemplo:

START -> STX -> 0x02
STOP -> ETX -> 0x03
MARK -> SOH -> 0x01

qdo for enviar, se tiver algum dos caracteres coringas no meio do frame, substituir por:
Se for STX (0x02) adicionar: 0x01 0x04
Se for ETX (0x03) adicionar: 0x01 0x05
Se for SOH (0x01 ) adicionar>: 0x01 0x06

depois do outro lado, remontar o dado, dessa forma vc pode enviar o que quiser no meio do frame.

Claro que depois de montado você adiciona CRC, contador de frames para evitar receber pacotes em sequencia errada, etc... mas a idéia é essa.

essa foi a forma mais funcional que eu encontrei, copiei a ideia do frame tcpip que faz isso, substitui caracteres especiais por marca e código e depois remonta tudo do outro lado.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 03 Set 2013 23:58
por mastk
Opa, bacana mesmo, vou comprar em breve.

Re: Sisitemas Supervisórios em C#

MensagemEnviado: 04 Set 2013 07:57
por KrafT
Então, quanto mais robusto o protocolo, menos dependente do hardware você fica.