Programa Puerto Serial
Publicado por Alvin (6 intervenciones) el 26/03/2018 17:38:15
Buenos días para todos. Estoy Escribiendo un programa en Dev-C++ para comunicar dos PC's por medio de un cable RS-232 Null Modem. La PC que transmite los datos tiene MS-DOS 5.0 y la que recibiría los datos con mi programa tiene Windows 7. La comunicación se daría por medio de los puertos Seriales Com1. El compilador da siguiente error:
71 Serial.cpp cannot convert `bool' to `void*' for argument `2' to `BOOL ReadFile(void*, void*, DWORD, DWORD*, _OVERLAPPED*)'
La linea que produce el error es:
ReadFile(m_hComm, &cadena[rebut]==0, 1, &recibiendo, NULL);
El codigo completo es el siguiete:
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <tchar.h>
#include <afx.h>
#include <afxwin.h>
#define STRING_SIZE 100
#define Nombre1 "datahemat.txt"
FILE *fp;
int b = 10;
using namespace std;
unsigned long rebut = 0, recibiendo = 0;
char cadena [512];
int i = 0;
int main(void)
{
/* Este módulo se encarga de abrir el puerto serial para comunicarse*/
HANDLE m_hComm;
DWORD dwBytesRead;
DWORD dwBufferSize;
TCHAR szBuffer [STRING_SIZE];
dwBufferSize = sizeof(TCHAR) * STRING_SIZE;
m_hComm = CreateFile("Com1",GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (m_hComm == (HANDLE)-1){
printf ("Error abriendo el puerto serie COM1");
/* return; */
}
/* Este módulo de encarga de configurar el puerto segun el protocolo
Beckman Coulter */
DCB dcb;
dcb.DCBlength = sizeof(DCB);
GetCommState(m_hComm, &dcb);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.fParity = TRUE;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE;
SetCommState (m_hComm,&dcb);
/* Esta parte crea el archivo y verifica si existe */
fp = fopen(Nombre1, "w");
//Chequeando si el archivo existe.
if (fp == NULL) {
perror("File could not be opened for writing\n");
}
else
{
printf("File created\n");
}
fprintf (fp, " %d ", b) ;
fclose(fp);
/* Esta parte se encarga de recibir los datos y guardarlos en el archivo */
do {
rebut = 0;
do {
ReadFile(m_hComm, &cadena[rebut]==0, 1, &recibiendo, NULL);
if (cadena[rebut]==0) break;
rebut+=recibiendo;
} while (rebut<512);
f.Write(Cadena, rebut);
} while (rebut==512);
cout << " Se leyeron " << dwBytesRead << " bytes. " <<"Buffer; " << szBuffer << endl;
CloseHandle (m_hComm);
}
El problema es que la pc que transmite los datos, la cual tiene un software cerrado que comunica mediante un protocolo específico de: 9600 baudios, paridad impar, stop bit = 1, no puedo hacerle nada. Lo que necesito es que la PC que recibiría los datos, los reciba por el puerto serial com1 y los guarde en un archivo en el disco duro.
Si alguien tiene la respuesta por favor hágamela saber. Muchas gracias a todos de ante mano... Saludos
71 Serial.cpp cannot convert `bool' to `void*' for argument `2' to `BOOL ReadFile(void*, void*, DWORD, DWORD*, _OVERLAPPED*)'
La linea que produce el error es:
ReadFile(m_hComm, &cadena[rebut]==0, 1, &recibiendo, NULL);
El codigo completo es el siguiete:
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <tchar.h>
#include <afx.h>
#include <afxwin.h>
#define STRING_SIZE 100
#define Nombre1 "datahemat.txt"
FILE *fp;
int b = 10;
using namespace std;
unsigned long rebut = 0, recibiendo = 0;
char cadena [512];
int i = 0;
int main(void)
{
/* Este módulo se encarga de abrir el puerto serial para comunicarse*/
HANDLE m_hComm;
DWORD dwBytesRead;
DWORD dwBufferSize;
TCHAR szBuffer [STRING_SIZE];
dwBufferSize = sizeof(TCHAR) * STRING_SIZE;
m_hComm = CreateFile("Com1",GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (m_hComm == (HANDLE)-1){
printf ("Error abriendo el puerto serie COM1");
/* return; */
}
/* Este módulo de encarga de configurar el puerto segun el protocolo
Beckman Coulter */
DCB dcb;
dcb.DCBlength = sizeof(DCB);
GetCommState(m_hComm, &dcb);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.fParity = TRUE;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE;
SetCommState (m_hComm,&dcb);
/* Esta parte crea el archivo y verifica si existe */
fp = fopen(Nombre1, "w");
//Chequeando si el archivo existe.
if (fp == NULL) {
perror("File could not be opened for writing\n");
}
else
{
printf("File created\n");
}
fprintf (fp, " %d ", b) ;
fclose(fp);
/* Esta parte se encarga de recibir los datos y guardarlos en el archivo */
do {
rebut = 0;
do {
ReadFile(m_hComm, &cadena[rebut]==0, 1, &recibiendo, NULL);
if (cadena[rebut]==0) break;
rebut+=recibiendo;
} while (rebut<512);
f.Write(Cadena, rebut);
} while (rebut==512);
cout << " Se leyeron " << dwBytesRead << " bytes. " <<"Buffer; " << szBuffer << endl;
CloseHandle (m_hComm);
}
El problema es que la pc que transmite los datos, la cual tiene un software cerrado que comunica mediante un protocolo específico de: 9600 baudios, paridad impar, stop bit = 1, no puedo hacerle nada. Lo que necesito es que la PC que recibiría los datos, los reciba por el puerto serial com1 y los guarde en un archivo en el disco duro.
Si alguien tiene la respuesta por favor hágamela saber. Muchas gracias a todos de ante mano... Saludos
Valora esta pregunta


0