Translate

sábado, 12 de outubro de 2013

Programação em batch

E aí galera, dessa vez eu venho com algo simples, porem,  inesperado ...

Programação em batch. Para quem não sabe, .bat é uma extenção de arquivo que executa algo no sistema operacional do Windows; só para esclarecer, podemos afirmar de uma forma grosseira, que o WIN é uma maquiagem do DOS.

Neste linguagem vamos perceber vários comandos que se assemelham com o DOS, por exemplo: cd.. , dir e outros.

É muito fácil criar um arquivo executavel em batch, basta escrever o programa em um bloco de notas (notepad), e salvar como substituindo a extenção do arquivo de .txt para .bat.

Veja o exemplo abaixo:

teste.txt ficaria teste.bat

Agora vejamos alguns comandos listados abaixo:

Para obter mais informações sobre um comando específico, digite: nome_do_comando /?

ASSOC - exibe ou modifica associações de extensäes de arquivo.
AT - agenda comandos e programas para serem executados em um computador.
ATTRIB - exibe ou altera atributos de arquivos.
BREAK - define ou limpa a verifica‡Æo estendida CTRL+C.
CACLS - exibe ou modifica listas de controle de acesso (ACLs) de arquivos.
CALL - chama um programa em lotes a partir de outro.
CD - exibe o nome da pasta atual ou faz altera‡äes nela.
CHCP - exibe ou define o n£mero da p gina de c¢digo ativa.
CHDIR - exibe o nome da pasta atual ou faz altera‡äes nela.
CHKDSK - verifica um disco e exibe um relat¢rio de status.
CHKNTFS - exibe ou modifica a verifica‡Æo do disco na inicializa‡Æo.
CLS - limpa a tela.
CMD - inicia uma nova instƒncia do interpretador de comandos do Windows.
COLOR - define as cores padrÆo de primeiro plano e do plano de fundo do console.
COMP - compara o conte£do de dois arquivos ou grupos de arquivos.
COMPACT - exibe ou altera a compacta‡Æo de arquivos em parti‡äes NTFS.
CONVERT - converte volumes FAT em NTFS. NÆo ‚ poss¡vel converter a
unidade atual.
COPY - copia um ou mais arquivos para outro local.
DATE - exibe ou ajusta a data.
DEL - Exclui um ou mais arquivos.
DIR - exibe uma lista de arquivos e subpastas em uma pasta.
DISKCOMP- compara o conte£do de dois disquetes.
DISKCOPY- copia o conte£do de um disquete para outro.
DOSKEY - edita linhas de comando, volta a chamar comandos do Windows e cria macros.
ECHO - exibe mensagens ou ativa ou desativa o eco de comandos.
ENDLOCAL -encerra a localizaçõo de alterações de ambiente em um arquivo em lotes.
ERASE - Exclui um ou mais arquivos.
EXIT - sai do programa CMD.EXE (interpretador de comandos).
FC - compara dois arquivos ou grupos de arquivos e exibe as diferen‡as
entre eles.
FIND - procura uma sequência de texto em um arquivo ou arquivos.
FINDSTR - procura sequências de texto em arquivos.
FOR - executa um determinado comando para cada arquivo em um grupo de arquivos.
FORMAT - formata um disco para uso com o Windows.
FTYPE - exibe ou modifica os tipos de arquivo utilizados em associa‡äes de extensäes de arquivos.
GOTO - direciona o interpretador de comandos do Windows para uma linha identificada em um
programa em lotes.
GRAFTABL -permite que o Windows exiba um conjunto de caracteres estendidos em modo
grafico.
HELP - fornece informa‡äes de ajuda sobre comandos do Windows.
IF - realiza processamento condicional em arquivos em lotes.
LABEL - cria, altera ou exclui o r¢tulo de volume de um disco.
MD - Cria um diret¢rio.
MKDIR- Cria um reates a directory.
MODE - Configura um dispositivo do sistema.
MORE - exibe a sa¡da fazendo pausa a cada tela.
MOVE - move um ou mais arquivos de uma pasta para outra pasta.
PATH - exibe ou define um caminho de pesquisa para arquivos execut veis.
PAUSE - suspende o processamento de um arquivo em lotes e exibe uma mensagem.
POPD - restaura o valor anterior da pasta atual salva por PUSHD.
PRINT - Imprime um arquivo de texto.
PROMPT - altera o prompt de comando do Windows.
PUSHD - salva a pasta atual e, em seguida, altera a mesma.
RD - Remove uma pasta.
RECOVER - recupera informa‡äes ainda compreens¡veis de um disco defeituoso ou danificado.
REM - grava coment rios (observa‡äes) em arquivos em lotes ou no CONFIG.SYS.
REN - altera o nome de um arquivo ou arquivos.
REName -altera o nome de um arquivo ou arquivos.
REPLACE - substitui arquivos.
RMDIR - Remove uma pasta.
SET - exibe, define ou remove vari veis de ambiente do Windows.
SETLOCAL- inicia a localiza‡Æo de altera‡äes de ambiente em um arquivo em lotes.
SHIFT - altera a posi‡Æo dos parƒmetros substitu¡veis em um arquivo em lotes.
SORT - classifica a entrada.
START - inicia uma janela separada para executar um programa ou comando especificado.
SUBST - associa um caminho a uma letra de unidade.
TIME - exibe ou ajusta a hora do sistema.
TITLE - define o t¡tulo da janela para uma sessÆo do CMD.EXE.
TREE - exibe graficamente a estrutura de pastas de uma unidade ou caminho.
TYPE - exibe o conte£do de um arquivo de texto.
VER - exibe a versÆo do Windows.
VERIFY - faz com que o Windows verifique se os arquivos estÆo gravados
corretamente em um disco.
VOL - exibe um r¢tulo e n£mero de s‚rie de volume de disco.
XCOPY - copia arquivos e rvores de pastas.

