Está en la página 1de 3

24/11/2015

PROGRAMA EN CIMBASIC PARA LA SIMULACIÓN DEL CONTROL DE


PROCESO DE CALENTAMIENTO DE UNA CORRIENTE EN UN TANQUE

Este es un ejemplo de la simulación de procesos usando CimBasic dentro de Cimplicity. CimBasic es una
variante de Microsoft Visual Basic adaptado a la operación con Cimplicity, por tanto quien tenga conocimiento
de Visual Basic rápidamente podrá aprender la programación en CimBasic.

Antes de la programación se requiere desarrollar el análisis dinámico y el cálculo del controlador PID requerido
usando el método Ziegler-Nichols.

El proceso tomado como ejemplo corresponde un tanque al cual ingresa una corriente de líquido y sale otra por
rebose, el contenido del tanque es calentado por medio de un serpentín de vapor para conseguir una temperatura
determinada en la corriente de salida. El análisis dinámico es como sigue:

dM
Balance de Materia: Win  Wout  0 Win  Wout  W
dt

d
Balance de Energía: W  Cp  Ti  L  V  W  Cp  T   M  Cp  T 
dt

Resolviendo:

d
W0  Cp  Ti  W  Cp  Ti 0  L  V  W0  Cp  T  W  Cp  T0  M  Cp T
dt
d
W0  Cp  Ti  Ti 0  T0   Cp  W  L  V  W0  Cp  T  M  Cp T
dt
W0  Cp  Ti  s   Ti 0  T0   Cp  W  s   L  V  s   W0  Cp  T  s   M  Cp  s  T  s 
 M  Cp 
W0  Cp  Ti  s   Ti 0  T0   Cp  W  s   L  V  s   W0  Cp  T  s    s  1
 W0  Cp 
 1   Ti 0  T0  L  M
T s     Ti  s      W s   V  s   donde  
 s 1  W0  W0 Cp  W0

El Diagrama de Bloques del Control PID es:

Ti 0  T0
W(s) W0
Ti(s)

+ +
Kv L 1
TSet(s)
-
Gc vs 1 W0 Cp +
 s 1 T(s)

K m e d s
Consideremos el uso de transmisores y controlador con salidas de 4-20 mA, medición de 0-200ºC, válvula
operando de 0-50 kg/min para 0-100% de abertura. Los datos del procesos son: W0=500 kg/min, M=1,000 kg,
L=540 kcal/kg, Cp=1 kcal/kg.ºC; entonces:

- E:\Files\FIQT\PI426\Simulación en CimBasic.docx - Página 1 de 3 -


24/11/2015
kg
0  50
4  20mA mA min  3.125 kg / min M 1000kg
Km   0.08 Kv     2 min
0  200º C ºC 4  20mA mA W0 kg
500
min
kcal
540
L kg kg / min Ti  T0 40  80º C ºC
  1.08   0.08
W0 Cp kg kcal ºC W0 kg kg / min
500 1 500
min kg º C min

Aplicando el método Ziegler-Nichols, el enunciado del trabajo requiere que V=2 sec =2/60min; m=1 sec:

   1 
  0.08e 
3.125
 1.08  
0.01666 s
FTLA  
 0.03333s  1   2s  1 
180
  arctan  0.03333   arctan  2   0.01666  180º

3.125 1
AR   1.08   0.08
1  0.03333  2 2
1  22  2

Se obtiene  = 39.6436 rad/min y AR = 0.00268, entonces Pu = 0.1585 min y Ku = 373.12, por tanto Kc =
223.87 I=0.079 min y D=0.0198 min.

Para la simulación en CimBasic sólo se necesita el modelo en el dominio del tiempo, así sólo arreglamos la
ecuación diferencial y la expresamos en diferencias finitas:

 W  Ti  T   L  V  / M
dT
dT 
dt
dT
T  t  Tprevio
dt

Con esto se desarrolla la programación:

Sub Main()
' Control de Temperatura.

' Declaración de Variables en CimBasic


