Quantos Loops de PID podem ser configurados em um M580

Introdução

Quantos loops PID podem ser configurados em um sistema M580?

Qual será o tempo de varredura típico do controlador para 100 malhas fechadas?

Acima estão algumas perguntas típicas que muitos de nós podem ter ouvido durante nossas discussões técnicas com o usuário final. No entanto, essas perguntas são genuínas, não temos nenhuma evidência documental ou representação técnica conosco para responder.

Houve um debate entre o grupo de especialistas técnicos, no entanto, cada indivíduo tem suas próprias interpretações.

Alguns fornecedores dizem que não há limitação…

Alguém diz que meu sistema é capaz de lidar com saídas analógicas “2K”, portanto, posso configurar loops PID de 2K.

Mesmo que essas declarações pareçam convincentes, praticamente não é viável configurar 2K / loops ilimitados em um único sistema de controle dentro do tempo de varredura desejado. É bom conhecer os fatos e as capacidades do sistema antes de submeter a conformidade com as especificações da EU.

O fato é que, a capacidade PID pode ser derivada apenas com base na memória do controlador

Um POC foi realizado para resumir os recursos do Sistema M580 em relação ao manuseio do PID e seu impacto no tempo de varredura.

Arquitetura usada e pré-requisitos

  1. O controlador M580 HSBY (BMEH58 6040) foi considerado para POC com 1 X80 RIO drop
  2. O Unity V13 foi usado para criar aplicativos.
  3. Conhecimento M580 + Unity Pro
  4. Entender a estrutura de memória interna do M580
  5. Conhecimento em configuração do PID
Archtecture

Metodologia POC

> Work Flow

> Step 1 – Descubra o tempo de varredura ideal do M580

  1. Configure o controlador M580 HSBY (BMEH58 6040) com 1 X80 RIO drop conforme a arquitetura.
  2. Faça Download da aplicação sem qualquer código e capture o tempo de varredura do M580..

> Step 2 – Descubra os requisitos de memória para PIDFF (usando EF da biblioteca de unidade)

  1. Além da Step 1, configure um PIDFF com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  2. Registre os requisitos de memória para 1 loop PID comparando a step 2 e a step 1
  3. Adicione mais blocos PIDFF (10,20,30….até 100) com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  4. Registre a média de memória de dados consumida e verifique a consistência do tempo de varredura.

> Step 3 – Carregar o controlador M580 com lógica de aplicação + malhas PID (até 100 malhas com EF e 100 malhas com DFB)

  1. Além da Step 2, configure um PIDFF com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  2. Repita o procedimento 2,3,4 acima mencionado no Step 2.

> Step 4 – Carregar o controlador M580 com lógica de aplicação + malhas PID (até 100 malhas com EF e 100 malhas com DFB)

  1. Em continuação ao step 3 … Carregar o controlador M580 com lógica de aplicação de preferência de um projeto real.
  2. Registre o tempo de varredura, disponibilidade de memória do controlador M580.
  3. Adicione 100 loops PID (EF) junto com o código do aplicativo e registre a variação do tempo de varredura e os requisitos de memória.
  4. Adicione 100 loops PID (DFB) junto com o código do aplicativo e registre a variação do tempo de varredura e os requisitos de memória.

> Step 5 – Conclusão


> Step 1 – Descubra o tempo de varredura ideal do M580 SCPU
  1. Configure o controlador M580 HSBY (BMEH58 6040) com 1 X80 RIO drop conforme a arquitetura.
  2. Faça download do aplicativo sem qualquer código e capture o tempo de varredura do M580.

M580 HSBY Tempo de varredura registrado como 1 ms , sem nenhum código de aplicativo.

Step 2 – Descubra os requisitos de memória para PIDFF (usando EF da biblioteca de unidade)

  1. Além da Etapa 1, configure um PIDFF com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  2. Registre os requisitos de memória para 1 loop PID comparando a etapa 2 e a etapa 1
  3. Adicione mais blocos PIDFF (10,20,30….até 100) com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  4. Registre a média de memória de dados consumida e verifique a consistência do tempo de varredura.

