Módulo: Avançado CAN Gateway Aviso A Caixa Munic está ligada ao barramento do veículo, pelo que a Caixa Munic interfere com o veículo. Ao instalar a Munic Box, você reconhece esse risco e os dispositivos móveis da Ingnierie não podem ser responsabilizados por qualquer problema, dano, responsabilidade e ferimentos causados por essa conexão. Adie para as provisões de garantia de seus veículos e as instruções dos proprietários para orientação sobre se qualquer produto conector OBD II pode anular ou alterar a garantia de seus veículos. Dispositivos Móveis A Ingnierie não é responsável por quaisquer custos ou despesas associadas a reparos de veículos ou garantias anuladas. Se detectar qualquer alteração no desempenho do motor depois de ligar o dispositivo, desligue o dispositivo imediatamente e contacte o suporte da Munic Box. Não use o dispositivo se ele afetar o desempenho do motor ou aceleração em sua marca particular e modelo de veículo. Dispositivos móveis A Ingnierie pode, sob demanda, fornecer recomendações sobre o uso de OBD dongle amp APIs. Introdução O ObdStacks é uma tecnologia avançada e um conjunto de ferramentas desenvolvidas por dispositivos móveis para descrever, exportar e executar comandos específicos de bordo (ouvir em um ônibus, enviar um comando, etc.). Caso de uso básico é o seguinte: O usuário primeiro tem que descrever em um arquivo as operações que ele deseja executar. A implementação atual funciona com um arquivo JSON. O arquivo de descrição é enviado para o dispositivo pelo ar. Uma vez que o arquivo é carregado, as operações podem ser executadas localmente no dispositivo. As pilhas enviadas para o dispositivo são salvas no flash e depois recarregadas quando o dispositivo é reinicializado. Para descartar uma pilha salva / carregada, consulte a ação de soltar. Este projeto está atualmente em desenvolvimento ativo, e é por isso que você é encorajado a dar idéias sobre melhorias futuras. Script ObdStacks Introdução O script ObdStacks é dividido em três partes principais: EcuDescription. A lista de ECUs ea maneira de se comunicar com ele Comando. A definição completa do comando que será enviado para o dispositivo Ação. A operação que será feita com o resultado de comandos e ações anteriores Tanto os comandos quanto as ações são identificados por um nome (regexp a-zA-Za-zA-Z0-9a-zA-Z0-9), Ele tem que: Começar com Uma letra (maiúsculas ou minúsculas) Apenas conter letras, números e (sublinhado) Não terminar com (sublinhado) Estrutura básica A estrutura base do script é o objeto obdStack. Ele tem apenas um atributo, nome. Que é um nome de seqüência de caracteres para a pilha. ECU Descrição As ECUs são descritas com os seguintes elementos Nome OBRIGATÓRIO. O nome da ECU, será usado por comandos para especificar uma ECU, se necessário. SrcId. A fonte Id. É uma cadeia hexadecimal de comprimento variável. DstId. A identificação de destino. É uma cadeia hexadecimal de comprimento variável. OPTIONAL addressType. O valor padrão é FÍSICO. Uma seqüência de caracteres que pode ser uma dessas seqüências de caracteres. FUNCTIONAL (receber todas as mensagens) ou PHYSICAL (receber apenas uma mensagem). DefaultReplyTimeOutMS. O valor padrão é 100 (ms). O tempo limite antes de desligar se nenhuma resposta recebida. É um int longo em milissegundos. Pode variar entre 50 e 10000 ms. CAN opções relacionadas canAddressingMode. O padrão é NORMAL, outro valor é EXTENDED, FIXED ou MIXED. É obrigatório especificá-lo quando usar algo diferente de CAN 11 bits. CanExtendedAddress. O padrão é 0. É um inteiro usado como um byte sempre canAddressingMode é EXTENDED ou MIXED. CanExtendedAddressMask. O padrão não é usado. É um número inteiro usado como uma máscara de endereço estendido em respostas (0x00 significa tudo, 0xFF limites para endereço). (Depende de canExtendedAddress). CanExtendedAddressFilter. O padrão não é usado. É um número inteiro usado como um filtro de endereço estendido nas respostas. (Depende de canExtendedAddress). CanConnection. Permite especificar o barramento a ser usado. O padrão é ALL: use qualquer barramento conectado (entre em contato conosco para obter detalhes sobre as capacidades de comutação CAN PIN). CanBaudRate. O padrão é 500000. especifique a velocidade do barramento se você quiser restringi-lo. Os valores comuns são 250000 ou 500000. canIdType. Especifica se pode é 11 ou 29 bits, o valor padrão é 11BITS, outro valor é 29BITS. Canapa O valor padrão é 0x7EF se 11 bits podem ou 0x1FFFFF00 se 29 bits podem. Máscara como uma seqüência hexadecimal usada para comandos CAN raw quando conectada a CAN. CanPaddingValue. O valor para preencher os dados com. O padrão é quot00quot. Para especificar nenhum preenchimento, coloque quot-1quot. Observação: não especificando canExtendedAddressMask e canExtendedAddressFilter, mas ativar canExtendedAddress implica usar a filtragem padrão no campo de dados de endereço (por exemplo 123F140 como pergunta obterá 123F140 como uma resposta válida, mas 140F123 será filtrado). Os comandos atualmente suportados são: Cada comando retorna uma seqüência de bytes. Byte. Em que as operações podem ser executadas graças às ações. Comando OBD padrão Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Modo. O modo do comando OBD. É uma cadeia hexa. Pid. O pid do comando OBD, é uma seqüência hexadecimal. O único frame pode comando Usado para emitir frames cru do CAN. Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Ecu. O identificador da ECU a contactar. Pode ser em 3 bytes ou 8 bytes. É uma cadeia hexadecimal. Dados. Os dados a serem enviados, como um frame bruto. É uma matriz de valores inteiros. Vai até 8 bytes. Pode ser decimal ou hexadecimal (na forma 0xf). Comando multi-frame - ISO 15765-2 (ISO-TP) Utilizado para enviar quadros CAN através do protocolo Iso-TP. Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Ecu. O nome do ecu que está descrito na descrição do ecu. Dados. Os dados a enviar, como a carga útil CAN (sem o byte de comprimento). É uma matriz de valores inteiros. Vai até 7 bytes. Pode ser decimal ou hexadecimal (na forma 0xf). Comando CAN TP2 Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Ecu. O nome do ecu que está descrito na descrição do ecu. Dados. Como a carga útil CAN (sem o byte de comprimento). É uma matriz de valores inteiros. Vai até 7 bytes. Pode ser decimal ou hexadecimal (na forma 0xf). Comando KLine Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. DefaultReplyTimeOutMS. O valor padrão é 100 (ms). O tempo limite antes de desligar se nenhuma resposta recebida. É um int longo em milissegundos. Pode variar entre 50 e 10000 ms. Dados. Os dados a serem enviados. É uma matriz de valores inteiros. Vai até 8 bytes. Pode ser decimal ou hexadecimal (na forma 0xf). Comando J1850 Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. DefaultReplyTimeOutMS. O valor padrão é 100 (ms). O tempo limite antes de desligar se nenhuma resposta recebida. É um int longo em milissegundos. Pode variar entre 50 e 10000 ms. Dados. Os dados a serem enviados. É uma matriz de valores inteiros. Vai até 8 bytes. Pode ser decimal ou hexadecimal (na forma 0xf). J1939 command Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. PgnNumber. O número da PGN solicitada. Modo. Transmissão ou pedido. Interface. O nome da interface. Padrão: can0. J1708 command Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Meio O MID do comando. Dados. Os dados a serem enviados após o MID. Comando J1587 Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Pid. O PID do comando. Modo. Transmissão ou pedido. Comando sleep Nota: o comando sleep não envia dados para o dispositivo. Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. SleepTimeMs. Hora de esperar no sono. Comandos parametrizados Qualquer comando que usa o campo de matriz de dados pode ser usado como um comando parametrizado. Um comando parametrizado é um comando que depende do resultado de outro comando. A parte parametrizada do comando usa a mesma sintaxe que as fórmulas de resultado (exp4j, consulte ObdStacksActionsActions eo campo de retorno). Dependências dos comandos parametrizados DEVEM estar presentes na mesma ação, ANTES do comando parametrizado (ver ação descrita no exemplo). A parte parametrizada do comando pode ser de vários bytes (consulte o comando parametrizado no exemplo). Aviso: se a parte parametrizada do comando é multibyte, você não pode ter certeza do número de bytes que serão enviados após a computação. Veja a diferença entre o comando parametrizado eo comando parametrizado2. O último irá sempre enviar três bytes, o primeiro irá enviar apenas dois bytes se RPM é lt 256. CAN modo de escuta Não é um comando real, mas é usado para registrar para ECUs em modo de difusão. Deve ser usado com ações de modo de escuta. Nome da descrição dos campos. O nome do comando, será mais tarde usado por ações. Ecu. O nome do ecu para ouvir. Máscara Sobre a qual aplicar os filtros. É uma matriz de valores inteiros. Vai até 7 bytes (comprimento byte não deve aparecer). Pode ser decimal ou hexadecimal (na forma 0xff). Filtro. Matriz de matrizes de valores inteiros (mesmo formato como máscara). Usado para filtrar quadros que você deseja ouvir da ECU. Veja explicação abaixo. Máscara e uso de filtro Vamos começar por um exemplo. Você quer ouvir os quadros RPM da ECU do motor. Você pode escrever: A máscara é definida para os dois primeiros bytes da carga útil. O filtro é 41 0C nesses dois bytes: é a parte estática da moldura, comum a todos os quadros RPM. Em seguida, o 0xFF sobre bytes 3 e 4 do filtro são os bits para assistir para novos dados. Se dois quadros consecutivos enviados pela ECU forem idênticos em relação a estes dois bytes (se o RPM for o mesmo), a segunda trama não será tratada. Agora, se também queremos ver a velocidade, precisamos atualizar o filtro para: (OBD Speed está em apenas 1 byte, RPM está em dois bytes). Se você quiser obter todos os quadros de uma ECU, você não precisa especificar a máscara e filtro: Nota: neste cenário, apenas o dstId da ECU é usado, não o srcId. As ações permitem fazer algum cálculo sobre o resultado de comandos e outras ações, e foram projetadas usando o modelo de ant targets. Existem dois tipos de ações, distinguidas pelo parâmetro mode: request (padrão) ou listen. As ações de solicitação dependem de comandos com bytes de dados para enviar, enquanto as ações de escuta dependem de comandos passivos (como canFrameReceive). Ambos os tipos de ações têm parâmetros específicos. Nome dos campos OBRIGATÓRIOS. O nome da ação. Retorna . É um duplo. O campo de retorno contém uma expressão aritmética que será usada para calcular o resultado das ações. Ele é baseado na biblioteca exp4j. As expressões permitem o cálculo básico em valores duplos (. -. /) Assim como em operações mais avançadas (abs. Cos.). Para obter a lista completa de operações disponíveis, consulte: objecthunter. net/exp4j/index. html e para o parágrafo Operações Disponíveis abaixo. Você tem permissão para colocar nesta expressão os nomes de comando ou ação que foram declarados em suas dependências. Se eles não foram declarados, o arquivo de descrição não será compilado quando enviado para o dispositivo. Para comandos, o índice do byte considerado da resposta é apenas acrescentado ao seu nome entre colchetes, p. OBD010D0. Ou ((OBD01100 256) OBD01101) / 100. Você também pode se referir a qualquer variável de banco de dados, com a sintaxe: DBltDBNAMEgt (por exemplo, DBMDIOBDRPM). Ele usará o valor atual do DB no momento em que o resultado é calculado. Depende. Depende descreve todas as ações / comandos que devem ser executados antes da ação ser tomada. Eles são da seguinte forma: quotdependsquot: quotspeedKmPerHourquot. O comando / ação chamado speedKmPerHour será executado quando essa ação é chamada. Para evitar qualquer erro ortográfico ou dependência não satisfeita, tem de se certificar de que todas as dependências foram declaradas antes da linha que são chamados. Finalmente, observe que as dependências serão executadas seguindo a ordem de suas declarações. Campos OPCIONAIS comuns a todos os tipos de ações exportToDB. DB campo onde o resultado da ação será salvo para cada vez que é executado. Permite relatórios fáceis no rastreamento ou fácil utilização na aplicação do usuário. registro . Campo de rastreamento para registrar o resultado da ação (sem passar por DB). Útil para enviar o resultado quando não há necessidade de armazená-lo. ReturnType. O tipo de retorno da ação. Valores possíveis: string ou double. O padrão é o dobro. Exportações. Matriz de outros pares de fórmula / db para exportar mais de um resultado de uma ação, se necessário. Fórmula . A fórmula correspondente. Mesma sintaxe como o campo de retorno. Db. O nome do campo db para exportar para. registro . Campo de rastreamento para registrar o resultado da fórmula (sem passar por DB). Útil para enviar o resultado quando não há necessidade de armazená-lo. Modo. Quer solicitar (predefinição) ou ouvir. O modo de escuta deve ser especificado ao usar canFrameReceive como uma dependência. Campos OPCIONAIS específicos para quotrequestquot mode PERÍODO DE EXECUÇÃOSec. É um número inteiro. Ao declarar uma ação, o usuário poderá agendar sua execução em um período específico. Se definido como 0 (valor padrão), desabilita-o caso contrário, ele repetir a ação a cada segundo periodSec. Por favor, não misturado com um comando de execução da mesma ação, como isso irá degradar performances. Uma primeira execução já é feita ao carregar a pilha. Não use períodos muito curtos se o relatório para o CC estiver habilitado, pois isso resultará em queda de dados. ConnectionState. Inteiro, execute a ação somente em um estado de conexão específico. 1: somente se estivermos conectados ao OBD, 0: somente se não estivermos, 1 (padrão): sempre. IgnitionState. Inteiro, execute a ação somente em um estado de ignição específico. 1: somente quando a ignição está ligada, 0: somente quando a ignição está desligada, 1 (padrão): sempre. RELATÓRIOS relatório. sim . O resultado desta ação será enviado ao servidor cada vez que for executado. todos . O resultado dessa ação, juntamente com suas dependências, será enviado ao servidor cada vez que for executado. Se não estiver presente, a ação periódica não será relatada ao servidor. ServerParameters. Uma string que será devolvida ao longo dos resultados. Campos OPCIONAIS específicos para o modo de escuta startListenOnLoad. Se definido como false. Quando carregar a pilha, não começar a ouvir de uma vez e aguardar um pedido executeAction antes de fazê-lo. Padrão: true. As operações matemáticas básicas disponíveis estão listadas em objecthunter. net/exp4j/index. html Juntamente com esta lista, algumas outras operações podem ser usadas: Bitwise 38 e. Exemplo: CANFRAME0 38 8. Esta operação funciona somente em um byte e não no frame completo. Suporte para números hexadecimais. Exemplo: CANFRAME0 38 0x08 Análise de inteiro: getInt (dados, deslocamento, comprimento). GetIntS (dados, offset, comprimento, assinado). Dados getIntSE (data, offset, length, signed, endianness). O quadro completo no qual analisar o int. Deslocamento. O deslocamento em comprimento de bits. Número de bits assinados. 0: sem assinatura, 1: assinado. O padrão é 0 endianness. 0: big endian, 1: little endian. O padrão é 0 Exemplo: getIntSE (CANFRAME, 8, 12, 1, 0). Obter um inteiro assinado de CANFRAME que está em 12 bits com um deslocamento de 1 byte no formato endian grande. Comparação matemática:. . Gt. Lt Gt. Lt O resultado desses operadores é 0 (falso) ou 1 (verdadeiro) (como um duplo). Para usar o resultado no DB como um booleano, use o tipo inteiro (quot: Iquot) dentro do DB. Binário 3838 e. O resultado desses operadores é 0 (falso) ou 1 (verdadeiro) (como um duplo). Para usar o resultado no DB como um booleano, use o tipo inteiro (quot: Iquot) dentro do DB. Nota sobre as ações do modo de escuta O modo de escuta eo modo de solicitação não são compatíveis: isso significa que as ações de solicitação não podem depender de comandos de escuta (canFrameReceive) e as ações de escuta não podem depender de comandos ativos (todos os outros comandos). As ações de escuta devem depender de um e somente um comando canFrameReceive. A multidependência para essas ações não é possível por enquanto. O relatório não está disponível para ações de escuta por enquanto. Como recuperar os resultados em seu servidor Para recuperar os resultados da execução do comando OBDStacks, você deve: Certifique-se de quotreportquot: quotallquot está presente no seu script para cada ação O webhook está corretamente configurado para o seu servidor (munic. io/ Myaccount / settings / editnotification) Quando um comando é executado (periodicamente com quotperiodSecquot ou através de uma mensagem enviada por um comando API ou pelo deviceManager) uma mensagem será enviada pelo webhook. Esta mensagem é descrita abaixo: stackStatus. É um número inteiro que indica se a pilha está operacional. 1 significa OK ou carregado corretamente ou caiu corretamente, 0 ação não poderia ser realizada nesta pilha. Nome. Uma seqüência de caracteres que é o nome da pilha atual. Resultados: É uma matriz JSON que contém a lista de resultados por ação. ActionListName. O nome da ação executada. ServerParameters. O valor de serverParameters presente no comando actionList executado. Se não estiver presente ou vazio / NULL em actionList, ele won39t ser enviar de volta para o servidor. Resultado: um duplo que é o resultado do cálculo da expressão descrita no resultado da actionList. ResultList: uma matriz JSON que contém bytes de todas as dependências da actionList executada se o atributo de relatório opcional estiver definido como all. CommandName. Os dados do nome do comando. Uma matriz de inteiros que foram retornados por este comando Como carregar um script em seu Munic. Box Certifique-se de que seu dispositivo tem o aplicativo Advanced Gateway CAN vinculado (munic. io/documentations/howtolinkapp). Em seguida, basta usar o aplicativo na página DM Apps. Quando associado, um separador quotAppsquot está disponível na interface do Morpheus Manager. Na interface abaixo, selecione o recurso e cole os comandos para carregar na caixa de edição. A sessão abaixo descreve os comandos possíveis para carregar. Clicando em quotSave changesquot enviará imediatamente o conteúdo da caixa de edição para o (s) recurso (s). Finalmente, os resultados são enviados pelo dispositivo na forma de pacotes de mensagens, e não pacotes de rastreamento. Consulte munic. io/documentations/trackstoc2 para obter a documentação sobre como analisar pacotes de mensagens. A lista de comandos possíveis é Carregar um JSON OBDStack Executar uma ação do OBDStack atualmente carregado Executar uma lista de ações do OBDStack atualmente carregado Soltar o OBDStack atual Obter o nome do atual OBDStack Carregar arquivo de descrição Carregar um dado obdStack como descrito anteriormente. As pilhas são acumuladas e sobrescritas, desde que nenhuma ação de queda seja chamada. Sempre que carregar uma pilha e uma pilha já estiverem lá, se os nomes estiverem ambos definidos, o nome atual será a concatenação de nomes de pilha anteriores e novos. Após o sucesso, o nome atual será retornado no nome do campo. Pedido para carregar a pilha JSON: Resposta: se a pilha foi carregada corretamente, ou em caso de erro. Executar uma ação Executar uma ação já presente no obdStack atual. Pedido é um campo obrigatório. Ele informa o programa que tipo de solicitação é. Use executeAction para executar uma ação de pilha. Nome é um campo obrigatório. O nome da ação a ser executada. Ele deve estar presente na pilha atualmente carregada. RequestId é um campo opcional. Se presente, ele será encontrado na resposta do programa. Permite que se compreenda a que pedido a resposta está relacionada. Executar uma lista de ações Executar uma lista de ações já presentes no obdStack atual ou em torno dele. Os resultados chegarão em várias mensagens assim que forem executadas. Pedido é um campo obrigatório. Ele informa o programa que tipo de solicitação é. Use executeAction para executar uma ação de pilha. Ações é um campo obrigatório. A matriz de ações como um pedido de ação válido - ver anterior Execute uma ação. RequestId é um campo opcional. Se presente, ele será encontrado na resposta do programa com um traço seguido pelo ID da ação. Permite que se compreenda a que pedido a resposta está relacionada. Em seguida, uma segunda mensagem Descartar o OBDStack atual Todas as mensagens são adicionadas à pilha atual. Isso permite que você envie sua pilha com várias mensagens. As pilhas enviadas para a mensagem são salvas no flash do dispositivo e são recuperadas após a reinicialização. Sempre que uma ação, comando, ecu tem o mesmo nome que um anterior, o novo substitui o antigo. Sempre que uma mensagem contém o comando drop, então todas as informações da RAM, Flash são descartadas antes de manipular a própria mensagem. A resposta tem a queda de campo que indica o status (true ou false) e quando true, o nome do campo que contém o nome da pilha descartada (Nenhum nome se name não está definido). Se a pilha foi descartada corretamente ou em caso de erro. Obter o nome obdStack atual Obter o nome obdStack atual, os resultados podem ser nulos (sem pilha), sem nome (sem conjunto de nomes) ou o nome de pilha fornecido mais recente. Sempre que várias pilhas com nome fossem carregadas com um novo nome, o nome atual é a concatenação separada de todos os nomes dados seguindo a ordem de carregamento. Solicitação: Resposta: Em caso de erro ao tentar executar a solicitação, uma mensagem de erro curta será enviada: Se ocorrer um erro ao enviar um comando (por exemplo, sem resposta, sem dados disponíveis), o resultado deste comando ficará vazio em O JSON: quotquot. Se ocorrer um erro durante a execução de uma ação (por exemplo, dividir por zero, falha de dependência de comando), o resultado dessa ação será o dobro 0.1 no JSON: -0.1. Exemplo de pilha: Comandos padrão OBD-IIUn sistema para a otimização da confiabilidade de um sistema em série com restrições de múltipla escolha e orçamento Nabil Nahas Mustapha Nourelfath. . Departamento de Ciências Aplicadas, Universidade de Quebec, Abitibi-Témiscamingue, 445, Boulevard de l'Université, Rouyn-Noranda, Que. Canadá J9X 5E4 Recebido em 21 de junho de 2003. Aceito em 21 de fevereiro de 2004. Disponível on-line em 1 de abril de 2004. Muitos pesquisadores demonstraram que o comportamento das colônias de insetos pode ser visto como um modelo natural de solução coletiva de problemas. A analogia entre a maneira com que as formigas procuram alimentos e problemas de otimização combinatória deu origem a um novo paradigma computacional, chamado sistema de formigas. Este artigo apresenta uma aplicação do sistema ant em um problema de otimização de confiabilidade para um sistema em série com restrições de múltipla escolha incorporadas em cada subsistema, para maximizar a confiabilidade do sistema sujeita ao orçamento do sistema. O problema é formulado como um problema de programação de números inteiros binários não-lineares e caracterizado como um problema NP-duro. Este problema é resolvido desenvolvendo e demonstrando um algoritmo de sistema de formiga específico do problema. Neste algoritmo, soluções do problema de otimização de confiabilidade são construídas repetidamente considerando o fator de rastreamento e o fator de desejabilidade. Uma pesquisa local é usada para melhorar a qualidade das soluções obtidas por cada formiga. Um fator de penalidade é introduzido para lidar com a restrição orçamentária. As simulações mostraram que o sistema de formigas proposto é eficiente em relação à qualidade das soluções e ao tempo de computação. Sistema de série Otimização de confiabilidade Sistema de formiga Múltipla escolha Fig. 1. A fig. 2. A fig. 3. A fig. 4. Tabela 2. Fig. 5. Tabela 3. Fig. 6. A fig. 7.Individuals que estão indo principalmente para as aplicações autorizadas usarão a bagagem especializada fornecida por Hidesign onde você pode área seus papéis e arquivos críticos corretamente. Estes tipos de bolsas acessíveis apresentam bom volume de área de armazenamento e também são adicionalmente cool e moderno na parece ser. Devido ao melhor estilo e design e bolsos amplos, a bagagem são amplamente utilizados em todo o mundo. A bagagem é formulado trabalhando com formas de alta qualidade e cores que podem ser programa emparelhado sua roupa legal e na moda. Hidesign acessível bolsas ajudá-lo a gerar uma individualidade de por si mesmo. É amplamente vai fazer você saltar para fora durante a multidão e encontrar o interesse de um monte de. A Bagagem Gals pode ser encontrado em uma seleção muito grande que é ideal para mulheres de todas as idades entre todas as faixas etárias. Pode-se também surpreender bolsas acessíveis para os parentes, porque é a maneira perfeita de apresentação de multi-purpose bagagem. Você também vai experimentar uma exigência fantástica em garras gals que podem ser denotados como realmente requintado bolsas acessíveis para as mulheres. Eles são realmente muito resistente e dar olhar de tirar o fôlego para você e seu guarda-roupa atual. Ele satisfaz muito bem com quase todos os vestidos devido ao seu estilo e estrutura de design. Este autor é realmente um experiente em moda mais atual em bolsas de marca acessível. Seus artigos ou posts no Designer label Baggage faz como a bagagem Kara e Hidesign Bagagem são bastante benéficos. Obtenha 100 exclusivo Designer Label Bagagem em Bagskart a preços imbatíveis de venda.
No comments:
Post a Comment