Ay写给2022的纯xaml [wpf4net5] - Caliburn Micro[1/16],MyGet

三相并网逆变器预测电流控制simulink仿真模型 内容概要:本文介绍了一个关于三相并网逆变器预测电流控制的Simulink仿真模型,重点实现了基于预测控制策略的电流环设计,以提升并网电能质量与动态响应性能。该模型涵盖了逆变器主电路、空间矢量脉宽调制(SVPWM)、锁相环(PLL)、坐标变换(如abc/dq0)以及电流预测控制算法等核心模块,能够有效实现对并网电流的精确跟踪与谐波抑制。仿真模型可应用于弱电网条件下的稳定性分析、电流控制策略优化及新型控制算法验证,部分资源附带参考文献与设计文档,便于科研复现与深入研究。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校研究生、科研人员及从事新能源并网技术开发的工程师。; 使用场景及目标:①用于研究三相并网逆变器在不同电网条件下的电流控制性能;②验证模型预测控制(MPC)在电流环中的应用效果;③支撑科研论文的仿真实验部分,辅助完成控制算法的设计与对比分析; 阅读建议:建议结合相关电力电子与电机控制理论基础,按照资源目录顺序逐步学习,重点关注控制算法与仿真模型的对应关系,并利用提供的参考文献深化理解,提升科研效率与创新能力。 立即下载

wpf4net5 (读音 wpf for net5) 

终于有点可以学习的时间了,决定系统化折腾下net5版本的wpf的相关技术栈的程序集

第一站就是看下最新版本的CM的变化。

Myget Caliburn.Micro 4.0.185

Nuget 4.0.173

我的以前相关的文章

AY GITHUB WPF TECH APPLY 2- Caliburn.Micro-WPF-aaronyang技术分享 (ayjs.net)

同类MVVM

lbugnion/mvvmlight: The main purpose of the toolkit is to accelerate the creation and development of MVVM applications in Xamarin.Android, Xamarin.iOS, Xamarin.Forms, Windows 10 UWP, Windows Presentation Foundation (WPF), Silverlight, Windows Phone. (github.com)

下载代码:

Caliburn-Micro/Caliburn.Micro: A small, yet powerful framework, designed for building applications across all XAML platforms. Its strong support for MV* patterns will enable you to build your solution quickly, without the need to sacrifice code quality or testability. (github.com)

通过git方式:

git init

git clone GitHub - Caliburn-Micro/Caliburn.Micro: A small, yet powerful framework, designed for building applications across all XAML platforms. Its strong support for MV* patterns will enable you to build your solution quickly, without the need to sacrifice code quality or testability.

相关文章

Ay写给2022的纯xaml [wpf4net5] - Caliburn-Micro[1/16],MyGet-WPF-aaronyang技术分享 (ayjs.net) Download

Ay写给2022的纯xaml [wpf4net5] - Caliburn-Micro-绑定[2/16]-WPF-aaronyang技术分享 (ayjs.net) Download

Ay写给2022的纯xaml [wpf4net5] - Caliburn-Micro-调用vm的方法[3/16]-WPF-aaronyang技术分享 (ayjs.net)  Download

Ay写给2022的纯xaml [wpf4net5] - Caliburn-Micro-Coroutine协程[4/16]-WPF-aaronyang技术分享 (ayjs.net) Download

Ay写给2022的纯xaml [wpf4net5] - Caliburn-Micro-Execute 异步里面更新界面UI[5/16]-WPF-aaronyang技术分享 (ayjs.net)

第5天CM.zip

Ay写给2022的纯xaml [wpf4net5] - Caliburn-Micro-EventAggregation[6/16]-WPF-aaronyang技术分享 (ayjs.net)

第6天CM.zip

Ay写给2022的纯xaml [wpf4net5] - Caliburn Micro-Conductor[7/16]-WPF-aaronyang技术分享 (ayjs.net)

第7天CM.zip

Ay写给2022的纯xaml [wpf4net5] - Caliburn Micro-Bubbling[8/16]-WPF-aaronyang技术分享 (ayjs.net)  

第8天CM.zip


MyGet配置

在 Visual Studio 中打开 工具 -> 选项 -> NuGet 包管理器 -> 包源:

https://dotnet.myget.org/F/dotnet-core/api/v3/index.json

image.png

其他nuget源

我收集的各种公有 NuGet 源 - walterlv

如果打不开

caliburn-micro-builds - Caliburn.Micro 4.0.185 | MyGet


建立项目

image.png

image.png


我用4.0.173版本


建立2个文件夹

image.png

在CM中,作者把很多xaml.cs写的代码用 对象池,提供一些接口和对应的实现 ,比如下面的

INavigationService

因为提供了,才能根据VM 转到对应的Page,而不是new page给wpf

新增一个 ViewModels/ShellViewModel类 ,这个表示作为主窗体的VM

以后Page,Window,UserControl类型的 所有的页面都只有xaml文件,没有xaml.cs,你可以新建类,然后粘贴本文最最下面的提供的 对应的代码片段

wpf的窗体继承window,CM中,窗体对应的ViewModel继承Screen

using Caliburn.Micro;
using System.Windows.Controls;

namespace cm1.ViewModels
{
    public class ShellViewModel : Screen
    {
        private readonly SimpleContainer container;
        private INavigationService navigationService;

        public ShellViewModel(SimpleContainer container)
        {
            this.container = container;
        }

        public void RegisterFrame(Frame frame)
        {
            navigationService = new FrameAdapter(frame);

            container.Instance(navigationService);

  
        }
    }
}

注意这里的命名空间,后面要加ViewModel,在CM中,运行时候  XX.ViewModels.XXXViewModel 默认会找XX.Views.XXXView窗体然后运行的

新建 Bootstrapper 继承CM的 BootstrapperBase

在这里我们用CM提供的IOC,项目运行之前,做一些启动工作

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Threading;
using Caliburn.Micro;

namespace cm1
{
    public class Bootstrapper : BootstrapperBase
    {
        private SimpleContainer container;

        public Bootstrapper()
        {
            Initialize();
        }

        protected override void Configure()
        {
            container = new SimpleContainer();

            container.Instance(container);

            container
                .Singleton<IWindowManager, WindowManager>()
                .Singleton<IEventAggregator, EventAggregator>();

            container
               .PerRequest<ShellViewModel>();
           
        }

        protected override async void OnStartup(object sender, StartupEventArgs e)
        {
            await DisplayRootViewForAsync(typeof(ShellViewModel),null);
        }

        protected override object GetInstance(Type service, string key)
        {
            return container.GetInstance(service, key);
        }

        protected override IEnumerable<object> GetAllInstances(Type service)
        {
            return container.GetAllInstances(service);
        }

        protected override void BuildUp(object instance)
        {
            container.BuildUp(instance);
        }

        protected override void OnUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            e.Handled = true;
            MessageBox.Show(e.Exception.Message, "An error as occurred", MessageBoxButton.OK);
        }
    }
}

Configure()是重点,在这里注册vm和view

image.png

Singleton注册单例,PerRequest每次请求都是要给新的实例

关于Handler,应该类似MVVMLight的Messenger,先忽略

在App.xaml添加资源,移除StartupUri属性

<Application x:Class="cm1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:cm1">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <local:Bootstrapper x:Key="Bootstrapper" />
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

新建一个C#类,不是窗体 名字改成  ShellView.xaml ,我们不需要xaml.cs (从现在开始,page,window,usercontrol等只需要xaml,不需要xaml.cs)

<Window x:Class="cm1.Views.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"     xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
        Title="ShellView" Height="450" Width="800">
    <Grid Background="Yellow">
        <Frame cal:Message.Attach="RegisterFrame($source)" DataContext="{x:Null}" />
    </Grid>
</Window>

先忽略 cal:Message.Attach="RegisterFrame($source)" 这行代码

你可以理解为Attach时候,会和当前控件的最可能常用的事件在一起,比如button的话,可能就是click, 会调用 当前VM中的 RegisterFrame方法,传入参数$source 大致猜测传入事件源,类似后台代码的object sender

接下来可以运行项目了,如果出现了 黄色背景色的窗体 就代表成功了

很重要的一个类库 Microsoft.Xaml.Behaviors.Wpf类库

删除对“Microsoft.Expression.Interactions”和“System.Windows.Interactivity”的引用

安装“Microsoft.Xaml.Behaviors.Wpf”NuGet 包。

XAML 文件 – 将 xmlns 命名空间“http://schemas.microsoft.com/expression/2010/interactivity”和“http://schemas.microsoft.com/expression/2010/interactions”替换为“http://schemas.xml”。 microsoft.com/xaml/behaviors“

C# 文件 – 用“Microsoft.Xaml.Behaviors”替换 c# 文件“Microsoft.Xaml.Interactivity”和“Microsoft.Xaml.Interactions”中的使用


在CM中可以用BindableCollection替代ObservableCollection

数据列表视图和VM的定义和使用

来个UserControl类型的FeatureView 和 它对应的FeatureViewModel类

<UserControl  x:Class="cm1.Views.FeatureView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid Margin="20,10">
        <Button  HorizontalContentAlignment="Left">
            <StackPanel Margin="5">
                <TextBlock x:Name="Title" FontSize="14" FontWeight="SemiBold"/>
                <TextBlock x:Name="Description"/>
            </StackPanel>
        </Button>
    </Grid>
</UserControl>

ViewModdel

using System;

namespace cm1.ViewModels
{
    public class FeatureViewModel
    {
        public FeatureViewModel(string title, string description, Type viewModel)
        {
            ViewModel = viewModel;
            Title = title;
            Description = description;
        }

        public string Title { get; }

        public string Description { get; }

        public Type ViewModel { get; }
    }
}

你可以理解这是个 ItemsControl下的ItemTemplate每一行数据的模板和对应的数据结构,这个vm没继承任何通知

我们先把它放在ShellView上显示,列表数据是很常见的需求

修改ShellViewModel

using Caliburn.Micro;
using System.Windows.Controls;

namespace cm1.ViewModels
{
    public class ShellViewModel : Screen
    {
        private readonly SimpleContainer container;
        private INavigationService navigationService;

        public ShellViewModel(SimpleContainer container)
        {
            this.container = container;

            Features = new BindableCollection<FeatureViewModel>
            {
                new FeatureViewModel("Binding Conventions", "Binding view model properties to your view.", null),
                new FeatureViewModel("Action Conventions", "Wiring view events to view model methods.",null),
            };
        }
        public BindableCollection<FeatureViewModel> Features { get; }
        public void RegisterFrame(Frame frame)
        {
            navigationService = new FrameAdapter(frame);

            container.Instance(navigationService);


        }

   

    }
}

注意 public BindableCollection<FeatureViewModel> Features { get; }

这里的Features这个属性名,在CM中有自己的一套 代码约定,这个集合类型的名字和xaml的控件名字如果一样,就会绑定,比如这里和xaml的ItemsControl的ItemsSource自动绑定

<Window x:Class="cm1.Views.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"     xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
        Title="ShellView" Height="450" Width="800">
    <Grid Background="Yellow">
        <!--<Frame cal:Message.Attach="RegisterFrame($source)" DataContext="{x:Null}" />-->
        <ScrollViewer>
            <ItemsControl x:Name="Features"/>
        </ScrollViewer>
    </Grid>
</Window>

注意: <ItemsControl x:Name="Features"/> 它的name和属性名是一致的

UserControl是你可以理解为局部视图,而page必须在frame里面,UserControl里面的约定和attach调用的方法不一定在它命名规则的ViewModel里,可能在它的宿主的Window的或者page的Viewmodel里面。

运行项目,效果如下:

新建一个Page类型 名叫MenuViewModel,用来显示这个页面,ShellView我们只放个frame用来导航的

我们把ShellView恢复原样子

<Window x:Class="cm1.Views.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"     xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
        Title="ShellView" Height="450" Width="800" WindowStartupLocation="CenterScreen">
    <Grid Background="Yellow">
        <Frame cal:Message.Attach="RegisterFrame($source)" DataContext="{x:Null}" />
    </Grid>
</Window>

然后ShellViewModel,修改代码如下:

        public void RegisterFrame(Frame frame)
        {
            navigationService = new FrameAdapter(frame);

            container.Instance(navigationService);

            navigationService.NavigateToViewModel(typeof(MenuViewModel));
        }

MenuViewModel

using System;
using Caliburn.Micro;


namespace cm1.ViewModels
{
    public class MenuViewModel : Screen
    {
        private readonly INavigationService navigationService;

        public MenuViewModel(INavigationService navigationService)
        {
            this.navigationService = navigationService;

            Features = new BindableCollection<FeatureViewModel>
            {
                new FeatureViewModel("Binding Conventions", "Binding view model properties to your view.", null),
            };
        }

        public BindableCollection<FeatureViewModel> Features { get; }

        public void ShowFeature(FeatureViewModel feature)
        {
            navigationService.NavigateToViewModel(feature.ViewModel);
        }
    }
}

MenuView

<Page x:Class="cm1.Views.MenuView"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="MenuView">

    <Grid>
        <ScrollViewer>
            <ItemsControl x:Name="Features"/>
        </ScrollViewer>
    </Grid>
</Page>

注意: x:Class="cm1.Views.MenuView"  代码不能省略,如果出现波浪线,手动删除obj文件夹,因为那里的缓存导致的

运行项目会报错的,你还需要在Bootstrapper的Configure方法

        protected override void Configure()
        {
            container = new SimpleContainer();

            container.Instance(container);

            container
                .Singleton<IWindowManager, WindowManager>()
                .Singleton<IEventAggregator, EventAggregator>();

            container
               .PerRequest<ShellViewModel>()
               .PerRequest<MenuViewModel>();
        }

运行项目后,窗体显示了个按钮,接下来给列表按钮绑定单击事件

FeatureView修改代码

   <Button cal:Message.Attach="ShowFeature($dataContext)"  HorizontalContentAlignment="Left">
            <StackPanel Margin="5">
                <TextBlock x:Name="Title" FontSize="14" FontWeight="SemiBold"/>
                <TextBlock x:Name="Description"/>
            </StackPanel>
        </Button>

ShowFeature我们定义在MenuViewModel里面了,我们使用$dataContext传递当前上下文。

接下来添加第一个按钮导航的页面 

BindingsViewModel

using System;
using Caliburn.Micro;

namespace cm1.ViewModels
{
    public class BindingsViewModel : Screen
    {

        public BindingsViewModel()
        {
           
        }
        private string _Right = "右边";

        public string Right
        {
            get { return _Right; }
            set { _Right = value; NotifyOfPropertyChange(); }
        }
    }
}

和 BindingsView

<Page x:Class="cm1.Views.BindingsView"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="BindingsView">

    <Grid Background="Red">
        <TextBlock x:Name="Testtb" Text="{Binding Right}" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Page>

运行时候,你会发现界面会显示,但是ViewModel貌似没有作为对应View的DataContext

你还需要在Bootstrapper的Configure方法

        protected override void Configure()
        {
            container = new SimpleContainer();

            container.Instance(container);

            container
                .Singleton<IWindowManager, WindowManager>()
                .Singleton<IEventAggregator, EventAggregator>();

            container
               .PerRequest<ShellViewModel>()
               .PerRequest<MenuViewModel>()
               .PerRequest<BindingsViewModel>();
        }

运行效果

image.png

CM显示界面,不会自动把VM给View,但是你可以根据VM弹出View

TextBlock的Name名字等于 VM的属性名时候,自动绑定TextBlock的Text属性

本文由 安徽 合肥 杨洋 1991年的 英文名AY   ===来自网站 www.ayjs.net 编写

本文由 安徽 合肥 杨洋 1991年的 英文名AY   ===来自网站 www.ayjs.net 编写

这个示例的意思,在一个列表中有多种ViewModel,希望不同的vm按照对应的view显示

这个内容下篇再总结了

本文代码下载:Download

net framework 类库net5 中的替代类库

Microsoft.Expression.Interactions

System.Windows.Interactivity

Microsoft.Xaml.Behaviors.Wpf

其他Ay准备升级到net5的纯xaml库

【ay wpf markup】AY XAML应该这样玩【1/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩【2/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-写个计算器【3/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-for循环【4/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-ChangedHandler【5/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-ResourceCollection和ScriptHandler【6/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-ResourceObject【7/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-ScriptHandler组合,也是最常用的【8/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-语法集合【9/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-Tower of Hanoi【10/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-写个简单的移动【11/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-写个复杂的绘图【12/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-写个复杂的颜色环【13/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-获得焦点全选【14/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-把Additional.Operations当资源【15/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-给ListView创建数据【16/18】-WPF-aaronyang技术分享 (ayjs.net)

【ay wpf markup】AY XAML应该这样玩-和后台ViewModel交互,操作方法【17/18】-WPF-aaronyang技术分享 (ayjs.net)

默认代码模板

Window

<Window x:Class="Features.CrossPlatform.Views.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
        mc:Ignorable="d"
        Title="ShellView" Height="450" Width="800">
    <Grid>
     
    </Grid>
</Window>

Page

<Page x:Class="Features.CrossPlatform.Views.MenuView"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="">

    <Grid>

    </Grid>
</Page>

UserControl

<UserControl  x:Class="cm1.Views.FeatureView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>

    </Grid>
</UserControl>

三相Z源逆变器四种升压控制、三次谐波最大升压控制LCL滤波【附参考资料】 内容概要:本文系统研究了三相Z源逆变器的升压控制技术,重点分析并实现了四种常规升压控制方法与基于三次谐波注入的最大升压控制策略,结合LCL滤波器进行系统优化设计,有效提升了电压增益与输出波形质量。通过Simulink搭建完整的仿真模型,对不同控制策略在动态响应、稳态精度及系统稳定性方面的性能进行了对比验证,提供了详实的参考资料以支持理论推导与仿真复现。研究成果对于提升可再生能源系统中逆变器的电压转换能力与运行可靠性具有重要应用价值。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事新能源发电系统开发的工程技术人员。; 使用场景及目标:①深入理解Z源逆变器的独特升压机制及其与传统逆变器的区别;②掌握多种升压控制策略的设计原理与仿真实现方法;③应用于光伏、风电等需要高升压比和高质量并网性能的电力变换系统中,优化系统整体效率与稳定性。; 阅读建议:建议结合文中的仿真模型与参考文献,动手实践Simulink建模与参数调试,重点关注控制策略对升压效果、谐波抑制及滤波器动态特性的影响,从而深化对Z源逆变器控制机理的理解,并推动其在实际工程中的应用转化。 立即下载

相关推荐

高校技术转移办公室人员在推进成果对接时,如何提升匹配效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

WPF Prism代码走读

里的走到容器实现。?Instance;?Instance;?Instance;DryIoc 内部的查注册表;模块类型通常没显式注册 → 走"未注册类型自动解析"规则反射读取构造函数生成/缓存一个编译表达式或 IL 委托(DryIoc 的做法是编译成委托),后续同类型解析直接调委托,不再反射所以"反射创建对象"的代价是一次性的。

qq_44967213的博客 230

产业园区运营负责人如何高效对接企业技术需求与科研资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

C#-WPF-MVVM未来主流

C# / WPF 更新全景(2022–2026)摘要(148字): .NET 7–10 按年发布,偶数年为LTS(支持至2028),奇数年为STS。C# 11–14引入主构造函数、集合表达式、field关键字等。WPF从. NET 7的性能优化,到. NET 9的Fluent主题与ThemeMode,实现视觉跃迁;. NET 10补全控件、统一剪贴板。新项目建议采用. NET 10,生产环境优先选择LTS版本,避免频繁迁移。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 493

基于下垂控制的构网型逆变器功率环并网控制Matlab仿真【附参考文献】

内容概要:本文系统阐述了基于下垂控制的构网型逆变器功率环并网控制策略的Matlab/Simulink仿真研究,深入剖析了构网型逆变器在微电网中的核心作用,重点在于通过下垂控制实现对有功功率/频率、无功功率/电压的自主调节,确保系统在并网与孤岛模式间的无缝切换与稳定运行。文章详细介绍了下垂控制的理论基础、控制环路设计、关键参数整定方法,并构建了完整的多场景仿真模型,涵盖了负载突变、多机并联、功率动态响应等工况,全面验证了控制策略的有效性、鲁棒性及良好的功率均分能力,同时附有详尽的参考文献以供理论溯源与深入探究。; 适合人群:电力电子、电气工程、自动化等相关专业的高校研究生、科研人员及从事新能源并网、微电网控制系统开发的工程技术人员。; 使用场景及目标:①用于教学与科研中深入理解构网型逆变器的自主运行机理与下垂控制的实现细节;②为微电网工程中逆变器并网控制系统的方案设计与参数优化提供直接的技术参考;③支撑新能源发电系统(如光伏、风电)配套储能的频率支撑与电压调节功能开发;④作为学术研究的基础,用于复现经典控制算法或在此之上进行自适应下垂、虚拟阻抗等先进控制策略的创新与验证。; 阅读建议:建议读者结合所提供的Matlab仿真模型进行实操,通过修改参数、设置不同扰动工况来观察系统动态响应,从而将理论分析与仿真结果紧密结合,深化理解;同时应仔细研读所附参考文献,以拓宽对下垂控制在复杂微网环境(如弱电网、非线性负载)下应用挑战与前沿解决方案的认知,鼓励在此仿真平台上进行二次开发,探索如基于人工智能的参数自整定等优化路径以进一步提升系统性能。

旋转变压器软件解码simulink仿真

旋转变压器软件解码simulink仿真、电机转速位置测量

qq_31446727的博客 2573

树状控件的应用(选择出阵武将)

           树状控件的应用                          何志丹下面是树状控件的一些应用,由于是由于用于演示,所以结构并不合理.其效果如图所示..步骤如下: 1,Insert -> new class,插入一个新类CMyCtrl,基类为CTreeCtrl. 2,利用类向导为CMyTree添加WM_PANIT的响应函数.代码如下:

闻缺陷则喜何志丹 3650

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 222

WPF(资源、资源字典、样式、URL路径、嵌入资源)

wpf资源的查找顺序,作用范围,资源字典、样式、触发器

m0_57547938的博客 67

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 778

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 570

分布式 ID 生成方案:雪花算法与号段模式

分布式ID需解决分库分表后主键唯一性问题。雪花算法通过41位时间戳、10位workerID(机房+机器)、12位序列号,实现全局唯一且趋势递增;号段模式则用双Buffer预取ID,抗DB抖动。核心要点:workerID必须动态分配,时钟回拨分级处理,容器化下禁止硬编码。选型上,大规模系统优先雪花或号段模式,追求零依赖可用UUID v7。

weixin_38805083的博客 303

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

Soly_kun的博客 729

WPF导航窗体+Page页面跳转 知识点整理

只能弹出新窗口,,无法内嵌Page页面切换。:专门用于承载 Page 页面,支持。

2401_84677775的博客 144

《QGIS快速入门与应用基础》223:纸张大小与方向(A4/A3/自定义)

本文详细介绍了QGIS布局页面设置的核心操作,重点讲解了纸张大小与方向的设置方法。文章首先指出页面设置是地图排版的基础前提,强调合理设置可避免导出打印时出现尺寸不符等问题。随后详细说明了三种打开页面设置面板的方式,并重点解析了纸张设置的要点:标准预设纸张(A4/A3等)适用于大多数场景,提供国内常用规格对照表;自定义纸张则需谨慎使用,需注意单位选择和尺寸限制。通过界面标注图和操作步骤示意图,帮助用户掌握正确的设置方法,确保最终出图符合规范要求。文章特别提醒新手要优先使用标准预设纸张,避免常见错误,为后续地图

LuckyHanMo的博客 335

2026 Claude Code 标准化前端UI SKILL——Frontend Design

是 Anthropic 官方开源的技能包,在 Claude 官方插件站中排名第一,超过 52k 的下载量。场景推荐方案快速体验批量安装官方 Skills深度设计策略叠加完整打磨流程集成终端跑claude一句话总结:Frontend Design 不是给 AI 加新能力,而是给 AI 加审美标准。它让 AI 从“能画”变成“会设计”——先想清楚风格,再动手写代码。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 3585

WPF三种启动方式 + 静态资源 + 数据绑定 满分知识点整理

/ 相对路径加载启动窗口app.Run();--1.字符串资源--><sys:String x:Key="str1">成龙</sys:String>--2.字符串数组--><sys:String>蔡徐坤</sys:String><sys:String>小刚</sys:String><sys:String>周传雄</sys:String></x:Array>--3.整型数组--></x:Array>--4.纯色画刷资源-->--5.颜色数组资源--></x:Array>

2401_84677775的博客 163

37、OpenMP:并行编程的强大工具

本文详细介绍了 OpenMP 的核心功能和使用方法,包括执行环境例程、线程同步与协调机制,如关键区域、屏障、原子操作、归约子句、刷新构造和锁机制。此外,还提供了多个实践练习,涵盖矩阵乘法的并行实现、任务池与流水线模式的应用、读写锁的扩展与移植,以及客户端-服务器模式的实现与优化。通过这些内容,读者可以全面掌握 OpenMP 在并行编程中的实际应用与性能优化技巧。

www00的博客 99

模拟数据实现Net8.0+WPF曲线图表展示历史报价记录的方法(多年月日+对应年月日的价格数据)

模拟数据实现Net8.0+WPF曲线图表展示历史报价记录的方法(多年月日+对应年月日的价格数据),内部数据库直接加载的方法

KenBest的专栏 198

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【WPF-Control教程】MVVM 二次开发文档

H.Mvvm、业务 Presenter、ViewModel、设置项、项目项Bindable属性通知、命令绑定、命令可用性、显示元数据、图标、命令自动发现、默认值、序列化忽略本文介绍框架中 MVVM 基础设施的使用方式。重点包括Bindable和的职责、继承关系、XAML 绑定方式及命令自动收集机制。用户提到的在框架中的实际类型名为。

HeBianGu的博客 61

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【WPF-Control教程】IOC 依赖注入

H.IocableIocIoc<T>DbIoc本文说明 WPF-Control 中 IOC 依赖注入的注册、解析、XAML 使用、服务定位器封装、数据库独立容器,以及解决方案中常见IService接口的职责分布。

HeBianGu的博客 263

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SciChart XPF v3 发布:WPF 图表跨平台迁 Linux 的 Vulkan 实践

SciChart for Avalonia XPF v3.0(build 10777,2026-10-15 发布)把 Linux 渲染后端从 OpenGL 整体替换为 Vulkan,修复了 2D/3D 同窗崩溃,并补齐 SciChart WPF v9.0/v9.1 的全部特性。本文面向需要在 Linux(含国产发行版)交付 WPF 图表应用的团队,梳理版本改动、迁移成本与五项落地检查,重点说明官方未发布 Vulkan 性能数字、以及国产 Linux 发行版的许可边界。

励志做最业余的专业博主,控件产品可以私我~ 338

【WPF-Control教程】Theme 主题系统二次开发文档

FF3399FF</Color>:资源键所属类型。:资源键 ID。两者组合形成唯一资源键。例如创建注意:自定义主题需要覆盖控件实际使用到的关键颜色。建议参考或已有。如果业务模块需要独立主题资源,建议定义自己的 Key 类型。字号和布局主题由枚举 + 资源字典组成。});

HeBianGu的博客 260

【WPF-Control教程】H.Extensions.Behvaiors 开发文档

以下示例在元素加载后调用 ViewModel 命令。if(Command?} }<Grid></Grid>如果框架已有或既有行为,应优先复用,不要重复创建相同能力。

HeBianGu的博客 95

WPF自定义分页控件

TextBlock Text="跳转至" VerticalAlignment="Center" Foreground="#555" Margin="0,0,4,0"/><TextBlock Text="每页" VerticalAlignment="Center" Foreground="#555" Margin="0,0,4,0"/><TextBlock Text="页" VerticalAlignment="Center" Foreground="#555" Margin="4,0"/>

qq_44217121的博客 214

【WPF-Control教程】H.Style 开发文档

用业务样式程序集扩展,而不是直接修改H.Style。只对确有业务差异的控件覆盖默认样式。保持主题语义资源不变,避免在业务样式中复制整套颜色。将样式集作为独立暴露给设置模块。完整替换可能遗漏模板部件、命令、验证状态或 ItemsPresenter。应基于当前版本的原始模板修改,并测试键盘、鼠标、禁用、选择、滚动与验证。

HeBianGu的博客 146
上一篇: [AaronYang]C#人爱学不学14- volatile
下一篇: Ay写给2022的纯xaml [wpf4net5] - Caliburn Micro-绑定[2/16]
茗杨AaronYang
博客等级 码龄16年 111粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值