Jump to content
sá

controle horario com s7 314ifm

Recommended Posts

sá

boas pessoal

gostaria de fazer o controle do meu aquecimento e estores com um cpu da siemens 314

tenho tentado e não consigo

alguém me pode dar algumas dicas?

Share this post


Link to post
Share on other sites
Dotinho

Claro, mas tens que dizer algumas duvidas ou sugestões? como tas a pensar fazer o controlo? queres painel ou controlo remoto tipo infravermelho?

O básico, um cpu 314, uma carta DI 16x24V e outra DO 16x24V, penso que seja suficiente...

Depois é uma questão de optares por relógio horário no cpu ou sensor crepuscular.

Em relação ao aquecimento, podes usar termostato regulável e usar uma entrada digital no autómato, ou sempre podes comprar uma carta para ler sondas de temperatura, e por ai controlares bastante facilmente a temperatura...


Luis Lourenço

Share this post


Link to post
Share on other sites
sá

eu o material já tenho cpu e as cartas di do ai ao

eu não consigo é fazer o codigo para o controle horario

Share this post


Link to post
Share on other sites
nokPT

É recomendável que acertes a hora e data do autómato, para isso no Simatic Managerm vais a PLC->Diagnostics & Settings->Set PLC Clock.

Depois, numa FC (ou FB) crias uma variável temporária tipo Date_And_Time, a seguir na mesma FC metes a função SFC1 (READ_CLK) e no CDT metes as variável temporária que criaste, no RET_VAL, podes meter qualquer coisa que é mais ou menos lixo (é um código de erro se existir erro). Neste momento já tens o valor da data e hora, mas ainda não podes usar, para isso, vais às Bibliotecas Livraries->stdlibs->iec e copias FC6 (DT to Date), FC7 (DT to DAY) e FC8 (DT to TOD) para o teu projecto, depois usa-as para retirar os dados que queres da variável temporária que crias-te.

Depois de introduzires a SFC1, podes selecciona-la e carregar em F1, tem lá um exemplo em STL.

Também podes escrever no relógio o SFC0.

Outra questão, que pode não ser importante para o que vais fazer, mas também pode, depois de retirares os valores da Data e Hora para as memórias M ou para uma DB, imagino que vais comparar, com o que queres, por exemplo:

se Hora = 20 então, ligar as luzes

se Hora = 7 e Minutos = 30 então desligar as luzes.

Em todas as comparações deves usar flancos (positivos), para só dar a ordem uma vez, se não usares os flancos, no 1º exemplo que dei acima, a ordem para ligar as luzes vai durar das 20:00:00.000 até às 20:59:59.999 ou seja a hora toda, se nessa hora quiseres apagar as luzes (ordem numa consola ou no computador) não vais conseguir (ou melhor consegues por breves milisegundos).


Ricardo Timóteo

Share this post


Link to post
Share on other sites
sá

pois não tou a conseguir colocar os endereços nos comparadores

que tipo de comparadores devo utilizar

desde já agradeço o vosso apoio

Share this post


Link to post
Share on other sites
nokPT

Estás a usar a memória ou uma DB?

Partindo do principio que estás a programar em Ladder (ou FBD) no explorador de instruções, tens Comparator->EQ_I ou EQ_D ou EQ_R (entre outros), se usas o I (é o que faz mais sentido) tens que meter o endereço de uma Word, porque um Inteiro usar 16 bits. Provavelmente estás a tentar meter endereço de 1 Byte.


Ricardo Timóteo

Share this post


Link to post
Share on other sites
nokPT

Com o EQ_D estás a fazer comparações com DoubleWords, para ele te aceitar o endereço tens que meter por exemplo MD0

As DoubleWords além de ser um número muito grande (não tens essa necessidade vai desde +2.147.483.647 até -2.147.483.648) e tem o problema de over-lapping, ou seja, na Siemens a stack de memória é de 8 bits (1 byte), uma doubleword usa 4 bytes, se endereçares a MD0, na realidade estás a usar a MB0+MB1+MB2+MB3, a próxima variável DW será MD4 (MB4+MB5+MB6+MB7), se não tiveres esse cuidado e meteres MD0, MD1, ... os valores vão-se destruir uns aos outros (MD0=MB0+MB1+MB2+MB3 e MD1=MB1+MB2+MB3+MB4 o bytes 1, 2 e 3 estão a ser usados pelos 2 números).

O mesmo problema (over-lapping) acontece com os números inteiros porque usam 2 bytes (1word) podes usar o MW0 (MW1=MB0+MB1) e o MW2 (MW2=MB2+MB3), se usares o MW0 e o MW1, está outra vez a destruir valores.

Para não teres esse problema de over-lapping, eu recomendava-te que criasses uma DB (tipo shared, é o default), e nessa DB criasses as diferentes variáreis (tipo int, preferencialmente), é muito fácil, é só criares uma tabela com o nome da variável (Ano, Mês, Dia, Hora, Minuto, Segundo, etc...) e o tipo de variável (podes acrescentar comentários se quiseres), depois gravas a DB (e podes editar o symbólico, por exemplo para DeT) e a partir da Função acedes à variaveis deste genero: DeT.Ano (ou DBx.DBW0) ou seja separas a DB e a variavel por um ponto (.)

Tens que ter 1 cuidado, quando crias uma função (ou DB) nova, as que estão abertas no editor não conhecem, tens que gravar tudo para começarem a conhecer, ou fechar as funções abertas e voltar a abrir, se não dá-te um erro estúpido.


Ricardo Timóteo

Share this post


Link to post
Share on other sites
sá

obrigada pela tua explicação, mas ainda não tive tempo para ver se consigo fazer isso

o + provavél é não consegir nada

Share this post


Link to post
Share on other sites
nokPT

OK, com calma, a parte da DB e da conversão está explicado no suporte da Siemens:

Extrair e converter a Data e Hora do S7-300/400

Mas de qualquer maneira, por partes, fiz um pequeno exemplo:

Criei a DB1 com a estrutura da Data e Hora:

* Ano - Int

* Mes - Int

* Dia - Int

etc...

Criei a FC1 para Ler e Converter a Data e Hora para a DB1. Nesta FC uma parte está em STL, foi tirada do link que está a cima com as devidas correcções.

Criei a FC2 para comparar a Data e Hora com o que queres, é um pequeno exemplo, está em FBD para caber na imagem

Criei ainda uma DB2 para os flancos em vez de usar memórias do autómato, mas é igual

Como uma imagem vale mais que mil palavras, aqui tens:

Imagem com as DBs e FCs


Ricardo Timóteo

Share this post


Link to post
Share on other sites
sá

as imagens estão muito bonitas mas a parte de stl não entendo

peço desculpa mas sou novato, mas gosto de aprender

obrigada mais uma vez pela vossa desponibilidade

Share this post


Link to post
Share on other sites
nokPT

Na imagem falta uma coisa, no teu deve aparecer eu é que reduzi a área, em cima tens uma área para declarar variáveis locais, abres a parte que diz Temp e crias uma variável DataHora tipo DT, a partir daí é só copiares o que escrevi em STL e deverá funcionar.


Ricardo Timóteo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.