全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2459
推到 Plurk!
推到 Facebook!

【問題】RS232 command傳不到儀器

尚未結案
niveacsy
一般會員


發表:1
回覆:2
積分:0
註冊:2005-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-08 19:20:49 IP:61.218.xxx.xxx 未訂閱
各位大大你們好:     小弟我碰到一個問題, BCB程式寫好可是執行後command一直送不過去, 不知道哪裡出了問題, 以下是我的程式內容: //-------------------------------------------------------------------    #include  #pragma hdrstop #include "RS.h" //------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HANDLE RS232; //------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //------------------------------------------------------------------- void __fastcall TForm1::ButtonTestClick(TObject *Sender) { RS232 = CreateFile("Com2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(RS232) { ShowMessage("Connect Success!"); } else { ShowMessage("Connect Fail!"); } } //------------------------------------------------------------------- void __fastcall TForm1::ButtonCloseClick(TObject *Sender) { if(RS232) { CloseHandle(RS232); ShowMessage("Disconnect!"); Close(); } else { ShowMessage("No Connect!!"); Close(); } } //------------------------------------------------------------------- void __fastcall TForm1::ButtonSendClick(TObject *Sender) { if((RS232) && (Editcomm->Text != "")) { DCB dcb; ZeroMemory(&dcb, sizeof(dcb)); dcb.DCBlength = sizeof(dcb); dcb.BaudRate = 38400; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if(SetCommState(RS232, &dcb)) { DWORD ByteCount; WriteFile(RS232, Editcomm->Text.c_str(), strlen(Editcomm->Text.c_str()), &ByteCount, NULL); } else { ShowMessage("Connect Error!"); } Editcomm->Text = ""; } else { ShowMessage("Error!!"); } } //------------------------------------------------------------------- 他要求command為ASCII格式, 且後面要加上CR LF 可是我將command用STOP CRLF(Editcomm->Text)傳過去都沒有反應 不知道哪裡有問題
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-08 23:29:41 IP:218.168.xxx.xxx 未訂閱
  
試試      
String str="STOP" '\x13' '\x10';
char *SendData=str.c_str();
DWORD lrc=0;
DWORD BS=str.Length();
WriteFile(Rs232,SendData,BS,&lrc,NULL);  
//新手上路,請多包涵。
/*青青子矜,悠悠我心。但為君故,沈吟至今。*/
niveacsy
一般會員


發表:1
回覆:2
積分:0
註冊:2005-08-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-09 11:55:25 IP:61.218.xxx.xxx 未訂閱
今天又試了一下, 發現還是無法送Command... 於是我用VB直接用MSComm做, 還是沒辦法傳送指令. 因此我將VB這程式送人另外的Command去控制另一台儀器卻順利通過了. 接著改回BCB來做也順利傳送了...可是這另一儀器本身有附約略的sample程式 所以不知道是否我指令在送到原本那台儀器時方式送錯, 造成無法控制 ------- Command input in ASCII code Each Command has a command name, parameters, and a delimiter (delimiter = CR LF) command name must be in upper case command and parameter and delimiter用space分隔 Command sample: STOP delimiter (這個command沒有parameters) ------- 在這樣的command下我該如何寫入儀器呢? 發表人 - niveacsy 於 2005/08/09 11:56:39
niveacsy
一般會員


發表:1
回覆:2
積分:0
註冊:2005-08-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-09 16:57:25 IP:61.219.xxx.xxx 未訂閱
終於可以傳送command了... 原因出在於RS232的線... 長像一模一樣, 實際上內函完全不同阿... 對於我這初學者來說, 真的是上了一門很重要的課... 不過還是謝謝各位, 也謝謝FM大大的建議...^^
系統時間:2024-05-03 15:07:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!