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

BCB 對RS232控制

答題得分者是:GrandRURU
darppp
一般會員


發表:3
回覆:6
積分:1
註冊:2009-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-21 14:02:06 IP:122.116.xxx.xxx 訂閱
我是BCB新手
最近看書與網路寫了對RS232控制程式
測試過全部都可以執行
傳值與資料都OK
但是卻不能同時下2筆以上資料
這是正常的嗎??還是說有方法可以解決

舉我的例子來說
我有個A按鈕
丟一個指令給RS232對機器下動作~此時機器也會丟一個回傳確認指令

另外我還有個B按鈕
這是要希望機器能狀態回報用的
所以要一值丟命令讓機器一值回報現在狀態

問題在我這2個按鈕個別使用或是輪流使用都OK
但是先使用B產生無限迴圈傳值後
再按A就會當掉

有沒有辦法讓按下A鈕之後B自動中斷
再A執行完後B自動繼續呢???

PS.機器端是現成品無法對其軟體作修改


不好意思~我真的是超新手~~發問不明確的地方請多多指教


GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-22 08:30:24 IP:203.75.xxx.xxx 未訂閱
這個情況應該是buffer滿了造成
要不要試試看用timer來偵測buffer有沒有資料(有資料就接收)
這樣應該可以解決


===================引 用 darppp 文 章===================
我是BCB新手
最近看書與網路寫了對RS232控制程式
測試過全部都可以執行
傳值與資料都OK
但是卻不能同時下2筆以上資料
這是正常的嗎??還是說有方法可以解決

舉我的例子來說
我有個A按鈕
丟一個指令給RS232對機器下動作~此時機器也會丟一個回傳確認指令

另外我還有個B按鈕
這是要希望機器能狀態回報用的
所以要一值丟命令讓機器一值回報現在狀態

問題在我這2個按鈕個別使用或是輪流使用都OK
但是先使用B產生無限迴圈傳值後
再按A就會當掉

有沒有辦法讓按下A鈕之後B自動中斷
再A執行完後B自動繼續呢???

PS.機器端是現成品無法對其軟體作修改


不好意思~我真的是超新手~~發問不明確的地方請多多指教

darppp
一般會員


發表:3
回覆:6
積分:1
註冊:2009-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-22 10:46:48 IP:122.116.xxx.xxx 訂閱
感謝大大的回答

我再說明清楚一點
B動作其實是有觸發紐跟停止鈕
觸發後~無限次的傳送資料給RS232
即使其他按鈕也再傳送資料
B的動作可以延遲但是不能停住
除非按下B動作的停止鈕

其他的按鈕很多不只A一個
BUFFER一值都有資料
因為B按鈕的動作就是希望機器那邊一值狀態回報
以得到最新的訊息

我不知道我的想法對不對
是不是應該只要除了B的(觸發&停止)紐以外的按鈕動作
B的功能就被中斷等待其他動作結束後B的功能自動復歸
但是這樣怎麼寫阿??

表達不好的地方還請大大們多多糾正指教

感恩
===================引 用 GrandRURU 文 章===================
這個情況應該是buffer滿了造成
要不要試試看用timer來偵測buffer有沒有資料(有資料就接收)
這樣應該可以解決


編輯記錄
darppp 重新編輯於 2009-04-22 10:47:16, 註解 無‧
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-22 11:49:20 IP:203.75.xxx.xxx 未訂閱
利用
Application->ProcessMessages();
或許可以解決你的問題
darppp
一般會員


發表:3
回覆:6
積分:1
註冊:2009-04-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-22 13:00:03 IP:122.116.xxx.xxx 訂閱
不太懂您的意思??
我希望能不停的接收動B動作的回傳值
但是要兼顧到其他按鈕對機器的指令可以隨時做變動
小弟才疏學淺!!
可以再多指導一點嗎??
===================引 用 GrandRURU 文 章===================
利用
Application->ProcessMessages();
或許可以解決你的問題
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-22 13:14:49 IP:60.249.xxx.xxx 未訂閱
請問一下:  

B產生無限迴圈傳值 <--你是用 while 去做無限迴圈嗎?? 如果是話,

把它改成 timer ,Interval = 300 以上 ,我想應該不用太快吧,也許知道狀態最大容許時間一秒以上呢!!

timer 也可以設一個 b_flag ,當 b_flag = true 就一直執行(問狀態),

當按下A鍵,或其它C、D、E .....鍵時, 記住 b_flag 的狀態。
bool flagTemp = b_flag , b_flag = false; (先暫停 問狀態)。

當 A 鍵......內的程式跑完了,
在設為 b_flag = flagTemp

試看看!!!

===================引 用 darppp 文 章===================
我是BCB新手
最近看書與網路寫了對RS232控制程式
測試過全部都可以執行
傳值與資料都OK
但是卻不能同時下2筆以上資料
這是正常的嗎??還是說有方法可以解決

舉我的例子來說
我有個A按鈕
丟一個指令給RS232對機器下動作~此時機器也會丟一個回傳確認指令

另外我還有個B按鈕
這是要希望機器能狀態回報用的
所以要一值丟命令讓機器一值回報現在狀態

問題在我這2個按鈕個別使用或是輪流使用都OK
但是先使用B產生無限迴圈傳值後
再按A就會當掉

有沒有辦法讓按下A鈕之後B自動中斷
再A執行完後B自動繼續呢???

PS.機器端是現成品無法對其軟體作修改


不好意思~我真的是超新手~~發問不明確的地方請多多指教


編輯記錄
2007 重新編輯於 2009-04-22 13:17:22, 註解 無‧
2007 重新編輯於 2009-04-22 13:18:16, 註解 無‧
2007 重新編輯於 2009-04-22 13:19:32, 註解 無‧
darppp
一般會員


發表:3
回覆:6
積分:1
註冊:2009-04-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-22 13:37:14 IP:122.116.xxx.xxx 訂閱
><....
我太嫩了
用語法太簡單了
TIMER沒用過
我貼一下我的語法
//A按鈕
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Send(Edit1->Text);
//A按鈕

//B按鈕

void __fastcall TForm1::Shape1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
do {
Send("RE");
String Q=Buf;
String Q1=Q.SubString(3,10);
Edit4->Text=Q1;
Sleep(1000);
}
while(1);
}
//B按鈕

請高手指導一下
若小弟能把程式弄懂
必定發範例文供大家參考~~
===================引 用 2007 文 章===================
請問一下:

B產生無限迴圈傳值 <--你是用 while 去做無限迴圈嗎?? 如果是話,

把它改成 timer ,Interval = 300 以上 ,我想應該不用太快吧,也許知道狀態最大容許時間一秒以上呢!!

timer 也可以設一個 b_flag ,當 b_flag = true 就一直執行(問狀態),

當按下A鍵,或其它C、D、E .....鍵時, 記住 b_flag 的狀態。
bool flagTemp = b_flag , b_flag = false; (先暫停 問狀態)。

當 A 鍵......內的程式跑完了,
在設為 b_flag = flagTemp

試看看!!!

===================引 用 darppp 文 章===================
我是BCB新手
最近看書與網路寫了對RS232控制程式
測試過全部都可以執行
傳值與資料都OK
但是卻不能同時下2筆以上資料
這是正常的嗎??還是說有方法可以解決

舉我的例子來說
我有個A按鈕
丟一個指令給RS232對機器下動作~此時機器也會丟一個回傳確認指令

另外我還有個B按鈕
這是要希望機器能狀態回報用的
所以要一值丟命令讓機器一值回報現在狀態

問題在我這2個按鈕個別使用或是輪流使用都OK
但是先使用B產生無限迴圈傳值後
再按A就會當掉

有沒有辦法讓按下A鈕之後B自動中斷
再A執行完後B自動繼續呢???

PS.機器端是現成品無法對其軟體作修改


不好意思~我真的是超新手~~發問不明確的地方請多多指教
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-22 14:19:58 IP:60.249.xxx.xxx 未訂閱
可以看一下你的 Send 怎麼寫的嗎??

Send("RE");
String Q=Buf;

===================引 用 darppp 文 章===================
><....
我太嫩了
用語法太簡單了
TIMER沒用過
我貼一下我的語法
//A按鈕
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Send(Edit1->Text);
//A按鈕

//B按鈕

void __fastcall TForm1::Shape1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
do {
Send("RE");
String Q=Buf;
String Q1=Q.SubString(3,10);
Edit4->Text=Q1;
Sleep(1000);
}
while(1);
}
//B按鈕

請高手指導一下
若小弟能把程式弄懂
必定發範例文供大家參考~~
===================引 用 2007 文 章===================
系統時間:2017-10-20 0:41:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!