作者albert2942 (無言)
看板C_Sharp
標題多執行緒與底層等待問題
時間Tue Mar 13 13:19:21 2018
各位前輩好,小弟寫了一個程式,但是有控制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://webptt.com/m.aspx?n=bbs/C_Sharp/M.1520918363.A.394.html
1F:推 jamyang: 接受可以寫在event裡面喔03/13 16:29
你是說用data receive event trigger嗎?如果送訊息的當機了,就用timeout處理是嗎
?@@
2F:推 lightyen: 我是寫一個func裡面用while loop收資料 每次都Sleep一毫03/13 17:13
3F:→ lightyen: 秒03/13 17:13
4F:→ lightyen: 然後在根據收到的資料發出event03/13 17:14
如果對方被高電壓打昏了,送不出來怎麼辦,這個我再想想看
※ 編輯: albert2942 (101.10.96.198), 03/13/2018 18:20:11
5F:推 Litfal: 將com那邊的讀寫提至一個controller層,以便處理狀態與交 03/13 18:22
6F:→ Litfal: 握,狀態複雜的話請善用狀態模式。UI層使用這個controller 03/13 18:23
7F:→ Litfal: 而不直接控制com
03/13 18:24
感謝,我想一下架構如何修正後測試
8F:推 jamyang: 發送命令後改變旗標,receive event檢查正確恢復旗標,03/13 19:52
→ jamyang: 然後做一個timer檢查旗標這樣呢
03/13 19:52
多執行緒這樣有風險
9F:→ smmoon: 硬體的保護跟安全規劃應該從硬體上下手吧? 怎麼會靠人機?03/14 13:42
硬體也有保護都已經完全隔離設計,只是IC吃的是小電,才5V,當空氣或機板因為高電壓
的開啟或關閉產生電磁耦合過去的能量過大,MCU就會瞬間因為dv/dt造成瞬當,但是又不
足以啟動POR,導致狀態無法恢復,也因此需要時時確認,這顆MCU處的環境相當惡劣,105
度的環溫跟高電壓衝擊,人機是為了不同的東西測試,所以會打開看狀態跟資料庫建檔.
只是如果人機不知道它跟MCU失聯就會造成風險,因為板上也有高壓電容,當未放電完畢
都會對人體傷害,雖然我是可以直接將供給電源迅速關閉,卻無法將板子的開關打開放電
,這也是一定要知道狀態,失聯就啟動重啟機制,因為重啓機制也是很複雜,所以要很注
意 ,現在這版本已經比創始設計好太多了,在高溫高壓下一定可以重啓成功,不會傷
害MCU
※ 編輯: albert2942 (101.10.96.198), 03/14/2018 16:10:15