Jump to content

Subtração em real (siemens s200)


fcarocha
 Share

Recommended Posts

Depois de uns dias fora, voltei e ja com alguns problemas...lol

numa subrotina estou a tentar fazer a subtraçao de valor em real, mas não estou a conseguir. o bloco não executa (ou esta sempre a executar).

Neste exemplo esta sempre a fazer a subtraçao.

---| M11.0|-------| Sub_real|

| |

Vd140 in1 | |

Vd144 in2 | |

neste exemplo nao chega a ser executada.

---| M11.0|------------| P |---------| Sub_real|

| |

Vd140 in1 | |

Vd144 in2 | |

Edited by fcarocha
Link to comment
Share on other sites

...

Neste exemplo esta sempre a fazer a subtraçao.

---| M11.0|-------| Sub_real|

| |

Vd140 in1 | |

Vd144 in2 | |

...

No exemplo assim, a subtração é executada quando o M11.0 é True e não é executada com o M11.0 a False

(não é executada sempre, depende do estado do M11.0)

...

neste exemplo nao chega a ser executada.

---| M11.0|------------| P |---------| Sub_real|

| |

Vd140 in1 | |

Vd144 in2 | |

No exemplo a cima a subtração É executada na transição de False para True do M11.0

Ricardo Timóteo

Link to comment
Share on other sites

sim, seria essa a ideia, mas não realiza. quando tiro o pulso esta sempre a contar. quando ponho o pulso, nao chega a executar a subtraçao e passa a ser executada a network seguinte

Link to comment
Share on other sites

Não percebi, que pulso?

Não ser executada e não veres ser executada, são duas coisas diferentes, a execução do programa é extremamente rápida e por normal, não consegues ver a execução dos flancos.

Executada é de certeza (isto é matemática pura e dura), podes é "destruir" as contas no ciclo seguinte ou noutras networks

Ricardo Timóteo

Link to comment
Share on other sites

referi-me ao pulso positivo. A memoria de saída é a primeira vez que é utilizada, e a seguir serve de comparação na network seguinte. No inicio do programa atribuo valor 0 (para não guardar valores anteriores). Para teste retirei o P e a subtracção esta sempre a contar e meto o resultado mantém se 0.

em anexo as duas linhas

https://www.dropbox.com/s/01v0z105dazn00y/Sem%20T%C3%ADtulo.jpg?dl=0

a ideia é que remova um valor x do valor actual do enconder e a maquina pare quando atingir esse valor.

Edited by fcarocha
Link to comment
Share on other sites

Tecnicamente falando: Pulso é um diminutivo de Impulso, um Impulso (por norma) tem uma duração superior ao do program cycle

O que chamas de pulso positivo, tecnicamente falando é um Flanco Positivo,que só está ativo durante 1 program cycle, quando o valor passa de false para true.

Como só mandas 2 linhas, não dá para perceber tudo que se passa, por exemplo quando é que ligas o M11.0? Só dá para perceber que desligas o M11.0 quando mandas andar para a frente, no entanto podes voltar a ligar (ou estar sempre a ligar) a mesma memória nas linhas a baixo ou a cima destas.

O problema que tens é "mau código" (leves a mal, mas é verdade), tu é que conhecer o processo, mas no início do movimento já deves saber qual é o teu setpoint ou distância, porque que não fazes os cálculos do setpoint (e/ou outros) no início do movimento (com um flanco) ?

No início calculas o setpoint, quando atingires, paras o movimento.

Ricardo Timóteo

Link to comment
Share on other sites

vou explicar o contexto.

A memoria M11.0 é activa quando termino outra sub-rotina (serve para terminar a outra e chamar esta). Nesta sub-rotina quero que o motor ande um valor x. O que 'tentei' fazer foi ao valor actual do encoder descontar o valor x (porque este movimento é para trás (tenho outro movimento para frente faço uma adição e trabalha bem). Para começar tenho de ler o valor do encoder vd 124 e subtrair o valor vd140, e o resultado ira ser a memoria vd144. depois faço uma comparação (coloco umas condições para garantir que não existe outro movimentos) e quando o valor do enconder foi superior a memoria o motor fica activo. se for igual faço um reset para para o motor e um reset a memoria.

Link to comment
Share on other sites

...

A memoria M11.0 é activa quando termino outra sub-rotina (serve para terminar a outra e chamar esta). ...

Percebi bem? Estás a encravar o funcionamento das rotinas com memórias? Ou seja, se a memória não estiver ativa, não chamas a rotina? Isso é uma péssima ideia...

...quando o valor do enconder foi superior a memoria o motor fica activo. ...

O que tens no código é valor inferior ( < )

Ricardo Timóteo

Link to comment
Share on other sites

No s200 tens de ter sempre uma condição para chamar um subprograma, assim criei uma memoria por subprograma.

já consegui resolver o problema da subtracção. só pode ganhar o sinal naquela network. se a memoria tivesse activa antes não executava.

a parte do encoder esta a funcionar, como a memoria é o valor do encoder menos x, o valor do encoder é maior. e eu quero que ele pare quando for igual.

Link to comment
Share on other sites

No s200 tens de ter sempre uma condição para chamar um subprograma, assim criei uma memoria por subprograma. ...

Por norma usa-se a SM0.0, é um bit de sistema que está sempre a 1

...e eu quero que ele pare quando for igual.

Se queres que ele pare quando for IGUAL (igual, mesmo) tens que criar ou configurar um interrupt,

Por norma, O Encoder gera vários impulsos durante Um Program Scan, ou seja, quando o programa olhar para o valor do encoder ou é menor ou é maior, a probabilidade de ser igual é mais ao menos a mesma de ganhares o euromilhões.

Ou crias/configuras um interrupt Ou uma histerese.

No interrupt fazes set a uma memória que manda parar o motor e faz reset à memória, mas atenção que o motor só vai parar no fim do cíclo (ou seja conta mais alguns impulsos), é uma possibilidade,

Alternativamente, programas uma histerese, ou seja antecipas a paragem para ele parar no sítio

Ricardo Timóteo

Link to comment
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
 Share

×
×
  • 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.