Conversor Lazo Corriente a RS232 (Current loop to RS232) para surtidores.

Nepper

Miembro algo reconocido
#21
ok! claro como el agua... una ultima y no los molesto más...
se refieren a surtidores de combustible??
 

Nepper

Miembro algo reconocido
#23
:LOL: si, soy un paisano de hurlingham y si, se lo que es... pero hablando en un foro de electrónica, y con millones de nombres análogos que posee los dispositivos electrónicos, mas los nombres que no conozco, pensé que hablaban de alguna placa en especial que tenía el nombre bulgar de "Surtidor", además los colegas de los otros paises tambien me confundían... y nunca pensé que un surtidor lo hace otra empresa que nada que ver con las petroleras... eso es nuevo para mi... siempre pensé que las petroleras hacían sus propios surtidores...

ok... no los molesto más....

PD: Me disculpo... solamente tenía que hacer clik en uno de los links de arriba... :oops:
 
#24
Hola a todos

Soy nuevo en esto de los protocolos , tengo unos surtidores tokhein que estan conectados a un sistema de facturacion , tiene un controlador o caja , pero el sistema esta siendo dejado a un lado por-qUE tarda demasiado tiempo en autorizar la venta , mas o menos 10 segundos , quisiera conocer como poder leer lo qUE envia para poder desarrollar un nuevo aplicativo , tratando de mejorar los tiempo en qUE el dispensador autoriza la venta


mil gracias
 
Última edición por un moderador:
#25
Hola a todos

Soy nuevo en esto de los protocolos , tengo unos surtidores tokhein que estan conectados a un sistema de facturacion , tiene un controlador o caja , pero el sistema esta siendo dejado a un lado porq tarda demasiado tiempo en autorizar la venta , mas o menos 10 segundos , quisiera conocer como poder leer lo q envia para poder desarrollar un nuevo aplicativo , tratando de mejorar los tiempo en q el dispensador autoriza la venta


mil gracias
Con cuántos otros surtidores está conectado?
 
#26
Gracias por responder

Tengo 4 surtidores de la misma marca, conectados en serie te digo esto por-qUE es lo qUE sabemos de la empresa qUE instalo el sistema esto va conectado a una caja qUE tiene una tarjeta qUE tiene 4 entradas
 
Última edición por un moderador:
#27
Gracias por responder

Tengo 4 surtidores de la misma marca, conectados en serie te digo esto porq es lo q sabemos de la empresa q instalo el sistema esto va conectado a una caja q tiene una tarjeta q tiene 4 entradas
Probá anulando 3 de los cuatros surtidores del lazo y del sistema, a ver si con un solo surtidor anda más rápido.
 
#28
Ya hemos probado eso y no funciona sigue autorizando a los 10 segundos mas o menos y si alzo todas las mangueras de los 4 surtidores tarda hasta 30 segundos en autorizar y va en serie autorizando

Por eso quisiera saber como empezar a realizar un sistema para estos dispositivos como se lee las cadenas qUE envia pues no lo se en verdad pero me gustaria aprender , si me ayudan con consejos o qUE leer agradeceria su experiencia

Nota: tengo experiencia en delphi programando por varios años
 
Última edición por un moderador:
#29
Ya hemos probado eso y no funciona sigue autorizando a los 10 segundos mas o menos y si alzo todas las mangueras de los 4 surtidores tarda hasta 30 segundos en autorizar y va en serie autorizando

Por eso quisiera saber como empezar a realizar un sistema para estos dispositivos como se lee las cadenas q envia pues no lo se en verdad pero me gustaria aprender , si me ayudan con consejos o q leer agradeceria su experiencia

Nota: tengo experiencia en delphi programando por varios años
Supongo que tenés que colgarte del lazo de corriente y "espiar" el protocolo...
Igualmente, creo que vas a necesitar algunos manuales....
Parece que somos varios los que trabajamos en Delphi.

Saludos
 
#30
Gracias por tu tiempo

pero donde puedo conseguir esos manuales y cuales serian, me interesa este tema , si eres tan amable me podrias guiar un poco


Te quedo muy agradecido

Nota : utilizan un programa qUE lee lo que los puertos envian se llama comport o algo asi este envia unas tramas me imagino qUE eso es espiar el lazo de corriente qUE mencionas
 
Última edición por un moderador:
#31
Gracias por tu tiempo

pero donde puedo conseguir esos manuales y cuales serian, me interesa este tema , si eres tan amable me podrias guiar un poco


Te quedo muy agradecido

Nota : utilizan un programa qUE lee lo que los puertos envian se llama comport o algo asi este envia unas tramas me imagino qUE eso es espiar el lazo de corriente qUE mencionas
Para espiar el lazo, tenés que colgarte en el cable, en el medio de el envio o de la recepción... y "escuchar", con un terminal de puerto serie solo te va a aparecer el tráfico en pantalla.... después está en tí el proceso de entenderlo...
Lamentablemente no tengo información del protocolo que te pueda compartir.
Saludos
 
#33
Saludos
Por favor alguien que publique los protocolos no importa de que marca de dispensador sea





Se que no es un trabajo facil pero solo quiero capturar algunas tramas básicas para enviar esa información a otro controlador que se conectara en paralelo al controlador principal.

Saludos
Actualmente trabajo en una empresa que utiliza algunos protocolos de comunicación con dispensadores, por políticas de la compañía no podría compartir esta información sin que exista un intercambio de información que sea útil para la empresa, sin embargo te cuento que he hecho yo para obtener algún dato de los protocolos de otros fabricantes, construye o utiliza un Loop de corriente con conexión a rs232 y utiliza un sniffer, podrías utilizar el http://www.serial-port-monitor.com/, conecta tu loop como otro equipo mas de la red y monitores todo el flujo de información, con algunos datos como byte de incio y de final podrías obtener los comando. no es fácil la tarea pero inicia con este método. atento a tus comentarios

http://www.docklight.de/info_en.htm#dl_info_tap
una herramienta mas para utilizar los loop de corriente - rs232
 
Última edición:
#34
Te cuento que he hecho yo para obtener algún dato de los protocolos de otros fabricantes, construye o utiliza un Loop de corriente con conexión a rs232 y utiliza un sniffer, podrías utilizar el http://www.serial-port-monitor.com/, conecta tu loop como otro equipo mas de la red y monitores todo el flujo de información, con algunos datos como byte de incio y de final podrías obtener los comando. no es fácil la tarea pero inicia con este método. atento a tus comentarios

http://www.docklight.de/info_en.htm#dl_info_tap
una herramienta mas para utilizar los loop de corriente - rs232


Tengo el protocolo HongYang , pero no he podido obtener respuesta, ya realice la interfaces con un opto acoplador y 12 vol con Rx y TX al rs232, alguien tiene algún esquema de como es la conexión y como envíar los comando al surtidor. agradezco cualquier ayuda...

Comando de Estado : 0xF1 0x10 0xB0
 

Adjuntos

Última edición por un moderador:
#35
hola danco me gustaria platicarte de un proyecto que desarollamos hace 1 año y que dejamos fuera ya que se cambiaron los dispensarios por otros de la marca sufra-max , anterior mente teniamos HongYang y desaroyamos un dispositivo que interactuaba entre el software de control gas y los dispensarios directamente se trataba de un dispositivo en el que se insertaba una targeta , se ponia el nip,dispensario, monto y este dispositivo checaba si el cliente tenia saldo o no y activava el dispensario con la cantidad que se le indicaba.

para lograr esto tuvimos que hacer el loop y decodificar la forma en la que se comunicaba el programa original con los dispensarios y desarroyar un programa que siempre estaba en comunicacion con todos los dispensarios de manera que les pedia las ventas a cada dispensario y estaba en contacto con nuestro dispositivo de control de clientes todo esto en rs485.

te anexo imagen del dispositivo de control y puedo pasarte el codigo del programa para que veas el ejemplo de como se le mandan los comandos al dispensario.

te comento personal que trabajaba antes en profeco nos indico que ese dispositivo no podiamos tenerlo asi y nos decian que para usarlo se tenia que registrar. te recomiendo que revises esta situacion ya que nosotros trabajamos mucho y al ultimo lo quitamos.

igual hoy revisando documentacion de la nom185 encuentro que un dispositivo de esta naturaleza solo es necesario declararlo o informar y puede ser operativo. creo.
 

Adjuntos

#36
excelente, no se si viste la interface que realice, el documento PDF. cuando envías los comando, enviabas byte a byte cada periodo de tiempo o enviabas el paquete completo, para el ejemplo el comando de status 0xF1 0x10 0xB0,
o enviabas
0xF1
timeOut(5ms)
0x10
timeOut(5ms)
0xB0

cheque esta cadena Hex-- convertir a Ascii.
64 61 6E 63 6F 66 72 61 40 67 6D 61 69 6C 2E 63 6F 6D

agradezco tus comentarios.
 
#37
te envio parte del codigo del programa monitor para que analices la sección de donde se envía el comando.

Código:
      bool activo;
        SerialPort sp = new SerialPort();
        string puerto="COM6";
        
        int maquina = 0;        
        int numero_maquinas = 6;
        string comando="";

private void cambiar_pariedad(System.IO.Ports.Parity p)
        {
            sp.Parity = p;
        }  
private bool abrir_puerto()
        {
            try
            {                               
                sp.BaudRate = 2400;
                sp.DataBits = 8;
                sp.Parity = System.IO.Ports.Parity.None;
                sp.StopBits = StopBits.One;
                sp.PortName = puerto;
                sp.WriteTimeout = 1000;
                sp.ReadTimeout = 1000;
                sp.Open();
                return true;

            }
            catch(Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message,"Error de conexion!",MessageBoxButtons.OK,MessageBoxIcon.Error);
                return false;
            }
        }    
    private string enviar_comando(byte[] machine,byte[] lenght,byte[] gun,byte[]command,byte[] data3,byte[] data2,byte[] data1)
        {
            #region enviar comando--------------------------------------------
            int retardo = 0;
            string resultado = "";
            byte[] datos = new byte[8];

            retardo = clases.funciones.valInt(txt_timeout.Text);
            if (retardo <= 0) retardo = 50;

            datos[0] = machine[0];
            datos[1] = lenght[0];
            datos[2] = gun[0];
            datos[3] = command[0];            
            datos[4] = data1[0];
            datos[5] = data2[0];
            datos[6] = data3[0];
            datos[7] = calcular_checksum(datos);

            //-----------------
            sp.Write(datos, 0, 1);
            pausa(retardo);
            cambiar_pariedad(System.IO.Ports.Parity.Space);
                        
            sp.Write(datos, 1, 7);
            pausa(retardo);
            cambiar_pariedad(System.IO.Ports.Parity.None);
            pausa(retardo);
            #endregion
            #region esperar resultado--------------------------------------------

            //int delay = 20;
            int respuesta = 0;
            string datos_leidos = "";  
            int timeout = 0;
            bool esperar = true;

            while (esperar)
            {
                //pausa(delay);
                while (sp.BytesToRead > 0)
                {
                    respuesta = sp.ReadByte();
                    datos_leidos = datos_leidos + " " + respuesta.ToString("X2");
                }
                if (datos_leidos != "")
                {
                    esperar = false;
                    resultado = datos_leidos; ;
                    return resultado;
                }
                timeout++;
               // pausa(delay);
                if (timeout == 10)
                {
                    resultado = "TimeOut";
                    esperar = false;
                }
                Application.DoEvents();
            }
            sp.DiscardInBuffer();
            sp.DiscardOutBuffer();
            #endregion
            return resultado;
        }
