mantener el PC encendido

hola,

quiero hacer lo siguiente:

me gustaria tener un PC encendido lo maximo de tiempo posible, para ello he pensado en hacer un programa que mande cada x tiempo una señal a un puerto (COM1 por ejemplo) al que hay conectado un aparato que consta de lo siguiente:

un temporizador, un reset de este y un rele.

la cosa es que el programa envia una señal al circuito del COM1 o USB, tanto da, y este resetea el temporizador, en caso de que no se envie la señal, sera que se ha colgado el PC y por tanto el programa no funciona, el temporizador finaliza y activa el rele, que hace un reset bruto del PC para reiniciarlo.

adicionalmente se puede modificar el programa para que no solo reinicie en caso de cuelge total, sino que vaya rebisando los servicios o programas a controlar y que si falla algo, pues eso, o reinicia el mismo o deja de mandar la señal de vivo para que lo haga el hard.

mi pregunta es:

¿se puede hacer esto? ¿hay algo por el estilo que funcione ya? soy muy malo en la electronica ¿me ayudariais a realizar el circuito? ¿alguien se anima a colaborar en esto?

gracias por adelantado.

p.d. si algo no queda claro, preguntad!

Reply to
Tracker
Loading thread data ...

Coñe, un watchdog para pc :-)

Claro

Con hardware externo no me consta, aunque no tendria nada de particular. Yo hace muchos años hice algo por el estilo para unas estaciones de toma de datos que llevaban un XT. En cambio un proceso que supervisa a otros procesos y en caso de error resetea si hay muchas cosas, incluso a nivel comercial.

Yo de ti exploraria mas la parte software. Me suena que hay por ahi programas que hacen precisamente eso sin necesidad de hardware externo utilizando los propios recursos del PC. Eso si, si lo que necesitas es fiabilidad absoluta lo mejor es el hardware aunque te adelanto algo: el control de un watchdog es cualquier cosa menos evidente. Es decir, es MUY facil hacer lo que has dicho y que funcione en el 99% de los casos. Lamentablemente, el 1% restante corresponde a situaciones en que de forma mas o menos escabrosa el programa de refresco continua funcionando inmutable mientras el resto de las cosas han muerto o se han ido a correr al campo. Una pesadilla

Saludos

Cristobal

Saludos

Cristobal

Reply to
Cris

Totalmente de acuerdo con lo que te ha dicho Cris. El problema es el que apunta él, que pueden haberse colgado otros programas y seguir funcionando el que envía el refresco al watch-dog. La solución podría ser que cada programa que deba estar funcionando tenga que enviar su propio refresco, con un identificador propio, y tu circuito, si no recibe todos los refrescos a tiempo, haga un reset. También se podría hacer por soft esta parte, es decir, que un programa supervisor verifique cada cierto tiempo que el resto están corriendo (no me preguntes cómo) y le diga a tu circuito que todo va bien. El problema de ambas posibilidades es que requieren insertar rutinas específicas en todos los programas. Si esos programas los vas a escribir tú, la cosa es fácil, pero si son programas ya hechos, no veo cómo se podría hacer. Otra posibilidad, habida cuenta de que el caso de que se cuelgue una aplicación pero el resto sigan andando es poco frecuente, sería hacer que tu circuito, aunque esté recibiendo correctamente el refresco, resetee el ordenador cada cierto tiempo, que dependerá de lo crítica que sea la aplicación. En cuanto al circuito, no es nada complicado. Un micro baratito con UART (por ejemplo un PIC16F628) con un MAX232 o similar, manejando un micro-relé en paralelo con el botón de reset del PC. El programa para el micro es super-simple. Si necesitas ayuda para el hardaware, cuenta conmigo, pero tendrás que definir antes el tema del soft del PC.

--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

Alaaaa, yo creo que hasta un 16F84 sería tirar el dinero.