AVANÇADOS:

- Alguns dos grandes comandos de linha do Windows:

Bootcfg
Permite ver as configurações do seu menu de boot

Defrag
Desfragmentador de disco. Oferece as seguintes opções:
-a Apenas analisar
-f Fará a desfragmentação mesmo que haja pouco espaço livre.
-v Saída detalhada
-? Exibir tópico de ajuda.

Diskpart
Gerencia as partições de um disco.

Driverquery
Mostra a lista de drivers instalados no Windows e as respectivas propriedades.

Fsutil
O comando fsutil tem vários complementos que serão listados digitando-o sem nenhum parâmetro. Digite fsutil fsingo drives e terá a lista dos drives no seu micro.

Gepresult
Este comando mostrará configurações de usuários e de diretivas de grupos.

Recover
Permite a recuperaçãoo de arquvios em disco danificado.

Reg
Comando para exportar chaves do registro, copiar, restaurar, comparar, etc.

Schtasks
Para agendar, executar, alterar ou deletar tarefas numa máquina local ou remota com Windows.

SFC
Comando que permite verificar arquivos de sistemas alterados de forma indevida e recuperar os arquivos originais e oficiais da Microsoft., o que nem sempre será recomendável. Por exemplo, o arquivo uxtheme.dll modificado para permitir o uso de temas voltaria a ser substituído pelo original.

Shutdown
O comando shutdown permite desligar ou reiniciar o computador de forma imediata ou agendada.

Systeminfo
Fornece informações básicas sobre o sistema.

Tasklist
Mostra a lista de processos sendo executados no Windows.

Taskkill
Permite finalizar algum processo. O comando é quase sempre usado com base nas informações fornecidas pelo tasklist. Por exemplo, para finalizar o Messenger digite "taskkill /PID 1680". A identificação do PID de cada processo sendo executado você ficará sabendo com o comando tasklist.


Diversos outros comandos que você poderá usar no prompt do Windows:

ASSOC
Exibe ou modifica associações de extensões de arquivo.

AT
Agenda comandos e programas para serem executados em um computador.

ATTRIB
Exibe ou altera atributos de arquivos.

BOOTCFG
Mostra o boot.ini no prompt de comando

BREAK
Define ou limpa a verificação estendida CTRL+C.

CACLS
Exibe ou modifica listas de controle de acesso (ACLs) de arquivos.

CALL
Chama um programa em lotes a partir de outro.

CHCP
Exibe ou define o número da página de código ativa.

CHKDSK
Verifica um disco e exibe um relatório de status.

CHKNTFS
Exibe ou modifica a verificação do disco na inicialização.

CLS
Limpa a tela

CMD
Abre uma outra janela de prompt.

COLOR
Define as cores padrão de primeiro plano e do plano de fundo do console

COMP
Compara o conteúdo de dois arquivos ou grupos de arquivos.

COMPACT
Exibe ou altera a compactação de arquivos.

CONVERT
Converte volumes FAT em NTFS.

COPY
Copia um ou mais arquivos para outro local.

DATE
Mostra a data atual e permite alterá-la.

DISKCOMP
Compara o conteúdo de dois disquetes.

DISKCOPY
Copia o conteúdo de um disquete para outro.

DISKPART
Faz particionamento de disco

DOSKEY
Edita linhas de comando, volta a chamar comandos do Windows e cria macros.

ECHO
Exibe mensagens ou ativa ou desativa o eco de comandos.

ENDLOCAL
Encerra a localização de alterações de ambiente em um arquivo em lotes.

EXIT
Sai do programa CMD.EXE (interpretador de comandos).

FC
Compara dois arquivos ou grupos de arquivos e exibe as diferenças entre eles.

FIND
Procura uma sequência de texto em um arquivo ou arquivos.

FINDSTR
Procura sequência de texto em arquivos.

FOR
Executa um determinado comando para cada arquivo em um grupo de arquivos.

FORMAT
Formata um disco rígido ou disquete.

FTYPE
Exibe ou modifica os tipos de arquivo utilizados em associações de extensões de arquivos.

GOTO
Direciona o interpretador de comandos do Windows para uma linha identificada em um programa em lotes.

GRAFTABL
Permite que o Windows exiba um conjunto de caracteres estendidos em modo gráfico.

HELP
Fornece informações de ajuda sobre comandos do Windows.

HOSTNAME
Dá o nome do host

IF
Realiza processamento condicional em arquivos em lotes.

IPCONFIG
Mostra detalhes das configurações de IP

LABEL
Cria, altera ou exclui o rótulo de volume de um disco.

MODE
Configura um dispositivo do sistema.

MORE
Exibe a saída fazendo pausa a cada tela.

MOVE
Move um ou mais arquivos de uma pasta para outra pasta.

PAGEFILECONFIG
Configura memória virtual

PATH
Exibe ou define um caminho de pesquisa para arquivos executáveis.

PAUSE
Suspende o processamento de um arquivo em lotes e exibe uma mensagem.

PING
Checa sua conexõo de rede disponível

POPD
Restaura o valor anterior da pasta atual salva por PUSHD.

