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