線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4866
推到 Plurk!
推到 Facebook!

RS 232 WriteFile

尚未結案
PHILL1031
一般會員


發表:1
回覆:0
積分:0
註冊:2009-09-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-24 11:49:43 IP:124.11.xxx.xxx 訂閱
以下 是小弟  做的跟RS232 溝通的程式碼  第一部分是 連線COM1 的部份  第二部份是SEND 字的部份  
那想請問的是 目前 COM1連結的部份 OK 那不知道為什麼資料一直寫不進去 會回傳WriteFile Fail !
想請教一下各位前輩 謝謝 第一次發文 有什麼不正確的地方請指正 謝謝
[code cpp]
void Crs232test5Dlg::OnBnClickedButtonConnect()
{
// Open Com1 port
HANDLE hCom;
DCB dcb;
COMMTIMEOUTS cto;
BOOL fSuccess;
int ClickEdit01St=0;
int ClickEdit01=0;
hCom = CreateFile( TEXT("COM1:"),
GENERIC_READ|GENERIC_WRITE ,
0,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if(hCom == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Com1 not Open!"),MB_OK);
}
else
{
AfxMessageBox(_T("Com1 Open!"),MB_OK);
dcb.DCBlength = sizeof(DCB);
fSuccess = GetCommState (hCom, &dcb);
if(!fSuccess)
{
AfxMessageBox(_T("GetCommState Fail !"),MB_OK);
dcb.BaudRate = CBR_19200; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hCom,&dcb);
}
if(!fSuccess)
{
AfxMessageBox(_T("SetCommState Fail !"),MB_OK);
cto.ReadIntervalTimeout = 0;
cto.ReadTotalTimeoutMultiplier = 0;
cto.ReadTotalTimeoutConstant = 500;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 500;
fSuccess = SetCommTimeouts(hCom,&cto);
}
if(!fSuccess)
{
AfxMessageBox(_T("SetCommTimeouts Fail !"),MB_OK);
}
}

void Crs232test5Dlg::OnBnClickedButtonSend()
{
char* szWriteText="H";
int fSuccess;
HANDLE hCom;
DWORD cWriteBytes ;
fSuccess = WriteFile (hCom, &szWriteText,2, &cWriteBytes, 0);
if(!fSuccess)
AfxMessageBox(_T("WriteFile Fail !"),MB_OK);
CloseHandle(hCom);
}
[/code]

ic.yang
一般會員


發表:0
回覆:1
積分:0
註冊:2009-12-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-01-28 11:37:10 IP:211.20.xxx.xxx 訂閱
用 TransmitCommChar(hFile, 'f'); 取代 WriteFile(...) 是一個解法,至於WriteFile(...) 我也沒有試成功 ><
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-01-28 16:59:32 IP:210.64.xxx.xxx 訂閱
若open有成功,writefile不進去,一般是…

你接在232上的裝置沒有ready,或者是timeout(意味著你很快的寫入,但裝置並沒有很快的回覆你,所以timout)

請把程式碼改成如下:

[code cpp]
if(!fSuccess)
{
int ret=GetLastError(); //在這裡中斷,查一下ret的值,然後查msdn線上說明
//AfxMessageBox(_T("WriteFile Fail !"),MB_OK);
CloseHandle(hCom);
}
[/code]

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-04-19 11:20:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!