[問題] RS485通訊排隊的問題...

作者: laertes (伊薩凱<L>)   2015-05-28 22:37:45
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
BCB
問題(Question):
小弟我使用BCB/VCL來寫RS485的通訊,使設備動作
使用THREAD來寫RS485的命令輸出。每次命令間隔為20ms,
如果把所有的情況都排入,會浪費沒有被觸發的條件時間像下程式碼中
像是manual==false && auto==true時,count8,10,12的時間會被浪費掉
或只有semiauto==true時,count8,10,12,14,16,18的時間會被浪費掉
要怎麼寫才可以把只有被觸發的條件時間向前排呢?
像是 manual==false && auto==true時,
auto條件內,各設備的命時間cout14,16,18
可以向前排隊變成cout8,10,12
因為其實需要被觸發的條件很多,設備也很多,
要怎麼寫才可以簡單的讓只有被觸發的命令,時間向前且順序排好發出呢!?
程式碼(Code):(請善用置底文網頁, 記得排版)
void __fastcall Execute(void)
while (!Terminated)
{
int count=0;
RS485Command();
Sleep(10); //10 ms
}
void __fastcall RS485Command()
{
if (count==0) 設備A() //polling 設備的反應時間約15ms
if (count==2) 設備B() //polling
if (count==4) 設備C() //polling
if (count==6) 設備D() //polling
if (manual==true) { //按鈕觸發且時間不定
if (count==8) 設備A() //吃飯
if (count==10) 設備B() //睡覺
if (count==12) 設備C() //打東東(此函數C()"內"有manual=false;)
}
if (auto==true) { //按鈕觸發且時間不定
if (count==14) 設備B() //吃飯
if (count==16) 設備C() //睡覺
if (count==18) 設備D() //打東東(此函數D()"內"有auto=false;)
}
if (semiauto==true) { //按鈕觸發且時間不定
if (count==20) 設備A() //打東東
if (count==22) 設備B() //吃飯
if (count==24) 設備C() //睡覺
if (count==26) 設備E() //打東東(此函數E()"內"有semiauto=false;)
}
count++;
if (count>50) count=0;
}
補充說明(Supplement):
感謝回答
作者: heyboo4862   2015-05-29 02:11:00
狀態機
作者: overhead (overhead)   2015-05-29 12:45:00
狀態機+1 而且你狀態直接用define或甚麼命名 別用count
作者: laertes (伊薩凱<L>)   2015-05-29 12:58:00
OK...感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com