Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DEDE
PROGRAMACIN
MANUAL
PROGRAMACIN
www.quercus.biz
www.quercus-technologies.com
www.quercus.com.br
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
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
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
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
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
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;
Quercus Technologies
10
SmartLPR
Manual de Programacin
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:
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
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).
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));
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;
Quercus Technologies
13
SmartLPR
Manual de Programacin
SmartLPRUnload();
}
return 0;
14
SmartLPR
Manual de Programacin
only Sample2.
Linux
Abra una consola.
Sitese en la carpeta Samples/Sample2.
Ejecute el comando "make".
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
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.1. Propiedades
Status
C++:
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++:
C:
No existe.
3.3.2. Mtodos
Initialize
C++: static bool Initialize ( const char *iniFile, const char *logFile, ISystemEH
*systemEH )
C:
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++:
contrario.
C:
contrario.
Terminate
C++:
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
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++:
C:
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
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
Evento lanzado cuando ocurre algn incidente excepcional (ver clase Notification para
ms detalles).
En C, el parmetro hNotification es un manejador de Notification.
OnInputChange
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.1. Propiedades
Count
C++:
int Count()
C:
C++:
C:
Quercus Technologies
20
SmartLPR
Manual de Programacin
3.5.1. Propiedades
Parent
C++:
No existe.
C:
No existe.
C++:
long get_Id()
C:
C++:
bool get_Status()
C:
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:
Quercus Technologies
21
SmartLPR
Manual de Programacin
Lanes get_Lanes()
C:
No existe.
3.5.2. Mtodos
IsValid
C++:
bool IsValid()
C:
No existe.
C++:
void Reboot()
C:
Quercus Technologies
22
SmartLPR
Manual de Programacin
3.6.1. Propiedades
Count
C++:
int Count()
C:
C++:
C:
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
3.7.1. Propiedades
Id:
C++:
long get_Id()
C:
Quercus Technologies
23
SmartLPR
Manual de Programacin
C++:
Remote get_Parent()
C:
C++:
bool get_Active()
C:
C++:
Car get_OfflineCar()
C:
C++:
LaneStatus get_Status()
C:
Quercus Technologies
24
SmartLPR
Manual de Programacin
Configuracin
C++:
Configuration get_Configuration()
C:
3.7.2. Mtodos
IsValid
C++:
bool IsValid()
C:
No existe.
C++:
C:
C++:
void MoveFirst()
C:
Quercus Technologies
25
SmartLPR
Manual de Programacin
C++:
bool MoveNext()
C:
C++:
bool MovePrevious( )
C:
C++:
void MoveLast()
C:
C++:
bool Reboot()
C:
C++:
C:
26
SmartLPR
Manual de Programacin
C++:
C:
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++:
C:
C++:
VersionInfo GetVersion()
C:
C++: int GetCurrentFrame (int exposureTime, unsigned char *jpegData, int maxSize )
Quercus Technologies
27
SmartLPR
C:
Manual de Programacin
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++:
C:
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.1. Propiedades
Global
C++:
bool get_Global()
C:
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
Camera
C++:
bool get_Camera()
C:
C++:
bool get_IOCard()
C:
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.1. Propiedades
Id:
C++:
long get_Id()
C:
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
C++:
bool get_GrammarOk()
C:
C++:
C:
C++:
double get_AvgQuality()
C:
C++:
Lane get_Lane()
C:
Quercus Technologies
30
SmartLPR
Manual de Programacin
License:
C++:
C:
C++:
double get_MinQuality()
C:
C++:
Rectangle2 get_ROI ( )
C:
void Car_get_ROI ( int h, int *l, int *r, int *t, int *b )
C++:
long get_TimeStamp()
C:
Quercus Technologies
31
SmartLPR
Manual de Programacin
TimeStampUSec
C++:
long get_TimeStampUSec()
C:
C++:
Chars get_Chars()
C:
C++:
int get_NumberOfUnknownChars()
C:
C++:
SACarState get_State()
C:
int Car_get_State()
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
Quercus Technologies
32
SmartLPR
Manual de Programacin
3.9.2. Mtodos
IsValid
C++:
bool IsValid()
C:
No existe.
GetImage
C++:
C:
C++:
No existe.
C:
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
C++:
No existe.
C:
En C++ esta
elemento
Car
obtenido
en
las
llamadas
OnCarHandled2,
OnCarArrival2
necesite
ms
un
elemento
Car
obtenido
en
la
llamada
las
funciones
Lane_get_OfflineCar.
3.10.1. Propiedades
Left:
C++:
int get_Left()
C++:
int get_Right()
C++:
int get_Top()
34
SmartLPR
Manual de Programacin
Bottom:
C++:
int get_Bottom()
C++:
int get_Width()
C++:
int get_Height()
3.11.1. Propiedades
Nombre
C++:
C:
C++:
long get_Major()
C:
Quercus Technologies
35
SmartLPR
Manual de Programacin
Minor
C++:
long get_Minor()
C:
Revision
C++:
long get_Revision()
C:
C++:
int Count()
C:
C++:
C:
Quercus Technologies
36
SmartLPR
Manual de Programacin
3.13.1. Propiedades
Character
C++:
char get_Character()
C:
Carcter reconocido.
En C el parmetro h es un manejador de Char.
CharacterUTF8
C++:
C:
C++:
double get_Quality()
C:
3.14.1. Propiedades
NotificationCode/Code
C++:
SANotificationCode get_Code()
C:
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
motivos internos.
SA_NOT_OVERLAPPED=5 :ha llegado un nuevo coche al carril mientras todava
C++:
Lane get_Lane()
C:
3.15.1. Mtodos
IsValid
C++:
bool IsValid()
C:
No existe.
C++:
C:
C++:
bool Logout()
C:
Quercus Technologies
38
SmartLPR
Manual de Programacin
C++:
bool IsLoggedIn()
C:
C++:
C:
C++:
bool SyncTime ( )
C:
C++:
C:
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++:
C:
C++:
bool RestoreFirmware ( )
C:
C++:
C:
(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:
Quercus Technologies
40
SmartLPR
Manual de Programacin
C++:
C:
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:
C++:
C:
C++:
C:
41
SmartLPR
Manual de Programacin
SettingsEntry.
SetEntry
C++:
C:
C++:
C:
C++:
bool ApplyChanges()
C:
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:
C++:
C:
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++:
C:
SetLanguage
C++: bool SetLanguage( const char* languageId )
C:
GetLanguage
C++: bool GetLanguage( char *buf, int bufLen)
C:
Quercus Technologies
43
SmartLPR
Manual de Programacin
C++:
C:
C++:
long get_ProductionDate()
C:
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++:
C:
C++:
C:
Quercus Technologies
44
SmartLPR
Manual de Programacin
BootTime:
C++:
long get_BootTime()
C:
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:
C++:
VersionInfo get_FirmwareVersion ( )
C:
3.16.2. Mtodos
IsValid
C++:
bool IsValid()
C:
No existe.
Quercus Technologies
45
SmartLPR
Manual de Programacin
3.17.1. Propiedades
Nombre
C++:
C:
C++:
C:
C++:
C:
3.17.2. Mtodos
IsValid
C++:
bool IsValid()
C:
No existe.
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)
(aadiendo campos, modificndolos, etc.) este campo indica la versin del mensaje
empleada.
Quercus Technologies
48
SmartLPR
Manual de Programacin
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).
Quercus Technologies
49
SmartLPR
Manual de Programacin
Unidad
Sistema Central
1er Evento (v2)
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
Quercus Technologies
50
SmartLPR
Manual de Programacin
Bit
Val
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
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.
en
51
SmartLPR
Manual de Programacin
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
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
apagado.
4: el sistema se est cerrando debido a causas internas.
5: vehculos solapados (se ha lanzado un trigger antes de acabar el
Respuesta
Quercus Technologies
53
SmartLPR
Manual de Programacin
Type: 128
Message Data:
64
1
Maj
Name
Min Rev
4.4.2. Reboot
Peticin de reinicio de la unidad de reconocimiento.
Peticin
Type: 65
Message Data:
1
Op
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
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
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
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
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
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
Quercus Technologies
57
SmartLPR
Manual de Programacin
Image Size: tamao de la imagen en bytes. Si es cero la imagen no ha podido
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
Respuesta
Type: 136
Message Data:
4
ImageSize
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:
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
conoce su significado.
1 (Bad format): el mensaje no ha sido recibido correctamente (falla el
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
mensaje.
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:
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
Respuesta
Type: 161
Message Data:
4
SessionId
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
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
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:
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:
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
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
15
Serial N.
18
MAC
4
BootTime:
Maf Mif Rf
Quercus Technologies
64
SmartLPR
Manual de Programacin
Versin 0:
64
P. Name
15
Serial N.
18
MAC
4
BootTime:
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:
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:
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:
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
Respuesta
ACK/NAK
4.6.13. DiscardChanges
Descarta los cambios realizados a las variables del sistema.
Peticin
Type: 108
Message Data:
4
SessionId
Respuesta
ACK/NAK
4.6.14. GetEntriesCount
Obtener el nmero de variables del sistema de configuracin.
Peticin
Type: 109
Message Data:
4
SessionId
Respuesta
Type: 173
Message Data:
Quercus Technologies
67
SmartLPR
Manual de Programacin
4
EntriesCount
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
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
64
Value:
64
Descr1
64
Descr2
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:
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
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
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:
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
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
Respuesta
ACK/NAK
4.6.22. GetLanguage
Obtiene el idioma configurado actualmente en el sistema de configuracin.
Peticin
Type: 117
Message Data:
4
SessionId
Respuesta
Type: 175
Quercus Technologies
71
SmartLPR
Manual de Programacin
Message Data:
8
Language
4.6.23. SetLanguage
Establece el idioma del sistema de configuracin.
Peticin
Type: 118
8
4
SessionId
Language
Message Data:
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.
SmartLPR
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.
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=
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
Quercus Technologies
74
SmartLPR
Manual de Programacin
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.
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
76
SmartLPR
Manual de Programacin
incorrecto).
Parmetros del evento: dependern de cada tipo de evento (vase los siguientes
puntos).
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
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
matrcula.
TimeToRecognize (300 en el ejemplo): tiempo en milisegundos que debe tardarse en
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
...
Quercus Technologies
78
SmartLPR
Manual de Programacin
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,
5.3.1. Simulador
Existen dos versiones de cada simulador, una con interfaz grfica
(SpeedSimuGui y
o
Quercus Technologies
79
SmartLPR
Manual de Programacin
o
AccessSimuGui <FIni> <FDefecto> <FContrasea> <FLog> <CarpetaSimulacin>
<CarpetaPersistente>
Donde:
SpeedSimu/AccessSimu: ejecutable del simulador. Desde Linux, dependiendo de su
unidad a simular.
FDefecto:
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
Quercus Technologies
80
SmartLPR
Manual de Programacin
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
est
activa
(verde)
inactiva
(rojo).
ejecutable
del
adaptador.
Desde
Linux,
dependiendo
de
su
del adaptador.
FicheroLog: camino (absoluto o relativo) hacia el fichero donde se dejar la informacin
Quercus Technologies
82
SmartLPR
Manual de Programacin
las
simulaciones,
la
herramienta
de
diagnstico,
correctamente
configuradas.
Quercus Technologies
83
SmartLPR
Manual de Programacin
Quercus Technologies
84
SmartLPR
Manual de Programacin
# 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
Quercus Technologies
85
SmartLPR
Manual de Programacin
0, C,5678DEF.bmp,5678 DEF,5678DEF,0.97,0.90,1,ES,80
# 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
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
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
por
FTP:
permite
recuperar
la
informacin
del
reconocimiento
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
en diferentes horarios.
Usar el protocolo de comunicaciones UDP en redes de datos no confiables sabiendo que
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".
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
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:
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>
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,
encriptacin.
Lo anterior si puede hacerse, sin embargo, utilizando directamente el protocolo de
comunicacin.
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
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
de
protocolo
automticamente
simplemente
estableciendo
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
Quercus Technologies
94