請問一下各位:
VB是靠事件驅動機制運行的,比如click后執行某個函式,想請教一下有沒有辦法令該函式
在不影響其經操作的情況下一直執行?就是讓程式在每個掃描周期都執行,如同像在DOS
下的BASIC編程一樣,也就是和PLC一樣的效果.
我現在有一塊I/O卡,要一直檢測外部的的急停開關的狀態,一直發現急停開關被按下,即
I/O卡讀回來的資料為0,則要馬上封鎖輸出。我有想過用timer用觸發事件,但這樣做太慢了。
我要馬上讀來I/O卡的電平變化。
請問有什么辦法?
uj5u.com熱心網友回復:
用多執行緒。
uj5u.com熱心網友回復:
難道你的“外部設備”,沒有主動通知的能力?應該不會這樣吧!
你要讀取外設的資訊,應該是有通訊機制的。
那么,就應該在“急停開關按下”時,通過設備的通訊機制給“程式”發資料指令。
“程式”會有接收到資料的處理請求訊息,在這個時候程式中進行相應處理。
uj5u.com熱心網友回復:
就一個I/O卡,沒有什么通訊機機制,VB怎么實作多執行緒?
uj5u.com熱心網友回復:
用Timer控制元件不行嗎?uj5u.com熱心網友回復:
奇葩的解決思路, 只會讓你鉆牛角尖.time控制元件差不多最高能達到10ms的精度, 如果你還覺得來不及, 那就不要嘗試用VB解決這個問題了.
一般而言, 實時系統你可以用C或C++之類的"低級語言"直接寫控制層, 然后再另外寫人機互動(但是這對于低級語言而言又太麻煩)
實際上PLC運行也不是靠什么工控機里面的程式來控制的, 它自帶存盤和處理器, 工控機只是用來給使用者控制引數或者處理后期資料用的.
你這個程式可以這樣: C寫個I/O卡的基本控制程式后臺運行, 然后再通過其他方式和VB程式通訊, 用戶只和VB程式打交道,
通訊方式非常多, 你甚至可以用網路協議從其他電腦來控制.
uj5u.com熱心網友回復:
那你就直接DO WHILE ** LOOP吧,不停的處理,這樣最快TIMER精度10毫秒,那你可以用SLEEP 1這樣就 只停一秒,再檢測
uj5u.com熱心網友回復:
那你就直接DO WHILE ** LOOP吧,不停的處理,這樣最快TIMER精度10毫秒,那你可以用SLEEP 1這樣就 只停一毫秒,再檢測
uj5u.com熱心網友回復:
設計思路有問題,timer精度大約在15ms,連上代碼時間大約在30ms以內,如果這樣的時間精度還是不夠的話,設備通訊上的時間也需要考慮進去了,來回一次通訊可能會占用5~10ms
真時間要求這么高,可能用VB或者用PC都不合適了。
uj5u.com熱心網友回復:
寫半天全沒了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/69906.html
標籤:VB基礎類
下一篇:VB下更新SQL資料庫遇到問題
