none
Comunicacion TCP con GPRS C# RRS feed

  • Pregunta

  • Buenas @Devs, estoy tratando de hacer una comunicacion TCP con un dispositivo GPS que envia info binaria atraves de GPRS.

    Estuve trabajando hasta el momento con varios dispositivos que usan UDP con solicitud de ACK para evitar perdida de info.

    Bueno ahora me toco TCP, me conectaron un equipo y probe varios listeners TCP (pensando que era tarea facil) y nada, llega info pero esta vacia (yo creo q la estoy parseando mal o algo por el estilo).

    Solicite soporte a un Dev de la empresa y me mando un semiproyecto c++ y algo de info, la cual no logro entender para armar un pequeño listener TCP C# que reciba y responda ACK al equipo.

    Les copio la info que me envia el Dev de soporte de los fabricantes del GPS.

    Hi 

     

    Please refer to the attached basic source code for Server U Series.

    In addition, kindly refer to P1 protocol Message Format from page 5 to 8 to develop your platform. Please note P1 only supports Binary format, please ignore the definition of ASCII format.

    For example, after you issued the GPRS communication commands such as AT$HOSTS, AT$APN, AT$MODID, AT$IPTYPE, etc., P1 will send the first Heart Beat data to server for the communication request.

    For instance,

    00 04 00 02 00 00 00 00 3C 08 B6 A1 00 AB 00 06 01 39 0C 0D 06 12

    Transaction ID = 0x00 04

    Message Encoding = 0x00

    Message Type = 0x02

    Modem ID = 0x00 00 00 00 3C 08 BA1

    Message ID = 0x00 AB

    Data Length = 0x00 06

    RTC Hour = 0x01

    RTC Minute = 0x39

    RTC Seconds = 0x0C

    RTC Year = 0x0D

    RTC Month = 0x06

    RTC Day = 0x12

     

    When server receives the connection request from the P1 device, server has to reply an ACK to establish the GPRS connection.

    For instance to reply the HB data above,

    00 04 00 03 00 00

    Transaction ID = 0x00 04

    Message Encoding = 0x00

    Message Type = 0x03

    Status Code = 0x0000

     

    As for the tracking report, for example when you issue AT$GPSS=60,2,60 and AT$GPSMSG=1,3,0, the server should be able to receive Report ID 3 GPS updated message every 60 seconds from P1.

    For instance, where the bytes in red is message ID, it is very important to recognize what kind of report/alerts you are receiving from the device.

    00 06 00 02 00 00 00 00 3C 08 B6 A00 03 00 2E 01 38 35 0D 06 12 00 26 3D EE 00 B9 9E 01 00 00 34 00 01 03 07 00 00 00 00 4C 05 00 00 00 10 67 00 00 01 38 35 0D 06 12 01 39 27 0D 06 12

     

    Server should response every message with the same transaction ID coming from the device.

    00 06 00 03 00 00

     

    Furthermore, if you would like to send command from server to device, the procedure will be like the follows.

    For example, to query MODID by issuing AT$MODID? from server to device.

    Server sends AT$MODID? in binary format,

    00 02 01 00 00 09 41 54 24 4D 4F 44 49 44 3F

    0x00 02 – Transation ID

    0x01 – Message Encoding

    0x00 – Message Type

    0x 00 09 – Data Length

    0x41 54 24 4D 4F 44 49 44 3F – transfer theses bytes to Text is AT$MODID? You can easily TEXT to HEX converter on the internet.

     

    When device receives the command request form the server, P1 should respond for example $MODID=100100100,

    OK:MODID

    $MODID=100100100

    00 02 01 01 00 1c 4f 4b 3a 4d 4f 44 49 44 0d 0a

    24 4d 4f 44 49 44 3d 31 30 30 31 30 30 31 30 30 0d 0a

    0x00 02 – Transaction ID

    0x01 – Message Encoding

    0x01 – Message Type

    0x00 1c – Data Length

    0x4f 4b 3a 4d 4f 44 49 44 0d 0a – OK:MODID

    0x24 4d 4f 44 49 44 3d 31 30 30 31 30 30 31 30 30 0d 0a –$MODID=100100100

     

    Hope this is clear for you.

    Alguna idea como interpretar esto en C#-

    Desde ya muchas gracias!

    martes, 28 de enero de 2014 13:58

Todas las respuestas

  • Ariel,

    Es muy difícil intentar ayudarte, si no despejamos tus dudas por partes. Pues es obvio que no disponemos fisicamente el dispositivo para poder probar.

    Si te parece, intentamos paso por paso.

    Cual es el primer obstáculo con el que te encuentras? o en otro caso... muestra el código ejemplo en C++ para intentar interpretarlo en C#.

    Saludos,

    lunes, 10 de febrero de 2014 14:55