【C#】基于Stateless的简易半物理仿真工具

本文介绍了如何使用C#中的Stateless库创建一个简易半物理仿真工具,该工具涉及串口通信、实时数据显示、二阶振荡差分方程求解。工具允许用户实时调整时间常数、阻尼比和输出间隔,并能预览参数调整后的反馈曲线。通过CompositionTarget_Rendering事件实现了界面更新,简化了状态机架构的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【C#】基于Stateless的简易半物理仿真工具

以前刚开始写程序的时候,总是喜欢在wpf中死操事件处理程序,例如最简单的实时通信与显示这一类程序,曾经写出过用串口中断一撸到底,从数据接收到解包,再到前台控件更新,全部是在串口接收中断中完成的。

后来变聪明了一些,知道采用一个缓冲区,接收中断将新数据放入缓冲区,而由子线程对缓冲区中的数据进行解包,然而又会遇到一个问题,子线程不能更改控件,因为控件由界面线程拥有,只能由界面线程访问。所以曾经在程序里塞满了各种各样的Invoke

再后来,知道了CompositionTarget_Rendering方法,得知它是与屏幕刷新绑定的一个事件,真的是太适合界面更新了,甚至可以通过它来负责整个程序的运行,通过在CompositionTarget_Rendering中加入switch来实现状态机的架构,可以轻松的实现界面的更新,而且不用编写非常繁杂的代码。

在我一年前写的网页版跳一跳程序使用了类似的方法,定时器函数驱动整个程序的运行。

再后来接触到了stateless状态机库,最近使用它写了一个非常简单的半物理仿真工具,主要需求如下:
1.通过串口与无人机进行通信;
2.通过串口实时接收无人机的目标速度指令;
3.采用二阶振荡的差分方程,通过串口定时输出实际速度反馈值(还要输出积分和微分信息);
4.时间常数、阻尼比实时可调,定时输出的时间间隔实时可调;
5.可以实时显示当前反馈值曲线;

这里面相对好处理的是串口通信和二阶震荡的差分方程,比较麻烦的是时间常数和阻尼比实时可调,而且实际上我还需要在仿真之前,能够通过调节阻尼比和时间常数,预先看到我的输出曲线,以提前进行参数的调整。先放个程序界面图
在这里插入图片描述
接下来是输入参数进行反馈曲线预览,这里也是我试用上面的架构中比较满意的地方,不用按任何button,在列表中输入了合法的参数后,曲线就出来了,修改参数的时候也会立即更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值