Westcon: sucesso com linha Profibus no mercado brasileiro.
Seminário Cases reúne especialistas em São Paulo
Treinamento em São Carlos em junho
Encontro de Saneamento Ambiental
Grupo de Cabos
Cabos Profibus Amphenol produzidos no Brasi
Endress+Hauser é parceira da Alfa Laval em projeto pioneiro
Célula Automação, cada vez mais especializada em diagnóstico e análise de redes Profibus

LMP-100 – Solução eficiente para conexão de redes Modbus e Profibus.

DC303 - Entradas e Saídas Discretas em sistemas Profibus com controle híbridos e aplicações de bateladas
O uso de entradas e saídas remotas em Profibus-PA facilitando a automação de processos em sistemas de controle
Medição de vazão – a terceira grandeza mais medida nos processos industriais
Profibus – Aterramento, Blindagem, Ruídos, Interferências, Reflexões e muito mais...
Proline t-mass 150 Endress+Hauser
G10 Safety Pepperl+Fuchs
Segurança em redes industriais Siemens
Configurador on-line para redes industriais: SIMATIC NET Selection Tool Siemens

 

OUTRAS EDIÇÕES
Edição 01 - Abril 2004
Edição 02 - Junho 2004
Edição 03 - Agosto / Setembro 2004
Edição 04 - Outubro / Novembro 2004
Edição 05 - Dezembro 2004/ Janeiro 2005
Edição 06 - Fevereiro / Março 2005
Edição 07 - Abril / Maio 2005
Edição 08 - Junho / Julho 2005
Edição 09 - Agosto / Setembro 2005
Edição 10 - Outubro / Novembro 2005
Edição 11 - Dezembro 2005 / Janeiro 2006
Edição 12 - Fevereiro / Março 2006
Edição 13 - Julho / Agosto 2006
Edição 14 - Novembro 2006
Edição 15 - Abril 2007
Edição 16 - Junho 2007
Edição 17 - Fevereiro 2008
Edição 18 - Julho 2008
Edição 19 - Outubro 2008

EXPEDIENTE

PROFINEWS BRASIL
Edição nº 27 - Agosto 2012

PROFINEWS BRASIL é uma publicação eletrônica bimestral da ASSOCIAÇÃO PROFIBUS, distribuída a seus associados, fornecedores e usuários das tecnologias PROFIBUS e AS-i.

 

DIRETORIA EXECUTIVA 2009/2012

Marco Padovan (Sense)
Diretor Presidente

Leandro Torres (Smar)
Diretor Vice Presidente Tesoureiro

Robert Gries Drumond (Siemens)
Diretor Vice Presidente Secretário

Adriano Oliveira (Smar)
Diretor de Marketing

Silas Anchieta
Diretor Executivo

 

JORNALISTA RESPONSÁVEL

Sílvia Bruin Pereira
(MTb 11.0065 / MS 5936)

Os artigos assinados são de exclusiva responsabilidade de seus autores. É vedada a reprodução total ou parcial dos textos e ilustrações desde newsletter, sob pena de sanções legais. São tomados todos os cuidados razoáveis na preparação do conteúdo das matérias e, caso haja enganos em textos ou desenhos, será publicada errata na primeira oportunidade.

 


Associação PROFIBUS
Caixa Postal 11.063-9 - CEP 05422-970
São Paulo, SP. Telefone/Fax: (11) 2849-3202
e-mail: profibus@profibus.org.br
site: www.profibus.org.br.



Siga-nos!

    

 

ARTIGO TÉCNICO

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

César Cassiolato (cesarcass@smar.com.br), Diretor de Desenvolvimento de Equipamentos de Campo, Engenharia de Produtos e Qualidade, da SMAR Equipamentos Industriais Ltda.

 

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. 

A Associação PROFIBUS não se responsabiliza por qualquer dano supostamente decorrente pelos conceitos, comentários, depoimentos e opinões emitidas em matérias fornecidas pelos seus membros ou artigos assinados. A opinião expressa no conteúdo não traduz em nenhum momento a opinião da Associação PROFIBUS. Os artigos assinados são de exclusiva responsabilidade de seus autores. É vedada a reprodução total ou parcial dos textos e ilustrações deste newsletter, sob pena de sanções legais. São tomados todos os cuidados razoáveis na preparação do conteúdo das matérias e caso haja enganos em textos ou desenhos, será publicada errata na primeira oportunidade. A Associação PROFIBUS se reserva o direito de, a qualquer tempo e a seu exclusivo critério, retirar qualquer edição, comentário ou imagem que possa ser interpretada como contrária aos seus objetivos.

© Associação PROFIBUS. Todos os direitos reservados. É proibida a reprodução do conteúdo desta página em qualquer meio de comunicação, eletrônico ou impresso, sem autorização escrita da
Associação PROFIBUS.