我在这个网站上遇到了一个关于实时编程的讨论,这似乎有一些很好的见解。我想了解你对我下一个项目的想法。
我计划为一台机器编写一个C#人机界面,该机器运行时间很短,大约30秒的生产周期。有些设置函数需要对操作员进行实时检查,但重要的部分是生产周期。在生产周期中,控制器将尽可能直接读取所有输入,并根据循环前加载的参数控制伺服电机和输出。如果实时响应在周期之间失效,那么没有问题。
我的计划是有一个线程从控制器读取状态,如果需要的话可以向控制器发送命令,但是避免任何可能阻止其执行的事情,比如更新屏幕。定时器从线程中获取状态信息,然后更新屏幕上的信息,并根据需要设置错误消息框。原始线程将响应屏幕上的控件。我预计需要某种类型的同步对象来控制将数据从线程传递到计时器。据我了解,C#计时器将与原始线程共享时间,并可能阻止其执行。我不确定这会不会发生,或者是好还是坏?
在这个计划中,你能看到什么问题,我应该注意什么,任何我可以看别人工作的地方,还有更好的方法吗?
顺便说一句:我不买很多彩票,也不喝太多烈酒,所以搬到山里去建立一个静坐对我来说还不是一个可行的更好的方法。
耽误您时间,实在对不起
我同意C#永远不会给出真正的实时。我只是在问人们如何最大限度地利用C#的能力。
发布于 2015-03-10 03:59:45
我可以肯定地告诉您,在C#和标准的.NET环境中,您永远不会实现硬实时(我非常怀疑您是否能够做到软实时)。
我使用C#开发了机器视觉检测系统,我们已经将产品跟踪和传感器输入等的所有实时要求都卸载给了PLC (特别是B&R实时软PLC)。
如果您尝试使用.NET进行实时操作,您会发现,突然之间,您的系统将有一段时间只是“什么都不做”。这主要是由于.NET中的垃圾收集,但也可能是由于后台正在执行的任意数量的底层Windows任务(磁盘管理、检查更新等)。我们很喜欢地把它称为"Windows正在舔自己“。就像狗舔its...errr....self一样,它没有做任何有用的事情,但它所做的比你想要它做的更重要。
https://softwareengineering.stackexchange.com/questions/275787
复制相似问题