Seguro que se puede hacer en plan analógico con un condensador y una resistencia, pero yo no se hacerlo :-( Hasta se podría usar el mismo circuito para controlar el ordenador y la luz interior del coche ¿ no es lo mismo ?

En digital, pones un oscilador (rc, paqué más) un contador que active el relé cuando se desborde, desde el PC le vas activando el reset de vez en cuando para que el contador no se desborde.

Como salida desde el PC puedes emplear una de las lineas de salida de un puerto serie (no TX), por ejemplo RTS, para más seguridad le pones a esta linea un condensador en serie, de modo que desde el PC solo puedas generar un pulso, pero no puedas mantener la linea a nivel constante.

El programa para el PC no es muy dificil de hacer, incluso si ha de revisar otros programas.

Reply to
Nolo Pongo

"pepitof" dijo:

verás, la parte de controlar los programas por oft se hacerlo, de hecho, hace un tiempo, hice un programa para controlar el estado del emule, así si se paraba, lo iniciaba otra vez, puedo haerlo con tantos como quiera... es cosa de tirar de API (findwindow, etc...)

o sea, que el programa controlador puede buscar programas en memoria, ver su estado y si todos cumplen, mandar la señal, si falla uno o varios, los reinicia y envia la señal igualmente, si fallan 3 o 4 veces de forma consecutiva no envia la señal y el PC se reinica. si fallan todos, incluido el programa controlador, al no enviarse la señal se reinicia el PC.

lo que necesito ayuda es para el circuito.

así que si quieres, desarroyo el soft como tu digas para tal fin, lo publico y hacemos el circuito. ¿no?

gracias de todas formas.

Reply to
Tracker

Nolo Pongo dijo:

tu modelo tb me gusta, lo hablamos y lo hacemos entre todos?

Reply to
Tracker

Tras las opiniones vertidas voy yo ^^.. XD, es un tema que llevo bastante tiempo estudiando y ya se me ocurrio en su dia realizar, pero tampoco lo vi tan critico, te comento las ideas que tube yo en su dia ^^.

Por lo que he visto parece que vas a trabajar con windows, lo mio es linux, pero bueno, windows tiene un sistema de "mensajes", no se muy bien como explicarlo, cuando pulsas sobre un boton se emiten mensajes que son recogidos por la aplicacion y se trabaja a partir del boton que has pulsado, actualmente se han dando cuenta que esto es un error muy grave que viene de todos los windows, cualquier aplicacion sin necesidad de permisos especiales puede capturar o emitir estos eventos como si del propio boton o la aplicacion se tratara, esto es muy grave por diversos temas, pero no viene al caso, puedes aprovechar esta vulnerabilidad y capturar todos los eventos que se vayan produciendo, si en algun momento dejas de recibir ciertos eventos, sabes que se ha colgado algo, entonces puedes optar por reiniciar o reiniciar esa aplicacion, es una manera de controlar todas las aplicaciones bastante sencilla.

Otro tema a tratar seria el del tiempo del watchdog, segundos? minutos?, piensa que si reinicias el ordenador en seco y lo rearrancas, puede tardar un tiempo bastante jodido en encenderse, 2 o 3 minutos si tienes mucha carga al inicio, mas los minutos del escanner de windows detectando errores en el disco duro, eso tendrias que tenerlo en cuenta en caso de corte del rele. Otro problema que se plantea, windows no es una plataforma multitarea real, entonces si el ordenador se sobrecarga durante un par de minutos la amplicacion puede retardarse en su ejecucion, entonces nos encontramos que si la aplicacion estaba contando y se paro durante unos minutos, ya no cuenta igual, y el ordenador se reseteara sin necesidad porque las aplicaciones estan funcionando. Por cierto, yo optaria por varios sistemas de reseteo antes que el seco, normalmente los que sueles usar tu, cuando se pilla lo primero, das al control alt supr ( ahora en XP lo tenemos igual de mal asi ke.. ) sino, intentas reiniciar, sino ( en mi caso ) pulso el boton de apagar una vez, si windows responde un poco recibe una señal e intenta apagarse y sino, pulso el reset y tirando. Y una cosa mas, no se si el pc al quitarle la alimentacion y devolversela arranca por si solo, creo que no, necesitas pulsar el power on, esto es por los sistemas ACPI y todas estas polladas de las nuevas placas y fuentes ATX, pero creo que en la bios hay algo que pone algo asi "Recuperarse en caso de off-line", vamos que si se va la luz que se reencienda.. habria que mirarlo.

Sorry por el ladrillo ^^...

--
"Por cierto, de sobra es conocido que no hay
quien entienda lo que escriben los médicos a
 Click to see the full signature
Reply to
RooT

Para esa aplicacion, lo unico que necesitas es un monoestable redisparable y un rele

Saludos

Cristobal

PD ¿Alguien se acuerda si el 555 es redisparable?. La verdad es que esta noche no tengo cabeza para esas cosas

PD2 Feliz año nuevo a todos ;-)

Reply to
Cris
¿Te vale esto?, ya está hecho y no es muy caro.

formatting link

Otra cosa es que te apetezca diseñar y probar cosas.........

--
N i h p l o d
Quita las X si vas a responder por E-mail,
 Click to see the full signature
Reply to
N i h p l o d

Creo que he cambiado de opinión, va a ser mejor el método que propone pepitof. El motivo, lo que comenta Root del tiempo que tarda el ordenador en arrancar.

Mejor un PIC conectado al puerto serie, el programa del PIC podría "no hacer nada" hasta que el programa del PC haya arrancado, ... se podría configurar o darle distintos usos al PIC desde el PC y mandandole luego la configuracion por el puerto serie.

Reply to
Nolo Pongo

gracias por tu respuesta, para el tema linux tb me interesa, pues tengo los dos y tb quiero hacerlo para este, aunque para este no se como...

"RooT" dijo:

Reply to
Tracker

Depende de lo configurable que lo quieras. El problema del monoestable o el simple retardo RC es que no puedes variar el tiempo ni las condiciones de disparo.

--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

Yo creo que ninguna solución basada sólo en software puede ser completamente fiable.

--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

Pero hombre, no seas bruto, que eso es configurable en el setup de la placa. ;-))

--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

Yo sinceramente, no sé si hay forma infalible de que un programa sepa si otro está corriendo. Una cosa es que esté en memoria, o que ciertos registros tengan el valor correcto, pero de ahí a saber que el programa no está colgado en un bucle infinito... ya te digo, no lo sé.

Luego está el tema del reset. Es un poco jodido tener que pegar un botonazo, por el rollo del scandisk y todo eso, y el riesgo de corrupción de datos. Se podría hacer algo más fino, entrando por el teclado, y simulando la pulsación de una secuencia de teclas (Alt+Ctr+Supr etc, etc...) pero claro, ese sistema no es fiable del todo, porque cuando el PC se cuelga de verdad, no hay nada que hacer. Evidentemente, si se pudiera hacer por teclado, se podría hacer por soft ¿no?

Personalmente creo que cualquier sistema de watch-dog por hard es, en cierto modo, un parche a un malfuncionamiento del resto del sistema. Si el PC está bien y el sistema operativo es serio, no tendría por qué haber cuelgues totales. Mi PC lleva varios meses (quizás años) sin resetearse, más que cuando es obligatorio durante la instalación de soft nuevo y cosas de esas. Y tampoco es que esté parado, es un W2000 con el Apache, el servidor ftp, el Outlook, el antivirus, etc., siempre corriendo, más los programas que uso yo, que son muchos y diversos.

Pero en fin, supongo que ya habrás estudiado el tema, así que vamos al grano. Habría que definir varias cosas.

1º. Dónde vas a meter el circuito. Yo creo que lo suyo es que el circuito esté fuera, directamente sujeto al conector serie, y que tome la alimentación, por ejemplo, del conector del teclado. Se podría pensar en sacar tensión de las propias señales del puerto serie, pero teniendo en cuenta que habrá por medio un relé (que consume bastante) y que el circuito debe funcionar incluso durante un reset, cuando el estado de las señales puede no ser el que interesa, creo que esa opción no es viable. La otra forma sería meter el circuito dentro de la torre, y alimentarlo de un conector de alimentación para unidades de disco. Esta última opción es más... elegante, porque no andarías con cables por ahí colgando (el de alimentación y el que vaya hasta el pulsador de reset).

