DC303 - Entradas e Saídas Discretas em sistemas Profibus com controle híbridos e aplicações de bateladas




César Cassiolato

Diretor de Engenharia de Projetos e Serviços, Marketing e Qualidade
SMAR Equipamentos Industriais Ltda

cesarcass@smar.com.br

 

Introdução

Este artigo mostrará alguns detalhes do que há de mais novo em termos de desenvolvimento de equipamentos com a tecnologia Profibus-PA

Veremos neste artigo o uso desta tecnologia e as possibilidades de tratamento de entradas e saídas discretas em um equipamentos SMAR, o DC303, que é possui entradas e saídas discretas e um bloco funcional flexível que permite o controle lógico e seqüencial. As instalações Profibus-PA podem ser híbridas envolvendo arquiteturas distribuídas e estendendo-se a equipamentos convencionais analógicos e/ou discretos, e até mesmo a outras tecnologias.

 

Blocos Funcionais no DC303

O DC303 possui três tipos de blocos funcionais. São eles:

  • • Bloco Funcional de Entrada Discreta (16 DIs)
  • • Bloco Funcional de Saída Discreta (8 DOs)
  • • Bloco Funcional Lógicos (Lógica booleana, Timers on, off, pulse, counters up/down, flip/flop rs/sr, etc)Este bloco faz parte do bloco transdutor.

Os dois primeiros, embora executem tarefas avançadas, são conhecidos como blocos funcionais básicos, onde o número de entradas e saídas, assim como os tipos de dados, são pré-definidos de acordo com o padrão Profibus-PA ou ainda, podem ser específicos ao fabricante, mas de acordo com as especificações Profibus-PA.

O Bloco Funcional Flexível (daqui para frente denominado FFB), foi desenvolvido para atender funções mais complexas, tais como, o controle de processos discretos e híbridos, por exemplo, controle em batelada, controle de motores DC e AC, gateways de E/S, lógicas sequenciais, etc, onde o algoritmo, onde o usuário pode definir sua execução  de acordo com sua necessidade, dando uma maior flexibilidade às aplicações. O FFB é configurado via linguagem de texto estruturado.  

 

 

 

DC303, o primeiro equipamento Profibus-PA a ter um Flexible Function Block


 

Figura 1 - DC303, Entradas e Saídas Remotas Profibus-PA
Figura 1 - DC303, Entradas e Saídas Remotas Profibus-PA

 

O DC303 permite uma fácil integração entre o Profibus-PA e E/S convencionais. Dispositivos discretos como chaves de pressão, botoeiras, válvulas “on/off”, bombas e esteiras podem ser integradas ao sistema Profibus via barramento PA, usando o DC303. Ele pode estar distribuído ao campo onde se tem os dispositivos discretos convencionais, sem a necessidade de cabeamento entre estes e a sala de controle.

O DC303 permite que entradas e saídas discretas convencionais possam estar disponíveis à fácil configuração de estratégias de controle, usando o conceito de Blocos Funcionais Profibus-PA e tornando o sistema homogêneo de tal forma a fazer com que estes dispositivos possam parecer como simples diapositivos em um barramento Profibus-PA. Possui os seguintes  blocos funcionais: DI, DO, FFB, etc.

Malhas de controle são implementadas independentes se são dispositivos de E/S convencionais ou Profibus-PA. Apenas uma linguagem de programação é necessária para isto. Veremos a seguir o seu FFB.




Figura 2 – Aplicação genérica com entradas e saídas discretas e controle de processos

Execução de Lógicas no DC303

O DC303 foi projetado para executar lógicas. Neste caso os blocos de saídas discretas DOs não atuarão fisicamente no hardware. O bloco transdutor possui um bloco funcional flexivel built-in (FFB) que pode receber até 8 entradas discretas vindas da rede Profibus via parâmetros SP_D dos blocos DOs. No bloco transdutor estes parâmetros são denominados de IN_D1 a IN_D8. O bloco transdutor também pode disponibilizar 8 saídas discretas à rede Profibus, através dos parâmetros OUT_D1 a OUT_D8 que são disponibilizados via blocos de entradas discretas DIs (DI1 a DI8). Pode receber até 16 entradas discretas via hardware e também disponibilizar 8 saídas discretas de hardware. Nesta situação os blocos DOs e DIs devem estar em automático(mode block). E ainda, automaticamente ao se habilitar o bloco FFB no bloco transdutor(via parâmetro TRD_FFB_ENABLED), os blocos DI9 a DI16 são colocados em “Out of Service”.

Quando o bloco FFB estiver desabilitado, o DC303 funciona com 16 blocos DIs e 8 blocos DOs, lendo suas 16 entradas discretas de hardware e atuando em suas 8 saídas de hardware, respectivamente.

A indicação do estado (status) das entradas depende do sub-sistema de E/S.

O Bloco FFB provê lógicas como AND, OR, XOR e NOT e funções como: TimerOn-Delay, Timer Off-Delay, Timer Pulse, Pulse Counter Down (CTD), Pulse Counter Up(CTU), Flip-Flop RS e Flip-Flop SR. As lógicas são feitas utilizando-se as entradas discretas (IN_Dx) vindas da rede Profibus via DOs(SP_D), as saídas disponíveis a rede Profibus (OUT_Dx via DIs), as entradas discretas de hardware, as saídas discretas de hardware , valores discretos de segurança em condições de falha (FSx) e variáveis discretas auxiliares (AUX’s).

 

Status

O status das saídas OUT_Dx será de acordo com:

  • • Falha de entrada – ruim: Equipamento em falha (Input failure – Bad: Device Failure)
  • • Partida– ruim: equipamento em falha (Power up – Bad: Device Failure)

Na execução da lógica, um status maior ou igual a 0x80 é considerado “verdadeiro” (true) e menor que 0x80, é considerado “falso” (false). 

 

 

Modos Suportados

 

Bloco Transdutor: O/S e AUTO.

As mudanças nas Linhas Lógicas e seus parâmetros de configuração dependem da seleção de CHANGE_OPTION.

 

Esquemático

Esquematico 01

Figura 3 - Esquemático

 

Parâmetros

Idx

Parâmetro

Tipo Dado (comp)

Faixa Válida/
Opções

Valor Default

Unid.

Descrição

16

TRD_FFB_ENABLE

Unsigned8

0- Disabled ;

1- Enabled

0- Disabled

 

Permite a execução do FFB no TRD Block.

17

IN_D1

DS-34

     

Entrada discreta nº 1 utilizada pelo cálculo do bloco.Vem do DO_1(SP_D)

18

IN_D2

DS-34

     

Entrada discreta nº 2 utilizada pelo cálculo do bloco.Vem do DO_2 (SP_D)

19

IN_D3

DS-34

     

Entrada discreta nº 3 utilizada pelo cálculo do bloco.Vem do DO_3 (SP_D)

20

IN_D4

DS-34

     

Entrada discreta nº 4 utilizada pelo cálculo do bloco.Vem do DO_4 (SP_D)

21

IN_D5

DS-34

     

Entrada discreta nº 5 utilizada pelo cálculo do bloco.Vem do DO_5 (SP_D)

22

IN_D6

DS-34

     

Entrada discreta nº 6 utilizada pelo cálculo do bloco.Vem do DO_6 (SP_D)

23

IN_D7

DS-34

     

Entrada discreta nº 7 utilizada pelo cálculo do bloco.Vem do DO_7 (SP_D)

24

IN_D8

DS-34

     

Entrada discreta nº 8 utilizada pelo cálculo do bloco.Vem do DO_28(SP_D)

25

FSTATE_VAL_D1

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 1.

26

FSTATE_VAL_D2

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 2.

27

FSTATE_VAL_D3

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 3.

28

FSTATE_VAL_D4

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 4.

29

FSTATE_VAL_D5

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 5.

30

FSTATE_VAL_D6

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 6.

31

FSTATE_VAL_D7

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 7.

32

FSTATE_VAL_D8

Unsigned8

 

0

 

Valor discreto utilizado como valor de segurança na condição de falha para a saída de hardware nº 8.

33

OUT_D1

DS-34

     

Variável discreta da saída 1 calculada pelo bloco quando em modo AUTO e copiada para o DI_1.

34

OUT_D2

DS-34

     

Variável discreta da saída 2 calculada pelo bloco quando em modo AUTO  e copiada para o DI_2.

35

OUT_D3

DS-34

     

Variável discreta da saída 3 calculada pelo bloco quando em modo AUTO e copiada para o DI_3.

36

OUT_D4

DS-34

     

Variável discreta da saída 4 calculada pelo bloco quando em modo AUTO  e copiada para o DI_4.

37

OUT_D5

DS-34

     

Variável discreta da saída 5 calculada pelo bloco quando em modo AUTO e copiada para o DI_5.

38

OUT_D6

DS-34

     

Variável discreta da saída 6 calculada pelo bloco quando em modo AUTO  e copiada para o DI_6.

39

OUT_D7

DS-34

     

Variável discreta da saída 7 calculada pelo bloco quando em modo AUTO  e copiada para o DI_7.

40

OUT_D8

DS-34

     

Variável discreta da saída 8 calculada pelo bloco quando em modo AUTO  e copiada para o DI_8.

41

AUX_01_16

Bitstring(2)

     

Variável Auxiliar bit enumerated 01_16.

42

AUX_17_32

Bitstring(2)

     

Variável Auxiliar bit enumerated 17_32.

43

AUX_33_48

Bitstring(2)

     

Variável Auxiliar bit enumerated 33_48.

44

AUX_49_64

Bitstring(2)

     

Variável Auxiliar bit enumerated 49_64.

45

AUX_65_80

Bitstring(2)

     

Variável Auxiliar bit enumerated 65_80.

46

AUX_81_96

Bitstring(2)

     

Variável Auxiliar bit enumerated 81_96.

47

TON_PST

16 Floats

Positive

0

Seg

Vetor de 16 elementos em ponto flutuante onde o usuário pode setar em segundos o valor PST para cada Timer ON Delay.

48

TON_CTA

16 Floats

 

0

seg

Vetor de 16 elementos em ponto flutuante onde o usuário pode ver em segundos o valor decorrido para cada Timer ON Delay.

49

TON_OUT

Bitstring(2)

     

Variável que indica os estados dos timers ativos.

50

TOFF_PST

16 Floats

Positive

0

Seg

Vetor de 16 elementos em ponto flutuante onde o usuário pode setar em segundos o valor PST para cada Timer OFF Delay.

51

TOFF_CTA

16 Floats

 

0

seg

Vetor de 16 elementos em ponto flutuante onde o usuário pode ver em segundos o valor decorrido para cada Timer OFF Delay.

52

TOFF_OUT

Bitstring(2)

     

Variável que indica os estados dos timers ativos.

53

TP_PST

16 Floats

Positive

0

Seg

Vetor de 16 elementos em ponto flutuante onde o usuário pode setar em segundos o valor PST para cada Timer PULSE.

54

TP_CTA

16 Floats

 

0

Seg

Vetor de 16 elementos em ponto flutuante onde o usuário pode ver em segundos o valor decorrido para cada Timer PULSE.

55

TP_OUT

Bitstring(2)

     

Variável que indica os estados dos timers ativos.

56

CTU_PST

16 Unsigned32

Positive

0

Nenhuma

Vetor de 16 elementos unsigned integer32 onde pode-se configurar o valor a ser contado para cada contador. O contador irá incrementar de zero ao valor PST.

57

CTU_CTA

16 Unsigned32

 

0

Nenhuma

Vetor de 16 elementos unsigned integer32 onde pode-se acompanhar a contagem parcial para cada contador.

58

CTU_OUT

Bitstring(2)

     

Variável que indica os estados dos contadores ativos.

59

CTD_PST

16 Unsigned32

Positive

0

Nenhuma

Vetor de 16 elementos unsigned integer32 onde pode-se configurar o valor a ser contado para cada contador. O contador irá decrementar do valor PST até zero.

60

CTD_CTA

16 Unsigned32

 

0

Nenhuma

Vetor de 16 elementos unsigned integer32 onde pode-se acompanhar a contagem parcial para cada contador.

61

CTD_OUT

Bitstring(2)

     

Variável que indica os estados dos timers ativos.

62

RS_OUT

Bitstring(2)

     

Variável que indica os estados dos Flip-Flops RS ativos.

63

SR_OUT

Bitstring(2)

     

Variável que indica os estados dos Flip-Flops SR ativos.

64

LOGIC_01

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 1.

65

LOGIC_02

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 2.

66

LOGIC_03

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 3.

67

LOGIC_04

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 4.

68

LOGIC_05

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 5.

69

LOGIC_06

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 6.

70

LOGIC_07

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 7.

71

LOGIC_08

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 8.

72

LOGIC_09

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 9.

73

LOGIC_10

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 10.

74

LOGIC_11

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 11.

75

LOGIC_12

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 12.

76

LOGIC_13

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 13.

77

LOGIC_14

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 14.

78

LOGIC_15

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 15.

79

LOGIC_16

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 16.

80

LOGIC_17

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 17.

81

LOGIC_18

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 18.

82

LOGIC_19

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 19.

83

LOGIC_20

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 20.

84

LOGIC_21

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 21.

85

LOGIC_22

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 22.

86

LOGIC_23

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 23.

87

LOGIC_24

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 24.

88

LOGIC_25

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 25.

89

LOGIC_26

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 26.

90

LOGIC_27

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 27.

91

LOGIC_28

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 28.

92

LOGIC_29

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 29.

93

LOGIC_30

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 30.

94

LOGIC_31

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 31.

95

LOGIC_32

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 32.

96

LOGIC_33

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 33.

97

LOGIC_34

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 34.

98

LOGIC_35

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 35.

99

LOGIC_36

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 36.

100

LOGIC_37

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 37.

101

LOGIC_38

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 38.

102

LOGIC_39

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 39.

103

LOGIC_40

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 40.

104

LOGIC_41

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 41.

105

LOGIC_42

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 42.

106

LOGIC_43

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 43.

107

LOGIC_44

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 44.

108

LOGIC_45

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 45.

109

LOGIC_46

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 46.

110

LOGIC_47

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 47.

111

LOGIC_48

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 48.

112

LOGIC_49

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 49.

113

LOGIC_50

VisibleString(24)

 

Espaços

Na

Linha Lógica de comando 50.

114

LOGIC_CHECK

Unsigned8

0 - Enable.,

1 - Checked.

2- Changed but not checked yet.

1 - Checked.

Na

Permite a verificação das linhas lógicas.

115

ERROR_LINE

Unsigned8

0-50

1

Na

Indica a linha onde se tem erro. Valor igual a zero indica que não existe linha com erro.

116

ERROR_CODE

Unsigned8

0 - Logic Ok.

1 - Exceed String Length or string not valid.

2 - Non valid operand.

3 -  No implemented logic or missing ';'

4 - Missing parentheses or argument not valid.

5 - Non valid resource.

6 - Argument not valid.

7 - Function not valid

8 - Non available resource.

9 - Non valid attribution.

10 - First Argument not valid.

11- Second Argument not valid.

3 -  No implemented logic or missing ';'

Na

Indica o código de erro.

117

CHANGE_OPTION

Unsigned8

0 - Logic parameter changes are only allowed in Out of Service.

1 - Always accept Logic parameter changes.

0 - Logic parameter changes are only allowed in Out of Service.

Na

Habilita mudanças nas linhas de lógicas independentes do modo de operação do bloco.

Tabela 1 – Parâmetros do Bloco Transdutor – Execuçao de lógicas

 

 

A tabela, a seguir, descreve as Operações Lógicas e os Comandos de Linha e seus Símbolos Correspondentes usados nas linhas lógicas:

OperaçãoLógica e Comando de Linha

Símbolo- descrição

E

&

OU

|

OUExclusivo

^

Inversor

!

Igual

=

(arg1,arg2)

Argumentosde função

;

Finalizador de linha

 

A lógica Inversora (!) trabalha somente com variáveis simples. Exemplo: OUT1=!IN1;

Note que não é permitido ter, por exemplo, OUT1=!TP01(IN1);. Para se trabalhar desta forma, deve-se fazer: A01= TP01(IN1);. -> OUT1=!A01;

 

A execução da linha lógica é sempre executada linha por linha e da esquerda para a direita. Não são permitidos espaços entre caracteres. Não é permitido linhas vazias entre linhas com lógicas implementadas, isto é, a implementação deve ser em seqüência.

 

Depoisde escrever a lógica dentro dos parâmetros LOGIC_XX (XX:01 -> XX:50), o usuário precisa selecionar a opção “Enable” no parâmetro LOGIC_CHECK para verificar se há erros de sintaxe. Quandose utiliza o processo de download, é primordial configurar, primeiramente, os parâmetros LOGIC_XX (XX:01 -> XX:50) e depois o parâmetro LOGIC_CKECK. Esta seqüência é fundamental para executar a verificação. A tabela abaixo mostra o mnemônico para cada parâmetro de bloco usado nas linhas lógicas. O mnemônico deve estar em letras maiúsculas:

 

Parâmetro

Mnemônico

HW_IN.Value1

I01

HW_IN.Value2

I02

HW_IN.Value3

I03

HW_IN.Value4

I04

HW_IN.Value5

I05

HW_IN.Value6

I06

HW_IN.Value7

I07

HW_IN.Value8

I08

HW_IN.Value9

I09

HW_IN.Value10

I10

HW_IN.Value11

I11

HW_IN.Value12

I12

HW_IN.Value13

I13

HW_IN.Value14

I14

HW_IN.Value15

I15

HW_IN.Value16

I16

HW_IN.Status

SI

HW_OUT.Status

SO

HW_OUT.Value1

O1

HW_OUT.Value2

O2

HW_OUT.Value3

O3

HW_OUT.Value4

O4

HW_OUT.Value5

O5

HW_OUT.Value6

O6

HW_OUT.Value7

O7

HW_OUT.Value8

O8

IN_D1.Status

IN1S

IN_D2.Status

IN2S

IN_D3.Status

IN3S

IN_D4.Status

IN4S

IN_D5.Status

IN5S

IN_D6.Status

IN6S

IN_D7.Status

IN7S

IN_D8.Status

IN8S

IN_D1.Value

IN1

IN_D2.Value

IN2

IN_D3.Value

IN3

IN_D4.Value

IN4

IN_D5.Value

IN5

IN_D6.Value

IN6

IN_D7.Value

IN7

IN_D8.Value

IN8

OUT_D1.Status

SOUT1

OUT_D2.Status

SOUT2

OUT_D3.Status

SOUT3

OUT_D4.Status

SOUT4

OUT_D5.Status

SOUT5

OUT_D6.Status

SOUT6

OUT_D7.Status

SOUT7

OUT_D8.Status

SOUT8

OUT_D1.Value

OUT1

OUT_D2.Value

OUT2

OUT_D3.Value

OUT3

OUT_D4.Value

OUT4

OUT_D5.Value

OUT5

OUT_D6.Value

OUT6

OUT_D7.Value

OUT7

OUT_D8.Value

OUT8

FSTATE_VAL_D1

FS1

FSTATE_VAL_D2

FS2

FSTATE_VAL_D3

FS3

FSTATE_VAL_D4

FS4

FSTATE_VAL_D5

FS5

FSTATE_VAL_D6

FS6

FSTATE_VAL_D7

FS7

FSTATE_VAL_D8

FS8

AUX_01_16

A01-A16

AUX_17_32

A17-A32

AUX_33_48

A33-A48

AUX_49_64

A49-A64

AUX_65_80

A65-A80

AUX_81_96

A81-A96

TON

TON01-TON16

TOFF

TOF01-TOF16

TP

TP01-TP16

CTU

CTU01-CTU16

CTD

CTD01-CTD16

RS

RS01-RS16

SR

SR01-SR16

 

 

Funções

Para cada tipo de função há 16 recursos disponíveis e o usuário pode usar somente um recurso de cada vez. O usuário poderá atribuir o resultado de uma função aos bits discretos auxiliares.

 

 

TP TIMERPULSE

Esta função gera em sua saída um pulso de largura de tempo fixa a cada transição de falso para verdadeiro (borda de subida) na entrada. A largura de pulso pode ser programada no parâmetro TP_PST, em segundos. Transições na entrada serão ignoradas, enquanto a saída estiver ativa. O timer corrente pode ser monitorado no parâmetro TP_CTA.

 

Figura 4 - FunçãoTimer Pulse – diagramas de tempo

 

 

 

A sintaxe para a função Timer Pulse é:   TPxx(arg)

Onde, xx é o recurso de 01 a 16 e arg é o argumento da função e deve ser uma variável simples. Exemplos:

 

O1=TP01(IN1);

OUT1= TP01(A05);

OUT3=TP08(FS1);

 

Os exemplos seguintes são permitidos na linha lógica:

 

  • • O1=TP01(IN1&IN2);: note que o argumento é o resultado de uma operação e isto não é permitido.
     
  • • O1=TP10(!IN1);: note que o argumento é o resultado de função NOT e isto não é permitido.
     
  • • O1=TP10(CTD01(IN1,IN2));: note que o argumento é o resultado de uma função e isto não é permitido.
     

 

 

TON TIMER ON-DELAY

Nesta função a saída vai para verdadeiro após um período de tempo em segundos configurável no parâmetro TP_PST, após a entrada ir para verdadeiro. Se a entrada for para falso antes do tempo PST, a saída permanecerá em falso. O parâmetro CTA mostra o tempo decorrente até o valor PST.

 

Figura 3.8 - Função Timer On-Delay– diagramas de tempo
Figura 5 - Função Timer On-Delay– diagramas de tempo

 

 

A sintaxe para a função Timer On-Delayé: TONxx(arg)

Onde, xx é o recurso de 01 a 16 e arg é o argumento da função e deve ser uma variável simples. Exemplos:

 

O1=TON01(IN1)&SI;

OUT1= TON01(A05);

OUT3=TON08(FS1);

 

Os seguintes exemplos não são permitidos na linha lógica:

 

  • • O1=TON01(IN1&IN2);: note que o argumento é o resultado de uma operação e isto não é permitido.
     
  • • O1=TON10(!IN1);: note que o argumento é o resultado de uma função NOT e isto não é permitido.
     
  • • O1=TON10(CTD01(IN1,IN2));: note que o argumento é o resultado de uma função e isto não é permitido.

 

 

 

 

 

 

TOF TIMER OFF-DELAY

 
Esta função estende o estado verdadeiro da entrada por um período de tempo em segundos configurado via parâmetro TOF_PST. Se a entrada vai para verdadeiro antes da saída ir para falso, a saída ficará em verdadeiro até que a saída vá para falso e decorra o tempo PST. O parâmetro CTA mostra o tempo corrente. 
 
 
Função Timer OFF-Delay – Diagramas de Tempo
Figura 6 - Função Timer OFF-Delay – Diagramas de Tempo
 
 
A sintaxe para Timer Off-Delay é:   TOFxx(arg)
Onde, xx é o recurso usado de 01 a 16 e arg é o argumento da função e deve ser uma variável simples. Exemplos: 
 
O1=TOF01(IN1)&SI;
OUT1= TOF01(A05);
OUT3=TOF08(FS1);
 
Os seguintes exemplos não são permitidos na linha lógica: 
 
  • • O1=TOF01(IN1&IN2);: note que o argumento é o resultado de uma operação e isto não é permitido. 
  • • O1=TOF10(!IN1);: note que o argumento é o resultado de uma função e isto não é permitido.
  • • O1=TOF10(CTD01(IN1,IN2));: note que o argumento é o resultado de uma função e isto não é permitido. 
 
 

CTD PULSE COUNTER DOWN

Esta função é usada para contar transições de subida (de falso para verdadeiro) da entrada (arg1). A cada transição de subida, o parâmetro CTA decrementa de uma unidade. Quando o CTA atinge o valor zero, a saída do contador irá para verdadeiro. O valor do contador CTA será carregado com o valor de PST. Uma transição de falso para verdadeiro no argumento 2 (arg2) coloca a saída em falso e o parâmetro CTA receberá o valor PST. 
 
A sintaxe para CTD é: CTDxx(arg1,arg2)
 
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são argumentos das funções e devem ser variáveis simples. Exemplos: 
 
O3=CTD10(IN1,IN2);
OUT1=CTD03(A11,A14)&SI;
 
Os seguintes exemplos não são permitidos na linha de lógica: 
 
  • • O1=CTD01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
     
  • • O1=CTD10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
     
  • • O1=CTD10(TP01(IN1),IN2);: note que o argumento é o resultado de uma função e isto não é permitido. 
 
 

CTU PULSE COUNTER UP

 
Esta função é usada para contar transições de subida (de falso para verdadeiro) na entrada (arg1). A cada transição o parâmetro CTA incrementará de uma unidade. Ao atingir o valor PST, a saída desta função irá para o estado lógico verdadeiro e o valor CTA será carregado com valor zero. Uma transição de falso para verdadeiro no argumento 2 (arg2) coloca a saída em falso e o parâmetro CTA receberá o valor zero. 
 
A sintaxe para CTU é: CTUxx(arg1,arg2)
 
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=CTU10(IN1,IN2);
OUT1=CTU03(A11,A14)&SI;
 
Os seguintes exemplos não são permitidos na linha de lógica: 
 
  • • O1=CTU01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
     
  • • O1=CTU10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
     
  • • O1=CTU10(TP01(IN1),IN2);: note que o argumento é o resultado de uma função e isto não é permitido. 
 
 

FLIP-FLOP RS 

 
Esta função tem a seguinte tabela de operação: 
 

R(arg1)

S(arg2)

OUT

0

0

Últimoestado

0

1

1

1

0

0

1

1

0

 
A sintaxe para RS Flip-Flop é: RSxx(arg1,arg2)
 
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=RS10(IN1,IN2);
OUT1=RS03(A11,A14)&SI;
 
Os seguintes exemplos não são permitidos na linha de lógica: 
 
  • • O1=RS01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
     
  • • O1=RS10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
     
  • • O1=RS10(TP01(IN1),IN2);: observe que o argumento é o resultado de uma função e isto não é permitido. 
 
 
 

FLIP-FLOP SR 

 
Esta função tem a seguinte tabela de operação: 
 

S(arg1)

R(arg2)

OUT

0

0

ÚltimoEstado

0

1

0

1

0

1

1

1

1

 
A sintaxe para SR Flip-Flop é: SRxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=SR10(IN1,IN2);
OUT1=SR03(A11,A14)&SI;
 
Os seguintes exemplos não são permitidos na linha de lógica: 
 
  • • O1=SR01(IN1&IN2,IN3);: o argumento é o resultado de uma operação e isto não é permitido. 
     
  • • O1=SR10(!IN1,IN3);: o argumento é o resultado de uma função NOT e isto não é permitido.
     
  • • O1=SR10(TP01(IN1),IN2);: o argumento é o resultado de uma função e isto não é permitido. 
 
 

Códigos de Erros

Alguns exemplos de condições de erro:
 
Error Code:  "Exceed String Length or string not valid."
a) OUT1=IN1&IN2&IN2|IN4^IN5|IN6;
 
Note que existem 29 caracteres no texto e o máximo permitido é 24. 
 
b) OUT1=IN1&in2; 
 
Note que todos os mnemônicos devem estar em Letras Maiúsculas. 
 
 
Error Code:  "Non valid operand."
OUT1=IN1%IN2; 
 
Note que o símbolo % não é permitido. Veja também a tabela que descreve a os Operadores Lógicos e as Linhas de Comando.
 
 
Error Code:  "No implemented logic or missing ';’.”
OUT1=IN1
 
