Downloads
O que esta aplicação faz?
O projeto implementa uma aplicação de controle de movimento para um sistema MultiBelt composto por três trens ou carros sincronizados em um percurso circular. Cada trem se desloca entre uma estação de carregamento e uma ou duas estações de descarregamento, mantendo sua distância em relação ao trem anterior para evitar colisões ou aproximações abaixo de uma distância mínima configurada.
A aplicação é executada em um controlador GuardLogix/ControlLogix/CompactLogix e utiliza dois principais dispositivos de movimento: Drive_1 e Drive_2. Os eixos dos trens são nomeados Ax_Train1, Ax_Train2 e Ax_Train3, e também há um eixo de esteira de entrada chamado In_Belt, junto com o eixo Ax_Converter, todos agrupados no grupo de movimento Axes.
A lógica é organizada em três blocos. Main_Program governa a sequência geral: inicializa parâmetros e gerencia a partida, parada, reset de falhas, simulação de produto, coordenação do MultiBelt e gerenciamento dos eixos. Main_Motion_Prg executa os comandos de movimento Q_MAM e publica posições de comando para visualização ou integração externa. SafetyProgram gerencia a função Safe Torque Off dos trens por meio de AOIs de segurança codificadas.
O objetivo deste documento é comissionar a aplicação MultiBelt de três trens (ou uma configuração adaptada à necessidade), executar o ciclo, observar o movimento e pará-lo de forma controlada. O modo de uso previsto é um ambiente que suporte controle de movimento, com um grupo de eixos sincronizado, drives configurados e uma cadeia Safe Torque Off validada.
O problema que ela resolve é a coordenação de vários transportadores independentes no mesmo trilho fechado. A lógica impede que um trem alcance o trem à frente calculando a distância circular entre os eixos, aplicando uma distância mínima, alternando para o modo em fila quando o espaçamento diminui e propagando feedforward de posição do eixo anterior para o trem seguinte.
Limitações/Desvantagens
A aplicação não deve ser operada em equipamentos reais sem uma revisão de segurança, validação mecânica e autorização da pessoa responsável pela célula. As funções de movimento e segurança devem primeiro ser validadas em um ambiente seguro.
Observação: você precisará concordar com os Termos e Condições de cada download.
Precisa de ajuda?
Se você precisar de ajuda com uma inscrição ou tiver um feedback do centro de inovação, escreva para nós.
Esta aplicação é relevante para mim?
É útil para qualquer pessoa que precise entender, comissionar ou demonstrar uma aplicação de transporte com vários carros coordenados no Studio 5000.
Áreas de Aplicação: Aplicações de transporte de produtos com carros ou trens independentes em um trilho fechado, onde cada transportador é carregado vagão por vagão em uma estação e descarregado em uma ou duas estações a jusante, e onde uma separação mínima entre transportadores deve ser garantida. O projeto também serve como demonstração de controle de movimento coordenado e de integração com visualização ou simulação externa por meio das tags To_E3D_T1_CmdPos, To_E3D_T2_CmdPos e To_E3D_T3_CmdPos.
Como posso fazer funcionar?
Requisitos: produtos, ferramentas e conhecimentos prévios.
Hardware:
- Controlador 1756-L84ES ou equivalente, revisão principal 36.
- Kinetix 5700/5500/5300
Software:
- Studio 5000 Logix Designer versão 36 ou posterior, compatível com projetos de movimento e segurança.
- Arquivo de projeto Q_MAM_P_v3_GL.acd.
Conhecimento prévio
- Programação no Studio 5000, controle de movimento CIP (grupo de eixos, modos de deslocamento, position unwind e as instruções MAM, MAJ, MAS e MRP), uso de Add-On Instructions e entendimento básico de aplicações de segurança com Safe Torque Off.
Guia de Implementação
- Passo 1
- Passo 2
- Passo 3
- Passo 4
- Passo 5
- Passo 6
- Passo 7
- Passo 8
- Passo 9
- Passo 10
- Passo 11
- Passo 12
- Passo 13
- Passo 14
- Passo 15
- Passo 16
- Passo 17
Preparação do ambiente
Abra o arquivo Q_MAM_P_v3_GL.acd em um ambiente de programação que suporte projetos Logix versão 36 e verifique se o controlador de destino é um 1756-L84ES ou compatível, revisão principal 36.
Antes de continuar, confirme que existem: as tarefas SafetyTask, _01_MainTask e _03_MotionEventTask; os programas Main_Program, Main_Motion_Prg e SafetyProgram; os eixos Ax_Train1, Ax_Train2, Ax_Train3, Ax_Converter e In_Belt; o grupo de movimento Axes; e os módulos de drive Drive_PowerSupply, Drive_1 e Drive_2 com seus endereços.
Confirme também que as AOIs necessárias estão presentes no projeto.
Revisão antes do download
Verifique se os eixos estão corretamente atribuídos aos seus drives e se os parâmetros de movimento são seguros para o equipamento ou para o simulador. Verifique se as posições iniciais esperadas são compatíveis com a mecânica, se as condições mecânicas permitem movimento positivo ao redor do trilho circular e se o sistema consegue parar os trens com a desaceleração configurada.
Posições iniciais de comando e estações
Elemento |
Valor esperado |
|---|---|
Ax_Train1 - posição inicial de comando |
2000 |
Ax_Train2 - posição inicial de comando |
1500 |
Ax_Train3 - posição inicial de comando |
1000 |
LoadingStationPosition |
1650.0 |
UnloadingStationPosition_1 |
200.0 |
UnloadingStationPosition_2 |
300.0 |
Configuração dos trens e parâmetros Q_MAM
Parâmetro |
Valor |
|---|---|
T1_NofWagons, T2_NofWagons, T3_NofWagons |
4 |
Tamanhos dos vagões por trem |
60, 120, 60, 60 |
Comprimento calculado por trem |
300 |
Q_MAM speed |
2500 |
Aceleração Q_MAM |
15000 |
Desaceleração Q_MAM |
15000 |
Jerk de aceleração |
33 |
Jerk de desaceleração |
33 |
Tolerância da posição-alvo |
0.05 |
Unwind calculado do trilho |
aproximadamente 2072,5 |
Download e modo de execução
Fique online com o controlador ou com o ambiente de simulação e faça o download do projeto. Se um download completo for necessário, coloque o controlador em modo Program; quando o download for concluído, altere para o modo Run ou Remote Run.
Verifique se _01_MainTask é executada periodicamente a cada 10 ms, se _03_MotionEventTask está associada ao evento Motion Group Execution e se SafetyTask é executada a cada 20 ms. Por fim, confirme se o grupo Axes está sincronizado por meio de Axes.GroupSynced: essa condição habilita toda a sequência seguinte.
Inicialização automática
Quando o scan começa, Main_Rtn aguarda Axes.GroupSynced ficar ativo e inicia o temporizador ProgramScanDelay. Enquanto ProgramScanDelay.DN não estiver definido, Main_Rtn chama _00_InitVar e interrompe temporariamente o restante do scan da aplicação com TND, para que as variáveis de configuração e posição sejam inicializadas antes que as sequências normais sejam permitidas.
_00_InitVar define InitializeVariables e redefine internamente as posições de comando dos trens quando elas não correspondem às posições iniciais esperadas. Em seguida, usa instruções GSV para ler o CoarseUpdatePeriod do grupo Axes e convertê-lo para segundos, e lê TravelMode, ConversionConstant e PositionUnwind de cada eixo para calcular Train1_Unwind, Train2_Unwind e Train3_Unwind.
Se os três valores de unwind forem iguais e os três eixos tiverem TravelMode igual a 2, o valor comum é copiado para Trains_Unwind e TrainsConfCorrect é definido. A rotina então carrega as posições das estações, deixa EnableUnloadingStation1 desligado, configura os quatro vagões por trem com seus tamanhos, calcula o comprimento de cada trem usando loops LBL e JMP, e grava os parâmetros Q_MAM comuns em Train_1_QMAM_Data, que são então copiados para Train_2_QMAM_Data e Train_3_QMAM_Data.
Por fim, ela atribui a distância mínima de cada trem com base no comprimento do trem precedente e desliga RUN_CYCLE e CycleSimulationEnabled, deixando o sistema em um estado seguro de espera.
Verificação de segurança antes da partida
Confirme se as entradas Safe Torque Off dos drives estão saudáveis, se Train_SafeTorqueOff.Inp_SafetyInterlockOK está ativo, se não há erros ativos em Train_SafeTorqueOff.Sts_ER e se Train_SafeTorqueOff.Sts_TorqueDisabled reflete corretamente o estado de STO dos trens. Se um reset de segurança for necessário, defina momentaneamente SafetyResetRequest.
SafetyProgram.MainRoutine copia essa solicitação para Train_SafeTorqueOff.Cmd_Reset e chama Trains_SafeTorqueOff, que distribui Cmd_Reset, Cfg_AutoReset, Cfg_StopCategory e Cfg_StopTime para as três instâncias internas _Trains_SafeTorqueOff_M1, _Trains_SafeTorqueOff_M2 e _Trains_SafeTorqueOff_M3. M1 e M2 estão conectadas aos sinais de segurança 1 e 2 do Drive_1, e M3 ao sinal de segurança 1 do Drive_2.
Train_SafeTorqueOff.Sts_TorqueDisabled é definido quando todas as três instâncias reportam torque desabilitado, e Sts_MotionStop quando todas as três reportam movimento parado. Se qualquer instância reportar um erro, seus códigos Sts_ERR e Sts_EXERR são copiados para o objeto global e Train_SafeTorqueOff.Sts_ER é definido. Não solicite uma partida enquanto as condições de segurança estiverem inibindo o movimento.
Reset de falha da aplicação
Defina momentaneamente FaultReset_Cmd. A sequência FaultResetCycle percorre estados numerados e termina em 999 quando o reset é concluído com sucesso.
Estado de FaultResetCycle |
O que deve acontecer |
|---|---|
10 |
Confirme se o intertravamento de segurança está OK e se AxesTorqueDisabled reflete o estado esperado para reset; SafetyResetCmd é gerado quando aplicável. O ciclo avança para 20 quando o torque não estiver mais desabilitado |
20 |
Se AxesFaultedState estiver ativo, AxesResetFault_Cmd é definido e _99_AxManager gera ClearFaults para os eixos em falha. O ciclo avança para 30 quando nenhum eixo estiver em falha |
30 |
ApplicationMotionError é limpo se estiver ativo e, se AbortCycle existir, Trains_ResetCycle é gerado |
999 |
Ciclo de reset concluído |
Inicialização dos eixos
Verifique se AxesAvailableState está ativo, AxesFaultedState está inativo e AxesTorqueDisabled está inativo antes de habilitar o movimento. Em seguida, defina momentaneamente StartUp_Cmd e confirme se StartUpCycle avança para o estado 10.
AxesOn_Cmd é definido quando os eixos estão disponíveis, sem falha, sem torque desabilitado e ainda não ativados. Em _99_AxManager, você deve ver AxT1_Ctrl_Cmd.Activate, AxT2_Ctrl_Cmd.Activate e AxT3_Ctrl_Cmd.Activate serem gerados, desde que o eixo correspondente não tenha Safe Torque Disabled e o dispositivo esteja disponível. Quando AxT1_Ctrl_Sts.Activated, AxT2_Ctrl_Sts.Activated e AxT3_Ctrl_Sts.Activated estiverem todos ativos, AxesON se torna verdadeiro e StartUpCycle termina em 999.
Início do ciclo MultiBelt
Com AxesON, TrainsConfCorrect e RunCycleEnabled ativos, defina momentaneamente RunCycle_Cmd. RunCycleState avança para o estado 10 e RUN_CYCLE é travado. Se a execução não for permitida, a sequência é invalidada com um estado negativo.
_01_MultiBelt define Enable_MultiBelt_AOI quando Axes.GroupSynced e InitializeVariables são verdadeiros e Trains_ResetCycle não está ativo. Isso executa as três instâncias Train_1_AOI, Train_2_AOI e Train_3_AOI de AOI_MultiBelt_SingleTrain. Cada instância recebe seu array de tamanhos de vagão, o número de vagões, as posições de carregamento e descarregamento, o unwind do trilho, o status RUN_CYCLE, o gatilho de produto In_ProductTrigger, o sinal de descarregamento concluído e o status de movimento concluído do seu Q_MAM, e retorna Out_TrainTargetPosition.
A rotina declara MultiBelt_Ready quando o ciclo está ativo e pelo menos um trem está na estação de carregamento, e consolida os erros das AOIs: se qualquer trem reportar Sts_ER, MultiBelt_Cycle_Error é definido e RUN_CYCLE é desligado. Cada AOI define Cmd_Q_MAM_Exe quando precisa mover seu trem.
Execução do movimento Q_MAM
Move_Commands bloqueia sua execução enquanto ProgramScanDelay.DN não estiver definido, o que evita que comandos de movimento sejam enviados antes que a inicialização esteja concluída. Em seguida, chama a AOI Q_MAM_P_V3 para cada trem quando a AOI correspondente do trem solicita isso por meio de Cmd_Q_MAM_Exe. O encadeamento dos eixos precedentes e dos parâmetros vinculados é circular.
Trem |
Instância Q_MAM |
Alvo |
Eixo |
Eixo precedente |
Parâmetros vinculados (entrada / saída) |
|---|---|---|---|---|---|
1 |
Train1_QMAM |
Train_1_TargetPosition |
Ax_Train1 |
Ax_Train3 |
Train3_LinkedParametersOutput / Train1_LinkedParametersOutput |
2 |
Train2_QMAM |
Train_2_TargetPosition |
Ax_Train2 |
Ax_Train1 |
Train1_LinkedParametersOutput / Train2_LinkedParametersOutput |
3 |
Train3_QMAM |
Train_3_TargetPosition |
Ax_Train3 |
Ax_Train2 |
Train2_LinkedParametersOutput / Train3_LinkedParametersOutput |
Monitore Train1_QMAM.PC, Train2_QMAM.PC e Train3_QMAM.PC: cada Cmd_Q_MAM_Exe deve ser limpo quando seu Q_MAM correspondente reportar PC, o que transforma cada solicitação em uma execução controlada e evita que o mesmo comando seja executado continuamente novamente. Observe também Train1_QMAM.ER, Train2_QMAM.ER e Train3_QMAM.ER para detectar erros de movimento, e Sts_Queued, Sts_QueueLeader, inf_TrainsActualDistance e Sts_Mover_WayFree em cada Q_MAM para validar o espaçamento entre os trens.
Carregamento de produto
Para um teste manual, gere um pulso em In_ProductTrigger. Para usar a simulação, defina CycleSimulationEnabled enquanto RUN_CYCLE estiver ativo: ProductGenerationTimeDelay temporiza a geração de produto, InfeedBeltProductInput_FallingEdge gera um pulso, e esse pulso define In_ProductTrigger por um scan.
Confirme que a AOI do trem na estação de carregamento incrementa seu contador Train_Wagon_CTU e que o alvo de carregamento avança de acordo com o tamanho do vagão carregado. Repita até que os quatro vagões configurados estejam completos: quando o contador os alcança, o trem é resetado e avança para a sequência de descarregamento.
Descarregamento de produto
Observe Sts_TrainAtUnloadingStation1 e Sts_TrainAtUnloadingStation2 em Train_1_AOI, Train_2_AOI e Train_3_AOI. Quando um trem chega a uma estação de descarregamento, seu temporizador correspondente (UnloadTrain1, UnloadTrain2 ou UnloadTrain3) inicia e, quando termina, o sinal de descarregamento concluído Train1UnloadingCompleteSignal, Train2UnloadingCompleteSignal ou Train3UnloadingCompleteSignal é gerado. Esse sinal gera Trigger_Products_Unloaded e então é limpo.
Confirme que a AOI do trem recebe In_UnloadingComplete, avança para o próximo estado e retorna à sequência de carregamento. Como EnableUnloadingStation1 é inicializado desligado, a lógica pode pular a primeira estação de descarregamento e usar a segunda como principal ponto de descarregamento.
Esteira de entrada
Quando RUN_CYCLE fica ativo, um pulso de partida é gerado para _03_AxBelt e AxBelt_CycleState avança para o estado 10. Nesse estado, In_Belt é movimentado em jog com a velocidade, aceleração, desaceleração e parâmetros de jerk configurados, e assim que In_Belt.JogStatus confirma, o estado avança para 20. Quando RUN_CYCLE desliga, _03_AxBelt emite outro comando de jog com velocidade zero para parar a esteira, e AxBelt_CycleState retorna para 0 quando In_Belt.JogStatus desliga.
Monitoramento recomendado durante a execução
Grupo |
Tags a monitorar |
|---|---|
Status geral |
RUN_CYCLE, RunCycleEnabled, RunCycleState, ApplicationMotionError, AbortCycle, MultiBelt_Cycle_Error |
Eixos |
AxesON, AxesAvailableState, AxesFaultedState, AxesTorqueDisabled |
Trens |
Sts_IP e Sts_ER de Train_1_AOI, Train_2_AOI e Train_3_AOI; Train_1_TargetPosition, Train_2_TargetPosition e Train_3_TargetPosition |
Q_MAM |
IP, PC, ER, ERR e EXERR de Train1_QMAM, Train2_QMAM e Train3_QMAM |
Visualização |
To_E3D_T1_CmdPos, To_E3D_T2_CmdPos, To_E3D_T3_CmdPos |
Para observar o comportamento dinâmico, use as tendências já incluídas no projeto: Q_MAM_V3, Train1To2Distance, Train1_LinkedParametersOutput_PP, Train1_QMAM_Sts_QueueLeader, Trains, Trains1n2 e Train_1.
Parada normal
Defina momentaneamente StopCycle_Cmd. RUN_CYCLE desliga e RunCycleState retorna para 0. _01_MultiBelt limpa Cmd_Q_MAM_Exe nas três AOIs dos trens e emite comandos de parada para Ax_Train1, Ax_Train2 e Ax_Train3 com a desaceleração e jerk configurados, enquanto _03_AxBelt para In_Belt. Confirme que os eixos não têm movimento ativo antes de desabilitar o torque.
Parada por falha ou aborto
Se ocorrer ApplicationMotionError, StopCycle_Cmd e AbortCycle são definidos, RUN_CYCLE desliga, os comandos Q_MAM são limpos e paradas de movimento são executadas para os três trens. Identifique a origem da falha em Train1_QMAM.ER, Train2_QMAM.ER e Train3_QMAM.ER, em Sts_ER das três AOIs dos trens, em AxesFaultedState e em Train_SafeTorqueOff.Sts_ER.
Corrija a causa raiz antes de resetar. Em seguida, execute o procedimento de reset de falha usando FaultReset_Cmd, e repita a inicialização dos eixos e o início do ciclo somente quando não houver falhas ativas.
Desligamento do sistema
Primeiro execute a parada normal com StopCycle_Cmd e confirme que não há movimento ativo. Se o sistema precisar ser deixado com os servos desabilitados, desative os eixos com AxesOff_Cmd: _99_AxManager gera os comandos de desativação para os eixos ativados e AxesON desliga. Em seguida, aplique as condições de segurança ou STO de acordo com o procedimento da máquina, e coloque o controlador em modo Program somente se o procedimento da planta exigir.
Condições esperadas para uma execução correta
- Axes.GroupSynced ativo e TrainsConfCorrect ativo.
- AxesON ativo após a inicialização e RunCycleEnabled ativo.
- RUN_CYCLE ativo durante a operação.
- As três AOIs dos trens sem Sts_ER e as três instâncias Q_MAM sem ER.
- Os comandos Cmd_Q_MAM_Exe são definidos em cada solicitação de movimento e limpos quando PC é alcançado.
- As posições-alvo mudam à medida que os vagões são carregados e os trens avançam em direção às estações de descarregamento.
- A distância entre os trens permanece acima da distância mínima configurada.
- A parada normal desliga o ciclo e para os trens e a esteira.
Controle De Esteira Multibelt
Versão 1.0 - Setembro de 2026