• No se han encontrado resultados

Pin 49 Fuente de +5 voltios ( 1A, 4.65 V 5.25V).

1.4. CODIGO Y ESTRUCTURA DEL SOFTWARE DEL LACTE

1.4.2. Estructura de la aplicación

1.4.2.2. Formulario “Cálculo”

Esta formulario permite realizar el test evaluativo a los usuarios del LACTE, constituye simplemente una ventana que arroja preguntas previamente almacenadas en una base de datos y captura la respuesta del usuario comparándola con un cálculo propio determinando la validez o falsedad de la pregunta.

Al cargarse este formulario se realiza el cálculo de todas los posibles interrogantes planteadas en la práctica y se almacenan en un a matriz de soluciones que luego se emplea para comparar con los resultados propuestos por los usuarios del LACTE. Los resultados son comparados bajo un margen de error del 10%.

El manejo de este formulario se facilita con el uso de un panel de control ubicado en la parte inferior que permite desplazarse entre las preguntas, omitir el test, omitir la pregunta actual, consultar la información teórica y el acceso a la ayuda.

Figura Nº 1-38 El código asociado a esta ventana es:

Dim Vector_Sln() As Variant 'Vector de soluciones

Dim Limite As Single 'Limite de las filas asignadas al vector de soluciones Dim IndicaSalida As Integer

Dim ErrorEstimado As Single

Dim ir As Integer 'Variable usada para llevar el registro del vector de soluciones

Dim MaxPreg As Integer Dim i As Integer

Dim PA As Integer Dim PF As Integer Dim Ya As Integer

Dim TiempIinicial As String Dim TiempFinal As String

Public Function Derror(Vteo As Single, Vprac As Single) 'Función que determina si el error asumido es aceptable.

On Error Resume Next

Derror = Abs(Vprac - Vteo) / Vteo End Function

Private Sub Form_Activate()

'Se definen los parámetros de los controles data Data1.DatabaseName = App.Path & "\tabla.skf" Data2.DatabaseName = App.Path & "\tabla.skf" Data3.DatabaseName = App.Path & "\tabla.skf" Data4.DatabaseName = App.Path & "\bas.skf" Data1.RecordSource = "Tabla"

Data2.RecordSource = "Merror"

'Se cargan las preguntas del tema consultado

Data3.RecordSource = "Select * from Examen where Tema = '" & Var_Paso & "'" Data4.RecordSource = "QuizUsuario" Data1.Refresh Data2.Refresh Data3.Refresh Data4.Refresh ' ErrorEstimado = Data2.Recordset.Fields("error") / 100

'Se determina el máxímo número de registros del data Data3.Recordset.MoveLast

MaxPreg = Data3.Recordset.AbsolutePosition + 1 Data3.Recordset.MoveFirst

'Parámetros de Configuración de la barra de progreso ProgressBar1.Max = MaxPreg

ProgressBar1.Min = 0

ProgressBar1.Value = Data3.Recordset.AbsolutePosition + 1

Label7.Caption = Data3.Recordset.AbsolutePosition + 1 & " de " & MaxPreg End Sub

Private Sub Form_Load() i = 1

Ya = 0

Select Case Var_Paso Case 1

Me.Caption = "Efectos Resistivos En Los Transformadores" ExperimentoNo1

Case 2

Me.Caption = "Estudio De Pérdidas En El Núcleo De Los Transformadores" ExperimentoNo2

Case 3

Me.Caption = "Desarrollo Del Modelo Equivalente Del Transformador" ExperimentoNo3

Case 4

ExperimentoNo4 Case 5

Me.Caption = "Tranformador Trifásico En Conexión Estrella y Delta Bajo Carga"

ExperimentoNo5 Case 6

Me.Caption = "Comportamiento Del Tranformador Trifásico En Conexión Yz5"

ExperimentoNo6 Case 7

Me.Caption = "Comportamiento Del Tranformador Trifásico En Conexión: D-YY y Y-YY"

ExperimentoNo7 Case 8

Me.Caption = "Transformadores Monofásicos en Paralelo con Carga Resisitiva" ExperimentoNo8 End Select IndicaSalida = 1 TiempIinicial = Time End Sub

Private Sub Redim_Vector_Sln() Erase Vector_Sln

ReDim Vector_Sln(1, Limite) End Sub

Private Sub ExperimentoNo1() Dim Ip As Single

