Perguntas Frequentes sobre a API Aimsun Next¶
Introdução¶
A API Aimsun Next é um conjunto de métodos que permite aos programadores ler e modificar informações usadas durante uma simulação microscópica Aimsun Next relacionadas a veículos, demanda, controle, dados de detecção, etc.
A API Aimsun Next está disponível em C++ e Python. O usuário deve decidir qual linguagem usar.
Os arquivos para construir uma API Aimsun Next em C++ estão localizados na pasta de instalação do Aimsun Next (programming/Aimsun Next API/cpp). Esta pasta também contém um projeto do Visual Studio que inclui todos os arquivos necessários para construir uma AAPI em C++. Os únicos arquivos que devem ser modificados são AAPI.cxx e AAPI.h
Os arquivos Micro/Meso para construir uma API Aimsun Next 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
A API Aimsun Next requer uma licença especial?¶
Não, está incluída em todas as licenças de assinatura anual, que são: Edições Lite, Pro, Avançada e Especialista.
Perguntas Frequentes para APIs Aimsun Next em C++¶
Qual versão do Visual Studio eu devo usar?**¶
Com a versão para Windows, há um projeto do Visual Studio 2019 em C pronto para compilar e construir a DLL. O projeto do Visual Studio 2019 tem duas configurações disponíveis: a configuração de Depuração que constrói a AAPI_D.dll por padrão e as configurações de Liberação que constroem a AAPI_R.dll por padrão.
Para construir uma AAPI em 64 bits, selecione o menu Build / Configuration Manager do Visual Studio 2019 (x64). Em seguida, selecione x64 na caixa suspensa da plataforma de solução ativa.
Como depurar uma extensão da API¶
Inicie o depurador e anexe-o ao Aimsun Next (Ferramentas/Anexar... menu). Coloque os pontos de interrupção onde necessário e inicie a simulação. Observe que pode não reconhecer 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 pontos de interrupção colocados nesses métodos podem não ser 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¶
Existem dois métodos na AAPI que permitem conversões de ascii para unicode:
-
const unsigned short AKIConvertFromAsciiString(const char ascii): Este método converte qualquer string ascii em unicode.
-
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 convertíveis, nesse caso, anyNonAsciiChar será definido como verdadeiro.
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
- Linha 03, 04: imprimir em ambos os modos. Neste caso, imprime exatamente a mesma string
Perguntas Frequentes para a API Python Aimsun Next¶
A mensagem "Arquivo myScript.py não encontrado ou Sintaxe Incorreta" implica que myScript.py não é uma extensão válida.
A mensagem "Erro Python (): Nenhum módulo chamado novo" surge quando o Python não foi instalado no computador. Ele pode ser baixado de www.python.org.
Como usar parâmetros de entrada/saída¶
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 mínimas e máximas do mundo.
- Linha 05: Imprimindo o conteúdo das variáveis ponteiro.
Funções com int * representando um array de int como parâmetros de entrada são suportadas pela classe intArray. Um pequeno exemplo segue:
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'>): 'módulo' objeto não tem atributo 'AAPIExitPedestrian'**
Esse erro ocorre quando algumas das treze 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(...), AAPIEnterVehicle(...), AAPIExitVehicle(...), AAPIEnterPedestrian(...), AAPIExitPedestrian(...), AAPIEnterVehicleSection(...), e AAPIExitVehicleSection(...).