Para 1 Loop PID

M580 HSBY Tempo de varredura registrado como 1 ms , sem nenhum código de aplicativo.

A memória de dados consumida é de 2656 bytes e o código executável é de 8928 bytes;

Para 10 Loops PID

M580 HSBY Tempo de varredura registrado como 1 ms , sem nenhum código de aplicativo.

A memória de dados consumida é de 4928 bytes e o código executável é de 1064 bytes;

Para 20 Loops PID

M580 HSBY Tempo de varredura registrado como 2 ms , sem nenhum código de aplicativo.

A memória de dados consumida é de 7408 bytes e o código executável é de 13520 bytes;

Para 50 Loops PID

M580 HSBY Tempo de varredura registrado como 2 ms , sem nenhum código de aplicativo.

A memória de dados consumida é de 14864 bytes e o código executável é de 21744 bytes;

O atributo alt desta imagem está vazio. O nome do arquivo é image-5.png



Para 100 Loops PID

M580 HSBY Tempo de varredura registrado como 3 ms , sem nenhum código de aplicativo.

A memória de dados consumida é de 27.280 bytes e o código executável é de 36.384 bytes;

  1. Além da Etapa 1, configure um PIDFF com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  2. Registre os requisitos de memória para 1 loop PID comparando a etapa 2 e a etapa 1
  3. Adicione mais blocos PIDFF (10,20,30….até 100) com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  4. Registre a média de memória de dados consumida e verifique a consistência do tempo de varredura.
Dados registrados

> Memory consumed for 10 PID loops is 4928 bytes

> Memory consumed for 20 PID loops is 7408 bytes. Hence for 1 PID loop 7408 – 4928 / 10 = 248 bytes

> Memory consumed for 50 PID loops is 14864 bytes. Hence for 1 PID loop 14864 – 7408 / 30 = 248 bytes

> Memory consumed for 100 PID loops is 27280 bytes.Hence for 1 PID loop 27280 -14864 / 50 = 248 bytes > Higher vale considered as 250 bytes


> Executable code for 10 PID loops is 10864 bytes.

> Executable code for 20 PID loops is 13520 bytes. Hence for 1 PID loop 13520 – 10864 / 10 = 265 bytes

> Executable code for 50 PID loops is 21744 bytes. Hence for 1 PID loop 21744 – 13520 / 30 = 274 bytes

> Executable code for 100 PID loops is 36384 bytes. Hence for 1 PID loop 36384 – 21744 / 50 = 292 bytes - Higher vale considered as 300 bytes

O tempo de varredura não tem muito impacto. Por isso não é levado em consideração.

Para fins de discussão, é anotado como 2-3 ms

> Step 3 – Descubra os requisitos de memória para PIDFF (usando DFB da biblioteca PES/hDCS)

  1. Além da Etapa 2, configure um PIDFF com todas as funcionalidades em uma seção DFB, baixe o aplicativo e meça o tempo de varredura do M580, os requisitos de memória.
  2. Repita o procedimento acima 2,3,4 mencionado na Etapa 2
> Dados registrados

> Memory consumed for 10 PID loops is 6352 bytes1ms Scan Time

> Memory consumed for 20 PID loops is 10672 bytes. Hence for 1 PID loop 10672 – 6352 / 10 = 432 bytes2ms Scan Time

> Memory consumed for 50 PID loops is 23632 bytes. Hence for 1 PID loop 23632 – 10672 / 30 = 432 bytes3ms Scan Time

> Memory consumed for 100 PID loops is 45392 bytes.Hence for 1 PID loop 45392 - 23632 / 50 = 435 bytes5ms Scan Time

> Higher vale considered as 435 bytes


> Executable code for 10 PID loops is 16848 bytes.

> Executable code for 20 PID loops is 20320 bytes. Hence for 1 PID loop 20320 – 16848 / 10 = 347 bytes

