- 论坛徽章:
- 0
|
#include "stdafx.h"
#include "stdio.h"
//#include "mscomm.h"
#define BUFFER_SIZE 128
#define MSG(szMsg) MessageBox (NULL, szMsg , TEXT("Error" , MB_OK)
HANDLE hCom;
BOOL OpenSerial(LPCTSTR lpszPortNum);
DWORD WriteDataSerial(LPCVOID pdata, DWORD len);
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE]);
void CloseSerial(void);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
long LastError=ERROR_SUCCESS;
LastError=OpenSerial("COM1" ;
if(LastError!=TRUE)
{
MessageBox(NULL,TEXT("open failed" ,TEXT("error" ,MB_OK);
return LastError;
}
char cmd[]={0x02,0x03,0x06,0x37,0xFE,0xC7};
LastError=WriteDataSerial(cmd,6);
if(LastError!=ERROR_SUCCESS)
{
MessageBox(NULL,TEXT("write failed" ,TEXT("error" ,MB_OK);
return LastError;
}
char ReceiveBuf[128];
//memset(ReceiveBuf,0,sizeof(ReceiveBuf));
LastError=ReadDataSerial(ReceiveBuf);
if(LastError!=ERROR_SUCCESS)
{
MessageBox(NULL,TEXT("ReadDataSerial:read data failed" ,TEXT("Error" , MB_OK);
return LastError;
}
char *ptr;
//for(i=0;ReceiveBuf!='\0';i++)
ptr=ReceiveBuf;
printf("%02x",ptr);
getchar();
CloseSerial();
return TRUE;
}
BOOL OpenSerial(LPCTSTR lpszPortNum)
{
DCB dcb;
BOOL bSuccess;
hCom = CreateFile( lpszPortNum, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED,
NULL);
if (hCom ==INVALID_HANDLE_VALUE)
{
MessageBox (NULL, TEXT("OpenSerial():CreateFile() failed, invalid handle value!" , TEXT("Error" , MB_OK);
return FALSE;
}
bSuccess = GetCommState(hCom, &dcb);
if ( !bSuccess )
{
// Handle the error.
MessageBox (NULL, TEXT("OpenSerial(): GetCommState() failed!"), TEXT("Error"), MB_OK);
return FALSE;
}
dcb.BaudRate = CBR_9600 ;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY ;
dcb.StopBits = ONESTOPBIT ;
bSuccess = SetCommState(hCom, &dcb);
if ( ! bSuccess )
{
// Handle the error.
MessageBox (NULL, TEXT("OpenSerial(): SetCommState() failed!"), TEXT("Error"), MB_OK);
return FALSE;
}
//配置超时值
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(hCom, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 500;
CommTimeouts.ReadTotalTimeoutMultiplier = 10;
CommTimeouts.ReadTotalTimeoutConstant = 10;
CommTimeouts.WriteTotalTimeoutMultiplier = 50;
CommTimeouts.WriteTotalTimeoutConstant = 100;
if (!SetCommTimeouts(hCom, &CommTimeouts))
{
//L"不能设置超时参数";
return FALSE;
}
return TRUE ;
}
DWORD WriteDataSerial(LPCVOID pdata, DWORD len)
{
DWORD dwByteswritten;
DWORD result;
if(hCom==INVALID_HANDLE_VALUE ) return FALSE;
result=WriteFile(hCom,pdata,len,&dwByteswritten,NULL);
if (!result)
{
MessageBox (NULL, TEXT("WriteDataSerial(): WriteFile() failed\n"), TEXT("Error"), MB_OK);
return 0;
}
//CloseHandle(hCom);*/
return dwByteswritten;
}
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE])
{
int iCounter=0;
COMSTAT CommStat;
DWORD dwError,dwBytesRead=0;
DWORD bReadStatus;
if(hCom==INVALID_HANDLE_VALUE) return FALSE;
ClearCommError(hCom,&dwError,&CommStat);
bReadStatus=ReadFile(hCom, ReceiveBuf, dwBytesRead, &dwBytesRead, NULL);
if(dwBytesRead>;0)
{
ReceiveBuf[iCounter++]=dwBytesRead;
if(iCounter == BUFFER_SIZE)
{
//L"接收缓冲区已满";
MessageBox (NULL, TEXT("Error ReadDataSerial(): buffer full!\n"), TEXT("Error"), MB_OK);
return 0;
}
}
if(!bReadStatus)
{
//MessageBox(NULL,TEXT("read failed"),TEXT("error"),MB_OK);
return 0;
}
return dwBytesRead;
}
void CloseSerial(void)
{
CloseHandle(hCom);
} |
|