thanks. i know HP6365 can interface with RS232 pass 2 pin TX and RX similar PC. and it using 5V. i write with EVC++ :
//////////////////////////////////////////////////////////////////////////
BOOL CSerialCom::OpenPort()
{
// thuc hien mo cong port voi com3:
//portname= "//./" +portname;
HANDLE hComm = CreateFile(TEXT("COM3:"),
GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if(hComm == INVALID_HANDLE_VALUE)
{
MessageBox(TEXT("CHUA KET NOI THANH CONG???"), TEXT("Error!"), MB_OK);
return false;
}
else
{
MessageBox(TEXT("Ket noi thanh cong"), TEXT("Bat dau thuc hien dieu khien"), MB_OK);
return true;
}
}
///////////////////////////////////////////////////////////////////////////
//ConfigurePort
//////////////////////////////////////////////////////////////////////////
BOOL CSerialCom::ConfigurePort(DWORD BaudRate, BYTE ByteSize,
DWORD Parity, BYTE fParity, BYTE StopBits)
{
////////////////////////////////////////
//structure containing the device configuration settings when the function returns.
//If the call is successful, the function returns a TRUE value
////////////////////////////////////////
COMMPROP commProp;
memset(&commProp, 0, sizeof(COMMPROP));
GetCommProperties(hComm, &commProp);
//////////////////////////////////////////
//DCB m_dcb;
memset(&m_dcb, 0, sizeof(DCB));
/////////////////////////////////////////
BOOL fSuccess = FALSE;
memset(&m_dcb, 0, sizeof(DCB));
// The the current communication port settings
if(GetCommState(hComm, &m_dcb)!=0)
{
MessageBox(TEXT("Could not GetCommState settings"),TEXT("Error!"), MB_OK);
}
// Can we change the settings? Let's check the commProp
else
{
if(commProp.dwSettableParams && SP_BAUD)
{
m_dcb.BaudRate = BAUD_9600;
m_dcb.Parity = 0;
m_dcb.fParity = PARITY_NONE;
m_dcb.StopBits = ONESTOPBIT;
m_dcb.ByteSize = 6;
fSuccess = SetCommState(hComm, &m_dcb);
MessageBox(TEXT("Success GetCommState settings"),TEXT("Error!"), MB_OK);
}
return true;
}
if(fSuccess!=0)
{
MessageBox(TEXT("Could not modify the port's settings"),TEXT("Error!"), MB_OK);
return false;
}
else
{
MessageBox(TEXT("thanh cong"),TEXT("thanh cong"), MB_OK);
return true;
}
/*
if((m_bPortReady = GetCommState(hComm, &m_dcb))==0)
{
MessageBox(TEXT("GetCommState Error"),TEXT("Error"),MB_OK+MB_ICONERROR);
CloseHandle(hComm);
return false;
}
else
{
m_bPortReady = SetCommState(hComm, &m_dcb);
if(m_bPortReady ==0)
{
MessageBox(TEXT("Could not modify the port's settings"),TEXT("Error!"), MB_OK);
return false;
}
else
{
m_dcb.BaudRate = BAUD_9600;
m_dcb.fParity = PARITY_NONE;
m_dcb.StopBits = ONESTOPBIT;
m_dcb.ByteSize = 8;
return true;
}
} */
/*
m_dcb.BaudRate = BAUD_110;
m_dcb.fParity = PARITY_NONE;
m_dcb.StopBits = ONESTOPBIT;
m_dcb.ByteSize = 8;
m_dcb.Parity = 0;*/
/*
m_dcb.fBinary=TRUE;
m_dcb.fDsrSensitivity=false;
m_dcb.fOutX=false;
m_dcb.fInX=false;
m_dcb.fNull=false;
m_dcb.fAbortOnError=TRUE;
m_dcb.fOutxCtsFlow=FALSE;
m_dcb.fOutxDsrFlow=false;
//m_dcb.fDtrControl=DTR_CONTROL_DISABLE;
m_dcb.fDsrSensitivity=false;
//m_dcb.fRtsControl=RTS_CONTROL_DISABLE;
m_dcb.fOutxCtsFlow=false;
m_dcb.fOutxCtsFlow=false;*/
/*if((m_bPortReady = GetCommState(hComm, &m_dcb))==0){
MessageBox(TEXT("GetCommState Error"),TEXT("Error"),MB_OK+MB_ICONERROR);
CloseHandle(hComm);
return false;}
if((SetCommState(hComm, &m_dcb)) ==0){
MessageBox(TEXT("SetCommState Error"),TEXT("Error"),MB_OK+MB_ICONERROR);
CloseHandle(hComm);
return false;}
MessageBox(TEXT("DAT THANH CONG SetCommState GetCommState"),TEXT("thanh cong"),MB_OK+MB_ICONERROR);
return true;*/
}
//////////////////////////////////////////////////////////////////////////
// Serial Timeouts
// Before we look at how to read and write data from and to a serial device,
// it is important that your application set the communication timeout values after it opens the port
//////////////////////////////////////////////////////////////////////////
BOOL CSerialCom::SetCommunicationTimeouts(DWORD ReadIntervalTimeout, DWORD ReadTotalTimeoutMultiplier,
DWORD ReadTotalTimeoutConstant, DWORD WriteTotalTimeoutMultiplier,
DWORD WriteTotalTimeoutConstant)
{
COMMTIMEOUTS m_CommTimeouts;
memset(&m_CommTimeouts, 0, sizeof(COMMTIMEOUTS));
m_CommTimeouts.ReadIntervalTimeout =MAXDWORD;
m_CommTimeouts.ReadTotalTimeoutConstant =10;
m_CommTimeouts.ReadTotalTimeoutMultiplier =10;
m_CommTimeouts.WriteTotalTimeoutConstant = 20;
m_CommTimeouts.WriteTotalTimeoutMultiplier =30;
//The result of a relational expression is 1 if the tested relationship is true and 0 if it is false. The type of the result is int.
if((m_bPortReady = GetCommTimeouts (hComm, &m_CommTimeouts))!=0)
return false;
//////////////////////////////////////////////////////
m_bPortReady = SetCommTimeouts (hComm, &m_CommTimeouts);
if(m_bPortReady !=0)
{
MessageBox(TEXT("StCommTimeouts function failed"),TEXT("Com Port Error"),MB_OK+MB_ICONERROR);
CloseHandle(hComm);
return false;
}
return true;
MessageBox(TEXT("StCommTimeouts function success"),TEXT("Com Port success"),MB_OK+MB_ICONERROR);
}
//////////////////////////////////////////////////////////////////////////
// Thuc hien truyen bang ham writefile();
//////////////////////////////////////////////////////////////////////////
BOOL CSerialCom::Write(CString write)
{
DWORD BytesWritten=0;
// = 0 fale = 1 true
if(WriteFile(hComm,&write,100,&BytesWritten,NULL)!=0)
{
if(GetLastError()!=ERROR_IO_PENDING)
{
MessageBox(TEXT("WriteFile failed, but it isn't delayed. Report error and abort."),TEXT("Loi"),MB_OK);
return false;
}
}
else
{ // tiep tuc//////////////////////////////////////////////////////////////////////////
//// Write operation completed successfully.
for (int i=0;1<100;i++)
{
WriteFile(hComm,&write,100,&BytesWritten,NULL);
}
MessageBox(TEXT("Da gui duoc duoc du lieu"),TEXT("Thanh cong"),MB_OK);
return true;
}
return true;
}
//////////////////////////////////////////////////////////////////////////
// Thuc hien nhan bang ham Readfile();
//////////////////////////////////////////////////////////////////////////
BOOL CSerialCom::Read(CString &resp)
{
// kiem tra
//You can make a thread wait on serial driver events by means of the following three functions
//
DWORD dwMask;
// Set mask and wait.
GetCommMask (hComm,&dwMask);
if(GetCommMask (hComm, &dwMask))
{ //////////////////////////////////////////////////////////////////////////
if(m_bPortReady=SetCommMask (hComm, EV_RXCHAR | EV_ERR)!=0)
{
MessageBox(TEXT("loi SetCommMask"),TEXT("Loi"),MB_OK);
return false;
}
else
{
if (WaitCommEvent (hComm, &dwMask, 0))
{
// Use the flags returned in dwMask to determine the reason
// for returning
switch (dwMask)
{
case EV_RXCHAR:
{
//Read character.
////////////////////////////////////////////
CString read;
resp="";
DWORD BytesTransferred=0;
if(!ReadFile(hComm, &read, 100, &BytesTransferred, NULL))
{
return false;
}
else
{ // thah cong
if (BytesTransferred != 1)
{
ReadFile(hComm, &read, 100, &BytesTransferred, NULL);
resp=read;
MessageBox(TEXT("Da nhan thanh cong"),TEXT("Truyen thanh cong"),MB_OK);
return false;
}
else
{
MessageBox(TEXT("error !!!!"),TEXT("Error"),MB_OK);
return true;
}
}
break;
}
case EV_ERR:
{
// Process error.
MessageBox(TEXT("Khong viet duoc du lieu"),TEXT("Loi viet"),MB_OK);
break;
}
}
return true;
}
return true;
}
}
return true;
}
//////////////////////////////////////////////////////////////////////////
// Close Port//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Close Port//
//////////////////////////////////////////////////////////////////////////
void CSerialCom::ClosePort()
{
if(hComm)
CloseHandle(hComm);
return;
}