Vous êtes sur la page 1sur 22

INTRODUO ============ LDmicro gera cdigo nativo com certeza Microchip PIC16 e AVR Atmel microcontroladores.

Normalmente software para estes microcontroladores escrito em uma linguagem de programao como assembler, C ou BASIC. Um programa numa dessas lnguas compreende uma lista de declaraes. Estas lnguas so poderoso e bem adaptado para a arquitetura do processador, que executa internamente uma lista de instrues. CLPs, por outro lado, so frequentemente `lgica programada em escada. A simples programa pode ter esta aparncia: | | | | | | XButton1 Tdon Rchatter Yred | | 1 | | -------] / [--------- [TON 1.000 s] - + -------] / [------------- () ------- | | | | | | | | | XButton2 Tdof | | | | | -------] / [--------- [TOF 2.000 s] - + | | | | | | | | | | | | | | | | Rchatter Ton Tnovo Rchatter | | 2 | | -------] / [--------- [TON 1.000 s] ---- [TOF 1.000 s] --------- () --- ---- | | | | | | | | | | | | | | | | ------ [END] -------------------------------------------------------- | | | | | | | | | | (TON um turn-on delay; TOF um atraso turn-off A -] [- declaraes. so entradas, que se comportam mais ou menos como os contatos de um rel. O - () - As declaraes so sadas, que se comportam como o tipo de bobina de um rel. Muitas boas referncias para a lgica da escada esto disponveis na Internet e em outro lugar; detalhes especficos para esta implementao so dadas abaixo). Um certo nmero de diferenas so evidentes: * O programa apresentado em formato grfico, e no como uma lista textual de declaraes. Muitas pessoas vo achar isso mais fcil, inicialmente, para entender. * No nvel mais bsico, os programas parecem diagramas de circuitos, com contatos de rel (inputs) e bobinas (sadas). Isto intuitivo programadores com conhecimento de teoria de circuitos eltricos.

* O compilador lgica ladder cuida o que calculada onde. Voc no tem que escrever cdigo para determinar quando as sadas tem que se recalculada com base em uma mudana nas entradas ou um evento timer, e voc no tem que especificar a ordem em que estes clculos devem ter lugar, as ferramentas PLC fazer isso por voc. LDmicro compila lgica ladder para PIC16 ou cdigo AVR. A seguir Os processadores so suportados: * PIC16F877 * PIC16F628 * PIC16F876 (no testado) * PIC16F88 (no testado) * PIC16F819 (no testado) * PIC16F887 (no testado) * PIC16F886 (no testado) * ATmega128 * ATMEGA64 * ATMEGA162 (no testado) * ATmega32 (no testado) * ATmega16 (no testado) * ATmega8 (no testado) Seria fcil para suportar mais AVR ou chips PIC16, mas eu no tenho alguma maneira de test-los. Se voc precisar de um em particular entre em contato comigo e Vou ver o que posso fazer. Usando LDmicro, voc pode desenhar um diagrama de escada para o seu programa. Voc pode simular a lgica em tempo real no seu PC. Ento, quando voc est convencido que correto, voc pode atribuir pinos no microcontrolador para o entradas e sadas do programa. Depois de atribuir os pinos, voc pode compilar cdigo PIC ou AVR para o seu programa. A sada do compilador um. Hex arquivo que voc pode programar em seu microcontrolador usando qualquer PIC / AVR programador. LDmicro projetado para ser um pouco semelhante ao PLC mais comercial sistemas de programao. H algumas excees, e um monte de coisas no so padro na indstria de qualquer maneira. Leia atentamente a descrio de cada instruo, mesmo que parea familiar. Este documento assume conhecimento bsico da escada lgica e da estrutura de software do PLC (O ciclo de execuo: ler entradas, calcular, escrever outputs). Metas adicionais ================== tambm possvel gerar o cdigo C ANSI. Voc pode usar isso com qualquer processador para o qual voc tem um compilador C, mas voc responsvel por fornecendo o tempo de execuo. Isso significa que LDmicro apenas gera fonte

para uma funo PlcCycle (). Voc responsvel por chamar PlcCycle cada tempo de ciclo, e voc responsvel pela implementao de todos os I / O (Leitura / escrita de entrada digital, etc) funes que o PlcCycle () chamadas. Ver os comentrios no cdigo-fonte gerado para mais detalhes. Finalmente, LDmicro pode gerar bytecode processador independente para a mquina virtual projetada para executar cdigo da lgica ladder. Eu tenho desde a implementao de exemplo do intrprete / VM, escrito em bastante porttil C. Esta meta ser trabalhar para praticamente qualquer plataforma, desde que voc pode fornecer seu prprio VM. Isso pode ser til para aplicaes onde deseja usar a lgica ladder como um `linguagem de script 'para personalizar a maior programa. Veja os comentrios do intrprete amostra para mais detalhes. OPES DE LINHA DE COMANDO ==================== ldmicro.exe normalmente executado sem opes de linha de comando. Isso significa que voc pode apenas fazer um atalho para o programa, ou salv-lo para o seu rea de trabalho e clique duas vezes no cone quando voc quer execut-lo, e ento voc pode fazer tudo de dentro da GUI. Se LDmicro transmitido um nico arquivo na linha de comando (Por exemplo, `ldmicro.exe asd.ld '), ento LDmicro tentar abrir` asd.ld' se ele existir. Um erro produzido se `asd.ld 'no existe. Este significa que voc pode associar com ldmicro.exe. ld arquivos, de modo que ele seja executado automaticamente quando voc clicar duas vezes em um arquivo ld.. Se LDmicro passado argumentos de linha de comando na forma `Ldmicro.exe / c src.ld dest.hex ', ento ele tenta compilar` src.ld' e salvar a sada como `dest.hex. LDmicro sai depois de compilar, se a compilao foi bem sucedida ou no. Todas as mensagens so impressos para o console. Este modo til apenas quando executado LDmicro do linha de comando. BASICS ====== Se voc executar LDmicro sem argumentos, ento ele comea com um vazio programa. Se voc executar LDmicro com o nome de um programa de escada (xxx.ld) na linha de comando, ento ele vai tentar carregar o programa na inicializao. LDmicro usa seu prprio formato interno para o programa, mas no pode importar lgica de qualquer outra ferramenta.