Note que falta o terminador “;” no final da linha de lógica.
 
 
Error Code:  "Missing parentheses or argument not valid."
OUT1=TP10(IN1;
 
Observe que falta um parênteses na função timer pulse. 
 
 
Error Code:  "Non valid resource."
OUT1=TP18(IN1);
 
Observe que há até 16 recursos para cada função. 
 
 
Error Code:  "Argument not valid."
OUT1=TP10(IN10);
 
Observe que há somente 8 entradas discretas vindas da rede FF. IN10 não é um argumento válido. 
 
 
Error Code:  "Function not valid."
OUT1=TR10(IN1);
 
Observe que TR não é uma função válida. 
 
 
Error Code:   "Non available resource."
OUT1=TP10(IN1);
 
A03=TP10(IN7);
 
Observe que há 16 recursos para cada função e o recurso 10 já foi utilizado e não pode ser usado novamente em uma lógica posterior. O que pode ser feito é atribuir o resultado da função a uma variável auxiliar e esta ser usada várias vezes.
 
A03=TP10(IN7);
 
 
Error Code:  "Non valid attribution."
IN1=IN2^TP03(IN4);
 
Observe que não é permitida atribuição para entradas. 
 
 
Error Code:  "First Argument not valid."
OUT1=CTD01(!IN1,IN2);
 
Observe que os argumentos devem ser necessariamente variáveis simples e não resultados de lógica ou funções. 
 
OUT1=RS11(IN15,IN2);
 
Observe que o primeiro argumento da função não é um recurso válido. 
 
 
Error Code:  "Second Argument not valid."
a) OUT1=CTD01(IN1,!IN2);
 
Note que necessariamente os argumentos de função devem ser variáveis simples e não resultados de lógicas ou funções. 
 
OUT1=RS11(IN1,IN20);
 
Observe que o segundo argumento da função não é um recurso válido. 
 
 
 

Exemplos de aplicações

1) De acordo com a próxima figura, temos uma aplicação industrial onde se tem o enchimento de garrafas com fluido químico. A esteira é movimentada até que um sensor detecte sua presença. A esteira deve parar e abrir a válvula de enchimento até que seja detectado o nível pelo sensor de nível. Depois de detectar o nível, o sistema deve esperar durante 10 segundos e mover a esteira novamente até a próxima garrafa. 
 
  
 
Usando o bloco funcional Flexível, temos as seguintes definições: 
  • •   A esteira será ligada utilizando a saída 01 de hardware  (O1);
  • •   A válvula de enchimento será ligada utilizando a saída 02 de hardware  (O2);
  • •   sensor de garrafa será conectado a entrada de 01 de hardware (I01);
  • •   sensor de nível será conectado a entrada de 02 de hardware (I02);
  • •   A alimentação do sistema será a entrada de 03 de hardware (I03);
 
 
Tem-se, então, a seguinte configuração: 
 
TON_PST resource [01] = 10.0s.
LOGIC_01        A01=TON01(I02);
LOGIC_02        O1=I03&!I01|A01;
LOGIC_03        O2=I01&!I02;
 
 
Fazendo analogia com a programação ladder, tem-se:
 
 
2) Na seguinte aplicação mecânica, tem-se o controle de passos para operar uma balança eletromecânica, que efetua a pesagem de rocha fosfatada. 
O peso do processo é feito por batelada, o sistema executa um ciclo completo de pesagem a cada intervalo de 20 segundos. Veja a figura a seguir: 
 
 
M1 e M3 - Motores acionadores das esteiras 
C2 e C4 – Chaves fim de curso 
LSH  - Sensor de Nível Alto
LSL  - Sensor de Nível Baixo
SG  - Célula de Carga
SV  - Válvula Solenóide 
M  - Motor acionador de Caçamba 
P  - Pistão acionador de Comporta
C  - Circuito de Pesagem
 
 

Processo:

O sistema necessita das seguintes condições para fazer o startup: 
  • •   Nível da pedra fosfática (LSL desativado);
  • •   Pressão do Óleo (PSL ligado);
  • •   Esteira transportadora nº 2 em movimento (M3 ligado);
  • •   Caçamba na posição inicial (C4 ligado);
 
Satisfeitas as condições iniciais, observa-se que:
  • •   Acionando-se o botão de partida, a comporta abre-se, dando início ao carregamento da caçamba. 
  • •   Uma vez atingido o peso desejado, a comporta fecha. Decorridos 5 segundos a caçamba efetua um giro de 180º , descarregando o produto na esteira transportadora número 2. 
 
Observação:
  •   Esta nova posição será detectada por C2 e após 5 segundos, a caçamba retornará à posição inicial e isto será detectado pelo C4. 
  •   Depois da caçamba retornar para a posição inicial, ter-se-á um novo ciclo de pesagem. 
 
Comentário:
  • A sequência de operação deve ser interrompida se qualquer um dos pré-requisitos não for satisfeito. 
  • A comporta silo é acionada por um pistão hidráulico. 
 
Usando o Bloco Funcional Flexível, tem-se as seguintes definições: 
 
  • • LSL será conectado à entrada do hardware 01 (I01);
  • • LSH será conectado à entrada do hardware 02 (I02);
  • • PSL será conectado à entrada do hardware 03 (I03);
  • • C2 será conectado à entrada do hardware 04 (I04);
  • • C4 será conectado à entrada do hardware 05 (I05);
  • • Alimentação será conectada à entrada do hardware 06 (I06);
  • • M3 será conectado à entrada do hardware 07 (I07);
  • • M será conectado à saída do hardware 01 (O1);
  • • A Comport será ativada pela saída do hardware 02 (O2);
  • • M1 será ativado pela saída do hardware 03 (O3);
 
Tem-se a seguinte configuração:
  • TON_PST recurso [01] = 5.0s.
  • LOGIC_01        A01=!I01&I03&I07&I05;
  • LOGIC_02        A02=I06&RS01(I02,I01);
  • LOGIC_03        O3=A02&I03;
  • LOGIC_04        A03=I03&I07;
  • LOGIC_05        O2=I06&A03&!I04;
  • LOGIC_06        O1=TON01(I04)&!I05&A03;
 
 
3) Usando Valores de Estado de Falha: 
 
Supondo que exista a seguinte condição: 
  • • A01: recebe a lógica entre os status das entradas discretas 1 e 2, como esta: A01=IN1S&IN2S; quando o status é ruim, uma destas entradas, então A01=false(0), de outra forma, A01=true (1);
  • • FS1: é o valor de segurança de falha para O1;
  • • A02: é o bit que contém a lógica para O1;
 
Há a seguinte tabela entre FS1, A01 e A02:
 

FS1

A01

A02

O1

0

0

0

0

0

0

1

0

0

1

0

0

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

1

1

1

1

 
Então,
 
A03=!FS1&A01&A02;
A04=FS1&!A01&!A02;
A05=FS1&!A01&A02;
A06=FS1&A01&A02;
O1=A03|A04|A05|A06;
 
 
 

Configurando ciclicamente o DC303 

Os protocolos PROFIBUS-DP e PROFIBUS-PA possuem mecanismos contra falhas e erros de comunicação entre o equipamento da rede e o mestre. Por exemplo, durante a inicialização do equipamento esses mecanismos são utilizados para verificar esses possíveis erros. Após a energização (power up) do equipamento de campo (escravo) pode-se trocar dados ciclicamente com o mestre classe 1, se a parametrização para o escravo estiver correta. Estas informações são obtidas através dos arquivos GSDs (arquivos fornecidos pelos fabricantes dos equipamentos que contém suas descrições). Através dos comandos abaixo, o mestre executa todo o processo de inicialização com os equipamentos PROFIBUS-PA: 
 
  • • Get_Cfg: carrega a configuração dos escravos no mestre e verifica a configuração da rede; 
  • • Set_Prm: escreve nos parâmetros dos escravos e executa os serviços de parametrização da rede; 
  • • Set_Cfg: configura os escravos de acordo com as entradas e saídas; 
  • • Get_Cfg: um outro comando, onde o mestre verifica a configuração dos escravos. 
 
Todos estes serviços são baseados nas informações obtidas dos arquivos gsds dos escravos. O arquivo GSD do DC303 mostra os detalhes de revisão do hardware e do software, bus timing do equipamento e informações sobre a troca de dados cíclicos. Para ter acesso a biblioteca completa de GSDs SMAR, consulte: http://www.smar.com.br
 
O DC303 possui 24 blocos funcionais: 16 Entradas Discretas (DI) e8 Saídas Discretas (DO) . Possui também o módulo vazio (Empty module) para aplicações onde se quer configurar apenas alguns blocos funcionais. Deve-se respeitar a seguinte ordem cíclica dos blocos: DO_1, DO_2,…DO_8, DI_, DI_2, …DI_16. Supondo que se queira trabalhar somente com os blocos DOs, configure-os assim: DO_1, DO_2, DO_3, DO_4, DO_5, DO6, DO_7, DO_8,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE. No entanto, se quiser trabalhar apenas com os blocos DOs e o DI_2, faça o seguinte DO_1, DO_2, DO_3, DO_4, DO_5, DO6, DO_7, DO_8,EMPTY_MODULE, DI_2 , EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE,EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE.
 
A maioria dos configuradores PROFIBUS utiliza dois diretórios onde se deve ter os arquivos GSD’s e BITMAP’s dos diversos fabricantes. Os GSD’s e BITMAPS para os equipamentos da SMAR podem ser adquiridos via internet no site da SMAR, no link download. 
 
