Codificação de Programas

Codificação de programas DP

Em um ambiente de projeto, onde novos programas de desenho são desenvolvidos diariamente por um ou mais projetistas, a falta de organização pode levar uma perda de tempo excessiva na codificação e teste dos programas. A perda é maior ainda quando há a necessidade de se alterar programas DP prontos ou adaptar um programa DP para desenhos ligeiramente diferentes.


Para aumentar a organização dos programas DP desenvolvidos, é desejável que:


  • Os programas sejam codificados de uma forma legível;
  • Que tenham uma documentação que descreva as variáveis utilizadas (incluindo nós);
  • Que tenham uma estrutura simples;
  • Que tenham uma documentação dos blocos usados e como gera-los, quando for o caso.

O tempo adicional gasto para organizar programas DP é rapidamente recuperado quando é preciso corrigir / alterar programas prontos. Sugerimos neste capítulo alguns procedimentos de codificação e documentação de programas.


Tornando um programa legível

Compare os 2 trechos de programa listados a seguir e decida qual é mais fácil de ler:


PROGRAMA 1


DES'TMP'

INC'NOS'

34 31@0,-%GRAVATA

35 32@0,%GRAVATA

36 X34+(%ALT2-%ALT1),Y2

37 36@%ALT1,0

38 X37,Y3

39 X36,Y38

POL 36 37 38 39 36

POL 36 34 31

POL 39 35 32

FIM


PROGRAMA 2


DESENHO 'TMP'

INCLUI 'NOS'

34 31 @0,-%GRAVATA

35 32 @0,%GRAVATA

36 X34 + (%ALT2 - %ALT1),Y2

37 36 @%ALT1,0

38 X37,Y3

39 X36,Y38


POL 36 37 38 39 36

POL 36 34 31

POL 39 35 32

FIM


Ambos programas são válidos e equivalentes; o segundo programa é mais legível. O DP permite o uso livre de espaços e linhas em branco, assim como o uso do caractere de tabulação (rotulado no teclado como Tab ou duas flechas contrapostas). Para deixar mais claro o programa:


Separamos definições diferentes (tais como nós e poligonais) por linhas em branco;

Tabulamos os dados, deixando alinhados números de nós, coordenadas X, Y, etc.


Identamento de comandos

Chama-se de "Identamento" ao deslocamento que se faz nos comandos para o lado direito da linha, com o objetivo de diferenciar a seção de programa a que pertence cada comando. O exemplo abaixo mostra um programa sem identamento e um com:


Sem identamento:


DESENHO 'TMP'

INCLUI 'NOS'

REPETE I = 10

NUM J = %I + 1

SE %J = 11

NUM J = 1

FIM

NUM K = %J + 1

SE %K = 11

NUM K = 1

FIM

POLIGONAL %I %J %K

FIM

FIM


Com identamento:


DESENHO 'TMP'

NCLUI 'NOS'

REPETE I= 10

NUM J= %I + 1

SE %J= 11

NUM J = 1

FIM

NUM K = %J + 1

SE %K = 11

NUM K = 1

FIM

POLIGONAL %I %J %K

FIM

FIM


Neste exemplo, o comando REPETE controla um certo número de outros comandos. No programa sem identamento não ficam claros quais são os comandos controlados pelo REPETE (além disto, fica fácil esquecer de colocar um FIM no lugar certo). No segundo programa identou-se:


Um nível para todos os comandos dentro da seção DESENHO;

Um nível para todos os comandos controlados pelo REPETE;

Um nível para os comandos controlados pelo SE.


Note que os níveis de identamento são acumulativos.


Comentários

Programas DP são altamente simbólicos, e um comando como:


POL 10 11 12 13 10


não representa nada para quem lê, além de uma poligonal que pode estar em qualquer parte do desenho. Comentários devem ser livremente usados ao longo do programa para mostrar o que o programa está fazendo. Por exemplo:


$

$Contorno da vista em planta

$

POL 10 11 12 13 10 $ retangulo projetado


Variáveis Usadas

São 2 os tipos de variáveis usadas em um subprograma: os parâmetros e as outras variáveis locais.


Documentação de Parâmetros