Se voc no carregar um programa j existente, em seguida, voc ser dado um programa com um degrau vazio. Voc pode adicionar uma instruo para que, por exemplo voc pode adicionar um conjunto de contatos (Instruo -> Inserir contatos) chamado `Xnew '. 'X' significa que os contatos sero ligados a um pino de entrada no microcontrolador. Voc pode atribuir um pino para mais tarde, depois de escolher um microcontrolador e renomeando os contatos. A primeira letra de um nome indica o tipo de objeto que . Por exemplo: * Xname - amarrada a um pino de entrada do microcontrolador * Yname - ligada a um pino de sada do microcontrolador * Rname - `relay interno ': um pouco na memria * Tname - um temporizador; turn-on delay, turn-off atraso ou reteno * Cname - um contador, ou contar-up ou contar-down * Aname - ler um nmero inteiro a partir de um conversor A / D * Nome - uma varivel de uso geral (inteiro) Escolha o resto do nome para que ele descreve o que o objeto faz, e de modo que seja nico dentro do programa. O mesmo nome sempre se refere para o mesmo objeto dentro do programa. Por exemplo, seria um erro ter um turn-on delay (TON) chamado `Tdelay 'e um atraso turn-off (TOF) chamado `Tdelay" no mesmo programa, uma vez que cada contador precisa do seu prprio memria. Por outro lado, seria correcto ter um temporizador retentivo (RTO) chamado `Tdelay 'e uma instruo reset (RES) associados `Tdelay ', uma vez que nesse caso, voc quer ambas as instrues para trabalhar com o mesmo timer. Os nomes das variveis podem consistir de letras, nmeros e sublinhados (_). Um nome de varivel no deve comear com um nmero. Os nomes das variveis so maisculas de minsculas. As instrues gerais variveis (MOV, ADD, EQU, etc) podem trabalhar em variveis com qualquer nome. Isto significa que eles podem acessar e temporizador contador acumuladores. Isso s vezes pode ser til, por exemplo, voc pode verificar se a contagem do temporizador em um determinado intervalo. As variveis so sempre nmeros inteiros de 16 bits. Isto significa que eles podem ir -32.768-32.767. As variveis so sempre tratados como assinado. Voc pode especificar literais como nmeros decimais normais (0, 1.234, -56). Voc tambm pode especificar valores de caracteres ASCII ('A', 'z'), colocando o personagem em aspas simples. Voc pode usar um cdigo de caracteres ASCII na maioria dos lugares que voc poderia usar um nmero decimal.