PRINT
Imprime um arquivo de texto.

PROMPT
Altera o prompt de comando do Windows.

PUSHD
Salva a pasta atual e, em seguida, altera a mesma.

REM
Grava comentários (observações) em arquivos em lotes.

REPLACE
Substitui arquivos.

ROUT
Mostra detalhes do parâmetro da interface de rede

SCHTASKS
Agenda e executa algum processo

SET
Exibe, define ou remove variáveis de ambiente do Windows.

SETLOCAL
Inicia a localização de alterações de ambiente em um arquivo em lotes.

SHIFT
Altera a posição dos parâmetros substituíveis em um arquivo em lotes.

SORT
Classifica a entrada.

START
Inicia uma janela separada para executar um programa ou comando especificado.

SUBST
Associa um caminho a uma letra de unidade.

TITLE
Define o título da janela para uma sessão do CMD.EXE.

TREE
Exibe graficamente a estrutura de pastas de uma unidade ou caminho.

TYPE
Exibe o conteúdo de um arquivo de texto.

VER
Mostra a versão do Windows.

VERIFY
Faz com que o Windows verifique se os arquivos estão gravados corretamente em um disco.

VOL
Exibe um rótulo e número de série de volume de disco.

XCOPY
Copia diretórios com seus subdiretórios.


Os comandos abaixo listam comandos adicionais do Windows XP Pro:

eventcreate -Permite ao administrador criar uma mensagem e identificação do evento personalizadas em um log de eventos especificado.

eventquery -Lista os eventos ou as propriedades de um evento de um ou mais arquivo log.

eventtriggers- Mostra e configura disparadores de evento.

getmac -Mostra o endereço MAC de um ou mais adaptador de rede.

helpctr- Inicia o Centro de Ajuda e Suporte.

ipseccmd -Configura o Internet Protocol Security (IPSec)

logman- Gerencia o serviço Logs e alertas de desempenho.

openfiles- Busca, mostra ou termina arquivos abertos compartilhados.

pagefileconfig- Mostra e configura a memória virtual.

perfmon -Abre o monitor do sistema.

prncnfg- Configure ou mostra as configurações de impressora.

prndrvr- Adiciona, deleta e lista drivers de impressoras.

prnjobs- Pausa, continua ou cancela lista de documentos a serem impressos.

prnmngr- Adiciona, deleta e lista impressoras conectadas, além da impressora default.

prnport- Cria, deleta e lista portas de impressora TCP/IP

prnqctl -Imprime uma página de teste, pausa ou reinicia um documento a ser impresso.

schtasks - Permite que um administrador crie, exclua, consulte, altere, execute e termine tarefas 
agendadas em um sistema local ou remoto.

systeminfo- Busca no sistema informação sobre configurações básicas.

typeperf- grava dados de desempenho na janela de comando ou em um arquivo de log. Para interromper - Typeperf, pressione CTRL+C.



Bom tem bastante coisa né, dá pra brincar um pouco ... Copie e cole o script abaixo em bloco de notas, salve como .bat e execute.

rem ---------------------- inicio do programa--------------------------------------------
echo off 
cls
echo Elaborado por - Toni da Silva  --  Tecnologo em Sistemas Eletricos
echo i12 Eletrica e Automacao
echo.
echo Abaixo temos uma lista de atividades desponiveis, execute a desejada.
color 01
pause
echo.
echo -------------------------------------------------------------------------------------
echo.
echo d = Desligar o computador
echo r = Reiniciar o computador
echo c = Verificar conexao com internet
echo h = Informa data e hora
echo m = Inicia a calculadora
echo n = Descreve o nome do HOST (Nome da maquina)
echo e = Sair do programa sem executar nada
echo.
echo ---------------------------------------------------------------------------------------
SET /p XXX=
color 06
if %XXX% EQU d (goto AAA)
if %XXX% EQU r (goto BBB)
if %XXX% EQU c (goto CCC)
if %XXX% EQU h (goto DDD)
if %XXX% EQU e (goto sair) 
if %XXX% EQU m (goto EEE)
if %XXX% EQU n (goto FFF)
rem -----------------------Fim do programa principal-----------------------------------------

rem -----------------------Sub rotinas do programa-------------------------------------------
:AAA
cls
if %XXX% NEQ d (goto sair) else (goto GGG)

:GGG
cls
echo Seu computador desligara em 120 sec
pause
shutdown -s -t 30 -c "Seu computador será desligado em 30 segundos"
exit

:BBB
cls
echo Seu computador reiniciara em 120 sec
pause
shutdown -r -t 30 -c "Seu computador será reiniciado em 30 segundos"
exit

:CCC
cls
echo Vamos testar a conexao com o comando ping apontando para o site do Google
pause
ping www.google.com.br
pause
exit

:DDD
cls
echo Data e hora do sistema
echo %date%
echo %time%
pause
exit

:EEE
cls
echo Executa a calculadora do Windwns
start calc
pause
exit

:FFF
cls
echo O no dado ao computador e:
hostname
pause
exit

:sair
cls
exit

rem -----------------Fim do programa------------------------------------------------------

sábado, 24 de agosto de 2013

KEYPAD - Senha de acesso

Galera, depois de algum tempo, consegui!!! Nem acreditei quando funcionou.

A programação não é difícil, o difícil foi fazer sem copiar, eu peguei a ideia e apliquei no que eu queria, esta sketch passou por 18 versões até rodar, penso em melhorar o programa criando algumas sub-rotinas e até usando a biblioteca de keypad do arduino, mas o meu desafio era justamente este, usar o minimo de recursos prontos.

