Caminho:  Equipamentos (Dispositivos) > SCA06 > Ladder > Motion Control > Motion Control Cam >

MW_CamCalc

Calcula tabela de pontos CAM

Previous pageReturn to chapter overviewNext page

Bloco que calcula uma tabela de pontos de uma curva CAM.

 

Representação Ladder

 

MW_CamCalc_block

 

Características de Execução

 

Tamanho de Memória de Programa

66 Bytes

Tamanho de Memória de Dados

24 Bytes

 

Estrutura do Bloco

 

Tipo de Variável

Nome

Tipo de Dado

Descrição

VAR_IN_OUT

Master

BYTE

Seleção de mestre da operação

(0 - Entradas digitais rápidas)

(1 - CANopen)

(2 - Encoder 1)

(3 - Eixo virtual)

(4 - Encoder 2)

Slave

BYTE

Seleção de escravo da operação

(0 - Eixo real)

CamTable

WORD

Código da tabela CAM

VAR_INPUT

Execute

BOOL

Habilitação do bloco

NumberOfPoints

WORD

Número de pontos da tabela

MasterPoints

LREAL

Pontos do mestre

SlavePoints

LREAL

Pontos do escravo

CurveType

WORD

Tipo de curva

Periodic

BOOL

Controle de execução da requisição

(0 - Execução única)

(1 - Execução periódica)

VAR_OUTPUT

InSync

BOOL

Habilitação da saída

Busy

BOOL

Sinalizador de que o bloco ainda não foi finalizado

Error

BOOL

Sinalizador de erro na execução

ErrorID

WORD

Identificador do erro ocorrido

CamTableID

WORD

Tabela CAM selecionada

VAR

MW_CAMCALC_INST_0

MW_CAMCALC

Instância de acesso à estrutura do bloco

 

Funcionamento

 

Este bloco, quando detecta uma borda de subida em Execute, constrói a tabela especificada em CamTable com os dados programados para que esta possa ser utilizada pelo bloco MC_CamIn.

 

Quando Execute possui valor FALSE, Done permanece FALSE. A saída Done é ativada quando o bloco termina a execução com sucesso, permanecendo em nível TRUE até que Execute receba FALSE.

 

Caso haja algum erro na execução, a saída Error é ativada e ErrorID exibe o código do erro segundo a tabela abaixo.

 

Código

Descrição

83

Arquivo das tabelas de pontos da curva CAM inválido.

84

CAM Table inválido. CAM Table deve ser de 11 à 20.

86

Número de pontos maior que o programado no configurador CAM PROFILES.

87

Posição do eixo mestre inválida. A posição do eixo mestre deve ser maior que a posição do ponto anterior.

88

Bloco MW_CamCalc em execução. Somente é permitido a execução de um bloco MW_CamCalc de cada vez.

89

Tabela de pontos em uso pelo bloco MC_CamIn.

90

Marcador de double com posição do eixo mestre inexistente.

91

Marcador de double com posição do eixo escravo inexistente.

92

Marcador de word com tipo de curva inexistente.

 

Exemplo em Ladder

 


 
MW_CamCalc_example02
 
MW_CamCalc_example03

 

 

Na transição de subida do marcador de bit CAMCALC_EXECUTE, o bloco MW_CamCalc é executado e a tabela de pontos de TABLE será calculada de acordo com os argumentos do bloco.

 

Nesse exemplo, o número de pontos da curva será o conteúdo de NUM_POINTS, a posição do eixo mestre será de acordo com os conteúdos de MASTER_POINTS[0] e MASTER_POINTS[1], a posição do eixo escravo será de acordo com os conteúdos de SLAVE_POINTS[0] e SLAVE_POINTS[1] e o tipo da curva será de acordo com os conteúdos de CURVE_TYPE[0] e CURVE_TYPE[1].

 

Colocando os mesmos valores na ferramenta CAM Profiles podemos observar a curva abaixo:

 

MW_CamCalc_example04

 

 

Ao finalizar o cálculo da tabela de pontos, a saída InSync é setada enquanto a entrada Execute permanece setada.

Com CAMCALC_DONE setado, o bloco MC_CamIn poderá ser executado.

 

Exemplo em ST

 

 O exemplo abaixo, exibe as instruções para aplicação do exemplo acima na linguagem ST.

 

 

VAR

  CAMCALC_EXECUTE, CAMCALC_DONE, CAMIN1_EXECUTE,

      CAMIN1_DONE : BOOL;

  NUM_OF_TABLE, PTS_OF_ARRAY : WORD;

  CAMTABLEID : UINT;

  CURVE_ARRAY : ARRAY [0..1] OF WORD;

  M_PTS_ARRAY, S_PTS_ARRAY : ARRAY [0..1] OF LREAL;

  MW_CAMCALC_INST_0 : FB_MW_CamCalc;

  MC_CAMIN_INST_0 : FB_MC_CamIn;

END_VAR

 

M_PTS_ARRAY[0] := FB_WORD_TO_LREAL(PAR_1050);

M_PTS_ARRAY[1] := FB_WORD_TO_LREAL(PAR_1051);

S_PTS_ARRAY[0] := FB_WORD_TO_LREAL(PAR_1052);

S_PTS_ARRAY[1] := FB_WORD_TO_LREAL(PAR_1053);

CURVE_ARRAY[0] := FB_STORE(WORD#0);

CURVE_ARRAY[1] := FB_STORE(WORD#1);

 

MW_CAMCALC_INST_0.Execute := CAMCALC_EXECUTE;

MW_CAMCALC_INST_0(

  Master:=0,

  Slave:=0,

  CamTable:=NUM_OF_TABLE,

  NumberOfPoints:=PTS_OF_ARRAY,

  MasterPoints:=M_PTS_ARRAY,

  SlavePoints:=S_PTS_ARRAY,

  CurveType:=CURVE_ARRAY,

  Periodic:=1);

CAMTABLEID := MW_CAMCALC_INST_0.CamTableID;

CAMCALC_DONE := MW_CAMCALC_INST_0.InSync;

 

MC_CAMIN_INST_0.Execute := CAMIN1_EXECUTE AND CAMCALC_DONE;

MC_CAMIN_INST_0(

  Master:=0,

  Slave:=0,

  MasterScaling:=1.0,

  SlaveScaling:=1.0,

  MasterSyncPosition:=LREAL#0.0,

  CamTableID:=CAMTABLEID,

  BufferMode:=1);

CAMIN1_DONE := MC_CAMIN_INST_0.InSync;