SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: softevolutions en Martes 15 de Junio de 2010, 11:18

Título: Comunicacion serie con centralita siemens h150e
Publicado por: softevolutions en Martes 15 de Junio de 2010, 11:18
Necesito obtener información de llamadas de una centralita siemens h150e. No he encontrado documentación sobre las estructuras que emite la centralita. Si puedo conectarme, pero no se que estructuras debo obtener. ¿Alguno ha trabajado ya con alguna centralita?.

Gracias de antemano
Título: Re: Comunicacion serie con centralita siemens h150e
Publicado por: rfog en Jueves 1 de Julio de 2010, 10:43
Vete al fabricante de la misma y pídele las especificaciones. A ves las dan gratis, a veces tienes que pagar, a veces tienes que firmar un NDA (acuerdo de no divulgación), y a veces es todo a la vez.
Título: Re: Comunicacion serie con centralita siemens h150e
Publicado por: softevolutions en Jueves 1 de Julio de 2010, 11:02
Gracias por la respuesta, pero ya lo he intentado y ha sido .... imposible. También lo he intentado con el distribuidor oficial de la zona y lo único que he conseguido es que comenten que la comunicación es facil, que lea TODO lo que haya y que me será facil deducir la estructura de datos que devuelve.

La semana que viene empiezo a trabajar con la centralita y cuando consiga tenerlo listo, lo publicaré como articulo en el foro (si es que puedo, claro), por si le sirve de ayuda a alguien mas.

Un saludo
Título: Re: Comunicacion serie con centralita siemens h150e
Publicado por: rfog en Jueves 1 de Julio de 2010, 11:11
Pues vaya mierd@ de empresa...
Título: Re: Comunicacion serie con centralita siemens h150e
Publicado por: softevolutions en Martes 12 de Octubre de 2010, 12:24
Ya he resuelto el problema:

La lectura del puerto es como siempre se ha hecho, con una lectura a un Comm estandar.

Código: C++
  1.   HANDLE hSer;
  2.   COMMTIMEOUTS ctmoNew, ctmoOld;
  3.   char InBuff[500];
  4.   DWORD dwBytesRead;
  5.  
  6.       if( !ReadFile(hSer, InBuff, sizeof(InBuff), &dwBytesRead, NULL) ) {
  7.         ShowMessage( "ERROR: " + String(GetLastError()) );
  8.       }
  9.       else {
  10.         if( dwBytesRead > 0 ) {
  11.           ShowMessage( String(InBuff).Trim() );    
  12.           for( int i=0; i<500; i++) InBuff[0] = ' ';
  13.           PurgeComm(hSer,PURGE_TXCLEAR);      
  14.         }
  15.       }
  16.  
  17.  

Lo que he puesto aquí es mas o menos orientativo, ya que mi codigo real son algunas lineas mas, ya que entre otras cosas, tengo que interpretar lo que devuelve en la varialbe InBuff.

Bueno, el caso por el que no podia obtener nada del puerto en un principio es por que la dichosa centralita está configurada para "contestar" por el puerto Comm SOLO a la aplicación del fabricante, así que por eso a mi no me devolvia nada, a pesar de tener el codigo 100% correcto.

Al final se solucionó facilmente, usando una aplicación de configuración de centralitas llamado "Siemens HICOM 150  E  OFFICE Handbuch und Assistant E".

Con este software puede configurar cambiando el valor de un desplegable para indicarle a la centralita que emitiese también por el Comm correspondiente.

Con eso se solucionaron todos mis problemas con la centralita.

De todas formas, si necesitais mas información al respecto, me lo comentais.