Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio ANEXO B Código Fuente del Software de Teleoperación. 149 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Anexo B Se detallan en este anexo, tal y como se mencionó en el Capítulo 5 de este informe, los Códigos fuentes del programa de la PC – C.C.I. Software B.1 Código fuente de la pantalla principal - MDI Private Sub Abrir_Click() AbrirArchivo End Sub Private Sub Acercade_Click() frmAcercade.Show End Sub Private Sub AgregarUsuario_Click() If UsuarioActual = "Administrador" Then frmAgregarUsuario.Show Else MsgBox "El usuario actual no es el Administrador, solamente el Administrador de CCI puede agregar Usuarios.", vbExclamation, "Usuario no Autorizado" End If End Sub Private Sub Alarmas_Click() FrmAlarmas.Show End Sub Private Sub cabiarcontraseña_Click() If UsuarioActual <> "" Then frmCambioContraseña.Show Else DeseaLoguearse = MsgBox("No hay ningún usuario Logueado. Debe Loguearse primero para poder cambiar su contraseña. Desea Loguearse ahora?", vbYesNo + vbQuestion, "Cambio de Contraseña") If DeseaLoguearse = 6 Then frmLogin.Show End If End If End Sub Private Sub cambiarusuario_Click() If UsuarioActual = "" Then DeseaLoguearse = MsgBox("No hay ningún usuario Logueado. ¿Desea Loguearse ahora?", vbYesNo + vbQuestion, "Usuario no Logueado") If DeseaLoguearse = 6 Then frmLogin.Show End If Else frmLogin.Icon = LoadPicture(App.Path & "\iconos\cambiarus.ico") frmLogin.Caption = "Cambiar Usuario" frmLogin.Show End If End Sub Private Sub Cascada_Click() Principal.Arrange 0 End Sub Private Sub clima_Click() FrmClima.Show End Sub Private Sub Controles_Click() FrmTemperatura.Show FrmIluminacion.Show FrmRiego.Show 150 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub Equipos_Click() frmEquipos.Show End Sub Private Sub graficos_Click() frmGraficos.Show End Sub Private Sub Guardar_Click() GuardarArchivo End Sub Private Sub Horizontal_Click() Principal.Arrange 1 End Sub Private Sub Iluminacion_Click() FrmIluminacion.Show End Sub Private Sub MenuLogin_Click() If UsuarioActual = "" Then frmLogin.Show Else cambiarsesión = MsgBox("El Usuario Actual es: " + UsuarioActual + ". ¿Desea cerrar la sesión de " + UsuarioActual + "?", vbYesNo + vbQuestion, "Cerrar Sesión") If cambiarsesión = 6 Then Login = False UsuarioActual = "" Principal.StatusBar.Panels.Item(3) = "Usuario Actual: NO LOGUEADO " If frmTempOpen = True Then FrmTemperatura.cmdEnviarTemp.Enabled = False End If If frmLuzOpen = True Then FrmIluminacion.cmdSetLuz.Enabled = False End If If frmRiegoOpen = True Then FrmRiego.cmdSetearHumedad.Enabled = False End If If frmCtrlManualOpen = True Then FrmManual.cmdActivar.Enabled = False End If End If End If End Sub Private Sub Manual_Click() FrmManual.Show End Sub Private Sub MDIForm_Load() Login = False NumFich = FreeFile Open App.Path & "\puerto.cci" For Input As #NumFich Input #NumFich, CommPort Close #NumFich Dim i As Integer For i = 1 To 6 StatusBar.Panels.Add Next i With StatusBar.Panels .Item(1).Style = sbrDate 151 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio .Item(2).Style = sbrTime .Item(3).AutoSize = sbrContents .Item(4).AutoSize = sbrContents .Item(5).Style = sbrNum .Item(6).Style = sbrCaps .Item(7).AutoSize = sbrContents 'Valor de los paneles .Item(4) = "Puerto COM " + CommPort .Item(7).Text = "C.C.I." 'ToolTipText de los Paneles .Item(1).ToolTipText = "Fecha Actual" .Item(2).ToolTipText = "Hora Actual" .Item(3).ToolTipText = "Usuario Actual" .Item(4).ToolTipText = "Puerto de Comunicaciones" .Item(5).ToolTipText = "Estado del Teclado Numérico" .Item(6).ToolTipText = "Estado de la Tecla Bloq. Mayús." .Item(7).ToolTipText = "Ayuda" 'Tamaños y alineación de los Paneles .Item(1).MinWidth = 1300 .Item(1).Alignment = sbrCenter .Item(2).MinWidth = 1200 .Item(2).Alignment = sbrCenter .Item(4).MinWidth = 1500 .Item(4).Alignment = sbrCenter .Item(5).MinWidth = 800 .Item(5).Alignment = sbrCenter .Item(6).MinWidth = 1000 .Item(6).Alignment = sbrCenter .Item(7).MinWidth = 4000 .Item(7).Alignment = sbrCenter End With frmMonitor.Show End Sub Private Sub monitor_Click() frmMonitor.Show End Sub Private Sub MonitoresIndividuales_Click() FrmAlarmas.Show frmEquipos.Show FrmClima.Show End Sub Private Sub MonitorGraficos_Click() frmMonitor.Show frmGraficos.Show End Sub Private Sub Riego_Click() FrmRiego.Show End Sub Private Sub Salir_Click() End End Sub Private Sub SetearTx_Click() If UsuarioActual = "Administrador" Then frmSetearTx.Show Else MsgBox "El usuario actual no es el Administrador, solamente el Administrador de CCI puede Setear los parámetros de Transmisión.", vbCritical, "Error de Usuario" End If End Sub 152 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub Temperatura_Click() FrmTemperatura.Show End Sub Private Sub TiempoRespuesta_Timer() Help ("Falla en la Transmisión") MsgBox "Tiempo de Respuesta Agotado. Falla en La transmisión.", vbCritical, "Error en la Transmisión" TiempodeTxAgotado = True Principal.MSCTxRx.PortOpen = False Help ("C.C.I.") End Sub Private Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case "GuardarArc" GuardarArchivo Case "AbrirArc" AbrirArchivo Case "Login" If UsuarioActual = "" Then frmLogin.Show Else cerrarsesión = MsgBox("El Usuario Actual es: " + UsuarioActual + ". ¿Desea Cerrar la sesión de " + UsuarioActual + "?", vbYesNo + vbQuestion, "Cerrar Sesión") If cerrarsesión = 6 Then Login = False UsuarioActual = "" Principal.StatusBar.Panels.Item(3) = "Usuario Actual: NO LOGUEADO " Principal.MenuLogin.Caption = "&Login" Principal.Toolbar.Buttons.Item(4).ToolTipText = "Login" Principal.Toolbar.Buttons.Item(5).ToolTipText = "Login" If frmTempOpen = True Then FrmTemperatura.cmdEnviarTemp.Enabled = False End If If frmLuzOpen = True Then FrmIluminacion.cmdSetLuz.Enabled = False End If If frmRiegoOpen = True Then FrmRiego.cmdSetearHumedad.Enabled = False End If If frmCtrlManualOpen = True Then FrmManual.cmdActivar.Enabled = False End If End If End If Case "CambiarUsuario" If UsuarioActual = "" Then frmLogin.Show Else frmLogin.Icon = LoadPicture(App.Path & "\iconos\cambiarus.ico") frmLogin.Caption = "Cambiar Usuario" frmLogin.Show End If Case "Equipos" frmEquipos.Show Case "Alarmas" FrmAlarmas.Show Case "Clima" FrmClima.Show Case "MonitorGral" frmMonitor.Show Case "Graficos" frmGraficos.Show Case "Temperatura" FrmTemperatura.Show Case "Iluminación" FrmIluminacion.Show 153 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Case "Riego" FrmRiego.Show Case "Manual" FrmManual.Show Case "Cerrar" RespuestaaPregunta = MsgBox("¿Realmente desea salir de C.C.I.?", vbYesNo + vbQuestion + vbDefaultButton1, "Salir") If RespuestaaPregunta = vbYes Then Unload Me End If End Select End Sub Function AbrirArchivo() Dim NombredeArchivo As String AbriryGuardar.Filter = "Archivos de Seteo de CCI *.asc)|*.asc" AbriryGuardar.ShowOpen If AbriryGuardar.FileName <> "" Then NumFich = FreeFile NombredeArchivo = AbriryGuardar.FileName NumFich = FreeFile Open NombredeArchivo For Input As #NumFich Input #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich Open App.Path & "\variables.cci" For Output As #NumFich Write #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich If frmTempOpen = True Then FrmTemperatura.txtSetMinD.Text = Str(vTMinDia) FrmTemperatura.txtSetInfD.Text = Str(vTInfDia) FrmTemperatura.txtSetSupD.Text = Str(vTSupDia) FrmTemperatura.txtSetMaxD.Text = Str(vTMaxDia) FrmTemperatura.txtSetMinN.Text = Str(vTMinNoche) FrmTemperatura.txtSetInfN.Text = Str(vTInfNoche) FrmTemperatura.txtSetSupN.Text = Str(vTSupNoche) FrmTemperatura.txtSetMaxN.Text = Str(vTMaxNoche) FrmTemperatura.txtHinicio.Text = Str(vHoraSetD) FrmTemperatura.txtMinInicio.Text = Str(vMinSetD) FrmTemperatura.txtHfin.Text = Str(vHoraSetN) FrmTemperatura.txtMinFin.Text = Str(vMinSetN) End If If frmLuzOpen = True Then FrmIluminacion.txtLuzSet1.Text = Str(vLuzSet1) FrmIluminacion.txtLuzSet2.Text = Str(vLuzSet2) FrmIluminacion.txtHinicio.Text = Str(vLuzHIni) FrmIluminacion.txtMinInicio.Text = Str(vLuzMIni) FrmIluminacion.txtHfin.Text = Str(vLuzHFin) FrmIluminacion.txtMinFin.Text = Str(vLuzMFin) End If If frmRiegoOpen = True Then FrmRiego.txtHumedadDeseada.Text = Str(vRiegoSet) End If End If End Function Function GuardarArchivo() Dim NombredeArchivo As String AbriryGuardar.Filter = "Archivos de Seteo de CCI (*.asc)|*.asc" AbriryGuardar.ShowSave If AbriryGuardar.FileName <> "" Then 154 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio NumFich = FreeFile Open App.Path & "\variables.cci" For Input As #NumFich Input #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich NombredeArchivo = AbriryGuardar.FileName NumFich = FreeFile Open NombredeArchivo For Output As #NumFich Write #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich End If End Function Private Sub Vertical_Click() Principal.Arrange 2 End Sub B.2. Código fuente de la Ventana Login Option Explicit Dim UsuarioRegistrado As String Dim UsuarioAnterior As String Dim cerrar As Variant Private Sub cmdAceptar_GotFocus() Help ("Intentar iniciar con: " + txtUsuario.Text) End Sub Private Sub cmdCancelar_Click() If UsuarioActual = "" Then Login = False Principal.StatusBar.Panels.Item(3) = "Usuario Actual: NO LOGUEADO " End If Unload Me End Sub Private Sub cmdAceptar_Click() Usuario = txtUsuario.Text + ".ucc" Contraseña = txtContraseña.Text UsuarioRegistrado = Dir(App.Path & "\" + Usuario) If Usuario = UsuarioRegistrado Then NumFich = FreeFile Open App.Path & "\" + Usuario For Input As #NumFich Input #NumFich, ContraseñaGuardada UsuarioAnterior = txtUsuario.Text Close #NumFich NumFich = FreeFile Open App.Path & "\usuanterior.ccc" For Output As #NumFich Write #NumFich, UsuarioAnterior Close #NumFich If ContraseñaGuardada = Contraseña Then Login = True UsuarioActual = txtUsuario.Text Principal.StatusBar.Panels.Item(3) = "Usuario Actual: " + UsuarioActual + " " Principal.MenuLogin.Caption = "Cerrar &Sesión" Principal.Toolbar.Buttons.Item(4).ToolTipText = "Cambiar Usuario" Principal.Toolbar.Buttons.Item(5).ToolTipText = "Cerrar Sesión" If frmTempOpen = True Then FrmTemperatura.cmdEnviarTemp.Enabled = True End If If frmLuzOpen = True Then FrmIluminacion.cmdSetLuz.Enabled = True End If 155 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio If frmRiegoOpen = True Then FrmRiego.cmdSetearHumedad.Enabled = True End If If frmCtrlManualOpen = True Then FrmManual.cmdActivar.Enabled = True End If Dim NumerodeLogin As Integer NumFich = FreeFile Open App.Path & "\acthora.cci" For Input As #NumFich Input #NumFich, NumerodeLogin Close #NumFich NumerodeLogin = NumerodeLogin + 1 If NumerodeLogin = 15 Then Dim AjustarHora AjustarHora = MsgBox("Recuerde que la hora de sus sistema se transmite al control con cada configuración. Revise la hora períodicamente para corregirla si es necesario. ¿Desea corregirla ahora?.", vbExclamation + vbYesNo, "Ajuste la hora") If AjustarHora = 6 Then Dim lngx lngx = Shell("Rundll32.exe shell32.dll,Control_RunDLL timedate.cpl @X,0") End If NumerodeLogin = 0 End If NumFich = FreeFile Open App.Path & "\acthora.cci" For Output As #NumFich Write #NumFich, NumerodeLogin Close #NumFich Unload Me Else MsgBox "La contraseña no es válida. Vuelva a intentarlo.", vbCritical, "Error en Contraseña" txtContraseña.SetFocus SendKeys "{Home}+{End}" End If Else MsgBox "El Usuario no está registrado. Pongase en contacto con el Administrador de CCI para registrarse.", vbCritical, "Usuario no Registrado" End If End Sub Private Sub cmdCancelar_GotFocus() Help ("Cancelar Inicio Logeado") End Sub Private Sub Form_Load() NumFich = FreeFile Open App.Path & "\usuanterior.ccc" For Input As #NumFich Input #NumFich, UsuarioAnterior Close #NumFich txtUsuario.Text = UsuarioAnterior Me.Show If txtUsuario.Text <> "" Then txtContraseña.SetFocus End If End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") End Sub Private Sub txtContraseña_GotFocus() Help ("Ingrese La Contraseña") txtContraseña.SelStart = 0 txtContraseña.SelLength = Len(txtContraseña) 156 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub txtContraseña_LostFocus() Help ("C.C.I.") End Sub Private Sub txtUsuario_GotFocus() Help ("Ingrese Nombre de Usuario") txtUsuario.SelStart = 0 txtUsuario.SelLength = Len(txtUsuario) End Sub B. 3 Código fuente de la Ventana cambiar usuario Coincide con el código de la ventana login B. 4 Código fuente de la Ventana Agregar Usuario Dim UsuarioNuevo, UsuarioRegistrado As String Private Sub cmdAceptar_Click() UsuarioNuevo = txtNombreUsuario.Text + ".ucc" UsuarioRegistrado = Dir(App.Path & "\" + UsuarioNuevo) If UsuarioNuevo <> UsuarioRegistrado Then If txtContraseña.Text <> txtRepitaContraseña.Text Then MsgBox ("Las contraseñas ingresadas no coinciden, intentelo de nuevo."), vbCritical, "Error en las Contraseñas" Else NumFich = FreeFile Usuario = txtNombreUsuario.Text Contraseña = txtContraseña.Text Open App.Path & "\" + Usuario + ".ucc" For Output As #NumFich Write #NumFich, Contraseña Close #NumFich Unload Me MsgBox ("El nuevo Usuario se registró con éxito. Gracias."), vbInformation, "Usuario Nuevo" End If Else MsgBox "Este Usuario ya Existe. Utilice un Nombre de Usuario Distinto.", vbCritical, "Error - Usuario Existente" End If End Sub Private Sub cmdAceptar_GotFocus() Help ("Crear a: " + txtNombreUsuario.Text + " como usuario de C.C.I.") End Sub Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdCancel_GotFocus() Help ("Cancelar la Creación de Usuario") End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") End Sub Private Sub txtContraseña_Change() If txtNombreUsuario.Text <> "" And txtRepitaContraseña.Text <> "" Then cmdAceptar.Enabled = True End If End Sub Private Sub txtContraseña_GotFocus() Help ("Ingrese la Contraseña") txtContraseña.SelStart = 0 txtContraseña.SelLength = Len(txtContraseña) 157 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub txtNombreUsuario_Change() If txtContraseña.Text <> "" And txtRepitaContraseña.Text <> "" Then cmdAceptar.Enabled = True End If End Sub Private Sub txtNombreUsuario_GotFocus() Help ("Ingrese Nombre de Usuario Nuevo") txtNombreUsuario.SelStart = 0 txtNombreUsuario.SelLength = Len(txtNombreUsuario) End Sub Private Sub txtRepitaContraseña_Change() If txtContraseña.Text <> "" And txtNombreUsuario.Text <> "" Then cmdAceptar.Enabled = True End If End Sub Private Sub txtRepitaContraseña_GotFocus() Help ("Ingrese la Contraseña Nuevamente") txtRepitaContraseña.SelStart = 0 txtRepitaContraseña.SelLength = Len(txtRepitaContraseña) End Sub B. 5 Código fuente de la Ventana Cambiar contraseña Dim UsuarioCC, UsuarioRCC, ContraseñaOld, Contraseñanew, RContraseña As String Private Sub cmdAceptar_Click() UsuarioCC = txtUsuario.Text + ".ucc" ContraseñaOld = txtContraseñaold.Text Contraseñanew = txtContraseñaNew.Text RContraseña = txtRepitaContraseña.Text UsuarioRCC = Dir(App.Path & "\" + Usuario) If UsuarioCC = UsuarioRCC Then NumFich = FreeFile Open App.Path & "\" + Usuario For Input As #NumFich Input #NumFich, ContraseñaGuardada Close #NumFich If ContraseñaGuardada = ContraseñaOld Then If Contraseñanew = RContraseña Then NumFich = FreeFile Open App.Path & "\" + UsuarioCC For Output As #NumFich Write #NumFich, Contraseñanew Close #NumFich Unload Me MsgBox ("La contraseña se cambió con éxito. Gracias."), vbInformation, "Cambio de Contraseña" Else MsgBox ("Las contraseñas ingresadas no coinciden, intentelo de nuevo."), vbCritical, "Error en las Contraseñas" End If Else MsgBox "La contraseña ingresada como contraseña Anterior no es correcta. Vuelva a intentarlo", vbCritical, "Error en las Contraseñas" txtContraseñaold.SetFocus SendKeys "{Home}+{End}" End If Else MsgBox "El Usuario no está registrado. Pongase en contacto con el Administrador de CCI para registrarse.", vbInformation, "Usuario no Registrado" End If End Sub Private Sub cmdCancelar_Click() Unload Me End Sub 158 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub Form_Load() txtUsuario.Text = UsuarioActual txtUsuario.Locked = True End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") End Sub Private Sub txtContraseñaNew_Change() If txtRepitaContraseña.Text <> "" And txtContraseñaold.Text <> "" And txtUsuario.Text <> "" Then cmdAceptar.Enabled = True End If End Sub Private Sub txtContraseñaNew_GotFocus() Help ("Ingrese la Contraseña Nueva") txtContraseñaNew.SelStart = 0 txtContraseñaNew.SelLength = Len(txtContraseñaNew) End Sub Private Sub txtContraseñaold_Change() If txtRepitaContraseña.Text <> "" And txtContraseñaNew.Text <> "" And txtUsuario.Text <> "" Then cmdAceptar.Enabled = True End If End Sub Private Sub txtContraseñaold_GotFocus() Help ("Ingrese la Contraseña Vieja") txtContraseñaold.SelStart = 0 txtContraseñaold.SelLength = Len(txtContraseñaold) End Sub Private Sub txtRepitaContraseña_Change() If txtContraseñaold.Text <> "" And txtContraseñaNew.Text <> "" And txtUsuario.Text <> "" Then cmdAceptar.Enabled = True End If End Sub Private Sub txtRepitaContraseña_GotFocus() Help ("Repita la Contraseña Nueva") txtRepitaContraseña.SelStart = 0 txtRepitaContraseña.SelLength = Len(txtRepitaContraseña) End Sub Private Sub txtUsuario_Change() If txtRepitaContraseña.Text <> "" And txtContraseñaold.Text <> "" And txtContraseñaNew <> "" Then cmdAceptar.Enabled = True End If End Sub B.6 Código fuente de la función RS232Rx() 'FUNCIONES DE RECEPCIÓN Function RS232Rx() reintentarRS232Rx: Help ("Recibiendo Datos del Control...") If Principal.MSCTxRx.PortOpen = True Then Exit Function End If Principal.MSCTxRx.CommPort = CommPort Principal.MSCTxRx.PortOpen = True CadRecibida = "" 159 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Principal.MSCTxRx.Output = Chr$(10) Principal.MSCTxRx.Output = Chr$(200) TiempodeTxAgotado = False While Principal.MSCTxRx.InBufferCount = 0 DoEvents If TiempodeTxAgotado = True Then Principal.TiempoRespuesta.Enabled = False Exit Function End If Principal.TiempoRespuesta.Enabled = True Wend Principal.TiempoRespuesta.Enabled = False CadRecibida = Principal.MSCTxRx.Input For i = 1 To 6 VRx(i) = Asc(Mid$(CadRecibida, i, 1)) Next vTemperat = VRx(1) vHumedad = VRx(2) vIlumina = VRx(3) vEstEquip = VRx(4) vEstAlarm = VRx(5) vXor = VRx(6) vXorCalculo = VRx(1) Xor VRx(2) Xor VRx(3) Xor VRx(4) Xor VRx(5) If vXor <> vXorCalculo Then RespuestaaPregunta = MsgBox("ERROR!... Los registros enviados por el control no fueron correctamente recibidos por el soft. Revise las conexiones e inténtelo nuevamente. ¿Desea reintentar la conexión ahora?.", vbCritical + vbRetryCancel, "Error de Transmisión.") If RespuestaaPregunta = vbRetry Then GoTo reintentarRS232Rx End If End If If vEstAlarm - 32 >= 0 Then CtrlSinEnergia = True vEstAlarm = vEstAlarm - 32 Else CtrlSinEnergia = False End If If vEstEquip - 128 >= 0 Then CtrlSinDatos = True vEstEquip = vEstEquip - 128 Else CtrlSinDatos = False End If FechayHora = Now NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Output As #NumFich Write #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich Principal.MSCTxRx.PortOpen = False Help ("C.C.I.") If EnviarDespues = True Then RS232Tx End If End Function B.7 Código fuente de la función RS232Tx() 'FUNCIONES DE TRANSMICIÓN Function RS232Tx() reintentarRS232Tx: 160 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Help ("Transmitiendo Datos al Control...") ArmarVector CadAEnviar = "" If Principal.MSCTxRx.PortOpen = True Then EnviarDespues = True Exit Function End If EnviarDespues = False Principal.MSCTxRx.CommPort = CommPort Principal.MSCTxRx.PortOpen = True For i = 1 To 34 CadAEnviar = Chr$(VTx(i)) Principal.MSCTxRx.Output = CadAEnviar Next TiempodeTxAgotado = False While Principal.MSCTxRx.InBufferCount = 0 DoEvents If TiempodeTxAgotado = True Then Principal.TiempoRespuesta.Enabled = False Exit Function End If Principal.TiempoRespuesta.Enabled = True Wend Principal.TiempoRespuesta.Enabled = False CadRecibida = Principal.MSCTxRx.Input Principal.MSCTxRx.PortOpen = False If CadRecibida = "" Then RespuestaaPregunta = MsgBox("ERROR!... Los registros no fueron correctamente recibidos por el Control. Revise las conexiones e inténtelo nuevamente. ¿Desea reintentar la conexión ahora?.", vbCritical + vbRetryCancel, "Error de Transmisión.") If RespuestaaPregunta = vbRetry Then GoTo reintentarRS232Tx End If Else MsgBox "La Transmisión se realizó satisfactoriamente.", vbInformation, "Transmisión Exitosa." End If Help ("C.C.I.") End Function Function ArmarVector() HoraCompleta = Now vHoras = Hour(HoraCompleta) vMinutos = Minute(HoraCompleta) vSegundos = Second(HoraCompleta) VTx(2) = vHoras 'Horas VTx(3) = vMinutos 'Minutos VTx(4) = vSegundos 'Segundos VTx(5) = vLuzHIni VTx(6) = vLuzMIni VTx(7) = vLuzHFin VTx(8) = vLuzMFin 'Hora de Arranque Ctrl. de Luz 'Minutos de Arranque Ctrl. de Luz 'Hora de Fin Ctrl. de Luz 'Minutos de Fin Ctrl. de Luz 'La ecuación de la recta que describe el AD para temperatura es y = x * (1023/100) VTx(9) = CLng(vLuzSet1) * 1023 / 100 'Nivel para encender Banco 1) 'lL VTx(11) = CLng(vLuzSet2) * 1023 / 100 'Nivel para encender Banco 2 '2L VTx(13) = CLng(vRiegoSet) * 1023 / 100 'Nivel de Humedad Requerido. 'L 'Ajuste de Curva para la Temperatura 161 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio If vTMinDia <= 5 Then vTMinDia = vTMinDia + 9 ElseIf vTMinDia <= 15 Then vTMinDia = vTMinDia + 8 ElseIf vTMinDia <= 20 Then vTMinDia = vTMinDia + 7 ElseIf vTMinDia <= 30 Then vTMinDia = vTMinDia + 6 ElseIf vTMinDia <= 40 Then vTMinDia = vTMinDia + 4 ElseIf vTMinDia <= 45 Then vTMinDia = vTMinDia + 3 ElseIf vTMinDia <= 50 Then vTMinDia = vTMinDia + 1 End If If vTInfDia <= 5 Then vTInfDia = vTInfDia + 9 ElseIf vTInfDia <= 15 Then vTInfDia = vTInfDia + 8 ElseIf vTInfDia <= 20 Then vTInfDia = vTInfDia + 7 ElseIf vTInfDia <= 30 Then vTInfDia = vTInfDia + 6 ElseIf vTInfDia <= 40 Then vTInfDia = vTInfDia + 4 ElseIf vTInfDia <= 45 Then vTInfDia = vTInfDia + 3 ElseIf vTInfDia <= 50 Then vTInfDia = vTInfDia + 1 End If If vTSupDia <= 5 Then vTSupDia = vTSupDia + 9 ElseIf vTSupDia <= 15 Then vTSupDia = vTSupDia + 8 ElseIf vTSupDia <= 20 Then vTSupDia = vTSupDia + 7 ElseIf vTSupDia <= 30 Then vTSupDia = vTSupDia + 6 ElseIf vTSupDia <= 40 Then vTSupDia = vTSupDia + 4 ElseIf vTSupDia <= 45 Then vTSupDia = vTSupDia + 3 ElseIf vTSupDia <= 50 Then vTSupDia = vTSupDia + 1 End If If vTMaxDia <= 5 Then vTMaxDia = vTMaxDia + 9 ElseIf vTMaxDia <= 15 Then vTMaxDia = vTMaxDia + 8 ElseIf vTMaxDia <= 20 Then vTMaxDia = vTMaxDia + 7 ElseIf vTMaxDia <= 30 Then vTMaxDia = vTMaxDia + 6 ElseIf vTMaxDia <= 40 Then vTMaxDia = vTMaxDia + 4 ElseIf vTMaxDia <= 45 Then vTMaxDia = vTMaxDia + 3 ElseIf vTMaxDia <= 50 Then vTMaxDia = vTMaxDia + 1 End If If vTMinNoche <= 5 Then vTMinNoche = vTMinNoche + 9 ElseIf vTMinNoche <= 15 Then vTMinNoche = vTMinNoche + 8 ElseIf vTMinNoche <= 20 Then 162 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio vTMinNoche = vTMinNoche + 7 ElseIf vTMinNoche <= 30 Then vTMinNoche = vTMinNoche + 6 ElseIf vTMinNoche <= 40 Then vTMinNoche = vTMinNoche + 4 ElseIf vTMinNoche <= 45 Then vTMinNoche = vTMinNoche + 3 ElseIf vTMinNoche <= 50 Then vTMinNoche = vTMinNoche + 1 End If If vTInfNoche <= 5 Then vTInfNoche = vTInfNoche + 9 ElseIf vTInfNoche <= 15 Then vTInfNoche = vTInfNoche + 8 ElseIf vTInfNoche <= 20 Then vTInfNoche = vTInfNoche + 7 ElseIf vTInfNoche <= 30 Then vTInfNoche = vTInfNoche + 6 ElseIf vTInfNoche <= 40 Then vTInfNoche = vTInfNoche + 4 ElseIf vTInfNoche <= 45 Then vTInfNoche = vTInfNoche + 3 ElseIf vTInfNoche <= 50 Then vTInfNoche = vTInfNoche + 1 End If If vTSupNoche <= 5 Then vTSupNoche = vTSupNoche + 9 ElseIf vTSupNoche <= 15 Then vTSupNoche = vTSupNoche + 8 ElseIf vTSupNoche <= 20 Then vTSupNoche = vTSupNoche + 7 ElseIf vTSupNoche <= 30 Then vTSupNoche = vTSupNoche + 6 ElseIf vTSupNoche <= 40 Then vTSupNoche = vTSupNoche + 4 ElseIf vTSupNoche <= 45 Then vTSupNoche = vTSupNoche + 3 ElseIf vTSupNoche <= 50 Then vTSupNoche = vTSupNoche + 1 End If If vTMaxNoche <= 5 Then vTMaxNoche = vTMaxDia + 9 ElseIf vTMaxNoche <= 15 Then vTMaxNoche = vTMaxNoche + 8 ElseIf vTMaxNoche <= 20 Then vTMaxNoche = vTMaxNoche + 7 ElseIf vTMaxNoche <= 30 Then vTMaxNoche = vTMaxNoche + 6 ElseIf vTMaxNoche <= 40 Then vTMaxNoche = vTMaxNoche + 4 ElseIf vTMaxNoche <= 45 Then vTMaxNoche = vTMaxNoche + 3 ElseIf vTMaxNoche <= 50 Then vTMaxNoche = vTMaxNoche + 1 End If 'La ecuación de la recta que describe el AD para temperatura es y = x * (0.1680415) + 6.90589236 VTx(15) = CLng(vTMinDia) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'Variables de Seteo de Temperatura Diurna 'L VTx(17) = CLng(vTInfDia) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'L VTx(19) = CLng(vTSupDia) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'L VTx(21) = CLng(vTMaxDia) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'L VTx(23) = CLng(vTMinNoche) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'Variables de Seteo de Temperatura Nocturna 163 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio 'L' VTx(25) = CLng(vTInfNoche) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'L VTx(27) = CLng(vTSupNoche) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'L VTx(29) = CLng(vTMaxNoche) * 1013 / 48.4 - 2.55785 '1023 / 60 + 170.5 'L VTx(31) = vHoraSetN 'Hora y Minuto de comienzo de la Noche. VTx(32) = vMinSetN VTx(33) = vHoraSetD 'Hora y Minuto de comienzo del Día. VTx(34) = vMinSetD For i = 9 To 29 Step 2 vIntermedia = VTx(i) - 512 If vIntermedia < 0 Then vIntermedia = VTx(i) - 256 If vIntermedia < 0 Then VTx(i + 1) = VTx(i) VTx(i) = 0 Else VTx(i) = 1 VTx(i + 1) = vIntermedia End If Else vIntermedia2 = vIntermedia - 256 If vIntermedia2 < 0 Then VTx(i) = 2 VTx(i + 1) = vIntermedia Else VTx(i) = 3 VTx(i + 1) = vIntermedia2 End If End If Next VTx(1) = VTx(2) Xor VTx(3) Xor VTx(4) Xor VTx(5) Xor VTx(6) Xor VTx(7) Xor VTx(8) Xor VTx(9) Xor VTx(10) Xor VTx(11) Xor VTx(12) Xor VTx(13) Xor VTx(14) Xor VTx(15) Xor VTx(16) Xor VTx(17) Xor VTx(18) Xor VTx(19) Xor VTx(20) Xor VTx(21) Xor VTx(22) Xor VTx(23) Xor VTx(24) Xor VTx(25) Xor VTx(26) Xor VTx(27) Xor VTx(28) Xor VTx(29) Xor VTx(30) Xor VTx(31) Xor VTx(32) Xor VTx(33) Xor VTx(34) End Function B. 8 Código fuente de la Ventana de Control de Temperatura Private Sub ChkActivarIntervalo_Click() If ChkActivarIntervalo.Value = Checked Then lbAmplitud.Enabled = True lb0.Enabled = True txtGrIntervalo.Enabled = True cmdHelp.Enabled = True txtSetMaxD.Text = Str(Val(txtSetSupD.Text) + Val(txtGrIntervalo.Text)) txtSetMaxN.Text = Str(Val(txtSetSupN.Text) + Val(txtGrIntervalo.Text)) txtSetMinD.Text = Str(Val(txtSetInfD.Text) - Val(txtGrIntervalo.Text)) txtSetMinN.Text = Str(Val(txtSetInfN.Text) - Val(txtGrIntervalo.Text)) txtSetMaxD.Enabled = False txtSetMaxN.Enabled = False txtSetMinD.Enabled = False txtSetMinN.Enabled = False Else txtSetMaxD.Enabled = True txtSetMaxN.Enabled = True txtSetMinD.Enabled = True txtSetMinN.Enabled = True lbAmplitud.Enabled = False lb0.Enabled = False txtGrIntervalo.Enabled = False cmdHelp.Enabled = False End If End Sub 164 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub ChkActivarIntervalo_GotFocus() Help ("Activa / Desactiva el Intérvalo para Temperaturas.") End Sub Private Sub cmdActualizarTemp_Click() RS232Rx NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich lblNivelTemp.Caption = "Nivel al " + Str(FechayHora) + ": " + Str(vTemperat) + "º." End Sub Private Sub cmdActualizarTemp_GotFocus() Help ("Actualiza el Nivel de Temperatura") End Sub Private Sub cmdEnviarTemp_Click() vTMinDia = Val(txtSetMinD.Text) vTInfDia = Val(txtSetInfD.Text) vTSupDia = Val(txtSetSupD.Text) vTMaxDia = Val(txtSetMaxD.Text) vTMinNoche = Val(txtSetMinN.Text) vTInfNoche = Val(txtSetInfN.Text) vTSupNoche = Val(txtSetSupN.Text) vTMaxNoche = Val(txtSetMaxN.Text) vHoraSetD = Val(txtHinicio.Text) vMinSetD = Val(txtMinInicio.Text) vHoraSetN = Val(txtHfin.Text) vMinSetN = Val(txtMinFin.Text) NumFich = FreeFile Open App.Path & "\variables.cci" For Output As #NumFich Write #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich RS232Tx lblmin.Caption = "Temp. Set Mín. Actual" lblinf.Caption = "Temp. Set Inf. Actual" lblsup.Caption = "Temp. Set Sup. Actual" lblmax.Caption = "Temp. Set Máx. Actual" End Sub Private Sub cmdEnviarTemp_GotFocus() Help ("Envia los datos al Control.") End Sub Private Sub cmdHelp_Click() MsgBox "El intervalo de temperaturas será de " + txtGrIntervalo.Text + "º por encima de la temperatura superior y de " + txtGrIntervalo.Text + "º por debajo de la Temperatura inferior. Es decir que por ejemplo si la Temperatura Inferior está en 15º, a los" + Str(15 - Val(txtGrIntervalo.Text)) + "º se activará la alarma de temperatura minima; analogamente si la Temperatura Superior está Seteada en 25º, a los " + Str(25 + Val(txtGrIntervalo.Text)) + "º se encenderá la alarma de Temperatura Máxima.", vbInformation, "Ayuda" End Sub Private Sub cmdHelp_GotFocus() Help ("Ayuda") End Sub Private Sub cmdHelpHorario_Click() MsgBox "Ud. puede setear cual es el horario de comienzo y final del día, dentro de lo cual el sistema utilizará los parametros Diurnos seteado. Fuera de ese intérvalo, el sistema utiliza los parámetros Nocturnos de Temperaturas.", vbInformation, "Ayuda" End Sub 165 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub cmdHelpHorario_GotFocus() Help ("Ayuda") End Sub Private Sub Form_Load() Me.Top = 0 Me.Left = 5 frmTempOpen = True If Login = True Then cmdEnviarTemp.Enabled = True End If Me.Width = 4320 Me.Height = 5655 NumFich = FreeFile Open App.Path & "\variables.cci" For Input As #NumFich Input #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich txtSetMinD.Text = Str(vTMinDia) txtSetInfD.Text = Str(vTInfDia) txtSetSupD.Text = Str(vTSupDia) txtSetMaxD.Text = Str(vTMaxDia) txtSetMinN.Text = Str(vTMinNoche) txtSetInfN.Text = Str(vTInfNoche) txtSetSupN.Text = Str(vTSupNoche) txtSetMaxN.Text = Str(vTMaxNoche) txtHinicio.Text = Str(vHoraSetD) txtMinInicio.Text = Str(vMinSetD) txtHfin.Text = Str(vHoraSetN) txtMinFin.Text = Str(vMinSetN) lblmin.Caption = "Temp. Set Mín. Actual" lblinf.Caption = "Temp. Set Inf. Actual" lblsup.Caption = "Temp. Set Sup. Actual" lblmax.Caption = "Temp. Set Máx. Actual" NumFich = FreeFile Open App.Path & "\txrx.scc" For Input As #NumFich Input #NumFich, CommPort, IntervaloClima, IntervaloEquipos, IntervaloAlarmas, ActualizarOpenCtrl Close #NumFich If ActualizarOpenCtrl = True Then RS232Rx End If NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich lblNivelTemp.Caption = "Nivel al " + Str(FechayHora) + ": " + Str(vTemperat) + "º." End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Width = 4320 Me.Height = 5655 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") frmTempOpen = False End Sub Private Sub txtGrIntervalo_Change() txtSetMaxD.Text = Str(Val(txtSetSupD.Text) + Val(txtGrIntervalo.Text)) txtSetMaxN.Text = Str(Val(txtSetSupN.Text) + Val(txtGrIntervalo.Text)) 166 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio txtSetMinD.Text = Str(Val(txtSetInfD.Text) - Val(txtGrIntervalo.Text)) txtSetMinN.Text = Str(Val(txtSetInfN.Text) - Val(txtGrIntervalo.Text)) End Sub Private Sub txtGrIntervalo_GotFocus() Help ("Ingrese la Semiamplitud del Intérvalo") txtGrIntervalo.SelStart = 0 txtGrIntervalo.SelLength = Len(txtGrIntervalo) End Sub Private Sub txtHfin_GotFocus() Help ("Ingrese la Hora de Fin del Día.") txtHfin.SelStart = 0 txtHfin.SelLength = Len(txtHfin) End Sub Private Sub txtHinicio_GotFocus() Help ("Ingrese la Hora de Inicio del Día.") txtHinicio.SelStart = 0 txtHinicio.SelLength = Len(txtHinicio) End Sub Private Sub txtMinFin_GotFocus() Help ("Ingrese los Minutos de Fin del Día.") txtMinFin.SelStart = 0 txtMinFin.SelLength = Len(txtMinFin) End Sub Private Sub txtMinInicio_GotFocus() Help ("Ingrese los Minutos de Inicio del Día.") txtMinInicio.SelStart = 0 txtMinInicio.SelLength = Len(txtMinInicio) End Sub Private Sub txtSetInfD_Change() If Val(txtSetInfD.Text) < 0 Then txtSetInfD = 0 End If If udInfD.Max >= Val(txtSetInfD.Text) And udInfD.Min <= Val(txtSetInfD.Text) Then udInfD.Value = Val(txtSetInfD.Text) ElseIf udInfD.Min > Val(txtSetInfD.Text) Then udInfD.Min = Val(txtSetInfD.Text) udInfD.Value = udInfD.Min Else udInfD.Max = Val(txtSetInfD.Text) udInfD.Value = udInfD.Max End If 'Actualiza la caja de temperatura mínima en función del intervalo If ChkActivarIntervalo.Value = Checked Then txtSetMinD.Text = Str(Val(txtSetInfD.Text) - Val(txtGrIntervalo.Text)) End If lblinf.Caption = "Temp. Set Inferior" End Sub Private Sub txtSetInfD_GotFocus() Help ("Ingrese el valor Set T. Inferior Diurna") txtSetInfD.SelStart = 0 txtSetInfD.SelLength = Len(txtSetInfD) End Sub Private Sub txtSetInfN_Change() If Val(txtSetInfN.Text) < 0 Then txtSetInfN = 0 End If If udInfN.Max >= Val(txtSetInfN.Text) And udInfN.Min <= Val(txtSetInfN.Text) Then udInfN.Value = Val(txtSetInfN.Text) ElseIf udInfN.Min > Val(txtSetInfN.Text) Then udInfN.Min = Val(txtSetInfN.Text) udInfN.Value = udInfN.Min 167 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Else udInfN.Max = Val(txtSetInfN.Text) udInfN.Value = udInfN.Max End If 'Actualiza la caja de temperatura mínima en función del intervalo If ChkActivarIntervalo.Value = Checked Then txtSetMinN.Text = Str(Val(txtSetInfN.Text) - Val(txtGrIntervalo.Text)) End If lblinf.Caption = "Temp. Set Inferior" End Sub Private Sub txtSetInfN_GotFocus() Help ("Ingrese el valor Set T. Inferior Nocturna") txtSetInfN.SelStart = 0 txtSetInfN.SelLength = Len(txtSetInfN) End Sub Private Sub txtSetMaxD_Change() If txtSetMaxD > 48 Then txtSetMaxD = 48 End If If udMaxD.Max >= Val(txtSetMaxD.Text) And udMaxD.Min <= Val(txtSetMaxD.Text) Then udMaxD.Value = Val(txtSetMaxD.Text) ElseIf udMaxD.Min > Val(txtSetMaxD.Text) Then udMaxD.Min = Val(txtSetMaxD.Text) udMaxD.Value = udMaxD.Min Else udMaxD.Max = Val(txtSetMaxD.Text) udMaxD.Value = udMaxD.Max End If lblmax.Caption = "Temp. Set Máxima" End Sub Private Sub txtSetMaxD_GotFocus() Help ("Ingrese el valor Set T. Máxima Diurna") txtSetMaxD.SelStart = 0 txtSetMaxD.SelLength = Len(txtSetMaxD) End Sub Private Sub txtSetMaxN_Change() If txtSetMaxN > 48 Then txtSetMaxN = 48 End If If udMaxN.Max >= Val(txtSetMaxN.Text) And udMaxN.Min <= Val(txtSetMaxN.Text) Then udMaxN.Value = Val(txtSetMaxN.Text) ElseIf udMaxN.Min > Val(txtSetMaxN.Text) Then udMaxN.Min = Val(txtSetMaxN.Text) udMaxN.Value = udMaxN.Min Else udMaxN.Max = Val(txtSetMaxN.Text) udMaxN.Value = udMaxN.Max End If lblmax.Caption = "Temp. Set Máxima" End Sub Private Sub txtSetMaxN_GotFocus() Help ("Ingrese el valor Set T. Máxima Nocturna") txtSetMaxN.SelStart = 0 txtSetMaxN.SelLength = Len(txtSetMaxN) End Sub Private Sub txtSetMinD_Change() If Val(txtSetMinD.Text) < 0 Then txtSetMinD = 0 End If If udMinD.Max >= Val(txtSetMinD.Text) And udMinD.Min <= Val(txtSetMinD.Text) Then udMinD.Value = Val(txtSetMinD.Text) ElseIf udMinD.Min > Val(txtSetMinD.Text) Then 168 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio MsgBox "La Temperatura de Alarma Mínima que Ud. está seteando es demasiado baja. Asegurese de que el valor es correcto y de que su equipo de refrigeración llegue a dicha Temperatura", vbExclamation, "Advertencia" udMinD.Min = Val(txtSetMinD.Text) udMinD.Value = udMinD.Min Else udMinD.Max = Val(txtSetMinD.Text) udMinD.Value = udMinD.Max End If lblmin.Caption = "Temp. Set Mínima" End Sub Private Sub txtSetMinD_GotFocus() Help ("Ingrese el valor Set T. Mínima Diurna") txtSetMinD.SelStart = 0 txtSetMinD.SelLength = Len(txtSetMinD) End Sub Private Sub txtSetMinN_Change() If Val(txtSetMinN.Text) < 0 Then txtSetMinN = 0 End If If udMinN.Max >= Val(txtSetMinN.Text) And udMinN.Min <= Val(txtSetMinN.Text) Then udMinN.Value = Val(txtSetMinN.Text) ElseIf udMinN.Min > Val(txtSetMinN.Text) Then udMinN.Min = Val(txtSetMinN.Text) udMinN.Value = udMinN.Min Else udMinN.Max = Val(txtSetMinN.Text) udMinN.Value = udMinN.Max End If lblmin.Caption = "Temp. Set Mínima" End Sub Private Sub txtSetMinN_GotFocus() Help ("Ingrese el valor Set T. Mínima Nocturna") txtSetMinN.SelStart = 0 txtSetMinN.SelLength = Len(txtSetMinN) End Sub Private Sub txtSetSupD_Change() If Val(txtSetSupD.Text) < 0 Then txtSetSupD = 0 End If If udSupD.Max >= Val(txtSetSupD.Text) And udSupD.Min <= Val(txtSetSupD.Text) Then udSupD.Value = Val(txtSetSupD.Text) ElseIf udSupD.Min > Val(txtSetSupD.Text) Then udSupD.Min = Val(txtSetSupD.Text) udSupD.Value = udSupD.Min Else udSupD.Max = Val(txtSetSupD.Text) udSupD.Value = udSupD.Max End If 'Actualiza la caja de temperatura maxima en función del intervalo If ChkActivarIntervalo.Value = Checked Then txtSetMaxD.Text = Str(Val(txtSetSupD.Text) - Val(txtGrIntervalo.Text)) End If lblsup.Caption = "Temp. Set Superior" End Sub Private Sub txtSetSupD_GotFocus() Help ("Ingrese el valor Set T. Superior Diurna") txtSetSupD.SelStart = 0 txtSetSupD.SelLength = Len(txtSetSupD) End Sub Private Sub txtSetSupN_Change() If Val(txtSetSupN.Text) < 0 Then txtSetSupN = 0 End If 169 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio If udSupN.Max >= Val(txtSetSupN.Text) And udSupN.Min <= Val(txtSetSupN.Text) Then udSupN.Value = Val(txtSetSupN.Text) ElseIf udSupN.Min > Val(txtSetSupN.Text) Then udSupN.Min = Val(txtSetSupN.Text) udSupN.Value = udSupN.Min Else udSupN.Max = Val(txtSetSupN.Text) udSupN.Value = udSupN.Max End If 'Actualiza la caja de temperatura maxima en función del intervalo If ChkActivarIntervalo.Value = Checked Then txtSetMaxN.Text = Str(Val(txtSetSupN.Text) - Val(txtGrIntervalo.Text)) End If lblsup.Caption = "Temp. Set Superior" End Sub Private Sub txtSetSupN_GotFocus() Help ("Ingrese el valor Set T. Superior Nocturna") txtSetSupN.SelStart = 0 txtSetSupN.SelLength = Len(txtSetSupN) End Sub Private Sub udInfD_DownClick() txtSetInfD.Text = Str(udInfD.Value) End Sub Private Sub udInfD_UpClick() txtSetInfD.Text = Str(udInfD.Value) End Sub Private Sub udInfN_DownClick() txtSetInfN.Text = Str(udInfN.Value) End Sub Private Sub udInfN_UpClick() txtSetInfN.Text = Str(udInfN.Value) End Sub Private Sub udMaxD_DownClick() txtSetMaxD.Text = Str(udMaxD.Value) End Sub Private Sub udMaxD_UpClick() txtSetMaxD.Text = Str(udMaxD.Value) End Sub Private Sub udMaxN_DownClick() txtSetMaxN.Text = Str(udMaxN.Value) End Sub Private Sub udMaxN_UpClick() txtSetMaxN.Text = Str(udMaxN.Value) End Sub Private Sub udMinD_DownClick() txtSetMinD.Text = Str(udMinD.Value) End Sub Private Sub udMinD_UpClick() txtSetMinD.Text = Str(udMinD.Value) End Sub Private Sub udMinN_DownClick() txtSetMinN.Text = Str(udMinN.Value) End Sub Private Sub udMinN_UpClick() txtSetMinN.Text = Str(udMinN.Value) 170 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub udSupD_DownClick() txtSetSupD.Text = Str(udSupD.Value) End Sub Private Sub udSupD_UpClick() txtSetSupD.Text = Str(udSupD.Value) End Sub Private Sub udSupN_DownClick() txtSetSupN.Text = Str(udSupN.Value) End Sub Private Sub udSupN_UpClick() txtSetSupN.Text = Str(udSupN.Value) End Sub Private Sub txtHfin_Change() varHFin = Val(txtHfin.Text) If varHFin > 23 Then MsgBox "La Hora no puede ser mayor a 23.", vbCritical, "Error" txtHfin.Text = "23" varHFin = Val(txtHfin.Text) upHoraFin.Value = varHFin ElseIf varHFin < 0 Then MsgBox "La Hora no puede ser negativa.", vbCritical, "Error" txtHfin.Text = "0" varHFin = Val(txtHfin.Text) upHoraFin.Value = varHFin Else upHoraFin.Value = varHFin End If End Sub Private Sub txtHinicio_Change() varHInicio = Val(txtHinicio.Text) If varHInicio > 23 Then MsgBox "La Hora no puede ser mayor a 23.", vbCritical, "Error" txtHinicio.Text = "23" varHInicio = Val(txtHinicio.Text) upHoraInicio.Value = varHInicio ElseIf varHInicio < 0 Then MsgBox "La Hora no puede ser negativa.", vbCritical, "Error" txtHinicio.Text = "0" varHInicio = Val(txtHinicio.Text) upHoraInicio.Value = varHInicio Else upHoraInicio.Value = varHInicio End If End Sub Private Sub txtMinFin_Change() varMinFin = Val(txtMinFin.Text) If varMinFin > 59 Then MsgBox "Los Minutos pueden ser superiores a 59.", vbCritical, "Error" txtMinFin.Text = "59" varMinFin = Val(txtMinFin.Text) upMinFin.Value = varMinFin ElseIf varMinFin < 0 Then MsgBox "Los Minutos no pueden ser negativos.", vbCritical, "Error" txtMinFin.Text = "0" varMinFin = Val(txtMinFin.Text) upMinFin.Value = varMinFin Else upMinFin.Value = varMinFin End If End Sub 171 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub txtMinInicio_Change() varMinInicio = Val(txtMinInicio.Text) If varMinInicio > 59 Then MsgBox "Los Minutos pueden ser superiores a 59.", vbCritical, "Error" txtMinInicio.Text = "59" varMinInicio = Val(txtMinInicio.Text) upMinInicio.Value = varMinInicio ElseIf varMinInicio < 0 Then MsgBox "Los Minutos no pueden ser negativos.", vbCritical, "Error" txtMinInicio.Text = "0" varMinInicio = Val(txtMinInicio.Text) upMinInicio.Value = varMinInicio Else upMinInicio.Value = varMinInicio End If End Sub Private Sub upHoraFin_DownClick() txtHfin.Text = Str(upHoraFin.Value) End Sub Private Sub upHoraFin_UpClick() txtHfin.Text = Str(upHoraFin.Value) End Sub Private Sub upHoraInicio_DownClick() txtHinicio.Text = Str(upHoraInicio.Value) End Sub Private Sub upHoraInicio_UpClick() txtHinicio.Text = Str(upHoraInicio.Value) End Sub Private Sub upMinFin_DownClick() txtMinFin.Text = Str(upMinFin.Value) End Sub Private Sub upMinFin_UpClick() txtMinFin.Text = Str(upMinFin.Value) End Sub Private Sub upMinInicio_DownClick() txtMinInicio.Text = Str(upMinInicio.Value) End Sub Private Sub upMinInicio_UpClick() txtMinInicio.Text = Str(upMinInicio.Value) End Sub B. 9 Código fuente de la Ventana de Control de Iluminación Private Sub cmdActualizar_Click() RS232Rx NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich lblNivelLuz.Caption = "Nivel al " + Str(FechayHora) + ": " + Str(vIlumina) + "%." End Sub Private Sub cmdActualizar_GotFocus() Help ("Actualiza el valor de Iluminación Actual.") End Sub Private Sub cmdHelpLuz_Click() MsgBox "Ud. puede setear cual es el horario de comienzo y fin del control de iluminación, fuera de este rango, los Bancos Lumínicos permanecerán apagados, independientemente del nivel de iluminación existente.", vbInformation, "Ayuda" 172 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub cmdHelpLuz_GotFocus() Help ("Ayuda") End Sub Private Sub cmdHelpLuz2_Click() MsgBox "Los niveles de Iluminación en los que enciende cada Banco, son independientes entre sí. Puede setear los bancos entre 0 y 100 % de iluminación, considerando un 100% la iluminación directa en un día soleado.", vbInformation, "Ayuda" End Sub Private Sub cmdHelpLuz2_GotFocus() Help ("Ayuda") End Sub Private Sub cmdSetLuz_Click() vLuzSet1 = Val(txtLuzSet1.Text) vLuzSet2 = Val(txtLuzSet2.Text) vLuzHIni = Val(txtHinicio.Text) vLuzMIni = Val(txtMinInicio.Text) vLuzHFin = Val(txtHfin.Text) vLuzMFin = Val(txtMinFin.Text) NumFich = FreeFile Open App.Path & "\variables.cci" For Output As #NumFich Write #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich RS232Tx End Sub Private Sub Form_Load() Me.Top = 2440 Me.Left = 4350 frmLuzOpen = True If Login = True Then cmdSetLuz.Enabled = True End If Me.Width = 4320 Me.Height = 3510 NumFich = FreeFile Open App.Path & "\variables.cci" For Input As #NumFich Input #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich txtLuzSet1.Text = Str(vLuzSet1) txtLuzSet2.Text = Str(vLuzSet2) txtHinicio.Text = Str(vLuzHIni) txtMinInicio.Text = Str(vLuzMIni) txtHfin.Text = Str(vLuzHFin) txtMinFin.Text = Str(vLuzMFin) NumFich = FreeFile Open App.Path & "\txrx.scc" For Input As #NumFich Input #NumFich, CommPort, IntervaloClima, IntervaloEquipos, IntervaloAlarmas, ActualizarOpenCtrl Close #NumFich If ActualizarOpenCtrl = True Then RS232Rx End If NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich lblNivelLuz.Caption = "Nivel al " + Str(FechayHora) + ": " + Str(vIlumina) + "%." 173 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Width = 4320 Me.Height = 3510 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") frmLuzOpen = False End Sub Private Sub txtHfin_Change() varHFin = Val(txtHfin.Text) If varHFin > 23 Then MsgBox "La Hora no puede ser mayor a 23.", vbCritical, "Error" txtHfin.Text = "23" varHFin = Val(txtHfin.Text) upHoraFin.Value = varHFin ElseIf varHFin < 0 Then MsgBox "La Hora no puede ser negativa.", vbCritical, "Error" txtHfin.Text = "0" varHFin = Val(txtHfin.Text) upHoraFin.Value = varHFin Else upHoraFin.Value = varHFin End If End Sub Private Sub txtHfin_GotFocus() Help ("Ingrese la hora Final del control de Luz") txtHfin.SelStart = 0 txtHfin.SelLength = Len(txtHfin) End Sub Private Sub txtHinicio_Change() varHInicio = Val(txtHinicio.Text) If varHInicio > 23 Then MsgBox "La Hora no puede ser mayor a 23.", vbCritical, "Error" txtHinicio.Text = "23" varHInicio = Val(txtHinicio.Text) upHoraInicio.Value = varHInicio ElseIf varHInicio < 0 Then MsgBox "La Hora no puede ser negativa.", vbCritical, "Error" txtHinicio.Text = "0" varHInicio = Val(txtHinicio.Text) upHoraInicio.Value = varHInicio Else upHoraInicio.Value = varHInicio End If End Sub Private Sub txtHinicio_GotFocus() Help ("Ingrese La hora de comienzo del control de Luz") txtHinicio.SelStart = 0 txtHinicio.SelLength = Len(txtHinicio) End Sub Private Sub txtLuzSet1_Change() udSet1.Value = Val(txtLuzSet1.Text) End Sub Private Sub txtLuzSet1_GotFocus() Help ("Especifique el valor en % de Set para el Banco 1") txtLuzSet1.SelStart = 0 txtLuzSet1.SelLength = Len(txtLuzSet1) End Sub 174 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub txtLuzSet2_Change() udSet2.Value = Val(txtLuzSet2.Text) End Sub Private Sub txtLuzSet2_GotFocus() Help ("Especifique el valor en % de Set para el Banco 2") txtLuzSet2.SelStart = 0 txtLuzSet2.SelLength = Len(txtLuzSet2) End Sub Private Sub txtMinFin_Change() varMinFin = Val(txtMinFin.Text) If varMinFin > 59 Then MsgBox "Los Minutos pueden ser superiores a 59.", vbCritical, "Error" txtMinFin.Text = "59" varMinFin = Val(txtMinFin.Text) upMinFin.Value = varMinFin ElseIf varMinFin < 0 Then MsgBox "Los Minutos no pueden ser negativos.", vbCritical, "Error" txtMinFin.Text = "0" varMinFin = Val(txtMinFin.Text) upMinFin.Value = varMinFin Else upMinFin.Value = varMinFin End If End Sub Private Sub txtMinFin_GotFocus() Help ("Ingrese los minutos de Fin del control de Luz") txtMinFin.SelStart = 0 txtMinFin.SelLength = Len(txtMinFin) End Sub Private Sub txtMinInicio_Change() varMinInicio = Val(txtMinInicio.Text) If varMinInicio > 59 Then MsgBox "Los Minutos pueden ser superiores a 59.", vbCritical, "Error" txtMinInicio.Text = "59" varMinInicio = Val(txtMinInicio.Text) upMinInicio.Value = varMinInicio ElseIf varMinInicio < 0 Then MsgBox "Los Minutos no pueden ser negativos.", vbCritical, "Error" txtMinInicio.Text = "0" varMinInicio = Val(txtMinInicio.Text) upMinInicio.Value = varMinInicio Else upMinInicio.Value = varMinInicio End If End Sub Private Sub txtMinInicio_GotFocus() Help ("Ingrese Los minutos de comienzo del control de Luz") txtMinInicio.SelStart = 0 txtMinInicio.SelLength = Len(txtMinInicio) End Sub Private Sub udSet1_DownClick() txtLuzSet1.Text = Str(udSet1.Value) End Sub Private Sub udSet1_UpClick() txtLuzSet1.Text = Str(udSet1.Value) End Sub Private Sub udSet2_DownClick() txtLuzSet2.Text = Str(udSet2.Value) End Sub Private Sub udSet2_UpClick() 175 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio txtLuzSet2.Text = Str(udSet2.Value) End Sub Private Sub upHoraFin_DownClick() txtHfin.Text = Str(upHoraFin.Value) End Sub Private Sub upHoraFin_UpClick() txtHfin.Text = Str(upHoraFin.Value) End Sub Private Sub upHoraInicio_DownClick() txtHinicio.Text = Str(upHoraInicio.Value) End Sub Private Sub upHoraInicio_UpClick() txtHinicio.Text = Str(upHoraInicio.Value) End Sub Private Sub upMinFin_DownClick() txtMinFin.Text = Str(upMinFin.Value) End Sub Private Sub upMinFin_UpClick() txtMinFin.Text = Str(upMinFin.Value) End Sub Private Sub upMinInicio_DownClick() txtMinInicio.Text = Str(upMinInicio.Value) End Sub Private Sub upMinInicio_UpClick() txtMinInicio.Text = Str(upMinInicio.Value) End Sub B. 10 Código fuente de la Ventana de Control de Riego Private Sub cmdActualizarHumedad_Click() RS232Rx NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich lblNivelhumedad.Caption = "Nivel al " + Str(FechayHora) + ": " + Str(vHumedad) + "%." End Sub Private Sub cmdActualizarHumedad_GotFocus() Help ("Actualiza el nivel de Humedad") End Sub Private Sub cmdHelpLuz_Click() MsgBox "Debe setear en este punto, el nivel de humedad deseado, entre 0% y 100%, por debajo del cual se encenderá el sistema de riego.", vbInformation, "Ayuda" End Sub Private Sub cmdHelpLuz_GotFocus() Help ("Ayuda") End Sub Private Sub cmdSetearHumedad_Click() vRiegoSet = Val(txtHumedadDeseada.Text) NumFich = FreeFile Open App.Path & "\variables.cci" For Output As #NumFich Write #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich 176 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio RS232Tx End Sub Private Sub cmdSetearHumedad_GotFocus() Help ("Enviar Datos al Control") End Sub Private Sub Form_Load() Me.Top = 0 Me.Left = 4350 frmRiegoOpen = True If Login = True Then cmdSetearHumedad.Enabled = True End If Me.Width = 4320 Me.Height = 2415 NumFich = FreeFile Open App.Path & "\variables.cci" For Input As #NumFich Input #NumFich, vHoras, vMinutos, vSegundos, vLuzHIni, vLuzMIni, vLuzHFin, vLuzMFin, vLuzSet1, vLuzSet2, vRiegoSet, vTMinDia, vTInfDia, vTSupDia, vTMaxDia, vTMinNoche, vTInfNoche, vTSupNoche, vTMaxNoche, vHoraSetD, vMinSetD, vHoraSetN, vMinSetN Close #NumFich txtHumedadDeseada.Text = Str(vRiegoSet) NumFich = FreeFile Open App.Path & "\txrx.scc" For Input As #NumFich Input #NumFich, CommPort, IntervaloClima, IntervaloEquipos, IntervaloAlarmas, ActualizarOpenCtrl Close #NumFich If ActualizarOpenCtrl = True Then RS232Rx End If NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich lblNivelhumedad.Caption = "Nivel al " + Str(FechayHora) + ": " + Str(vHumedad) + "%." End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Width = 4320 Me.Height = 2415 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") frmRiegoOpen = False End Sub Private Sub txtHumedadDeseada_Change() UdHumSet.Value = Val(txtHumedadDeseada.Text) End Sub Private Sub txtHumedadDeseada_GotFocus() Help ("Especifique el valor de Humedad Deseado") txtHumedadDeseada.SelStart = 0 txtHumedadDeseada.SelLength = Len(txtHumedadDeseada) End Sub Private Sub UdHumSet_DownClick() txtHumedadDeseada.Text = Str(UdHumSet.Value) End Sub Private Sub UdHumSet_UpClick() txtHumedadDeseada.Text = Str(UdHumSet.Value) End Sub 177 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio B. 11 Código fuente de los Monitores Individuales B.11.1 Código fuente de la Ventana de Monitoreo del Clima. Private Sub chkActualizar_Click() If cmdActualizarClima.Caption = "&Actualizar" Then cmdActualizarClima.Caption = "&Comenzar" ElseIf cmdActualizarClima.Caption = "&Comenzar" Then cmdActualizarClima.Caption = "&Actualizar" ElseIf cmdActualizarClima.Caption = "&Detener" Then cmdActualizarClima.Caption = "&Actualizar" tmrActualizarClima.Enabled = False End If End Sub Private Sub chkActualizar_GotFocus() Help ("Habilita / Deshabilitar las Actualizaciones Periódicas") End Sub Private Sub cmdActualizarClima_Click() If cmdActualizarClima.Caption = "&Actualizar" Or cmdActualizarClima.Caption = "&Comenzar" Then If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizando" RS232Rx If TiempodeTxAgotado = True Then cmdActualizarClima.Caption = "&Actualizar" Exit Sub End If If CtrlSinEnergia = True Then MsgBox "El Control se encuentra sin Energía Externa. Verifique la alimentación del mismo y encienda este monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Energía!!!!" tmrActualizarClima.Enabled = False If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizar" Else cmdActualizarClima.Caption = "&Comenzar" End If ElseIf CtrlSinDatos = True Then MsgBox "El Control se encuentra sin Datos para Operar. Setee el Control y Encienda el Monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Datos!!!!" tmrActualizarClima.Enabled = False If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizar" Else cmdActualizarClima.Caption = "&Comenzar" End If Else NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich txtTemperatura = Str(vTemperat) + " º" txtIluminación = Str(vIlumina) + " %" txtHumedad = Str(vHumedad) + " %" lblHora.Caption = FechayHora cmdActualizarClima.Caption = "&Actualizar" End If Else cmdActualizarClima.Caption = "&Actualizando" RS232Rx If TiempodeTxAgotado = True Then chkActualizar.Value = Unchecked cmdActualizarClima.Caption = "&Actualizar" Exit Sub End If If CtrlSinEnergia = True Then MsgBox "El Control se encuentra sin Energía Externa. Verifique la alimentación del mismo y encienda este monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Energía!!!!" tmrActualizarClima.Enabled = False 178 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizar" Else cmdActualizarClima.Caption = "&Comenzar" End If ElseIf CtrlSinDatos = True Then MsgBox "El Control se encuentra sin Datos para Operar. Setee el Control y Encienda el Monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Datos!!!!" tmrActualizarClima.Enabled = False If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizar" Else cmdActualizarClima.Caption = "&Comenzar" End If Else NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich txtTemperatura = Str(vTemperat) + " º" txtIluminación = Str(vIlumina) + " %" txtHumedad = Str(vHumedad) + " %" lblHora.Caption = FechayHora cmdActualizarClima.Caption = "&Detener" tmrActualizarClima.Interval = IntervaloClima * 1000 tmrActualizarClima.Enabled = True End If End If Else tmrActualizarClima.Enabled = False If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizar" Else cmdActualizarClima.Caption = "&Comenzar" End If End If End Sub Private Sub cmdActualizarClima_GotFocus() If chkActualizar.Value = Unchecked Then Help ("Actualiza el Estado Climático") Else Help ("Comenza a Actualizar el Estado Climático") End If End Sub Private Sub Form_Load() Me.Top = 0 Me.Left = 6180 frmClimaOpen = True Me.Width = 2610 Me.Height = 2760 NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich txtTemperatura = Str(vTemperat) + " º" txtIluminación = Str(vIlumina) + " %" txtHumedad = Str(vHumedad) + " %" lblHora.Caption = FechayHora NumFich = FreeFile Open App.Path & "\txrx.scc" For Input As #NumFich Input #NumFich, CommPort, IntervaloClima, IntervaloEquipos, IntervaloAlarmas Close #NumFich chkActualizar.Caption = "Actualizar Cada " + Str(IntervaloClima) + " Seg." End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub 179 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Me.Width = 2610 Me.Height = 2760 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") frmClimaOpen = False End Sub Private Sub tmrActualizarClima_Timer() cmdActualizarClima.Caption = "Actualizando" RS232Rx If TiempodeTxAgotado = True Then chkActualizar.Value = Unchecked cmdActualizarClima.Caption = "&Actualizar" Exit Sub End If vIdentAlarmas = vEstAlarm - 32 If vIdentAlarmas >= 0 Then MsgBox "El Control se encuentra sin Energía Externa. Verifique la alimentación del mismo y encienda este monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Energía!!!!" If chkActualizar.Value = Unchecked Then cmdActualizarClima.Caption = "&Actualizar" Else cmdActualizarClima.Caption = "&Comenzar" End If tmrActualizarClima.Enabled = False Else NumFich = FreeFile Open App.Path & "\parclimaticos.cci" For Input As #NumFich Input #NumFich, vTemperat, vIlumina, vHumedad, FechayHora Close #NumFich txtTemperatura = Str(vTemperat) + " º" txtIluminación = Str(vIlumina) + " %" txtHumedad = Str(vHumedad) + " %" lblHora.Caption = FechayHora cmdActualizarClima.Caption = "&Detener" End If End Sub B.11.2 Código fuente de la Ventana de Monitoreo de Equipos. Private Sub chkActualizar_Click() If cmdActualizarEquipos.Caption = "&Actualizar" Then cmdActualizarEquipos.Caption = "&Comenzar" ElseIf cmdActualizarEquipos.Caption = "&Comenzar" Then cmdActualizarEquipos.Caption = "&Actualizar" ElseIf cmdActualizarEquipos.Caption = "&Detener" Then cmdActualizarEquipos.Caption = "&Actualizar" tmrActualizarEquipos.Enabled = False End If End Sub Private Sub chkActualizar_GotFocus() Help ("Habilita / Deshabilitar las Actualizaciones Periódicas") End Sub Private Sub cmdActualizarEquipos_Click() If cmdActualizarEquipos.Caption = "&Actualizar" Or cmdActualizarEquipos.Caption = "&Comenzar" Then If chkActualizar.Value = Unchecked Then cmdActualizarEquipos.Caption = "&Actualizando" ActualizarEquipos cmdActualizarEquipos.Caption = "&Actualizar" Else cmdActualizarEquipos.Caption = "&Actualizando" ActualizarEquipos If TiempodeTxAgotado = False Then If CtrlSinEnergia = True Or CtrlSinDatos = True Then 180 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio cmdActualizarEquipos.Caption = "&Comenzar" Else tmrActualizarEquipos.Interval = IntervaloEquipos * 1000 tmrActualizarEquipos.Enabled = True cmdActualizarEquipos.Caption = "&Detener" End If End If End If Else tmrActualizarEquipos.Enabled = False If chkActualizar.Value = Unchecked Then cmdActualizarEquipos.Caption = "&Actualizar" Else cmdActualizarEquipos.Caption = "&Comenzar" End If End If End Sub Private Sub cmdActualizarEquipos_GotFocus() If chkActualizar.Value = Unchecked Then Help ("Actualiza el estado de las Alarmas") Else Help ("Comienza / Detiene la Actualización Periódica.") End If End Sub Private Sub Form_Load() Me.Top = 0 Me.Left = 0 frmEquiposOpen = True Me.Width = 2700 Me.Height = 3465 NumFich = FreeFile Open App.Path & "\txrx.scc" For Input As #NumFich Input #NumFich, CommPort, IntervaloClima, IntervaloEquipos, IntervaloAlarmas Close #NumFich chkActualizar.Caption = "Actualizar Cada " + Str(IntervaloEquipos) + " Seg." End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Width = 2700 Me.Height = 3465 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") frmEquiposOpen = False End Sub Private Sub tmrActualizarEquipos_Timer() cmdActualizarEquipos.Caption = "Actualizando" ActualizarEquipos cmdActualizarEquipos.Caption = "&Detener" End Sub Function ActualizarEquipos() Dim vIdentEquipo, vIdentEquipoAux As Integer RS232Rx If TiempodeTxAgotado = True Then If chkActualizar.Value = Checked Then tmrActualizarEquipos.Enabled = False chkActualizar.Value = Unchecked cmdActualizarEquipos.Caption = "&Actualizar" Exit Function Else Exit Function End If End If If CtrlSinEnergia = True Then 181 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio MsgBox "El Control se encuentra sin Energía Externa. Verifique la alimentación del mismo y encienda este monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Energía!!!!" If chkActualizar.Value = Unchecked Then cmdActualizarEquipos.Caption = "&Actualizar" Else cmdActualizarEquipos.Caption = "&Comenzar" End If tmrActualizarEquipos.Enabled = False Exit Function End If If CtrlSinDatos = True Then MsgBox "El Control se encuentra sin Datos para Operar. Setee el Control y Encienda el Monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Datos!!!!" If chkActualizar.Value = Unchecked Then cmdActualizarEquipos.Caption = "&Actualizar" Else cmdActualizarEquipos.Caption = "&Comenzar" End If tmrActualizarEquipos.Enabled = False Exit Function End If vIdentEquipo = vEstEquip - 64 If vIdentEquipo >= 0 Then txtRiego.Text = "Detenido" Else vIdentEquipo = vEstEquip - 32 If vIdentEquipo >= 0 Then txtRiego.Text = "Encendido" Else txtRiego.Text = "Apagado" vIdentEquipo = vEstEquip End If End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 16 If vIdentEquipo >= 0 Then txtBanco2.Text = "Encendido" Else txtBanco2.Text = "Apagado" vIdentEquipo = vIdentEquipoAux End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 8 If vIdentEquipo >= 0 Then txtBanco1.Text = "Encendido" Else txtBanco1.Text = "Apagado" vIdentEquipo = vIdentEquipoAux End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 4 If vIdentEquipo >= 0 Then txtAire.Text = "Encendido" Else txtAire.Text = "Apagado" vIdentEquipo = vIdentEquipoAux End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 2 If vIdentEquipo >= 0 Then txtPiloto.Text = "Encendido" Else txtPiloto.Text = "Apagado" vIdentEquipo = vIdentEquipoAux 182 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 1 If vIdentEquipo >= 0 Then txtCalefactor.Text = "Encendido" Else txtCalefactor.Text = "Apagado" vIdentEquipo = vIdentEquipoAux End If End Function Private Sub tmrEquipos_Timer() If txtPiloto.Text = "Apagado" Then txtPiloto.ForeColor = &H80000008 If txtPiloto.BackColor = &HFF& Then txtPiloto.BackColor = &H80000005 Else txtPiloto.BackColor = &HFF& txtPiloto.ForeColor = &HFFFFFF End If End If End Sub Private Sub txtAire_Change() If txtAire.Text = "Encendido" Then txtAire.BackColor = &H80FF80 Else txtAire.BackColor = &HC0FFC0 End If End Sub Private Sub txtBanco1_Change() If txtBanco1.Text = "Encendido" Then txtBanco1.BackColor = &H80FF80 Else txtBanco1.BackColor = &HC0FFC0 End If End Sub Private Sub txtBanco2_Change() If txtBanco2.Text = "Encendido" Then txtBanco2.BackColor = &H80FF80 Else txtBanco2.BackColor = &HC0FFC0 End If End Sub Private Sub txtCalefactor_Change() If txtCalefactor.Text = "Encendido" Then txtCalefactor.BackColor = &H80FF80 Else txtCalefactor.BackColor = &HC0FFC0 End If End Sub Private Sub txtPiloto_Change() If txtPiloto.Text = "Encendido" Then txtPiloto.BackColor = &H80FF80 txtPiloto.ForeColor = &H80000008 Else tmrEquipos.Enabled = True End If End Sub Private Sub txtRiego_Change() If txtRiego.Text = "Encendido" Then txtRiego.BackColor = &H80FF80 ElseIf txtRiego.Text = "Detenido" Then 183 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio txtRiego.BackColor = &H80FFFF Else txtRiego.BackColor = &HC0FFC0 End If End Sub B.11.3 Código fuente de la Ventana de Monitoreo de Alarmas. Private Sub chkActualizar_Click() If cmdActualizarAlarmas.Caption = "&Actualizar" Then cmdActualizarAlarmas.Caption = "&Comenzar" ElseIf cmdActualizarAlarmas.Caption = "&Comenzar" Then cmdActualizarAlarmas.Caption = "&Actualizar" ElseIf cmdActualizarAlarmas.Caption = "&Detener" Then cmdActualizarAlarmas.Caption = "&Actualizar" tmrActualizarAlarmas.Enabled = False End If End Sub Private Sub chkActualizar_GotFocus() Help ("Habilita / Deshabilitar las Actualizaciones Periódicas") End Sub Private Sub cmdActualizarAlarmas_Click() If cmdActualizarAlarmas.Caption = "&Actualizar" Or cmdActualizarAlarmas.Caption = "&Comenzar" Then If chkActualizar.Value = Unchecked Then cmdActualizarAlarmas.Caption = "&Actualizando" ActualizarAlarmas cmdActualizarAlarmas.Caption = "&Actualizar" Else cmdActualizarAlarmas.Caption = "&Actualizando" ActualizarAlarmas If TiempodeTxAgotado = False Then If CtrlSinEnergia = True Or CtrlSinDatos = True Then cmdActualizarAlarmas.Caption = "&Comenzar" Else tmrActualizarAlarmas.Interval = IntervaloAlarmas * 1000 tmrActualizarAlarmas.Enabled = True cmdActualizarAlarmas.Caption = "&Detener" End If End If End If Else tmrActualizarAlarmas.Enabled = False If chkActualizar.Value = Unchecked Then cmdActualizarAlarmas.Caption = "&Actualizar" Else cmdActualizarAlarmas.Caption = "&Comenzar" End If End If End Sub Private Sub cmdActualizarAlarmas_GotFocus() If cmdActualizarAlarmas.Caption = "&Actualizar" Or cmdActualizarAlarmas.Caption = "&Comenzar" Then If chkActualizar.Value = Unchecked Then Help ("Actualiza el estado de las Alarmas") Else Help ("Comenza a Actualizar el estado de las Alarmas") End If Else Help ("Detiene la Actualización del estado de las Alarmas") End If End Sub Private Sub Form_Load() Me.Top = 0 Me.Left = 2730 frmAlarmasOpen = True 184 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Me.Width = 3420 Me.Height = 3240 NumFich = FreeFile Open App.Path & "\txrx.scc" For Input As #NumFich Input #NumFich, CommPort, IntervaloClima, IntervaloEquipos, IntervaloAlarmas Close #NumFich chkActualizar.Caption = "Actualizar Cada " + Str(IntervaloAlarmas) + " Seg." End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Width = 3420 Me.Height = 3240 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") frmAlarmasOpen = False End Sub Private Sub tmrActualizarAlarmas_Timer() cmdActualizarAlarmas.Caption = "Actualizando" ActualizarAlarmas cmdActualizarAlarmas.Caption = "&Detener" End Sub Private Sub tmrAlarmas_Timer() If txtAlarmFaltaAgua.Text = "Encendida" Then txtAlarmFaltaAgua.ForeColor = &H80000008 If txtAlarmFaltaAgua.BackColor = &HFF& Then txtAlarmFaltaAgua.BackColor = &H80000005 Else txtAlarmFaltaAgua.BackColor = &HFF& txtAlarmFaltaAgua.ForeColor = &HFFFFFF End If End If If txtAlarmPilotoOff.Text = "Encendida" Then txtAlarmPilotoOff.ForeColor = &H80000008 If txtAlarmPilotoOff.BackColor = &HFF& Then txtAlarmPilotoOff.BackColor = &H80000005 Else txtAlarmPilotoOff.BackColor = &HFF& txtAlarmPilotoOff.ForeColor = &HFFFFFF End If End If If txtAlarmRiegoDet.Text = "Encendida" Then txtAlarmRiegoDet.ForeColor = &H80000008 If txtAlarmRiegoDet.BackColor = &HFF& Then txtAlarmRiegoDet.BackColor = &H80000005 Else txtAlarmRiegoDet.BackColor = &HFF& txtAlarmRiegoDet.ForeColor = &HFFFFFF End If End If If txtAlarmTempMax.Text = "Encendida" Then txtAlarmTempMax.ForeColor = &H80000008 If txtAlarmTempMax.BackColor = &HFF& Then txtAlarmTempMax.BackColor = &H80000005 Else txtAlarmTempMax.BackColor = &HFF& txtAlarmTempMax.ForeColor = &HFFFFFF End If End If If txtAlarmTempMin.Text = "Encendida" Then txtAlarmTempMin.ForeColor = &H80000008 If txtAlarmTempMin.BackColor = &HFF& Then txtAlarmTempMin.BackColor = &H80000005 Else txtAlarmTempMin.BackColor = &HFF& txtAlarmTempMin.ForeColor = &HFFFFFF 185 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End If End If End Sub Private Sub txtAlarmFaltaAgua_Change() If txtAlarmFaltaAgua.Text = "Encendida" Then txtAlarmFaltaAgua.BackColor = &HFF& txtAlarmFaltaAgua.ForeColor = &HFFFFFF Else txtAlarmFaltaAgua.BackColor = &HC0FFC0 txtAlarmFaltaAgua.ForeColor = &H80000008 End If End Sub Private Sub txtAlarmPilotoOff_Change() If txtAlarmPilotoOff.Text = "Encendida" Then txtAlarmPilotoOff.BackColor = &HFF& txtAlarmPilotoOff.ForeColor = &HFFFFFF Else txtAlarmPilotoOff.BackColor = &HC0FFC0 txtAlarmPilotoOff.ForeColor = &H80000008 End If End Sub Private Sub txtAlarmRiegoDet_Change() If txtAlarmRiegoDet.Text = "Encendida" Then txtAlarmRiegoDet.BackColor = &HFF& txtAlarmRiegoDet.ForeColor = &HFFFFFF Else txtAlarmRiegoDet.BackColor = &HC0FFC0 txtAlarmRiegoDet.ForeColor = &H80000008 End If End Sub Private Sub txtAlarmTempMax_Change() If txtAlarmTempMax.Text = "Encendida" Then txtAlarmTempMax.BackColor = &HFF& txtAlarmTempMax.ForeColor = &HFFFFFF Else txtAlarmTempMax.BackColor = &HC0FFC0 txtAlarmTempMax.ForeColor = &H80000008 End If End Sub Private Sub txtAlarmTempMin_Change() If txtAlarmTempMin.Text = "Encendida" Then txtAlarmTempMin.BackColor = &HFF& txtAlarmTempMin.ForeColor = &HFFFFFF Else txtAlarmTempMin.BackColor = &HC0FFC0 txtAlarmTempMin.ForeColor = &H80000008 End If End Sub Function ActualizarAlarmas() Dim vIdentAlarmas, vIdentAlarmasAux As Integer RS232Rx If TiempodeTxAgotado = True Then If chkActualizar.Value = Checked Then tmrActualizarAlarmas.Enabled = False chkActualizar.Value = Unchecked cmdActualizarAlarmas.Caption = "&Actualizar" Exit Function Else Exit Function End If End If If CtrlSinEnergia = True Then 186 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio MsgBox "El Control se encuentra sin Energía Externa. Verifique la alimentación del mismo y encienda este monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Energía!!!!" If chkActualizar.Value = Unchecked Then cmdActualizarAlarmas.Caption = "&Actualizar" Else cmdActualizarAlarmas.Caption = "&Comenzar" End If tmrActualizarAlarmas.Enabled = False Exit Function End If If CtrlSinDatos = True Then MsgBox "El Control se encuentra sin Datos para Operar. Setee el Control y Encienda el Monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Datos!!!!" If chkActualizar.Value = Unchecked Then cmdActualizarAlarmas.Caption = "&Actualizar" Else cmdActualizarAlarmas.Caption = "&Comenzar" End If tmrActualizarAlarmas.Enabled = False Exit Function End If vIdentAlarmas = vEstAlarm - 16 If vIdentAlarmas >= 0 Then txtAlarmPilotoOff.Text = "Encendida" Else txtAlarmPilotoOff.Text = "Apagada" vIdentAlarmas = vEstAlarm End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 8 If vIdentAlarmas >= 0 Then txtAlarmRiegoDet.Text = "Encendida" Else txtAlarmRiegoDet.Text = "Apagada" vIdentAlarmas = vIdentAlarmasAux End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 4 If vIdentAlarmas >= 0 Then txtAlarmFaltaAgua.Text = "Encendida" Else txtAlarmFaltaAgua.Text = "Apagada" vIdentAlarmas = vIdentAlarmasAux End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 2 If vIdentAlarmas >= 0 Then txtAlarmTempMax.Text = "Encendida" Else txtAlarmTempMax.Text = "Apagada" vIdentAlarmas = vIdentAlarmasAux End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 1 If vIdentAlarmas >= 0 Then txtAlarmTempMin.Text = "Encendida" Else txtAlarmTempMin.Text = "Apagada" vIdentAlarmas = vIdentAlarmasAux End If End Function 187 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio B. 12 Código fuente de la Ventana de Monitoreo General Private Sub chkSonido_GotFocus() Help ("Activa / Desactiva el sonido para las Alarmas") End Sub Private Sub cmdMonitorear_Click() If cmdMonitorear.Caption = "&Monitorear" Then cmdMonitorear.Caption = "&Detener" tmrMonitor.Enabled = True Else cmdMonitorear.Caption = "&Monitorear" tmrMonitor.Enabled = False Led.BackStyle = 0 End If End Sub Private Sub cmdMonitorear_GotFocus() If cmdMonitorear.Caption = "&Monitorear" Then Help ("Comienza el Monitoreo.") Else Help ("Detiene el Monitoreo.") End If End Sub Private Sub Form_Load() Me.Height = 6780 Me.Width = 4400 Me.Top = 0 Me.Left = 0 End Sub Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Height = 6780 Me.Width = 4400 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") End Sub Private Sub tmrMonitor_Timer() If Led.BackStyle = 0 Then Led.BackStyle = 1 Else Monitorear Led.BackStyle = 0 End If End Sub Function Monitorear() Dim vIdentAlarmas, vIdentAlarmasAux As Integer Dim vIdentEquipo, vIdentEquipoAux As Integer RS232Rx If TiempodeTxAgotado = True Then tmrMonitor.Enabled = False cmdMonitorear.Caption = "&Monitorear" Exit Function End If If CtrlSinEnergia = True Then picAlarmPiloff.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picAlarmTmin.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picAlarmTmax.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") 188 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio picAlarmFaltaAgua.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picAlarmRiegoDet.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picEquPil.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picEquCalef.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picEquRef.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picEquRiego.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picEquB1.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") picEquB2.Picture = LoadPicture(App.Path & "\iconos\sinenergia.ico") lblPiloto.Caption = "Ctrl. Sin Energía" lblCalefaccion.Caption = "Ctrl. Sin Energía" lblRefrigeracion.Caption = "Ctrl. Sin Energía" lblRiego.Caption = "Ctrl. Sin Energía" lblLuzB1.Caption = "Ctrl. Sin Energía" lblLuzB2.Caption = "Ctrl. Sin Energía" lblTemperatura.Caption = "Ctrl. Sin Energía" lblHumedad.Caption = "Ctrl. Sin Energía" lblIluminacion.Caption = "Ctrl. Sin Energía" lblPilOff.Caption = "Ctrl. Sin Energía" lblFaltaAgua.Caption = "Ctrl. Sin Energía" LblRiegoDet.Caption = "Ctrl. Sin Energía" lblTMax.Caption = "Ctrl. Sin Energía" lblTmin.Caption = "Ctrl. Sin Energía" MsgBox "El Control se encuentra sin Energía Externa. Verifique la alimentación del mismo y encienda este monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Energía!!!!" cmdMonitorear.Caption = "&Monitorear" tmrMonitor.Enabled = False Exit Function End If If CtrlSinDatos = True Then picAlarmPiloff.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picAlarmTmin.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picAlarmTmax.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picAlarmFaltaAgua.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picAlarmRiegoDet.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picEquPil.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picEquCalef.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picEquRef.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picEquRiego.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picEquB1.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") picEquB2.Picture = LoadPicture(App.Path & "\iconos\txrx.ico") lblPiloto.Caption = "Setee el Ctrl." lblCalefaccion.Caption = "Ctrl. Sin Datos" lblRefrigeracion.Caption = "Setee el Ctrl." lblRiego.Caption = "Ctrl. Sin Datos" lblLuzB1.Caption = "Ctrl. Sin Datos" lblLuzB2.Caption = "Setee el Ctrl." lblTemperatura.Caption = "Ctrl. Sin Datos" lblHumedad.Caption = "Setee el Ctrl." lblIluminacion.Caption = "Ctrl. Sin Datos" lblPilOff.Caption = "Ctrl. Sin Datos" lblFaltaAgua.Caption = "Setee el Ctrl." LblRiegoDet.Caption = "Ctrl. Sin Datos" lblTMax.Caption = "Setee el Ctrl." lblTmin.Caption = "Ctrl. Sin Datos" MsgBox "El Control se encuentra sin Datos para Operar. Setee el Control y Encienda el Monitor nuevamente.", vbCritical + vbOKOnly, "Control Sin Datos!!!!" cmdMonitorear.Caption = "&Monitorear" tmrMonitor.Enabled = False Exit Function End If lblTemperatura.Caption = "Temperatura: " + Str(vTemperat) + " º" lblIluminacion.Caption = "Iluminación: " + Str(vIlumina) + " %" 189 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio lblHumedad.Caption = "Humedad: " + Str(vHumedad) + " %" vIdentAlarmas = vEstAlarm - 16 If vIdentAlarmas >= 0 Then picAlarmPiloff.Picture = LoadPicture(App.Path & "\iconos\alarmon.ico") lblPilOff.ForeColor = &HFF& If chkSonido.Value = Checked Then snd = sndPlaySound(App.Path & "\iconos\alarm.wav", SND_ASYNC Or SND_NODEFAULT) End If Else picAlarmPiloff.Picture = LoadPicture(App.Path & "\iconos\alarmoff.ico") lblPilOff.ForeColor = &H80000012 vIdentAlarmas = vEstAlarm End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 8 If vIdentAlarmas >= 0 Then picAlarmRiegoDet.Picture = LoadPicture(App.Path & "\iconos\alarmon.ico") LblRiegoDet.ForeColor = &HFF& If chkSonido.Value = Checked Then snd = sndPlaySound(App.Path & "\iconos\alarm.wav", SND_ASYNC Or SND_NODEFAULT) End If Else picAlarmRiegoDet.Picture = LoadPicture(App.Path & "\iconos\alarmoff.ico") LblRiegoDet.ForeColor = &H80000012 vIdentAlarmas = vIdentAlarmasAux End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 4 If vIdentAlarmas >= 0 Then picAlarmFaltaAgua.Picture = LoadPicture(App.Path & "\iconos\alarmon.ico") lblFaltaAgua.ForeColor = &HFF& If chkSonido.Value = Checked Then snd = sndPlaySound(App.Path & "\iconos\alarm.wav", SND_ASYNC Or SND_NODEFAULT) End If Else picAlarmFaltaAgua.Picture = LoadPicture(App.Path & "\iconos\alarmoff.ico") lblFaltaAgua.ForeColor = &H80000012 vIdentAlarmas = vIdentAlarmasAux End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 2 If vIdentAlarmas >= 0 Then picAlarmTmax.Picture = LoadPicture(App.Path & "\iconos\alarmon.ico") lblTMax.ForeColor = &HFF& If chkSonido.Value = Checked Then snd = sndPlaySound(App.Path & "\iconos\alarm.wav", SND_ASYNC Or SND_NODEFAULT) End If Else picAlarmTmax.Picture = LoadPicture(App.Path & "\iconos\alarmoff.ico") lblTMax.ForeColor = &H80000012 vIdentAlarmas = vIdentAlarmasAux End If vIdentAlarmasAux = vIdentAlarmas vIdentAlarmas = vIdentAlarmas - 1 If vIdentAlarmas >= 0 Then picAlarmTmin.Picture = LoadPicture(App.Path & "\iconos\alarmon.ico") lblTmin.ForeColor = &HFF& If chkSonido.Value = Checked Then snd = sndPlaySound(App.Path & "\iconos\alarm.wav", SND_ASYNC Or SND_NODEFAULT) End If Else picAlarmTmin.Picture = LoadPicture(App.Path & "\iconos\alarmoff.ico") lblTmin.ForeColor = &H80000012 vIdentAlarmas = vIdentAlarmasAux End If 190 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio 'EQUIPOS vIdentEquipo = vEstEquip - 64 If vIdentEquipo >= 0 Then picEquRiego.Picture = LoadPicture(App.Path & "\iconos\riegodet.ico") lblRiego.Caption = "Detenido" lblRiego.ForeColor = &HFFFF& lblRiego.BackColor = &H80C0FF Else vIdentEquipo = vEstEquip - 32 If vIdentEquipo >= 0 Then picEquRiego.Picture = LoadPicture(App.Path & "\iconos\riegoon.ico") lblRiego.Caption = "Encendido" lblRiego.BackColor = &H8000000F lblRiego.ForeColor = &H808000 '&HFFFF00 Else picEquRiego.Picture = LoadPicture(App.Path & "\iconos\riegooff.ico") lblRiego.Caption = "Apagado" vIdentEquipo = vEstEquip lblRiego.ForeColor = &H80000012 lblRiego.BackColor = &H8000000F End If End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 16 If vIdentEquipo >= 0 Then picEquB2.Picture = LoadPicture(App.Path & "\iconos\luzon.ico") lblLuzB2.Caption = "Banco2 Encendido" lblLuzB2.ForeColor = &HFFFF& Else picEquB2.Picture = LoadPicture(App.Path & "\iconos\luzoff.ico") lblLuzB2.Caption = "Banco2 Apagado" vIdentEquipo = vIdentEquipoAux lblLuzB2.ForeColor = &H80000012 End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 8 If vIdentEquipo >= 0 Then picEquB1.Picture = LoadPicture(App.Path & "\iconos\luzon.ico") lblLuzB1.Caption = "Banco1 Encendido" lblLuzB1.ForeColor = &HFFFF& Else picEquB1.Picture = LoadPicture(App.Path & "\iconos\luzoff.ico") lblLuzB1.Caption = "Banco1 Apagado" vIdentEquipo = vIdentEquipoAux lblLuzB1.ForeColor = &H80000012 End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 4 If vIdentEquipo >= 0 Then picEquRef.Picture = LoadPicture(App.Path & "\iconos\refrion.ico") lblRefrigeracion.Caption = "Encendido" lblRefrigeracion.ForeColor = &HFF0000 Else picEquRef.Picture = LoadPicture(App.Path & "\iconos\refrioff.ico") lblRefrigeracion.Caption = "Apagado" vIdentEquipo = vIdentEquipoAux lblRefrigeracion.ForeColor = &H80000012 End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 2 If vIdentEquipo >= 0 Then picEquPil.Picture = LoadPicture(App.Path & "\iconos\pilon.ico") lblPiloto.Caption = "Piloto Encendido" lblPiloto.ForeColor = &H80000012 Else 191 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio picEquPil.Picture = LoadPicture(App.Path & "\iconos\piloff.ico") vIdentEquipo = vIdentEquipoAux lblPiloto.Caption = "Piloto Apagado" lblPiloto.ForeColor = &HFF& End If vIdentEquipoAux = vIdentEquipo vIdentEquipo = vIdentEquipo - 1 If vIdentEquipo >= 0 Then picEquCalef.Picture = LoadPicture(App.Path & "\iconos\calefon.ico") lblCalefaccion.Caption = "Calef. Encendida" lblCalefaccion.ForeColor = &H40C0& Else picEquCalef.Picture = LoadPicture(App.Path & "\iconos\calefoff.ico") lblCalefaccion.Caption = "Calef. Apagada" lblCalefaccion.ForeColor = &H80000012 vIdentEquipo = vIdentEquipoAux End If End Function B. 13 Código fuente de la Ventana de Gráficos Temporales. Private Sub chkBorrarGrafico_GotFocus() Help ("Borra / Mantiene el gráfico antes de regraficar.") End Sub Private Sub chkRecomenzar_Click() If chkBorrarGrafico.Enabled = True Then chkBorrarGrafico.Enabled = False Else chkBorrarGrafico.Enabled = True End If End Sub Private Sub chkRecomenzar_GotFocus() Help ("Habilita / Dehabilita la Graficación Contínua.") End Sub Private Sub cmbEstadisticas_Click() If cmbEstadisticas.Text = "Temperatura" Then lblActual.Caption = "Actual: " + Str(vActualT) + " º" lblMinimo.Caption = "Mínimo: " + Str(vMinimoT) + " º" lblMaximo.Caption = "Máximo: " + Str(vMaximoT) + " º" lblAmplitud.Caption = "Amplitud: " + Str(vAmplitudT) + " º" lblPromedio.Caption = "Promedio: " + Str(vPromedioT) + " º" ElseIf cmbEstadisticas.Text = "Humedad" Then lblActual.Caption = "Actual: " + Str(vActualH) + " %" lblMinimo.Caption = "Mínimo: " + Str(vMinimoH) + " %" lblMaximo.Caption = "Máximo: " + Str(vMaximoH) + " %" lblAmplitud.Caption = "Amplitud: " + Str(vAmplitudH) + " %" lblPromedio.Caption = "Promedio: " + Str(vPromedioH) + " %" ElseIf cmbEstadisticas.Text = "Iluminación" Then lblActual.Caption = "Actual: " + Str(vActualL) + " %" lblMinimo.Caption = "Mínimo: " + Str(vMinimoL) + " %" lblMaximo.Caption = "Máximo: " + Str(vMaximoL) + " %" lblAmplitud.Caption = "Amplitud: " + Str(vAmplitudL) + " %" lblPromedio.Caption = "Promedio: " + Str(vPromedioL) + " %" End If End Sub Private Sub cmbEstadisticas_GotFocus() Help ("Seleccione el Parametro para ver Estadísticas") End Sub Private Sub cmbParametro_click() If cmbParametro.Text = "Temperatura" Then If mschTemperatura.chartType = VtChChartType2dArea Then optArea.Value = True 192 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio ElseIf mschTemperatura.chartType = VtChChartType2dBar Then optBarras.Value = True ElseIf mschTemperatura.chartType = VtChChartType2dLine Then optLineas.Value = True ElseIf mschTemperatura.chartType = VtChChartType2dStep Then optPaso.Value = True End If ElseIf cmbParametro.Text = "Humedad" Then If mschHumedad.chartType = VtChChartType2dArea Then optArea.Value = True ElseIf mschHumedad.chartType = VtChChartType2dBar Then optBarras.Value = True ElseIf mschHumedad.chartType = VtChChartType2dLine Then optLineas.Value = True ElseIf mschHumedad.chartType = VtChChartType2dStep Then optPaso.Value = True End If ElseIf cmbParametro.Text = "Iluminación" Then If mschIluminacion.chartType = VtChChartType2dArea Then optArea.Value = True ElseIf mschIluminacion.chartType = VtChChartType2dBar Then optBarras.Value = True ElseIf mschIluminacion.chartType = VtChChartType2dLine Then optLineas.Value = True ElseIf mschIluminacion.chartType = VtChChartType2dStep Then optPaso.Value = True End If End If End Sub Private Sub cmbParametro_GotFocus() Help ("Parametro a cambiar el Tipo de Gráfico") End Sub Private Sub cmbTiempo_Change() Help ("Seleccione si el tiempo es en Minutos u Horas") End Sub Private Sub cmbTiempo_GotFocus() Help ("Tiempo en Horas o Minutos") End Sub Private Sub cmdComenzar_Click() If cmdComenzar.Caption = "Comen&zar" Then Dim vTiempoTotal As Integer vTiempoTotal = Val(txtTiempo) If vTiempoTotal <> Val(txtTiempo) Then MsgBox "El tiempo de debe ser un valor entero entero. El programa lo redondeará automáticamente.", vbInformation + vbOKOnly, "Valor erroneo." txtTiempo.Text = Str(vTiempoTotal) End If If vTiempoTotal = 0 Then MsgBox "El tiempo de debe ser un valor entero entero superior o igual a 1. El programa lo establecerá como 1.", vbInformation + vbOKOnly, "Valor erroneo." txtTiempo.Text = "1" End If Muestra = 0 If cmbTiempo.Text = "Horas" Then vTiempoTotal = vTiempoTotal * 60 End If CuentaTiempo = vTiempoTotal * 10 / 48 * 60 AuxCuentaTiempo = CuentaTiempo pbRegresiva.Max = CuentaTiempo pbRegresiva.Min = 0 pbPorciento.Max = 100 pbPorcientoT.Max = 100 pbPorcientoH.Max = 100 pbPorcientoL.Max = 100 193 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio pbPorciento.Min = 0 pbPorcientoT.Min = 0 pbPorcientoH.Min = 0 pbPorcientoL.Min = 0 lblPorciento.Caption = "0% Graficado" pbPorciento.Value = 0 pbPorcientoT.Value = 0 pbPorcientoH.Value = 0 pbPorcientoL.Value = 0 lblPorciento.Visible = True pbPorciento.Visible = True lblregresiva.Caption = "Muestreando en: " + Str(CuentaTiempo) lblregresiva.Visible = True pbRegresiva.Visible = True PonerenCero tmrTiempo.Enabled = True cmdComenzar.Caption = "&Detener" Else tmrTiempo.Enabled = False cmdComenzar.Caption = "Comen&zar" End If End Sub Private Sub cmdComenzar_GotFocus() If cmdComenzar.Caption = "Comen&zar" Then Help ("Comienza la graficación") Else Help ("Detiene la Graficación") End If End Sub Private Sub cmdCopiarHumedad_Click() mschHumedad.EditCopy End Sub Private Sub cmdCopiarHumedad_GotFocus() Help ("Copia el Gráfico de Humedad") End Sub Private Sub cmdCopiarIluminacion_Click() mschIluminacion.EditCopy End Sub Private Sub cmdCopiarIluminacion_GotFocus() Help ("Copia el Gráfico de Iluminación") End Sub Private Sub cmdCopiarTemperatura_Click() mschTemperatura.EditCopy End Sub Private Sub cmdCopiarTemperatura_GotFocus() Help ("Copia el Gráfico de Temperatura") End Sub Private Sub cmdImprimirHumedad_Click() mschHumedad.EditCopy Printer.Print " " Printer.PaintPicture Clipboard.GetData(), 0, 0 Printer.EndDoc End Sub Private Sub cmdImprimirHumedad_GotFocus() Help ("Imprime Gráfico de Humedad") End Sub Private Sub cmdImprimirIluminación_Click() mschIluminacion.EditCopy 194 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Printer.Print " " Printer.PaintPicture Clipboard.GetData(), 0, 0 Printer.EndDoc End Sub Private Sub cmdImprimirIluminación_GotFocus() Help ("Imprime Gráfico de Iluminación") End Sub Private Sub cmdImprimirTemperatura_Click() mschTemperatura.EditCopy Printer.Print " " Printer.PaintPicture Clipboard.GetData(), 0, 0 Printer.EndDoc End Sub Private Sub cmdImprimirTemperatura_GotFocus() Help ("Imprime Gráfico de Temperatura") End Sub Private Sub Form_Load() Me.Height = 6780 Me.Width = 7380 Me.Top = 0 Me.Left = 4450 End Sub Function Graficar() Dim MatrizT(48, 1 To 1) As Integer Dim MatrizH(48, 1 To 1) As Integer Dim MatrizL(48, 1 To 1) As Integer NumFich = FreeFile Open App.Path & "\muestrat.gcc" For Input As #NumFich Input #NumFich, T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9), T(10), T(11), T(12), T(13), T(14), T(15), T(16), T(17), T(18), T(19), T(20), T(21), T(22), T(23), T(24), T(25), T(26), T(27), T(28), T(29), T(30), T(31), T(32), T(33), T(34), T(35), T(36), T(37), T(38), T(39), T(40), T(41), T(42), T(43), T(44), T(45), T(46), T(47), T(48) Close #NumFich NumFich = FreeFile Open App.Path & "\muestrah.gcc" For Input As #NumFich Input #NumFich, H(0), H(1), H(2), H(3), H(4), H(5), H(6), H(7), H(8), H(9), H(10), H(11), H(12), H(13), H(14), H(15), H(16), H(17), H(18), H(19), H(20), H(21), H(22), H(23), H(24), H(25), H(26), H(27), H(28), H(29), H(30), H(31), H(32), H(33), H(34), H(35), H(36), H(37), H(38), H(39), H(40), H(41), H(42), H(43), H(44), H(45), H(46), H(47), H(48) Close #NumFich NumFich = FreeFile Open App.Path & "\muestral.gcc" For Input As #NumFich Input #NumFich, L(0), L(1), L(2), L(3), L(4), L(5), L(6), L(7), L(8), L(9), L(10), L(11), L(12), L(13), L(14), L(15), L(16), L(17), L(18), L(19), L(20), L(21), L(22), L(23), L(24), L(25), L(26), L(27), L(28), L(29), L(30), L(31), L(32), L(33), L(34), L(35), L(36), L(37), L(38), L(39), L(40), L(41), L(42), L(43), L(44), L(45), L(46), L(47), L(48) Close #NumFich RS232Rx If CtrlSinEnergia = True Or CtrlSinDatos = True Then tmrTiempo.Enabled = False lblregresiva.Visible = False pbRegresiva.Visible = False cmdComenzar.Caption = "Comen&zar" MsgBox "El Graficador se encuentra detenido debido a que el control se encuentra sin Datos para Operar o sin Energía Externa. Revise el Control y Encienda el Graficador nuevamente.", vbCritical + vbOKOnly, "Graficador Detenido!!!!" Exit Function End If T(Muestra) = vTemperat H(Muestra) = vHumedad L(Muestra) = vIlumina vActualT = vTemperat vActualH = vHumedad 195 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio vActualL = vIlumina NumFich = FreeFile Open App.Path & "\muestrat.gcc" For Output As #NumFich Write #NumFich, T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9), T(10), T(11), T(12), T(13), T(14), T(15), T(16), T(17), T(18), T(19), T(20), T(21), T(22), T(23), T(24), T(25), T(26), T(27), T(28), T(29), T(30), T(31), T(32), T(33), T(34), T(35), T(36), T(37), T(38), T(39), T(40), T(41), T(42), T(43), T(44), T(45), T(46), T(47), T(48) Close #NumFich NumFich = FreeFile Open App.Path & "\muestrah.gcc" For Output As #NumFich Write #NumFich, H(0), H(1), H(2), H(3), H(4), H(5), H(6), H(7), H(8), H(9), H(10), H(11), H(12), H(13), H(14), H(15), H(16), H(17), H(18), H(19), H(20), H(21), H(22), H(23), H(24), H(25), H(26), H(27), H(28), H(29), H(30), H(31), H(32), H(33), H(34), H(35), H(36), H(37), H(38), H(39), H(40), H(41), H(42), H(43), H(44), H(45), H(46), H(47), H(48) Close #NumFich NumFich = FreeFile Open App.Path & "\muestral.gcc" For Output As #NumFich Write #NumFich, L(0), L(1), L(2), L(3), L(4), L(5), L(6), L(7), L(8), L(9), L(10), L(11), L(12), L(13), L(14), L(15), L(16), L(17), L(18), L(19), L(20), L(21), L(22), L(23), L(24), L(25), L(26), L(27), L(28), L(29), L(30), L(31), L(32), L(33), L(34), L(35), L(36), L(37), L(38), L(39), L(40), L(41), L(42), L(43), L(44), L(45), L(46), L(47), L(48) Close #NumFich Dim Punto As Integer For Punto = 0 To 48 MatrizT(Punto, 1) = T(Punto) MatrizH(Punto, 1) = H(Punto) MatrizL(Punto, 1) = L(Punto) Next 'Estadísticas Dim r As Integer vPromedioT = 0 vPromedioH = 0 vPromedioL = 0 vMinimoT = T(0) vMinimoH = H(0) vMinimoL = L(0) For r = 0 To Muestra If vMinimoT > T(r) Then vMinimoT = T(r) If vMaximoT < T(r) Then vMaximoT = T(r) vPromedioT = vPromedioT + T(r) If vMinimoH > H(r) Then vMinimoH = H(r) If vMaximoH < H(r) Then vMaximoH = H(r) vPromedioH = vPromedioH + H(r) If vMinimoL > L(r) Then vMinimoL = L(r) If vMaximoL < L(r) Then vMaximoL = L(r) vPromedioL = vPromedioL + L(r) Next If Muestra <> 0 Then vPromedioT = vPromedioT / (Muestra + 1) vPromedioH = vPromedioH / (Muestra + 1) vPromedioL = vPromedioL / (Muestra + 1) End If vAmplitudT = vMaximoT - vMinimoT vAmplitudH = vMaximoH - vMinimoH vAmplitudL = vMaximoL - vMinimoL If cmbEstadisticas.Text = "Temperatura" Then lblActual.Caption = "Actual: " + Str(vActualT) + " º" lblMinimo.Caption = "Mínimo: " + Str(vMinimoT) + " º" lblMaximo.Caption = "Máximo: " + Str(vMaximoT) + " º" lblAmplitud.Caption = "Amplitud: " + Str(vAmplitudT) + " º" lblPromedio.Caption = "Promedio: " + Str(vPromedioT) + " º" ElseIf cmbEstadisticas.Text = "Humedad" Then lblActual.Caption = "Actual: " + Str(vActualH) + " %" lblMinimo.Caption = "Mínimo: " + Str(vMinimoH) + " %" 196 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio lblMaximo.Caption = "Máximo: " + Str(vMaximoH) + " %" lblAmplitud.Caption = "Amplitud: " + Str(vAmplitudH) + " %" lblPromedio.Caption = "Promedio: " + Str(vPromedioH) + " %" ElseIf cmbEstadisticas.Text = "Iluminación" Then lblActual.Caption = "Actual: " + Str(vActualL) + " %" lblMinimo.Caption = "Mínimo: " + Str(vMinimoL) + " %" lblMaximo.Caption = "Máximo: " + Str(vMaximoL) + " %" lblAmplitud.Caption = "Amplitud: " + Str(vAmplitudL) + " %" lblPromedio.Caption = "Promedio: " + Str(vPromedioL) + " %" End If Dim Porciento As Integer Porciento = Muestra * 100 / 48 lblPorciento.Caption = Str(Porciento) + "% Graficado" pbPorciento.Value = Porciento pbPorcientoT.Value = Porciento pbPorcientoH.Value = Porciento pbPorcientoL.Value = Porciento Muestra = Muestra + 1 If Muestra = 49 Then If chkRecomenzar.Value = Unchecked Then tmrTiempo.Enabled = False lblregresiva.Visible = False pbRegresiva.Visible = False cmdComenzar.Caption = "Comen&zar" Else If chkBorrarGrafico.Value = Checked Then PonerenCero Muestra = 0 Else Muestra = 0 End If End If End If mschTemperatura.ChartData = MatrizT mschHumedad.ChartData = MatrizH mschIluminacion.ChartData = MatrizL End Function Function PonerenCero() For i = 0 To 48 T(i) = 0 H(i) = 0 L(i) = 0 Next NumFich = FreeFile Open App.Path & "\muestrat.gcc" For Output As #NumFich Write #NumFich, T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9), T(10), T(11), T(12), T(13), T(14), T(15), T(16), T(17), T(18), T(19), T(20), T(21), T(22), T(23), T(24), T(25), T(26), T(27), T(28), T(29), T(30), T(31), T(32), T(33), T(34), T(35), T(36), T(37), T(38), T(39), T(40), T(41), T(42), T(43), T(44), T(45), T(46), T(47), T(48) Close #NumFich NumFich = FreeFile Open App.Path & "\muestrah.gcc" For Output As #NumFich Write #NumFich, H(0), H(1), H(2), H(3), H(4), H(5), H(6), H(7), H(8), H(9), H(10), H(11), H(12), H(13), H(14), H(15), H(16), H(17), H(18), H(19), H(20), H(21), H(22), H(23), H(24), H(25), H(26), H(27), H(28), H(29), H(30), H(31), H(32), H(33), H(34), H(35), H(36), H(37), H(38), H(39), H(40), H(41), H(42), H(43), H(44), H(45), H(46), H(47), H(48) Close #NumFich NumFich = FreeFile Open App.Path & "\muestral.gcc" For Output As #NumFich Write #NumFich, L(0), L(1), L(2), L(3), L(4), L(5), L(6), L(7), L(8), L(9), L(10), L(11), L(12), L(13), L(14), L(15), L(16), L(17), L(18), L(19), L(20), L(21), L(22), L(23), L(24), L(25), L(26), L(27), L(28), L(29), L(30), L(31), L(32), L(33), L(34), L(35), L(36), L(37), L(38), L(39), L(40), L(41), L(42), L(43), L(44), L(45), L(46), L(47), L(48) Close #NumFich End Function 197 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub Me.Height = 6780 Me.Width = 7380 End Sub Private Sub Form_Unload(Cancel As Integer) Help ("C.C.I.") End Sub Private Sub optArea_Click() If cmbParametro.Text = "Temperatura" Then mschTemperatura.chartType = VtChChartType2dArea ElseIf cmbParametro.Text = "Humedad" Then mschHumedad.chartType = VtChChartType2dArea ElseIf cmbParametro.Text = "Iluminación" Then mschIluminacion.chartType = VtChChartType2dArea End If End Sub Private Sub optArea_GotFocus() Help ("Tipo de gráfico de Áreas") End Sub Private Sub optBarras_Click() If cmbParametro.Text = "Temperatura" Then mschTemperatura.chartType = VtChChartType2dBar ElseIf cmbParametro.Text = "Humedad" Then mschHumedad.chartType = VtChChartType2dBar ElseIf cmbParametro.Text = "Iluminación" Then mschIluminacion.chartType = VtChChartType2dBar End If End Sub Private Sub optBarras_GotFocus() Help ("Tipo de gráfico de Barras") End Sub Private Sub optLineas_Click() If cmbParametro.Text = "Temperatura" Then mschTemperatura.chartType = VtChChartType2dLine ElseIf cmbParametro.Text = "Humedad" Then mschHumedad.chartType = VtChChartType2dLine ElseIf cmbParametro.Text = "Iluminación" Then mschIluminacion.chartType = VtChChartType2dLine End If End Sub Private Sub optLineas_GotFocus() Help ("Tipo de gráfico de Líneas") End Sub Private Sub optPaso_Click() If cmbParametro.Text = "Temperatura" Then mschTemperatura.chartType = VtChChartType2dStep ElseIf cmbParametro.Text = "Humedad" Then mschHumedad.chartType = VtChChartType2dStep ElseIf cmbParametro.Text = "Iluminación" Then mschIluminacion.chartType = VtChChartType2dStep End If End Sub Private Sub optPaso_GotFocus() Help ("Tipo de gráfico de Pasos") End Sub Private Sub tmrTiempo_Timer() CuentaTiempo = CuentaTiempo - 1 198 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio lblregresiva.Caption = "Muestreando en: " + Str(CuentaTiempo) pbRegresiva.Value = CuentaTiempo If CuentaTiempo = 0 Then Graficar CuentaTiempo = AuxCuentaTiempo End If End Sub Private Sub txtTiempo_GotFocus() Help ("Ingrese la cantidad de " + cmbTiempo.Text) txtTiempo.SelStart = 0 txtTiempo.SelLength = Len(txtTiempo) End Sub Private Sub udTiempo_Change() If cmbTiempo.Text = "Minutos" Then udTiempo.Max = 300 udTiempo.Min = 1 ElseIf cmbTiempo.Text = "Horas" Then udTiempo.Max = 24 udTiempo.Min = 1 End If txtTiempo.Text = Str(udTiempo.Value) End Sub B.14 Código fuente de la Ventana de Control Manual Dim RespuestaaPregunta Dim CMEquipos, CMAlarmas As Long Dim Calefactor, Aire, Banco1, Banco2, Riego As Byte Dim APilotoOFF, ATMax, ATMin, AFaltaH2O, ARiegoDet As Byte Private Sub chkAlamRiegoDetenido_Click() If chkAlamRiegoDetenido.Value = cheked Then ARiegoDet = 0 Else ARiegoDet = 1 End If Enviar End Sub Private Sub chkAlamRiegoDetenido_GotFocus() Help ("Enciende / Apaga la Alarma de Riego Detenido.") End Sub Private Sub chkAlamTempMin_Click() If chkAlamTempMin.Value = cheked Then ATMin = 0 Else ATMin = 1 End If Enviar End Sub Private Sub chkAlamTempMin_GotFocus() Help ("Enciende / Apaga la Alarma de Temperatura Mínima.") End Sub Private Sub chkAlarmPiloto_Click() If chkAlarmPiloto.Value = cheked Then APilotoOFF = 0 Else APilotoOFF = 1 End If Enviar 199 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End Sub Private Sub chkAlarmPiloto_GotFocus() Help ("Enciende / Apaga la Alarma de Piloto Apagado.") End Sub Private Sub chkAlarmTempMax_Click() If chkAlarmTempMax.Value = cheked Then ATMax = 0 Else ATMax = 1 End If Enviar End Sub Private Sub chkAlarmTempMax_GotFocus() Help ("Enciende / Apaga la Alarma de Temperatura Máxima.") End Sub Private Sub chkBanco1_Click() If chkBanco1.Value = cheked Then Banco1 = 0 Else Banco1 = 1 End If Enviar End Sub Private Sub chkBanco1_GotFocus() Help ("Enciende / Apaga el Banco1 de Iluminación.") End Sub Private Sub chkBanco2_Click() If chkBanco2.Value = cheked Then Banco2 = 0 Else Banco2 = 1 End If Enviar End Sub Private Sub chkBanco2_GotFocus() Help ("Enciende / Apaga el Banco2 de Iluminación.") End Sub Private Sub chkCalefaccion_Click() If chkCalefaccion.Value = cheked Then Calefactor = 0 Else Calefactor = 1 End If Enviar End Sub Private Sub chkCalefaccion_GotFocus() Help ("Enciende / Apaga el Sist. de Calefacción.") End Sub Private Sub chkCalefaccion_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Help ("Enciende/Apaga el Calefactor") End Sub Private Sub chkFaltaAgua_Click() If chkFaltaAgua.Value = cheked Then AFaltaH2O = 0 Else AFaltaH2O = 1 End If 200 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Enviar End Sub Private Sub chkFaltaAgua_GotFocus() Help ("Enciende / Apaga la Alarma de Falta de Agua.") End Sub Private Sub chkrefrigeracion_Click() If chkrefrigeracion.Value = cheked Then Aire = 0 Else Aire = 1 End If Enviar End Sub Private Sub chkrefrigeracion_GotFocus() Help ("Enciende / Apaga el Sist. de Refrigeración.") End Sub Private Sub chkRiego_Click() If chkRiego.Value = cheked Then Riego = 0 Else Riego = 1 End If Enviar End Sub Private Sub chkRiego_GotFocus() Help ("Enciende / Apaga el Sistema de Riego.") End Sub Private Sub cmdActivar_Click() If cmdActivar.Caption = "&Activar" Then chkCalefaccion.Enabled = True chkrefrigeracion.Enabled = True chkBanco1.Enabled = True chkBanco2.Enabled = True chkRiego.Enabled = True chkAlarmTempMax.Enabled = True chkAlamTempMin.Enabled = True chkAlarmPiloto.Enabled = True chkAlamRiegoDetenido.Enabled = True chkFaltaAgua.Enabled = True cmdActivar.Caption = "&Desactivar" frmCMActivado.Show Principal.MSCTxRx.PortOpen = True Principal.MSCTxRx.Output = Chr$(10) Principal.MSCTxRx.Output = Chr$(250) Enviar Else chkCalefaccion.Enabled = False chkrefrigeracion.Enabled = False chkBanco1.Enabled = False chkBanco2.Enabled = False chkRiego.Enabled = False chkAlarmTempMax.Enabled = False chkAlamTempMin.Enabled = False chkAlarmPiloto.Enabled = False chkAlamRiegoDetenido.Enabled = False chkFaltaAgua.Enabled = False chkCalefaccion.Value = Unchecked chkrefrigeracion.Value = Unchecked chkBanco1.Value = Unchecked 201 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio chkBanco2.Value = Unchecked chkRiego.Value = Unchecked chkAlarmTempMax.Value = Unchecked chkAlamTempMin.Value = Unchecked chkAlarmPiloto.Value = Unchecked chkAlamRiegoDetenido.Value = Unchecked chkFaltaAgua.Value = Unchecked cmdActivar.Caption = "&Activar" Principal.MSCTxRx.Output = Chr$(255) Principal.MSCTxRx.PortOpen = False Unload frmCMActivado End If End Sub Private Sub cmdActivar_GotFocus() Help ("Comienza / Detiene el Control Manual.") End Sub Private Sub cmdAyuda_Click() MsgBox "Ud. puede controlar desde esta ventana, y en forma manual, absolutamente todos los artefactos que componen el control, aconsejamos utilizar esta ventana solamente para prueba de los artefactos. Recuerde que cuando el control manual está activado, deja de funcionar automáticamente.", vbInformation, "Ayuda" End Sub Private Sub cmdAyuda_GotFocus() Help ("Ayuda") End Sub Private Sub Form_Load() frmCtrlManualOpen = True If Login = True Then cmdActivar.Enabled = True End If If CtrlManualActivado = False Then Calefactor = 0 Aire = 0 Banco1 = 0 Banco2 = 0 Riego = 0 APilotoOFF = 0 ATMax = 0 ATMin = 0 AFaltaH2O = 0 ARiegoDet = 0 Else chkCalefaccion.Enabled = True chkrefrigeracion.Enabled = True chkBanco1.Enabled = True chkBanco2.Enabled = True chkRiego.Enabled = True chkAlarmTempMax.Enabled = True chkAlamTempMin.Enabled = True chkAlarmPiloto.Enabled = True chkAlamRiegoDetenido.Enabled = True chkFaltaAgua.Enabled = True cmdActivar.Caption = "&Desactivar" If vchkCalefaccion = True Then Calefactor = 1 chkCalefaccion.Value = Checked Else Calefactor = 0 chkCalefaccion.Value = Unchecked End If 202 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio If vchkrefrigeracion = True Then Aire = 1 chkrefrigeracion = Checked Else Aire = 0 chkrefrigeracion = Unchecked End If If vchkBanco1 = True Then Banco1 = 1 chkBanco1 = Checked Else Banco1 = 0 chkBanco1 = Unchecked End If If vchkBanco2 = True Then Banco2 = 1 chkBanco2 = cheked Else Banco2 = 0 chkBanco2 = Unchecked End If If vchkRiego = True Then Riego = 1 chkRiego = Checked Else Riego = 0 chkRiego = Unchecked End If If vchkAlarmTempMax = True Then ATMax = 1 chkAlarmTempMax = Checked Else ATMax = 0 chkAlarmTempMax = Unchecked End If If vchkAlamTempMin = True Then ATMin = 1 chkAlamTempMin = Checked Else ATMin = 0 chkAlamTempMin = Unchecked End If If vchkAlarmPiloto = True Then APilotoOFF = 1 chkAlarmPiloto = Checked Else APilotoOFF = 0 chkAlarmPiloto = Unchecked End If If vchkAlamRiegoDetenido = True Then ARiegoDet = 1 chkAlamRiegoDetenido = Checked Else ARiegoDet = 0 chkAlamRiegoDetenido = Unchecked End If If vchkFaltaAgua = True Then AFaltaH2O = 1 chkFaltaAgua = Checked Else AFaltaH2O = 0 chkFaltaAgua = Unchecked 203 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio End If End If CtrlManualActivado = True FrmManual.Width = 5385 FrmManual.Height = 3465 End Sub Function Enviar() Help ("Transmitiendo Datos al Control...") CtrlManualActivado = False 'CMEQUIPOS CMEquipos = 0 If Calefactor = 1 Then CMEquipos = CMEquipos + 1 End If If Aire = 1 Then CMEquipos = CMEquipos + 2 End If If Banco1 = 1 Then CMEquipos = CMEquipos + 4 End If If Banco2 = 1 Then CMEquipos = CMEquipos + 8 End If If Riego = 1 Then CMEquipos = CMEquipos + 16 End If Principal.MSCTxRx.Output = Chr$(CMEquipos) 'CMALARMAS CMAlarmas = 0 If APilotoOFF = 1 Then CMAlarmas = CMAlarmas + 1 End If If ATMax = 1 Then CMAlarmas = CMAlarmas + 2 End If If ATMin = 1 Then CMAlarmas = CMAlarmas + 4 End If If AFaltaH2O = 1 Then CMAlarmas = CMAlarmas + 8 End If If ARiegoDet = 1 Then CMAlarmas = CMAlarmas + 16 End If Principal.MSCTxRx.Output = Chr$(CMAlarmas) Help ("C.C.I.") End Function Private Sub Form_Resize() If Me.WindowState = vbMinimized Then Exit Sub FrmManual.Width = 5385 FrmManual.Height = 3465 End Sub Private Sub Form_Unload(Cancel As Integer) frmCtrlManualOpen = False 204 Desarrollo del Control Climático Teleoperado de un Invernáculo Javier Alejandro Carletto - Ricardo Iván Parladorio Help ("C.C.I.") If CtrlManualActivado = False Then If cmdActivar.Caption = "&Desactivar" Then RespuestaaPregunta = MsgBox("El control Manual está activado. ¿Desea desactivarlo ahora?", vbYesNo + vbQuestion + vbDefaultButton1, "Aviso de Control Manual") If RespuestaaPregunta = vbNo Then RespuestaaPregunta = MsgBox("Si el Control Manual está activado, el control no opera en forma automática. ¿Está seguro que desea dejarlo Activado?", vbYesNo + vbQuestion + vbDefaultButton2, "Aviso") If RespuestaaPregunta = vbYes Then MsgBox "El control manual quedó activado. Asegúrese de que esté controlando en forma óptima. Recuerde que el control NO ESTÁ OPERANDO EN FORMA AUTOMÁTICA.", vbExclamation, "Control Manual Activado" CtrlManualActivado = True If Calefactor = 1 Then vchkCalefaccion = True End If If Aire = 1 Then vchkrefrigeracion = True End If If Banco1 = 1 Then vchkBanco1 = True End If If Banco2 = 1 Then vchkBanco2 = True End If If Riego = 1 Then vchkRiego = True End If If ATMax = 1 Then vchkAlarmTempMax = True End If If ATMin = 1 Then vchkAlamTempMin = True End If If APilotoOFF = 1 Then vchkAlarmPiloto = True End If If ARiegoDet = 1 Then vchkAlamRiegoDetenido = True End If If AFaltaH2O = 1 Then vchkFaltaAgua = True End If Else Principal.MSCTxRx.Output = Chr$(255) Principal.MSCTxRx.PortOpen = False Unload frmCMActivado End If Else Principal.MSCTxRx.Output = Chr$(255) Principal.MSCTxRx.PortOpen = False Unload frmCMActivado End If End If End If End Sub 205