當我將 Interval 設為1時,原本因該是一秒要做1000次的計時才對,可是實際上卻只做到100次的計時。
程式碼如下:
Option Explicit
Dim TimeX As Double
Dim CountX As Long
Private Sub Command1_Click()
CountX = 0
TimeX = Timer + 1
Timer1.Interval = 1
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
Text1 = 1
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
CountX = CountX + 1
If Timer > TimeX Then
Debug.Print CountX
Timer1.Enabled = False
End If
End Sub
我目前在做自動控制的的程式,利用RS232來跟PLC作通訊。
我的程式要用 Timer 物件來做分配工作控制RS232來作通訊的動作,可是因為 TImer 計時的次數不夠,無法真正的一秒計時1000次,只能計時100次左右(上面範例測試的結果),結果通訊的效率太差太慢了。原本可以1秒內完成的工作變成要3-4秒才能完成(在Timer 中的動作多是簡單判斷以及陣列搬移)。後來我嘗試用Do..Loop迴圈來取代 Timer ,的確可以達到很好的效率,但是又發生一個問題,當我將滑鼠移到menu 選單時,會造成Do..Loop迴圈不動作了(Timer 就不會發生這種問題),也因此通訊中斷,所以這個方法也不是很好。
請問各位大大們,Timer 真的不能每秒計時1000次?或是有其他更好的替代物件?
有什麼方法可以讓Do..Loop迴圈不會因為滑鼠移動到menu選單上而停止動作?
請教曾經寫過自動控制程式的大大們是否有更好的控制方法?
PS.我去過水瓶天賞的網站看過,也寫過Mail給水大,但是都沒有回應,如果水大有看到此篇的話,能否請你指點一下,謝謝。
程式碼如下:
Option Explicit
Dim TimeX As Double
Dim CountX As Long
Private Sub Command1_Click()
CountX = 0
TimeX = Timer + 1
Timer1.Interval = 1
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
Text1 = 1
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
CountX = CountX + 1
If Timer > TimeX Then
Debug.Print CountX
Timer1.Enabled = False
End If
End Sub
我目前在做自動控制的的程式,利用RS232來跟PLC作通訊。
我的程式要用 Timer 物件來做分配工作控制RS232來作通訊的動作,可是因為 TImer 計時的次數不夠,無法真正的一秒計時1000次,只能計時100次左右(上面範例測試的結果),結果通訊的效率太差太慢了。原本可以1秒內完成的工作變成要3-4秒才能完成(在Timer 中的動作多是簡單判斷以及陣列搬移)。後來我嘗試用Do..Loop迴圈來取代 Timer ,的確可以達到很好的效率,但是又發生一個問題,當我將滑鼠移到menu 選單時,會造成Do..Loop迴圈不動作了(Timer 就不會發生這種問題),也因此通訊中斷,所以這個方法也不是很好。
請問各位大大們,Timer 真的不能每秒計時1000次?或是有其他更好的替代物件?
有什麼方法可以讓Do..Loop迴圈不會因為滑鼠移動到menu選單上而停止動作?
請教曾經寫過自動控制程式的大大們是否有更好的控制方法?
PS.我去過水瓶天賞的網站看過,也寫過Mail給水大,但是都沒有回應,如果水大有看到此篇的話,能否請你指點一下,謝謝。
文章標籤
全站熱搜

我沒收到...如果是用英文...先殺在說比較安全 可以在討論區po timer的最小設定單位與系統中斷有關,無法達到每秒1000次 解決方法加掛特殊的driver歐...研華與ni好像有賣 還有plc通訊需要那麼快嗎?plc的回覆時間應該有20msec 使用menu會暫時中斷...所以不要用...改用其他按鈕代替 使用do loop會使系統掛在do loop...是可以達到很好的控制 但其他的物件的變的不順 以你的方法用do loop menu改用button取代吧
感謝水大大的回應。 之所以加快控制的速度是因為必須控制的PLC有100~150台歐(之前只寫過控制25~50台,所以沒有太大問題發生) 如果速度不夠快的話,那.......問題就大了。 使用Button是不可能的,功能選項太多了。 再次感謝水大大的回應。 還請各路高手不吝指教!
我有想到一個方法那就是讓一個函式可以常駐執行而不會因為按menu而中斷執行,不知道這個方法是否可行?又該如何進行?
http://www.vbqa.com/discuss/vb.old/read.asp?id=11038 你看過這篇應該能明白 Timer 在使用時所要注意的事項
你不知有沒有看過我寫的rs-485部分 既然一個rs-232不夠用...多裝幾個 插一個卡分出16port就可分散很多時間了 ps:vb只提供16rs-232
to:水大大 我是用一個Rs232連接485,然後才來控制PLC
剛剛找到一個範例可以達到約每秒1000次(980~1020)的計時,是利用timeSetEvent 函式來做的,目前正在努力想辦法將他寫成物件中。 附上網址 http://www.applevb.com/art/timing.htm
建議使用多對多的rs-485來控制 16port rs-485 這樣速度會快很多.... 至少多了16倍
建議使用多對多的rs-485來控制 16port rs-485 這樣速度會快很多.... 至少多了16倍
感謝水大的建議,這樣的確變快了。