Sei sulla pagina 1di 94

MANUAL

DEDE
PROGRAMACIN
MANUAL
PROGRAMACIN

Versin de software 3.5.x


Versin de firmware 3.5.x

www.quercus.biz
www.quercus-technologies.com
www.quercus.com.br

SmartLPR Manual de Programacin (v 3.5.x)


Enero del 2014
2014 Quercus Technologies. Derechos reservados.
Este manual, as como el sistema descrito en l, se proporcionan bajo licencia y pueden ser usados nicamente de
acuerdo con los trminos descritos por dicha licencia. El contenido de este manual es proporcionado exclusivamente
para uso informativo y puede ser cambiado sin previo aviso. Ninguna parte de esta publicacin debe ser reproducida,
ubicada en un sistema de distribucin, o divulgada de ninguna manera sin el previo consentimiento de Quercus
Technologies.

Index:
1. Introduccin..........................................................................................................7
2. Programacin bsica...............................................................................................9
2.1. C++...............................................................................................................9
2.1.1. Gestin de memoria................................................................................11
2.1.2. Creacin del ejecutable............................................................................12
2.2. C:................................................................................................................12
2.2.1. Creacin del ejecutable............................................................................15
2.3. Otros ejemplos..............................................................................................15
3. Referencia de clases..............................................................................................16
3.1. Jerarqua.......................................................................................................16
3.2. Clases...........................................................................................................16
3.3. Clase System.................................................................................................17
3.3.1. Propiedades............................................................................................17
3.3.2. Mtodos.................................................................................................17
3.3.3. Eventos..................................................................................................18
3.4. Clase Remotes...............................................................................................20
3.4.1. Propiedades............................................................................................20
3.5. Clase Remote................................................................................................21
3.5.1. Propiedades............................................................................................21
3.5.2. Mtodos.................................................................................................22
3.6. Clase Lanes...................................................................................................23
3.6.1. Propiedades............................................................................................23
3.7. Clase Lane....................................................................................................23
3.7.1. Propiedades............................................................................................23
3.7.2. Mtodos.................................................................................................25
3.8. Clase LaneStatus...........................................................................................28
3.8.1. Propiedades............................................................................................28
3.9. Clase Car......................................................................................................29
3.9.1. Propiedades............................................................................................29
3.9.2. Mtodos.................................................................................................33
3.10. Clase Box/Rectangle2...................................................................................34
3.10.1. Propiedades..........................................................................................34
3.11. Clase VersionInfo.........................................................................................35
3.11.1. Propiedades..........................................................................................35
3.12. Clase Chars.................................................................................................36
3.13. Clase Char...................................................................................................36
Quercus Technologies

3.13.1. Propiedades..........................................................................................37
3.14. Clase Notification.........................................................................................37
3.14.1. Propiedades..........................................................................................37
3.15. Clase Configuration......................................................................................38
3.15.1. Mtodos...............................................................................................38
3.16. Clase SystemInformation..............................................................................44
3.16.1. Propiedades..........................................................................................44
3.16.2. Mtodos...............................................................................................45
3.17. Clase SettingsEntry.....................................................................................45
3.17.1. Propiedades..........................................................................................46
3.17.2. Mtodos...............................................................................................46
4. Protocolo de comunicaciones..................................................................................47
4.1. Formato de los mensajes................................................................................48
4.2. Versiones de los mensajes..............................................................................49
4.3. Mensajes de eventos......................................................................................50
4.3.1. InputChanged.........................................................................................50
4.3.2. CarMovement........................................................................................51
4.3.3. LicenseInfo.............................................................................................51
4.3.4. Notification.............................................................................................53
4.4. Mensajes de peticin......................................................................................53
4.4.1. VersionQuery..........................................................................................53
4.4.2. Reboot...................................................................................................54
4.4.3. Output...................................................................................................54
4.4.4. Trigger...................................................................................................55
4.4.5. Status....................................................................................................55
4.4.6. Input ....................................................................................................56
4.4.7. Activate.................................................................................................56
4.4.8. GetPicture..............................................................................................57
4.4.9. CurrentFrame.........................................................................................58
4.4.10. ActivateFocus........................................................................................58
4.5. Mensajes de confirmacin...............................................................................59
4.5.1. ACK.......................................................................................................59
4.5.2. NAK.......................................................................................................59
4.6. Mensajes de configuracin...............................................................................60
4.6.1. Ping.......................................................................................................60
4.6.2. Login.....................................................................................................61
4.6.3. Logout...................................................................................................61
4.6.4. PasswordChange.....................................................................................62

Quercus Technologies

4.6.5. SyncTime...............................................................................................62
4.6.6. SetTime.................................................................................................63
4.6.7. ExportLog...............................................................................................63
4.6.8. SystemInfo.................................................................................................64
4.6.9. ExportStatus...........................................................................................65
4.6.10. ImportConfiguration...............................................................................65
4.6.11. ExportConfiguration...............................................................................66
4.6.12. ApplyChanges.......................................................................................66
4.6.13. DiscardChanges.....................................................................................67
4.6.14. GetEntriesCount....................................................................................67
4.6.15. GetEntry...............................................................................................68
4.6.16. SetEntry...............................................................................................68
4.6.17. RestoreEntry.........................................................................................69
4.6.18. RestoreFirmware...................................................................................69
4.6.19. UpdateFirmware....................................................................................70
4.6.20. FormatRWPartition ................................................................................70
4.6.21. Restart ................................................................................................71
4.6.22. GetLanguage............................................................................................71
4.6.23. SetLanguage.........................................................................................72
5. Simuladores SmartLPR ......................................................................................73
5.1. Configuracin de la unidad..............................................................................73
5.1.1. Comunicacin serie .................................................................................75
5.2. Configuracin de la simulacin.........................................................................76
5.2.1. Eventos de cambio en la cmara...............................................................77
5.2.2. Eventos de cambio en las E/S...................................................................78
5.2.3. Eventos de cambio de estado ...................................................................78
5.3. Ejecucin......................................................................................................79
5.3.1. Simulador...............................................................................................79
5.3.1.1. Interfaz grfica.................................................................................81
5.3.2. Adaptador serie ......................................................................................82
5.4. Ejemplos de simulacin...................................................................................83
5.4.1. SmartLPR Access: Ciclo de un vehculo....................................................83
5.4.2. SmartLPR Access: Ciclo de un vehculo con cola ......................................83
5.4.3. SmartLPR Access: Marcha atrs..............................................................84
5.4.4. SmartLPR Access: Carril de retorno.........................................................84
5.4.5. SmartLPR Access: Modo software...........................................................85
5.4.6. SmartLPR Speed: Modo Hardware..........................................................85
5.4.7. SmartLPR Speed: Modo continuo............................................................85

Quercus Technologies

5.4.8. SmartLPR Speed: Modo software............................................................86


5.4.9. SmartLPR unit: Cambios en la tarjeta E/S................................................86
5.4.10. SmartLPR unit: Errores de hardware.....................................................87
6. Funciones adicionales............................................................................................88
6.1. Lista de observadores.....................................................................................88
6.2. Informacin por FTP.......................................................................................89
6.2.1. Fichero XML............................................................................................89
6.2.2. Fichero JPEG...........................................................................................91
6.3. Encriptacin de protocolo................................................................................91
6.3.1. Formato de encriptacin...........................................................................92
6.3.2. Servidor de SFTP ....................................................................................93
7. Apndice A: Soporte.............................................................................................94

Quercus Technologies

SmartLPR

Manual de Programacin

1. Introduccin
SmartLPR se comunica con la aplicacin cliente mediante el protocolo descrito en el captulo
4. Protocolo de comunicaciones. El mismo protocolo se usa para la comunicacin RS-232 y
UDP/Ethernet.
Para la comunicacin UDP/Ethernet el protocolo se encuentra recubierto por libreras C y C++
compatibles con Microsoft Windows y GNU/Linux. Estas libreras simplifican la comunicacin de
la aplicacin cliente con varios equipos SmartLPR y aaden ciertas funcionalidades, como el
registro de histricos.
A continuacin se detallan las ventajas e inconvenientes de cada mtodo de integracin
Librera de clases en C++: Librera de enlace dinmico para Windows y GNU/Linux

que proporciona una visin orientada a objetos del sistema. Junto con la librera de
enlace dinmico se proporciona el cdigo fuente de un proxy en cdigo C++ totalmente
portable para que la librera

pueda usarse desde cualquier compilador de C++.

Implementa una interfaz de alto nivel que proporciona una gran sencillez de
programacin desde C++. Disponible para sistemas Windows y GNU/Linux.
Librera de funciones en C: librera de enlace dinmico para Windows y GNU/Linux

que proporciona una visin orientada a funciones del sistema. Del mismo modo que la
librera en C++, junto con la librera se proporciona el cdigo fuente de un proxy en
cdigo C totalmente portable para que la librera

pueda usarse desde cualquier

compilador de C. Tambin gestiona la comunicacin simultnea con varios carriles de


forma transparente. Permite programar en C manteniendo la visin de alto nivel que
proporciona la librera en C++. Puede usarse tanto desde C como desde C++.
Disponible para sistemas Windows y GNU/Linux.
Mediante protocolo UDP o serie propio de SmartLPR : Se proporcionan las

definiciones del protocolo usado para la comunicacin en un fichero de cabecera (SA.h),


as como ejemplos de su uso programados en lenguaje ANSI C.

Adems, se

proporcionan rutinas bsicas para las comunicaciones UDP en los ficheros (UDPTools.c y
UDPTools.h). Con ellas puede programarse una aplicacin cliente que interacte con
SmartLPR

prcticamente desde cualquier dispositivo que disponga de capacidad de

transmisin por red o serie.

Quercus Technologies

SmartLPR

Manual de Programacin

La relacin existente entre las diversas capas puede verse en el siguiente esquema (en l se
supone que la aplicacin cliente est programada en C++).

Mquina cliente
Aplicacin cliente

Proxy C++
Proxy C

Librera de enlace
dinmico

Protocolo UDP

Unidad SmartLPR

Unidad SmartLPR

Como puede comprobarse, los dos mtodos de programacin de alto nivel (C/C++) no son
ms que recubrimientos sucesivos en torno a una librera de enlace dinmico, que es la que
contiene toda la funcionalidad del sistema.
Debe notarse que, pese a las diversas capas que componen el sistema, estas no aaden
ninguna sobrecarga apreciable al funcionamiento del sistema (incluso en mquinas de escaso
rendimiento). As pues, es igual de eficiente programar sobre la librera en C o C++.

Quercus Technologies

SmartLPR

Manual de Programacin

2. Programacin bsica
A continuacin se describen los pasos necesarios para desarrollar un programa mnimo capaz
de recibir los movimientos de vehculos de SmartLPR.
En este captulo se presuponen unos conocimientos bsicos de programacin (C y C++). Si
usted trabaja habitualmente con alguna de estas tecnologas no tendr ningn problema en
seguir los ejemplos.
El cdigo fuente de los ejemplos se encuentra en <carpeta instalacin>/Samples.

2.1. C++
El mtodo usado en la librera C++ para generar eventos, de forma que la implementacin
quede a cargo de la aplicacin cliente, es obligando a esta a implementar una clase que
cumpla una determinada interfaz. Cuando se produzca un evento en un carril del sistema
SmartLPR (por ejemplo la llegada de un vehculo) la librera invocar el mtodo
correspondiente (OnCarArrival2 en este caso). Debe tener en cuenta que estas funciones se
invocarn desde hilos (threads) de ejecucin diferentes del hilo principal, por lo que no podr
usarse en su implementacin cdigo que no sea seguro respecto a hilos o que no pueda
ejecutarse fuera del hilo principal.
A continuacin se muestra un programa mnimo en C++ que es capaz de capturar los eventos
del sistema SmartLPR. Corresponde al ejemplo Sample1.