> Executable code for 50 PID loops is 33103 bytes. Hence for 1 PID loop 33103 – 20320 / 30 = 426 bytes

> Executable code for 100 PID loops is 54224 bytes. Hence for 1 PID loop 54224 – 33103 / 50 = 422 bytes > Higher vale considered as 426 bytes


O tempo de varredura não tem muito impacto. Por isso não é levado em consideração.

Para fins de discussão, é anotado como 3-5 ms

> Step 4 – Carregue o controlador M580 com lógica de aplicação + loops PID (até 100 loops com EF e 100 loops com DFB)

  1. Em continuação ao passo 3 … Carregue o controlador M580 com lógica de aplicação preferencialmente de um projeto real.
  2. Registre o tempo de varredura, disponibilidade de memória do controlador M580
  3. Adicione 100 loops PID (EF) junto com o código do aplicativo e registre a variação do tempo de varredura e os requisitos de memória.
  4. Adicione 100 loops PID (DFB) junto com o código do aplicativo e registre a variação do tempo de varredura e os requisitos de memória.

Dados registrados

> Memory consumed for application code without PID loops is 354512 bytes.

> Memory consumed for 20 PID loops is 359552 bytes. Hence for 1 PID loop 359552 – 354512 / 10 = 252 bytes

> Memory consumed for 50 PID loops is 367136 bytes. Hence for 1 PID loop 367136 – 359552 / 30 = 252 bytes

> Memory consumed for 100 PID loops is 379712 bytes.Hence for 1 PID loop 379712 – 367136 / 50 = 252 bytes

> Memory consumed for 200 PID loops(EF+DFB) is 423120 bytes. Hence for 1 PID loop 423120 – 379712 / 100 = 434 bytes > Higher vale considered as 252 bytes , 435 bytes for EF&DFB respectively.


> Executable code loaded is 3234976 bytes without PID loops

> Executable code for 20 PID loops is 3239984 bytes. Hence for 1 PID loop 3239984 – 3234976 / 10 = 250 bytes

> Executable code for 50 PID loops is 3248496 bytes. Hence for 1 PID loop 3248496 – 3239984 / 30 = 283 bytes > Executable code for 100 PID loops is 3263888 bytes. Hence for 1 PID loop 3263888 – 3248496 / 50 = 307 bytes > Higher valve considered as 307 bytes.


Tempo de varredura 36 ms apenas com o código do aplicativo

41 ms com 100 loops

49 ms com 200 loops. 49-36 = 13 ms

Maior valor considerado como 20 ms para 200 loops.

> Step 5 – Conslusão

 EFDFBRemarks
 For 1 PID Loop 
Data Memory252 Bytes435 Bytes 
Executable Code307 Bytes426 Bytes 
Scan Time20 ms20 msFor 200 loops + add 20 ms system overheads to compensate site conditions and real project environment.
  1. Ex: Estime o desempenho da CPU autônoma M580 Nível 2 (P2040)
  • Suponha que 40% da memória de dados usada para lógica do aplicativo e 40% sejam deixados livres para uso futuro.
  • Significa praticamente que ficamos de fora com 20% de memória, ou seja, 150 Kbytes disponíveis.
  • Suponha projeto implantado usando hDCS..

Cálculo:

  • 153600 bytes / 435 = 350 Loops podem ser configurados
  • 534 * 426 = 222 KB de código executável serão consumidos.
  • Tempo de varredura: 8 gotas RIO precisam de min 12 ms + código executável 60 ms (aprox para 10K IO) + PID 40 ms + overheads 20 ms
  • Total: 132ms

Nota:

Os parâmetros capturados são para o sistema HSBY e usados para a configuração do controlador autônomo para atingir os valores ideais.

20 ms Overhead é para compensar as condições reais do processo em relação à bancada de teste.

A ideia é derivar aprox. valores, os valores reais podem ser ligeiramente diferentes.

Related Articles

Responses