Praticamente não há meio de não documentar os parâmetros usados em um subprograma. Existe uma palavra chave especial, COMENTÁRIO, que serve para descrever um parâmetro. O gerador de programas DP procura esta descrição e usa para o projetista digitar os parâmetros; sem a descrição a digitação de dados fica difícil.


Documentação de variáveis locais

As variáveis locais também podem ser divididas em duas categorias principais: os nós e as demais variáveis.


A única documentação razoável para nós é gráfica; o melhor é plotar um exemplo do desenho paramétrico e anotar a posição dos nós no desenho. Os parâmetros e outras variáveis também podem ser marcados sobre o desenho.


No caso das variáveis locais criadas dentro do subprograma, o melhor é abrir uma seção LOCAIS e declarar cada variável, comentando do lado. Por exemplo:


LOCAIS

N NBFLEX $ número de barras de flexão

N BITFLEX $ bitola de flexão

N NBCIS $ número de barras de cisalhamento

N BITCIS $ bitolas de cisalhamento

FIM


Independência de Escala

Desenhos por computador seriam sempre independentes da escala usada se não existissem textos no desenho. Como isto normalmente não acontece, torna-se necessário levar em consideração a escala quando se faz um programa.


O DP mantém um fator de escala atual do desenho (cujo default é 50), e multiplica os tamanhos de textos por esta escala. Para quem programa isto facilita, pois o texto sairá sempre proporcional a escala de desenho, para um único tamanho definido, em centímetros de plotagem.


No entanto, apenas os tamanhos de texto são multiplicados automaticamente. Como fazer para colocar um determinado nó a direita do outro, na escala do papel? A solução seria multiplicar 5 pela escala atual, tal como em:


21 @ 5*%_ESCALA, 0


TEXTO 1 @ 0, -1.5*%HTEX*%_ESCALA 'TEXTO'


Para facilitar o projetista, a escala de desenho, quando variável, deve ser parâmetro de entrada do subprograma. Por exemplo:


PARAMETROS

...

N ESCALA = %_ESCALA COM 'Escala 1:x'

FIM

DEFINE ESCALA %ESCALA


A escala foi declarada como parâmetro, e o seu valor default é o mesmo da escala atual do DP, normalmente 1:50. Logo no começo do programa nós reatribuimos o valor da escala do DP, com o comando DEFINE ESCALA.


Documentação de Programas de Biblioteca

Assim como existe uma pasta de documentação de desenhos paramétricos para o projetista, deve existir uma de documentação de programas, especialmente para os projetistas-programadores. Esta pasta deve incluir um exemplo de um desenho processado, um mapa dos nós sobre o desenho e a listagem, codificada como sugerimos. Não há necessidade de documentação complementar quando o programa já é suficientemente documentado internamente. Nas páginas a seguir nós vemos o exemplo de uma documentação deste tipo.


Subprograma SAPATA.DPS


a7a68ce4804626b1dfafe61116727910.png


Documentação de NÓS


f585f5616ca416ae01ac05d5f32ceeec.png


Listagem do SAPATA.DPS


$

$Sapatas - todas as medidas em cm

$


PARÂMETROS


A TITULOCOM 'Titulo da sapata'

N ESCALA = %_ESCALACOM 'Escala 1:x'

N MULTI = 1 COM 'Multiplicador do numero de sapatas'

N COMPRIMCOM 'Comprimento X (cm)'

N LARGURACOM 'Largura Y (cm)'

N COMPILCOM 'Comprimento X do pilar (cm)'

N LARPILCOM 'Largura Y do pilar (cm)'

N GRAVATACOM 'Tamanho da gravata (cm)'

N ALT1COM 'Altura 1 (cm)'

N ALT2COM 'Altura 2 (cm)'


N BITXCOM 'Bitola na direcao X (mm)'

N ESPXCOM 'Espacamento na direcao X (cm)'

N BITYCOM 'Bitola na direcao Y (mm)'

N ESPYCOM 'Espacamento na direcao Y (cm)'

N DOBRACOM 'Comprimento da dobra (cm)'

N RECOBR = 1.5COM 'Recobrimento (cm)'


FIM


$