Dim W As New Point 'Flujo entrando al tanque
Dim Ti As New Point 'Temperatura de entrada
Dim Ts As New Point 'Temperatura de salida
Dim V As New Point 'Flujo de Vapor
Dim Tset As New Point 'Setpoint de la temperatura de salida
Dim Kc As New Point 'Kc del controlador
Dim TauI As New Point 'Tau I del controlador
Dim TauD As New Point 'Tau D del controlador
Dim Ab As New Point 'Abertura de Válvula
' Asignación de Variables en CimView
Set W.ID = "Flujo"
Set Ti.ID = "TempInic"
Set Ts.ID = "TempSalida"
Set V.ID = "FlujoVapor"
Set Tset.ID = "Tset"
- E:\Files\FIQT\PI426\Simulación en CimBasic.docx - Página 2 de 3 -
24/11/2015
Set Kc.ID = "Kc"
Set TauI.ID = "TauI"
Set TauD.ID = "TauD"
Set Ab.ID = "Abertura"
' Declaración de variables sólo para CimBasic
Dim t As Long, t0 As Long, dt As Long
' Inicialización de Datos y Variables
Randomize 'Reinicia la generación de valores aleatorios.
t0 = Timer 'Asignación del tiempo.
M = 1000: L = 540: Cp = 1 'M=kg/min; L=kcal/kg; Cp=kcal/kg.ºC
dt = 0 : Ep = 0 : P = 50 'dt: Delta de tiempo en sec, Ep: Error previo, P=abertura de válvula
Vmax=50. : Factor = Vmax/100. : R=2 'Vmax: Flujo de vapor máximo, R: Ruido de medición.
W0=500. : K=3.125*1.08 'W0: Flujo Inicial, K: constante de conversión.
IE=0 'IE: Integral del Error.
' Lazo repetitivo para el cálculo de valores.
Do While True
t = Timer - t0 'La variable tiempo.
'Las dos líneas que siguen son el modelo de proceso en el tiempo.
dTs = (L*V.Getvalue - W.Getvalue*(Ts.Getvalue - Ti.Getvalue))/M 'La derivada de T
Ts.Setvalue = Ts.Getvalue + dTs*dt/60. 'dt va en sec y dTs en min.
'A continuación viene la simulación del controlador
E = TSet.Getvalue - Ts.Getvalue 'El Error en ºC
If P<100. Then IE = IE + E*dt 'Acumula la integral si la válvula abre entre 0 y 100%.
If dt <> 0 Then dE = (E - Ep)/dt Else dE = 0. 'Calcula la derivada de E sólo si dt<>0
If TauI.Getvalue <> 0 Then C = Kc.Getvalue*(E + IE/TauI.Getvalue + dE*TauD.GetValue) 'Para P-I-D.
If TauI.Getvalue = 0 Then C = Kc.Getvalue*(E + dE*TauD.GetValue) 'Sólo P-D
P=K*C 'C: Salida del controlador, K: Cte de conversión.
If P > 100. Then P = 100. 'La válvula no abre más de 100%
If P < 0. Then P = 0. 'La válvula no cierra menos de 0%
Ab.Setvalue = P
Vap = Factor * P 'Flujo de Vapor, Factor = (Vmax/100)
If Vap > Vmax Then Vap = Vmax
If Vap < 0. Then Vap = 0.
V.Setvalue = Vap
Sleep 500 'Suspende el cálculo 0.5 sec para que otros programas hagan sus tareas.
dt = Timer - t0 - t
Ep = E
'Lo que sigue es opcional, para dar sensación de un medidor real con oscilaciones.
Wp = W.Getvalue + 0.0*(Rnd - 0.5): If Wp > 2*W0 Then Wp = 2*W0
If Wp < 0. Then Wp = 0.
W.Setvalue = Wp
Tip = Ti.Getvalue + 0.00*(Rnd - 0.5): If Tip > 99. Then Tip = 99.
If Tip < 0. Then Tip = 0.
Ti.Setvalue = Tip

Loop

End Sub

- E:\Files\FIQT\PI426\Simulación en CimBasic.docx - Página 3 de 3 -

También podría gustarte