Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 07-04-2022
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 72
Poder: 11
chenech Va por buen camino
API de Windows

Cita:
Empezado por chinchan Ver Mensaje
Hola y saludos a todos los del foro. Cuando programaba en C++ Builder6 utilizaba los componentes ComPort para comunicarme por el puerto serie (de eso hace ya tiempo). Ahora utilizo el el Embarcadero XE y por más que he buscado, no encuentro estos componentes para el Builder XE5. ¿Sabéis si existen para este compilador?, ¿Sabéis si hay otros componentes que pueda utilizar?... Muchas gracias.
Yo lo he echo siempre con llamadas al API de Windows, así no dependo de terceros y complia en cualquier versión desde la 1 hasta la 11.
Te paso un ejemplo que tengo para comunicar con una pesa, ReadFile y WriteFile se encargan de leer o grabar en el puerto:
Código:
	HANDLE hComm;
	DCB dcbCommPort;
	COMMTIMEOUTS ctmoNew = {0};
	DWORD dwBytesRead, dwBytesWrite;
	char chBuf[50], chEnvia[32], chEnvia2[3];
	chBuf[0] = '\0';
	double dPesada = 0;
	char *cPuerto = getenv("CFPUERTO");
	String ASPuerto = cPuerto;
	hComm = CreateFile(ASPuerto.w_str(), GENERIC_READ | GENERIC_WRITE, 0, 0,
										 OPEN_EXISTING, 0, 0);
	if(hComm == INVALID_HANDLE_VALUE)
	{
		ShowMessage("Error abiendo el puerto de comunicaciones");
		return 0;
	}
	ctmoNew.ReadTotalTimeoutConstant = 100;
	ctmoNew.ReadTotalTimeoutMultiplier = 0;
	ctmoNew.WriteTotalTimeoutConstant = 100;
	ctmoNew.WriteTotalTimeoutMultiplier = 0;
	SetCommTimeouts(hComm, &ctmoNew);
	dcbCommPort.DCBlength = sizeof(dcbCommPort);
	GetCommState(hComm, &dcbCommPort);
	BuildCommDCB(L"9600,o,7,1", &dcbCommPort);
	SetCommState(hComm, &dcbCommPort);
	char cRedondeo[25], chPeso[10];
	sprintf(cRedondeo, "%06.f", Form1->PN(EPVP->Text) * 100);
	unsigned int ui;
	for(ui=0;ui<strlen(cRedondeo);ui++)
		chEnvia[ui+5] = cRedondeo[ui];
	sprintf(cRedondeo, "%13s", ENomArticulo->Text.c_str());
	for(ui=0;ui<strlen(cRedondeo);ui++)
		chEnvia[ui+17] = cRedondeo[ui];
	chEnvia[0] = '\x04';
	chEnvia[1] = '\x02';
	chEnvia[2] = '0';
	chEnvia[3] = '5';
	chEnvia[4] = '\x1b';
	chEnvia[11] = '\x1b';
	chEnvia[12] = '0';
	chEnvia[13] = '0';
	chEnvia[14] = '0';
	chEnvia[15] = '0';
	chEnvia[16] = '\x1b';
	chEnvia[30] = '\x03';
	chEnvia[31] = '\0';
	WriteFile(hComm, chEnvia, strlen(chEnvia), &dwBytesWrite, NULL);
	ReadFile(hComm, chBuf, 45, &dwBytesRead, NULL);
	if(dwBytesRead == 1)
	{
		if(chBuf[0] == '\x06')
		{
			chEnvia2[0] = '\04';
			chEnvia2[1] = '\05';
			chEnvia2[2] = '\0';
			Sleep(500);
			WriteFile(hComm, chEnvia2, strlen(chEnvia2), &dwBytesWrite, NULL);
			Sleep(500);
			ReadFile(hComm, chBuf, 45, &dwBytesRead, NULL);
			if(dwBytesRead == 26)
			{
				if(chBuf[0] == '\x02')
				{
					chPeso[0] = chBuf[6];
					chPeso[1] = chBuf[7];
					chPeso[2] = chBuf[8];
					chPeso[3] = chBuf[9];
					chPeso[4] = chBuf[10];
					chPeso[5] = '\0';
					cRedondeo[0] = chPeso[0];
					cRedondeo[1] = chPeso[1];
					cRedondeo[2] = '.';
					cRedondeo[3] = chPeso[2];
					cRedondeo[4] = chPeso[3];
					cRedondeo[5] = chPeso[4];
					cRedondeo[6] = '\0';
					try { dPesada = atof(cRedondeo); }
					catch (...) { dPesada = 0; }
				}
				else
					ShowMessage("Error en la lectura de la cabecera de la pesa");
			}
			else
				ShowMessage("Error en los dígitos devueltos de la pesa");
		}
		else
			ShowMessage("No se recibe ACK de la pesa");
	}
	else
		ShowMessage("No se recibe respuesta de la pesa");
	PurgeComm(hComm, PURGE_RXABORT);
	CloseHandle(hComm);

Última edición por chenech fecha: 07-04-2022 a las 00:11:12.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Componente puerto serie REHome Varios 0 25-03-2017 07:45:53
Componente Cportlib (puerto serie) Duda tulio Varios 11 08-03-2011 00:28:17
Programar puerto serie con Builder C++ zairillo C++ Builder 4 07-10-2008 16:40:49
Componente para puerto Serie en C++ Builder 5 lu9eui C++ Builder 2 05-08-2007 23:13:13
comunicacion con el puerto serie de la PC en C++ Builder 5 RobeCarl C++ Builder 2 09-01-2007 23:36:06


La franja horaria es GMT +2. Ahora son las 17:10:43.


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
Copyright 1996-2007 Club Delphi