![]() |
¿Como enviar un mensaje en ASCII desde un edit a una máquina por puerto serial?
Estimados amigos de ClubDelphi:
Primero que nada, agradezco por la existencia de esta página, ya que gracias a ustedes pude resolver muchas dudas en relación a la programación en Delphi. Es la primera vez que programo en este programa (El cual llevo 2 meses informandome y una semana realizando este programa) y mi primer post. Mi consulta es la siguiente: Estoy en mi seminario de título y estoy realizando un programa con Delphi 7 para poder realizar comunicación por puerto serial con unos equipos de una molinera (4 en total), por código ASCII. El asunto es que por medio de un edit, quiero realizar un cambio de valor de por ejemplo, de 6300 Kg/m3 de un dosificador de trigo a 6000. y el comando es el siguiente: >01Q006300D8 (Este es un ejemplo). (Si tengo entendido, por código ASCII). El asunto es que este comando es recepcionado por la máquina, recibiendo una respuesta en el computador, del tipo ACK (Mensaje correcto), y NAK (Mensaje fallido o No hay Respuesta). Esto lo logré por medio del uso de Hyperterminal. Pero lo que quiero es realizar la misma acción con el programa en Delphi, en la cual envío el valor por medio de un edit, recibir la respuesta de la máquina a un memo, y a la vez de realizar el cambio del valor de 6300 a 6000 en ese dosificador. Quisiera que pudieran aportarme con un ejemplo o programa, y si también me pueden recomendar el componente para el puerto serial (Tengo el TComport, el Turbo Power Async, ý otros componentes más). También que me responda, con su comando respectivo, pero a una balanza electrónica. Espero que no sea mucho pedir, y disculpen si a alguno de repente le pueda molestar el mensaje, es mi primer post. |
Bueno, te cuento que tu post no es desagradable, todo lo contrario para ser tu primer post es bueno :).
No soy un experto en la materia por lo que solo puedo decirte dos cosas al respecto... 1. Se supone que la cadena que nos haz mostrado "01Q006300D8" es una "trama" donde tu debes saber el significado de cada caracter que en dicha cadena. Para enviar estas "señales" a dicho puerto deberas hacerlo de alguna manera y seguramente la función CHR de Delphi te ayudara con eso ya que tiene que ser ASCII ;). 2. Te recomiendo que el Memo donde recibes el resultado que te devuelve el aparato que mencionas tenga como Font.Name la fuente Terminal, para que veas la diferencia entre los caracteres y no te encuentres con un poco de cuadritos iguales que a los ojos humanos no signifiquen nada ;). Se que esto no te ayudara en gran manera pero aún asi, espero que por lo menos te sirva de algo. Hasta la proxima :). |
Hola!
A groso modo tu no debes de convertir nada a ascii pues de eso se encarga el componente que uses (yo uso ComPort de Djan Cernilla). Por ejemplo:
Asi mismo deberias tener una "escucha" que espere la respuesta por ejemplo:
Con respecto a lo de la balanza, que tipo / marca de balanza o bascula es? cada marca tiene formatos de transmision diferentes. Espero te ayude esto y si quedan mas dudas comentalas que alguien nos respondera. |
Hola The_Animal
Yo uso el componente TApro y es muy simple hacer lo que deseas.
Para recibir el caracter de control puedes usar un trigger del mismo componente mas o menos así:
Y posteriormente actuar en consecuencia en el evento OnTriggerAvail del mismo componente. Salud OS |
Bueno, solo una anotación mas:
Comport ======= Cita:
Cita:
====== Cita:
Cita:
|
Estimados amigos de ClubDelphi:
Agradezco que me hayan podido contestar, me estoy empezado a generar una idea, y estoy empezando a trabajarla. Para [FGarcia], Me peguntaste sobre el tipo de balanza que estoy ocupando. La balanza electrónica que estoy usando es la balanza automática MSDL del tipo Tubex de la empresa Suiza Buhler (Al igual que el dosificador de trigo). No mencioné la trama de la balanza en el mensaje, por que no me acordaba, pero el mensaje que mandé por hyperterminal es el siguiente: >01qD2 (01 es el número del equipo, q es una variable respectiva de la balanza (No recuerdo con exactitud, creo que peso total no borrable en Kg) y D2 (Hexadecimal), si no me equivoco, corresponde a 132 en decimal). Espero que puedan seguir ayudándome, y una vez más, gracias a todos por sus aportes. |
La franja horaria es GMT +2. Ahora son las 07:28:31. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi