作者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/cn.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