Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-01-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
Servidor Web + Comunicaciones

Hola amigos....

Os cuento la aplicación que quiero hacer-modificar para ver si me podeis ayudar que estoy un poco pez en desarrollo para internet.

Tengo una aplicación hecha con delphi6 que se encarga de automatizar un complejo turístico (comunicado via puerto serie con un plc de control). Me he encontrado con el problema que esta aplicación, aun operando por red perfectamente, desean hacerlo por internet.

He estado viendo por ahi y no se exactamente que herramientas utilizar, aunque me gustaria seguir con delphi. He pensado en poner un servidor que aloje la página web y siga comunicando via puerto serie (no se si esto será posible) con el autómata de control. El programa en el servidor se encargaría de las comunicaciones locales y los clientes simplemente interactuarían con el servidor para el intercambio de información.

Basicamente unas preguntas:

1.¿Se puede hacer así directamente?¿Si es asi... con que herramienta?PHP, ASP.... recordad que tiene que ser una herramienta que permita comunicaciones serie en la máquina servidor.

o bien...

2. Mantener en el servidor el programa win32 (que se encargue de las comunicaciones serie) y diseñar una interfaz web en el mismo servidor que sirva de acceso a los clientes y yo, internamente, comunicar ambos programas (el que se encargue de las comunicaciones y el servidor web) para intercambiar información (en los 2 sentidos - peticiones del usuario y resultados al usuario-)

Espero haberme explicado bien... acepto cualquier sugerencia o algo que se os ocurra, ya que voy un poco perdido. Si algo no ha quedado claro decidmelo y lo intentaria explicar mejor.

Agradezco por anticipado cualquier tipo de ayuda o comentario

un saludo,
Responder Con Cita
  #2  
Antiguo 14-01-2007
Avatar de lag_0
lag_0 lag_0 is offline
Miembro
 
Registrado: jul 2006
Posts: 131
Poder: 18
lag_0 Va por buen camino
Buenas..
A ver, yo también requerí varias veces de utilización de web/win y definitivamente lo mejor es mantener el servidor HTTP en el programa delphi y te diré por que:
-No sabes ni php ni ASP por lo que mencionas así que tendrias que aprender.
-Tienes que preucuparte de mantener un servidor HTTP además de tu programa.

Al modo más guarro y rapido lo más simple es que te bajes el DreamWeaver, crees las páginas y despues las metas en un memo... y desde delphi cada vez que te hagan un GET al servidor HTTP pues grabas una version de ese memo en un fichero temporal con la info. a mostrar en los sitios de la web correctos y envias esa página... es muy guarro pero simple y nunca te fallará ni dará problemas de seguridad

Ahora si quieres manejar usuarios sesiones y todo el royo.. aprende PHP y montas un apache... el problema es que necesitaras que delphi mantenga una base de datos actualizada con la información que necesites mostrar... puedes usar MYSQL o simplemente archivos de texto o archivos php que contengan la informción en variables de php y con un simple include las mostraras... si maneras hay mil... es pensar y se te ocurrirán infinitas...
De momento:

http://www.php.net/manual/es
Responder Con Cita
  #3  
Antiguo 02-06-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
Muchas gracias por tus consejos lag_0....

Bueno, tras mucho tiempo he retomado el tema, he leido el foro viendo las diferentes opciones, y , tras no convencerme delphi4php por la poca documentación que habia (de momento), he decidido tirar por el siguiente camino:

Me he bajado el intraweb y estoy diseñando las páginas que serán mostradas al cliente.

Por si no habia quedado claro en mi primer post, la aplicación que tengo en marcha se encarga de domotizar una vivienda. Tengo en el servidor un programa Win32 hecho en delphi 6 en el que el usuario enciende y apaga luces de su vivienda. Como el usuario deseaba hacerlo remotamente, le di la posibilidad de entrar con el Escritorio Remoto.

Eso es lo que habia hasta el momento, pero me parece una solución poco elegante. Entre otras cosas porque sólo permite un usuario simultáneamente.

La solución que he pensado idónea es mantener un programa en el servidor que se encargue de las comunicaciones (win32) y diseñar páginas web que se encarguen de la interfaz con el cliente, tal y como me comentaba el compañero lag_0.

El programa win32 y el web deben de estar permanentemente intercambiando datos en ambas direcciones.

- El win32 tiene que decirle en tiempo real al web en que estado se encuentra el interruptor de la luz (encendido o apagado) para segun el estado, mostrar una imagen u otra (jpg de interruptor encendido u apagado) y que el usuario vea el estado real.

- El web tiene que decirle al win32 cuando el usaurio hace una pulsación en un botón determinado, que el interruptor debe cambiar de estado, si está encendido se apaga, y viceversa.

El problema es que he leido como comunicar ambos "programas". El win32 y el html y no me aclaro mucho con los post y get, y os pido a quien me pueda echar una mano, una pequeña ayudita.

De momento, en la parte del programa win32 he escrito el siguiente código, ayudado leyendo varios hilos, entre otros el de automatización web de al gonzalez:

Código Delphi [-]
procedure TfrmPrincipal.Button1Click(Sender: TObject);
var
  params: TStrings;
  respuesta: string;
  estrim: TMemoryStream;
begin
  params := TStringList.Create;
  estrim := TMemoryStream.Create;
  try
    params.Add('estado1=encendido');
    IdHttp.Post('http://localhost/pruebas/index.html', params, estrim);
    estrim.WriteBuffer(#0' ', 1);
    estrim.Position := 0;
    Memo1.Lines.LoadFromStream(estrim);
  finally
    params.Free;
    estrim.free;
  end;
end;

Se que ahora en el código html deberia leer esa variable "estado1" y segun la variable mostrar una imagen (pulsador encendido) u otra (pulsador apagado)

No obstante, no termino de encontrar ningún ejemplo donde se pueda hacer eso...

Ruego a alguien que me eche una manita. ¿me recomendais que la parte del interfaz la haga en php? Estoy leyendo el manual que tan amablemente me enlazaba el compañero, y espero encontrar solución, pero he preferido postearlo aqui por si alguien estaba en un caso similar.

Muchas gracias a todos.

un saludo,
Responder Con Cita
  #4  
Antiguo 04-06-2007
zafmanjp zafmanjp is offline
Registrado
 
Registrado: feb 2007
Posts: 5
Poder: 0
zafmanjp Va por buen camino
Intraweb

NO te compliques. Investiga y hazlo con Intraweb verás que es mas facil.
Responder Con Cita
  #5  
Antiguo 04-06-2007
Avatar de courtois
courtois courtois is offline
Miembro
 
Registrado: abr 2006
Ubicación: Mexico DF
Posts: 200
Poder: 19
courtois Va por buen camino
Si lo que quieres es hacer una interface via web, ciertamente intraweb podria ser una buena opción ya que no vas a cambiar mucho el codigo de control que ya te fuinciona, unicamente modificaras la interface, otra opcion seria hacerlo en asp.net pero tendras que cambiar no solo la interface sino el codigo que usas para controlar. Ahora si el problema unicamente es controlarlo desde internet, sin importar la inteface, pues no le muevas nada a tu programa, y simplemente configurate una maquina como un servidor de terminal, ya sea terminal server o vnc server y accedes desde internet y controlas todo como siempre.
Responder Con Cita
  #6  
Antiguo 05-06-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
Gracias a todos por contestar.

En terminal server ya lo tengo, es mi solución actual... el problema es que solo permite un usuario simultáneo, ya que mi programa utiliza un puerto serie para comunicarse, y éste no permite que se abran varias instancias del programa con el puerto serie "ocupado" en ambas.

La solución que encontré fue crear una tabla de usuarios, en los que los clientes se conectaban, y si habia un usuario conectado, lo desconectaba, previo aviso, y conectaba al nuevo usuario.

No quedó mal, pero es "poco elegante".

Lo intentaré con intraweb de momento y ya os cuento como quedo. De todas formas si alguien tiene otras opciones válidas estaria encantado de leeros

un saludo,
Responder Con Cita
  #7  
Antiguo 05-06-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
una duda que me asalta.

¿Con intraweb puedo controlar el puerto serie (comunicaciones) o bien deberia mantener mi instancia de la aplicación original y realizar otra aplicación intraweb y comunicar ambas?

Iré haciendo pruebas de todo ello.

un saludo,
Responder Con Cita
  #8  
Antiguo 05-06-2007
Avatar de courtois
courtois courtois is offline
Miembro
 
Registrado: abr 2006
Ubicación: Mexico DF
Posts: 200
Poder: 19
courtois Va por buen camino
tu conexion la haras de la misma forma en que lo hiciste, IntraWeb solo te provee la interface web, de cualquier manera, la conexion del puerto serie tendras que modificarla para que soporte la concurrencia, respecto a lo de terminal server, seguramente configuraste el escritorio remoto de XP, por eso es que no te permite usuarios simultaneos, el terminal server de windows 2003 si te soporta usuarios simultaneos y muchas mas opciones de configuración del entorno, pero de todas formas no te salvas de modificar la conexion al puerto serie para que te soporte concurrencia
Responder Con Cita
  #9  
Antiguo 06-06-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
Cita:
Empezado por courtois
tu conexion la haras de la misma forma en que lo hiciste, IntraWeb solo te provee la interface web, de cualquier manera, la conexion del puerto serie tendras que modificarla para que soporte la concurrencia, respecto a lo de terminal server, seguramente configuraste el escritorio remoto de XP, por eso es que no te permite usuarios simultaneos, el terminal server de windows 2003 si te soporta usuarios simultaneos y muchas mas opciones de configuración del entorno, pero de todas formas no te salvas de modificar la conexion al puerto serie para que te soporte concurrencia
Perdon... no me expliqué bien... el escritorio remoto lo utilizo en los clientes... en el servidor tengo configurado el terminal server y si que me soporta varios usuarios simultáneos, pero como bien dices el puerto serie solo soporta uno, con lo que pierdo funcionalidad.

Tal como lo tengo ahora pasando el proyecto a Intraweb, he conseguido realizar las comunicaciones serie en el propio ejecutable que se encarga de hacer de servidor web. Ahora, poco a poco, iré pasando las variables de estado que esta comunicación realizará para mostrarla en tiempo real a los clientes.

Seguiré posteando mis (lentos) avances en este hilo por si le pueden servir en el futuro a alguien en un caso similar.

Gracias por vuestra ayuda. Sois geniales.

un saludo,
Responder Con Cita
  #10  
Antiguo 06-06-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
Se me ha olvidado postear 2 problemas que estoy teniendo:

El puerto de comunicaciones web, lo abro en el firewall de windows xp Sp2 pero pese a ello no me permite el acceso desde otro ordenador de la misma área local. Eso se une a que pese a indicarle un puerto al servidor que configura Intraweb, sigue poniendome un puerto aleatorio en cada ejecución.

Tampoco estoy pudiendo declarar variables globales que estén disponibles para todos los clientes web que se conecten.

Seguiré indagando

un saludo,
Responder Con Cita
  #11  
Antiguo 07-07-2007
phrodo phrodo is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
phrodo Va por buen camino
Bueno... voy posteando mis avances y mis dudas con Intraweb.

He conseguido la creacion de variables globales, y ya consigo que el puerto de conexión no sea aleatorio.

Tambien he conseguido ya que los clientes interactuen perfectamente con la aplicación que hace de servidor web. (Comandos de ejecución al dispositivo serie)

El problema que estoy teniendo es el siguiente. En mi aplicación necesito un refresco de pantalla para cambiar los valores de una imagen (luz encendida, luz apagada). Cuando un usuario pulsa a un botón debe visualizarse una imagen en todos los clientes como que la luz está encendida.

Para ello utilizo un temporizador que ejecuto cada cierto tiempo en cada página. Mi problema: Que el parpadeo de pantalla es evidente y a veces no es necesario (cuando nadie ha tocado nada) pero el temporizador no se deja activar o desactivar cuando me da la gana. Si no lo activo en el create de la página, ya no se ejecuta.

La solución que he pensado es que el servidor se encargue de controlar si hay cambios que visualizar en la página (esto ya lo he conseguido ). Si esto es así, que lance un procedimiento de refresco de pantalla (esto no lo he conseguido ) No he conseguido que desde el módulo "servercontroller" pueda acceder a los formularios de cada cliente y así hacer un refresco general en el PC de cada cliente.

No se si lo que he propuesto se puede hacer... pero creo que debe ser muy usual para otros casos en los que por ejemplo, haya cambios en una base de datos y se refresque la pantalla del cliente cuando otro conectado haga un cambio en esa tabla visualizada (por ejemplo) mi caso es muy similar, pero no tengo ni idea de como hacerlo. Si se pudiera hacer con tablas, tambien me serviria, puesto que no tendria más que mantener una tabla con los estados actuales de todos las luces de la instalación.

En fin, que me he enrollado y os he dormido a todos. Si podeis darme una ayudita mínima os estaria eternamente agradecido. Yo solo puedo hacer que ir posteando mis avances para que les pueda servir a otro compañero en una situación similar a la mia

un saludo y muchisimas gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comunicaciones electronicas EDI Toni Conexión con bases de datos 0 18-04-2006 13:06:34
La Unión Europea puso en marcha un plan para grabar todas las comunicaciones ptt Noticias 3 24-11-2005 22:31:51
Parlamento europeo desestima intervención comunicaciones Casimiro Notevi Noticias 0 28-09-2005 10:01:33
Ayuda sobre comunicaciones Jobev Lee Internet 1 14-09-2005 01:12:40
Funciones y Procedimietos para comunicaciones con Lpt1 en ensamblador. gapat Varios 3 09-06-2004 20:04:16


La franja horaria es GMT +2. Ahora son las 14:53:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi