Perguntas frequentes da API do Aimsun Next¶
Primeiros Passos¶
A API do Aimsun Next é um conjunto de métodos que permitem aos programadores ler e modificar informações usadas durante uma simulação Microscópica do Aimsun Next referentes a veículos, demanda, controle, dados de detecção etc.
A API do Aimsun Next é fornecida em C++ e em Python. O usuário deve decidir qual linguagem usar.
Os arquivos para criar uma Aimsun Next API em C++ estão localizados na pasta de instalação do Aimsun Next (programming/Aimsun Next API/cpp). Essa pasta também contém um projeto do Visual Studio que contém todos os arquivos necessários para criar uma C++ AAPI. Os únicos arquivos que devem ser modificados são AAPI.cxx e AAPI.h
Os arquivos Micro/Meso para criar uma Aimsun Next API em Python estão localizados na pasta de instalação do Aimsun Next (programming/Aimsun Next API/python/samples). O único arquivo que deve ser modificado é sample.py
Em simulações híbridas Meso-Micro, apenas as micro APIs são executadas.A API do Aimsun Next requer uma licença especial?¶
Não, ele está incluído em todas as licenças de assinatura anual, que são: Edições Lite, Pro, Advanced e Expert.
FAQ para APIs C++ do Aimsun Next¶
Qual versão do Visual Studio devo usar?**¶
Na versão Windows, há um projeto Visual Studio 2019 em C pronto para compilar e gerar a DLL. O projeto Visual Studio 2019 tem duas configurações disponíveis: a configuração Debugger, que gera a AAPI_D.dll por padrão, e as configurações Release, que geram a AAPI_R.dll por padrão.
Para compilar uma AAPI em 64 bits, selecione o menu Build / Configuration Manager no Visual Studio 2019 (x64). Em seguida, selecione x64 na caixa suspensa Active solution platform.
Como depurar uma extensão de API¶
Inicie o depurador e anexe-o ao Aimsun Next (menu Tools/Attach...). Coloque os breakpoints onde necessário e inicie a simulação. Observe que ele pode não saber que a DLL está lá até que a simulação seja iniciada pela primeira vez. Se as funções AAPIInit ou AAPILoad forem depuradas, os breakpoints colocados nesses métodos talvez não sejam alcançados, a menos que o depurador seja reiniciado usando (Ctrl+Shift+F5), após o que será possível depurar AAPILoad e AAPIInit.
Como usar strings¶
Há dois métodos em AAPI que permitem conversões de ascii para unicode:
-
const unsigned short AKIConvertFromAsciiString(const char ascii): Este método converte para unicode qualquer string ascii.
-
const char AKIConvertToAsciiString(const unsigned short string, bool deleteUshortString, bool *anyNonAsciiChar): Este método converte qualquer string unicode em ascii. Observe que a string unicode pode conter caracteres não conversíveis; nesse caso, anyNonAsciiChar será definido como true.
00 const unsigned short* name = AKIConvertFromAsciiString("GKSection::nblanesAtt"); 01 bool anyNonAsciiChar; 02 const char* ascii = AKIConvertToAsciiString( name, false, &anyNonAsciiChar ); 03 AKIPrintString( ascii ); 04 AKIPrintAsUNICODEString( name ); -
Linha 00: Conversão de Ascii para Unicode
- Linha 02: Conversão de Unicode para Ascii
- Linhas 03, 04: imprimir em ambos os modos. Neste caso, imprime exatamente a mesma string
FAQ da API Python do Aimsun Next¶
A mensagem "File myScript.py not found or Wrong Syntax" implica que myScript.py não é uma extensão válida.
A mensagem "Python Error (): No module named new" aparece quando o python não foi instalado no computador. Ele pode ser baixado em www.python.org.
Como usar parâmetros in/out¶
Ponteiros de tipos básicos são fornecidos. Os tipos disponíveis são: boolp, intp, floatp e doublep.
00 min_x = doublep()
01 min_y = doublep()
02 max_x = doublep()
03 max_y = doublep()
04 AKIInfNetGetWorldCoordinates( min_x, min_y, max_x, max_y )
05 print "min(%f, %f) max(%f, %f)"%(min_x.value(), min_y.value(), max_x.value(), max_y.value() )
- Linha 00, 03: declaração de ponteiros duplos.
- Linha 04: Chamada de método que inicializa as coordenadas mundiais mínima e máxima.
- Linha 05: Imprimindo o conteúdo das variáveis de ponteiro.
Funções com int * representando um array int como parâmetros de entrada são suportadas pela classe intArray. Segue um pequeno exemplo:
nextSections = intArray( 3 )
nextSections [0] = 182
nextSections [1] = 183
nextSections [2] = 184
AKIActionAddNextSubPathODAction(182, 3, nextSections, 286, 285, 0, 110, 100, 100)
Erro Python¶
(<type 'exceptions.AttributeError'>): 'module' object has no attribute 'AAPIExitPedestrian'**
Este erro ocorre quando algumas das dezessete funções de alto nível não estão definidas no arquivo com o código da API (neste caso, a função AAPIExitPedestrian). As funções que devem ser incluídas são: AAPILoad(), AAPIInit(), AAPISimulationReady(), AAPIManage(…), AAPIPostManage(…), AAPIFinish(), AAPIUnLoad(), AAPIPreRouteChoiceCalculation(...), AAPIVehicleStartParking(...), AAPIActionActivated(...), AAPIActionDeactivated(...). AAPIEnterVehicle(...), AAPIExitVehicle(...), AAPIEnterPedestrian(...), AAPIExitPedestrian(...), AAPIEnterVehicleSection(...), e AAPIExitVehicleSection(...).