Bloco que calcula uma tabela de pontos de uma curva CAM.
Representação Ladder

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



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:

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;
|
|---|