多執行緒與底層等待問題

看板C_Sharp (C#)作者 (無言)時間7年前 (2018/03/13 13:19), 7年前編輯推噓4(405)
留言9則, 4人參與, 7年前最新討論串1/1
各位前輩好,小弟寫了一個程式,但是有控制4-5個RS232,因為有些視窗是需要反饋,因 此需要等待RS232的訊息,因為不知道什麼時候會回傳給電腦,所以都建立thread在後台 運作,但是問題來了,當我用comport.write送出訊息,我在thread那端持續監聽,看有 無回送,然後再將收下的訊息儲存後,判斷這個收到是正確或非正確,或是timeout,只是 這個用await task.delay好像也不是很精確的等待,如果用thread.sleep又會卡死程式, 更不用說while loop,因為後面程序要依照這個狀態進行動作,所以要很精確,一定要等 待到,但又不能讓畫面卡死,實在很苦惱。因為牽涉人身安全性的問題,所以一堆都是防 範機制,直流600V的電源切換與充電放電.不小心就燒機器了,先前沒做好,做實驗就燒 了幾十顆IGBT! 大家有什麼好建議嗎? 在底層的程序與上層的對應 因為特殊儀器,要假定板子會當機,儀表會損壞,若損壞則警報立即發出並中斷所有電源 與放電以避免人員傷害! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.96.198 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1520918363.A.394.html

03/13 16:29, 7年前 , 1F
接受可以寫在event裡面喔
03/13 16:29, 1F
你是說用data receive event trigger嗎?如果送訊息的當機了,就用timeout處理是嗎 ?@@

03/13 17:13, 7年前 , 2F
我是寫一個func裡面用while loop收資料 每次都Sleep一毫
03/13 17:13, 2F

03/13 17:13, 7年前 , 3F
03/13 17:13, 3F

03/13 17:14, 7年前 , 4F
然後在根據收到的資料發出event
03/13 17:14, 4F
如果對方被高電壓打昏了,送不出來怎麼辦,這個我再想想看 ※ 編輯: albert2942 (101.10.96.198), 03/13/2018 18:20:11

03/13 18:22, 7年前 , 5F
將com那邊的讀寫提至一個controller層,以便處理狀態與交
03/13 18:22, 5F

03/13 18:23, 7年前 , 6F
握,狀態複雜的話請善用狀態模式。UI層使用這個controller
03/13 18:23, 6F

, , 7F
而不直接控制com
03/13 18:24 感謝,我想一下架構如何修正後測試

03/13 19:52, 7年前 , 8F
發送命令後改變旗標,receive event檢查正確恢復旗標,
03/13 19:52, 8F
jamyang: 然後做一個timer檢查旗標這樣呢 03/13 19:52 多執行緒這樣有風險

03/14 13:42, 7年前 , 9F
硬體的保護跟安全規劃應該從硬體上下手吧? 怎麼會靠人機?
03/14 13:42, 9F
硬體也有保護都已經完全隔離設計,只是IC吃的是小電,才5V,當空氣或機板因為高電壓 的開啟或關閉產生電磁耦合過去的能量過大,MCU就會瞬間因為dv/dt造成瞬當,但是又不 足以啟動POR,導致狀態無法恢復,也因此需要時時確認,這顆MCU處的環境相當惡劣,105 度的環溫跟高電壓衝擊,人機是為了不同的東西測試,所以會打開看狀態跟資料庫建檔. 只是如果人機不知道它跟MCU失聯就會造成風險,因為板上也有高壓電容,當未放電完畢 都會對人體傷害,雖然我是可以直接將供給電源迅速關閉,卻無法將板子的開關打開放電 ,這也是一定要知道狀態,失聯就啟動重啟機制,因為重啓機制也是很複雜,所以要很注 意 ,現在這版本已經比創始設計好太多了,在高溫高壓下一定可以重啓成功,不會傷 害MCU ※ 編輯: albert2942 (101.10.96.198), 03/14/2018 16:10:15
文章代碼(AID): #1QfrzREK (C_Sharp)
文章代碼(AID): #1QfrzREK (C_Sharp)