'Limpiar controles Limite = 2

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones ' CALCULOS Ip = Sn / VoltajePrim Vector_Sln(0, 0) = Rp * (Ip ^ 2) Vector_Sln(0, 1) = VoltajePrim * Ip Vector_Sln(0, 2) = VoltajePrim / Ip End Sub

Private Sub ExperimentoNo2() Dim Ip As Single

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones ' CALCULOS Ip = Sn / VoltajePrim Vector_Sln(0, 0) = Rp * (Ip ^ 2) Vector_Sln(0, 1) = VoltajePrim * Ip

Vector_Sln(0, 2) = Vector_Sln(0, 1) - Vector_Sln(0, 0) End Sub

Private Sub ExperimentoNo3() Dim Ip As Single

Limite = 17

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones

SelecCarga

' Se leen parámetros necesario desde la tabla.skf

' CALCULOS On Error GoTo salvador:

If CorrienteSec = 0 Then 'Zs

MsgBox "Como la carga es cero (0) la corriente en el secundario es cero (0), por tanto la Zs es infinita.", vbOKOnly, "Atención"

Vector_Sln(0, 0) = 0 Else

Vector_Sln(0, 0) = VoltajeSec / CorrienteSec End If

Vector_Sln(0, 1) = VoltajePrim / VoltajeSec 'a Ip = CorrienteSec / Vector_Sln(0, 1)

Vector_Sln(0, 2) = Rs + Carga 'Rts

Vector_Sln(0, 3) = Sqr(Vector_Sln(0, 0) ^ 2 + Vector_Sln(0, 2) ^ 2) 'Xs Vector_Sln(0, 4) = Ip 'Ip

Vector_Sln(0, 5) = VoltajePrim / Ip 'Zt

Vector_Sln(0, 6) = Cos(Atn(Vector_Sln(0, 3) / Vector_Sln(0, 2))) 'Factor de Potencia

Vector_Sln(0, 7) = Vector_Sln(0, 1) ^ 2 * Rs 'a^2Rs Vector_Sln(0, 8) = Vector_Sln(0, 1) ^ 2 * Vector_Sln(0, 3) 'a^2Xs

Vector_Sln(0, 9) = Vector_Sln(0, 1) ^ 2 * Sqr(Rs ^ 2 + Vector_Sln(0, 3) ^ 2) 'Ztsp Vector_Sln(0, 10) = Vector_Sln(0, 5) + Vector_Sln(0, 9) 'ZP

Vector_Sln(0, 11) = Sqr(Vector_Sln(0, 10) ^ 2 - Rp ^ 2) 'Xp Vector_Sln(0, 12) = Rp * Iexc ^ 2 'PCu0 Vector_Sln(0, 13) = VPrim * Iexc 'P0 Vector_Sln(0, 14) = VPrim / Iexc 'Zm Pnu = Vector_Sln(0, 13) - Vector_Sln(0, 12)

Vector_Sln(0, 15) = 1 / Vector_Sln(0, 14) 'Ym Vector_Sln(0, 16) = Pnu / (VPrim ^ 2) 'Gc

Vector_Sln(0, 17) = Sqr(Vector_Sln(0, 15) ^ 2 - Vector_Sln(0, 16) ^ 2) 'Bm

Exit Sub salvador:

MsgBox "Uno de los parámetros introducidos a generado una raiz negativa o una división por cero. Por favor revise sus datos.", vbOKOnly, "Atención !!" End

End Sub

Private Sub ExperimentoNo4() Limite = 14

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones

SelecCarga

'Cálculos

On Error GoTo salvador:

Vector_Sln(0, 0) = VoltajePrim / VoltajeSec 'a Vector_Sln(0, 1) = Rs + Carga 'Rts Vector_Sln(0, 2) = VoltajeSec / CorrienteSec 'Zs

Vector_Sln(0, 3) = Sqr(Vector_Sln(0, 2) ^ 2 + Vector_Sln(0, 1) ^ 2) 'Xs Vector_Sln(0, 4) = Sqr(VoltajeSec ^ 2 + (CorrienteSec * Vector_Sln(0, 3)) ^ 2) 'Es

Vector_Sln(0, 5) = CorrienteSec / Vector_Sln(0, 0) 'Ip Vector_Sln(0, 6) = Vector_Sln(0, 4) * Rp 'Vcup Vector_Sln(0, 7) = VoltajePrim / Vector_Sln(0, 4) 'Zp

Vector_Sln(0, 8) = Sqr(Vector_Sln(0, 6) ^ 2 - (Rp + Vector_Sln(0, 0) ^ 2 * Vector_Sln(0, 1)) ^ 2) 'Xp

Vector_Sln(0, 9) = Vector_Sln(0, 4) * Vector_Sln(0, 7) 'Vxp Vector_Sln(0, 10) = Vector_Sln(0, 0) ^ 2 * Vector_Sln(0, 1) 'a^2Rts Vector_Sln(0, 11) = Vector_Sln(0, 0) ^ 2 * Vector_Sln(0, 3) 'Xsp Vector_Sln(0, 12) = Sqr(Vector_Sln(0, 5) ^ 2 + Vector_Sln(0, 8) ^ 2) 'Vzp Vector_Sln(0, 13) = VoltajePrim + Vector_Sln(0, 11) 'Ep Vector_Sln(0, 14) = ((Vector_Sln(0, 12) - Vector_Sln(0, 0) * VoltajeSec) / (Vector_Sln(0, 0) * VoltajeSec)) * 100 'Porcentaje de

regulación

Exit Sub

salvador:

MsgBox "Uno de los parámetros introducidos a generado una raiz negativa o una división por cero. Por favor revise sus datos.", vbOKOnly, "Atención !!" End

End Sub

Private Sub ExperimentoNo5() 'Limpiar controles Límite = 5

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones

SelecCarga

'Cálculos

On Error GoTo salvador: SelecCarga

Vector_Sln(0, 0) = VoltajePrim / VoltajeSec Select Case Var_Paso_1

Case 1 'Conexión Yd Vector_Sln(0, 1) = VoltajePrim / Sqr(3) Vector_Sln(0, 2) = VoltajeSec Vector_Sln(0, 3) = Sn / VoltajePrim Vector_Sln(0, 4) = a * Vector_Sln(0, 3) Vector_Sln(0, 5) = CorrienteSec / Sqr(3) Case 2 'Conexión Dy Vector_Sln(0, 1) = VoltajePrim / Sqr(3) Vector_Sln(0, 2) = VoltajeSec / Sqr(3) Vector_Sln(0, 3) = (Sn / VoltajePrim) / Sqr(3) Vector_Sln(0, 4) = a * Vector_Sln(0, 3) Vector_Sln(0, 5) = CorrienteSec Case 3 'Conexión Yy Vector_Sln(0, 1) = VoltajePrim / Sqr(3) Vector_Sln(0, 2) = VoltajeSec / Sqr(3) Vector_Sln(0, 3) = (Sn / VoltajePrim) Vector_Sln(0, 4) = a * Vector_Sln(0, 3) Vector_Sln(0, 5) = CorrienteSec / Sqr(3) Case 4 'Conexión Dd Vector_Sln(0, 1) = VoltajePrim Vector_Sln(0, 2) = VoltajeSec Vector_Sln(0, 3) = (Sn / VoltajePrim) / Sqr(3) Vector_Sln(0, 4) = a * Vector_Sln(0, 3) Vector_Sln(0, 5) = CorrienteSec / Sqr(3) End Select Exit Sub salvador:

MsgBox "Uno de los parámetros introducidos a generado una raiz negativa o una división por cero. Por favor revise sus datos.", vbOKOnly, "Atención !!" End

End Sub

Private Sub ExperimentoNo6() 'Conexión Yz5 'Limpiar controles

Limite = 4

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones SelecCarga

'Calculos

On Error GoTo salvador:

Vector_Sln(0, 0) = VoltajePrim / Sqr(3)

Vector_Sln(0, 1) = (Sqr(3) / 2) * (VoltajePrim / VoltajeSec) Vector_Sln(0, 2) = Vector_Sln(0, 1)

Vector_Sln(0, 3) = (Sqr(3) / 2) * (VoltajePrim / Vector_Sln(0, 1)) Vector_Sln(0, 4) = Sqr(3) * VoltajeSec 'Debe agregarse a esta cantidad Ang (30)

Exit Sub salvador:

MsgBox "Uno de los parámetros introducidos a generado una raiz negativa o una división por cero.Por favor revise sus datos.", vbOKOnly, "Atención !!" End

End Sub

Private Sub ExperimentoNo7() 'Limpiar controles Limite = 8

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones

SelecCarga

'Calculos

On Error GoTo salvador:

Vector_Sln(0, 0) = VoltajePrim / VoltajeSec

Vector_Sln(0, 1) = CorrienteSec / Vector_Sln(0, 0) Vector_Sln(0, 2) = VoltajeSec / Sqr(3)

Vector_Sln(0, 3) = VoltajePrim / Vector_Sln(0, 1) Vector_Sln(0, 4) = 2 * (VoltajeSec / CorrienteSec)

Vector_Sln(0, 5) = 2 * Sqr(Vector_Sln(0, 4) ^ 2 + (Rs + Carga) ^ 2) Vector_Sln(0, 6) = Vector_Sln(0, 0) ^ 2 * Vector_Sln(0, 5)

Select Case Var_Paso_1 Case 5 'Conexión Dyy

Vector_Sln(0, 7) = VoltajePrim

Case 6 'Conexión Yyy Vector_Sln(0, 7) = VoltajePrim / Sqr(3) Vector_Sln(0, 8) = Vector_Sln(0, 1) End Select Exit Sub salvador:

MsgBox "Uno de los parámetros introducidos a generado una raiz negativa o una división por cero. Por favor revise sus datos.", vbOKOnly, "Atención !!" End

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

'*********************** Carga las imágenes del Panel de control Inferior ************* Image2.Picture = ImageList1.ListImages(1).Picture Image3.Picture = ImageList1.ListImages(3).Picture Image4.Picture = ImageList1.ListImages(5).Picture Image5.Picture = ImageList1.ListImages(7).Picture Image1.Picture = ImageList1.ListImages(9).Picture Label4.Caption = "" End Sub

Private Sub Image1_Click() 'Omitir respuesta

Text1.Text = 0 CambioPreg End Sub

Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Image1.Picture = ImageList1.ListImages(10).Picture Label4.Caption = "Omitir Pregunta"

Label4.Left = Shape1.Left + (Shape1.Width - Label4.Width) / 2 End Sub

Private Sub Image2_Click()

'Si no hay archivo de ayuda para este proyecto, mostrar un mensaje al usuario 'puede establecer el archivo de Ayuda para la aplicación en el cuadro

'de diálogo Propiedades del proyecto If Len(App.HelpFile) = 0 Then

MsgBox "No se puede mostrar el contenido de la Ayuda. No se puede encontrar el archivo de ayuda asociado.", vbInformation, Me.Caption

Else

On Error Resume Next

h = HtmlHelp(Me.hWnd, App.Path & "\Ayuda\Ayuda2.chm", HH_DISPLAY_TOPIC, 0&) If Err Then MsgBox Err.Description End If End If End Sub

Private Sub Image2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Image2.Picture = ImageList1.ListImages(2).Picture Label4.Caption = " Ayuda"

Label4.Left = Shape1.Left + (Shape1.Width - Label4.Width) / 2 End Sub

Private Sub Image3_Click() 'Consulta teorica

Buscar_Temas.Show Buscar_Temas.SetFocus End Sub

Private Sub Image3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Image3.Picture = ImageList1.ListImages(4).Picture Label4.Caption = "Soporte Teorico"

Label4.Left = Shape1.Left + (Shape1.Width - Label4.Width) / 2 End Sub

Private Sub Image4_Click() 'Cancelar quiz

Buscar_Temas.Show Unload Me

End Sub

Private Sub Image4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Image4.Picture = ImageList1.ListImages(6).Picture Label4.Caption = "Cancelar Test"

Label4.Left = Shape1.Left + (Shape1.Width - Label4.Width) / 2 End Sub

' Cambiar de pregunta CambioPreg

If Ya = 0 Then

ProgressBar1.Value = Data3.Recordset.AbsolutePosition + 1

Label7.Caption = Data3.Recordset.AbsolutePosition + 1 & " de " & MaxPreg End If

End Sub

Private Sub Image5_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Image5.Picture = ImageList1.ListImages(8).Picture Label4.Caption = "Siguiente Pregunta"

Label4.Left = Shape1.Left + (Shape1.Width - Label4.Width) / 2 End Sub

Private Sub CambioPreg() Dim Arg1 As Single Dim Arg2 As Single

If i = MaxPreg Then

