Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Puerto Serie / Envio De Datos (https://www.clubdelphi.com/foros/showthread.php?t=59637)

alebarto 03-09-2008 03:50:21

Puerto Serie / Envio De Datos
 
ncesitaria saber como puedo hacer para enviar numero enteros al puerto serie para que me aplique algo en una placa que tengo conectada.. hay una forma¿¿¿¿?? estoy haciendolo en borland builder c++ 6.

me podran ayudar???

droguerman 03-09-2008 15:07:08

en torry.net hay un componente llamado synaser, existe otro llamado serialng, que es el que más uso pero es para delphi, pero básicamente la idea es escribir en el archivo llamado COM1.

saludos

alebarto 03-09-2008 20:02:26

Primero gracias por la respuesta, pero no encuentro eso, yo estoy usando un componenente que se ComPort, que esta instalado dentro de los componente y la libreria se llama CportLib. Esto es lo que hice yo, me funciona perfecto, solo que me envia ascii, pero haciendo la conversion yo a mano, con lo que me muestra en la tabla verifico que los datos son correctos los que se envian y los que recibo, solo que necesitaria recibir y enviar numeros enteros. Te paso lo que hice mira...
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
if (ComPort1->Connected)
ComPort1->Close();
else
ComPort1->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSettingClick(TObject *Sender)
{
ComPort1->ShowSetupDialog();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSendClick(TObject *Sender)
{
AnsiString Str;


Str = Edit1->Text;
if (CheckBox1->Checked)
Str = Str + "\r\n";
ComPort1->WriteStr(Str);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1AfterOpen(TObject *Sender)
{
btnOpen->Caption = "Close";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1AfterClose(TObject *Sender)
{
btnOpen->Caption = "Open";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
{
AnsiString Str;
ComPort1->ReadStr(Str, Count);
//ComPort1->Count;
//Memo1->Text = Memo1->Text + Str;
Edit2->Text =Edit2->Text + Str;
}
//--------------------------------------------





***********************************/*******************
Esta es la parte que tendria que modificar algo, para poder hacer que envie los numeros entero creo que habria que hacer una conversion o enviar de otea forma nose? eso es lo que no encuentro.
if (CheckBox1->Checked)
Str = Str + "\r\n";
ComPort1->WriteStr(Str); ???????????? ACA NO SE PODRA HACER ALGO????

yomismo24 04-09-2008 10:08:02

Hola
a ver si he entendido bien, tu lo que necesitas es mandar un entero a una tarjeta, pero la comunicacion por el puerto serie se hace mediante cadenas.

Mi pregunta es si la tarjeta es capaz de hacer la conversión del caracter ascii que representa el digito, al valor del digito en si.

Me refiero a que si tu envias ComPort1->WriteStr("1\r\n");
Tu tarjeta recibe ese caracter 1, cuyo valor en ascii es 49.
Si ese es el caso, solo tendrias que restar 48 al caracter recibido y tendrias su valor.

No se si exactamente ese es tu problema. Si no es así danos un poco más de información de como trabaja la tarjeta para ver si se nos ocurre algo.

Un saludo!!

alebarto 07-09-2008 22:46:58

Serie
 
Si se puede usar caracteres, pero eso requiere el doble de comunicación, y necesitaria que se envien números directamente.
Ej: para mandar el número 20 en decimal, tengoq ue amndar el 2 en un byte con codigo ascii y el 0 en otro byte en ASCII, y eso me duplica el tiempo de comunación.
Con boland c++ en dos podia hacerlo mandar en hexadecimal.
pero aca como se podría hacer para mandar por el serie un hexa o decimal? o como convertirlo.?antes te pase mi codigo.. fijate si con eso podes darme alguna pequeña ayuda.
Desde ya muchisimas gracias.


La franja horaria es GMT +2. Ahora son las 14:34:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi