Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Desbordamiento puerto serie

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Desbordamiento puerto serie Responder citando

Hola a todos. Soy nuevo en c++ builder así que perdonad si me expreso confusamente sobre el siguiente tema. Agracezco vuestra paciencia de antemano.

Estoy realizado una aplicación a través del puerto serie que usa un fichero CommThread_Unit.cpp que no creado yo. Este fichero es el que lleva a cabo la transferencia de información por el puerto serie. El problema consiste en que la aplicación falla de manera impredecible, es decir, llega un momento que el envío de datos a través del puerto colapsa el programa.
La explicación que yo le doy es que la variable de entrada en el puerto (el buffer) se llena sin que dé tiempo a transmitir su contenido, pero esta explicación es bastante sencilla e intuitiva debido a mi poca experiencia como programados c++ builder. Por ello recurro a vosotros para saber que podeis decirme. GRACIAS.

CÓDIGO FICHERO QUE REALIZA LA INTERFAZ:
void __fastcall TPrincipal::FormCreate(TObject *Sender)
{
Serial = new TCommThread();
Serial->ReturnMethod=ReturnMethod;
AdjustDevicesNames(
Serial->GetAvailableDevicesNames(true,false,NULL));
AdjustInterface();
Receive_Memo->Clear();
}

void TPrincipal::ReturnMethod(unsigned char *Buffer_Rx,unsigned long NDatos)
{
unsigned char i;

for(i=0;i<NDatos;i++)
{
Receive_Memo->Text=Receive_Memo->Text+
" "+((Format("%2.x",ARRAYOFCONST(((int)Buffer_Rx[i])))));
}
Receive_Memo->Lines->Add("");
}

FICHERO PUERTO SERIE CommThread_Unit.cpp
__fastcall TCommThread::TCommThread
(void(__closure *NewReturnMethod)(unsigned char *Buffer_Rx,unsigned long NDatos))
: TThread(true),ReturnMethod(NewReturnMethod)
{
//Inicializando los atributos
Connected=false;

DeviceName="COM1";

OriginalDCB.DCBlength=sizeof(DCB);
OriginalDCB.BaudRate=9600;
//OriginalDCB.BaudRate=115200;
OriginalDCB.ByteSize=8;
OriginalDCB.Parity=NOPARITY;
OriginalDCB.StopBits=ONESTOPBIT;

OriginalTimeouts.ReadIntervalTimeout=15;
OriginalTimeouts.ReadTotalTimeoutMultiplier=1;
OriginalTimeouts.ReadTotalTimeoutConstant=250;
OriginalTimeouts.WriteTotalTimeoutMultiplier=1;
OriginalTimeouts.WriteTotalTimeoutConstant=250;

ReceiveQueue=32;
TransmitQueue=9;

MaxFails=100000;

ReceiveInterval=0;
}

void __fastcall TCommThread::Execute()
{
unsigned long ReadBytes;

while(Terminated==false)
{
Sleep(ReceiveInterval);
AvailableBytes=BytesAvailable();
if(AvailableBytes>0)
{
ReceivedData.SetLength(AvailableBytes);

if(ReadFile(DeviceHandle,
&(Datos_Rx)/*(void*)ReceivedData.data()*/,
AvailableBytes, &ReadBytes, NULL)==true)
{
if(ReadBytes>0)
{
Synchronize(AfterReceiveData);
ReceivedData="";
}//endif
}//endif
}//endif
}
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Siento no poder ayudarte sobre el codigo que publicaste.

Lo que te puedo decir es que existen unos componentes que instalas en el Builder y te permiten hacer la transmision por puerto Serie tan sencillo como decir Puerto->Open(); por supuesto para activar el puerto y Puerto->Putchar('a'); para enviar un dato por el puerto. Y claro, esta la contraparte Getchar().

Estos componentes tan maravillosos se llaman Async Professional o tambien APRO. Si los necesitas me mandas tu correo y te los envio. La instalacion y el funcionamiento es muy sencillo, yo te puedo indicar los pasos y tambien te puedo adjuntar el manual en PDF.

Espero que te sirva mi sugerencia. Me cuentas.
_________________
Dios es real... a menos que se declare entero!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.