; FUNICUL.LOG
; ===========
; Control d'un Funicular
; Autor : Feliu MUNIENTE (IES
Icària. Barcelona)
; Data : Febrer ' 2000
; Font : Courier-13
;
;----------------------------------------------------
proc funicular :temps_espera
:so_limit :lux_limit
;----------------------------------------------------
; Procediment Principal
; =====================
; Paràmetres
; ----------
; temps_espera : Temps (seg) espera
per a iniciar
; (5")
el moviment, durant el qual la
;
cèl.lula fotoèlectrica (luxòmetre)
;
no ha de detectar pas de persones
; so_limit
: Pel demunt d'aquest valor es
; (60 dB)
considera que s'ha donat una ordre
;
d'inici de moviment
; lux_limit : Pe
sota del qual es considera
; (700 Lx)
que hi ha una persona entrant al
;
funicular (es reiniciarà el
;
temporitzador de seguretat de
;
temps d'espera abans d'iniciar
;
el proper moviment
;
; (xx) Valors aconsellats
;----------------------------------------------------
; Inicialitzacions i Definició
de Variables
; -----------------------------------------
posa.a "m_lux "A
posa.a "m_so "B
posa.a "m_temp "C
posa.a "m_rele "D
posa.a "m_ed "E
posa.a "m_sd "F
posa.a "m_mot "G
posa.a "e_ae "1
; Aturada Emergència
posa.a "e_an "2
; Aturada Normal
posa.a "e_fce "3
; Final de Cursa Esquerra
posa.a "e_fcd "4
; Final de Cursa Dreta
posa.a "e_ie "5
; Inici Baixa Esquerra
posa.a "e_id "6
; Inici Baixa Dreta
posa.a "e_auto "7
; Funcionament Automàtic (1)
;
Manual (0)
posa.a "s_le "1
; Led Esquerra
posa.a "s_lw "2
; Led Espera (Wait)
posa.a "s_lr "3
; Led Error
posa.a "s_ld "4
; Led Dreta
posa.a "s_bru "5
; Brunzidor
posa.a "s_int "8
; Intermitent
posa.a "r_cel "1
; Relè Cèl·lula Fotoelèctrica
p ; Reset Sortides
posa.a "temps_inicial
temps
posa.a "etapa
"0 ; Etapa de GRAFCET
posa.a "error_a_confirmar "0
si (:temps_espera<5) [posa.a "temps_espera
"5]
; Valors Límits (so : Palmada
Inici) (lux : detector persones)
; ------------- (temp : tèrmic
motor)
;posa.a "so_limit
"80
;posa.a "lux_limit
"200
posa.a "temp_limit
((termòmetre.llegit :m_temp) +2)
; Control d'Etapes
; ----------------
mentre [no :etapa = 5] [grafcet]
; Final
; -----
p
escriu [---FI---]
fi
;----------------------------------------------------
proc grafcet
;----------------------------------------------------
; Procediment de Control d'Etapes
del GRAFCET
;----------------------------------------------------
si (:etapa = "0) [etapa_0]
si (:etapa = "1) [etapa_1]
si (:etapa = "2) [etapa_2]
si (:etapa = "3) [etapa_3]
si (:etapa = "4) [etapa_4]
fi
;----------------------------------------------------
proc etapa_0
;----------------------------------------------------
; Etapa 0 : Inicial, Espera Arranc
;----------------------------------------------------
mentre [:etapa = 0] [etapa_0_accions]
desactiva.sortida :m_sd :s_lr
; Led Error
desactiva.sortida :m_sd :s_bru
; Brunzidor
fi
;----------------------------------------------------
proc etapa_0_accions
;----------------------------------------------------
escriu.seguit [E_0 (Inicial)]
; Verifica Alarmes
; ----------------
actualitza_intermitent
control_alarmes
si (vt(:error = 0)(no :error_a_confirmar
= 0)) [(escriu.seguit [ - Falta Confirmar Error -])(posa.a "led_error :intermitent)][posa.a
"led_error "1]
; Accions de l'etapa
; ------------------
si (:led_error = 1) [(activa.sortida
:m_sd :s_lr)(activa.sortida :m_sd :s_bru)][(desactiva.sortida :m_sd :s_lr)(desactiva.sortida
:m_sd :s_bru)]
; Confirmació d'alarmes
; ----------------------
si (vt (:error = 0) (sonòmetre.llegit
:m_so > :so_limit)) [posa.a "error_a_confirmar "0]
; Condicions de sortida d'etapa
; -----------------------------
si (vt (:error_a_confirmar = 0) (estat.entrada?
:m_ed :e_ie) (estat.entrada? :m_ed :e_fcd) (estat.entrada? :m_ed :e_fce))
[posa.a "etapa "1]
si (vt (:error_a_confirmar = 0) (estat.entrada?
:m_ed :e_id) (estat.entrada? :m_ed :e_fcd) (estat.entrada? :m_ed :e_fce))
[posa.a "etapa "3]
si (vt (:error_a_confirmar = 0) (estat.entrada?
:m_ed :e_fce) (no estat.entrada? :m_ed :e_fcd)) [posa.a "etapa "4]
si (vt (:error_a_confirmar = 0) (estat.entrada?
:m_ed :e_fcd) (no estat.entrada? :m_ed :e_fce)) [posa.a "etapa "2]
si (vt (estat.entrada? :m_ed :e_fcd)(estat.entrada?
:m_ed :e_fce)(no estat.entrada? :m_ed :e_ie)(no estat.entrada? :m_ed :e_id))
[escriu.seguit [-Falta Sentit Inici-]]
escriu []
fi
;----------------------------------------------------
proc etapa_1
;----------------------------------------------------
; Etapa 1 : Baixa Vagó Esquerra
;----------------------------------------------------
mentre [:etapa = 1] [etapa_1_accions]
atura.motor :m_mot 1
; Vagó a baix
desactiva.sortida :m_sd :s_le
; Led Esquerra
fi
;----------------------------------------------------
proc etapa_1_accions
;----------------------------------------------------
escriu.seguit [E_1 (Baixa Esquerra)]
; Accions de l'etapa
; ------------------
activa.sortida :m_sd :s_le
; Led Esquerra
esquerra.motor :m_mot 1
; Vaixa Vagó Esquerra
; Verifica condicions de sortida d'etapa
; --------------------------------------
si (no estat.entrada? :m_ed :e_fce)
[posa.a "etapa "2]
control_alarmes
escriu []
fi
;----------------------------------------------------
proc etapa_3
;----------------------------------------------------
; Etapa 3 : Baixa Vagó Dreta
;----------------------------------------------------
mentre [:etapa = 3] [etapa_3_accions]
atura.motor :m_mot 1
; Vagó a baix
desactiva.sortida :m_sd :s_ld
; Led Dreta
fi
;----------------------------------------------------
proc etapa_3_accions
;----------------------------------------------------
escriu.seguit [E_3 (Baixa Dreta)]
; Accions de l'etapa
; ------------------
activa.sortida :m_sd :s_ld
; Led Dreta
dreta.motor :m_mot 1
; Vaixa Vagó Dreta
; Verifica condicions de sortida d'etapa
; --------------------------------------
si (no estat.entrada? :m_ed :e_fcd)
[posa.a "etapa "4]
control_alarmes
escriu []
fi
;----------------------------------------------------
proc etapa_2
;----------------------------------------------------
; Etapa 2 : Espera a començar
baixada dreta
;----------------------------------------------------
posa.a "inici_espera temps
etapa_2_4 "3
fi
;----------------------------------------------------
proc etapa_4
;----------------------------------------------------
; Etapa 4 : Espera a començar
baixada dreta
;----------------------------------------------------
posa.a "inici_espera temps
etapa_2_4 "1
fi
;----------------------------------------------------
proc etapa_2_4 :etapa_següent
;----------------------------------------------------
; Etapes 2 i 4 : Aturat, esperant
Inici de Moviment
;----------------------------------------------------
activa.sortida :m_rele :r_cel
; Bombeta Cèl.
mentre [(va (:etapa = 2) (:etapa =
4))] [etapa_2_4_accions :etapa_següent]
activa.sortida :m_sd
:s_bru ; Brunzidor
desactiva.sortida :m_sd
:s_lw ; Led Espera
desactiva.sortida :m_rele :r_cel
; Bombeta Cèl.
desactiva.sortida :m_sd
:s_bru ; Brunzidor
fi
;----------------------------------------------------
proc etapa_2_4_accions :etapa_següent
;----------------------------------------------------
escriu.seguit [E_2_4 (Esperant Inici
Moviment)]
(escriu.seguit [ (] ((temps - :inici_espera)/100)
[/] (:temps_espera) [) ])
; Accions de l'etapa
; ------------------
actualitza_intermitent
si ((temps - :inici_espera)/100 >
:temps_espera) [posa.a "led_espera :intermitent][posa.a "led_espera "1]
si (:led_espera=1) [(activa.sortida
:m_sd :s_lw)(desactiva.sortida :m_sd :s_bru)][(desactiva.sortida :m_sd
:s_lw)(activa.sortida :m_sd :s_bru)]
si (luxòmetre.llegit :m_lux
< :lux_limit) [posa.a "inici_espera temps]
; Verifica condicions de sortida d'etapa
; --------------------------------------
si (vt(estat.entrada? :m_ed :e_auto)
((temps - :inici_espera)/100 > :temps_espera)) [posa.a "etapa :etapa_següent]
si (vt(no estat.entrada? :m_ed :e_auto)
(sonòmetre.llegit :m_so > :so_limit) ((temps - :inici_espera)/100
> :temps_espera)) [posa.a "etapa :etapa_següent]
si (estat.entrada? :m_ed :e_an)
[posa.a "etapa "5]
control_alarmes
escriu []
fi
;----------------------------------------------------
proc control_alarmes
;----------------------------------------------------
; Control d'Alarmes de funcionament
;
Posa Etapa = 0
;
Posa Error = Nº d'error
;----------------------------------------------------
posa.a "error "0
; Emergència
; ----------
si (no estat.entrada? :m_ed :e_ae)
[(posa.a "error "1)(escriu.seguit [-Emergència-])]
; Ambivalència
; ------------
si (vt (no estat.entrada? :m_ed :e_fce)
(no estat.entrada? :m_ed :e_fcd)) [(posa.a "error :error+2)(escriu.seguit
[-Ambivalència FdC-])]
; Tèrmic de Motor
; ---------------
si (termòmetre.llegit :m_temp
> :temp_limit) [(posa.a "error :error+4) (escriu.seguit [-Tèrmic-])]
; Tractament final d'errors
; -------------------------
(escriu.seguit [ (] ((temps-:temps_inicial)/100)
[)])
si (no :error=0)[(posa.a "etapa "0)
(posa.a "error_a_confirmar :error)]
fi
;----------------------------------------------------
proc actualitza_intermitent
;----------------------------------------------------
; Posa la variable :intermitent a
; 0 Si les Centèssimes
del temps < 50
; 1 Si les Centèssimes
del temps > 50
;----------------------------------------------------
posa.a "ara temps
posa.a "centessimes (:ara - ((part.entera
(:ara/100))*100)
si (:centessimes > 50) [posa.a "intermitent
"1] [posa.a "intermitent "0]
;(escriu :ara :centessimes :intermitent)
;sortida :m_sd :s_int :intermitent
(NO FUNCIONA!!!)
;si (:intermitent=1) [activa.sortida
:m_sd :s_int][desactiva.sortida :m_sd :s_int]
fi
;----------------------------------------------------
proc Prova_so
;----------------------------------------------------
; Proves de nivell de so
;----------------------------------------------------
posa.a "m_so
"b
posa.a "so_maxim "0
posa.a "so_actual "0
posa.a "tecla
"
mentre [vt (no :tecla = "A) (no :tecla
= "a)] [prova_so_accions]
escriu []
escriu [--FI--]
fi
;----------------------------------------------------
proc prova_so_accions
;----------------------------------------------------
posa.a "so_actual sonòmetre.llegit
:m_so
si (:so_actual > :so_maxim) [posa.a
"so_maxim :so_actual]
escriu.seguit [(A)Atura (R)Reset /
Act__Màx : ]
escriu.seguit sonòmetre.llegit
:m_so
escriu.seguit [__]
escriu
:so_maxim
si (tecleig) [posa.a "tecla caràcter.llegit]
[posa.a "tecla "]
si (va (:tecla = "R) (:tecla = "r))
[posa.a "so_maxim "0]
fi |