Página 1 de 1

Integração PIC x CLP

MensagemEnviado: 14 Abr 2009 18:41
por ivan
Boa tarde,

Preciso enviar 14 bits para um CLP Mitsubishi.
Só tenho uma entrada disponível. Então gostaria de outras opiniões para a solução do prob.

Fiz o seguinte:

No pic, envio os bits atraves de sinais alto(1) e baixo(0) em pulsos com a largura de 1msec aprox. Para iniciar a transmissão, recebo do CLP um pulso em uma entrada do PIC e na borda de descida desse pulso dou um delay de +- 0.8 msec e começo o envio dos bits.

No CLP, criei uma rotina de interrupção por tempo a cada 1msec e vou armazenando a leitura de X7 em memórias contiguas.
É a maneira mais fácil de fazer, com menos possibilidade de erro ou vcs conhecem uma forma melhor?

Obrigado,
Ivan

Re: Integração PIC x CLP

MensagemEnviado: 14 Abr 2009 23:05
por Renie
Olá Ivan,

Não rola usar I2C?

Pode ser implementado por soft (nota: não conheço o esquema do CLP!)!

[]'s
Renie

MensagemEnviado: 15 Abr 2009 08:28
por MOR_AL
Olá Ivan.
Como o Renie, eu também não conheço o esquema do CLP.
Uma vez tive que ler uns bits através de um canal (serial) e resolvi usando um código simples e que não precisa de precisão no tempo. Como sua taxa de transmissão parece bem baixa, acredito ser esta uma opção bem simples.

É o seguinte.

1 - Mantenha a saída do PIC em nível lógico "1".
2 - Gere no PIC um sinal com um período T de sua escolha. Este sinal possui um período Toff e outro Ton, nessa ordem. Logo T = Toff + Ton.
2 - Quando o bit a ser transmitido for "1", o período Toff = 10% de T, e quando bit a ser transmitido for "0" , o período Toff = 90% de T.

-------_____________________________-------------- (bit "0")
........0......................0,5T........................0,9T...T


-------____------------------------------------------------- (bit "1")
........0...0,1T.............0,5T.................................T


3 - Faça o CPL trigar na transição negativa do sinal e lê-lo após um período de 0,5 T.
4 - Durante a transmissão sempre haverá uma transição negativa a cada período T (esta é que fornece o instante do sincronismo)
5 - O final da transmissão poderá ser considerado quando não houver transição negativa durante um período de 2T (ou quando faltar uma transição negativa). Você pode aumentar este período, para evitar erro devido a ruído.
6 - Fim.

Se houver problema de ruído, você poderá criar redundâncias. Ou repita o valor do byte n vezes e escolha o byte que teve maior repetições, ou leia o bit em 0,2T, 0,3T, 0,4T, ..., 0,7T e 0,8T. O bit escolhido será o que apresentou maior repetibilidade.

Simples?

MOR_AL

MensagemEnviado: 15 Abr 2009 11:46
por ivan
Fála Renie,

E o novo churras? Qdo? Onde eu sei!

Bem, I2C leva em conta um protocolo - nunca usei mas penso q sim, se estiver errado, me corrijam! - do lado do CLP é meio complicado fazer lógica complexa com a porcaria do Ladder(linguagem). Tô apanhando a rôdo pra depurá-lo!
Êsse CLP tem entradas digitais a transistor, se não me engano - tenho q ver no manual -, e saídas digitais a relé. Tem comunicação RS232 e RS422 tb.
Para simplificar estou usando uma entrada digital pra receber o trem de 16 pulsos, como descrevi lá em cima. SW simples no PIC e no CLP(Argh!) tb.

Estive falando com um amigo q sugeriu usar um MAX232 na saída do PIC e fazer um comunicação a 3 fios. Simples, mas tenho q aumentar HW do PIC. Vou analisar...
Nessa conversa identifiquei q estou usando a entrada errada, tenho q mudar a entrada X7 para a X0(oito entradas digitais) que é a entrada apropriada para a frequência em questão(1Khz).

MOR_AL,

Tudo bem?
Essa opção q vc sugeriu, vou colocá-la como o próx teste a ser feito caso continue com o prob de comunicação. Não tem prob de ruído pq é um protótipo didático a ser usado na Faculdade de Automação Industrial.


Vou fazer a modificação da entrada no SW hoje e testarei a partir de amanhã. Posto os resultados depois.

Link do Manual do Hardware JY992D93101-F 3.14MB PDF:
http://www.meau.com/functions/dms/getfi ... 0207600000

Página com os Manuais de toda a série
http://www.meau.com/eprise/main/sites/p ... anualType=

Obrigado!

MensagemEnviado: 15 Abr 2009 16:18
por rodrigoadachi
Ola Ivan,

O PLC que vc usa não tem uma RS232(serial)?

O PIC tem uma por hadware que poderia se comunicar cm o PLC.

MensagemEnviado: 15 Abr 2009 23:00
por ivan
Oi Rodrigo,

Infelizmente o PIC16F628 já está com todos os pinos utilizados, pois são lidos os estados de 14 sensores, + o VDD, o VSS, o pino INT0(entrada de sinal vindo da CLP - start da comunicação) e a saída para o CLP. Não pretendo mais mexer no hardware, a menos q seja estritamente necessário.
A partir do start proveniente da CLP o PIC envia os estados dos 14 sensores para a CLP.

Obrigado.

MensagemEnviado: 15 Abr 2009 23:34
por guest2003
Usa o pino de reset como input (MCLR pode ser configurado para interno)

Ai faz a coisa sincrona... o MCLR passa a ser o seu CLK in e conforme o CLP bimba o PIC ele devolve os dados no pino de INT... tranquilo...

[]'s

MensagemEnviado: 18 Abr 2009 09:00
por ivan
Guest,

A principio fiz o vc q sugere, porém no INT0(in) x RB1(out 14 bits).

Estou verificando a forma de onda da sáida RB1 no osciloscópio para então interligar os PIC x CLP.

Valews.