2º. El diseño del circuito. Pensándolo un poco, no merece la pena meter un max232, porque en realidad, los datos siempre van a ir del PC al PIC, y bastaría con un simple adaptador con componentes discretos para las señales que vas a usar. Yo pienso que con una vas que escarbas, para los datos. La comunicación a esa distancia es muy segura y no haría falta que el PIC respondiera ni cosas así. Además, ya puestos, y como esta señal estaría invertida (los adaptadores de linea tipo max232, entre otras cosas, invierten las señales), quizás fuera mejor usar un PIC más pequeño, tipo

12F629, e implementar la comunicación por soft. Si además substituímos el relé por un transistor (el reset se hace poniendo una señal a masa), y teniendo en cuenta que este PIC puede correr con un oscilador interno con una precisión suficiente para este caso, el circuito cabría perfectamente en la carcasa de un conector RS232, y sería muy barato.

3º. La lógica del circuito. Yo pienso que podría ser algo así: El PIC almacenaría dos registros, por ejemplo de 2 bytes cada uno, que podemos llamar REGA y REGB. REGA sería el tiempo en segundos que permitimos que tarde en arrancar el PC. REGB sería el tiempo en segundos que permitimos entre señales del programa supervisor. El PIC, cuando arranca (o se resetea), empieza a contar segundos. Mientras el PC no le diga lo contrario enviándole un carácter determinado (que llamaré A), el PIC considera que el PC está arrancando, lo que llamaré "modo arranque", así que va contando segundos, y comparando el contador con REGA. Si el contador llega a REGA, activa el reset. Cuando el PC arranca, el programa supervisor le envía al PIC el carácter A para indicárselo. Entonces el PIC pasa a "modo normal" y a partir de entonces, el PIC empieza a contar de nuevo, pero ahora compara el contador con REGB. Ahora, el programa supervisor tiene que enviar cada cierto tiempo el carácter B, que le indica al PIC que todo va bien. Cada vez que el PIC recibe el carácter B, pone a cero el contador, pero si en algún momento el contador llega a igualar a REGB, entonces el PIC pasa de nuevo a modo arranque, y activa el reset durante unos segundos. Además, habría un programita de configuración que permitiera modificar el valor de REGA y REGB, por ejemplo enviando el carácter C y luego los dos bytes de REGA o el carácter D y luego los dos bytes de REGB. El PIC almacenaría esos valores en la EEPROM. En cuanto a la seguridad en el envío de datos, se puede obligar a que los datos se envíen por triplicado o cualquier método simple que permita recuperar los errores, teniendo en cuenta que el trasiego de datos va a ser pequeñísimo.

En fin, yo lo veo muy muy simple, e interesante también para mí, así que si te interesa, dame un mail o escríbeme al privado y lo vemos.

--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

"pepitof" dijo:

pues puedes escribirme en: snipped-for-privacy@spammotel.com y allí te doy un correo menos engorroso, nos ponemos a ello y si alguien quiere colaborar que lo diga que montamos una minilista, no?

saludos.

Reply to
Tracker

Juer, ¿y no es más fácil que me escribas a mi privado, que lo tienes en mi firma? ;-))

--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

Hace unos días vi un "adaprador rs232 a PIC con componentes discretos" que constaba de una resistencia de tropeciantas kas en serie con TX, y nada más. Como la entrada del PIC va protegida, el tío se ahorraba hasta ponerle unos diodos de proteccion.

Reply to
Nolo Pongo

No todas creeme, tengo un minipc que cuando le quito la luz no arranca ni a patadas sino pulso el puto boton, ni bios ni na...

--
"Por cierto, de sobra es conocido que no hay
quien entienda lo que escriben los médicos a
 Click to see the full signature
Reply to
RooT

Bueno, eso me parece excesivamente cutre, y hace que el funcionamiento dependa mucho de las características del puerto serie. Mi idea no es mucho más complicada. Si no hay que invertir, una resistencia de 10k y un zener de

4.7V a masa. Así, limitas la tensión positiva a 4.7V, y la negativa a -0.6V (o la que sea la tensión de codo del zener). Eso si el PIC utilizado no tiene UART. Si la tiene, es más práctico implementar un inversor con un transistor y una resistencia.
--
Saludos de José Manuel García
jose.mgg@terra.es
 Click to see the full signature
Reply to
pepitof

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.