Na parte inferior da tela, voc ver uma lista de todos os objetos o programa. Esta lista gerada automaticamente pelo programa; no h necessidade de mant-lo atualizado com as mos. A maioria dos objetos no precisa de nenhuma configurao. `Xname ',` Yname' e `objetos aname 'deve ser contudo atribudo a um pino no microcontrolador,. Primeiro, escolha o que microcontrolador voc est usando (Settings -> microcontrolador). Em seguida, atribua pins seu I / O clicando duas vezes-los na lista. Voc pode modificar o programa atravs da insero ou excluso de instrues. O cursor no programa pisca para indicar o selecionado instruo eo ponto de insero atual. Se no estiver, ento pestanejar pressione <Tab> ou clique em uma instruo. Agora voc pode excluir o atual instruo, ou voc pode inserir uma nova instruo para a direita ou para a esquerda (Em conjunto com a), ou acima ou abaixo (em paralelo com) o selecionado instrues. Algumas operaes no so permitidos. Por exemplo, h instrues so permitidas para a direita de uma bobina. O programa comea com apenas um degrau. Voc pode adicionar mais degraus, selecionando Insira Rung Antes / Depois no menu Logic. Voc pode obter o mesmo efeito colocando muitas subcircuitos complicados em paralelo dentro de um degrau, mas mais claro para usar vrios degraus. Depois de ter escrito um programa, voc pode test-lo na simulao, e, em seguida, voc pode compil-lo para um arquivo HEX para o microcontrolador alvo. SIMULAO ========== Para entrar no modo de simulao, selecione Simular -> Modo de Simulao ou pressione <Ctrl+M>. O programa mostrada de forma diferente no modo de simulao. Tem no mais de um cursor. As instrues que so energizados aparecer brilhante vermelho, as instrues que aparecem no so cinza. Pressione a barra de espao para executar o ciclo de PLC. Para ciclo continuamente em tempo real, escolha Simulate -> iniciar a simulao em tempo real, ou pressione <Ctrl+R>. A exibio de o programa ser atualizado em tempo real, como as mudanas de estado do programa. Voc pode definir o estado das entradas para o programa clicando duas vezes -los na lista, na parte inferior da tela, ou clicando duas vezes em um `Xname 'instruo contatos no programa. Se voc alterar o estado de

um pino de entrada, em seguida, que a mudana no ser refletida na forma como o programa exibido at que os ciclos PLC, o que ir acontecer automaticamente se voc estiver executando uma simulao em tempo real, ou quando voc pressionar a barra de espao. Compilao para cdigo nativo ======================== Em ltima anlise, o ponto para gerar um arquivo. Hex que voc pode programar em seu microcontrolador. Primeiro voc deve selecionar o nmero de pea do microcontrolador, nas Configuraes -> menu de microcontrolador. Ento voc deve atribuir um pino de I / O para cada `Xname 'ou Yname`' objeto. Para fazer isso, duplo clique no nome do objeto na lista na parte inferior da tela. Uma caixa de dilogo ir aparecer onde voc pode escolher um pino no alocado a partir de uma lista. Em seguida, voc deve escolher o tempo de ciclo que voc vai correr com, e voc deve dizer ao compilador que a velocidade do clock do micro estar funcionando em. Estes so definidos de acordo com as Configuraes -> Parameters MCU ... menu. Em geral, voc no precisa mudar o tempo de ciclo, 10 ms um bom valor para a maioria aplicaes. Digite a frequncia do cristal que voc vai usar com o microcontrolador (ou o ressonador cermico, etc) e clique ok. Agora voc pode gerar o cdigo de seu programa. Escolha Compilar -> Compile, ou compilar -> Compilar como ... Se voc j compilou este programa e voc quer especificar um nome de arquivo de sada diferente. Se no houver nenhum erros, em seguida LDmicro ir gerar um arquivo Intel IHEX pronto para programao em seu chip. Use o software de programao que quer e hardware que voc tem que carregar o hex arquivo para o microcontrolador. Lembre-se de definir os bits de configurao (Fusveis)! Para os processadores PIC16, os bits de configurao esto includas no hex, ea maioria dos softwares de programao vai olhar l automaticamente. Para processadores AVR necessrio definir os bits de configurao mo. INSTRUES DE REFERNCIA ====================== > CONTACT, NORMALMENTE ABERTO Xname rname Yname ----] [--------] [--------] [---Se o sinal que vai para a instruo falsa, ento a sada

sinal falso. Se o sinal que vai para a instruo verdadeira, em seguida, o sinal de sada verdadeiro se e s se o pino de entrada dado, pino de sada, interna ou rel verdade, ento ele falso. Este instruo pode examinar o estado de um pino de entrada, um pino de sada, ou um rel interno. > CONTACT, normalmente fechado Xname rname Yname ----] / [--------] / [--------] / [---Se o sinal que vai para a instruo falsa, ento a sada sinal falso. Se o sinal que vai para a instruo verdadeira, em seguida, o sinal de sada verdadeiro se e s se o pino de entrada dado, pino de sada, interna ou rel falso, ento ele falso. Este instruo pode examinar o estado de um pino de entrada, um pino de sada, ou um rel interno. Isto o oposto de um contacto normalmente aberto. > COIL, NORMAL Yname rname

---- () -------- () ----

vai

Se o sinal que vai para a instruo falsa, ento o dado rel interno ou pino de sada eliminado falsa. Se o sinal que

para esta instruo verdadeira, ento o dado rel interno ou sada pin est definido verdade. No tem sentido atribuir uma varivel de entrada para um bobina. Esta instruo deve ser a instruo mais direita em seu degrau. > COIL, negada Yname rname

---- (/) -------- (/) ----

vai

Se o sinal que vai para a instruo verdadeira, ento o dado rel interno ou pino de sada eliminado falsa. Se o sinal que

para esta instruo falsa, ento o dado rel interno ou pino de sada definido verdade. No tem sentido atribuir uma entrada varivel a uma bobina. Isto o oposto de uma bobina normal. Este instruo deve ser a instruo mais direita em seu degrau. > COIL, SET-ONLY Yname rname ---- (S) -------- (S) ---Se o sinal que vai para rel interno ou pino de o interno rel ou sada de estado alterar o estado de uma tipicamente utilizado em combinao deve a instruo verdadeira, ento o dado sada definido verdade. Caso contrrio, pin no alterado. Esta instruo s pode bobina de falso para verdadeiro, ento com um rolo-s reposto. Esta instruo

ser a instruo mais direita na sua degrau. > COIL, REAJUSTE SOMENTE Yname rname ---- (R) -------- (R) ---Se o sinal que vai para a instruo verdadeira, ento o dado rel interno ou pino de sada eliminado falsa. Caso contrrio, o rel interno ou sada de estado pin no alterado. Esta instruo instruo s pode alterar o estado de uma bobina de verdadeiro para falso, por isso, normalmente utilizado em combinao com um conjunto de bobina de somente. Este instruo deve ser a instruo mais direita em seu degrau. > TURN-ON DELAY Tdon - [TON 1,000 s] Quando o sinal que vai para a instruo passa de falso para verdadeiro, o sinal de sada permanece falsa por 1,000 s, antes de ir verdade. Quando o sinal que vai para a instruo vai de verdadeiro para falso, a sada sinal vai falsa imediatamente. O cronmetro zerado cada vez que a entrada vai falsa, a entrada deve permanecer verdadeiro para 1000 milissegundos consecutivos antes a sada ser verdade. O atraso configurvel. O `tname" conta variveis acima de zero em unidades de tempos de varredura. O Instruo TON sadas de verdade quando a varivel do contador maior que ou igual a um dado atraso. possvel manipular a varivel de contador em outros lugares, por exemplo, com a instruo MOV. > Retardo de desligamento Tdoff - [TOF 1,000 s] Quando o sinal que vai para a instruo vai de verdadeiro para falso, o sinal de sada permanece fiel para 1,000 s antes de ir falsa. Quando o sinal que vai para a instruo passa de falso para verdadeiro, o sinal de sada vai verdadeiro imediatamente. O cronmetro zerado a cada vez que a entrada vai falsa, a entrada deve permanecer falsa para 1000 milissegundos consecutivos antes a sada ser falsa. O atraso configurvel. O `tname" conta variveis acima de zero em unidades de tempos de varredura. O Instruo TON sadas de verdade quando a varivel do contador maior que ou igual a um dado atraso. possvel manipular a

varivel de contador em outros lugares, por exemplo, com a instruo MOV. > RETENTIVE TIMER Trto - [RTO 1,000 s] Esta instruo mantm o controle de quanto tempo o seu contributo tem sido verdade. Se seu contributo tem sido verdade para pelo menos 1,000 s, ento a sada verdade. Caso contrrio, a sada falsa. A entrada no precisa ter sido verdadeiro para 1000 milissegundos consecutivos; se a entrada vai verdadeiro para 0,6 s, em seguida, durante 2,0 s falsos e, em seguida verdadeiro para 0,4 s, em seguida, o sada ir verdade. Aps a sada vai verdadeiro permanecer verdadeiro mesmo aps a entrada vai falsa, enquanto a entrada tem sido verdade por mais de 1,000 s. Este temporizador deve ser redefinido manualmente, com a instruo de reset. O `tname" conta variveis acima de zero em unidades de tempos de varredura. O Instruo TON sadas de verdade quando a varivel do contador maior que ou igual a um dado atraso. possvel manipular a varivel de contador em outros lugares, por exemplo, com a instruo MOV. > Redefinir TRTO cItems ---- {RES} -------- {RES} ---Esta instruo zera um temporizador ou um contador. TON e TOF temporizadores so reinicia automaticamente quando o seu contributo vai falsa ou verdadeira, ento RES no necessrio para estes temporizadores. Timers RTO e CTU / CTD contadores so no reiniciar automaticamente, de modo que deve ser redefinido mo usando um RES instrues. Quando a entrada for verdadeira, o contador ou temporizador reposto; quando a entrada falso, nenhuma ao ser tomada. Esta instruo deve ser a instruo mais direita na sua degrau. > ONE-SHOT RISING _ - [OSR_ /] Esta instruo normalmente sadas falsas. Se a entrada da instruo verdade durante este exame e foi falso durante a varredura anterior em seguida, a sada verdadeira. , por conseguinte, gera um impulso de uma analise

largura em cada flanco ascendente do seu sinal de entrada. Esta instruo til se voc deseja acionar eventos fora da borda de subida de um sinal. > ONE-SHOT QUEDA _ - [OSF \ _] Esta instruo normalmente sadas falsas. Se a entrada da instruo falso durante este exame e foi verdade durante a verificao anterior em seguida, a sada verdadeira. , por conseguinte, gera um impulso de uma analise largura em cada aresta de queda do seu sinal de entrada. Esta instruo til se voc deseja acionar eventos fora da borda de descida de um sinal. > Curto-circuito, CIRCUITO ABERTO ---- + ---- + -------- + + ---A condio de um curto-circuito de sada sempre igual ao seu condio de entrada. A condio de um circuito aberto de sada sempre falsa. Estes so principalmente teis para a depurao. > Controle Mestre RELAY - MESTRE RLY {} Por padro, o degrau em condio de cada degrau verdade. Se um mestre instruo rel de controle executado com um degrau em condio de falsa, ento o degrau em condio para todos os seguintes degraus torna-se falsa. Isso vai continuar at o prximo rel de controle mestre instruo for atingido (independentemente do degrau em condio de que instruo). Estas instrues devem ser usados em pares: uma para (talvez condicionalmente) comeam a seo possivelmente desativado, e um para acabar com ela. > Mover {destvar: = {} Tret: =} - MOV {123} - {srcvar MOV} dado Quando a entrada para esta instruo verdadeiro, ele define o

varivel de destino igual varivel de origem dado ou constante. Quando a entrada para esta instruo falsa nada acontece. Voc pode atribuir a qualquer varivel com a instruo de movimento; isto inclui o temporizador e as variveis do estado do contador, que pode ser distinguidos pelo lder `T 'ou' C '. Por exemplo, uma instruo

movendo 0 em `Tretentive ' equivalente a uma instruo reset (RES) para esse temporizador. Esta instruo deve ser a instruo mais direita no seu degrau. > ARITHMETIC OPERAO {ADD kay: = {} SUB CCNT: =} - {'A' + 10} - {CCNT - 10} > {MUL dest: =} {DIV dv: =} - {Var * -990} - {dv / -10.000} dado Quando a entrada para esta instruo verdadeiro, ele define o

varivel de destino igual a expresso dado. Os operandos tanto podem ser variveis (incluindo o contador de temporizador e variveis) ou constantes. Estas instrues de uso de 16 bits matemtica assinado. Lembrar que o resultado avaliado em cada ciclo, quando a condio de entrada verdade. Se voc est incremento ou decremento de uma varivel (ou seja, se a varivel de destino tambm um dos operandos), ento voc provavelmente no quer que, normalmente voc usaria um one-shot para que avaliada apenas na borda de subida ou de descida do input condio. Trunca dividem; 8/3 = 2. Esta instruo deve ser a instruo mais direita na sua degrau. > Comparar [var ==] [var>] [1> =] - [Var2] - [1] - [Ton] > [Var / =] [-4 <] [1 <=] - [Var2] - [vartwo] - [Copa] Se a entrada para esta instruo falsa, ento a sada falsa. Se dado a entrada verdadeiro, ento a sada verdadeiro se e s se o

condio verdadeira. Estas instrues podem ser utilizadas para comparar (corresponde a, maior do que, maior do que ou igual a, no igual a, inferior, inferior ou igual a) uma varivel para uma varivel, ou para comparar uma varivel para um de 16 bits assinado constante. > COUNTER Cname Cname - [CTU> = 5] ---- [CTD> = 5] Um contador incrementos (CTU, conte para cima) ou decrementa (CTD, count para baixo) a contagem associada a cada borda de subida da entrada degrau condio (ou seja, que a condio de entrada degrau passa de falsa para true). A condio de sada do contador verdadeira se o contador varivel maior ou igual a 5, e falso em contrrio. O

condio de sada degrau pode ser verdadeiro mesmo se a condio de entrada falsa, que s depende da varivel contador. Voc pode ter CTU e instrues CTD com o mesmo nome, a fim de incrementar e diminuir o mesmo contador. A instruo RES pode redefinir um contador, ou voc pode executar operaes de variveis gerais sobre a varivel de contagem. > COUNTER CIRCULAR Cname - {} CTC 00:07 que Uma circular contador funciona como um contador CTU normal, exceto

depois de atingir seu limite superior, ele redefine a sua varivel de contador volta para 0. Por exemplo, o contador mostrado acima contaria 0, 1, 2, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 2, .... Isso til em combinao com declaraes condicionais na varivel `Cname '; voc pode usar isso como um sequenciador. CTC contadores relgio na subida borda da condio de condio de entrada degrau. Esta instruo deve ser a instruo mais direita na sua degrau. > SHIFT REGISTER {Shift REG} - {3} reg0 .. Um registo de deslocamento est associado a um conjunto de variveis. Por exemplo, a este registador de deslocamento associado com as variveis reg0 `',` reg1' `Reg2 'e` reg3. A entrada para o registador de deslocamento `reg0 '. Em cada borda de subida do degrau em condio, o registrador de deslocamento ser Shift direita. Isso significa que ele atribui `reg3: = reg2 ',` reg2: = reg1. e `reg1: = reg0. `Reg0 ' deixado inalterado. A grande mudana registro pode facilmente consumir muita memria. Esta instruo deve ser a instruo mais direita na sua degrau. > Tabela look-up {dest: =} - {LUT [i]} A tabela look-up um conjunto ordenado de n valores. Quando o degrau em condio verdadeira, a varivel inteira `dest ' definido igual ao entrada na tabela de pesquisa que corresponde ao nmero inteiro varivel `I '. O ndice comea do zero, por isso `i 'deve estar entre 0 e (N-1). O comportamento desta instruo no est definido se o ndice est fora desta faixa. Esta instruo deve ser o mais direita

instruo em seu degrau. > Linear por partes TABLE {yvar: =} - {PWL [xvar]} Esta uma boa maneira de aproximar uma funo complicada ou curva. Ele pode, por exemplo, ser til se voc est tentando aplicar uma curva de calibrao para converter uma tenso de sada em bruto a partir de um sensor em unidades mais convenientes. Suponha que voc est tentando se aproximar de uma funo que converte uma varivel inteira de entrada, x, para uma varivel de sada inteiro, y. Voc conhecer a funo em vrios pontos, por exemplo, voc pode saber que F f f f (0) = 2 (5) = 10 (10) = 50 (100) = 100

Isto significa que os pontos (X0, (X1, (X2, (X3, y0) y1) y2) y3) = = = = (0, 2) (5, 10) (10, 50) (100, 100)

mentir sobre a curva. Voc pode inserir esses 4 pontos em uma tabela associado instruo linear por partes. O linear por partes instruo vai olhar para o valor de xvar, e defina o valor de yvar. Ele ir definir yvar de tal forma que a curva linear seccionalmente vai passar por todos os pontos que lhe do, por exemplo, se voc definir xvar = 10, ento a instruo ir definir yvar = 50. Se voc der a instruo de um valor de xvar que fica entre dois dos valores de x para os quais tenha dado aponta, ento o instruo ir definir yvar para que (xvar, yvar) encontra-se na reta so A linha ligando os dois pontos na tabela. Por exemplo, xvar = 55 proporciona uma sada de yvar = 75. (Os dois pontos do quadro 50) e (100, 100). 55 est a meio caminho entre 10 e 100, e 75 a meio caminho entre os 50 e 100, de modo (55, 75) situa-se que estes dois pontos.)