'Rutina de llenado de la base de datos correspondiente BaseFull

Ya = 1

'Data3.Recordset.MoveFirst

IndS = MsgBox(" Has terminado la práctica. Deseas realizar otra ?", vbYesNo, "Felicitaciones")

If IndS = vbYes Then

Experimento.Show Else

Teoria.Show

principal.Toolbar1.Buttons.Item(4).Enabled = True ' Activa el icono de experimentos End If Unload Me Exit Sub Else

'Se carga el valor escrito por el estudiante en la Matriz Vector_Sln(1, i) = Text1.Text

'Detecta respuesta cero nula If Vector_Sln(1, i) = 0 Then

Prea = MsgBox("No se ha asigando un valor a la solución, desea asignar el valor cero (0).", vbYesNo, "Atención")

Exit Sub End If

ElseIf Vector_Sln(1, i) = "" Then

Preb = MsgBox("No se ha asigando un valor a la solución, desea asignar el valor cero (0).", vbYesNo, "Atención")

If Preb = vbNo Then Exit Sub End If

Text1.Text = 0 End If

'Se evalua el resultado Escrito con el calculado Arg1 = Vector_Sln(0, i)

Arg2 = Vector_Sln(1, i)

If Derror(Arg1, Arg2) < ErrorEstimado Then PA = PA + 1 Text4.Text = PA Else PF = PF + 1 Text3.Text = PF IndicaSalida = 1 'Exit Sub End If

Data3.Recordset.MoveNext 'Se desplaza a la siguiente pregunta Text1.Text = "0" 'Se limpia la casilla de respuesta

i = i + 1 'Se incrementa el contador End If

End Sub

Private Sub BaseFull()

'Esta rutina carga la información evaluada en el recorset 4 Data3.Recordset.MoveFirst For j = 1 To MaxPreg Data4.Recordset.AddNew Data4.Recordset.Fields("CodStudent") = CodUsu Data4.Recordset.Fields("PreguntaN") = 0 Data4.Recordset.Fields("RespPc") = Vector_Sln(0, i - 1) Data4.Recordset.Fields("RespStd") = Vector_Sln(1, i - 1) Data4.Recordset.Update Data3.Recordset.MoveNext Next j End Sub

Private Sub ExperimentoNo8() 'Limpiar controles Limite = 14

Redim_Vector_Sln ' Limpia y Redimensiona el vector de soluciones SelecCarga

'Calculos

On Error GoTo salvador:

Vector_Sln(0, 0) = 0.5 'Valor de a

Vector_Sln(0, 1) = VoltajePrim 'Voltaje del primario Vector_Sln(0, 2) = VoltajeSec 'Voltaje del secundario Vector_Sln(0, 3) = Sn 'Potencia aparente de cada trransformador

Vector_Sln(0, 4) = CorrienteSec / Vector_Sln(0, 0) 'Corriente del primario

Vector_Sln(0, 5) = CorrienteSec / 2 'Corriente del secundario

Vector_Sln(0, 6) = VoltajeSec / CorrienteSec 'Impedancia del secundario

Vector_Sln(0, 7) = (VoltajePrim - Vector_Sln(0, 0) * VoltajeSec) / Vector_Sln(0, 4) 'Impedancia del primario

Vector_Sln(0, 8) = Vector_Sln(0, 4) * Vector_Sln(0, 7) Vector_Sln(0, 9) = 1

Vector_Sln(0, 10) = 1

slnprovi = Vector_Sln(0, 7) ^ 2 - (1.6 * Vector_Sln(0, 0) ^ 2 + 3.2) ^ 2 If slnprovi > 0 Then

Vector_Sln(0, 11) = Sqr(slnprovi) 'Real Else

Vector_Sln(0, 11) = Sqr(-1 * slnprovi) 'Compleja End If

Vector_Sln(0, 12) = 3.2 + Vector_Sln(0, 0) ^ 2 * 1.6 + Vector_Sln(0, 0) ^ 2 * Carga

Vector_Sln(0, 13) = Atn(Vector_Sln(0, 11) / Vector_Sln(0, 12)) Vector_Sln(0, 14) = 0

Exit Sub salvador:

MsgBox "Uno de los parámetros introducidos a generado una raiz negativa ouna división por cero. Por favor revise sus datos.", vbOKOnly, "Atención !!" Exit Sub

Documento similar