O exemplo a seguir mostra os passos necessários para integrar o DC303 em um sistema PA. Estes passos são válidos para todos os equipamentos da linha 303 da SMAR: 
 
 
  • • Copie o arquivo gsd do DC303 para o diretório de pesquisa do configurador PROFIBUS, normalmente chamado de GSD; 
  • • Copie o arquivo bitmap do DC303 para o diretório de pesquisa do configurador PROFIBUS, normalmente chamado de BMP; 
  • • Após escolher o mestre, defina a taxa de comunicação. Não esqueça que os couplers podem ter as seguintes taxas de comunicação: 45.45 kbits/s (Siemens), 93.75 kbits/s (P+F) e 12 Mbits/s (P+F, SK3). O link device IM157 pode ter até 12 Mbits/s; 
  • • Acrescente o DC303 e especifique o seu endereço no barramento; 
  • • Escolha a configuração cíclica via parametrização com o arquivo gsd, que depende da aplicação, conforme visto anteriormente. Para cada bloco DO e DI, o DC303 fornece ao mestre o valor da variável discreta e mais 1 byte de status que traz a informação da qualidade deste valor discreto.
  • • No bloco DO e DI, pode-se escolher as seguintes opções cíclicas abaixo, sendo que no caso do Bloco DO, somente uma delas é possível por bloco.
 
;Empty module
Module = "EMPTY_MODULE"                 0x00 ;
EndModule
;
;
;Modules for Discrete Output Block
Module = "SP_D"                                      0xA1 ;
 
EndModule
 
Module = "SP_D+RB_D"                          0xC1, 0x81, 0x81, 0x83 ;
 
EndModule
Module = "SP_D+CB_D"                           0xC1, 0x81, 0x82, 0x92 ;
 
EndModule
Module = "SP_D+RB_D+CB_D"                0xC1, 0x81, 0x84, 0x93 ;
 
EndModule
Module = "RIN_D+ROUT_D"                     0xC1, 0x81, 0x81, 0x8C ;
 
EndModule
Module = "RIN_D+ROUT_D+CB_D"         0xC1, 0x81, 0x84, 0x9C ;
 
EndModule
Module = "SP_D+RB_D+RIN_D+ROUT_D+CB_D"              0xC1, 0x83, 0x86, 0x9F ;
 
EndModule
 
;Modules for Discrete Input Block
 
Module = "OUT_D"                                     0x91 ;
 
EndModule
 
  • • Permite ativar a condição de watchdog, que faz o equipamento ir para uma condição de falha segura ao detectar uma perda de comunicação entre o equipamento escravo e o mestre.
 
 

Conclusão

Vimos através deste artigo os detalhes dos Blocos Funcionais Flexíveis e sua importância nos controles de processos híbridos, assim como a fácil integração entre o Profibus-PA e E/S convencionais e exemplos de aplicação do FFB.
 
 

Referências:

  • • Manuais SMAR Profibus-PA; 
  • • Manuais de Operação do DC303; 
  • • www.smar.com.br 
  • • CASSIOLATO, César, O uso do Flexible Function Block em sistemas de controle híbridos e aplicações de bateladas, Revista Controle & Instrumentação, Edição nº 89 , 2004 
 
* César Cassiolato é Diretor de Marketing, Qualidade e Engenharia de Projetos & Serviços da SMAR Equipamentos Ind. Ltda., foi Presidente da Associação PROFIBUS Brasil América Latina de 2006 a 2010, Diretor Técnico do Centro de Competência e Treinamento em PROFIBUS, Diretor do FDT Group no Brasil, Engenheiro Certificado na Tecnologia PROFIBUS e Instalações PROFIBUS pela Universidade de Manchester. 
 
 

 

TOF TIMER OFF-DELAY
 
Esta função estende o estado verdadeiro da entrada por um período de tempo em segundos configurado via parâmetro TOF_PST. Se a entrada vai para verdadeiro antes da saída ir para falso, a saída ficará em verdadeiro até que a saída vá para falso e decorra o tempo PST. O parâmetro CTA mostra o tempo corrente. 
 
Função Timer OFF-Delay – Diagramas de Tempo
 
A sintaxe para Timer Off-Delay é:   TOFxx(arg)
Onde, xx é o recurso usado de 01 a 16 e arg é o argumento da função e deve ser uma variável simples. Exemplos: 
 
O1=TOF01(IN1)&SI;
OUT1= TOF01(A05);
OUT3=TOF08(FS1);
 
Por exemplo, os seguintes exemplos são não permitidos na linha lógica: 
 
O1=TOF01(IN1&IN2);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=TOF10(!IN1);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=TOF10(CTD01(IN1,IN2));: note que o argumento é o resultado de uma função e isto não é permitido. 
 
CTD PULSE COUNTER DOWN
Esta função é usada para contar transições de subida (de falso para verdadeiro) da entrada (arg1). A cada transição de subida, o parâmetro CTA decrementa de uma unidade. Quando o CTA atinge o valor zero, a saída do contador irá para verdadeiro. O valor do contador CTA será carregado com o valor de PST. Uma transição de falso para verdadeiro no argumento 2 (arg2) coloca a saída em falso e o parâmetro CTA receberá o valor PST. 
 
A sintaxe para CTD é:   CTDxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são argumentos das funções e devem ser variáveis simples. Exemplos: 
O3=CTD10(IN1,IN2);
OUT1=CTD03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=CTD01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=CTD10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=CTD10(TP01(IN1),IN2);: note que o argumento é o resultado de uma função e isto não é permitido. 
 
CTU PULSE COUNTER UP
 
Esta função é usada para contar transições de subida (de falso para verdadeiro) na entrada (arg1). A cada transição o parâmetro CTA incrementará de uma unidade. Ao atingir o valor PST, a saída desta função irá para o estado lógico verdadeiro e o valor CTA será carregado com valor zero. Uma transição de falso para verdadeiro no argumento 2 (arg2) coloca a saída em falso e o parâmetro CTA receberá o valor zero. 
 
A sintaxe para CTU é: CTUxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=CTU10(IN1,IN2);
OUT1=CTU03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=CTU01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=CTU10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=CTU10(TP01(IN1),IN2);: note que o argumento é o resultado de uma função e isto não é permitido. 
 
FLIP-FLOP RS 
 
Esta função tem a seguinte tabela de operação: 
 
R(arg1) S(arg2) OUT
0 0 Último estado
0 1 1
1 0 0
1 1 0
 
A sintaxe para RS Flip-Flop é: RSxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=RS10(IN1,IN2);
OUT1=RS03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=RS01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=RS10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=RS10(TP01(IN1),IN2);: observe que o argumento é o resultado de uma função e isto não é permitido. 
 
 
 
 
FLIP-FLOP SR 
Esta função tem a seguinte tabela de operação: 
 
S(arg1) R(arg2) OUT
0 0 Último Estado
0 1 0
1 0 1
1 1 1
 
A sintaxe para SR Flip-Flop é: SRxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=SR10(IN1,IN2);
OUT1=SR03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=SR01(IN1&IN2,IN3);: o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=SR10(!IN1,IN3);: o argumento é o resultado de uma função NOT e isto não é permitido.
 
O1=SR10(TP01(IN1),IN2);: o argumento é o resultado de uma função e isto não é permitido. 
 
Códigos de Erros
Alguns exemplos de condições de erro:
 
Error Code:  "Exceed String Length or string not valid."
a) OUT1=IN1&IN2&IN2|IN4^IN5|IN6;
 
Note que existem 29 caracteres no texto e o máximo permitido é 24. 
 
b) OUT1=IN1&in2; 
 
Note que todos os mnemônicos devem estar em Letras Maiúsculas. 
 
Error Code:  "Non valid operand."
OUT1=IN1%IN2; 
 
Note que o símbolo % não é permitido. Veja também a tabela que descreve a os Operadores Lógicos e as Linhas de Comando.
 
Error Code:  "No implemented logic or missing ';’.”
OUT1=IN1
 
Note que falta o terminador “;” no final da linha de lógica.
 
Error Code:  "Missing parentheses or argument not valid."
OUT1=TP10(IN1;
 
Observe que falta um parênteses na função timer pulse. 
 
Error Code:  "Non valid resource."
OUT1=TP18(IN1);
 
Observe que há até 16 recursos para cada função. 
 
Error Code:  "Argument not valid."
OUT1=TP10(IN10);
 
Observe que há somente 8 entradas discretas vindas da rede FF. IN10 não é um argumento válido. 
 
Error Code:  "Function not valid."
OUT1=TR10(IN1);
 
Observe que TR não é uma função válida. 
 
Error Code:   "Non available resource."
OUT1=TP10(IN1);
 
A03=TP10(IN7);
 
Observe que há 16 recursos para cada função e o recurso 10 já foi utilizado e não pode ser usado novamente em uma lógica posterior. O que pode ser feito é atribuir o resultado da função a uma variável auxiliar e esta ser usada várias vezes.
A03=TP10(IN7);
 
Error Code:  "Non valid attribution."
IN1=IN2^TP03(IN4);
 
Observe que não é permitida atribuição para entradas. 
 
Error Code:  "First Argument not valid."
OUT1=CTD01(!IN1,IN2);
 
Observe que os argumentos devem ser necessariamente variáveis simples e não resultados de lógica ou funções. 
 
OUT1=RS11(IN15,IN2);
 
Observe que o primeiro argumento da função não é um recurso válido. 
 
Error Code:  "Second Argument not valid."
a) OUT1=CTD01(IN1,!IN2);
 
Note que necessariamente os argumentos de função devem ser variáveis simples e não resultados de lógicas ou funções. 
 
OUT1=RS11(IN1,IN20);
 
Observe que o segundo argumento da função não é um recurso válido. 
 
 
Exemplos de aplicações
 
1) De acordo com a próxima figura, temos uma aplicação industrial onde se tem o enchimento de garrafas com fluido químico. A esteira é movimentada até que um sensor detecte sua presença. A esteira deve parar e abrir a válvula de enchimento até que seja detectado o nível pelo sensor de nível. Depois de detectar o nível, o sistema deve esperar durante 10 segundos e mover a esteira novamente até a próxima garrafa. 
 
  
 
Usando o bloco funcional Flexível, temos as seguintes definições: 
 
  A esteira será ligada utilizando a saída 01 de hardware  (O1);
  A válvula de enchimento será ligada utilizando a saída 02 de hardware  (O2);
  sensor de garrafa será conectado a entrada de 01 de hardware (I01);
  sensor de nível será conectado a entrada de 02 de hardware (I02);
  A alimentação do sistema será a entrada de 03 de hardware (I03);
 
Tem-se, então, a seguinte configuração: 
 
TON_PST resource [01] = 10.0s.
LOGIC_01        A01=TON01(I02);
LOGIC_02        O1=I03&!I01|A01;
LOGIC_03        O2=I01&!I02;
 
 
Fazendo analogia com a programação ladder, tem-se:
 
 
 
2) Na seguinte aplicação mecânica, tem-se o controle de passos para operar uma balança eletromecânica, que efetua a pesagem de rocha fosfatada. 
O peso do processo é feito por batelada, o sistema executa um ciclo completo de pesagem a cada intervalo de 20 segundos. Veja a figura a seguir: 
 
 
 
M1 e M3 - Motores acionadores das esteiras 
C2 e C4 – Chaves fim de curso 
LSH  - Sensor de Nível Alto
LSL  - Sensor de Nível Baixo
SG  - Célula de Carga
SV  - Válvula Solenóide 
M  - Motor acionador de Caçamba 
P  - Pistão acionador de Comporta
C  - Circuito de Pesagem
 
Processo:
O sistema necessita das seguintes condições para fazer o startup: 
 
  Nível da pedra fosfática (LSL desativado);
  Pressão do Óleo (PSL ligado);
  Esteira transportadora nº 2 em movimento (M3 ligado);
  Caçamba na posição inicial (C4 ligado);
 
Satisfeitas as condições iniciais, observa-se que:
 
  Acionando-se o botão de partida, a comporta abre-se, dando início ao carregamento da caçamba. 
  Uma vez atingido o peso desejado, a comporta fecha. Decorridos 5 segundos a caçamba efetua um giro de 180º , descarregando o produto na esteira transportadora número 2. 
 
Observação: 
  Esta nova posição será detectada por C2 e após 5 segundos, a caçamba retornará à posição inicial e isto será detectado pelo C4. 
  Depois da caçamba retornar para a posição inicial, ter-se-á um novo ciclo de pesagem. 
 
Comentário:
  A sequência de operação deve ser interrompida se qualquer um dos pré-requisitos não for satisfeito. 
  A comporta silo é acionada por um pistão hidráulico. 
 
Usando o Bloco Funcional Flexível, tem-se as seguintes definições: 
 
  LSL será conectado à entrada do hardware 01 (I01);
  LSH será conectado à entrada do hardware 02 (I02);
  PSL será conectado à entrada do hardware 03 (I03);
  C2 será conectado à entrada do hardware 04 (I04);
  C4 será conectado à entrada do hardware 05 (I05);
  Alimentação será conectada à entrada do hardware 06 (I06);
  M3 será conectado à entrada do hardware 07 (I07);
  M será conectado à saída do hardware 01 (O1);
  A Comport será ativada pela saída do hardware 02 (O2);
  M1 será ativado pela saída do hardware 03 (O3);
 
Tem-se a seguinte configuração:
TON_PST recurso [01] = 5.0s.
LOGIC_01        A01=!I01&I03&I07&I05;
LOGIC_02        A02=I06&RS01(I02,I01);
LOGIC_03        O3=A02&I03;
LOGIC_04        A03=I03&I07;
LOGIC_05        O2=I06&A03&!I04;
LOGIC_06        O1=TON01(I04)&!I05&A03;
 
3) Usando Valores de Estado de Falha: 
 
Supondo que exista a seguinte condição: 
 
  A01: recebe a lógica entre os status das entradas discretas 1 e 2, como esta: A01=IN1S&IN2S; quando o status é ruim, uma destas entradas, então A01=false(0), de outra forma, A01=true (1);
  FS1: é o valor de segurança de falha para O1;
  A02: é o bit que contém a lógica para O1;
 
Há a seguinte tabela entre FS1, A01 e A02:
 
FS1 A01 A02 O1
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1
 
Então,
 
A03=!FS1&A01&A02;
A04=FS1&!A01&!A02;
A05=FS1&!A01&A02;
A06=FS1&A01&A02;
O1=A03|A04|A05|A06;
 
 
Configurando ciclicamente o DC303 
Os protocolos PROFIBUS-DP e PROFIBUS-PA possuem mecanismos contra falhas e erros de comunicação entre o equipamento da rede e o mestre. Por exemplo, durante a inicialização do equipamento esses mecanismos são utilizados para verificar esses possíveis erros. Após a energização (power up) do equipamento de campo (escravo) pode-se trocar dados ciclicamente com o mestre classe 1, se a parametrização para o escravo estiver correta. Estas informações são obtidas através dos arquivos GSDs (arquivos fornecidos pelos fabricantes dos equipamentos que contém suas descrições). Através dos comandos abaixo, o mestre executa todo o processo de inicialização com os equipamentos PROFIBUS-PA: 
Get_Cfg: carrega a configuração dos escravos no mestre e verifica a configuração da rede; 
 
Set_Prm: escreve nos parâmetros dos escravos e executa os serviços de parametrização da rede; 
 
Set_Cfg: configura os escravos de acordo com as entradas e saídas; 
 
Get_Cfg: um outro comando, onde o mestre verifica a configuração dos escravos. 
 
Todos estes serviços são baseados nas informações obtidas dos arquivos gsds dos escravos. O arquivo GSD do DC303 mostra os detalhes de revisão do hardware e do software, bus timing do equipamento e informações sobre a troca de dados cíclicos. Para ter acesso a biblioteca completa de GSDs Smar, consulte: http://www.smar.com.br
 
O DC303 possui 24 blocos funcionais: 16 Entradas Discretas (DI) e8 Saídas Discretas (DO) . Possui também o módulo vazio (Empty module) para aplicações onde se quer configurar apenas alguns blocos funcionais. Deve-se respeitar a seguinte ordem cíclica dos blocos: DO_1, DO_2,…DO_8, DI_, DI_2, …DI_16. Supondo que se queira trabalhar somente com os blocos DOs, configure-os assim: DO_1, DO_2, DO_3, DO_4, DO_5, DO6, DO_7, DO_8,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE. No entanto, se quiser trabalhar apenas com os blocos DOs e o DI_2, faça o seguinte DO_1, DO_2, DO_3, DO_4, DO_5, DO6, DO_7, DO_8,EMPTY_MODULE, DI_2 , EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE,EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE.
 