(10, est na linha liga

Os pontos devem ser especificados em ordem crescente de x coordenadas. Ele pode no ser possvel a realizao de operaes matemticas requeridas para certo olhar-up tabelas usando 16-bit matemtica inteiro, se este o

caso, ento LDmicro ir avis-lo. Por exemplo, este olhar para cima da tabela produzir um erro: (X0, y0) = (0, 0) (X1, y1) = (300, 300) Voc pode corrigir esses erros, tornando a distncia entre os pontos em a mesa menor. Por exemplo, esta tabela equivalente a uma dada acima, e que no produz um erro: (X0, y0) = (0, 0) (X1, y1) = (150, 150) (X2, y2) = (300, 300) Dificilmente deve ser sempre necessrio utilizar mais do que cinco ou seis pontos. Adicionando mais pontos faz com que seu cdigo maior e mais lento para executar. O comportamento se voc passar um valor de `xvar 'maior do que os maiores coordenada x na tabela ou menos do que a menor x coordenar na tabela indefinido. Esta instruo deve ser o instruo mais direita em seu degrau. > A / D CONVERTER LEIA Aname - {LEIA ADC} LDmicro pode gerar cdigo para usar o A / D conversores embutidos no certos microcontroladores. Se a condio de entrada para esta instruo verdadeira, ento uma nica amostra a partir do conversor A / D adquirida e armazenado na varivel `Aname '. Esta varivel pode, posteriormente, ser manipulado com as operaes de variveis gerais (menos que, maior que, aritmtica, e assim por diante). Atribuir um pino para o Axxx varivel `'no mesma forma que voc deve atribuir um pino para a entrada ou sada digital, clicando duas vezes na lista, na parte inferior da tela. Se a condio de entrada para este degrau falso, ento a varivel `Aname ' deixado inalterado. Para todos os dispositivos suportados atualmente, 0 volts de entrada corresponde a uma leitura do ADC de 0, e uma entrada igual a VDD (tenso de alimentao) corresponde a uma leitura do ADC 1023. Se voc estiver usando um AVR, em seguida, AREF ligar a VDD. Voc pode usar as operaes aritmticas para escalar o leitura para unidades mais convenientes depois, mas lembre-se que voc esto usando matemtica inteiro. Em geral, nem todos os pinos estaro disponveis

para uso com o conversor A / D. O software no ir permitir que voc atribuir pinos no-A / D para uma entrada analgica. Esta instruo deve ser a instruo mais direita na sua degrau. > SET PWM CICLO duty_cycle

- {PWM 32,8 kHz} -

LDmicro pode gerar cdigo para usar o PWM perifrica construdo para certos microcontroladores. Se a condio de entrada para esta instruo verdade, ento o ciclo de trabalho do PWM perifrica est definido para o valor do duty_cycle varivel. O ciclo deve ser um nmero entre 0 e 100, 0 corresponde sempre acessvel, e 100 correspondem aos sempre alto. (Se voc estiver familiarizado com a forma como funciona o PWM perifricos, em seguida, perceber que isso significa que LDmicro automaticamente dimensiona o varivel ciclo de por cento, para os perodos de clock PWM). Voc pode especificar o destino PWM freqncia, em Hz. A freqncia com que voc especificar pode no ser exatamente possvel, dependendo de como ele divide-se em frequncia de clock do microcontrolador. LDmicro vontade escolhe o mais prximo possvel de frequncia, se o erro grande, ento ele vai te avisar. Velocidades mais rpidas podem sacrificar a resoluo. Esta instruo deve ser a instruo mais direita em seu degrau. O tempo de execuo da lgica ladder consome um cronmetro para medir o ciclo tempo. Isso significa que PWM est disponvel apenas em microcontroladores com pelo menos dois temporizadores adequados. PWM usa pin CCP2 (no CCP1) PIC16 em chips e OC2 (no OC1A) em AVR. > FAA saved_var PERSISTENT - PERSIST {} Quando o degrau em condio desta instruo verdadeiro, ele faz com que o varivel inteira especificada para ser salvo automaticamente EEPROM. Que significa que seu valor vai persistir, mesmo quando o micro perde poder. No h necessidade de poupar explicitamente a varivel na EEPROM; o que vai acontecer automaticamente, sempre que as mudanas de variveis. O varivel automaticamente carregado de EEPROM aps power-on reset. Se

uma varivel que muda frequentemente feita persistente, em seguida, o EEPROM em seu micro pode desgastar muito rapidamente, porque s bom para um (~ 100 000) nmero limitado de gravaes. Quando o degrau em condio falsa, nada acontece. Esta instruo deve ser o instruo mais direita em seu degrau. > UART (SERIAL) RECEBER var

- {UART RECV} -

LDmicro pode gerar o cdigo a usar o UART construdos para de algum microcontroladores. Em AVRs com vrias UARTs s UART1 (no UART0) suportado. Configure a taxa de transmisso usando Configuraes -> MCU Parmetros. Certas taxas de transmisso no pode ser obtida com certa freqncias de cristal; LDmicro ir avis-lo se este for o caso. Se a condio de entrada para esta instruo falsa, ento nada acontece. Se a condio de entrada for verdade, ento esta instruo tenta para receber um nico personagem do UART. Se nenhum caracter lido ento a condio de sada falsa. Se um personagem lido, em seguida, a sua ASCII valor armazenado no `var, e da condio de sada verdadeira para um nico ciclo do PLC. > UART (SERIAL) ENVIAR var

- {UART SEND} -

LDmicro pode gerar cdigo para usar os UARTs construdos para determinado microcontroladores. Em AVRS com vrias UARTs s UART1 (no UART0) suportado. Configure a taxa de transmisso usando Configuraes -> MCU Parmetros. Certas taxas de transmisso no pode ser obtida com certa freqncias de cristal; LDmicro ir avis-lo se este for o caso. Se a condio de entrada para esta instruo falsa, ento nada acontece. Se a condio de entrada for verdade, ento esta instruo escreve um nico personagem para o UART. O valor ASCII do caractere para enviar devem ter sido previamente armazenados em `var '. A condio de sada do degrau verdadeiro se a UART est ocupado (atualmente a transmisso de um personagem), e false caso contrrio. Lembre-se que os personagens levar algum tempo para transmitir. Verifique a sada condio de esta instruo para garantir que o primeiro personagem tem sido transmitida antes de tentar enviar um segundo personagem, ou usar

um temporizador para programar um atraso entre os caracteres. Voc s deve trazer a condio de entrada verdadeira (tentar enviar uma personagem) quando a sada condio falsa (UART no est ocupado). Investigar a instruo string formatada (seguinte) antes de usar este instrues. A instruo string formatada muito mais fcil de usar, e quase certamente capaz de fazer o que quiser. > String formatada SOBRE UART var

- {"Presso: \ 3 \ r \ n"} -

LDmicro pode gerar cdigo para usar os UARTs construdos para determinado microcontroladores. Em AVRS com vrias UARTs s UART1 (no UART0) suportado. Configure a taxa de transmisso usando Configuraes -> MCU Parmetros. Certas taxas de transmisso no pode ser obtida com certa freqncias de cristal; LDmicro ir avis-lo se este for o caso. para Quando o degrau em condio para esta instruo passa de falsa

verdade, ele comea a enviar uma string inteira atravs da porta serial. Se a string contm a seqncia especial '\ 3', em seguida, que a seqncia vai ser substitudo pelo valor de var `', que automaticamente convertido em uma string. A varivel ser formatado para levar exactamente trs caracteres, por exemplo, se o `var ' igual a 35, ento a seqncia exata impresso ser `Presso: 35 \ r \ n '(observe o extra espao). Se, em vez `var 'eram iguais a 1432, ento o comportamento seria ser indefinido, porque 1432 tem mais de trs dgitos. Nesse caso seria necessria a utilizao de '\ 4', em vez. Se a varivel pode ser negativo, ento use '\-3d' (ou '\-4d' etc) em vez disso. Isso far com que LDmicro para imprimir um espao esquerda para nmeros positivos, e um sinal de menos precedente para nmeros negativos. Se vrias instrues string formatada so energizados ao mesmo tempo (Ou se for activado antes de outra termina), ou se estes instrues so misturados com as instrues UART TX, em seguida, o comportamento indefinido. Tambm possvel utilizar esta instruo para produzir uma corda fixa, sem interpolao valor de uma varivel inteira no texto que enviado atravs de srie. Neste caso, simplesmente no incluem o especial seqncia de escape.

Utilize '\ \' para uma barra invertida literal. Alm da sequncia de escape para interpolao uma varivel inteira, o seguinte controle caracteres esto disponveis: * \ R - retorno de carro * \ N - nova linha * \ F - formfeed * \ B - backspace * \ XAB - personagem com 0xAB valor ASCII (hex) A condio da sada da linha desta instruo verdadeiro, embora seja transmisso de dados, mais falso. Esta instruo consome muito grande quantidade de memria de programa, por isso deve ser usado com moderao. O implementao atual no eficiente, mas um melhor vontade exigir modificaes para todos os back-ends. UMA NOTA SOBRE A UTILIZAO DE MATEMTICA ==================== Lembre-se que LDmicro realiza apenas matemtica inteiro de 16-bit. Isso significa que o resultado final de qualquer clculo que efectue deve ser um inteiro entre -32768 e 32767. Tambm significa que o intermedirio resultados de seu clculo devem estar todos dentro desse intervalo. Por exemplo, digamos que voc queira calcular y = (1 / x) * 1200, onde x entre 1 e 20. Em seguida, y vai entre 1200 e 60, o qual se encaixa em um nmero inteiro de 16 bits, de modo que , pelo menos em teoria possvel executar o clculo. H duas maneiras que voc pode codificar o seguinte: voc pode realizar o inverso e, em seguida, multiplicar: | | | | | | | | | | | | {DIV temperatura: =} | | --------- {1 / x} ---------- | | | | {Y MUL: =} | | ---------- {Temperatura * 1200} ---------- | | | |

Ou voc poderia apenas fazer a diviso diretamente, em uma nica etapa: | | {DIV y: =} | | | | ----------- {1200 / x} ----------- | | Matematicamente, estes dois so equivalentes, mas se voc experimentlos, ento voc vai achar que o primeiro d um resultado incorreto de y = 0. Que porque a varivel underflows `temp '. Por exemplo, quando x = 3, (1 / x) = 0,333, mas que no um inteiro, a operao de diviso aproxima-se esta como temp = 0. Ento y = temperatura * 1200 = 0. Na segunda Caso no haja resultado intermedirio para underflow, por isso tudo funciona. Se voc est vendo problemas com sua matemtica, ento verifique intermedirio

resultados para underflow (ou transbordamento, o que `envolve ', por exemplo, 32767 + 1 = -32768). Sempre que possvel, escolher as unidades que colocam os valores em uma gama de -100 a 100. Quando voc precisa de escala varivel por algum fator, faz-lo usando uma multiplicao e uma diviso. Por exemplo, a escala y = 1,8 * x, calcular y = (9/5) * x (Que a mesma, uma vez que 1,8 = 9/5), e como este cdigo y = (9 * X) / 5, executar a multiplicao em primeiro lugar: | | | | | | | | | | {Temperatura MUL: =} | | --------- {X} * 9 ---------- | | | | {DIV y: =} | | ----------- {Temp / 5} ----------- | |

Isso funciona para todo x <(32767/9), ou x <3640. Para valores maiores de x, a varivel 'temp' faria transbordar. No existe um limite inferior semelhante sobre x. CDIGO DE ESTILO ============ Eu permitir vrias bobinas em paralelo em um nico degrau. Isto significa que voc pode fazer coisas como esta: | 1 | | | | | | | | | | | | | | | | | Xa Ya | | -------] [-------------- () ------- | | | | Xb Yb | | -------] [------ + ------- () ------- | | | | | | Yc | | + ------- () ------- | | | |

Em vez disto: | 1 | | | | | | 2 | | | | | | 3 | | | | | | | | | | | | | | | | | Xa Ya | | -------] [-------------- () ------- | | | | | | | | | | Xb Yb | | -------] [-------------- () ------- | | | | | | | | | | Xb Yc | | -------] [-------------- () ------- | | | |

Isto significa que, em teoria, voc pode escrever qualquer programa como um degrau gigante, e no h necessidade de usar mltiplos degraus de todo. Na prtica, isso seria uma m idia, porque, como degraus se tornam mais complexos tornam-se mais difcil de editar sem apagar e redesenhar muita lgica. Ainda assim, muitas vezes uma boa idia para a lgica relacionada grupo juntos como uma nica tocado. Isso gera cdigo quase idntico ao se voc fez degraus separados, mas isso mostra que eles so relacionados quando voc olha para eles na escada diagrama. *** Em geral, considera-se uma forma pobre para escrever o cdigo de tal maneira que a sua produo depende da ordem dos degraus. Por exemplo, este cdigo no muito bom se ambos Xa e Xb pode sempre ser verdadeiro: | 1 | | | | | | | | | 2 | | | | | | | | | | | | | | Xa {v: =} | | -------] [-------- {12} MOV - | | | | Xb {v: =} | | -------] [-------- {23} MOV - | | | | | | | | | | [V>] Yc | | ------ [15] ------------- () ------- | | | |

Eu vou quebrar esta regra, se ao faz-lo eu posso fazer um pedao de cdigo significativamente mais compacto, no entanto. Por exemplo, aqui est como eu faria converter uma quantidade binrio de 4 bits em XB3: 0 em um nmero inteiro: | 3 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | {V: =} | | ----------------------------------- MOV {0} - | | | | Xb0 {ADD v: =} | | -------] [------------------ V + {1} ----------- | | | XB1 {ADD v: =} | | -------] [------------------ V + {2} ----------- | | | XB2 {ADD v: =} | | -------] [------------------ V + {4} ----------- | | | XB3 {ADD v: =} | | -------] [------------------ {V + 8} ----------- | | |

| | | |

Se a instruo MOV foi transferida para o fundo do degrau, em vez de o

superior, ento o programa seria ser 0. A sada do em que as instrues so codificar isso de BUGS ====

valor de v quando ele lido em outras partes do referido cdigo, por conseguinte, depende da ordem avaliadas. Considerando o quo complicado seria outra forma, eu aceito isso.

LDmicro no gerar cdigo muito eficiente, ele lento para executar e desperdcio de flash e RAM. Apesar disso, a PIC mdias ou AVR pode fazer tudo o que um pequeno PLC pode, ento isso no me incomoda muito. O comprimento mximo de nomes de variveis muito limitado. Isto de modo que eles se encaixam muito bem no diagrama de escada, ento eu no vejo uma boa soluo para isso. Se o seu programa muito grande para a poca, a memria de programa ou dados de memria restries do dispositivo que voc escolheu, ento voc provavelmente no vai obter um erro. Ela s vai estragar algum lugar. Programao Careless no arquivo de carregar / salvar rotinas provavelmente torna possvel travar ou executar cdigo arbitrrio dado um corrupto ou malintencionado Arquivo ld.. Por favor reportar bugs adicionais ou pedidos de funcionalidades ao autor. Agradecimentos: * Marcelo Solano, para relatar um bug UI em Win98 * Serge V. Polubarjev, no s para perceber que RA3: 0 no PIC16F628 no funcionou, mas tambm me dizer como corrigi-lo * Maxim Ibragimov, para relatar e diagnosticar os principais problemas com os at-ento-no testados ATmega16 e ATMEGA162 alvos * Bill Kishonti, para relatar que o simulador caiu quando o programa de lgica ladder dividido por zero * Mohamed Tayae, para relatar que as variveis persistentes foram quebrados no PIC16F628 * David Rothwell, para relatar vrios bugs de interface de usurio e uma problema com o "Exportar como texto" funo COPIAR E AVISO LEGAL ======================= NO USE o cdigo gerado pelo LDmicro em aplicaes onde SOFTWARE FALHA PODE resultar perigo vida humana e danos propriedade. THE AUTOR NO ASSUME RESPONSABILIDADE POR DANOS resultantes da operao DE LDmicro OR cdigo gerado pelo LDmicro.

Este programa software livre: voc pode redistribu-lo e / ou modific-lo sob os termos da GNU General Public License como publicado pela Free Software Foundation, tanto a verso 3 da Licena, ou (na sua opo) qualquer verso posterior. Este programa distribudo na esperana que ser til, mas SEM QUALQUER GARANTIA, sem mesmo a garantia implcita de COMERCIALIZAO ou ADEQUAO A UM DETERMINADO FIM. Veja a GNU General Public License para mais detalhes. Voc deve ter recebido uma cpia da GNU General Public License juntamente com este programa. Se no, veja <http://www.gnu.org/licenses/>. Jonathan Westhues Rijswijk - dezembro 2004 Waterloo ON - junho, julho 2005 Cambridge, MA - Sep, Dez 2005 Fevereiro, Mar 2006 Fev 2007 Seattle WA - fevereiro 2009 Email: jwesthues usurio, pelo acolhimento cq.cx

Vous aimerez peut-être aussi