$Define tamanho de texto e escala de desenho

$

DEFINE TAMTTX 0.22

DEFINE ESCALA%ESCALA


LOCAIS


N NBX$ numero de barras, direcao X

N NBY$ numero de barras na direcao Y

N CMPX$ Comprimento do ferro, X

N CMPY$ Comprimento do ferro, Y

N DELTA$ deslocamento do gabarito do ferro

N HTEX = %_TAMTTX*%_ESCALA$ altura de texto de ferros

N HTEX1S = 0.7

N HTEX2S = 0.4

N HTEX1 = %HTEX1S*%_ESCALA$ altura de titulo

N HTEX2 = %HTEX2S*%_ESCALA$ altura de escala

FIM

$

$Raio de desenho dos ferros, FI 25 para maior efeito

$

N RAIO = 1.25

$

$Vista em Planta

$

10,0

21 @%COMPRIM,0

32 @0,%LARGURA

4X1,Y3

POL12341


51 @(%COMPRIM - (%COMPIL + (2*%GRAVATA)))/2,-

(%LARGURA - (%LARPIL + (2*%GRAVATA)))/2

65 @%COMPIL + (2*%GRAVATA), 0

76 @0,%LARPIL + (2*%GRAVATA)

8X5,Y7

POL56785

SE%ALT2 <> %ALT1

POL15

POL26

POL37

POL48

FIM


95 @ %GRAVATA, %GRAVATA

106 @-%GRAVATA, %GRAVATA

117 @-%GRAVATA, -%GRAVATA

128 @ %GRAVATA, -%GRAVATA

POL91011129

$

$Projecao X

$

19X9,Y1 - (1.5*%_ESCALA)

1819 @%COMPIL,0

1718 @0,-1.2*%_ESCALA

20X19,Y17

POL2017181920


16X1,Y20 - (%ALT2 - %ALT1)

1316 @0,-%ALT1

14X2,Y13

15X14,Y16

2220 @-%GRAVATA,0

2117 @%GRAVATA,0

POL1314151613

POL162220

POL152117


2313 @%RECOBR,%RECOBR

2423 @0,%DOBRA

2514 @-%RECOBR,%RECOBR

2625 @0,%DOBRA

POL24232526

N DELTA= %RECOBR + (0.5 * %_ESCALA) + %DOBRA

2323 @0,-%DELTA

2424 @0,-%DELTA

2525 @0,-%DELTA

2626 @0,-%DELTA

POL24232526


N CMPX= %COMPRIM - (2*%RECOBR) + (2*%DOBRA)

N NBX= FIX ((%LARGURA - (2*%RECOBR))/ %ESPX) + 1

TEXTO(X23+X25)/2, Y23 - (1.5*%HTEX)NVD 1 CENTRADO -

'%NBX P1 { %BITX C/%ESPX C=%.0CMPX'

N CMPX= %CMPX - (2*%DOBRA)

TEXTO(X23+X25)/2, Y23 + (0.5*%HTEX) CENTRADO '%.0CMPX'

TEXTO23 @ -(0.5*%HTEX),%HTEX ANG 90 NVD 1'E%DOBRA'

TEXTO25 @ (1.5*%HTEX),%HTEX ANG 90 NVD 1'D%DOBRA'

$

$Projecao Y

$

30X2 + (1.5*%_ESCALA),Y10

3130 @ (1.2*%_ESCALA),0

32X31,Y11

33X30,Y32

POL3031323330


3431 @0,-%GRAVATA

3532 @0,%GRAVATA

36X34 + (%ALT2 - %ALT1),Y2

3736 @%ALT1,0

38X37,Y3

39X36,Y38

POL3637383936

POL363431

POL393532


4137 @-%RECOBR-(2*%RAIO), %RECOBR

4041 @-%DOBRA,0

4238 @-%RECOBR-(2*%RAIO), -%RECOBR

43X40,Y42

POL40414243


N DELTA= %RECOBR + (0.5 * %_ESCALA) + %DOBRA

4040 @%DELTA,0

4141 @%DELTA,0

4242 @%DELTA,0

4343 @%DELTA,0

POL40414243