#include <stdio.h>
#include "SAWrapperCpp"
using namespace SmartLprAIO;
class CEventHandler: public ISystemEH
{
public:
virtual void OnCarArrival2(Car car)
{
printf("OnCarArrival %d,%d,%d\n", car.get_Lane().get_Parent().get_Id(),
car.get_Lane().get_Id(),car.get_Id());
}
virtual void OnCarHandled2(Car car)
{
char license[32];

car.get_License(license,sizeof(license));
printf("OnCarHandled %d,%d,%d,%s\n",
car.get_Lane().get_Parent().get_Id(),
car.get_Lane().get_Id(), car.get_Id(),license);

Quercus Technologies

SmartLPR

Manual de Programacin

virtual void OnCarDeparture2(Car car)


{
printf("OnCarDeparture %d,%d,%d\n ",
car.get_Lane().get_Parent().get_Id(),
car.get_Lane().get_Id(),car.get_Id());

switch(car.get_State())
{
case SA_ON_LANE:
case SA_DEPARTURE_OK:
case SA_DEPARTURE_RETURN:
case SA_DEPARTURE_REVERSE:
default:
}

printf("SA_ON_LANE\n");
printf("SA_DEPARTURE_OK\n");
printf("SA_DEPARTURE_RETURN\n");
printf("SA_DEPARTURE_REVERSA\n");
printf("Unknown Car State\n");

break;
break;
break;
break;
break;

};
CEventHandler EventHandler;
int main(int argc, char *argv[])
{
if(SmartLPRLoad()==-1) return -1;
if(!System::Initialize("SmartLPR.ini","SmartLPR.log",&EventHandler)) return -1;
printf("Press [RETURN] to exit\n");
getchar();
System::Terminate();
SmartLPRUnload();
}

return 0;

Partes que componen el cdigo del ejemplo:


#include SAWrapperCpp
Es el nico fichero de cabecera necesario para interactuar con SmartLPR desde C++.
using namespace SmartLprAIO;
Usar el espacio de nombres SmartLprAIO. Todas las clases estn definidas dentro del espacio
de nombres SmartLprAIO para evitar colisiones de nombres con otras clases.
class CEventHandler: public ISystemEH
Clase que implementar el cdigo cliente que se ejecutar con los eventos. Al hacerla derivar
de ISystemEH se consigue que est obligada a implementar los mtodos abstractos de esta
(On...). Si no est interesado en alguno de los eventos, bastar con dejar la implementacin
del mtodo correspondiente vaca.
CEventHandler EventHandler;
Objeto que capturar los eventos.

Quercus Technologies

10

SmartLPR

Manual de Programacin

if(SmartLPRLoad()==-1) return -1;


Carga de la librera SmartLPR.
if(!System::Initialize("SmartLPR.ini","SmartLPR.log",&EventHandler)) return -1;
Inicializacin de la librera de clases SmartLPR . Este debe ser el primer mtodo que se
invoque. Es el encargado de inicializar el sistema, inicializar el sistema de eventos y establecer
comunicaciones con los sistemas SmartLPR

que se hayan configurado en el fichero de

inicializacin SmartLPR.ini. En el fichero SmartLPR.log se encontrar el registro del


funcionamiento del sistema. Como puede comprobarse, el objeto de tipo CEventHandler,
anteriormente creado, se le pasa a la librera como parmetro para que esta pueda invocar sus
mtodos cuando sea necesario.
A partir de este punto, si se pone en marcha el simulador SASimu o se ha configurado el
sistema para que comunique con sistemas SmartLPR reales, se empezarn a recibir los
eventos que estos produzcan.
System::Terminate();
Finalizar la ejecucin de la librera de clases de SmartLPR.
SmartLPRUnload();
Descarga de la librera SmartLPR.

2.1.1. Gestin de memoria


Debe notarse que toda la gestin de memoria de la librera C++ est oculta (mediante el uso
de punteros inteligentes) de forma que el programador pueda despreocuparse de la creacin
y destruccin de objetos. Todos los objetos que componen la librera pueden crearse en la pila,
pasarse como parmetros por valor de funciones, retornarse, etc. sin que ello suponga una
prdida de memoria ni de rendimiento. Por ejemplo la siguiente construccin es perfectamente
vlida:

Lane EjemploDeUsoDeObjetos(Remote remote)


{
Lane laneA, laneB;
laneA=remote.get_Lanes().Item(0);
laneB=laneA;
return laneB;
}

Aunque la funcin del ejemplo no contiene cdigo til s puede verse el uso que se hace de los
Quercus Technologies

11

SmartLPR

Manual de Programacin

objetos:

Lane EjemploDeUsoDeObjetos(Remote remote)

Pueden pasarse dichos objetos como parmetros de funciones sin usar punteros ni
referencias y sin afectar al rendimiento de la aplicacin.
En un sistema de objetos clsico en C++ esta invocacin supondra una penalizacin en
el rendimiento y una fuente potencial de errores ya que se invocara el constructor de
copia del objeto para pasar dicha copia como parmetro de la funcin. Al retornar la
funcin se invocara el destructor de la copia con el consiguiente peligro que esto
supone si el objeto contiene, internamente, punteros.
En SmartLPR

todos estos problemas han sido superados, ya que el constructor de

copia solamente implica 4 bytes de memoria y en la destruccin de la copia el objeto


real no se destruye mientras quede alguna copia sin destruir.
laneA=remote.get_Lanes().Item(0);

laneB=laneA;
return laneB;
Todos los mtodos de SmartLPR devuelven objetos, nunca punteros ni referencias. El
programador puede manipular dicho objeto con total libertad (puede duplicarlo,
retornarlo, etc. y seguir siendo vlido).

2.1.2. Creacin del ejecutable


Visual Studio
Abra el entorno Samples.sln que se encuentra en la carpeta Samples.
Pulse el botn de la derecha del ratn sobre Sample1 y seleccione Project only Build

only Sample1.
Linux
Abra una consola.
Sitese en la carpeta Samples/Sample1.
Ejecute el comando "make".

2.2. C:
El mtodo usado en la librera C++ para generar eventos, de forma que la implementacin
quede a cargo de la aplicacin cliente, es obligando a esta a implementar una serie de
funciones que cumplan una determinada interfaz. Cuando se produzca un evento en un carril
del sistema SmartLPR (por ejemplo la llegada de un vehculo) la librera invocar el mtodo
Quercus Technologies

12

SmartLPR

Manual de Programacin

correspondiente (OnCarArrival2 en este caso). Debe tener en cuenta que estas funciones se
invocarn desde hilos (threads) de ejecucin diferentes del hilo principal, por lo que no podr
usarse en su implementacin cdigo que no sea seguro respecto a hilos o que no pueda
ejecutarse fuera del hilo principal.
A continuacin se muestra un programa mnimo en C que es capaz de capturar los eventos del
sistema SmartLPR. Corresponde al ejemplo Sample2.
#include <stdio.h>
#include "SAWrapperC.h"
#include "SA.h"
void __stdcall OnCarArrival2(int car)
{
int remote;
int lane;
lane=SA_Car_get_Lane(car);
remote=SA_Lane_get_Parent(lane);

printf("OnCarArrival %ld,%ld,%ld\n",SA_Remote_get_Id(remote),SA_Lane_get_Id(lane),
SA_Car_get_Id(car));

void __stdcall OnCarHandled2(int car)


{
char license[32];
SA_Car_get_License(car,license,sizeof(license));
printf("OnCarHandled %ld,%s\n", SA_Car_get_Id(car),license);
}
void __stdcall OnCarDeparture2(int car)
{
int remote;
int lane;
lane=SA_Car_get_Lane(car);
remote=SA_Lane_get_Parent(lane);
printf("OnCarDeparture %ld,%ld,%ld,",SA_Remote_get_Id(remote),SA_Lane_get_Id(lane),
SA_Car_get_Id(car));

switch(SA_Car_get_State(car))
{
case 0: printf("ON_LANE\n");
case 1: printf("DEPARTURE_OK\n");
case 2: printf("DEPARTURE_RETURN\n");
case 3: printf("DEPARTURE_REVERSE\n");
case 4: printf("UNDEFINED\n");
default: printf("Unknown Car State\n");
}

break;
break;
break;
break;
break;
break;

int main(int argc, char *argv[])


{
if(SmartLPRLoad()!=0) return -1;
if(!SA_System_Initialize("SmartLPR.ini","SmartLPR.log", OnCarArrival2, OnCarHandled2,
OnCarDeparture2, NULL, NULL)) return -1;
printf("Press [RETURN] to exit\n");
getchar();
SA_System_Terminate();

Quercus Technologies

13

SmartLPR

Manual de Programacin

SmartLPRUnload();
}

return 0;

Partes que componen el cdigo del ejemplo:


#include SAWrapperC.h
Es el nico fichero de cabecera necesario para interactuar con SmartLPR desde C.
void __stdcall OnCarArrival2(int car)
void __stdcall OnCarHandled2(int car)
void __stdcall OnCarDeparture2(int car)
Implementacin del cdigo cliente que se ejecutar con los eventos. Las funciones deben tener
exactamente el mismo formato que se ha definido en el fichero de cabecera SAWrapperC.h o
de lo contrario se producirn errores en tiempo de compilacin. Si no est interesado en
alguno de los eventos, no es necesario implementarlo.
if(SmartLPRLoad()==-1) return -1;
Descarga de la librera SmartLPR.
if(!SA_System_Initialize("SmartLPR.ini","SmartLPR.log", OnCarArrival2,
OnCarHandled2, OnCarDeparture2, NULL, NULL)) return -1;
Inicializacin del sistema. Es el encargado de inicializar el sistema, inicializar el sistema de
eventos y establecer comunicaciones con los sistemas SmartLPR que se hayan configurado en
el fichero de inicializacin SmartLPR.ini. En el fichero SmartLPR.log se encontrar el
registro del funcionamiento del sistema. Como puede comprobarse, las funciones previamente
definidas se pasan como parmetros de esta funcin, para que SmartLPR pueda invocarlas
cuando se produzcan eventos.
A partir de este punto, si se pone en marcha el simulador SASimu o se ha configurado el
sistema para que comunique con sistemas SmartLPR reales, se empezarn a recibir los
eventos que estos produzcan.
SA_System_Terminate();
Finalizar la ejecucin de la librera de clases de SmartLPR.
SmartLPRUnload();
Descarga de la librera SmartLPR.
Quercus Technologies

14

SmartLPR

Manual de Programacin

2.2.1. Creacin del ejecutable


Visual Studio
Abra el entorno Samples.dsw que se encuentra en la carpeta Samples.
Abra el fichero Samples.sln que se encuentra en la carpeta Samples.
Pulse el botn de la derecha del ratn sobre Sample1 y seleccione Project only Build

only Sample2.
Linux
Abra una consola.
Sitese en la carpeta Samples/Sample2.
Ejecute el comando "make".

2.3. Otros ejemplos


En la carpeta <carpeta instalacin>/Samples podr encontrar ms ejemplos de programacin
con SmartLPR. En dicha carpeta podr encontrar un fichero Readme.txt con la descripcin
de los ejemplos que en ella se encuentran.

Quercus Technologies

15

SmartLPR

Manual de Programacin

3. Referencia de clases
En la siguiente referencia podr encontrar la sintaxis de los dos mtodos de programacin (C y
C++). Como todos ellos aportan prcticamente la misma funcionalidad estn documentados
conjuntamente sealndose cuando sea necesario las posibles diferencias entre ellos.

3.1. Jerarqua
El sistema sigue la siguiente divisin jerrquica de objetos:
System
n

Remote systems

Remote
system
n

Lanes

Lane

System: representa la raz del sistema SmartLPR . Proporciona, principalmente una

coleccin de sistemas remotos.


RemoteSystem: representa una agrupacin lgica de las unidades de reconocimiento.

Permite ejecutar acciones simultneamente sobre un grupo de unidades en lugar de


tener que hacerlo individualmente. Cada Sistema Remoto tiene un conjunto de carriles
asociados.
Lane: es la representacin lgica de una unidad de reconocimiento: cmara, sensores,

etc. Equivale directamente a una unidad de reconocimiento SmartLPR.

3.2. Clases
En C y C++ ser necesario llamar a la funcin SmartLPRLoad() para cargar la librera (antes de
cualquier otra llamada), y SmartPLRUnload() al terminar la ejecucin del programa (despus
de la ltima llamada a funciones de la librera) para descargar la librera.
Todos los valores booleanos que se documentan para la librera de C++ se traducen a la
librera de C como:

Quercus Technologies

16

SmartLPR

Manual de Programacin

C++
Verdadero
Falso

C:
Valor entero diferente de 0
0

3.3. Clase System


Representa la raz de la jerarqua de objetos que componen el sistema SmartLPR .

3.3.1. Propiedades
Status

C++:

static bool get_Status()

C:

int System_get_Status ( )

Devuelve el estado del sistema. Ser verdadero si todos los componentes del sistema
trabajan correctamente, o falso si hay error en alguno de ellos (p.ej. en una cmara).
RemoteSystems

C++:

static Remotes get_RemoteSystems()

C:

No existe.

En C++ se devuelve la coleccin de sistemas remotos que forman el sistema


SmartLPR.
En C no existe una representacin de la coleccin RemoteSystems sino mtodos para
acceder directamente a las propiedades de dicha coleccin:
int System_get_RemoteSystems_Count ( ): Nmero de sistemas remotos que hay en el
sistema SmartLPR.
int System_get_RemoteSystems_Item ( int item ): devuelve el sistema remoto que hay
en la posicin indicada dentro de la coleccin de sistemas remotos del sistema
SmartLPR (a partir de cero).

3.3.2. Mtodos
Initialize

C++: static bool Initialize ( const char *iniFile, const char *logFile, ISystemEH
*systemEH )
C:

int System_Initialize ( const char *iniFile, const char* logFile,


ISYSTEMEH_ONCARARRIVAL2, ISYSTEMEH_ONCARHANDLED2,

Quercus Technologies

17

SmartLPR

Manual de Programacin

ISYSTEMEH_ONCARDEPARTURE2, ISYSTEMEH_ONNOTIFICATION2,
ISYSTEMEH_ONINPUTCHANGE2)
Inicia el sistema con los ficheros de configuracin y de log indicados.
En C++ se espera la ruta y el nombre del fichero de configuracin y del fichero de log
en los parmetros iniFile y logFile respectivamente.
En C++ el parmetro systemEH es un puntero a un objeto de una clase derivada de
ISystemEH, necesario para lanzar los eventos.
En C se deben pasar los punteros a las funciones a llamar (callbacks) para poder lanzar
los eventos. La declaracin de estas funciones est indicada en el apartado de Eventos.
Si no necesita capturar alguno de los eventos, puede pasar NULL en lugar del puntero a
la funcin de callback.
Resultado de la inicializacin:
C++:

Devuelve verdadero si se ha inicializado correctamente y falso en caso

contrario.
C:

Devuelve un valor diferente de 0 si se ha inicializado correctamente y 0 en caso

contrario.
Terminate

C++:

static void Terminate ( )

C:

void System_Terminate()

Cierra el sistema.

3.3.3. Eventos
En C++ se ha declarado una clase abstracta ISystemEH en la que figura la declaracin de los
mtodos que tratarn los eventos. Deber crearse una clase derivada de ISystemEH e
implementar los mtodos correspondientes a los eventos que se desee capturar.
En C debern implementarse las funciones que tratarn los eventos segn la definicin
indicada en cada uno.
OnCarArrival

C++: void OnCarArrival2 (Car car)


C:

void OnCarArrival2 ( int hCar )

Quercus Technologies

18

SmartLPR

Manual de Programacin

Evento lanzado cuando un coche llega al carril. El parmetro car recibe los datos del
vehculo (consulte la clase Car). En C el parmetro hCar es un manejador de Car.
En el caso de que sea necesario quedarse con el elemento car fuera del mbito de la
funcin, se deber llamar a la funcin Car_AddRef para aadir una referencia (ver
mtodo AddRef de la clase Car), y a la funcin Car_Release para eliminar la referencia y
liberar la memoria cuando no se necesite ms (ver mtodo Release de la clase Car).
OnCarHandled

C++:

void OnCarHandled2 ( Car car )

C:

void OnCarHandled2 ( int hCar )

Evento lanzado cuando se ha procesado una matrcula. El parmetro car contiene


informacin sobre la matrcula reconocida (ver clase Car). El nombre obedece a razones
histricas

ya

que

anteriormente

exista

un

evento

OnCarHandled

con

un

comportamiento diferente.
En C el parmetro hCar es un manejador de Car. En el caso de que sea necesario
quedarse con el elemento Car fuera del mbito de la funcin, se deber llamar a la
funcin Car_AddRef para aadir una referencia (ver mtodo AddRef de la clase Car), y
a la funcin Car_Release para eliminar la referencia y liberar la memoria cuando no se
necesite ms (ver mtodo Release de la clase Car). Ejemplo:
void OnCarHandled(int hEvent, int hCar)
{
VariableGlobalCar=hCar;
Car_AddRef(hCar);
}
...
void TratarVariableGlobal()
{
char matricula[100];
Car_get_License(VariableGlobalCar,matricula,sizeof(matricula));
printf("La matrcula del vehculo es %s\n ",matricula);
}

Car_Release(VariableGlobalCar);

OnCarDeparture

C++: void OnCarDeparture2 ( Car car )


C:

void OnCarDeparture2 ( int hCar )

Evento lanzado cuando un coche abandona el carril. El parmetro car recibe los datos
del vehculo (consulte la clase Car). En C el parmetro hCar es un manejador de

Quercus Technologies

19

SmartLPR

Manual de Programacin

Car. En el caso de que sea necesario quedarse con el elemento Car fuera del mbito de
la funcin, se deber llamar a la funcin Car_AddRef para aadir una referencia (ver
mtodo AddRef de la clase Car), y a la funcin Car_Release para eliminar la referencia y
liberar la memoria cuando no se necesite ms (ver mtodo Release de la clase Car).

OnNotification

C++: void OnNotification2 ( Notification notification )


C:

void OnNotification2 ( int hNotification )

Evento lanzado cuando ocurre algn incidente excepcional (ver clase Notification para
ms detalles).
En C, el parmetro hNotification es un manejador de Notification.
OnInputChange

C++: void OnInputChange2 ( Lane lane, long bit, bool value )


C:

void OnInputChange2 ( int lane, long bit, int value )

Evento lanzado cuando una entrada programada (entrada no usada como sensor) de
una tarjeta de E/S ha cambiado de valor. El parmetro lane es el carril donde ha
ocurrido el evento. El parmetro bit es el nmero de bit (a partir de 0) que ha
cambiado y value es el nuevo valor (verdadero si activo, falso si inactivo).

3.4. Clase Remotes


Coleccin de sistemas remotos que hay en el sistema SmartLPR .

3.4.1. Propiedades
Count

C++:

int Count()

C:

No existe, consultar System_get_RemoteSystems_Count() de System.

Nmero de sistemas remotos que hay en el sistema SmartLPR.


Item

C++:

Remote Item ( int item )

C:

No existe, consultar System_get_RemoteSystems_Item() de System.

Quercus Technologies

20

SmartLPR

Manual de Programacin

Devuelve el sistema remoto que hay en la posicin indicada dentro de la coleccin de


sistemas remotos del sistema SmartLPR.
En C++ en el parmetro item se debe indicar la posicin (la primera posicin es 0).
La posicin que ocupa cada sistema remoto dentro del sistema corresponde al ndice
con el que se han definido en el fichero de inicializacin del sistema.

3.5. Clase Remote


Representa un sistema remoto del sistema SmartLPR .

3.5.1. Propiedades
Parent

C++:

No existe.

C:

No existe.

Devuelve el objeto raz de la jerarqua.


Id:

C++:

long get_Id()

C:

long Remote_get_Id ( int h )

Identificador nico del sistema remoto.


En C, el parmetro h es un manejador del sistema remoto (Remote).
Status

C++:

bool get_Status()

C:

int Remote_get_Status ( int h )

Estado del sistema remoto (falso si error, verdadero si correcto). El estado es correcto
cuando todos los indicadores de estado del sistema remoto y todos sus carriles son
correctos. Si alguno tiene el estado de error, el estado del sistema remoto ser de
error.
CommunicationStatus

C++:

bool get_CommunicationStatus()

C:

int Remote_get_CommunicationStatus ( int h )

Quercus Technologies

21

SmartLPR

Manual de Programacin

Estado de la comunicacin entre el sistema SmartLPR y el sistema remoto (verdadero


si correcto, falso si error).
En C, el parmetro h es un manejador del sistema remoto (Remote).
Lanes
C++:

Lanes get_Lanes()

C:

No existe.

En C++ se devuelve la coleccin de carriles del sistema remoto.


En C no existe una representacin de la coleccin Lanes sino mtodos para acceder
directamente a las propiedades de dicha coleccin:
int Remote_get_Lanes_Count ( int hRemote ): devuelve el nmero de carriles que hay
en el sistema remoto hRemote.
int Remote_get_Lanes_Item ( int hRemote, int item ): devuelve el carril que hay en la
posicin indicada dentro de la coleccin de carriles del sistema remoto hRemote (a
partir de cero).

3.5.2. Mtodos
IsValid

C++:

bool IsValid()

C:

No existe.

Devuelve verdadero si el objeto contiene informacin vlida sobre un sistema remoto, o


falso si la informacin no es vlida. Algunos eventos pueden pasar, en algunos casos,
sistemas remotos vacos. Por ejemplo OnNotification2(...), pasa el sistema remoto y
carril en el que se ha producido la notificacin. Pero hay casos en los que dicha
notificacin no se produce en ningn sistema remoto en concreto, por lo que el sistema
remoto que proporciona no es vlido. En C esto se detecta porque su valor ser 0. En
C++, en cambio, es necesario este mtodo ya que el objeto, al no tratarse de un
puntero, siempre ser correcto.
Reboot

C++:

void Reboot()

C:

void Remote_Reboot ( int h )

Reinicia todos los carriles del sistema remoto.


En C, el parmetro h es un manejador del sistema remoto (Remote).

Quercus Technologies

22

SmartLPR

Manual de Programacin

3.6. Clase Lanes


Coleccin de carriles de un sistema remoto.

3.6.1. Propiedades
Count

C++:

int Count()

C:

No existe, consultar Remote_get_Lanes_Count() de Remote.

Devuelve el nmero de carriles que hay en el sistema remoto.


Item

C++:

Lane Item ( int item )

C:

No existe, consultar Remote_get_Lanes_Item() de Remote.

Devuelve el carril que hay en la posicin indicada dentro de la coleccin de carriles del
sistema remoto.
En C++ en el parmetro item se debe indicar la posicin (la primera posicin es 0).
La posicin que ocupa cada carril dentro de la coleccin corresponde al orden en el que
se han definido en el fichero de inicializacin del sistema. Ejemplo:

[RemoteSystem1]
RSLanes=5,7,2,1

El primer carril ser el que tiene identificador 5, el segundo el 7, etc.

3.7. Clase Lane


Representa un carril (o unidad) del sistema remoto.

3.7.1. Propiedades
Id:

C++:

long get_Id()

C:

long Lane_get_Id ( int h )

Identificador nico del carril en el sistema SmartLPR.

Quercus Technologies

23

SmartLPR

Manual de Programacin

En C el parmetro h es un manejador del carril (Lane).


Parent

C++:

Remote get_Parent()

C:

int Lane_get_Parent ( int h )

Sistema remoto al que pertenece el carril.


En C el parmetro h es un manejador del carril (Lane). Devuelve un manejador del
sistema remoto (Remote).
Active:

C++:

bool get_Active()

C:

int Lane_get_Active ( int h )

Devuelve el estado del carril (verdadero si activo, falso si inactivo).


En C el parmetro h es un manejador del carril (Lane).
Cuando un carril no est activo, no responder a ningn evento de la tarjeta de E/S
(llegadas de vehculos, cambios en los bits de entrada, etc.).
OfflineCar

C++:

Car get_OfflineCar()

C:

int Lane_get_OfflineCar ( int h )

Informacin sobre los datos de reconocimiento actualmente seleccionados del histrico


mediante los mtodos MoveFirst, MoveNext, etc.
En C el parmetro h es un manejador del carril (Lane). Devuelve un manejador de la
informacin de la matrcula (Car). Cuando no se necesite ms el elemento Car se
deber llamar a la funcin Car_Release (ver el mtodo Release de la clase Car) para
liberar la memoria asignada.
Status

C++:

LaneStatus get_Status()

C:

int Lane_get_Status ( int h )

Informacin sobre el estado del carril.


En C el parmetro h es un manejador del carril (Lane).Devuelve un manejador del
estado del carril (LaneStatus).

Quercus Technologies

24

SmartLPR

Manual de Programacin

Configuracin

C++:

Configuration get_Configuration()

C:

int Lane_get_Configuration ( int h )

Sistema de configuracin de la unidad.


En C el parmetro h es un manejador del carril (Lane).

3.7.2. Mtodos
IsValid

C++:

bool IsValid()

C:

No existe.

Devuelve verdadero si el objeto contiene informacin vlida sobre un carril, y falso si la


informacin no es vlida. Algunos eventos pueden pasar, en algunos casos, carriles
vacos. En C esto se detecta porque su valor ser 0. En C++, en cambio, es necesario
este mtodo ya que el objeto, al no tratarse de un puntero, siempre ser correcto.
Activate

C++:

bool Activate ( bool activate = true )

C:

int Lane_Activate ( int h, int v )

Activa/desactiva el carril. Si el valor pasado por parmetro es verdadero el carril


entrar en funcionamiento; si es falso se desactivar y no se generarn eventos
producidos por las E/S. Devuelve verdadero si se ha podido realizar la operacin y falso
en caso contrario.
En C el parmetro h es un manejador del carril (Lane), y en el parmetro v se
pasar un 0 para desactivar el carril, y un valor diferente de 0 para activarlo.
MoveFirst

C++:

void MoveFirst()

C:

void Lane_MoveFirst ( int h )

Asigna a la propiedad OfflineCar la informacin del primer vehculo del histrico.


En C el parmetro h es un manejador del carril (Lane).
MoveNext

Quercus Technologies

25

SmartLPR

Manual de Programacin

C++:

bool MoveNext()

C:

int Lane_MoveNext ( int h )

Asigna a la propiedad OfflineCar la informacin del siguiente vehculo del histrico.


Devuelve falso si no ha podido hacer la asignacin porque no quedan ms vehculos por
recorrer en el histrico, y verdadero en caso contrario.
En C el parmetro h es un manejador del carril (Lane).
MovePrevious

C++:

bool MovePrevious( )

C:

int Lane_MovePrevious ( int h )

Asigna a la propiedad OfflineCar la informacin del vehculo anterior del histrico.


Devuelve falso si no ha podido hacer la asignacin porque no quedan ms vehculos por
recorrer en el histrico, y verdadero en caso contrario.
En C el parmetro h es un manejador del carril (Lane).
MoveLast

C++:

void MoveLast()

C:

void Lane_MoveLast ( int h )

Asigna a la propiedad OfflineCar la informacin del ltimo vehculo del histrico.


En C el parmetro h es un manejador del carril (Lane).
Reboot

C++:

bool Reboot()

C:

int Lane_Reboot ( int h )

Reinicia el carril. Devuelve verdadero si se ha podido efectuar la operacin y falso en


caso contrario.
En C el parmetro h es un manejador del carril (Lane).
ActivateOutput

C++:

bool ActivateOutput ( long bit, long time )

C:

int Lane_ActivateOutput ( int h, long bit, long time )

Activa el bit situado en la posicin indicada en el parmetro bit durante los


Quercus Technologies

26

SmartLPR

Manual de Programacin

milisegundos indicados en el parmetro time. Si time es 1 el bit se activar


indefinidamente. Si time es 0 el bit se desactivar. Devuelve verdadero si se ha
podido efectuar la operacin y falso en caso contrario.
En C el parmetro h es un manejador del carril (Lane).
Trigger

C++:

bool Trigger ( long triggerId )

C:

int Lane_Trigger ( int h, long triggerId )

Hace que se tomen fotografas del carril y se procesen. Una vez procesadas se lanzar
el evento OnCarHandled2 asncronamente. El identificador de trigger TriggerId debe
ser mayor que cero. El evento OnCarHandled2 contendr este identificador para que se
puedan relacionar los disparos con los reconocimientos. Devuelve verdadero si se ha
podido efectuar la operacin y falso en caso contrario.
En C el parmetro h es un manejador del carril (Lane).
GetInputValues

C++:

bool GetInputValues ( unsigned int &values )

C:

int Lane_GetInputValues ( int h, unsigned int *inputValues )

Proporciona los valores actuales de las entradas de la tarjeta de E/S. Devuelve


verdadero si se ha podido efectuar la operacin y falso en caso contrario. Cada bit del
valor retornado representa un bit de la tarjeta de E/S. Actualmente solamente se usan
los 2 primeros bits del valor (los de menor peso), el resto estn reservados para futuras
ampliaciones.
En C el parmetro h es un manejador del carril (Lane).
GetVersion

C++:

VersionInfo GetVersion()

C:

int Lane_GetVersion ( int h )

Informacin sobre el firmware del carril (ver clase VersionInfo).


En C el parmetro h es un manejador del carril (Lane). Devuelve un manejador de
VersionInfo.
GetCurrentFrame

C++: int GetCurrentFrame (int exposureTime, unsigned char *jpegData, int maxSize )
Quercus Technologies

27

SmartLPR

C:

Manual de Programacin

int Lane_GetCurrentFrame ( int h, int exposureTime, unsigned char *jpegData,

int maxSize )
Obtiene la imagen que actualmente est viendo la cmara de la unidad. En el
parmetro exposureTime se debe indicar el tiempo de exposicin en microsegundos.
En el parmetro jpegData se debe pasar el puntero a un buffer donde se guardar la
fotografa en formato JPEG. El tamao en bytes de este buffer se debe indicar en el
parmetro maxSize. Devuelve el tamao de la imagen en bytes (en el caso en que el
tamao de la imagen sea mayor que maxSize solamente se retornarn maxSize bytes).
En C el parmetro h es un manejador del carril (Lane).
ActivateFocus

C++:

bool Activatefocus (long time )

C:

int Lane_Activatefocus ( int h, long time )

Activa el foco durante los segundos indicados en el campo time. Si se invoca mientras
el foco todava esta activo debido a una invocacin previa, el tiempo indicado se
aadir al tiempo que reste de la anterior invocacin. Si time es cero el foco se
apagar. Devuelve verdadero si se ha podido efectuar la operacin y falso en caso
contrario.
En C el parmetro h es un manejador del carril (Lane).

3.8. Clase LaneStatus


Estado del carril.

3.8.1. Propiedades
Global

C++:

bool get_Global()

C:

int LaneStatus_get_Global ( int h )

Estado global del sistema de reconocimiento del carril. Retorna verdadero si hay
comunicacin con el sistema de reconocimiento, falso en caso contrario.
En C el parmetro h es un manejador de LaneStatus.
Communication

C++:
Quercus Technologies

bool get_Communication( )
28

SmartLPR

C:

Manual de Programacin

int LaneStatus_get_Communication ( int h )

Estado de la comunicacin con el carril. Verdadero si se ha podido establecer


comunicacin, falso en caso contrario.
En C el parmetro h es un manejador de LaneStatus.

Camera

C++:

bool get_Camera()

C:

int LaneStatus_get_Camera ( int h )

Estado de la cmara del carril. Verdadero si es correcto y falso en caso contrario.


En C el parmetro h es un manejador de LaneStatus.
IOCard

C++:

bool get_IOCard()

C:

int LaneStatus_get_IOCard ( int h )

Estado de la tarjeta de E/S del carril. Verdadero si es correcto y falso en caso contrario.
En C el parmetro h es un manejador de LaneStatus.

3.9. Clase Car


Contiene informacin sobre el reconocimiento de un vehculo.

3.9.1. Propiedades
Id:

C++:

long get_Id()

C:

long Car_get_Id ( int h )

Identificador del movimiento del vehculo. Este identificador ser 1 para el primer
movimiento que enve la unidad y se incrementar por cada nuevo movimiento. Si la
unidad se reinicia, el prximo movimiento volver a tener identificador 1.
El parmetro h es un manejador de la clase Car.
TriggerId:

C++:
Quercus Technologies

long get_TriggerId()
29

SmartLPR

C:

Manual de Programacin

long Car_get_TriggerId ( int h )

Identificador de la captura y el procesado si existe, o cero en caso contrario.


El parmetro h es un manejador de la clase Car.
GrammarOk:

C++:

bool get_GrammarOk()

C:

int Car_get_GrammarOk ( int h )

Falso si el test gramatical ha fallado, y verdadero en caso contrario.


El parmetro h es un manejador de la clase Car.
Country:

C++:

void get_Country ( char *buf, int bufLen )

C:

void Car_get_Country ( int h , char *buf, int bufLen )

Nombre del pas/pases que mejor se ajusta a la estructura gramatical de la matrcula


reconocida. Reservado para uso futuro, actualmente establecido como "indefinido".
El parmetro buf es un puntero a un buffer donde se escribir el nombre del pas en
caso de que exista, y en el parmetro bufLen se deber indicar el tamao mximo en
bytes de este buffer.
El parmetro h es un manejador de la clase Car.
AvgQuality:

C++:

double get_AvgQuality()

C:

void Car_get_AvgQuality ( int h )

Calidad media de la matrcula reconocida (entre 0 y 1).


El parmetro h es un manejador de la clase Car.
Lane

C++:

Lane get_Lane()

C:

int Car_get_Lane ( int h )

Carril en el que se ha tomado la fotografa.


El parmetro h es un manejador de la clase Car. Devuelve un manejador del carril
(Lane).

Quercus Technologies

30

SmartLPR

Manual de Programacin

License:

C++:

void get_License ( char *buf, int bufLen )

C:

void Car_get_License ( int h, char *buf, int bufLen )

Matrcula reconocida decorada con sus correspondientes guiones y espacios.Si la


matrcula no cumple ninguna gramtica conocida, no estar decorada.
El parmetro h es un manejador de la clase Car.
MinQuality:

C++:

double get_MinQuality()

C:

double Car_get_MinQuality ( int h )

Calidad del peor carcter reconocido (entre 0 y 1).


El parmetro h es un manejador de la clase Car.
ROI:

C++:

Rectangle2 get_ROI ( )

C:

void Car_get_ROI ( int h, int *l, int *r, int *t, int *b )

Rectngulo que indica la posicin en que se ha encontrado la matrcula en la fotografa.


Si la fotografa no ha llegado correctamente al sistema central, este campo tendr valor
(0,0,0,0).
En C++ se devuelve un objeto Rectangle2 que representa el rectngulo.
En C se devuelven directamente las coordenadas izquierda, derecha, superior e inferior
del rectngulo en los parmetros l, r, t y b respectivamente. El parmetro h es
un manejador de la clase Car.
TimeStamp

C++:

long get_TimeStamp()

C:

long Car_get_TimeStamp ( int h )

Fecha y hora en que se ha tomado la fotografa.


Retorna la fecha de produccin del equipo expresada como los segundos transcurridos
desde las 00:00 horas del 1 de enero de 1970. Es el mismo formato que devuelve la
llamada a la funcin time_t time ( time_t *timer ) del estndar ANSI C.

Quercus Technologies

31

SmartLPR

Manual de Programacin

TimeStampUSec

C++:

long get_TimeStampUSec()

C:

long Car_get_TimeStampUSec ( int h )

Microsegundo en que se ha tomado la fotografa.


Chars:

C++:

Chars get_Chars()

C:

Ver propiedades de la clase Chars

Coleccin de caracteres reconocidos y sus calidades.


En C no hay una funcin para obtener esta coleccin, pero s hay funciones para saber
el nmero de elementos que la forman y acceder a ellos (ver clase Chars).
NumberOfUnknownChars:

C++:

int get_NumberOfUnknownChars()

C:

int Car_get_NumberOfUnknownChars ( int h )

Nmero de caracteres no reconocidos.


Este valor es el resultado de contar el nmero de interrogantes de la matrcula en la
propiedad License o en la propiedad Chars.
State

C++:

SACarState get_State()

C:

int Car_get_State()

Estado del vehculo (posicin actual del vehculo respecto al carril).


Sus posibles valores y significados son los siguientes:
ON_LANE (0): el vehculo se encuentra en el carril.
DEPARTURE_OK (1): el vehculo ha partido del carril en el orden de marcha

correcto.
DEPARTURE_RETURN (2): el vehculo ha partido por el carril de retorno.
DEPARTURE_REVERSE (3): el vehculo ha partido marcha atrs.
UNDEFINED (4): no se puede determinar la posicin actual del vehculo, ya sea

porque la unidad se encuentra en modo software o porque no se ha recibido el


evento de partida del vehculo y ya se han recibido nuevas llegadas al carril.

Quercus Technologies

32

SmartLPR

Manual de Programacin

3.9.2. Mtodos
IsValid

C++:

bool IsValid()

C:

No existe.

Devuelve verdadero si el objeto contiene informacin vlida sobre un reconocimiento, y


falso si la informacin no es vlida. Algunos mtodos pueden retornar objetos de tipo
Car no vlidos. Por ejemplo Lane.get_OffineCar(), en el caso que no se haya invocado
previamente un mtodo Lane.Move...(), retornar un valor no vlido. En C esto se
detecta porque su valor ser 0. En C++ en cambio, es necesario este mtodo ya que
el objeto (al no tratarse de un puntero) siempre ser correcto.

GetImage

C++:

int GetImage(unsigned char *jpegData, int maxSize)

C:

int Car_GetImage (int h, unsigned char *jpegData, int maxSize)

Obtiene la imagen que se ha capturado del vehculo. En el parmetro jpegData se


debe pasar el puntero a un buffer donde se guardar la fotografa en formato JPEG. El
tamao en bytes de este buffer se debe indicar en el parmetro maxSize. Devuelve el
tamao de la imagen en bytes (en el caso en que el tamao de la imagen sea mayor
que maxSize solamente se retornarn maxSize bytes).
El parmetro h es un manejador de la clase Car.
AddRef

C++:

No existe.

C:

void Car_AddRef ( int h )

Esta funcin solamente est implementada para la librera de C. En C++ esta operacin
se realiza de forma transparente.
La funcin aade una referencia a un elemento Car. Es necesario llamarla en el caso de
que sea necesario quedarse con el elemento Car, pasado como parmetro en los
eventos OnCarHandled2, OnCarArrival2 o OnCarDeparture2, fuera del mbito de sta
(por ejemplo si se copia sobre una variable global). Cuando no se necesite ms se
deber llamar a la funcin Car_Release (ver el mtodo Release) para liberar la memoria
asignada.

Quercus Technologies

33

SmartLPR

Manual de Programacin

El parmetro h es un manejador de la clase Car.


Release

C++:

No existe.

C:

void Car_Release ( int h )

Esta funcin solamente est implementada para la librera de C.

En C++ esta

operacin se realiza de forma transparente.


La funcin decrementa una referencia a un elemento Car y libera la memoria asignada
si el nmero de referencias queda en 0. Se deber llamar cuando no se necesite ms
un

elemento

Car

obtenido

en

las

llamadas

OnCarHandled2,

OnCarArrival2

OnCarDeparture2, al que se le haya aadido una referencia (ver AddRef); o cuando no


se

necesite

ms

un

elemento

Car

obtenido

en

la

llamada

las

funciones

Lane_get_OfflineCar.

3.10. Clase Box/Rectangle2


Representa un rectngulo que indica la posicin en que se ha encontrado la matrcula dentro
de la fotografa. Las unidades son pxeles.
Esta clase no est implementada en la librera de C. Se devuelven directamente las
coordenadas del rectngulo en las funciones donde sea necesario.

3.10.1. Propiedades
Left:

C++:

int get_Left()

Coordenada izquierda del rectngulo.


Right:

C++:

int get_Right()

Coordenada derecha del rectngulo.


Top:

C++:

int get_Top()

Coordenada superior del rectngulo.


Quercus Technologies

34

SmartLPR

Manual de Programacin

Bottom:

C++:

int get_Bottom()

Coordenada inferior del rectngulo.


Anchura

C++:

int get_Width()

Anchura del rectngulo.


Altura

C++:

int get_Height()

Altura del rectngulo.

3.11. Clase VersionInfo


Informacin sobre la versin del firmware o de hardware de la unidad.

3.11.1. Propiedades
Nombre

C++:

void get_Name ( char *buf, int bufLen )

C:

void VersionInfo_get_Name ( int h, char *buf, int bufLen )

Nombre del producto.


El parmetro bufLen es el tamao en bytes del buffer buf donde se escribir el
nombre.
En C el parmetro h es un manejador de VersionInfo.
Major

C++:

long get_Major()

C:

long VersionInfo_get_Major ( int h )

Parte Mayor de la versin del software. Ejemplo: v 1.2.3.


En C el parmetro h es un manejador de VersionInfo.

Quercus Technologies

35

SmartLPR

Manual de Programacin

Minor

C++:

long get_Minor()

C:

long VersionInfo_get_Minor ( int h )

Parte Minor de la versin del software. Ejemplo: v 1.2.3.


En C el parmetro h es un manejador de VersionInfo.

Revision

C++:

long get_Revision()

C:

long VersionInfo_get_Revision ( int h )

Revisin de la versin del software. Ejemplo: v 1.2.3.


En C el parmetro h es un manejador de VersionInfo.

3.12. Clase Chars


Coleccin de caracteres reconocidos de la matrcula y sus calidades.
Count

C++:

int Count()

C:

int Car_get_Chars_Count ( int h )

Devuelve el nmero de caracteres encontrados en la matrcula.


En C el parmetro h es un manejador de Char.
Item

C++:

Char Item ( int item )

C:

int Car_get_Chars_Item ( int h, int item )

Devuelve el carcter que hay en la posicin indicada dentro de la coleccin de


caracteres.
En el parmetro item se debe indicar la posicin (el primer elemento es 0).
En C el parmetro h es un manejador de Char. Devuelve un manejador de Char.

3.13. Clase Char


Contiene informacin sobre un carcter reconocido de una matrcula.

Quercus Technologies

36

SmartLPR

Manual de Programacin

3.13.1. Propiedades
Character

C++:

char get_Character()

C:

char Char_get_Character ( int h )

Carcter reconocido.
En C el parmetro h es un manejador de Char.

CharacterUTF8

C++:

void get_CharacterUTF8 ( char buf[], int bufLen )

C:

void Char_get_CharacterUTF8 ( int h, char *buf, int bufLen )

Carcter reconocido en formato UTF8.


En C el parmetro h es un manejador de Char.
Quality:

C++:

double get_Quality()

C:

double Char_get_Quality ( int h )

Calidad del carcter reconocido (entre 0 y 1).


En C el parmetro h es un manejador de Char.

3.14. Clase Notification


Contiene informacin sobre un evento excepcional que ha ocurrido en el sistema.

3.14.1. Propiedades
NotificationCode/Code

C++:

SANotificationCode get_Code()

C:

int Notification_get_Code ( int h )

En C, el parmetro h es un manejador de Notification.


Los posibles tipos de notificacin y su significado son los siguientes:
SA_NOT_UNDEFINED=-1 :error indefinido.
SA_NOT_STATUS_CHANGED=0 :el estado de uno o ms carriles ha cambiado.
SA_NOT_STARTUP_OK=1 :se ha inicializado un carril correctamente.
Quercus Technologies

37

SmartLPR

Manual de Programacin
SA_NOT_STARTUP_ERROR=2 :se ha inicializado un carril incorrectamente.
SA_NOT_SHUTDOWN_OK=3 :el sistema remoto se est apagando debido a una

orden enviada desde el sistema central.


SA_NOT_SHUTDOWN_ERROR=4 :el sistema remoto se est apagando debido a

motivos internos.
SA_NOT_OVERLAPPED=5 :ha llegado un nuevo coche al carril mientras todava

se estaba procesando la fotografa del coche anterior.


Lane

C++:

Lane get_Lane()

C:

int Notification_get_Lane ( int h )

Carril donde se ha generado la notificacin. En C, el parmetro h es un manejador de


Notification.

3.15. Clase Configuration


Clase que da acceso al sistema de configuracin de la unidad.

3.15.1. Mtodos
IsValid

C++:

bool IsValid()

C:

No existe.

Devuelve verdadero si el objeto contiene informacin vlida y falso en caso contrario.


Login

C++:

bool Login ( const char* password )

C:

int Configuration_Login ( int h, const char* password )

Da acceso al sistema de configuracin de la unidad. En el parmetro password se


debe indicar la contrasea de la unidad. Retorna verdadero en caso afirmativo, falso en
caso contrario o error.
En C el parmetro h es un manejador de Configuration.
Logout

C++:

bool Logout()

C:

int Configuration_Logout ( int h )

Quercus Technologies

38

SmartLPR

Manual de Programacin

Pierde el acceso al sistema de configuracin de la unidad. Retorna verdadero en caso


afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
IsLoggedIn

C++:

bool IsLoggedIn()

C:

int Configuration_IsLoggedIn ( int h )

Comprueba si actualmente se tiene permiso de acceso al sistema de configuracin de la


unidad. Retorna verdadero en caso afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
ChangePassword

C++:

bool ChangePassword ( const char* newPassword )

C:

int Configuration_ChangePassword ( int h, const char* newPassword )

Cambia la contrasea de acceso a la unidad. El cambio no ser persistente hasta que no


se apliquen cambios. newPassword debe ser una cadena de texto acabada en \0.
Retorna verdadero en caso afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
SyncTime

C++:

bool SyncTime ( )

C:

int Configuration_SyncTime ( int h )

Sincroniza la fecha y hora con el servidor y protocolo que se haya especificado en la


configuracin. Retorna verdadero en caso afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
SetTime

C++:

bool SetTime ( long dateTime )

C:

int Configuration_SetTime ( int h, long dateTime )

Establece la fecha y hora indicada en dateTime. Esta fecha y hora est especificada
en segundos transcurridos desde 1 de enero de 1970 a las 00:00:00 h. Retorna
verdadero si se ha podido efectuar la operacin, falso en caso contrario.
En C el parmetro h es un manejador de Configuration.

Quercus Technologies

39

SmartLPR

Manual de Programacin

UpdateFirmware

C++:

bool UpdateFirmware ( const char* fileName )

C:

int Configuration_UpdateFirmware ( int h, const char* fileName )

Actualiza la unidad usando el fichero de actualizacin indicado en fileName. El fichero


debe haber sido previamente depositado en la raz del servidor de FTP de la unidad.
Retorna verdadero en caso afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
RestoreFirmware

C++:

bool RestoreFirmware ( )

C:

int Configuration_RestoreFirmware ( int h )

Restaura el firmware de la unidad a su versin original. Retorna verdadero en caso


afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
ExportLog

C++:

bool ExportLog ( SALogType logType, const char* fileName )

C:

int Configuration_ExportLog ( int h, int logType, const char* fileName )

Exporta el fichero de registro de log indicado en logType y lo deposita en la raz del


servidor de FTP con el nombre fileName. Retorna verdadero en caso afirmativo, falso
en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
Los posibles valores de SALogType, su equivalencia en C y su significado son los
siguientes:
SA_LOG_RECOGNIZER

(0):

registro

del

sistema

de

reconocimiento

de

matrculas.
SA_LOG_COMBRIDGE (1): registro del adaptador UDP <-> Serie.
SA_LOG_CONFIG (2): registro del sistema de configuracin.
SA_LOG_FILESYSTEM (3): registro del disco de datos .

GetSystemInfo

C++:

SystemInformation GetSystemInfo()

C:

int Configuration_GetSystemInfo (int h )

Quercus Technologies

40

SmartLPR

Manual de Programacin

Retorna un objeto de tipo SystemInformation que contiene la informacin de la unidad.


En C el parmetro h es un manejador de Configuration. Devuelve un manejador de
SystemInformation.
ExportStatus

C++:

bool ExportStatus ( const char* fileName )

C:

int Configuration_ExportStatus ( int h, const char* fileName )

Genera un informe del estado del sistema y lo deposita en la raz del servidor de FTP
con el nombre fileName. Devuelve verdadero si se ha podido efectuar la operacin y
falso en caso contrario.
En C el parmetro h es un manejador de Configuration.

GetEntriesCount

C++:

int GetEntriesCount()

C:

int Configuration_GetEntriesCount ( int h )

Retorna el nmero de variables que contiene el sistema de configuracin de la unidad o


-1 en caso de error.
En C el parmetro h es un manejador de Configuration.
GetEntry

C++:

SettingsEntry GetEntry ( int n )

C:

int Configuration_GetEntryByIndex ( int h, int n )

Retorna la variable n-sima del sistema de configuracin de la unidad.


En C el parmetro h es un manejador de Configuration y retorna un manejador a
SettingsEntry.
GetEntry

C++:

SettingsEntry GetEntry ( const char* name )

C:

int Configuration_GetEntryByName ( int h, const char* name )

Retorna la variable con nombre name del sistema de configuracin de la unidad.


En C el parmetro h es un manejador de Configuration y retorna un manejador a
Quercus Technologies

41

SmartLPR

Manual de Programacin

SettingsEntry.
SetEntry

C++:

bool SetEntry ( const char* name, const char* value )

C:

int Configuration_SetEntry ( int h, const char* name, const char* value )

Establece el valor de la variable name al valor value. Retorna verdadero en caso


afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
RestoreEntry

C++:

bool RestoreEntry ( const char* name )

C:

int Configuration_RestoreEntry ( int h, const char* name )

Restaura el valor por defecto de la variable name. Retorna verdadero en caso


afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
ApplyChanges

C++:

bool ApplyChanges()

C:

int Configuration_ApplyChanges ( int h )

Aplica los cambios realizados y reinicia la unidad. Retorna verdadero en caso afirmativo,
falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
DiscardChanges

C++:

bool DiscardChanges()

C:

int Configuration_DiscardChanges ( int h )

Descarta los cambios efectuados en la configuracin de la unidad. Retorna verdadero en


caso afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
ImportConfiguration

C++:

bool ImportConfiguration ( const char* fileName )

C:

int Configuration_ImportConfiguration ( int h, const char* fileName )

Quercus Technologies

42

SmartLPR

Manual de Programacin

Importa la configuracin del fichero indicado en fileName. El fichero debe haber sido
previamente depositado en la raz del servidor de FTP de la unidad. Retorna verdadero
en caso afirmativo, falso en caso contrario o error.
En C el parmetro h es un manejador de Configuration.
ExportConfiguration

C++:

bool ExportConfiguration ( const char* fileName )

C:

int Configuration_ExportConfiguration ( int h, const char* fileName )

Exporta la configuracin al fichero indicado en fileName y lo deposita en la raz del


servidor de FTP de la unidad. Retorna verdadero en caso afirmativo, falso en caso
contrario o error.
En C el parmetro h es un manejador de Configuration.

SetLanguage
C++: bool SetLanguage( const char* languageId )
C:

int Configuration_SetLanguage ( int h, const char* languageId)

Establece el idioma del sistema de configuracin, indicado como un cdigo de 2


caracteres (ISO 639-1) acabado con el carcter \0.
Devuelve verdadero si la operacin se ha realizado y falso en caso contrario.
Los parmetros C
En C el parmetro h es un manejador de Configuration.

GetLanguage
C++: bool GetLanguage( char *buf, int bufLen)
C:

int Configuration_GetLanguage ( int h, char* buf, int bufLen )

Obtiene el idioma configurado actualmente en el sistema de configuracin, indicado


como un cdigo de 2 caracteres (ISO 639-1) acabado con el carcter \0. El parmetro
"buff" es un puntero a un buffer donde se escribir el cdigo. En el parmetro "buffLen"
se deber indicar el tamao mximo en bytes de este buffer.
Devuelve verdadero si la operacin se ha realizado y falso en caso contrario.
En C el parmetro h es un manejador de Configuration.

Quercus Technologies

43

SmartLPR

Manual de Programacin

3.16. Clase SystemInformation


3.16.1. Propiedades
Nombre

C++:

void get_Name ( char *buf, int bufLen )

C:

void SystemInformation_get_Name ( int h, char *buf, int bufLen )

Retorna el nombre del producto. El parmetro buf es un puntero a un buffer donde se


escribir el nombre y en el parmetro bufLen se deber indicar el tamao mximo en
bytes de este buffer.
En C el parmetro h es un manejador de Configuration.
ProductionDate

C++:

long get_ProductionDate()

C:

long SystemInformation_get_ProductionDate ( int h )

Retorna la fecha de produccin del equipo expresada como los segundos transcurridos
desde las 00:00 horas del 1 de enero de 1970.
En C el parmetro h es un manejador de Configuration.
SerialNumber:

C++:

void get_SerialNumber ( char *buf, int bufLen )

C:

void SystemInformation_get_SerialNumber ( int h, char *buf, int bufLen )

Retorna el nmero de serie del producto. El parmetro buf es un puntero a un buffer


donde se escribir el nmero de serie y en el parmetro bufLen se deber indicar el
tamao mximo en bytes de este buffer.
En C el parmetro h es un manejador de Configuration.
MacAddress

C++:

void get_MacAddress ( char *buf, int bufLen )

C:

void SystemInformation_get_MacAddress ( int h, char *buf, int bufLen )

Retorna la direccin MAC del equipo. El parmetro buf es un puntero a un buffer


donde se escribir dicha direccin y en el parmetro bufLen se deber indicar el
tamao mximo en bytes de este buffer.
En C el parmetro h es un manejador de Configuration.

Quercus Technologies

44

SmartLPR

Manual de Programacin

BootTime:

C++:

long get_BootTime()

C:

long SystemInformation_get_ BootTime ( int h )

Retorna la fecha y hora de arranque del equipo expresada como los segundos
transcurridos desde las 00:00 horas del 1 de enero de 1970.
En C el parmetro h es un manejador de Configuration.
HardwareVersion

C++:

VersionInfo get_HardwareVersion ( )

C:

int SystemInformation_get_HardwareVersion ( int h )

Retorna un objecto con la informacin de la versin del hardware.


En C el parmetro h es un manejador de Configuration y retorna un manejador de
VersionInfo.
FirmwareVersion

C++:

VersionInfo get_FirmwareVersion ( )

C:

int SystemInformation_get_FirmwareVersion ( int h )

Retorna un objecto con la informacin de la versin del firmware que se ejecuta en la


unidad.
En C el parmetro h es un manejador de Configuration y retorna un manejador de
VersionInfo.

3.16.2. Mtodos
IsValid

C++:

bool IsValid()

C:

No existe.

Devuelve verdadero si el objeto contiene informacin vlida y falso en caso contrario.

3.17. Clase SettingsEntry


Describe las propiedades de una entrada de la lista de variables de configuracin.

Quercus Technologies

45

SmartLPR

Manual de Programacin

3.17.1. Propiedades
Nombre

C++:

void get_Name ( char *buf, int bufLen )

C:

void SettingEntry_get_Name ( int h, char *buf, int bufLen )

Retorna el nombre de la variable. El parmetro buf es un puntero a un buffer donde


se escribir el nombre y en el parmetro bufLen se deber indicar el tamao mximo
en bytes de este buffer.
En C el parmetro h es un manejador de SettingsEntry.
Value:

C++:

void get_Value ( char *buf, int bufLen )

C:

void SettingEntry_get_Value ( int h, char *buf, int bufLen )

Retorna el valor actual de la variable. El parmetro buf es un puntero a un buffer


donde se escribir dicho valor y en el parmetro bufLen se deber indicar el tamao
mximo en bytes de este buffer.
En C el parmetro h es un manejador de SettingsEntry.
Description

C++:

void get_Description ( int langId, char *buf, int bufLen )

C:

void SettingEntry_get_Description ( int h, int langId, char *buf,


int bufLen )

Retorna la descripcin de la variable en el idioma indicado en langId (1 por el idioma


por defecto y 2 por el idioma configurado).
El parmetro buf es un puntero a un buffer donde se escribir la descripcin y en el
parmetro bufLen se deber indicar el tamao mximo en bytes de este buffer.
En C el parmetro h es un manejador de SettingsEntry.

3.17.2. Mtodos
IsValid

C++:

bool IsValid()

C:

No existe.

Devuelve verdadero si el objeto contiene informacin vlida y falso en caso contrario.

Quercus Technologies

46

SmartLPR

Manual de Programacin

4. Protocolo de comunicaciones
Cada unidad de reconocimiento puede recibir y enviar informacin mediante un sencillo
protocolo UDP binario.
Los mensajes se enviarn a la unidad mediante el puerto 7051 de esta (modificable mediante
configuracin) y la unidad enviar los mensajes al puerto 7050 de la direccin IP que tenga
configurada como sistema central (modificable mediante configuracin) en el que estar
funcionando la aplicacin cliente. Opcionalmente puede usarse comunicacin serie en lugar de
UDP, en cuyo caso, los tramas de los mensajes sern idnticas a las usadas en UDP,
simplemente se cambiar el medio de transporte de estas.
Existen dos grupos de mensajes que pueden darse entre unidad y
sistema central:
Eventos.
Peticiones (y sus respuestas).

Un Evento es un mensaje que la unidad enva al sistema central como mecanismo para
notificar a este de algn hecho (la llegada de un coche, el reconocimiento de una matrcula,
etc.). Un evento debe ser respondido por el sistema central dentro de un tiempo lmite
(modificable por configuracin) con un ACK para que la unidad sepa que ha sido recibido con
xito. En caso contrario reenviar el mensaje hasta que reciba el ACK o se agote el nmero
mximo de reintentos (modificables tambin por configuracin). Si se responde con un NAK a
un evento, este tambin ser reenviado (hasta el mismo nmero de reintentos).
Ejemplo de Eventos:
Unidad

Sistema Central
Evento 1
ACK

Evento 2
NAK
Evento 2
NAK

Evento 3

Timeout
Evento 3
Evento 4

Quercus Technologies

47

SmartLPR

Manual de Programacin

Un mensaje de tipo Peticin es un mensaje que la aplicacin cliente enva a una unidad para
obtener informacin de ella o para que esta emprenda una accin (activar una salida, tomar
una foto, etc.). Todas las peticiones sern respondidas inmediatamente por la unidad con un
mensaje de tipo respuesta donde estar la informacin solicitada, un ACK si el mensaje no
esperaba una respuesta o un NAK si el mensaje no ha podido ser recibido, interpretado o
completado correctamente.
Hay que tener en cuenta que entre la llegada a la unidad de una peticin y su respuesta puede
producirse algn evento en el sistema, de forma que el primer mensaje que llega despus de
haber hecho una peticin no tiene por que ser la respuesta a esa peticin sino que puede ser la
notificacin del evento.
Ejemplo de peticiones y sus respuestas:
Unidad

Sistema Central
Accin
ACK (Accin)
cin
Obtener informa
Informacin:
ocido
Mensaje descon

NAK
Accin

Evento
Evento
ACK (Evento)

ACK (Accin)

4.1. Formato de los mensajes


Los mensajes tendrn siempre el mismo formato. La ordenacin de bytes de todos los campos
es little-endian:
Stx (1 byte): byte que seala el inicio de la trama (carcter ASCII 2).
Unit Id (4 bytes): identificador de la unidad de captura que enva o recibe el mensaje.
Size (4 bytes): tamao total del mensaje en bytes.
Type (2 bytes): tipo de mensaje. Los tipos de mensaje se detallan ms adelante.
Version (2 bytes): versin del mensaje. En los mensajes que han evolucionado

(aadiendo campos, modificndolos, etc.) este campo indica la versin del mensaje
empleada.

Quercus Technologies

48

SmartLPR

Manual de Programacin

Id (4 bytes): identificador nico de la conversacin. El valor ser el mismo para el

mensaje de ida que para el de vuelta. De esta forma se puede conocer si una respuesta
obtenida es la que se esperaba o no. Este valor ser 1 para el primer mensaje enviado
de las unidades al sistema central y se incrementar de dos en dos en cada nuevo
mensaje. En los mensajes del sistema central a las unidades, el primer mensaje ser el
2 y se incrementar tambin de 2 en 2.
Message Data (variable): datos especficos para cada mensaje.
Bcc (1 byte): xor de todos los bytes del mensaje desde Stx hasta el ltimo byte de

Message data.
Etx (1 byte): seala el final del mensaje (carcter ASCII 3).

4.2. Versiones de los mensajes


Los mensajes contienen un campo version que indica la versin del mensaje usada para
permitir la ampliacin del protocolo de comunicaciones. Cada versin del mismo mensaje
puede contener ms o menos campos y puede variar la longitud de estos, por lo tanto, es
imprescindible evaluar este campo antes de proceder con los campos especficos del mensaje.
En los siguientes puntos, donde se describen todas las estructuras de los mensajes, solamente
se indicar la versin del mensaje si es diferente de 0.
Las unidades disponen de un sistema de negociacin de versin que hace 100% compatibles
cualquier unidad con cualquier versin del protocolo que haya existido. Cuando la unidad enva
un mensaje de evento, siempre intenta enviar la versin ms alta que conoce de dicho tipo de
mensaje. Si el sistema central responde con un mensaje NAK de tipo 6 (Incorrect version), la
unidad enviar, en el siguiente intento, la versin inmediatamente anterior del mensaje.
Este proceso se repetir hasta que se agoten los intentos configurados, el sistema central
responda con ACK o la versin del mensaje llegue al mnimo que la unidad sabe gestionar
(normalmente cero). En los subsiguientes mensajes del mismo tipo que genere la unidad, ya
se partir de la versin establecida en el anterior mensaje. Este proceso se repite despus de
cada arranque de la unidad. Ejemplo:

Quercus Technologies

49

SmartLPR

Manual de Programacin

Unidad

Sistema Central
1er Evento (v2)
NAK(6)

1er Evento (v1)


NAK(6)

Fin reintentos
2 Evento (v0)
ACK

Cuando la unidad recibe un mensaje de peticin del sistema central, siempre intenta responder
con la misma versin del mensaje de respuesta o NAK de tipo 6 (Incorrect version) si no es
capaz de entender esa versin del mensaje.
Ejemplo:
Unidad

Sistema central

Peticin(v1)

NAK(6)
Peticin(v0)

Respuesta

4.3. Mensajes de eventos


4.3.1. InputChanged
Indica que uno de los bits de entrada de la unidad ha cambiado.
Type: 0
Message Data:

Quercus Technologies

50

SmartLPR

Manual de Programacin

Bit

Val

Bit: bit que ha cambiado de valor.


Value (Val): nuevo valor.

4.3.2. CarMovement
Indica que un vehculo ha llegado o ha partido del carril.
Type: 1
Message Data:
4

CarId

MT

Car Id.: identificador nico del vehculo. Este valor se inicia a cero cada vez que

arranca la unidad de captura.


Movement Type (MT): tipo de movimiento que se ha producido.
0: el vehculo ha llegado.
1: el vehculo ha partido correctamente.
2: el vehculo ha partido por el carril de retorno.
3: el vehculo ha partido marcha atrs.
4: el vehculo ha efectuado un movimiento indefinido.

4.3.3. LicenseInfo
Aporta informacin sobre el reconocimiento de una matrcula.
La estructura corresponde a la versin 2.
Type: 2
Message Data:
4

CarId

TriggerId

Timestamp

TimestampUSec

40
Printable

40
Detected

40
Chars

Qualities

1
GOk

32
String

Country:

Car Id.: identificador nico del vehculo. Es el mismo para su llegada y su salida.
Trigger Id.: identificador del evento software que desencaden la captura.

Solamente es aplicable si la unidad est funcionando en modo software;


Quercus Technologies

en
51

SmartLPR

Manual de Programacin

caso contrario el valor ser -1.


Timestamp: instante en que se ha obtenido la imagen. La fecha y hora se indica

como los segundos transcurridos desde las 00:00 horas del 1 de enero de 1970.
Es el mismo formato que devuelve la llamada a la funcin time_t time ( time_t
*timer ) del estndar ANSI C.
TimestampUSec: microsegundo en que se ha obtenido la imagen.
Detected Chars: lista de caracteres detectados. Los caracteres especiales

(cdigos no contenidos en la tabla ASCII) estn codificados en UTF-8. Los no


usados tendrn el valor cero.
Qualities: lista de calidades de los caracteres detectados. El valor en la posicin

n determina la calidad con la que se ha detectado el carcter n-simo (entre 0 y


100).
Grammar Ok (GO): tendr el valor 1 si la matrcula reconocida cumple con

alguna norma gramatical conocida, 0 en caso de que no se ajuste a ninguna.


Printable String: matrcula adornada con guiones y espacios. Los caracteres

especiales (cdigos no contenidos en la tabla ASCII) estn codificados en UTF-8.


Los caracteres no usados contendrn ceros. Si la matrcula no cumple ninguna
gramtica conocida contendr los mismos valores que DetectedChars.
Country: nombre del pas/regin para el que se ha cumplido la gramtica. Los

caracteres no usados contendrn ceros. En caso de que no se haya cumplido


ninguna gramtica todo el campo contendr ceros. Los pases se indican con
la(s) letra(s) que el pas identifica a sus matrculas (E para Espaa, F para
Francia, etc.).
La estructura arriba descrita corresponde a la versin 2 de dicho mensaje.

Versin 1:
4

CarId

TriggerId

Timestamp

TimestampUSec

20
Printable

20
Detected

20
Chars

Qualities

1
GOk

32
String

Country:

Los campos tienen el mismo significado, pero detected chars y printable string son de 20
bytes ya que las cadenas no contienen nunca caracteres UTF-8 (son sustituidos por ?).
Versin 0:

Quercus Technologies

52

SmartLPR

Manual de Programacin

CarId

TriggerId

Timestamp

20

20
Detected

20
Chars

Qualities

1
GOk

32

Printable

String

Country:

Los campos tienen el mismo significado que en la versin 1 pero no dispone del campo
TimestampUSec.

4.3.4. Notification
Indica que un hecho excepcional se ha producido en la unidad.
Type: 3
Message Data:

1
Code

Code: tipo de notificacin que se ha producido.


0: el estado del sistema ha cambiado.
1: el sistema acaba de arrancar correctamente.
2: el sistema acaba de arrancar incorrectamente.
3: el sistema se est cerrando debido a un mensaje de peticin de

apagado.
4: el sistema se est cerrando debido a causas internas.
5: vehculos solapados (se ha lanzado un trigger antes de acabar el

procesado del vehculo anterior).

4.4. Mensajes de peticin


4.4.1. VersionQuery
Peticin de informacin sobre el firmware que est funcionando en una unidad de
reconocimiento.
Peticin
Type: 64
Message Data: no hay campo de datos.

Respuesta
Quercus Technologies

53

SmartLPR

Manual de Programacin

Type: 128
Message Data:
64

1
Maj

Name

Min Rev

Name: Nombre del producto. Los caracteres no usados estarn a cero.


Major (Maj): nmero principal de versin.
Minor (Min): nmero secundario de versin.
Revision (Rev): nmero de revisin del producto.

4.4.2. Reboot
Peticin de reinicio de la unidad de reconocimiento.
Peticin
Type: 65
Message Data:

1
Op

Operation (Op): tipo de operacin a realizar. Reservado para futuros usos,

actualmente solamente se acepta un valor:


0: reiniciar.

Respuesta
ACK/NAK

4.4.3. Output
Peticin de activacin de una de las salidas de la unidad de reconocimiento.
Peticin
Type: 66
Message Data:

Quercus Technologies

Bit

Time

54

SmartLPR

Manual de Programacin
Bit: bit que se quiere activar.
Time: tiempo en milisegundos que deber permanecer activo.
Si el tiempo es igual a 0xFFFFFFFF el bit permanecer activo indefinidamente. Si

el tiempo es igual a cero el bit se desactivar.

Respuesta
ACK/NAK
El significado de los posibles cdigos de error de NAK es:
2: la operacin ha fallado por causas desconocidas.
3: el bit que se ha intentado activar no existe.

4.4.4. Trigger
Peticin de captura y procesado de imgenes.
Peticin
Type: 67
Message Data:
4
TriggerId

Trigger Id.: identificador de trigger que se asociar a la matrcula reconocida.

Respuesta
ACK/NAK
El significado de los posibles cdigos de error de NAK es:
3: la operacin no est permitida porque la unidad trabaja en modo hardware o est

inactiva.
4: la unidad todava est capturando imgenes de la peticin anterior.

4.4.5. Status
Obtencin del estado de los distintos componentes de la unidad.
Peticin
Type: 68
Message Data: no hay campo de datos.
Quercus Technologies

55

SmartLPR

Manual de Programacin

Respuesta
Type: 132
Message Data:
1
Actv

IO Cam

Active Status (Actv):


1: la unidad est activa.
0: la unidad est inactiva.
I/O Card Status (Ioc): reservado para uso futuro, siempre 0.
Camera Status (Cam):
1: el estado de la cmara es correcto.
0: el estado de la cmara es incorrecto.

4.4.6. Input
Obtencin del estado de los canales de entrada de la unidad.
Peticin
Type: 69
Message Data: no hay campo de datos.

Respuesta
Type: 133
Message Data:
4
Channels

Channels: valores de las entradas. Cada bit del campo representa la entrada que

se encuentra en la misma posicin que dicho bit. Solo estn soportados 2


canales. El resto de los bits est reservados para futuras ampliaciones.

4.4.7. Activate
Activar/desactivar los eventos que se produzcan en la unidad.
Peticin

Quercus Technologies

56

SmartLPR

Manual de Programacin

Type: 70
Message Data:
1
Actv

activar/desactivar los eventos.


1: activar los eventos de la unidad.
0: desactivar los eventos de la unidad. sta no reaccionar a eventos

externos (llegadas de vehculos, cambios en las entradas, triggers, etc).


Respuesta
ACK/NAK

4.4.8. GetPicture
Obtencin de la imagen de la ltima matrcula reconocida.
Peticin
Type: 71
Message Data:

4
CarId

Car Id.: identificador del vehculo del que se quiere obtener la imagen.

Respuesta
Type: 135
Message Data:

2
RoiTop

2
RoiLeft

RoiBottom

RoiRight

4
ImageSize

Variable (max. 65000)


Image Data

ROI (RoiTop, RoiLeft, RoiBottom, RoiRight): regin de inters; coordenadas

superior, izquierda, inferior y derecha respectivamente, de la posicin de la


imagen en la que se ha encontrado la matrcula.

Quercus Technologies

57

SmartLPR

Manual de Programacin
Image Size: tamao de la imagen en bytes. Si es cero la imagen no ha podido

ser obtenida porque ya se ha procesado otra imagen posteriormente.


Image Data: datos de la imagen en formato JPEG. Si este campo se guarda en

un fichero a disco, formar un archivo JPEG conforme a los estndares del JPEG
group. El tamao del campo es variable (el indicado por el campo ImageSize).

4.4.9. CurrentFrame
Obtencin de la imagen actual.
Peticin
Type: 72
Message Data:

4
ExposureTime

Exposure Time: tiempo de exposicin al obtener la imagen, en microsegundos.

Respuesta
Type: 136
Message Data:
4
ImageSize

Variable (max. 65000)


Image Data

Image Size: tamao de la imagen en bytes. Si es cero la imagen no ha podido

ser obtenida.
Image Data: datos de la imagen en formato JPEG. Si este campo se guarda en

un fichero a disco, formar un archivo JPEG conforme a los estndares del JPEG
group. El tamao del campo es variable (el indicado por el campo ImageSize).

4.4.10. ActivateFocus
Activar el foco de la cmara.
Peticin
Type: 73
Message Data:

Quercus Technologies

58

SmartLPR

Manual de Programacin

Time:

Time: tiempo que permanecer el foco activo, en segundos. Si el tiempo es cero

y el foco estaba activo debido a un mensaje anterior, se desactivar.


Respuesta
ACK/NAK
El significado de los posibles cdigos de error de NAK es:
3: el tiempo indicado no es correcto.

4.5. Mensajes de confirmacin


4.5.1. ACK
Confirmacin de que el mensaje se ha recibido e interpretado correctamente.
Type: 192
Message Data: no hay campo de datos.

4.5.2. NAK
Informa de que un mensaje no ha podido ser correctamente recibido, interpretado o
ejecutado.
Type: 193
Message Data:
1

Code Subc

Code: identificador del tipo de error que se ha producido:


0 (Unknown message): el mensaje tiene un formato correcto pero no se

conoce su significado.
1 (Bad format): el mensaje no ha sido recibido correctamente (falla el

bcc, faltan bytes, etc.).


2 (Unknown error): la accin que deba desencadenar el mensaje no ha

podido ser completada por causas desconocidas. Por ejemplo, una tarjeta
de E/S defectuosa puede impedir que una peticin Activate output
Quercus Technologies

59

SmartLPR

Manual de Programacin

pueda ser completada con xito.


3 (Bad parameters): alguno de los parmetros del mensaje es incorrecto.

El ndice del parmetro incorrecto se especificar en el campo SubCode.


4 (Cant complete): la accin no ha podido ser completada, por ejemplo

porque el sistema est ocupado en el caso de solicitar una captura de


imgenes cuando todava no ha terminado la captura anterior.
5 (Incorrect Unit): el identificador de la unidad que se indica en el

mensaje no corresponde a la unidad a la que se ha enviado.


6 (Incorrect version): la unidad no puede interpretar esta versin del

mensaje.

10 (Bad auth.): el sistema de configuracin deniega el permiso para la


operacin solicitada.

SubCode: informacin adicional sobre el error producido.

4.6. Mensajes de configuracin


Los mensajes de configuracin se envan y se reciben por puertos distintos (tambin
configurables) al del resto de mensajes ya que los mecanismos de configuracin de la unidad
forman un subsistema totalmente independiente del de reconocimiento. El formato de estos
mensajes as como el protocolo de comunicaciones es idntico al del resto de mensajes, sin
embargo, estos no tienen porque provenir de la direccin IP que este configurada para servir
como sistema central, sino que pueden provenir de cualquier direccin, la respuesta siempre
se enviar a la direccin IP desde el que se haya enviado el ltimo mensaje de Login correcto,
el puerto de destino ser el que se haya especificado en dicho mensaje (vase ms abajo).
Los mensajes de configuracin no pueden enviarse mediante el puerto serie.

4.6.1. Ping
Manda una peticin de respuesta al sistema de configuracin. Su funcin es comprobar si en la
direccin IP y puerto a la que se enva dicho mensaje hay un sistema de configuracin
SmartLPR funcionando. No es necesario haber completado un mensaje de Login con xito
para obtener respuesta a este mensaje.
Peticin
Type: 96
Message Data:
Quercus Technologies

60

SmartLPR

Manual de Programacin

4
Port:

Port: puerto al que el sistema de configuracin debe enviar la respuesta.

Respuesta
ACK/NAK

4.6.2. Login
Obtiene acceso al sistema de configuracin de la unidad.
Peticin
Type: 97
Message Data:
4

64

Port:

Password

Password: contrasea del sistema de configuracin.


Port: puerto al que el sistema de configuracin debe enviar la respuesta.

Respuesta
Type: 161
Message Data:
4
SessionId

SessionId: identificador de la sesin. Este entero debe usarse en el resto de

mensajes para verificar que proceden de una fuente autentificada.

4.6.3. Logout
Pierde el acceso al sistema de configuracin y convierte en invlido el valor de SessionId
actual.
Peticin
Type: 98

Quercus Technologies

61

SmartLPR

Manual de Programacin
Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.4. PasswordChange
Cambia la contrasea de acceso al sistema de configuracin. Este cambio no es permanente
hasta que no se aplican cambios.
Peticin
Type: 99
Message Data:
4
SessionId

64
New

Password

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


NewPassword: nueva contrasea.

Respuesta
ACK/NAK

4.6.5. SyncTime
Fuerza la sincronizacin inmediata de la fecha y hora con el servidor de fecha y hora
configurado.
Peticin
Type: 100
Message Data:
4
SessionId

Quercus Technologies

62

SmartLPR

Manual de Programacin
SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.6. SetTime
Establece la fecha y hora indicada.
Peticin
Type: 101
Message Data:
4

SessionId

Time:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


Time: tiempo en segundos transcurridos desde 01/01/1970 00:00:00 h.

Respuesta
ACK/NAK

4.6.7. ExportLog
Exporta el fichero de log del subsistema especificado dejndolo en la carpeta raz del servidor
FTP.
Peticin
Type: 102
Message Data:
4

SessionId

Sys

64
FileName:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


System(Sys): subsistema a exportar:
0: sistema de reconocimiento.
1:adaptador udp <-> serie.
2: sistema de configuracin.
3: sistema de ficheros.
Quercus Technologies

63

SmartLPR

Manual de Programacin
FileName: nombre con el que se debe guardar el fichero en la carpeta de FTP.

Respuesta
ACK/NAK

4.6.8. SystemInfo
Obtiene informacin sobre la unidad.
Peticin
La estructura corresponde a la versin 1.

Type: 103

Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo "login" vlido.

Versin 0:
Los campos de la estructura tienen el mismo significado, pero la versin de la respuesta
depende de la versin de la peticin.
Respuesta
La estructura corresponde a la versin 1.

Type: 167

Message Data:
1

64
P. Name
1

Mah Mhi Rh ProductionDate

15
Serial N.

18
MAC

4
BootTime:

Maf Mif Rf

ProductName (P. Name): nombre del producto.

HardwareMajor (Mah): primera cifra de la versin del hardware. Ej: 1.2.3.

HardwareMinor (Mih): segunda cifra de la versin del hardware. Ej: 1.2.3.

HardwareRevision (Rh): tercera cifra de la versin del hardware. Ej: 1.2.3.

ProductionDate: fecha de fabricacin en segundos desde 01/01/1970 00:00:00h.

SerialNumber: nmero de serie de la unidad.

MAC: Direccin MAC de la unidad.

Quercus Technologies

64

SmartLPR

Manual de Programacin

BootTime: fecha y hora de arranque en segundos desde 01/01/1970 00:00:00h.

FirmwareMajor (Maf): primera cifra de la versin del firmware. Ej: 1.2.3.

FirmwareMinor (Mif): segunda cifra de la versin del firmware. Ej: 1.2.3.

FirmwareRevision (Rf): tercera cifra de la versin del firmware. Ej: 1.2.3.

Versin 0:
64
P. Name

Mah Mhi Rh ProductionDate

15
Serial N.

18
MAC

4
BootTime:

Los campos FirmwareMajor, FirmwareMinor y FirmwareRevision no existen. Los campos


HardwareMajor, HardwareMinor y HardwareRevision no indican la versin del hardware,
sino la del firmware.

4.6.9. ExportStatus
Exporta un informe del estado del sistema dejndolo en la carpeta raz del servidor FTP.
Peticin
Type: 104
Message Data:
4
SessionId

64
FileName:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


FileName: nombre con el que se debe guardar el fichero en la carpeta de FTP.

Respuesta
ACK/NAK

4.6.10. ImportConfiguration
Importa la configuracin de un fichero de la carpeta raz del servidor FTP.
Peticin
Type: 105
Message Data:

Quercus Technologies

65

SmartLPR

Manual de Programacin

4
SessionId

64
FileName:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


FileName: fichero de la carpeta de FTP del cual se quiere importar la

configuracin.
Respuesta
ACK/NAK

4.6.11. ExportConfiguration
Exporta la configuracin a un fichero de la carpeta raz del servidor FTP.
Peticin
Type: 106
Message Data:
4
SessionId

64
FileName:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


FileName:

fichero de la carpeta de FTP al cual se quiere exportar la

configuracin.
Respuesta
ACK/NAK

4.6.12. ApplyChanges
Aplica los cambios realizados a las variables del sistema y reinicia la unidad. Despus de usar
este mensaje el valor de SessionId deja de ser vlido.
Peticin
Type: 107
Message Data:

Quercus Technologies

66

SmartLPR

Manual de Programacin

4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.13. DiscardChanges
Descarta los cambios realizados a las variables del sistema.
Peticin
Type: 108
Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.14. GetEntriesCount
Obtener el nmero de variables del sistema de configuracin.
Peticin
Type: 109
Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
Type: 173
Message Data:
Quercus Technologies

67

SmartLPR

Manual de Programacin

4
EntriesCount

EntriesCount: nmero de parmetros.

4.6.15. GetEntry
Obtener informacin sobre la variable indicada por su ndice o por su nombre.
Peticin
Type: 110
Message Data:
4

64

SessionId

Index:

Name

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


Name: nombre de la variable de la cual se quiere obtener informacin. Si este

campo est vaco (el primer carcter es \0) se usar el campo Index.
Index: ndice (empezando por 0) de la variable de la que se quiere obtener

informacin. Solamente se usa si el campo Name est vaco.


Respuesta
Type: 174
Message Data:
64
Name

64
Value:

64
Descr1

64
Descr2

Name: nombre de la variable.


Value: valor actual de la variable.
Description1: descripcin de la variable en el idioma por defecto.
Description2: descripcin de la variable en el idioma configurado por el usuario..

4.6.16. SetEntry
Cambia el valor de la variable indicada por su nombre.
Peticin

Quercus Technologies

68

SmartLPR

Manual de Programacin

Type: 111
Message Data:
4

64

SessionId

64

Name

Value:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


Name: nombre de la variable.
Value: valor que se quiere dar a la variable.

Respuesta
ACK/NAK

4.6.17. RestoreEntry
Restaura el valor de fbrica de la variable indicada por su nombre.
Peticin
Type: 112
Message Data:
4

64

SessionId

Name

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


Name: nombre de la variable.

Respuesta
ACK/NAK

4.6.18. RestoreFirmware
Restaura el firmware de fbrica de la unidad y reinicia la unidad. Despus de usar este
mensaje el valor de SessionId deja de ser vlido.
Peticin
Type: 113
Message Data:

Quercus Technologies

69

SmartLPR

Manual de Programacin
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.19. UpdateFirmware
Actualiza el firmware de la unidad utilizando un fichero de la raz del servidor de FTP y reinicia
la unidad. Despus de usar este mensaje el valor de SessionId deja de ser vlido.
Peticin
Type: 114
Message Data:
4
SessionId

64
FileName:

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.


FileName: nombre del fichero a usar en la actualizacin.

Respuesta
ACK/NAK

4.6.20. FormatRWPartition
Formatea el disco de datos, donde se almacenan los reconocimientos. Ntese que se
eliminarn todos los ficheros, sin posibilidad alguna de recuperarlos.
Para formatear el disco de datos la unidad precisa de parar tanto el sistema de deteccin como
el servidor FTP/SFTP, por lo que la estos dejarn de ser funcionales durante el proceso.
Adems, el formateo puede llevar unos minutos, durante los cuales el sistema de configuracin
no responder a ningn mensaje.
Una vez realizado el formateo es imprescindible reiniciar la unidad para que
vuelvan a funcionar correctamente todos los servicios (vase 4.6.21 Restart ).

Peticin
Type: 115
Quercus Technologies

70

SmartLPR

Manual de Programacin

Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.21. Restart
Esta peticin ha sido diseado nica y exclusivamente para ser utilizada despus de formatear
el disco de datos de la unidad (vase 4.6.20 FormatRWPartition ).
Peticin
Type: 116
Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo Login vlido.

Respuesta
ACK/NAK

4.6.22. GetLanguage
Obtiene el idioma configurado actualmente en el sistema de configuracin.
Peticin

Type: 117

Message Data:
4
SessionId

SessionId: identificador de la sesin obtenido en el ltimo "login" vlido.

Respuesta

Type: 175

Quercus Technologies

71

SmartLPR

Manual de Programacin

Message Data:
8
Language

Language: el idioma configurado, indicado como un cdigo de 2 caracteres (ISO


639-1) acabado con el carcter \0.

4.6.23. SetLanguage
Establece el idioma del sistema de configuracin.
Peticin

Type: 118
8

4
SessionId

Language

Message Data:

SessionId: identificador de la sesin obtenido en el ltimo "login" vlido.

Language: el idioma de llegada, indicado como un cdigo de 2 caracteres (ISO


639-1) acabado con el carcter \0.

Respuesta
ACK/NAK

Quercus Technologies

72

SmartLPR

Manual de Programacin

5. Simuladores SmartLPR
Este captulo describe los simuladores SmartLPR , que forman parte del software cliente
disponible en el CD-ROM.

No es necesario disponer de unidades fsicas de SmartLPR para

seguir los pasos descritos en este captulo. Consulte el manual de usuario

SmartLPR

Access/Speed para conocer el resto del software cliente disponible en el CD-Rom.


AccessSimu y SpeedSimu son simuladores de la unidad SmartLPR , que pueden simular una
unidad SmartLPR Access o SmartLPR Speed, respectivamente. Con los simuladores
SmartLPR

se puede simular una serie completa de eventos generados por un sistema

SmartLPR. Pueden simularse tantas unidades como se quiera ejecutando tantas instancias del
programa como sea necesario.
El simulador SmartLPR no efecta ningn cambio real en su equipo, no modificar la hora
cuando se le solicite ni lo reiniciar al aplicar cambios, por ejemplo. Los nicos cambios reales
que produce son sobre el fichero de configuracin principal y sobre el fichero de contrasea
(Vea ms abajo).
Con su uso puede comprobarse el correcto funcionamiento de cualquier programa pensado
para interactuar con un sistema SmartLPR.

5.1. Configuracin de la unidad


Lo primero que deber hacerse es construir los ficheros necesarios para la ejecucin de los
parmetros del simulador.
Fichero de configuracin principal: fichero de configuracin con secciones definidas

entre parntesis y con una variable por lnea.


Las variables que contiene este fichero son las mismas y tienen el mismo significado
que las que se pueden encontrar en la configuracin del sistema de reconocimiento de
la unidad (vase Configuracin del sistema de reconocimiento para ms informacin).
Por ejemplo, "Global/SystemId" corresponde a la variable "SystemID" en la seccin
"[Global]".
Ejemplo de fichero de configuracin AccessSimu:
[Global]
SystemId=1
WorkingMode=hardware

Quercus Technologies

73

SmartLPR

Manual de Programacin

DiskHistoricSize=100
LogLevel=1
[Communications]
Protocol=UDP
ListeningPort=7051
Timeout=500
Retries=2
CentralSystemHost=127.0.0.1
CentralSystemPort=7050
CentralSystemHost2=
CentralSystemPort2=7050
CompressionQuality=75
ObserversDefaultPort=7055
ObserversList=127.0.0.1
Password=
ConfigurationServerPort=7041
[Recognizer]
DelayTime1=0
DelayTime2=0
DecisionTime=1000
[IO]
SensorChannel1=0
SensorChannel2=1
SensorChannel3=2
UsedInputs=

Ejemplo de fichero de configuracin SpeedSimu:


[Global]
SystemId=1
WorkingMode=hardware
DiskHistoricSize=100
LogLevel=1
[Communications]
Protocol=UDP
ListeningPort=7051
Timeout=500
Retries=2
CentralSystemHost=127.0.0.1
CentralSystemPort=7050
CentralSystemHost2=
CentralSystemPort2=7050
CompressionQuality=75
ObserversDefaultPort=7055
ObserversList=127.0.0.1
Password=
ConfigurationServerPort=7041
[Recognizer]
DelayTime=0
[IO]
UsedInputs=

Fichero de configuracin por defecto: fichero con las mismas variable que el anterior. El

valor de estas variables es el que se usa cuando se restaura el valor por defecto de una
variable (mediante el sistema de configuracin).
Fichero de contrasea: fichero de texto de una sola linea en la que se encuentra

almacenada la contrasea del sistema de configuracin.

Quercus Technologies

74

SmartLPR

Manual de Programacin

5.1.1. Comunicacin serie


Si se desea utilizar comunicaciones serie en lugar de UDP en la simulacin, hay un paso ms
que debe realizarse y es configurar el adaptador serie (ComBridge).
ComBridge es un programa que se encarga de recibir las tramas que llegan por un puerto UDP
y enviarlas por el puerto serie y leer las tramas que llegan por el puerto serie y enviarlas por
un puerto UDP. Para configurarlo debe crearse un fichero de configuracin que posteriormente
se le pasar como parmetro al adaptador. Las variables que contiene la seccin [Serial] de
este fichero son las mismas y tienen el mismo significado que las que se pueden encontrar en
la configuracin del adaptador serie de la unidad (vase Configuracin del adaptador serie
para ms informacin) con la excepcin de las siguientes:
Port: indica qu puerto usar para las comunicaciones (a partir de 1). Por ejemplo: 1 indicar
COM1 en mquinas Windows y /dev/ttyS0 en mquinas Linux.
El resto de las secciones y variables tienen el siguiente significado:
[Global]: parmetros globales de funcionamiento.
SystemId: identificador de la unidad. Todas las tramas que se reciban por el

puerto serie que no correspondan a este identificador sern despreciadas.


[Network]: parmetros de red.
Host: direccin IP o nombre de la mquina a la que se enviarn las tramas

mediante UDP.
Password: contrasea de la encriptacin de protocolo.
SendToPort: puerto al que se enviarn las tramas UDP.
ReceiveFromPort: puerto por el que se recibirn las tramas UDP.

Ejemplo de fichero de configuracin:


[Global]
SystemId=1
[Network]
Host=127.0.0.1
Password=
SendToPort=7051
ReceiveFromPort=7050
[Serial]
Port=1
Baudrate=9600

Quercus Technologies

75

SmartLPR

Manual de Programacin

A continuacin se muestra de forma grfica la interaccin entre las tres aplicaciones (SASimu,
ComBridge y la aplicacin cliente). Debe tenerse en cuenta que la flexibilidad de la
configuracin hace que las tres puedan estar ejecutndose en mquinas diferentes.

Simulador

[Network]
CentralSystemPort

[Network]
ListeningPort

Comunicacin UDP
[Network]
ReceiveFromPort

[Network]
SendToPort
[Serial]
Port:

Comunicacin
Serie

Aplicacin cliente

ComBridge:
5.2. Configuracin de la simulacin
El siguiente paso a realizar es la configuracin de la propia simulacin que debe llevar a cabo
el programa. Para ello debe prepararse una carpeta con:
un fichero con el guin de la simulacin que deber nombrarse como Simulation.ini y todos
los archivos con imgenes que la simulacin pueda necesitar (en formato BMP o JPEG).
El fichero de simulacin contendr una serie de lneas que pueden ser bsicamente de dos
tipos:
Comentarios: todas las lneas que comiencen con el carcter # sern consideradas

comentarios y sern ignoradas por el simulador.


Eventos de la unidad: todas las lneas que representan eventos (o cambios de estado)

tendrn un formato comn:


Momento, Tipo de evento, Parmetros del evento
Momento: momento en el tiempo (en milisegundos) en el que ocurrir el evento.

El tiempo se calcula de forma relativa; cada evento indica cuanto tiempo


despus del anterior suceder (el primero mide su tiempo a partir del inicio de
ejecucin del simulador). Cuando se sobrepase el ltimo evento de la
simulacin, se volver al estado inicial.
Hay que tener en cuenta que el estado inicial de la simulacin (antes del primer
evento) representa una unidad donde la cmara tiene una imagen vaca, el
Quercus Technologies

76

SmartLPR

Manual de Programacin

estado de los componentes de la unidad es correcto y no hay ningn bit de


entrada activado. Si se quiere partir de un estado diferente basta con establecer
en el momento 0 los eventos necesarios para conseguir el estado de partida
deseado. Cuando se sobrepase el ltimo evento de la simulacin, se volver al
estado inicial.
Tipo de evento: existen tres tipos de evento:
Cambios en lo que la cmara percibe.
Cambios en las entradas de la tarjeta de E/S.
Cambios en el estado de los componentes de la unidad (correcto o

incorrecto).
Parmetros del evento: dependern de cada tipo de evento (vase los siguientes

puntos).

5.2.1. Eventos de cambio en la cmara


Los eventos de cambios en la cmara simulan el hecho de que lo que ve la cmara cambia
con el tiempo. Con este evento se expresa el cambio en la imagen actual de la cmara y el
cambio en lo que reconocera el motor de OCR si se aplicase sobre dicha imagen. El formato
del evento es el siguiente:
TimeInterval, C, BitmapFile, License, Chars, AvgQuality, MinQuality,
IsGrammarOk, Country, TimeToRecognize
Ejemplo:
2000, C, 1.bmp, 1234 ABC, 1234ABC, 0.92, 0.87, 1, ES, 300
Donde:
TimeInterval (2000 en el ejemplo): momento a partir del anterior evento en el que

suceder el cambio.
C: letra C (literalmente), indica al simulador que se trata de un evento de cmara.
BitmapFile (1.bmp en el ejemplo): nombre del fichero grfico que contendr la

imagen de lo que ver la cmara. El fichero puede tener formato BMP o JPEG y
preferiblemente de 640x480 en escala de grises. La imagen debe estar en la misma
carpeta que el fichero Simulation.ini.
License (1234 ABC en el ejemplo): matrcula adornada con sus correspondientes

guiones y espacios que reconocer el OCR.


Chars (1234ABC en el ejemplo): caracteres sin guiones ni espacios que reconocer el

OCR.
AvgQuality (0.97 en el ejemplo): calidad media del reconocimiento (de 0 a 1).
Quercus Technologies

77

SmartLPR

Manual de Programacin

MinQuality (0.87 en el ejemplo): calidad del carcter con peor calidad (de 0 a 1).
IsGrammarOk (1 en el ejemplo): indica si la matrcula cumple con alguna gramtica

conocida o no (1 para indicar que s la cumple, 0 para lo contrario).


Country (ES en el ejemplo): identificador del pas por el cual se ha reconocido la

matrcula.
TimeToRecognize (300 en el ejemplo): tiempo en milisegundos que debe tardarse en

simular el reconocimiento de la matrcula, a partir del momento que este se inicia, ya


sea por un evento de cambio en la tarjeta de E/S o por una peticin desde la aplicacin
cliente.

5.2.2. Eventos de cambio en las E/S


Simulan el hecho de que los bits de entrada activos de la tarjeta de E/S cambian con el
tiempo. El formato del evento es el siguiente:
TimeInterval, B, Bit, Value
Ejemplo:
2000, B, 0, 1
Donde:
TimeInterval (2000 en el ejemplo): momento a partir del anterior evento en el que

suceder el cambio.
B: letra B (literalmente), indica al simulador que se trata de un evento de cambio

en la tarjeta de E/S.
Bit (0 en el ejemplo): nmero de bit que cambia (de 0 a 1).
Value (1 en el ejemplo): valor que toma (0 o 1).

Si quiere simularse un cambio de mltiples bits al mismo tiempo, bastar con simular cambios
de bits separados 0 milisegundos entre ellos. Por ejemplo, si se quiere simular que se activan
al mismo tiempo los bits 0 y 1 se escribir lo siguiente:
...
2000, B, 0, 1
0

, B, 1, 1

...

5.2.3. Eventos de cambio de estado


Simulan el hecho de que algn componente del hardware de la unidad pueda tener problemas

Quercus Technologies

78

SmartLPR

Manual de Programacin

de funcionamiento. El formato del evento es el siguiente:


TimeInterval, S, IOCardStatus, CameraStatus
Ejemplo:
2000, S, 1, 0

Donde:
TimeInterval (2000 en el ejemplo): momento a partir del anterior evento en el que

suceder el cambio.
S: letra S (literalmente) indica al simulador que se trata de un evento de cambio de

estado.
IOCardStatus (1 en el ejemplo): estado de la tarjeta de E/S (1 correcto, 0 error).
CameraStatus (0 en el ejemplo): estado de la cmara (1 correcto, 0 error).

5.3. Ejecucin
La puesta en marcha de una simulacin implica uno o dos pasos dependiendo de la
configuracin elegida. Si se desea simular una unidad con comunicacin UDP bastar con
poner en marcha AccessSimu o "SpeedSimu"; si se desea simular una unidad con
comunicacin serie, primero deber ponerse en marcha el adaptador serie ComBridge. Debe
recordarse

que

el

sistema

de

configuracin

solamente

funciona

mediante

UDP,

independientemente de las comunicaciones elegidas.

5.3.1. Simulador
Existen dos versiones de cada simulador, una con interfaz grfica

(SpeedSimuGui y

AccessSimuGui) y otra en lnea de comandos (SpeedSimu y AccessSimu). Ambas ofrecen la


misma funcionalidad.
El simulador se ejecutar abriendo una consola (tanto en Windows como en Linux) y
colocndose en la carpeta /Bin del directorio de instalacin. Desde all se invocar el simulador
con el siguiente comando:
SpeedSimu:
SpeedSimu

<FIni> <FDefecto> <FContrasea> <FLog> <CarpetaSimulacin>


<CarpetaPersistente>

o
Quercus Technologies

79

SmartLPR

Manual de Programacin

SpeedSimuGui <FIni> <FDefecto> <FContrasea> <FLog> <CarpetaSimulacin>


<CarpetaPersistente>
AccessSimu:
AccessSimu

<FIni> <FDefecto> <FContrasea> <FLog> <CarpetaSimulacin>


<CarpetaPersistente>

o
AccessSimuGui <FIni> <FDefecto> <FContrasea> <FLog> <CarpetaSimulacin>
<CarpetaPersistente>
Donde:
SpeedSimu/AccessSimu: ejecutable del simulador. Desde Linux, dependiendo de su

configuracin, deber ejecutarse como "./SpeedSimu" o ./AccessSimu.


SpeedSimuGui/AccessSimuGui: ejecutable del simulador con interfaz grfica. Desde

Linux, dependiendo de su configuracin, deber ejecutarse como "./SpeedSimuGui" o


./AccessSimuGui.
FIni: camino (absoluto o relativo) hacia el fichero que contiene la configuracin de la

unidad a simular.
FDefecto:

camino (absoluto o relativo) hacia el fichero que contiene la configuracin

por defecto de la unidad.


FContrasea:

camino (absoluto o relativo) hacia el fichero de contrasea del sistema

de configuracin.
FLog: camino (absoluto o relativo) hacia el fichero donde se dejar la informacin que

genere el simulador.
CarpetaSimulacin: camino (absoluto o relativo) hacia la carpeta donde se encontrar

la simulacin a realizar. Dentro de esta carpeta deben estar el fichero Simulation.ini y


todos los ficheros de imagen que este necesite.
CarpetaPersistente: directorio dnde el simulador almacenar los reconocimientos

generados (simula el directorio Log/ de la FTP de la unidad).

Quercus Technologies

80

SmartLPR

Manual de Programacin

5.3.1.1. Interfaz grfica

El simulador con interfaz grfica tiene la misma funcionalidad que el simulador en modo texto,
pero permite conocer el estado de la simulacin de una forma mucho ms visual.
Adems, tiene alguna funcionalidad ms que el simulador en modo texto, como por ejemplo
poder modificar la velocidad de la simulacin en tiempo real, o pausar totalmente la
simulacin.
Consta de una sola ventana en la que pueden ver los siguientes campos:
Imagen: la imagen que est viendo actualmente la cmara del simulador.
Matrcula: datos resumidos de la matrcula que reconocer el simulador si se

Quercus Technologies

81

SmartLPR

Manual de Programacin

desencadena un proceso de reconocimiento (ya sea por trigger software o trigger


hardware).
Entradas: estado de los bits de entrada de la tarjeta de E/S. En rojo, el bit est inactivo

(0); en verde, el bit est activo (1).


Salidas: estado de los bits de salida de la tarjeta de E/S. En rojo, el bit est inactivo

(0); en verde, el bit est activo (1).


Estado: estado de los componentes de la unidad: E/S es el estado de la tarjeta de

E/S y Cmara el estado de la cmara. En verde, el estado es correcto; en rojo, el


estado es errneo.
Activo: indica qu componentes estn activos en la unidad: Unidad indica si la unidad

est

activa

(verde)

inactiva

(rojo).

Foco indica si el foco est encendido (verde) o apagado (rojo).


Mensajes de configuracin: muestra informacin sobre el sistema de configuracin.
Velocidad de simulacin: permite variar la velocidad de la simulacin. Deslizando el

control hacia la izquierda la simulacin ir ms lenta (hasta 1/10 de la velocidad


original) y desplazndolo a la derecha, ms rpido (hasta 10 veces la velocidad
original).
Botn de pausa: pausa la simulacin de forma que la unidad no genere ms eventos.
Botn de salir: acaba la ejecucin del programa.

5.3.2. Adaptador serie


El adaptador serie se ejecutar abriendo una consola (tanto en Windows como en Linux) y
colocndose en la carpeta /Bin del directorio de instalacin. Desde all se invocar con el
siguiente comando:
ComBridge <FicheroIni> <FicheroLog> o
ComBridgeGui <FicheroIni> <FicheroLog>
Donde:
ComBridge: ejecutable del adaptador. Desde Linux, dependiendo de su configuracin,

deber ejecutarse como ./ComBridge.


ComBridgeGui:

ejecutable

del

adaptador.

Desde

Linux,

dependiendo

de

su

configuracin, deber ejecutarse como ./ComBridgeGui.


FicheroIni: camino (absoluto o relativo) hacia el fichero que contiene la configuracin

del adaptador.
FicheroLog: camino (absoluto o relativo) hacia el fichero donde se dejar la informacin

que genere ComBridge.

Quercus Technologies

82

SmartLPR

Manual de Programacin

5.4. Ejemplos de simulacin


A continuacin se describen algunos ejemplos de las secuencias de eventos bsicas que
componen la mayora de las simulaciones. A partir de estos ejemplos pueden construirse otras
tan complejas como se quiera.
En la carpeta Simulations del directorio de instalacin podr encontrar ejemplos ms
completos (Case1, Case2, etc.), consulte el fichero Readme.txt de dicha carpeta para saber
qu simula cada uno de ellos. En cada uno de los casos de simulacin pueden encontrarse
scripts en Linux o ficheros .bat en Windows (Simulator(.bat), Diagnosis(.bat)) que arrancan
automticamente

las

simulaciones,

la

herramienta

de

diagnstico,

correctamente

configuradas.

5.4.1. SmartLPR Access: Ciclo de un vehculo


Este ejemplo simula la llegada, cruce de la barrera y partida de un vehculo con matrcula
1234 ABC. Este ejemplo debe usarse con el carril configurado en modo hardware y los
sensores 1 y 2 en los canales 0 y 1 de la tarjeta. El total del tiempo empleado es de 6
segundos.
# activa el primer sensor
3000, B,0,1
# el vehculo se pone en el campo visual de la cmara
0, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,300
# activa el segundo sensor
1000, B,1,1
# deja de activar el primer sensor
1000, B,0,0
# deja de activar el segundo sensor
1000, B,1,0

Se producirn los siguientes eventos:


Llegada del vehculo.
Reconocimiento de matrcula 1234 ABC.
Partida correcta de vehculo.

5.4.2. SmartLPR Access: Ciclo de un vehculo con cola


Simula el ciclo de la llegada, y partida de un vehculo en condiciones de cola, es decir, cuando
el primer sensor no deja nunca de estar activado, ya que cuando lo abandona un vehculo el
siguiente ya lo est pisando. Se usa en las misma condiciones que los anteriores.
# activa el primer sensor
2000, B,0,1
# el vehculo se pone en el campo visual de la cmara
0, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,300
# activa el segundo sensor
2000, B,1,1

Quercus Technologies

83

SmartLPR

Manual de Programacin

# deja de activar el segundo sensor


2000, B,1,0
# otro vehculo aparece en el campo visual
0, C,5678DEF.bmp,5678 DEF,5678DEF,0.97,0.90,1,ES,300
# Activa el segundo sensor
2000, B,1,1
# deja de activar el primer sensor
2000, B,0,0
# deja de activar el segundo sensor
2000, B,1,0

Se producirn los siguientes eventos:


Llegada del vehculo 1.
Reconocimiento de la matrcula 1234 ABC.
Partida correcta del vehculo 1.
Llegada del vehculo 2.
Reconocimiento de la matrcula 5678 DEF.
Partida correcta del vehculo 2.

5.4.3. SmartLPR Access: Marcha atrs


Simula la llegada y partida marcha atrs de un vehculo antes de cruzar la barrera. Se usa en
las misma condiciones que los anteriores.
# activa el primer sensor
4000, B,0,1
# el vehculo se pone en el campo visual de la cmara
0, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,300
# deja de activar el primer sensor
2000, B,0,0

Se producirn los siguientes eventos:


Llegada del vehculo.
Reconocimiento de la matrcula 1234 ABC.
Partida incorrecta del vehculo (marcha atrs).

5.4.4. SmartLPR Access: Carril de retorno


Simula la llegada y partida de un vehculo por el carril de retorno (antes de cruzar la barrera).
Se usa en las misma condiciones que los anteriores.
# activa el primer sensor
4000, B,0,1
# el vehculo se pone en el campo visual de la cmara
0, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,300
# activa el tercer sensor
2000, B,2,1
# deja de activar el primer sensor
2000, B,0,0
# deja de activar el tercer sensor
2000, B,2,0

Quercus Technologies

84

SmartLPR

Manual de Programacin

Se producirn los siguientes eventos:


Llegada del vehculo.
Reconocimiento de la matrcula 1234 ABC.
Partida incorrecta del vehculo (carril de retorno).

5.4.5. SmartLPR Access: Modo software


Simula los eventos que se producen con la llegada y partida de un vehculo cuando la unidad
est configurada en modo software.
# el vehculo sale del campo visual de la cmara
2000, C,vacia.bmp,,,0.0,0.0,1,30

Solamente se producirn eventos de reconocimiento cuando desde la aplicacin cliente se


enven triggers a la unidad.

5.4.6. SmartLPR Speed: Modo Hardware


A continuacin se describen ejemplos que simulan la llegada, el reconocimiento y la partida de
un vehculo con la matrcula "1234ABC". Debe usarse con el carril configurado en modo
hardware. El total del tiempo empleado es de 10 segundos.

# activa el sensor
9000, B,0,1
# el vehculo se pone en el campo visual de la cmara
0, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,80
# deja de activar el sensor
1000, B,0,0

Se producirn los siguientes eventos:

Llegada del vehculo

Reconocimiento de la matrcula 1234 ABC.

Partida del vehculo

5.4.7. SmartLPR Speed: Modo continuo


Simulacin de los eventos producidos cuando la unidad est configurada en modo continuo.

# El primer vehculo se pone en el campo visual de la cmara


5000, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,80
# El primer vehculo sale del campo visual de la cmara
5000, C,empty.bmp,,,0.97,0.90,1,20
# El segundo vehculo se pone en el campo visual de la cmara

Quercus Technologies

85

SmartLPR

Manual de Programacin

0, C,5678DEF.bmp,5678 DEF,5678DEF,0.97,0.90,1,ES,80

Se producirn los siguientes eventos:

Reconocimiento de la matrcula 1234 ABC.

Reconocimiento de la matrcula 5678 DEF.

5.4.8. SmartLPR Speed: Modo software


Simula los eventos que se producen con la llegada y partida de un vehculo cuando la unidad
est configurada en modo software.
# El primer vehculo se pone en el campo visual de la cmara
5000, C,1234ABC.bmp,1234 ABC,1234ABC,0.97,0.90,1,ES,80
# El primer vehculo sale del campo visual de la cmara
5000, C,empty.bmp,,,0.97,0.90,1,20
# El segundo vehculo se pone en el campo visual de la cmara
0, C,5678DEF.bmp,5678 DEF,5678DEF,0.97,0.90,1,ES,80

Solamente se producirn eventos cuando desde la aplicacin cliente se enven triggers a la


unidad.

5.4.9. Unidad SmartLPR: Cambios en la tarjeta E/S


Simula los eventos que se producen con la activacin y desactivacin de bits de la tarjeta de
E/S que no corresponden a sensores. En este ejemplo se supone que la unidad est
configurada en modo software, de forma que ninguno de los bits corresponde a un sensor.

# activa el
2000, B,0,1
# activa el
2000, B,1,1
# desactiva
2000, B,0,0
# desactiva
2000, B,1,0

primer bit
segundo bit
el primer bit
el segundo bit

Se producirn los siguientes eventos:

Cambio de bit 0 a 1.

Cambio de bit 1 a 1.

Cambio de bit 0 a 0.

Cambio de bit 0 a 1.

Quercus Technologies

86

SmartLPR

Manual de Programacin

5.4.10. Unidad SmartLPR: Errores de hardware


Simula errores espordicos en la tarjeta de E/S y en la cmara.
1000,S,1,1
15000,S,0,1
15000,S,1,1
15000,S,1,0
15000,S,1,1

Se producirn los siguientes eventos:

Cambio de estado a incorrecto: falla la tarjeta de E/S.

Cambio de estado a correcto.

Cambio de estado a incorrecto: falla la cmara.

Cambio de estado a correcto.

Quercus Technologies

87

SmartLPR

Manual de Programacin

6. Funciones adicionales
Las

unidades

SmartLPR

poseen

algunas

caractersticas

auxiliares

no

mencionadas

anteriormente:
Lista de observadores: permite conocer desde equipos diferentes del maestro en que

momento se producen reconocimientos.


Informacin

por

FTP:

permite

recuperar

la

informacin

del

reconocimiento

(imagen+datos) directamente desde el servidor de FTP integrado en la unidad.


Encriptacin de protocolo: permite encriptar el protocolo de comunicaciones UDP o serie

del equipo.
Estas funciones combinadas, permiten una integracin aun ms ptima en cualquier
infraestructura existente ya que permiten cosas como por ejemplo:
Usar la unidad con el protocolo serie para comunicar con un dispensador y recuperar las

imgenes y datos de los reconocimientos desde un ordenador central.


Tener ms de un ordenador recogiendo los datos de reconocimiento simultneamente o

en diferentes horarios.
Usar el protocolo de comunicaciones UDP en redes de datos no confiables sabiendo que

no podrn manipularse ni espiarse los mensajes intercambiados entres las unidades y


el sistema central.
Etc.

6.1. Lista de observadores


La unidad permite configurar una lista de direcciones y puertos que recibirn un mensaje UDP
especial cada vez que se produzca un reconocimiento. Este mensaje se enva siempre
mediante UDP independientemente del protocolo de comunicaciones usado. El mensaje tiene
un formato muy simple (no contiene ni siquiera caracteres de inicio o de fin). Su formato es:

UnitId:

CarId

FileId

Donde:
UnitID: es un entero de 32 bits que indica de que unidad proviene el mensaje.
CarId: es un entero de 32 bits que indica el identificador del vehculo reconocido.
FileId: es un entero de 32 bits que indica el identificador de los ficheros xml y jpg del

Quercus Technologies

88

SmartLPR

Manual de Programacin

reconocimiento. Es necesario para poder recuperar dichos ficheros del servidor de Ftp
de la unidad (carpeta /Log). El nombre est formateado a 8 dgitos con ceros en la
izquierda.
Por ejemplo: para un FileId=123, los ficheros a recuperar seran "Log/00000123.xml" y
"Log/00000123.jpg".

6.2. Informacin por FTP


La unidad almacena los reconocimientos generados en el servidor de FTP integrado. Para cada
vehculo se almacena un fichero en formato xml con los datos del reconocimiento y un fichero
en formato jpeg con la imagen del mismo (firmado digitalmente para poder detectar posibles
manipulaciones posteriores).
Se debe tener en cuenta que los datos almacenados forman un histrico, por lo que, una vez
lleno el disco de datos, los ms antiguos se eliminarn automticamente. Si desea modificar el
espacio disponible, consulte el manual de usuario SmartLPR Access/Speed.
Ntese que, cuando se trabaja con las comunicaciones encriptadas, no es posible acceder al
histrico de reconocimientos mediante el servidor FTP. En este caso debe usarse el servidor
SFTP. (vase 6.3.2 Servidor de SFTP ).

6.2.1. Fichero XML


El nombre del fichero xml del reconocimiento de un vehculo es /Log/<CarId>.xml donde
CarId es el identificador del vehculo formateado con ceros a la izquierda hasta formar ocho
cifras.
El contenido del fichero es el siguiente:
Car: contiene todos los datos del reconocimiento.
Id: identificador del vehculo.
TriggerId: identificador del evento software que desencaden la captura.

Solamente es aplicable si la unidad est funcionando en modo software; en caso


contrario el valor ser cero.
IsGrammarOk:

tendr el valor 1 si la matrcula reconocida cumple con alguna

norma gramatical conocida, 0 en caso de que no se ajuste a ninguna.


Country: nombre del pas/regin para el que se ha cumplido la gramtica.

En

caso de que no se haya cumplido ninguna gramtica el campo estar vaco. Los
pases se indican con la(s) letra(s) que el pas identifica a sus matrculas (E
Quercus Technologies

89

SmartLPR

Manual de Programacin

para Espaa, F para Francia, etc.).


AVgQuality: media de calidad de los caracteres reconocidos, entre 0 y 1.
License: matrcula adornada con guiones y espacios.
MinQuality: calidad del carcter peor reconocido. Entre 0 y 1.
NumberOfUnknownChars: nmero de caracteres desconocidos.
ROI: zona de la imagen en la que se ha detectado la matrcula.
Left: coordenada izquierda de ROI.
Top: coordenada superior de ROI.
Right: coordenada derecha de ROI.
Bottom: coordenada inferior de ROI.
Timestamp: instante en que se ha obtenido la imagen.
Seconds: Timestamp expresado en segundos desde las 00:00h de 01-

01-1970.
Useconds: microsegundos de Timestamp.
Date: fecha de Timestamp expresada en formato aaaa-mm-dd (ao-

mes-da).
Time:

hora

de

Timestamp

expresada

en formato

hh:mm:ss.ms

(horas:minutos:segundos:microsegundos).
Chars:

lista de caracteres reconocidos. Para cada carcter:

Index: ndice del carcter (a partir de 0).


Value: valor del carcter (letra).
Quality: calidad del carcter reconocido (entre 0 y 1).

Ejemplo de fichero XML:


<?xml version="1.0" encoding="UTF-8"?>
<Car>
<Id>169</Id>
<TriggerId>169</TriggerId>
<IsGrammarOk>1</IsGrammarOk>
<Country>E</Country>
<AvgQuality>0.96</AvgQuality>
<License>0310 CRG</License>
<MinQuality>0.91</MinQuality>
<NumberOfUnknownChars>0</NumberOfUnknownChars>
<ROI>
<Left>217</Left>
<Top>133</Top>
<Right>441</Right>
<Bottom>217</Bottom>
</ROI>
<TimeStamp>
<Seconds>1210668177</Seconds>
<USeconds>351216</USeconds>
<Date>2008-05-13</Date>
<Time>10:42:57.351216</Time>
</TimeStamp>

Quercus Technologies

90

SmartLPR

<Chars>

Manual de Programacin

<Char>

</Char>
<Char>

<Index>0</Index>
<Value>0</Value>
<Quality>0.91</Quality>
<Index>1</Index>
<Value>3</Value>
<Quality>0.97</Quality>

</Char>
<Char>

</Char>
<Char>

<Index>2</Index>
<Value>1</Value>
<Quality>1.00</Quality>
<Index>3</Index>
<Value>0</Value>
<Quality>0.99</Quality>

</Char>
<Char>

</Char>
<Char>

<Index>4</Index>
<Value>C</Value>
<Quality>0.98</Quality>
<Index>5</Index>
<Value>R</Value>
<Quality>0.96</Quality>

</Char>
<Char>

</Car>

</Char>
</Chars>

<Index>6</Index>
<Value>G</Value>
<Quality>0.94</Quality>

6.2.2. Fichero JPEG


El nombre del fichero jpeg del reconocimiento de un vehculo es /Log/<CarId>.jpg donde
CarId es el identificador del vehculo formateado con ceros a la izquierda hasta formar ocho
cifras. El fichero contiene, adems de la imagen del reconocimiento los datos de la misma en
forma de campos de comentario del fichero JPEG. Estos datos tambin son empleados en el
clculo de la firma digital de la imagen, de esta forma quedan ligados los datos del vehculo
con la imagen y el momento preciso en que fue realizada de una forma en la que se puede
demostrar que ninguno de ellos ha sido manipulado.

6.3. Encriptacin de protocolo


Para que la unidad solamente enve y reciba mensajes encriptados debe llenarse la variable
Communications/Password del sistema de configuracin de la misma. Para que la librera de
desarrollo tambin enve y reciba solamente mensajes encriptados debe llenarse la variable
Network/Password de su fichero de configuracin.

Quercus Technologies

91

SmartLPR

Manual de Programacin

La librera de desarrollo no puede gestionar unidades con la encriptacin activada junto con
unidades con la encriptacin desactivada,

tampoco unidades con diferentes contraseas de

encriptacin.
Lo anterior si puede hacerse, sin embargo, utilizando directamente el protocolo de
comunicacin.

6.3.1. Formato de encriptacin


El algoritmo de cifrado usado es AES en su variante AES-128, AES-192 o AES-256
dependiendo de la longitud de la contrasea empleada. El modo de cifrado de bloques es CBC
(Cipher-block chaining) con un vector de inicializacin incluido en el propio mensaje.
Un mensaje encriptado tiene el siguiente formato:

Original message
AES
4

16

OriginalLen

IV

16*n
Encrypted message

Padding

Donde:
Original message: mensaje original UDP o serie.
OriginalLen: tamao en bytes del mensaje original. Este campo es necesario porque la

encriptacin AES hace uso siempre de bloques de 16 bytes con los que el tamao del
mensaje original queda redondeado al siguiente entero mltiplo de 16.
IV: vector de inicializacin usado en la codificacin del mensaje.
Encrypted message + padding: mensaje original encriptado + bytes necesarios para

hacerlo de longitud mltiplo de 16.


El tipo de codificacin AES usada depender de la longitud de la contrasea; para contraseas
de 16 caracteres o menos se usar AES-128, para contraseas entre 17 y 24 caracteres se
usar AES-192 y para contraseas entre 25 y 32 caracteres se usar AES-256. La clave AES se
obtendr con la contrasea y bytes a cero hasta rellenar la longitud total de la clave.

Quercus Technologies

92

SmartLPR

Manual de Programacin

1-16
AES-128

Password

Padding(000...)
key

17-24
AES-192

Password

Padding(000...)
key

25-32
AES-256

Password

Padding(000...)
key

En las carpetas Src e Include de la carpeta de instalacin encontrar los siguientes ficheros
que implementan dicha encriptacin:
aes.c i aes.h: implementacin de bajo nivel de la codificacin AES.
CryptoTools.c i CryptoTools.h: funciones para encriptar

y desencriptar un array de

bytes. Hace uso de las funciones contenidas en aes.c y aes.h


UDPTools.c y UDPTools.h: funciones de comunicacin UDP. Hace uso de las funciones

contenidas en CryptoTools.c y CryptoTools.h para encriptar las comunicaciones.


Todos los ejemplos de programacin que utilizan la librera de desarrollo pueden usar la
encriptacin

de

protocolo

automticamente

simplemente

estableciendo

Communications/Password en sus ficheros de configuracin.

6.3.2. Servidor de SFTP


Cuando se usan comunicaciones encriptadas el acceso a los reconocimientos mediante FTP
queda deshabilitado. En su lugar se habilita el acceso mediante SFTP. ste permite
encriptacin en las comunicaciones, por lo que aumenta la seguridad y confidencialidad del
histrico de reconocimientos.
Para acceder a los datos:
sftp://<ip_of_the_unit>/Log

Quercus Technologies

93

SmartLPR

Manual de Programacin

7. Apndice A: Soporte
Si tiene cualquier duda en la configuracin o uso de SmartLPR no dude en contactar con
nuestro departamento de soporte tcnico. Para contactar con el departamento de soporte
tcnico:
EE.UU: +1 201 227 2020
Brasil y Latinoamrica: +55 (11) 2614 3006 (extensin 21)
EMEA y Asia: +34 977 300 377

O por correo electrnico: support@quercus.biz


Visite nuestras webs:
www.quercus.biz
www.quercus-technologies.com
www.quercus.com.br

Quercus Technologies

94

Potrebbero piacerti anche