A maioria dos configuradores PROFIBUS utiliza dois diretórios onde se deve ter os arquivos GSD’s e BITMAP’s dos diversos fabricantes. Os GSD’s e BITMAPS para os equipamentos da Smar podem ser adquiridos via internet no site (https://www.smar.com), no link download. 
 
O exemplo a seguir mostra os passos necessários para integrar o DC303 em um sistema PA. Estes passos são válidos para todos os equipamentos da linha 303 da Smar: 
Copie o arquivo gsd do DC303 para o diretório de pesquisa do configurador PROFIBUS, normalmente chamado de GSD; 
 
Copie o arquivo bitmap do DC303 para o diretório de pesquisa do configurador PROFIBUS, normalmente chamado de BMP; 
 
Após escolher o mestre, defina a taxa de comunicação. Não esqueça que os couplers podem ter as seguintes taxas de comunicação: 45.45 kbits/s (Siemens), 93.75 kbits/s (P+F) e 12 Mbits/s (P+F, SK3). O link device IM157 pode ter até 12 Mbits/s; 
 
Acrescente o DC303 e especifique o seu endereço no barramento; 
 
Escolha a configuração cíclica via parametrização com o arquivo gsd, que depende da aplicação, conforme visto anteriormente. Para cada bloco DO e DI, o DC303 fornece ao mestre o valor da variável discreta e mais 1 byte de status que traz a informação da qualidade deste valor discreto.
 
No bloco DO e DI, pode-se escolher as seguintes opções cíclicas abaixo, sendo que no caso do Bloco DO, somente uma delas é possível por bloco.
 
;Empty module
Module = "EMPTY_MODULE"                 0x00 ;
EndModule
;
;
;Modules for Discrete Output Block
Module = "SP_D"                                      0xA1 ;
 
EndModule
 
Module = "SP_D+RB_D"                          0xC1, 0x81, 0x81, 0x83 ;
 
EndModule
Module = "SP_D+CB_D"                           0xC1, 0x81, 0x82, 0x92 ;
 
EndModule
Module = "SP_D+RB_D+CB_D"                0xC1, 0x81, 0x84, 0x93 ;
 
EndModule
Module = "RIN_D+ROUT_D"                     0xC1, 0x81, 0x81, 0x8C ;
 
EndModule
Module = "RIN_D+ROUT_D+CB_D"         0xC1, 0x81, 0x84, 0x9C ;
 
EndModule
Module = "SP_D+RB_D+RIN_D+ROUT_D+CB_D"              0xC1, 0x83, 0x86, 0x9F ;
 
EndModule
 
;Modules for Discrete Input Block
 
Module = "OUT_D"                                     0x91 ;
 
EndModule
 
Permite ativar a condição de watchdog, que faz o equipamento ir para uma condição de falha segura ao detectar uma perda de comunicação entre o equipamento escravo e o mestre.
 
Conclusão
Vimos através deste artigo os detalhes dos Blocos Funcionais Flexíveis e sua importância nos controles de processos híbridos, assim como a fácil integração entre o Profibus-PA e E/S convencionais e exemplos de aplicação do FFB.
 
Referências:
Manuais SMAR Profibus-PA; 
Manuais de Operação do DC303; 
www.smar.com.br 
CASSIOLATO, César, O uso do Flexible Function Block em sistemas de controle híbridos e aplicações de bateladas, Revista Controle & Instrumentação, Edição nº 89 , 2004 
 
* César Cassiolato é Diretor de Marketing, Qualidade e Engenharia de Projetos & Serviços da SMAR Equipamentos Ind. Ltda., foi Presidente da Associação PROFIBUS Brasil América Latina de 2006 a 2010, Diretor Técnico do Centro de Competência e Treinamento em PROFIBUS, Diretor do FDT Group no Brasil, Engenheiro Certificado na Tecnologia PROFIBUS e Instalações PROFIBUS pela Universidade de Manchester. 
 
 

 

TOF TIMER OFF-DELAY
 
Esta função estende o estado verdadeiro da entrada por um período de tempo em segundos configurado via parâmetro TOF_PST. Se a entrada vai para verdadeiro antes da saída ir para falso, a saída ficará em verdadeiro até que a saída vá para falso e decorra o tempo PST. O parâmetro CTA mostra o tempo corrente. 
 
Função Timer OFF-Delay – Diagramas de Tempo
 
A sintaxe para Timer Off-Delay é:   TOFxx(arg)
Onde, xx é o recurso usado de 01 a 16 e arg é o argumento da função e deve ser uma variável simples. Exemplos: 
 
O1=TOF01(IN1)&SI;
OUT1= TOF01(A05);
OUT3=TOF08(FS1);
 
Por exemplo, os seguintes exemplos são não permitidos na linha lógica: 
 
O1=TOF01(IN1&IN2);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=TOF10(!IN1);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=TOF10(CTD01(IN1,IN2));: note que o argumento é o resultado de uma função e isto não é permitido. 
 
CTD PULSE COUNTER DOWN
Esta função é usada para contar transições de subida (de falso para verdadeiro) da entrada (arg1). A cada transição de subida, o parâmetro CTA decrementa de uma unidade. Quando o CTA atinge o valor zero, a saída do contador irá para verdadeiro. O valor do contador CTA será carregado com o valor de PST. Uma transição de falso para verdadeiro no argumento 2 (arg2) coloca a saída em falso e o parâmetro CTA receberá o valor PST. 
 
A sintaxe para CTD é:   CTDxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são argumentos das funções e devem ser variáveis simples. Exemplos: 
O3=CTD10(IN1,IN2);
OUT1=CTD03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=CTD01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=CTD10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=CTD10(TP01(IN1),IN2);: note que o argumento é o resultado de uma função e isto não é permitido. 
 
CTU PULSE COUNTER UP
 
Esta função é usada para contar transições de subida (de falso para verdadeiro) na entrada (arg1). A cada transição o parâmetro CTA incrementará de uma unidade. Ao atingir o valor PST, a saída desta função irá para o estado lógico verdadeiro e o valor CTA será carregado com valor zero. Uma transição de falso para verdadeiro no argumento 2 (arg2) coloca a saída em falso e o parâmetro CTA receberá o valor zero. 
 
A sintaxe para CTU é: CTUxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=CTU10(IN1,IN2);
OUT1=CTU03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=CTU01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=CTU10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=CTU10(TP01(IN1),IN2);: note que o argumento é o resultado de uma função e isto não é permitido. 
 
FLIP-FLOP RS 
 
Esta função tem a seguinte tabela de operação: 
 
R(arg1) S(arg2) OUT
0 0 Último estado
0 1 1
1 0 0
1 1 0
 
A sintaxe para RS Flip-Flop é: RSxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=RS10(IN1,IN2);
OUT1=RS03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=RS01(IN1&IN2,IN3);: note que o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=RS10(!IN1,IN3);: note que o argumento é o resultado de uma função e isto não é permitido.
 
O1=RS10(TP01(IN1),IN2);: observe que o argumento é o resultado de uma função e isto não é permitido. 
 
 
 
 
FLIP-FLOP SR 
Esta função tem a seguinte tabela de operação: 
 
S(arg1) R(arg2) OUT
0 0 Último Estado
0 1 0
1 0 1
1 1 1
 
A sintaxe para SR Flip-Flop é: SRxx(arg1,arg2)
Onde, xx é o recurso de 01 a 16 e arg1 e arg2 são os argumentos da função e devem ser variáveis simples. Exemplos: 
 
O3=SR10(IN1,IN2);
OUT1=SR03(A11,A14)&SI;
 
Por exemplo, os seguintes exemplos são não permitidos na linha de lógica: 
 
O1=SR01(IN1&IN2,IN3);: o argumento é o resultado de uma operação e isto não é permitido. 
 
O1=SR10(!IN1,IN3);: o argumento é o resultado de uma função NOT e isto não é permitido.
 
O1=SR10(TP01(IN1),IN2);: o argumento é o resultado de uma função e isto não é permitido. 
 
Códigos de Erros
Alguns exemplos de condições de erro:
 
Error Code:  "Exceed String Length or string not valid."
a) OUT1=IN1&IN2&IN2|IN4^IN5|IN6;
 
Note que existem 29 caracteres no texto e o máximo permitido é 24. 
 
b) OUT1=IN1&in2; 
 
Note que todos os mnemônicos devem estar em Letras Maiúsculas. 
 
Error Code:  "Non valid operand."
OUT1=IN1%IN2; 
 
Note que o símbolo % não é permitido. Veja também a tabela que descreve a os Operadores Lógicos e as Linhas de Comando.
 
Error Code:  "No implemented logic or missing ';’.”
OUT1=IN1
 
Note que falta o terminador “;” no final da linha de lógica.
 
Error Code:  "Missing parentheses or argument not valid."
OUT1=TP10(IN1;
 
Observe que falta um parênteses na função timer pulse. 
 
Error Code:  "Non valid resource."
OUT1=TP18(IN1);
 
Observe que há até 16 recursos para cada função. 
 
Error Code:  "Argument not valid."
OUT1=TP10(IN10);
 
Observe que há somente 8 entradas discretas vindas da rede FF. IN10 não é um argumento válido. 
 
Error Code:  "Function not valid."
OUT1=TR10(IN1);
 
Observe que TR não é uma função válida. 
 
Error Code:   "Non available resource."
OUT1=TP10(IN1);
 
A03=TP10(IN7);
 
Observe que há 16 recursos para cada função e o recurso 10 já foi utilizado e não pode ser usado novamente em uma lógica posterior. O que pode ser feito é atribuir o resultado da função a uma variável auxiliar e esta ser usada várias vezes.
A03=TP10(IN7);
 
Error Code:  "Non valid attribution."
IN1=IN2^TP03(IN4);
 
Observe que não é permitida atribuição para entradas. 
 
Error Code:  "First Argument not valid."
OUT1=CTD01(!IN1,IN2);
 
Observe que os argumentos devem ser necessariamente variáveis simples e não resultados de lógica ou funções. 
 
OUT1=RS11(IN15,IN2);
 
Observe que o primeiro argumento da função não é um recurso válido. 
 
Error Code:  "Second Argument not valid."
a) OUT1=CTD01(IN1,!IN2);
 
Note que necessariamente os argumentos de função devem ser variáveis simples e não resultados de lógicas ou funções. 
 
OUT1=RS11(IN1,IN20);
 
Observe que o segundo argumento da função não é um recurso válido. 
 
 
Exemplos de aplicações
 
1) De acordo com a próxima figura, temos uma aplicação industrial onde se tem o enchimento de garrafas com fluido químico. A esteira é movimentada até que um sensor detecte sua presença. A esteira deve parar e abrir a válvula de enchimento até que seja detectado o nível pelo sensor de nível. Depois de detectar o nível, o sistema deve esperar durante 10 segundos e mover a esteira novamente até a próxima garrafa. 
 
  
 
Usando o bloco funcional Flexível, temos as seguintes definições: 
 
  A esteira será ligada utilizando a saída 01 de hardware  (O1);
  A válvula de enchimento será ligada utilizando a saída 02 de hardware  (O2);
  sensor de garrafa será conectado a entrada de 01 de hardware (I01);
  sensor de nível será conectado a entrada de 02 de hardware (I02);
  A alimentação do sistema será a entrada de 03 de hardware (I03);
 
Tem-se, então, a seguinte configuração: 
 
TON_PST resource [01] = 10.0s.
LOGIC_01        A01=TON01(I02);
LOGIC_02        O1=I03&!I01|A01;
LOGIC_03        O2=I01&!I02;
 
 
Fazendo analogia com a programação ladder, tem-se:
 
 
 
2) Na seguinte aplicação mecânica, tem-se o controle de passos para operar uma balança eletromecânica, que efetua a pesagem de rocha fosfatada. 
O peso do processo é feito por batelada, o sistema executa um ciclo completo de pesagem a cada intervalo de 20 segundos. Veja a figura a seguir: 
 
 
 
M1 e M3 - Motores acionadores das esteiras 
C2 e C4 – Chaves fim de curso 
LSH  - Sensor de Nível Alto
LSL  - Sensor de Nível Baixo
SG  - Célula de Carga
SV  - Válvula Solenóide 
M  - Motor acionador de Caçamba 
P  - Pistão acionador de Comporta
C  - Circuito de Pesagem
 
Processo:
O sistema necessita das seguintes condições para fazer o startup: 
 
  Nível da pedra fosfática (LSL desativado);
  Pressão do Óleo (PSL ligado);
  Esteira transportadora nº 2 em movimento (M3 ligado);
  Caçamba na posição inicial (C4 ligado);
 
Satisfeitas as condições iniciais, observa-se que:
 
  Acionando-se o botão de partida, a comporta abre-se, dando início ao carregamento da caçamba. 
  Uma vez atingido o peso desejado, a comporta fecha. Decorridos 5 segundos a caçamba efetua um giro de 180º , descarregando o produto na esteira transportadora número 2. 
 
Observação: 
  Esta nova posição será detectada por C2 e após 5 segundos, a caçamba retornará à posição inicial e isto será detectado pelo C4. 
  Depois da caçamba retornar para a posição inicial, ter-se-á um novo ciclo de pesagem. 
 
Comentário:
  A sequência de operação deve ser interrompida se qualquer um dos pré-requisitos não for satisfeito. 
  A comporta silo é acionada por um pistão hidráulico. 
 
Usando o Bloco Funcional Flexível, tem-se as seguintes definições: 
 
  LSL será conectado à entrada do hardware 01 (I01);
  LSH será conectado à entrada do hardware 02 (I02);
  PSL será conectado à entrada do hardware 03 (I03);
  C2 será conectado à entrada do hardware 04 (I04);
  C4 será conectado à entrada do hardware 05 (I05);
  Alimentação será conectada à entrada do hardware 06 (I06);
  M3 será conectado à entrada do hardware 07 (I07);
  M será conectado à saída do hardware 01 (O1);
  A Comport será ativada pela saída do hardware 02 (O2);
  M1 será ativado pela saída do hardware 03 (O3);
 
Tem-se a seguinte configuração:
TON_PST recurso [01] = 5.0s.
LOGIC_01        A01=!I01&I03&I07&I05;
LOGIC_02        A02=I06&RS01(I02,I01);
LOGIC_03        O3=A02&I03;
LOGIC_04        A03=I03&I07;
LOGIC_05        O2=I06&A03&!I04;
LOGIC_06        O1=TON01(I04)&!I05&A03;
 
3) Usando Valores de Estado de Falha: 
 
Supondo que exista a seguinte condição: 
 
  A01: recebe a lógica entre os status das entradas discretas 1 e 2, como esta: A01=IN1S&IN2S; quando o status é ruim, uma destas entradas, então A01=false(0), de outra forma, A01=true (1);
  FS1: é o valor de segurança de falha para O1;
  A02: é o bit que contém a lógica para O1;
 
Há a seguinte tabela entre FS1, A01 e A02:
 
FS1 A01 A02 O1
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1
 
Então,
 
A03=!FS1&A01&A02;
A04=FS1&!A01&!A02;
A05=FS1&!A01&A02;
A06=FS1&A01&A02;
O1=A03|A04|A05|A06;
 
 
Configurando ciclicamente o DC303 
Os protocolos PROFIBUS-DP e PROFIBUS-PA possuem mecanismos contra falhas e erros de comunicação entre o equipamento da rede e o mestre. Por exemplo, durante a inicialização do equipamento esses mecanismos são utilizados para verificar esses possíveis erros. Após a energização (power up) do equipamento de campo (escravo) pode-se trocar dados ciclicamente com o mestre classe 1, se a parametrização para o escravo estiver correta. Estas informações são obtidas através dos arquivos GSDs (arquivos fornecidos pelos fabricantes dos equipamentos que contém suas descrições). Através dos comandos abaixo, o mestre executa todo o processo de inicialização com os equipamentos PROFIBUS-PA: 
Get_Cfg: carrega a configuração dos escravos no mestre e verifica a configuração da rede; 
 
Set_Prm: escreve nos parâmetros dos escravos e executa os serviços de parametrização da rede; 
 
Set_Cfg: configura os escravos de acordo com as entradas e saídas; 
 
Get_Cfg: um outro comando, onde o mestre verifica a configuração dos escravos. 
 
Todos estes serviços são baseados nas informações obtidas dos arquivos gsds dos escravos. O arquivo GSD do DC303 mostra os detalhes de revisão do hardware e do software, bus timing do equipamento e informações sobre a troca de dados cíclicos. Para ter acesso a biblioteca completa de GSDs Smar, consulte: http://www.smar.com.br
 
O DC303 possui 24 blocos funcionais: 16 Entradas Discretas (DI) e8 Saídas Discretas (DO) . Possui também o módulo vazio (Empty module) para aplicações onde se quer configurar apenas alguns blocos funcionais. Deve-se respeitar a seguinte ordem cíclica dos blocos: DO_1, DO_2,…DO_8, DI_, DI_2, …DI_16. Supondo que se queira trabalhar somente com os blocos DOs, configure-os assim: DO_1, DO_2, DO_3, DO_4, DO_5, DO6, DO_7, DO_8,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE. No entanto, se quiser trabalhar apenas com os blocos DOs e o DI_2, faça o seguinte DO_1, DO_2, DO_3, DO_4, DO_5, DO6, DO_7, DO_8,EMPTY_MODULE, DI_2 , EMPTY_MODULE, EMPTY_MODULE,EMPTY_MODULE,EMPTY_MODULE,EMPTY_MODULE, EMPTY_MODULE.
 
A maioria dos configuradores PROFIBUS utiliza dois diretórios onde se deve ter os arquivos GSD’s e BITMAP’s dos diversos fabricantes. Os GSD’s e BITMAPS para os equipamentos da Smar podem ser adquiridos via internet no site (https://www.smar.com), no link download. 
 
O exemplo a seguir mostra os passos necessários para integrar o DC303 em um sistema PA. Estes passos são válidos para todos os equipamentos da linha 303 da Smar: 
Copie o arquivo gsd do DC303 para o diretório de pesquisa do configurador PROFIBUS, normalmente chamado de GSD; 
 
Copie o arquivo bitmap do DC303 para o diretório de pesquisa do configurador PROFIBUS, normalmente chamado de BMP; 
 
Após escolher o mestre, defina a taxa de comunicação. Não esqueça que os couplers podem ter as seguintes taxas de comunicação: 45.45 kbits/s (Siemens), 93.75 kbits/s (P+F) e 12 Mbits/s (P+F, SK3). O link device IM157 pode ter até 12 Mbits/s; 
 
Acrescente o DC303 e especifique o seu endereço no barramento; 
 
Escolha a configuração cíclica via parametrização com o arquivo gsd, que depende da aplicação, conforme visto anteriormente. Para cada bloco DO e DI, o DC303 fornece ao mestre o valor da variável discreta e mais 1 byte de status que traz a informação da qualidade deste valor discreto.
 
No bloco DO e DI, pode-se escolher as seguintes opções cíclicas abaixo, sendo que no caso do Bloco DO, somente uma delas é possível por bloco.
 
;Empty module
Module = "EMPTY_MODULE"                 0x00 ;
EndModule
;
;
;Modules for Discrete Output Block
Module = "SP_D"                                      0xA1 ;
 
EndModule
 
Module = "SP_D+RB_D"                          0xC1, 0x81, 0x81, 0x83 ;
 
EndModule
Module = "SP_D+CB_D"                           0xC1, 0x81, 0x82, 0x92 ;
 
EndModule
Module = "SP_D+RB_D+CB_D"                0xC1, 0x81, 0x84, 0x93 ;
 
EndModule
Module = "RIN_D+ROUT_D"                     0xC1, 0x81, 0x81, 0x8C ;
 
EndModule
Module = "RIN_D+ROUT_D+CB_D"         0xC1, 0x81, 0x84, 0x9C ;
 
EndModule
Module = "SP_D+RB_D+RIN_D+ROUT_D+CB_D"              0xC1, 0x83, 0x86, 0x9F ;
 
EndModule
 
;Modules for Discrete Input Block
 
Module = "OUT_D"                                     0x91 ;
 
EndModule
 
Permite ativar a condição de watchdog, que faz o equipamento ir para uma condição de falha segura ao detectar uma perda de comunicação entre o equipamento escravo e o mestre.
 
Conclusão
Vimos através deste artigo os detalhes dos Blocos Funcionais Flexíveis e sua importância nos controles de processos híbridos, assim como a fácil integração entre o Profibus-PA e E/S convencionais e exemplos de aplicação do FFB.
 
Referências:
Manuais SMAR Profibus-PA; 
Manuais de Operação do DC303; 
www.smar.com.br 
CASSIOLATO, César, O uso do Flexible Function Block em sistemas de controle híbridos e aplicações de bateladas, Revista Controle & Instrumentação, Edição nº 89 , 2004 
 
* César Cassiolato é Diretor de Marketing, Qualidade e Engenharia de Projetos & Serviços da SMAR Equipamentos Ind. Ltda., foi Presidente da Associação PROFIBUS Brasil América Latina de 2006 a 2010, Diretor Técnico do Centro de Competência e Treinamento em PROFIBUS, Diretor do FDT Group no Brasil, Engenheiro Certificado na Tecnologia PROFIBUS e Instalações PROFIBUS pela Universidade de Manchester. 

Data de publicação: 2012-02-07 11:10:47