Contato e Coil Nearly In Control There8217s uma certa classe de produto para o qual you8217re muito melhor para comprar on-line. Especificamente, você está procurando coisas que são commodities (mas não itens em dólares), duráveis, pequenos e leves. Aqui estão algumas coisas em que you8217ll encontrará um negócio muito melhor no e-Bay, etc.: fita de rotulagem compatível com Brother (também conhecido como TZ-Tape) tão baixo quanto 5cartridge Cartuchos de tinta Baterias de botão (marca líder CR20328217s por menos de 1 e.) Baterias AAA Duracell, pacotes de até 100 adaptadores USB para isqueiro de carro (especialmente os de alta potência de 2,4 amperes). Todas as peças eletrônicas, obviamente, para baterias AA, aparentemente existem evidências de que as baterias AA da marca Kirkland Costco8217s são realmente baterias Duracell rebranded, então eu posso encontrar Um preço melhor do que eles on-line. Uma vez que praticamente todas as peças eletrônicas são feitas na China, você pode obtê-las no AliExpress para obter preços extremamente baixos e, normalmente, você pode comprar gratuitamente. Eu regularmente compro placas compatíveis com Arduino ou ESP8266, provedores de protótipos, fontes de energia e solicitação de pedidos de sensores da AliExpress com frete grátis, tudo por menos de 10, às vezes tão baixo quanto 1,80 com frete grátis, e o único down-side é que você tem que Espere um mês ou dois. Se você precisar dele mais rápido, e it8217s é um item mais popular, provavelmente é um pequeno importador que possui algum vendedor na e-Bay em seu próprio país, para uma pequena marcação. Isso é verdade para baterias, carregadores, cartuchos de tinta e fita e geralmente para placas de microcontroladores populares. No ano passado, eu trabalhei em um tutorial TwinCAT 3. E com a publicação do capítulo 13 sobre o TwinCAT 3 Scope View. I8217m considerando-o 8220complete.8221 I8217ve abrangeu todos os principais tópicos que eu queria cobrir. Escrever um tutorial como este foi realmente uma experiência de aprendizagem para mim. Antes de fazer qualquer declaração sobre o software, tentei validar os meus pressupostos primeiro, e muitas vezes eu aprendi que tinha noções preconcebidas sobre como funcionou, o que talvez não tenha sido completamente exato. Se você for um programador TwinCAT 3, então você precisa saber o seu conjunto de ferramentas dentro e por fora. Se você não tiver certeza de como algo funciona, o it8217 é o melhor para configurar um teste rápido e experimentá-lo. That8217s uma das vantagens do software baseado em PC: se você deseja executar um teste, o PC do seu escritório é um ambiente de laboratório. Escreva algum código e execute-o. Obrigado a todos os que ofereceram comentários sobre as seções existentes e para aqueles que continuaram me empurrando para continuar escrevendo mais. Espero sinceramente que este seja o elo perdido para levar as pessoas do mundo dos PLC tradicionais ao mundo mais interessante e, finalmente, mais poderoso do controle baseado em PC. Parece que TwinCAT 3 tem um futuro viável à frente. O interesse parece estar crescendo ao longo do tempo (de acordo com o Google Trends, de qualquer maneira): Isso faz do TwinCAT 3 uma habilidade valiosa para aprender se você é um integrador e uma tecnologia interessante para investigar as plantas existentes. Olhar fixamente pelo barril de um grande projeto de programação de automação é intimidante. It8217 é difícil de saber por onde começar. Mesmo quando você já fez alguns antes, você só está marginalmente mais confiante na próxima vez. Eu tenho alguns grandes projetos de programação de automação sob o meu controle, então eu acho que posso generalizar o processo um pouco. Aqui vai: 1. Obtenha as impressões There8217s quase nenhum ponto em começar a programar, a menos que você tenha um conjunto quase final de desenhos elétricos. Se você ainda não o fez, pressione-os e vá fazer algo mais produtivo até você obtê-los. 2. Crie uma especificação funcional Você don8217t sempre precisa escrever uma especificação funcional, mas pelo menos precisa existir muito claramente em sua cabeça. Se em qualquer ponto, você não sabe exatamente como a máquina deve funcionar com detalhes excruciosos, pare de escrever o código e descubra. Pergunte aos interessados, fale com as operadoras, seja lá o que for necessário. As especificações funcionais são melhor escritas como uma lista de 8220user stories8221. Se você não tiver certeza de como deve ser uma especificação funcional, confira as especificações funcionais indoloras por Joel Spolsky. 3. Shamelessly Copy Identifique quais outros projetos você pode encontrar com a lógica que você pode roubar. Qualquer código que funcione em outra máquina tenha a vantagem de já ser depurado. Don8217t reinventar a roda. (Ao mesmo tempo, nunca copie a lógica de forma cega sem compreendê-la. Copiar o código, reciclando-o de uma vez a cada vez é mais rápido do que escrevê-lo do zero, e it8217s uma forma de revisão de software.) 4. Estrutura seu projeto Agora você abre o software de programação da lógica ladder e começa a criar seu projeto. Escolha o tipo de CPU, configure os cartões IO com base nos desenhos elétricos. Mapeie suas insumos. Planeje seu programa criando programas ou rotinas para cada unidade funcional da máquina. Configure seus passos de resumo de falhas e sua lógica de alarme. 5. Escreva a lógica do modo manual A lógica do PLC geralmente é escrita 8220bottom up.8221 A lógica do modo manual é o nível de lógica mais baixo porque trata diretamente das funções individuais na máquina. Cilindro avançado. Retirar o cilindro. Eixo inicial. Eixo jog. Enquanto you8217re escrevendo o modo manual, isso é quando você toma extremo cuidado, certificando-se de que as ações estão interligadas para que a máquina can8217t falhe. Se você estiver usando o padrão Five Rung. Isso significa prestar atenção ao que se passa no decurso seguro. O cilindro A sempre tem que avançar antes que o cilindro B possa avançar Os cortes Safe deve refletir isso. Certifique-se de que mesmo no modo manual, o operador (ou você) pode quebrar a máquina. Certifique-se de ligar suas falhas e alarmes aos limites de falhas aplicáveis e na lógica de alarme. 6. Escreva a lógica do rastreamento de peças Agora que o modo manual está completo, escreva a lógica que rastreia peças (e seu estado) através da máquina. Lembre-se, você deve poder executar a máquina no modo manual, e o rastreamento de peças deve (idealmente) funcionar corretamente. Eu sei que isso não é sempre o caso, mas surpreendentemente o acompanhamento parcial no modo manual pode funcionar 95 do tempo. Isso significa que os trabalhos de rastreamento parcial são baseados no estado da máquina. Fechando a pinça com o robô na posição de picking e a parte presente no sensor de fixação encaixada deve travar um pouco 8220 recordando8221 que a pinça tem uma parte nele. Uma vez que você escreveu sua lógica de rastreamento de peças, volte e use o rastreamento de peças e os bits de estado para condicionar seus comandos seguros. Don8217t deixe o operador (ou você) abrir por engano a pinça se a pinça tiver uma peça e isn8217t em uma posição segura para soltar a parte. Claro, talvez seja necessário adicionar uma maneira de anular manualmente isso (that8217s para o qual o forcing de saída foi criado), mas na maioria dos casos você deseja evitar uma operação incorreta. Parte da escrita da lógica de rastreamento de peças está adicionando telas 8220ghost buster8221. Os operadores muitas vezes precisam remover partes de uma célula e se a máquina pode detectar sua remoção, então você deve fornecer ao operador uma maneira de limpar esses 8220ghosts.8221 Neste ponto, you8217re realmente está pronto para despejar o programa e começar a testar A máquina eletricamente e mecanicamente. Embora it8217s sejam ideais para ter um programa bastante completo quando você entrar no site, todos sabemos que os 8217 não são sempre inteiramente possíveis. No mínimo, você deseja chegar a esse ponto antes do início da inicialização. 7. Escreva a lógica do modo automático A complexidade da sua lógica do modo automático depende do tipo de programação da máquina you8217re. You8217ll sempre precisa de um ciclo de início e um recurso de parada de ciclo. Mesmo se você estiver no modo automático, você geralmente não deseja que a máquina comece até que o operador diga especificamente para começar. Uma vez que o it8217s está funcionando, chamamos esse ciclo automático de 8220in. Em máquinas simples, você pode escrever a lógica automática preenchendo os passos do Trigger em sua lógica Five Rung. Comece colocando o contato In Cycle no início do rung e, em seguida, escreva lógica após aquilo que se expressa quando a ação deve ocorrer. Por exemplo, um nível de rejeição de antecipação do cilindro8217s O nível de disparo pode ser tão simples como In Cycle, Part Present e Part Rejected. Enquanto o bit de rastreamento do Part Present for apagado quando o cilindro estiver na posição avançada, então esta é toda a lógica do modo automático que você precisa para esse movimento. Tenha o intervalo de disparo de retração em Ciclo, sem parte presente e não retraído. Máquinas mais complicadas precisam de lógica de modo automático mais complicada. Se sua máquina tiver que realizar uma série de etapas (mesmo que algumas delas estejam em paralelo), considere usar o Padrão de Etapa. Se sua máquina precisa escolher entre vários possíveis cursos de ação (geralmente visto em um sistema de armazenamento e recuperação), considere usar o Padrão de Missão. It8217 é difícil de escrever a lógica correta. Analise suas especificações funcionais, ponto a ponto, e certifique-se de que sua lógica atenda a todos os requisitos. Verifique a lógica de erros. Um olhar fresco muitas vezes descobre suposições incorretas, erros de digitação e erros absurdos. Quanto mais cedo você encontrar e resolver problemas, mais fácil eles serão corrigidos. Faça uma lista de tudo o que você precisa fazer durante a inicialização. Iniciar uma máquina é demorado e, portanto, caro. Qualquer coisa que você possa fazer para preparar economiza tempo e dinheiro. Boa sorte e mantenha seus dedos fora dos pontos de pitada Esta informação é para um controlador Fanuc R30-iA, RJ3-iA ou RJ3-iB, mas pode funcionar com outros. Se você estiver procurando por uma maneira de enviar a posição TCP do mundo do robô (X, Y, Z, W, P, R) para o PLC, it8217s na verdade não são tão difíceis. O robô pode tornar a atual posição comum e mundial disponível em variáveis e você pode copiá-las para uma saída de grupo em uma tarefa lógica de fundo. Há uma ressalva, porém: os valores são atualizados apenas quando o you8217re está executando um programa. Eles don8217t atualizam durante a jogging. No entanto, há um trabalho para isso também. Primeiro você deve certificar-se de que o recurso para copiar a posição para as variáveis esteja habilitado. Para acessar a tela de variáveis, use MENU, 0 (Próximo), 6 (Sistema), F1 (Tipo), Variáveis. Encontre esta variável e defina-a como 1 (ou Verdadeiro): SCRGRP1.mposenb O nome dessa variável é Posição atual do pulso da máquina Agora crie um novo programa de robô e escreva o seguinte: GO1: X POS (SCRGRP1.MCHPOSX10) GO2: Y POS (SCRGRP1.MCHPOSY10) GO3: Z POS (SCRGRP1.MCHPOSZ10) GO4: W ANG (SCRGRP1.MCHPOSW100) GO5: P ANG (SCRGRP1.MCHPOSP100) GO6: R ANG (SCRGRP1.MCHPOSR100) Observe que I8217ve multiplicou o X, Y e Z por 10, então você terá que dividir por 10 em seu PLC. Da mesma forma eu multipliquei os ângulos W, P e R em 100, então divida por 100 no PLC. Para executar este programa em segundo plano, use MENU, 6 (Configuração), F1 (Tipo), 0 (Próximo), Lógica BG. Configure-o para executar o seu novo programa como uma tarefa em segundo plano. Obviamente você precisa enviar essas saídas de grupo para o PLC. O EthernetIP é ótimo para isso, mas você também pode usar bloqueios interligados. Você precisa ter certeza de que você tem bits suficientes para lidar com o alcance completo do movimento. Um inteiro de 16 bits deve funcionar muito bem para todos estes. Observe que o robô enviará números de negativos negativos para uma saída de grupo como complemento de dois8217s, portanto, certifique-se de mapear a entrada para o PLC como um inteiro assinado de 16 bits (a. k.a. INT na maioria dos PLCs). Para as posições X, Y e Z, um número inteiro de 16 bits lhe dará de 3276.7 mm para -3276.8 mm do alcance total. Para os ângulos W, P e R, você obtém 327.67 graus para -327.68 graus. Para a maioria dos aplicativos, isso é bom (lembre-se que isso é TCP, não ângulos de junção). Por favor, verifique se eles são adequados. Como eu disse, esses números don8217t atualizam enquanto você está jogando, e ganhou a atualização até o robô começar um movimento em um programa. Um pequeno truque é fazer uma mudança para a posição atual no início do seu programa: PR100: SCRATCHLPOS J PR100: SCRATCH 10 FINE Isso começa a enviar a posição sem mover o robô. Em meus programas, normalmente entrei um loop aguardando uma entrada do PLC, e dentro desse loop eu ativar e desativar um bit DO. O PLC detecta isso como um batimento cardíaco 8220 já para o comando8221, e enquanto o PLC ver esse pulsar, então ele sabe que o programa está sendo executado e os dados da posição são válidos. Outro truque que você pode usar é detectar quando o robô foi jogado: o nome dessa variável é Robot jogged. A descrição do manual é: 8220 Quando configurado em VERDADEIRO, o robô foi jogado desde o último movimento do programa. A execução de qualquer programa de usuário irá redefinir o flag.8221 That8217s como você obtém a posição mundial do TCP no PLC. Se você quiser apenas ângulos articulares, você pode usar SCRGRP1.MCHANGn como a variável, onde 8220n8221 é o número da junção. Nota importante . O IO provavelmente mudará de forma assíncrona para a varredura do programa, então o que você quer fazer é fazer uma cópia dos valores X, Y, Z, W, P, R no PLC e comparar os valores atuais com os valores da última Digitalizar. Se eles não mudaram, atualize seus valores reais, caso contrário, jogue-os porque eles podem não ser válidos. Se você tiver um PLC e IO de digitalização rápida, então você ainda pode continuar com o robô, mesmo durante um movimento rápido. Se você tiver um tempo de varredura lento em seu PLC, então você só poderá obter valores estáveis válidos quando o robô for parado. Agora, e se você quiser saber qual é a posição do TCP em relação a um dos seus quadros de usuários, o controlador do robô n8217 parece dar-lhe acesso a isso, mas o PLC pode pelo menos calcular as posições X, Y e Z do TCP em Seu próprio quadro de usuário, dada a posição mundial e os parâmetros do quadro do usuário. Primeiro você precisa encontrar os parâmetros precisos do quadro do usuário. Sob a tela de quadros normais, você só pode ter um ponto decimal de precisão, mas você precisa de 3 pontos decimais completos para que seus números no PLC correspondam à posição do quadro do usuário dada no robô. Você pode encontrar essas posições precisas em uma variável: use MENU 8211 0,6 (SISTEMA) 8211 F1 (TIPO) 8211 Variáveis 8211 MNUFRAME1,9 8211 F2 (DETALHE). O segundo índice no suporte quadrado é o número do quadro, então MNUFRAME1,1 é o quadro um e MNUFRAME1,2 é o quadro 2. Copie estes números exatamente. Aqui, as matemáticas para calcular o TCP em relação ao seu quadro de usuário. Todas as variáveis são LREAL (que é uma variável de ponto flutuante de 64 bits). Eu não sei se você pode usar um flutuador normal de 32 bits ou não. O resultado é o seu TCP no quadro do usuário. O ponto é o seu ponto na moldura mundial (do robô) e o Quadro é o dado preciso do quadro de usuário que você copiou da variável MNUFRAME. Result. Xmm: Point. Xmm - Frame. Xmm Result. Ymm: Point. Ymm - Frame. Ymm Result. Zmm: Point. Zmm - Frame. Zmm RadiansW: DegreesToRadians (-Frame. Wdeg) CosOfAngleW: COS (RadiansW) SinOfAngleW: SIN (RadiansW) RadiansP: DegreesToRadians (-Frame. Pdeg) CosOfAngleP: COS (RadiansP) SinOfAngleP: SIN (RadiansP) RadiansR: DegreesToRadians (-Frame. Rdeg) CosOfAngleR: COS (RadiansR) SinOfAngleR: SIN (RadiansR) Fanuc aplica rotações WPR Como W (em torno de Z), P (em torno de Y), R (em torno de X) ALTAR Z temp: Result. Xmm Result. Xmm: Result. Xmm CosOfAngleR - Result. Ymm SinOfAngleR Result. Ymm: Result. Ymm CosOfAngleR Temp SinOfAngleR ALREDEDOR DE Y Temp: Result. Zmm Result. Zmm: Result. Zmm CosOfAngleP - Result. Xmm SinOfAngleP Result. Xmm: Result. Xmm CosOfAngleP Temp SinOfAngleP AO REDOR de X temp: Result. Ymm Result. Ymm: Result. Ymm CosOfAngleW - Result. Zmm SinOfAngleW Resultado. Zmm: Result. Zmm CosOfAngleW temp SinOfAngleW Observe que DegreesToRadians () é apenas PIdeg180. Execute isso no seu PLC e verifique se os valores em sua variável de Resultado correspondem à posição TCP do quadro de usuário relatada no pendente de ensino. Não consegui calcular os ângulos W, P e R do TCP no quadro do usuário ainda. Atualmente eu apenas olho para W, P e R no quadro mundial se eu precisar saber se I8217m 8220 apontou para o 8221 algo. Se você conseguir que as matemáticas funcionem para W, P e R, I8217d realmente aprecio se você pudesse compartilhá-lo. Nos últimos anos, tenho me interessado nos efeitos da automação em nossa economia e nossa sociedade. Ao longo da história, todo avanço na tecnologia trouxe mais riqueza, saúde e oportunidade para todos. Com cada revolução, as pessoas mudaram de emprego, mas suas vidas melhoraram significativamente. Quando as fazendas foram mecanizadas, os trabalhadores se mudaram para a cidade e conseguiram empregos na fábrica, e as linhas de montagem de Henry Ford8217s fizeram uso desse trabalho para o grande efeito. As primeiras fábricas necessitaram de mão-de-obra em grandes quantidades e, à medida que os processos industriais se tornaram mais eficientes na utilização do trabalho, o valor do trabalho humano aumentou e a demanda continuou aumentando. Então pagou. Trabalhadores de fábrica até 708217 podiam pagar uma linda casa para criar uma família, um carro grande e até um barco ou boas férias. No entanto, desde o 708217, o poder de compra de um trabalhador de fábrica ou mesmo de um caixeiro de banco foi bastante plano. Estas são duas profissões que viram os mais avanços na automação nos últimos 30 anos, devido a robôs industriais e caixas automáticos. Se a automação torna os trabalhadores mais produtivos, por que não sabemos que isso se traduz em poder de compra Existem dois tipos de melhorias tecnológicas no trabalho aqui. Um agricultor com um trator é muito produtivo em comparação com um com cavalo e arado. Os trabalhadores agrícolas deslocados que foram para a cidade receberam as ferramentas da revolução industrial: máquinas a vapor, motores, bombas, hidráulica e assim por diante. Essas tecnologias amplificaram o valor do trabalho humano. Esse último tipo de melhoria tecnológica. O segundo tipo é o caixa automático ou o robô de soldagem. A tecnologia mais antiga agrega valor mesmo aos mais baixos empregados qualificados, mas a nova tecnologia está reduzindo seu valor e os novos empregos requerem níveis de habilidade significativamente maiores. Há alguma coisa sobre esta nova revolução que 8217s apenas8230 diferentes. A demanda por mão-de-obra de baixa habilidade é secar. A crescente divisão entre o 8220haves8221 eo 8220have-nots8221 foi documentada extensivamente. Algumas divide é boa e promove a economia e a produtividade. Demasiada separação é uma receita para problemas significativos. I8217m não é o único que se preocupa com esta questão, e como eu segui-a nos últimos anos, estive surpreendido com a quantidade de interesse em uma renda mínima garantida ou algum desses planos. Basicamente, envolve se livrar de todos os planos de assistência de baixa renda, como segurança social, bem-estar, leis de salário mínimo, etc. e criar um único benefício mensal universal para o qual todos tenham direito. Algumas pessoas estão falando sobre um número de até 24.000 por ano por adulto. Considerando que o nível de pobreza federal de 2015 nos EUA é apenas abaixo de 12.000 para um adulto solteiro, você pode ver que 24.000 por adulto não é apenas um montante insignificante. Para comparação, um pouco de Googling me diz que o PIB per capita dos EUA é de cerca de 55.000. Pense nisso por um segundo. Você está falando sobre garantir que quase 45 da produção de produtividade do país sejam distribuídos uniformemente em todos os adultos. Presume-se que você também forneceria algum dinheiro extra por criança em uma casa, mas para ser justo, a figura de 8220per capita8221 inclui crianças também. It8217s possíveis. Ainda assim, parece um pouco louco. É prática Won8217t algumas pessoas optam por não trabalhar Será que a produtividade vai para baixo Acontece que we8217ve fez algumas experiências com este tipo de programa no Canadá chamado MINCOME. Os resultados foram geralmente positivos. Houve uma pequena queda nas horas trabalhadas por certas pessoas, principalmente novas mães e adolescentes. Estes custos foram compensados em outras áreas: 8220 no período em que o Mincome foi administrado, as visitas hospitalares caíram 8,5 por cento, com menos incidentes de ferimentos relacionados ao trabalho e menos visitas a salas de emergência de acidentes de carro e abuso doméstico.8221 Mais jovens se formaram. Havia menos doença mental. I8217m fiscalmente conservador, mas I8217m principalmente pragmático. It8217s apenas meus anos de exposição à automação, tecnologia e trabalho em fábricas que me faz fazer essas perguntas. Não só acredito que as pessoas devem contribuir, acredito que as pessoas precisam contribuir para sua própria felicidade e bem-estar. Por essa razão, não acho que pagar as pessoas para se sentarem em casa é a solução definitiva. O elefante na sala é o seguinte: à medida que a tecnologia melhora, uma maior proporção da população simplesmente não será empregável. Lá, eu disse. Eu sei que é um pensamento perturbador. Nossa sociedade está estruturada em torno do oposto dessa idéia. Os homens estão particularmente sob pressão para o trabalho. A maioria do status oferecido aos homens em nossa sociedade vem do seu potencial de ganhos. A pressão social ainda estaria lá para funcionar, mesmo como um suplemento a uma renda mínima garantida, por isso ainda precisamos encontrar algo para essas pessoas fazerem. Talvez se expandimos o papel aceito dos homens na sociedade, então podemos preencher essa necessidade com o trabalho voluntário. Talvez. Qual é a resposta certa que eu não sei saber. Por falta de um termo melhor, o 8220American Dream8221 era acessível a qualquer pessoa se você estivesse disposto a trabalhar duro e reinvestir esse esforço em si mesmo. Nem todos fizeram isso, mas muitas pessoas criaram fortunas significativas para si mesmo depois de começarem no estoque e trabalharem em seu caminho. Essa segurança deu às pessoas uma disposição para assumir riscos e ser empreendedor. Os defensores da idéia dizem que uma renda mínima traria de volta essa vantagem inovadora. Os empresários poderiam tentar novas idéias repetidamente até encontrarem um que funcionasse e não se preocupar com a fama da família. Com suas necessidades básicas conhecidas, você poderia começar a perceber seu potencial ... Eu sei que, enquanto continuamos por esse caminho de automação crescente, podemos deixar uma maior e maior proporção da população sem os recursos básicos que precisam para sobreviver. Esperamos que eles cresçam seus próprios alimentos Em que terra Esperamos que eles façam um trabalho que eu poderia programar um robô para fazer, se o custo médio do robô8217s é de apenas 10 000 anos. Você tem algum trabalho valioso, podemos treiná-los para fazer Um que paga o suficiente para suportar um Look da família, eu também não gosto das alternativas, mas é melhor do que uma revolta armada. Tópico do contato e da bobina Nearly In Control TwinCAT 3: Texto estruturado TwinCAT 3 inclui todos os cinco idiomas IEC-61131-3: Escada Diagrama, texto estruturado, diagrama de bloco de funções, gráfico de funções seqüenciais e lista de instruções. Se você estiver vindo do mundo Allen-Bradley, obviamente, o Diagrama Ladder será a sua linguagem mais confortável, mas espero que você também queira usar o Texto Estruturado. De fato, o próprio Beckhoff apresenta o Texto Estruturado como o idioma de programação para a programação no TwinCAT 3. Prefiro escrever a maioria dos meus programas no Diagrama de Ladder por razões óbvias: facilidade de solução de problemas e capacidade de eletricistas entrar online com o Programa e depura-o. No entanto, podemos esquecer esse velho ditado, usar a ferramenta certa para o trabalho, 8221 e há momentos em que o Texto Estruturado é a ferramenta certa e o Diagrama de Ladder não é. Texto estruturado tem semelhanças com Pascal ou BASIC (pelo menos depois de remover o conceito de números de linha do BASIC). A característica mais aplicável do Texto Estruturado para nós é LOOP s. O FOR Loop Imagine por um momento que você tenha uma matriz de mil valores de dados REAIS e você deseja calcular a média desses valores. A fórmula é bastante simples: basta adicioná-los e dividir por 1000. Obviamente, isso apresenta alguma dificuldade no Diagrama de Ladder, mas em Texto Estruturado, podemos usar apenas um loop FOR. Comece criando uma nova função. Chame-o de AverageOf1000 e verifique se você seleciona uma função com o tipo de retorno de REAL. E Texto Estruturado (ST) na caixa suspensa Idioma de Implementação: Clique em Abrir. Agora, you8217ll tem uma função de Texto Estruturado vazia: Podemos passar a matriz como uma entrada, mas se você se lembrar da última seção, isso significaria copiar toda a matriz sempre que essa função for chamada, o que poderia afetar negativamente o tempo de varredura. It8217s é melhor passar por grandes estruturas de dados como esta por referência, o que significa que a declaramos como uma variável VARINOUT: Em seguida, declare algumas variáveis locais: uma para armazenar a soma dos valores e outra para ser um índice para aguentar onde estamos apontando para A matriz. Agora podemos escrever nossa lógica, que consiste em um loop FOR e uma operação de divisão: na linha 1, inicializa o valor da variável Sum para 0. Observe que: o operador significa atribuição. Ele calcula a expressão à direita (o RValue) e o armazena na variável à esquerda (o LValue). Observe também que cada declaração termina com um ponto e vírgula. Isso é importante e you8217ll obter um erro de sintaxe se você não o incluir (a exceção é o ponto e vírgula no final da linha 4, que é opcional, mas freqüentemente incluído em muitos exemplos de Texto Estruturado). As linhas 2 e 4 definem o loop FOR. A Linha 2 define uma variável de índice de loop (chamado Índice neste caso), seguido de um símbolo de atribuição (:). Isso significa que a variável Índice irá assumir os valores de 1 a 1000 e BY 1 significa que irá contar por 1. As linhas entre 2 e 4 são o que será executado com cada valor do Índice. Se você assistiu o tempo de execução, execute essa lógica, o que you8217d vê é (aproximadamente): Defina Índice para 1 Execute a linha 3 Defina o Índice para 2 Execute a linha 3 Defina o Índice para 3 Execute a linha 3 Defina o Índice para 4 Execute a linha 3 Defina o Índice para 5 Executar linha 3 8230 Definir índice para 999 Executar linha 3 Definir índice para 1000 Executar linha 3 Como você pode ver, os loops podem ter um impacto significativo no tempo de digitalização, especialmente porque o número de iterações torna-se alto. Se you8217re executando o TwinCAT 3 em um PC moderno, então 1000 iterações não são ruins, mas executar um milhão de iterações em um PC de 2 GHz provavelmente passará a ter no mínimo 0,5 milissegundos e a8217 sem fazer nada no circuito. Você deve estar ciente disso e programar de acordo. Se você estiver calculando a média das últimas 100 leituras de sensores, não se preocupe com isso, mas se você estiver fazendo cálculos matemáticos em milhares de pontos de dados, esteja ciente de que pode ser muito trabalho em um tempo de digitalização. A Linha 5 leva a Soma e divide-se por 1000, atribuindo o resultado ao valor de retorno da função. Observe que adicionei um ponto decimal ao valor 1000.0 e fiz isso para lembrar ao leitor que I8217m lidando com números de ponto flutuante aqui. Esta é uma escolha de estilo. Você não precisa fazê-lo. WHILE Loop (e IFTHENELSE Blocks) Outro tipo de loop é o loop WHILE. Em vez de executar um número fixo de vezes como um loop FOR, ele pode executar enquanto alguma condição for verdadeira. Por exemplo, let8217s dizem que queremos encontrar o primeiro índice em uma matriz onde o valor é maior do que algum valor: a finalidade dessa função é pesquisar uma matriz de 1000 valores e retornar o primeiro índice onde o valor é maior do que algum Limiar . Se não encontrar nenhum valor maior que o Limite, ele retornará 0, o que é um índice inválido. A linha 1 inicializa uma bandeira booleana, encontrada. FALSO. Uma vez que esta é uma função, it8217s não é realmente necessário porque o valor seria inicializado para falso sempre que você chamar a função, mas se este fosse um bloco de função, então você deseja incluir essa linha porque o valor seria mantido de chamada para chamada . A linha 2 inicializa a variável de índice para o primeiro índice de matriz (1). As linhas 3 e 9 definem o loop WHILE. As linhas 4 a 8 serão executadas repetidamente enquanto a expressão na linha 3 retornar verdadeira. Como você pode ver, fazemos um loop até que possamos encontrá-lo, ou o índice passa o limite superior da matriz. As linhas 4 a 8 compreendem um bloco IFTHENELSE. Se a expressão na linha 4 for verdadeira, então ele executa a linha 5. Se a expressão na linha 4 for falsa, então ela executará a linha 7 em vez disso. Para demonstrar como isso funciona, suponha que os valores na matriz são 25, 50, 75, 100, 125, etc. Suponha também que o Limiar é 80. Esperamos que a função devolva um valor de 4. Here8217s como a função executa: Linha 2 define Índice para 1 A Linha 3 é avaliada como verdadeira, pois encontrou-se falso e Índice é 1 A Linha 4 é avaliada como falsa (25 não é superior a 80) A Linha 7 define Índice para 2 A Linha 3 avalia como verdadeira, pois encontrou-se falso e Índice é 2 A linha 4 é avaliada como falsa (50 não é superior a 80) A linha 7 define Índice para 3 A Linha 3 é avaliada como verdadeira porque o resultado é falso eo Índice é 3 A Linha 4 é avaliada como falsa (75 não é superior a 80) A Linha 7 define Índice para 4 A linha 3 é avaliada como verdadeira porque o resultado é falso eo índice é 4 A linha 4 é avaliada como verdadeira (100 é maior que 80) Linha 5 conjuntos Encontrado como verdadeiro A linha 3 é avaliada como falsa porque A verdade é verdadeira A linha 11 é avaliada como verdadeira A linha 12 define a Valor de retorno da função para 4 (porque o índice tem o valor 4). Embora esta seja uma função perfeitamente razoável, Há também alguns problemas com isso. Em primeiro lugar, o tempo de varredura é bastante variável. O pior caso de tempo de varredura é quando o valor não foi encontrado e retorna 0. Nesse caso, itera através da matriz inteira. No melhor dos casos, retorna 1. O tempo de varredura variável pode levar a problemas se o pior caso nunca for testado, ou se você tem muitas funções como esta e há alguns casos diabólicos em que todos eles devem executar o pior caso no Mesmo digitalização, e você excede o tempo de varredura permitido. Em segundo lugar, a lógica é complexa. Alguns de vocês podem estar rindo de mim por terem dito isso. Se you8217re um programador de PC escrevendo código em C ou BASIC, então a função acima é realmente bastante simples, ainda que na programação do PLC temos uma ênfase anormal na simplicidade. Queremos uma lógica que seja obviamente correta quando olharmos para ela, e a função acima não é obviamente correta, a menos que lhe dê uma quantidade significativa de análise. Para analisá-lo, você realmente precisa usar o computador 82221 e percorrer pelo menos 2 cenários diferentes: um onde o valor é encontrado e outro onde não foi encontrado. No início desta seção, falei sobre esperar que os eletricistas acessassem nossos programas e fizessem a solução de problemas. Um eletricista pode entender o Diagrama Ladder, e com um pouco de trabalho eles provavelmente podem entender o exemplo FOR loop acima, mas haverá muitas pessoas que não conseguiram entender esse exemplo de um loop WHILE com blocos IFTHENELSE. Se você acredita nessas pessoas, você tem algum negócio em linha com um PLC, então sugira que você deva mudar sua atitude. A automação é um esporte em equipe e não temos espaço para a equipe para grandes egos. Use a lógica mais simples possível (não a mais curta). Se a programação da máquina you8217re tiver 10 motores, não tente escrever a lógica de inicialização do motor em Texto Estruturado com um loop FOR. Don8217t até criar um bloco de função e reutilizá-lo 10 vezes. Basta escrever 10 programas diferentes no Diagrama de Ladder e copiar a lógica. Certo, eles podem compartilhar alguma lógica comum, como uma bobina OkToRunMotors que é configurada em outro programa. Lembre-se que estes são 10 motores fisicamente diferentes e que as condições para iniciar e parar são susceptíveis de mudar ao longo do tempo. Reconheça isso e mantenha a lógica separada. Por outro lado, o Texto estruturado é a ferramenta certa para o log de eventos e a lógica de tratamento de receita de um programa. Um eletricista que efetua login no PLC para entender por que um motor não está começando isn8217t vai se preocupar com o módulo de log de eventos. Structured Text is also the right tool for manipulating data, such as a scan received from a barcode scanner or an RFID reader. Complex math is also more easily expressed in Structured Text. Using the right tool for the job means taking more than the problem itself into account. Make sure you take the capabilities of your team and the customer8217s capabilities into account too. Don8217t Loop on an Input A novice programmer will write this: Notice how we8217re looping on an input. An input is a real-world physical input. It only changes when an IO scan happens. When the runtime executes this logic, it will enter the loop and potentially never exit, and none of the rest of your program will execute again. The machine will appear to freeze, outputs will stay in their last state, and bad things will happen. Simply, if you8217re using an input as the conditional in a WHILE loop, then you don8217t have a good understanding of how the PLC runtime works, and you need to stop and go back to the beginning. Most PLCs work by reading the physical inputs into memory, running the program logic, and copying the new values of the outputs to the actual physical outputs (that8217s a simplification and not true of all PLCs, but it8217s a good model to start with), and then doing it again and again. The amount of time it takes to do all that is your scan time, and we want the scan time to be as short as possible. Causing the program to enter a loop that waits for an input to turn on will essentially stop the program. In some cases it will also prevent the IO scan from happening, so it8217s impossible for that input to change state again. The machine will freeze forever. Ladder Diagram doesn8217t give you the option of shooting yourself in the foot like this, but Structured Text does. Stay away from infinite loops. Mixing Ladder Diagram and Structured Text I8217ve shown you how you can write programs, functions, and function blocks in Structured Text, but sometimes it8217s nice to add a little Structured Text in the middle of your Ladder Diagram program. It turns out that a program can include something called an Action (which is like a mini local sub-program that you can call from your program) and the Action can be written in a different implementation language than the parent program. To add an Action . right click on an existing (Ladder Diagram) program and choose Add-Action8230 from the context menu. All you have to enter is a Name and choose an Implementation Language . Choose Structured Text. The new Action will show up in the Solution Explorer under your program. The Action has access to all the declarations (inputs, outputs, and local variables) of the parent program or POU. You can call the Action like any other program: just add a block and enter the Action name. String Functions String functions can be used in both Ladder Diagram and Structured Text, but when you start to do complicated string manipulation then I suggest moving into Structured Text because it can be easier to understand. Here are your typical string functions and what they do: LEN(s) 8211 returns the number of characters in string s LEFT(s, n) 8211 returns the n left-most characters from string s, or returns s if n LEN(s) RIGHT(s, n) 8211 returns the n right-most characters from string s, or returns s if n LEN(s) MID(s, n, p) 8211 returns n characters from string s, starting at position p (first character number is 1, not 0) CONCAT(s1, s2) 8211 returns strings s1 and s2 joined (concatenated) together INSERT(s1, s2, p) 8211 returns a new string formed by inserting s2 into s1 at position p DELETE(s, n, p) 8211 the opposite of MID. returns string s with the n characters starting at position p removed REPLACE(s1, s2, n, p) 8211 combines DELETE and INSERT 8211 removes n characters from s1 starting at position p, and replaces them with s2 FIND(s1, s2) 8211 returns the position of string s2 in string s1, or 0 if not found, and is case sensitive You can, of course, create your own string functions. For instance, it might be useful to have a different replace function that takes a 3 strings: a string to search, a string to find, a string to replace all instances of the found string with: Notice how the variables are declared as TMaxString instead of STRING 8230 STRING Limitations Since variables are statically allocated in TwinCAT 3, when you define a STRING variable you have to declare the length. Implicitly this is 80 characters, and it uses up 81 bytes of memory (80 for the data and one byte for a null terminator). Strings are limited to a length of 255 characters. There is a specific type called TMaxString which is an alias for STRING(255) . Be careful because TwinCAT 3 will silently truncate a string to the maximum defined length of the destination string when you do an assignment. When you make your own string functions, you should use TMaxString as the variable type to make sure they work with any string passed to them. If you don8217t, the input and output variables will be silently truncated to the length you specify. Conclusions Structured Text is a powerful tool. In some PLCs, like the Allen-Bradley ControlLogix line, you have to pay extra for the Structured Text editor, but with TwinCAT 3 you get it for free. (Actually, you get the Ladder Diagram editor for free too8230) With great power comes great responsibility. Use your new powers wisely and sparingly. When programming PLCs, the first priority is correctness and the second priority is readability. Nobody gets points for writing fewer lines of code. Lembre-se disso. Comentários estão fechados.
Reino Unido Opções Binárias Regulamentação é binário Opções de jogo ou de investimento Existe alguma diferença Este post lança um olho sobre a postura possível da FCA e sua atitude para o Reino Unido opções binárias regulamento. A regulação de opções binárias do Reino Unido (no próximo ano) passa a ser da responsabilidade da Autoridade de Conduta Financeira do Reino Unido (FCA). Como o status de opções binárias continua a exercer as mentes dos bons e grandes nos escritórios de regulamentação financeira em todo o mundo, agora o UK8217s FCA (relutantemente) se junta a esta multidão alegre. As opções binárias, até agora, foram consideradas como apostas no Reino Unido e, como tal, foram regulamentadas pela UK Gambling Commission: até agora porque o Reino Unido decidiu que as opções binárias devem ser regulamentadas pela FCA. Trata-se de uma aceitação implícita de que a negociação de opções binárias não faz parte do jogo e é um investimento de boa-fé ou é o Reino Unido uma vez mais doffing ...
Comments
Post a Comment