Bom mas vamos lá. Se trata de um keypad sendo monitorado pelo Serial Monitor (em breve será um display de LCD) e que respeita a senha para ativar um dos pinos de saída.

Abaixo tem 2 vídeos o primeiro com o monitor e o segundo com a montagem.

Recomenda-se o uso de fones de ouvido.







Segue abaixo o código fonte:

const int N_ line = 4;                          // define a quant de linhas      
const int N_ column = 3;                        // define a quant de colunas
int check = 0;                                 // garante que só 3 tecla compõe a senha
char password_default [3] = {'1', '5', '9'};     //senha de acesso
#define actionPin 10                               // ativa acionamento se password ok
#define wrongPin 12                             // LED de erro na senha
#define test_ led 13
#define start 11
int pause = 1000;
int solenoide = 3000;
int reset;
int count;
int debounce_Time = 25;


const char keymap[N_line][N_column] = {     // montagem da matriz OBS.: const(constante) char(caracteres)
  { '1', '2', '3'  } ,
  { '4', '5', '6'  } ,
  { '7', '8', '9'  } ,
  { '*', '0', '#'  }
};

const int Pins_line[N_line] = { 2, 3, 4, 5 };     // define quais os pinos representam linha
const int Pins_column[N_column] = { 6, 7, 8 };    // define quais os pinos representam colunas

void setup()
{
    Serial.begin(9600);
       for (int row = 0; row < N_line; row++)      //| configura as linhas com entrada
       {                                           //|a cada loop do for, um valor é incrementado, ou seja row = 3
            pinMode(Pins_line[row],INPUT);         //|o Pins_line[3] será configurado com entrada
            digitalWrite(Pins_line[row],HIGH);     //|ativação do resistor de pull up
        }
     
        pinMode(actionPin,OUTPUT);
        pinMode(wrongPin,OUTPUT);
        pinMode(test_led,OUTPUT);
        pinMode(start,INPUT);
        pinMode(start,HIGH);
             
       for (int column = 0; column < N_column; column++)     //| configura as linhas com saída
       {                                                     //|a cada loop do for, um valor é incrementado, ou seja column = 3
           pinMode(Pins_column[column],OUTPUT);              //|o Pins_column[3] será configurado com saída                              
           digitalWrite(Pins_column[column],HIGH);           //|ativação o pinMode correspondente
       }
}


void loop()
{
  if(digitalRead(start) == 1 && check == 0)
    {
     digitalWrite(test_led,HIGH);
     Serial.println("  ");
     Serial.println("Waiting Password");
     count=1;
     reset=0;
    }

  if(count == 1)
    {
       while(check < 3 && reset == 0)
          {
         
               
                 char key = getKey();     // criou sub rotina
               
                    if(key != 0)
                    {
                      if(key == password_default [check])
                         {
                           check += 1;
                           Serial.print(" X ");
                                       
                         }
                       else if(key != password_default [check])
                         {
                           Serial.println("                                  ");
                           Serial.println("Password Wrong ->  wait 5 seconds . . .");
                           digitalWrite(test_led,LOW);
                           digitalWrite(wrongPin,HIGH);
                           delay(pause);
                           digitalWrite(wrongPin,LOW);
                           check = 0;
                           count = 0;
                           reset = 1;
                         }
                    }
       
          }
   
     }
  if(check == 3)
    {
       digitalWrite(test_led,LOW);
       digitalWrite(actionPin,HIGH);
       delay(solenoide);
       digitalWrite(actionPin,LOW);
       check = 0;
       count = 0;
     }
}
           

////////////////////////////////////sub rotina 1//////////////////////////////////////////////

char getKey()                          // inicializando a subrotina
{
     char key = 0;                     // define key em valor 0                    
     for(int column = 0; column < N_column; column++) // teste o valor de N_column  
     {
         digitalWrite(Pins_column[column],LOW);          // DLG os pinos conforme valor column
     
             for(int row = 0; row < N_line; row++)  // teste o valor de N_column
              {
                      if(digitalRead(Pins_line[row]) == LOW)  // faz comparação, caso verdadeiro, inicia o comando
                      {
                          delay(debounce_Time);              //delay 20ms
                          while(digitalRead(Pins_line[row]) == LOW);   // valor lógico baixo,                            
                          key = keymap[row][column];                 //mapeia a matriz                            
                       }
               }
         digitalWrite(Pins_column[column],HIGH);   // aciona o pino corresp da coluna
    }
      return key;     // traz o valor encontrado
}

///////////////////////////////////////////end//////////////////////////////////////////////////////

Comando "for"


Pessoal, recentemente me perguntaram como funciona o comando "for" ... após algum tempo pensando eu percebi que não sabia explicar; por isso, resolvi fazer esta portagem.

Antes de falarmos sobre o comando for, podemos aproveitar a opotunidade para esclarecer mais alguns pontos do sketch apresentado abaixo.

Vamos começar pelo comando "#define start 11"; este comando é a mesma coisa que "int start = 11;".

Ou seja, estamos determinando que o pino 11 do arduino, vai assumir a identificação de "start", assim, não corremos o risco de confundir o numero 11 dentro da programação com o pino 11 do arduino.

No caso da variável flip_flop, ela assumi o valor 1 assim que é chamada no nosso programa.

