Pular para o conteúdo

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(...).