[问题] 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