Observe que não há diferença entre definir se a variável representa um pino ou um valor numérico; isso pode causar dúvidas aos menos experientes na hora de entender um programa que ele não tenha elaborado. Fazer as definições de pinos do arduino utilizando o comando "#define xxxx" pode ajudar a deixar o programa mais claros.

A outra forma de visualizar, é observando dentro do "void setup" as configurações que alternam entre INPUT e OUTPUT, onde INPUT são os pinos de entrada e OUTPUT os pinos de saída.

Os pinos de entrada devem receber um resistor para limitar o pico de tensão no hardware; esse resistor pode ser ativado via programação utilizando o comando :

  pinMode(start,INPUT); // define pino como entrada
  pinMode(start,HIGH);  // ativa resistor de pull up

Mais abixo temos a inicialização da comunicação serial entre o monitor do IDE e as atividades do hardware.

Serial.begin(9600);  // inicia a comunicação serial

Enfim o comando "for". Neste programa, o comando "for" só será inicializado quando o teste lógico do comando "if" for TRUE, ou seja, o pino start tiver um valor lógico alto. Logo após esta confirmação, o pino action será acionado, como próximo passo, chama o comando "for" que permanecerá executando até que os valores definidos sejam alcançados; ou seja, o pino action permanecerá com valor lógico alto enquanto o comando "for" não terminar a execução.

Dentro do comando "for" temos que definir o valor inicial da variável, o valor limite, e o encremento, veja abaixo com fica o comando:

 for(check=0 (valor inicial); check<=10 (valor limite); check++ (encremento))

Enquanto o valor de check não chegar a 10, começando a contagem de 0 o comando "for" ficará executando, enquanto isso nada mais é executado, apenas o "for".

Bom nada é melhor para tirar as dúvidas do que ver o que lemos em execução, para aqueles que farão a montagem e o teste, segue o esquema de ligação:

PINO 11 -->> Este deve ser ligado inicialmente ao zero volt
PINO 13 -->> Não requer ligação, pois na placa do arduino já possui um led no pino 13

Após carrgar o programa inicie o Serial Monitor do IDE (link para baixar o IDE) e acione o start, ligando o PINO 11 (start) no 5 Vcc.

Observe os detalhes que devem ser configurados para o funcionamento do Monitor Serial:

numero da COMM e BAUD RATE (link's para entender o que é baud rate: 1 e 2

O video abaixo o video apresenta o que deve ser apresentado no Monitor Serial.



Logo abaixo o sketch que executa este programa.

/*

ELABORADO POR: TONI
DATA         : 24/08/13

*/

// INICIO DO PROGRAMA
#define start 11    // definindo a variavel como pino 11 do arduino
#define action 13
int check;          // declarando uma variavel
int flip_flop = 1;  // declarando uma variavel com valor definido inicialmente
int z = 1000;
int w = 332;

void setup()
{
  pinMode(start,INPUT); // define pino como entrada
  pinMode(start,HIGH);  // ativa resistor de pull up

  pinMode(action,OUTPUT); // define pino como saída

 Serial.begin(9600);  // inicia a comunicação serial

}

void loop()
{
  if(digitalRead(start) == 1) // testa o pino
  {
    digitalWrite(action,flip_flop); //ativa o pino com valor na variável
    for(check=0; check<=10; check++) // faz uma contagem de 0 a 10
    {
      Serial.print("wait ");
      delay(w);
      Serial.print(". ");
      delay(w);
      Serial.print(". ");
      delay(w);
      Serial.print(". ");
      delay(z);
      Serial.println(check);
      delay(z);
    }
    digitalWrite(action,!flip_flop);  // submete ao pino o valor inverso da variável
 
  }

}

//////////////FIM DO PROGRAMA/////////////////////////

sexta-feira, 16 de agosto de 2013

Linguagem de programação

Atualmente, encontramos uma grande variedade de linguagens de programção, entre as mais comuns, podemos citar:

- C
- C++
- Assembly
- Basic
- LADDER entre outras ...

cada fabricante tem uma ou mais opções, principalmente os CLP's. Vale lembrar que o LADDER nada mais é do que uma forma de dar uma cara para o ambiente de programação; no final tudo vira linguagem de maquina.

Este post vai apresentar uma nova aplicação para um equipamento. Basicamente estamos falando de um controlador de demanda, que nada mais é do que um CLP que recebeu um firmware dedicado para uma determinada função. O ambiente de programação fica mais simples e amigavel, com isso o uso é especifico.


Para quem conhece o funcionamento de um controlador de demanda, sabe que basicamente, a plicação é a seguinte:

Leitura dos pulsos da concessionária;
Mensurar a demanda com base nas informações anteriores;
Atuar com o descarte de carga se necessário.


Com o passar do tempo, apresentou-se a necessidade de ter mais informações, tais como, medições setorial para rateio, leituras de utilidades, seja por sinal digital ou analógico. Para tal fim, os controladores de demanda foram agregando funções. Alem de um canal de comunicação ABNT-CODI e um cartão de saídas de controle, é possível encontrar equipamentos com entradas digitais e analógicas, porta ETH, RS-232, RS-485, GSM entre outras. A aplicação que veremos no video abaixo, é com o equipamento HX900.

 Este hadware possui um ambiente de programação avançado, que disponibiliza uma linguagem escrita conhecida como HXVM. Esta aplicação extra, permite avivar a criatividade e personalizar a aplicação do equipamento.

Neste caso em especial, a ideia foi a seguinte: 

Utilizar as entradas de pulso para ler status e definir um novo parametro de controle para a demanda, com isso, foi possível alternar o controle de demanda entre a concessionária e o grupo gerador. Com um detalhe, quando falamos em grupo gerador, estamos considerando cinco maquina de 200KW cada uma, desta forma o controlador vai ter que identificar a quantidade de geradores em operação e definir um novo set point de demanda para controle.

O código fonte está no video.

Para facilitar o entendimento veja o video abaixo:




Abaixo a tabela exemplifica a lógica utilizada no programa.


Configurando um device MODBUS


Em um outro post deste blog já falamos um pouco sobre o funcionamento da rede serial RS-485, porem nada de prático foi apresentado.

Nesta postagem o foco é apresentar os componentes físicos e o passo a passo como exemplo; para isso será necessário alguns dispositivos:

-> um dispositivo com RS-485 (para leitura de registros é necessário que o dispositivo seja MODBUS-RTU);

-> desktop ou notebook com saída serial RS-232 (já é possível encontrar conversores USB / RS-485, pois a porta serial RS-232 esta caindo em desuso);

-> conversor RS-232 / RS-485;

-> conhecer o dispositivo a ser configurado;

-> software de programação e/ou leitura;

-> conceito básico da rede serial RS-485.


>>>>   link das postagens: rede serial rs-485 /  transmissao de dados em rede serial


Por comodidade os equipamento utilizados nesta atividade são da Schneider Electric, sendo este:

-> Módulo ERREP (conversor de protocolo ABNT-CODI p/ RS-485);
-> Software AtosBrio Soft.


Para facilitar o entendimento teremos dois vídeos, um para apresentar o passo a passo no software, e outro da montagem dos hardwares

 Recomenda-se o uso de fones de ouvido caso o som esteja baixo.

Manuseio do software - 1º Video



                           



Montagem dos hardwares - 2º video




sexta-feira, 31 de maio de 2013

Arduino - Funções random e switch

RANDOM

Essa função permite adotar um valor aleatório para uma variável, ou seja, primeiro definimos a variável com um valor, por exemplo:

int NumRand = 0;

Depois chamamos a função.

NumRand = random (1,10)

Dessa forma aleatoriamente uma valor entre 1 e 10 é definido para NumRand.




SWITCH

Essa função permite analisar o valor de uma variável, utilizado em casos que a variável pode adotar valores aleatórios, com por exemplo o NumRand descrito acima, segue abaixo um exemplo:

switch (NumRand)
{
case (1): comando 1;
break;

case (2): comando 2;
comando 3;
comando 4;
break;
.
.
.

case (10): comando N;
break;
}


Abaixo um vídeo apresenta o circuito montado em um protoboard .




Código fonte:

/*
   Arduino UNO com Atmega328P-PU

   Data: 30/05/2013

   Função: random e switch

   Elaborado por: Toni da Silva
*/

int Nrand = 0;         // define valor para a variavel com valor inteiro
int _1_ledPin = 8;     // |
int _2_ledPin = 9;     // |
int _3_ledPin = 10;   // |define nomes para os pinos
int _4_ledPin = 11;   // |
int led = 13;              // |
int entryPin = 7;        // |

void setup()           // função obrigatória
{
  pinMode(_1_ledPin,OUTPUT); //|
  pinMode(_2_ledPin,OUTPUT); //|
  pinMode(_3_ledPin,OUTPUT); //|define se o pino é entrada ou saída
  pinMode(_4_ledPin,OUTPUT); //|
  pinMode(led,OUTPUT);            //|
  pinMode(entryPin,INPUT);        //|
}
void loop()            // função obrigatória
{
  while(digitalRead(entryPin) == 1) // teste o valor lógico do pino 7
  {
    digitalWrite(13,0);            
    Nrand = random(1,5);            // inicia função random
  switch (Nrand)                         // verifica o valor de random
  {
    case(1):digitalWrite(_1_ledPin,1);
    delay(500);
    digitalWrite(_1_ledPin,0);
    break;
    case(2):digitalWrite(_2_ledPin,1);
    delay(500);
    digitalWrite(_2_ledPin,0);
    break;
    case(3):digitalWrite(_3_ledPin,1);
    delay(500);
    digitalWrite(_3_ledPin,0);
    break;
    case(4):digitalWrite(_4_ledPin,1);
    delay(500);
    digitalWrite(_4_ledPin,0);
    break;
  }
}

if(digitalRead(entryPin) == 0)
{
  digitalWrite(13,1);
}

}

Esquema de ligação simplificado:


  



quinta-feira, 30 de maio de 2013

Entendendo as Harmônicas


Harmônica

No geral os sintomas da aparição de harmônica em uma instalação são bem camuflados, eles começam com pequenos transtornos na programação de CLP’s, queima de equipamentos sensíveis até o aquecimento inesperado de condutores.
O que de fato ocorre é que as cargas não lineares inseridas na rede elétrica distorcem a forma de onda da corrente.

Exemplo de circuito com harmônica


Fonte: Dados do autor




A deformação se dá pelo somatório de corrente adicional em freqüências múltiplas da fundamental de ordem impar, normalmente as harmônicas de 3ª,5ª,7ª,9ª e 11ª ordem são as mais significativas para as instalações, devido à amplitude que podem atingir. As harmônicas de 3ª, 5ª e 9ª influenciam diretamente na corrente de neutro do sistema elétrico.

 Simulação de distorção harmônica
                                       

Fonte: Dados do autor

Observando a simulação acima, podemos perceber que a onda resultante não é mais senoidal e apresenta um corte em ambos os ciclos, positivo e negativo. Comparando a onda amarela que representa o somatório da distorção harmônica conhecida como THD (Total Harmonic Distortion), com a forma de onda fundamental (1ª harmônica) é fácil perceber que a onda alcança o valor de pico mais rápido.
Como bem se sabe o valor da corrente se dá pela integração das cargas elétricas pelo tempo de ocorrência. Para considerar os efeitos de distorção em sua totalização THDI utilizamos o mesmo princípio para cada freqüência múltipla da fundamental. No caso do THDIN encontrado no condutor neutro, a solução é a mesma, porém com o diferencial de que as ordens harmônicas a serem considerada são as de seqüência zero na rede de alimentação.  Abaixo as equações são apresentadas.

Corrente elétrica


Total de distorção harmônica de corrente




Corrente de neutro



   Para freqüências múltiplas, vale ressaltar que os equipamentos convencionais não podem detectar essa variação de leitura, pois a maioria foi projetada para trabalhar na freqüência fundamental. Segue abaixo a tabela de referência para compreensão.
 
Seqüência harmônica


Fonte: Dados do autor

As medidas a serem adotadas para amenizar os efeitos ou para definir os limites aceitáveis é a utilização de bancos de indutores, também conhecido como filtros de harmônicas que têm seu funcionamento com base na freqüência de ressonância de um circuito RLC (resistivo, indutivo e capacitivo), ou seja, de acordo com a freqüência onde se encontra a distorção harmônica há um circuito que entra em ressonância conduzindo a terra e assim neutralizando este efeito. Ainda há mais um agravante que se dá por definição da construção do filtro, que pode ter característica ativa ou passiva, permitindo que os mesmos atuem caso haja a presença do efeito podendo variar a freqüência de atuação, ou fixo, que atua de forma passiva. Devido o alto custo desta aplicação, algumas opções surgiram, como o redimensionamento dos circuitos elétricos, separação do circuito problemático e transformadores dedicados para suportar os efeitos harmônicos devido à característica do fechamento interno formam um bloqueio nas harmônicas de 3ª ordem.
Abaixo tem-se 2 figuras para comparação do efeito da harmônica de 3ª ordem.



Circuito sem distorção

                                                                                   

                                                                            

                                                                 Circuito com distorção

  

Fonte: Dados do autor





Inter – Harmônica

Tem o mesmo princípio das harmônicas, porém, com a particularidade de não ocorrer em freqüências múltiplas da fundamental. Não se tem um estudo aprofundado no Brasil, mas os principais efeitos são notados em ondas de rádio, imagem em monitores, displays.
Outro aspecto já comprovado é que um dos maiores geradores dos efeitos são equipamentos que funcionam com arco voltaico. Veja o exemplo de inter-harmônica na tabela a seguir.



FONTE:

FACULDADE SENAI DE TECNOLOGIA MECATRÔNICA
PÓS-GRADUAÇÃO EM AUTOMAÇÃO INDUSTRIAL
MONOGRÁFIA - GESTÃO DE ENERGIA ELÉTRICA NA INDÚSTRIA
SÃO CAETANO DO SUL - 2012

Surto de Tensão

Normalmente causado por descargas atmosféricas percorre a rede de transmissão e distribuição. É comum encontrar dispositivos para frear este efeito, porém, não há formas de impedir a sua ocorrência.
As técnicas mais usuais como prevenção são os SPDAs, DPS’s e centelhadores. Há duas formas dos surtos alcançarem as instalações, direta ou indiretamente.

Como os efeitos eletromagnéticos possuem características radiantes não precisa necessariamente atingir a rede. 



FONTE:

FACULDADE SENAI DE TECNOLOGIA MECATRÔNICA
PÓS-GRADUAÇÃO EM AUTOMAÇÃO INDUSTRIAL
MONOGRÁFIA - GESTÃO DE ENERGIA ELÉTRICA NA INDÚSTRIA
SÃO CAETANO DO SUL - 2012

Interrupção

Como o próprio nome já sugere é a ausência total de energia e pode ser desmembrada em três partes, sendo caracterizada pelo tempo da ocorrência. Veremos a seguir a classificação.
·                    Momentânea – Ocorre dentro de um período de ½ ciclo a cada 3 segundos.
·                    Temporária – Menor que um minuto e maior que 3 segundos.

·                    Sustentada – Maior que 1 minuto




FONTE:

FACULDADE SENAI DE TECNOLOGIA MECATRÔNICA
PÓS-GRADUAÇÃO EM AUTOMAÇÃO INDUSTRIAL
MONOGRÁFIA - GESTÃO DE ENERGIA ELÉTRICA NA INDÚSTRIA
SÃO CAETANO DO SUL - 2012

Variação de Tensão

Variação de Tensão de Curta Duração

A variação de tensão depende dos níveis que pode alcançar tanto para mais ou para menos e o tempo em que o evento permanece ativo, que pode ocorrer em intervalos de 8.333 ms (½ ciclos) por 1 minuto. Para definir um afundamento de curta duração, conhecido como SAG, é necessário que o tempo do distúrbio não ultrapasse o intervalo citado e tenha como margem de variação entre 90% a 10% da tensão nominal. Nos casos em que a variação se dá para mais, ou seja, elevação da tensão, o distúrbio é conhecido como SWELL e o mesmo ocorrer dentro do limite de tempo já mencionado, porém, a margem de variação fica estabelecida entre 10% e 80% da nominal.  Caso o evento seja menor que 10% da nominal para mais ou para menos, não fica caracterizado como distúrbio; e caso exceda o valores de 90% para menos ou 80% para mais, é considerado surto de energia.
Entre as causas mais comuns que desencadeiam esses efeitos dentro da indústria pode ser observado o chaveamento de cargas expressivas, bancos de capacitores com estágios com grande valor de KVAr, comutação de vários estágios do banco de capacitores de uma única vez ou curtos circuitos.
No geral a solução para tal ocorrência se dá pela identificação das cargas críticas e sensíveis ao evento, e protegendo-as com a instalação de UPDs (Nobreak / Banco de Baterias) ou transformadores ferrorressonante normalmente usado para cargas não expressivas. Equipamentos com função dedicada para o acionamento de motores como inversores de freqüência e soft start, são bem comuns, porém seus efeitos também são expressivos nas instalações. Os valores multiplicativos a seguir tem suas definições em pu.

·                    SAG – Variação entre 0,9 a 0,1 (em pu) da Tensão Nominal
·                    SWELL – Variação entre 1,1 a 1,8 (em pu) da Tensão Nominal

Variação de Tensão de Longa Duração

Não muito diferente das variações de curta duração principalmente no que diz respeito às causas, o que poderá ser acrescentado são mais alguns meios de conseguir o indesejado efeito. Será apresentado os mais encontrados, sendo a falta de fase de um circuito trifásico, TAP’s mal ajustado do transformador e pela manobra oposta do item 3.1, ou seja, não acionamento, mas sim quando é desligada uma das cargas do circuito.
·                    Overvoltage ou Sobretensão – Variação de 1,1 a 1,2 (em pu) da tensão nominal
·                    Undervoltage ou Subtensão – Variação menor que 0,9 (em pu) da nominal






FONTE:

FACULDADE SENAI DE TECNOLOGIA MECATRÔNICA
PÓS-GRADUAÇÃO EM AUTOMAÇÃO INDUSTRIAL
MONOGRÁFIA - GESTÃO DE ENERGIA ELÉTRICA NA INDÚSTRIA
SÃO CAETANO DO SUL - 2012

Transitório


Transitórios

Este distúrbio se assemelha muito com o ruído, com um detalhe que é a particularidade que faz a distinção. Em ambos os casos há uma senóide, ou seja, não há distorção na formação da onda senoidal. As amplitudes positivas e negativas são espelhadas, porém existe uma distorção na continuidade da linha que formam a senóide.
No caso do ruído esta distorção é contínua por vários ciclos. Já o transitório tem uma distorção parecida, porém, com intervalo de ocorrência que pode ser menor que meio ciclo.
Existem dois tipos de transitório; este fenômeno pode ser impulsivo ou oscilatório. Alguns especialistas preferem o nome de transientes. Abaixo serão explorados ambos, de forma independente.


Transitório Impulsivo


Normalmente causados por descargas atmosféricas tem como característica o impulso em uma senóide que pode variar em tempo de duração e amplitude. No que diz respeito à amplitude, esta pode ser de qualquer valor, no entanto a duração do evento de ficar entre 5ns e 1ms. Se tivermos um ganho na amplitude, logicamente tem-se um aumento no valor da tensão podendo chegar à ordem KV mesmo em circuitos de baixa tensão.

Transitório Oscilatório


Em geral tem sua origem pela manobra de cargas expressivas dentro da planta, sendo estas de baixa, média ou alta tensão. Os maiores causadores deste fenômeno é a comutação de banco de capacitores e grandes indutores. Para compreender melhor o efeito é só imaginar uma tubulação de água com dez metros de altura e diâmetro de duas polegadas acoplado em um reservatório de vinte mil litros, uma válvula bloqueia o fluxo contínuo de água, porém ao ser acionada permite a passagem do fluído por vinte e cinco segundos e de uma só vez faz o estancamento. A reação é vibração brusca da tubulação fazendo um estrondo.
Basicamente é isto que ocorre, o fechamento ou abertura de chave ou disjuntores com corrente elevada causa forte vibração da senóide, que também sofre alteração na amplitude, criando um aumento na tensão, que pode chegar a quatro vezes o valor da tensão nominal. Para classificar este distúrbio podemos adotar dois parâmetros, sendo a freqüência de instabilidade entre 5 e 500 HZ com o período de duração de 5us a 50ms.
   Aqui se finda a apresentação dos distúrbios encontrados na energia elétrica que podem prejudicar o funcionamento de toda a área fabril. Em alguns ramos de atividades não sofrem com esse tipo de situação, porém apresentam uma grande possibilidade de incomodar o sistema de distribuição de energia, que afeta a outras empresas, e em alguns casos clientes residenciais do grupo B de faturamento.
   A maioria destes distúrbios, não possuem taxação como medida corretiva, mas o assunto comum e que pode surpreender mais cedo ou mais tarde, até por que, ele está mais presente no nosso dia a dia. No geral todas as medidas de monitoração e controle destes eventos são demasiadamente caras. Em média, um medidor de grandezas elétricas com especificações técnicas para capturar estas ocorrências tem o seu custo aproximado de um carro popular completo de série, com mais trinta por cento deste valor para adquirir um supervisório dedicado.





FONTE:

FACULDADE SENAI DE TECNOLOGIA MECATRÔNICA
PÓS-GRADUAÇÃO EM AUTOMAÇÃO INDUSTRIAL
MONOGRÁFIA - GESTÃO DE ENERGIA ELÉTRICA NA INDÚSTRIA
SÃO CAETANO DO SUL - 2012