Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

1
voti

Esercizio di impianti e Fortran 90/95

Indice

Abstract

Dimensionare una linea aerea trifase con Fortran 90/95.

Introduzione

Questo codice Fortran 90/95 permette di dimensionare una linea aerea, i cui conduttori sono disposti ai vertici di un triangolo equilatero di lato a, alimentata ad un estremo con tensione V e lungo la quale si trovano n carichi concentrati.

Un tipico esercizio di impianti in bassa e media tensione:

Dimensionare la linea aerea trifase di figura alimentata alla tensione di 20 kV a 50 Hz. La linea dovrà essere realizzata in corda di rame, con conduttori disposti a triangolo, a distanza a= 1 m e dovrà presentare una caduta di tensione massima non superiore a ΔVx%= 3%. Calcolare, inoltre, le perdite del sistema.

Dati:

  • V= 20 kV; f = 50 Hz; ΔVx%= 3%; L1= 5 km; L2= 2 km; L3= 5 km; a= 1 m;
  • P1= 600 kW; cosφ1= 0,7; P2= 300 kW; cosφ1= 0,8; P3= 400 kW; cosφ1= 0,75
Linea.jpg

Linea.jpg

Disposizione conduttori.jpg

Disposizione conduttori.jpg


Subito dopo aver letto l’articolo di RenzoDF, Simulazione reti in Scilab, dissi:

  • Pure io!

Con il commento di admin:

  • Credo proprio che bisogna insistere nel proporre articoli come questo, che mostrano come usare gli strumenti software per risolvere problemi elettrotecnici e, più in generale tecnici. Chi ha usato il regolo calcolatore, l'unico strumento di calcolo disponibile per lo studente di qualche decennio fa, non può che entusiasmarsi di questa possibilità, che permette di concentrarsi sull'impostazione corretta del problema delegando il lavoro lungo faticoso e frustrante dei calcoli ad una macchina sempre più potente.


Continuai:

  • Beh! Non ho altra scelta.


L’articolo di g.schgor, Il computer e la matematica, mi ha indirizzato verso il Fortran 90/95. Sulla scrivania avevo il testo dell’esercizio di impianti in bassa e media tensione...

Programmi sequenziali e programmi con strutture di controllo

Un codice, o programma, sequenziale legge i dati di input da tastiera o file, li elabora, fornisce i risultati finali, visualizzandoli sul monitor o riportandoli in un file, e termina la propria esecuzione. Non è possibile ripetere più volte nessuna sezione di codice o far eseguire sezioni particolari di codice in funzione dei dati di input. Altri codici presentano strutture di controllo: istruzioni di diramazione e istruzioni di loop. Queste istruzioni permettono di eseguire più volte una determinata sezione di codice o saltare totalmente gruppi di istruzioni al verificarsi di una certa condizione. Il codice da me scritto è sostanzialmente un codice di tipo sequenziale, molto semplice, anche se presenta istruzioni di loop. Ho visto dei codici Fortran con migliaia di righe di istruzioni, più di 100 pagine in formato A4…il mio è semplicemente ridicolo!

Input/Output

Il codice Fortran 90/95 dovrà essere salvato in una cartella che conterrà due file di input e un file di output.

File di input.

Nel file Tabella.txt è stata riportata parte della tabella Conduttori unificati di rame crudo:

  • Prima colonna: valori delle sezioni commerciali dei suddetti conduttori [mmq];
  • Seconda colonna: diametro del conduttore [mm];
  • Terza colonna: resistenza chilometrica del conduttore [ohm/km].
10 4.05 0.809
12.5 4.50 1.465
16 4.50 1.117
25 6.40 0.7199
35 7.55 0.5192
40 8.10 0.4522
50 9 0.3788
70 10.70 0.2678
80 11.50 0.2319
100 13.00 0.1814
125 14.70 0.1435

Il file Input.txt conterrà i dati del problema, riportati in questo ordine:

  • Prima riga: numero di carichi concentrati, tensione di alimentazione in [kV], c.d.t. max in percentuale, resistività del rame in [ohm*mmq/metro] e il lato del triangolo equilatero in [m];
  • Seconda riga: Lunghezza del primo tratto in [m], Potenza attiva del primo carico concentrato in [kW] e fattore di potenza del carico;
  • Terza riga: Lunghezza del secondo tratto in [m], Potenza attiva del secondo carico concentrato in [kW] e fattore di potenza del carico;
  • Quarta riga:---------------------------------------------------------
  • n+1-esima riga: Lunghezza n-esimo tratto in [m], Potenza attiva n-esimo carico concentrato in [kW] e fattore di potenza del carico.
3 20 3 0.0178 1
5 600 0.7
2 300 0.8
5 400 0.75

File di output.

Nel file Output.txt il programma riporterà i risultati finali della elaborazione:

  • Sezione commerciale [mmq];
  • Resistenza chilometrica [ohm/km];
  • Perdite totali sulla linea dPt [W].
Sezione commerciale = 25.  [mmq]
Resistenza chilometrica r = .7199  [ohm/km]
Perdite totali sulla linea dPt =  33473.61  [W]

Ovviamente, modificando in modo insignificante il codice, sarà possibile visualizzare anche i diversi risultati parziali.

Il codice

!****************************************************
!*                                                                                        *
!* Programmatore: EdmondDantes                                           *
!*                                                                                        *
!* Copyright: Nessuno                                                             *
!*                                                                                        *
!* Data: 22 agosto 2009                                                         *
!*                                                                                        *
!****************************************************
!* Descrizione:                                                                        *
!*                                                                                        * 
!* Questo codice Fortran 90/95 calcola la sezione di una               *
!* linea aerea trifase  alimentata ad un estremo con tensione        * 
!* nota, realizzata in corda di rame, essendo nota la massima         *
!* caduta di tensione.                                                             *
!* Per ipotesi, i conduttori sono disposti ai vertici di un triangolo     *
!* equilatero di lato a.                                                              * 
!* Calcola, inoltre, le perdite del sistema.                                     *
!***************************************************** 

PROGRAM Linea_aerea

! Dizionario dei simboli usati nel codice seguente:

! I_f(i) : Componente in fase delle correnti assorbite;
! I_q(i) : Componente in quadratura delle correnti assorbite;

IMPLICIT NONE
REAL*8         :: pi, mu, V, dV, ro, a, L(15), P(15), fdp(15), &
                       I_f(15), I_q(15), tgfi(15), F, Q, Lt(15), &
                       S_min, Tab(20,3), r, d, xl, Mf(15), Mq(15), &              
                      Itf(15), Itq(15), It(15), dP(15), dPt, dVt, b, c
INTEGER*4       :: k, n, j
REAL*8, PARAMETER   :: x=0.4, fr=50

OPEN(UNIT=1,FILE='Input.txt',STATUS='OLD',ACTION='READ')
OPEN(UNIT=2,FILE='Output.txt',STATUS='REPLACE',ACTION='WRITE')
OPEN(UNIT=3,FILE='Tabella.txt',STATUS='OLD',ACTION='READ', &
         FORM='FORMATTED' )

! Definisco il valore del pi_greco e della 
! permeabilità magnetica dell'aria

pi=4*ATAN(1.)
mu=4*pi*0.0001

! Leggo il numero di carichi concentrati, la tensione di
! alimentazione in kV, la c.d.t.% max, la resistività ro 
! del rame e il lato l del triangolo 


READ(1,*) n, V, dV, ro, a


! Leggo: vettore lunghezze tratte, vettore potenze assorbite, vettore fdp 

DO k=1,n

    READ(1,*) L(k), P(k), fdp(k)

END DO
 
! Calcolo le componenti in fase e in quadratura delle correnti:

DO k=1,n

    I_f(k)=P(k)/(SQRT(3.)*V)
    tgfi(k)=TAN(ACOS(fdp(k)))
    I_q(k)=I_f(k)*tgfi(k)

END DO


! Calcolo la massima caduta di tensione 