N CMPY= %LARGURA - (2*%RECOBR) + (2*%DOBRA)

N NBY= FIX ((%COMPRIM -(2*%RECOBR))/ %ESPY) + 1

TEXTOX41 + (1.5*%HTEX), (Y41+Y42)/2 NVD 2 CENTRADO ANG 90 -

'%NBY P2 { %BITY C/%ESPY C=%.0CMPY'

N CMPY= %CMPY - (2*%DOBRA)

TEXTOX41 - (0.5*%HTEX), (Y41+Y42)/2 CENTRADO ANG 90 -

'%.0CMPY'

TEXTO40 @ 0,-1.5*%HTEX NVD 2 'E%DOBRA'

TEXTO43 @ 0,0.5*%HTEX NVD 2 'D%DOBRA'

$

$Titulo da sapata, escala, multiplicador

$

1004 @0,4*%_ESCALA

TEXTO100HTEX %HTEX1S NVD 222 -

'%TITULO'

SE( %MULTI > 1)

101100 @ (LEN ('%TITULO')+1)*%HTEX1, 0

TEXTO101 HTEX %HTEX2S NVD 202 '%MULTI'

TEXTO101 @2*%HTEX2,0 HTEX %HTEX2S 'x'

FIM

102100 @0,-1.5*%HTEX2

TEXTO102HTEX %HTEX2S'(Esc 1:%_ESCALA)'

$

$Cotagens - nivel 221 para nao interferir com a extracao de ferros

$

DEFINE COTNIV 221


COT VER 1 4 1 @-1.6 *%_ESCALA,0

COT VER 1 X1,Y51 @-0.8 *%_ESCALA,0

COT COM X1,Y84

COT HOR 434@0,1.6*%_ESCALA

COT HOR 4X8,Y4 4 @0,0.8*%_ESCALA

COT COM X7,Y4X3,Y4

COT HOR 191819 @0,0.8*%_ESCALA

COT VER 303330 @-0.8 *%_ESCALA,0

SE %ALT1 <> %ALT2

COT VER 14 15 14 @0.8 *%_ESCALA,0

FIM

COT VER 14X15,Y1714 @1.6 *%_ESCALA,0

COT HOR 202220 @0,0.8*%_ESCALA

COT HOR 172117 @0,0.8*%_ESCALA

103(X13+X14)/2,Y13

104103 @0,%RECOBR

COT VER 103 104103


$

$Ferros nas secoes transversais - chamamos o DP DISTFER

$

2313 @ %RECOBR ,%RECOBR + %RAIO

2514 @-%RECOBR ,%RECOBR + %RAIO

DP'DISTFER' (C 1=23 C 2=25 N NELEM = %NBY N RAIO = %RAIO)


4137 @-%RECOBR - %RAIO, %RECOBR

4238 @-%RECOBR - %RAIO, -%RECOBR

DP'DISTFER' (C 1=41 C 2=42 N NELEM = %NBX N RAIO = %RAIO)


FIM


Listagem do DISTFER.DPS


$

$DISTFER.DPSDesenho de ferros distribuidos entre 2 pontos

$

PARAMETROS

C 1$ Coordenadas do primeiro ponto

C 2$ Coordenadas do segundo ponto

N NELEM$ Numero de elementos inseridos

A ELEM = 'FERCOR'$ Nome do bloco unitario inserido

N RAIO$ Raio de desenho

FIM


LOCAIS

N DNO$ Distancia entre os nos

N VX$ Versores da reta

N VY$

N I$ contador

FIM


N DNODIST12$ dist 1-2

N VX(X2 - X1) / %DNO$ versor X da reta

N VY(Y2 - Y1) / %DNO$ versor Y da reta

11 @ %VX * %RAIO, %VY * %RAIO$ 1 no centro do elem

22 @-%VX * %RAIO, -%VY * %RAIO$ 2 no centro do elem

N VX (X2 - X1) / (%NELEM - 1)$ VX agora e' o incr

N VY(Y2 - Y1) / (%NELEM - 1)$ VY idem

REPETEI= %NELEM

INSERE'%ELEM'1ESC %RAIO

11 @%VX, %VY

FIM

FIM