討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 想要資料分析就學Python 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
VB是否可讓兩個Do While迴圈執行
更改我的閱讀文章字型大小
作者 : pengymarch(Pengy)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/6/25 下午 07:11:12
各位大大們,目前小弟在公司使用VB6設計機台程式,為使機台產品流道(IO控制馬達輸送皮帶)與手臂做到同動,發現有一個問題,百思不解....
Do While迴圈內加入DoEvents和Sleep指令可同時讓Timer動作
但使用兩個按鈕分別用Do While迴圈計數,先按下第一個按鈕,已經開始計數了,此時按下第2個按鈕,會變成第1個迴圈停止計數了,而當第2個迴圈計數完畢後,第1個迴圈才會接下去計數...
這樣會變成當程式偵測機台SENSOR作動時,就無法執行其他的動作....
可否呼叫API讓兩件事情同時執行??
又或者VB6做不到需改用VB.Net??....請大大們給個建議...
作者 : jawa560(Snaking) Java Script優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1154 | 人氣 32593 | 評價 4630 | 評價/貼文 4.01 | 送出評價 168 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/6/25 下午 11:01:43
你的敘述有點不清楚,你得意思是說,你用Do While 迴圈來計數嗎?
如果是計時,那麼就不應該用到 Do While,只用 Timer 就可以!

我猜想一下你的用途, 你可能是說,當 Sensor 觸發後,你要讓 Conveyor 跑個幾秒,然後停止馬達,接著觸發機械手臂做動, 然後隔個幾秒,再度啟動Conveyor,是嗎?

如果是以上情境,只要用到 Timer 就可以做到!

作者 : pengymarch(Pengy)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/6/28 上午 09:35:48
>我猜想一下你的用途, 你可能是說,當 Sensor 觸發後,你要讓 Conveyor 跑個幾秒,然後停止馬達,接著觸發機械手臂做動, 然後隔個幾秒,再度啟動Conveyor,是嗎?
>如果是以上情境,只要用到 Timer 就可以做到!

假設需同時偵測兩個SENSOR....
Private Sub Command1_Click()
   TimerConveyor1.Enabled = True
   TimerConveyor2.Enabled = True
End Sub
Private Sub TimerIO_Timer()
  Sensor1....
  Sensor2....
     .
End Sub
Private Sub TimerConveyor1_Timer()
  Do
    DoEvents
  Loop Until Sensor1=ON
  Conveyor1=ON
End Sub
Private Sub TimerConveyor2_Timer()
  Do
    DoEvents
  Loop Until Sensor2=ON
  Conveyor2=ON
End Sub
'-----------------------------------------
如以上範例無法做到同時偵測SENSOR,程式動作順序:必先偵測完SENSOR2→Conveyor2=ON→再偵測SENSOR1→Conveyor1=ON
若此時SENSOR1先被觸發到的話,程式並不會將Conveyor1啟動,會執行完SENSOR2=ON→Conveyor2=ON再執行Conveyor1

以下範例可證實Do While迴圈為最高優先權,但其特形是後令壓前令...
Private Sub Timer1_Timer()
  Label1.Caption = Label1.Caption + 1
End Sub
Private Sub Timer3_Timer()
  Do
  DoEvents
  Loop Until Label1.Caption = 30
  Label4.Caption = "222"
End Sub
Private Sub Timer4_Timer()
  Do
  DoEvents
  Loop Until Label1.Caption = 40
  Label5.Caption = "333"
End Sub
不知有否其他辦法可做到同時偵測2個SENSOR動作(意即不知哪個SENSOR會先動作)

還是VB6單執行緒無法做到??
作者 : pengymarch(Pengy)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/6/28 上午 09:35:58
>我猜想一下你的用途, 你可能是說,當 Sensor 觸發後,你要讓 Conveyor 跑個幾秒,然後停止馬達,接著觸發機械手臂做動, 然後隔個幾秒,再度啟動Conveyor,是嗎?
>如果是以上情境,只要用到 Timer 就可以做到!

假設需同時偵測兩個SENSOR....
Private Sub Command1_Click()
   TimerConveyor1.Enabled = True
   TimerConveyor2.Enabled = True
End Sub
Private Sub TimerIO_Timer()
  Sensor1....
  Sensor2....
     .
End Sub
Private Sub TimerConveyor1_Timer()
  Do
    DoEvents
  Loop Until Sensor1=ON
  Conveyor1=ON
End Sub
Private Sub TimerConveyor2_Timer()
  Do
    DoEvents
  Loop Until Sensor2=ON
  Conveyor2=ON
End Sub
'-----------------------------------------
如以上範例無法做到同時偵測SENSOR,程式動作順序:必先偵測完SENSOR2→Conveyor2=ON→再偵測SENSOR1→Conveyor1=ON
若此時SENSOR1先被觸發到的話,程式並不會將Conveyor1啟動,會執行完SENSOR2=ON→Conveyor2=ON再執行Conveyor1

以下範例可證實Do While迴圈為最高優先權,但其特形是後令壓前令...
Private Sub Timer1_Timer()
  Label1.Caption = Label1.Caption + 1
End Sub
Private Sub Timer3_Timer()
  Do
  DoEvents
  Loop Until Label1.Caption = 30
  Label4.Caption = "222"
End Sub
Private Sub Timer4_Timer()
  Do
  DoEvents
  Loop Until Label1.Caption = 40
  Label5.Caption = "333"
End Sub
不知有否其他辦法可做到同時偵測2個SENSOR動作(意即不知哪個SENSOR會先動作)

還是VB6單執行緒無法做到??
作者 : kib72377(史努比) Visual Basic卓越專家Assembly優秀好手Access頂尖高手貼文超過1000則
[ 貼文 1455 | 人氣 1891 | 評價 8600 | 評價/貼文 5.91 | 送出評價 31 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/6/28 下午 12:16:22
While(1) { 迴圈1個
If a Then c 判別式1
If b Then d 判別式2
If ooxx Then break 中斷迴圈條件
...Do something
....Do something
....Do something
}

這樣就不會變成2個迴圈,結果卻失控了.
作者 : jawa560(Snaking) Java Script優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1154 | 人氣 32593 | 評價 4630 | 評價/貼文 4.01 | 送出評價 168 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/6/28 下午 02:06:53
用四個Timer 不就解決了嗎?
如果是為了很密集的狀態監控, 那就把 Timer 的 Interval 設小一點就好了!
 板主 : 徵求中
 > VB Script - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - VB Script - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
VB Script
1 羅蘋 270 
2 foolface 170 
3 坤哥 80 
4 nono 80 
5 阿戊 70 
6 sorry 60 
7 Kevin 50 
8 紫曰 40 
9 玩家 40 
10 黑天黑地 40 
VB Script
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625