dV=(dV*V*10**3.)/100


! Procediamo con calcoli i diversi calcoli intermedi

c=0
F=0
Q=0

DO k=1,n

    Lt(k)=c+L(k)
    c=Lt(k)
    F=F+I_f(k)*Lt(k)*1000
    Q=Q+I_q(k)*Lt(k)

END DO

F=SQRT(3.)*ro*F
Q=SQRT(3.)*x*Q 


! Calcolo la minima sezione ammissibile:

S_min=F/(dv-Q)


! Leggo la tabella dei conduttori unificati in corda di rame crudo

DO k=1,11
	
    READ(3,*) (Tab(k,j), j=1,3)

END DO



! Leggo la sezione commerciale immediatamente superiore alla S_min

k=1
j=k+1
b=S_min

IF (S_min<10.) THEN

    S_min=Tab(1,1)
    r=Tab(1,3)
    d=Tab(2,2)

ELSE



    DO
	
        IF((b>Tab(k,1)).AND.(b<Tab(j,1))) EXIT

            k=k+1
            j=j+1            			

    END DO 

! Leggo la resistenza chilometrica e il diametro del conduttore scelto

    S_min=Tab(j,1)
    r=Tab(j,3)
    d=Tab(j,2)

END IF

! Calcolo la reattanza chilometrica effettiva del sistema

xl=(fr*mu)*(LOG((a**(1./3))/((0.78*d*0.001)/2)))	


! Calcolo la caduta di tensione totale sulla linea
    
	! Momenti amperometrici
b=0
c=0

DO k=1,n

    Mf(k)=I_f(k)*Lt(k)
    Mq(k)=I_q(k)*Lt(k)

    b=b+Mf(k)
    c=c+Mq(k)

END DO

dVt=SQRT(3.)*(r*b+xl*c)

! Correnti totali nelle diverse tratte

b=0
c=0

DO k=n,1,-1

    Itf(k)=b+I_f(k)
    Itq(k)=c+I_q(k)
    b=Itf(k)
    c=Itq(k)
    It(k)=SQRT((Itf(k))**2+(Itq(k))**2)

END DO

! Perdite nelle diverse tratte

c=0

DO k=1,n

    dP(k)=3*r*L(k)*(It(k))**2
    dPt=c+dP(k)
    c=dPt

END DO

WRITE(2,100) S_min, r, dPt
100 FORMAT(1X,'Sezione commerciale =',F4.0,2X,'[mmq]',/, & 
                   'Resistenza chilometrica r =',F6.4,2X,'[ohm/km]',/, &
                    'Perdite totali sulla linea dPt =',F10.2,2X,'[W]')

CLOSE(1)
CLOSE(2)
CLOSE(3)

STOP
END PROGRAM Linea_aerea

Conclusioni

Il codice è molto semplice, utile per controllare i risultati di un esercizio svolto manualmente sotto le stesse ipotesi. E’ stato provato con due diversi set di dati, ottenendo in entrambi i casi risultati corretti.

Se avrò tempo cercherò di migliorare il codice, permettendo all'utente di sceglire la tipologia di sistema: linea alimentata ad un estremo con carichi concentrati lungo il percorso, linea alimentata ad un estremo con carichi distribuiti, linea alimentata ai due estremi con tensioni uguali o differenti, linea monofase o trifase e così via. Sono tutti esempi tipici del corso impianti elettrici in bassa e media tensione. Un codice così pensato richiederà molte righe di istruzioni: non è pensabile scriverlo come unico programma principale. E' buona norma inserire delle subroutine che eseguano blocchi di operazioni presenti in più parti del codice e a cui si accede mediante una CALL.

Spero che il mio contributo possa essere utile a qualcuno.

1

Commenti e note

Inserisci un commento

di ,

Ringrazio Ep per aver creato i link agli articoli da me citati. Non sono riuscito a crearli.... Dove avete trovato quel pdf sul Fortran 90/95 ?!! Non mi dite che possedete un motore di ricerca personale? Lo voglio pure io...

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.