private byte calcular_checksum(byte[] datos)
        {
            byte[] res=new byte[1] {0x00};
            long suma = Convert.ToInt16(datos[0].ToString(), 10) +
                                        Convert.ToInt16(datos[1].ToString(), 10) +
                                        Convert.ToInt16(datos[2].ToString(), 10) +
                                        Convert.ToInt16(datos[3].ToString(), 10) +
                                        Convert.ToInt16(datos[4].ToString(), 10) +
                                        Convert.ToInt16(datos[5].ToString(), 10) +
                                        Convert.ToInt16(datos[6].ToString(), 10);
            suma=256-suma;            
            res = BitConverter.GetBytes(suma);
            return res[0];
        }
 private byte[] seleccionar_comando(int maquina,string accion,int pesos)
        {
                        

            // inicializar datos para el comando
            byte[] datos =new byte[7] {0x00,0x00,0x00,0x00,0x00,0x00,0x00};
            byte[] dato = new byte[1] { 0x00 };
            byte[] machine = new byte[1] { 0x00 };
            byte[] lenght = new byte[1] { 0x00 };
            byte[] gun = new byte[1] { 0x00 };
            byte[] command = new byte[1] { 0x00 };
            byte[] data3 = new byte[1] { 0x00 };
            byte[] data2 = new byte[1] { 0x00 };
            byte[] data1 = new byte[1] { 0x00 };            


            if (maquina == 1) { machine = new byte[1] { 0x01 }; gun = new byte[1] { 0x01 }; }
            if (maquina == 2) { machine = new byte[1] { 0x01 }; gun = new byte[1] { 0x02 }; }
            if (maquina == 3) { machine = new byte[1] { 0x02 }; gun = new byte[1] { 0x01 }; }
            if (maquina == 4) { machine = new byte[1] { 0x02 }; gun = new byte[1] { 0x02 }; }
            if (maquina == 5) { machine = new byte[1] { 0x03 }; gun = new byte[1] { 0x01 }; }
            if (maquina == 6) { machine = new byte[1] { 0x03 }; gun = new byte[1] { 0x02 }; }
            
            if (accion == "PEDIR_ULTIMA_VENTA")
            {
                command[0] = 0x0F ;                
            }
            else if (accion == "ENVIAR_DESPACHO")
            {
                string t_precio = pesos.ToString().PadLeft(4, '0') ;
                command[0] =  0x09 ;
                data1[0] = 0x00;// BitConverter.GetBytes(Convert.ToInt16(t_precio.Substring(0, 2), 16))[0];
                data2[0] = BitConverter.GetBytes(Convert.ToInt16(t_precio.Substring(2, 2), 16))[0];
                data3[0] = BitConverter.GetBytes(Convert.ToInt16(t_precio.Substring(0, 2), 16))[0];
            }

            lenght = new byte[1] { 0x07 };

            datos[0] = machine[0];
            datos[1] = lenght[0];
            datos[2] = gun[0];
            datos[3] = command[0];
            datos[4] = data3[0];
            datos[5] = data2[0];
            datos[6] = data1[0];  

            return datos;
        }
 
Última edición por un moderador:
#38
veo que el protocolo que me dio el distribuidor de los surtidores difiere al que tu estas usando , tiene un vector de 7 bytes, probare enviando la consulta de: PEDIR_ULTIMA_VENTA

datos[0] = 0x01;
datos[1] = 0x07;
datos[2] = 0x01;
datos[3] = 0x0F;
datos[4] = 0x00;
datos[5] = 0x00;
datos[6] = 0x00;

por favor ver el manual adjunto.

estaré colocando los avances.
 

Adjuntos

#39
Hola Danco Buenas Tardes, yo tuve un proyecto similar y desarrolle la interfaz loop current para siguiente surtidor, intentare ayudarte pero por favor le pido colaboracion con el esquematico plano o circuito de comunicacion con los surtidores Tokheim mas vendidos, la verdad no tengo informacion ni un surtidor disponible para trabajar.
 

Adjuntos

Última edición por un moderador:
#40
Hola Amigo, ya construí la interface HongYang, con esta me funciono, pero me conecte al puerto de programacion http://sodoityourself.com/max232-serial-level-converter/, para conectarme al puerto de comunicación utilice 1 opto- acoplado, luego monto el esquema. no tengo la interfaces de Tokheim pero lo que he visto que los Tokheim utilizan es una conexión 232, y le colocan un buffer para hacer las conexiones a barias tarjetas.