ActiveX控件开发总结

本文详细介绍使用MFC和ATL开发ActiveX控件的过程,包括创建工程、调试方法及JavaScript调用技巧,并提供控件的打包安装流程,还分享了一些开发过程中的实用经验。

创建ActiveX工程:

可以使用VC建立MFC工程或者ATL工程来进行ActiveX控件开发。使用MFC方式建立,系统会自动实现一些ActiveX控件必须的接口,开发人员只需关注业务就可以了;使用ATL方式建立,开发人员需要实现十几个COM接口(ActiveX实际上是COM的一种),需要对COM有一定的了解。但是使用MFC方式,最后发布的安装包要包含引入了的MFCDLL(视频控件引入了两个,总共3M左右),会导致安装包会比ATL方式大一点。

1MFC方式

使用MFC方式创建ActiveX工程比较简单,只要选择了MFC ActiveX工程,之后都按系统下一步就可以了。

 

 

2ATL方式

使用ATL方式创建,没有仔细研究过,待补充。

 

调试ActiveX工程

可以使用两种方式调试ActiveX控件:ActiveX测试容器或者IE,建议使用IE作为调试工具,因为ActiveX测试容器有些地方和IE不太一样,而且实际使用是嵌入到IE中使用的。

1、使用ActiveX控件测试容器

可以使用系统自带的ActiveX测试容器来进行调试,调试时选择自己的ActiveX控件名,即可打开创建的工程。


 


 

2、使用IE

也可以使用IE来进行调试,需要自己先创建一个包含了此ActiveX控件(通过CLSID指定)的HTML文件,调试时指定参数为此文件。


HTML文件内容如:

<BODY>

<OBJECT ID="NVS_VAE" CLASSID="CLSID:c8cd5ebc-817b-401f-ab06-05cc55c8d9ee">

</OBJECT>

</BODY>

其中ID可以随便定义CLASSID是与创建的ActiveX工程中自动生成的ID保持一致在创建工程的×××Ctrl.cpp

// 初始化类工厂和guid

 

IMPLEMENT_OLECREATE_EX(CNVS_VAECtrl,"NVS_VAE.NVS_VAECtrl.1",

                       0xc8cd5ebc, 0x817b, 0x401f, 0xab, 0x6, 0x5, 0xcc, 0x55, 0xc8, 0xd9, 0xee)

注:使用IE8的话,默认是多线程,不支持ActiveX控件的调试,可以修改如下注册表,来支持调试

Windows Registry Editor Version 5.00

 

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]

"TabProcGrowth"=dword:00000000

 

JavaScrip调用ActiveX控件中的对外方法

页面可以通过JavaScript调用ActiveX控件中的方法与控件进行交互:

1、传入参数

<BODY>

<OBJECT ID="NVS_VAE" CLASSID="CLSID:c8cd5ebc-817b-401f-ab06-05cc55c8d9ee">

<PARAM NAME="lInitFacePara" VALUE="0">

</OBJECT>

</BODY>

 

2、调用方法

通过getElementById 方法,传入控件ID(比如前面的MyPostItCtrl),来调用ActiveX控件中提供的接口(假定StartRealVideoActiveX中提供的对外接口)

 <SCRIPT   language=JScript>

   function test()

   {

        document.getElementById("MyPostItCtrl").StartRealVideo (“摄像机ID”,”码流ID”);

   }

 </SCRIPT>

ActiveX控件的打包安装

可以把ActiveX控件打成CAB包,在页面中指定该CAB包的位置,如果目标机器访问页面时,没有安装过此控件,则IE会自动下载此CAB包到目标机器,并进行安装

1、 确认ActiveX控件依赖于哪些DLL

使用vcDEPENDS.EXEMicrosoft Visual Studio\Common\Tools目录下)打开ocx/dll文件,即可看到其依赖的dll文件


 

2、 创建INF文件,用记事本编辑以下信息 

[version]    

signature="$CHINA$"   

AdvancedINF=1.0   

   

[Add.Code]    

evS1300.ocx=evS1300.ocx    

msvcr71.dll=msvcr71.dll    

mfc71.dll=mfc71.dll    

msvcp71.dll=msvcp71.dll    

   

[evS1300.ocx]    

file=thiscab    

clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}    

FileVersion=1,0,0,0   

RegisterServer=yes    

   

[msvcr71.dll]    

file-win32-x86=thiscab    

RegisterServer=no    

DestDir=11   

FileVersion=7,10,3052,4   

   

[mfc71.dll]    

file-win32-x86=thiscab    

RegisterServer=no    

DestDir=11   

FileVersion=7,10,3077,0   

   

[msvcp71.dll]    

file-win32-x86=thiscab    

RegisterServer=no    

DestDir=11   

FileVersion=7,10,3077,0  

evS1300.inf的内容里,[version][Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll][mfc71.dll][msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dllmfc71.dllmsvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsidFileVersion就是evS1300.ocxclassIdversion,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classIdversion呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:

在图13的界面里,点击“FileàOpen…”,打开您所要查看的OCX控件,如图14所示:

打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“”就可以看到我们想要查找的FileVersionclassId,如图15所示:

3、 使用iexpress进行打包

可以使用系统自带的iexpress.exeC:\WINDOWS\system32目录下)工具进行打包。工具默认是8.3命名格式,会把不符合命名规则的文件名截断,可以在打包过程中选择长命名。




      

       之后都下一步即可。

4、 CAB包进行签名

1、 制作(购买)证书

正式的证书需要向相关机构购买,可以制作测试的证书,步骤如下:

Visual Studio的安装目录下,有制作证书和签名的相关工具

E:\Microsoft Visual Studio 8\SDK\v2.0\Bin\ makecert.exe

命令行中执行如下命令来创建证书和私钥文件:

E:\Microsoft Visual Studio 8\SDK\v2.0\Bin>makecert.exe -sv D:VAE.pvk -ss VAE -n

"CN=huawei" -$ commercial -r D:VAE.cer

在弹出的窗口中输入证书密钥密码


再次确认密码


 

证书文件就生成在指定位置了。

2、 CAB包进行签名

Visual Studio的安装目录下,有制作证书和签名的相关工具

E:\Microsoft Visual Studio 8\SDK\v2.0\Bin\ signtool.exe

在命令行执行:signtool.exe signwizard命令,会启动签名向导


 

签名向导:


 

下一步,选择要打包的CAB文件


下一步选择自定义


 

下一步选择“从文件选择”,选择前面生成的证书文件


下一步选择“磁盘上的私钥文件”,选择前面生成的私钥文件


下一步输入密码


 

确定后选择MD5加密


之后一直下一步(根据需要填写内容,也可都默认)

最后再输入一次密码,就成功签名了


5、 页面指定路径

页面中指定CAB包位置和版本号

<BODY>

<OBJECT ID="NVS_VAE" CLASSID="CLSID:c8cd5ebc-817b-401f-ab06-05cc55c8d9ee"codeBase="NVS_VAE.CAB#version=1,0,0,1">

</OBJECT>

</BODY>

访问到此页面,IE自动判断CLSID在目标机器上是否有注册,没有注册重新下载,并注册,有注册,比较版本号,有更新则取根据setup.ini中的版本号进行更新。可以到C:\WINDOWS\Downloaded Program Files目录查看CAB包是否有下载安装。

6、 使用安装程序打包

另外,也可以制作安装程序(可以使用常用的安装程序制作工具,也可以使用VS自带的建立安装部署功能来进行),把安装程序打到CAB包中,这样当IE下载CAB包的客户机上后,会根据setup.ini中的指定执行命令,执行安装程序,由客户自己选择安装路径

脚本如下:

;//这里注意了,发行包安装的信息

[setup.exe]

fileVersion=8.0.50727.42

hook=InstallerHook

;//这项并没有设置file-win32-x86的值,因为它并不在CAB里面,这里设置了一HOOK,让HOOK

;//来处理

 

//发行包的安装来源

[InstallerHook]

;//这里安装默认是在同X.CAB的目录,如果是在网站,可以更改为URL路径

;//如:http://www.x.com/vcredist.cab

 

file-win32-x86=NVS_VAE.CAB

;//这里就是让CAB自动解压过后,运行CAB包里面的 setup.exe

run=%EXTRACT_DIR%\setup.exe

 

开发过程中一些经验总结

以下总结主要由李俊峰(lijunfeng 00165774/huawei,)、李伟(liwei 00165242/huawei,)、姜川(j00132245)总结

1.自定义CListCtrl,使用自定义列表头CHeaderCtrl

在自定义CListCtrl的列表头时,需要替换系统自带的CHeaderCtrl,网上代码的处理方式通常是在自定义的MyListCtrl中重写PreSubclassWindow,并在其中调用(其中m_MyHeaderCtrl是自定义的CHeaderCtrl,作为MyListCtrl的成员变量

       if(GetHeaderCtrl())

              m_MyHeaderCtrl.SubclassWindow(GetHeaderCtrl()->m_hWnd);

这种方法在MFC桌面程序中可以奏效。但是放到ActiveX中时,此处的GetHeaderCtrl()==NULL,所以无法达到替换表头的效果(具体原理未知,有兴趣的同学可以研究)。解决办法是在创建自定义的MyListCtrl之后手动调用

m_MyHeaderCtrl.SubclassWindow(GetHeaderCtrl()->m_hWnd);

当然需要把这个包装成一个InitMyHeader之类的public方法放到MyListCtrl中。

完整代码请参考VAEListCtrlVideoListCtrl及其使用。

 

2.ActiveX窗口上的自定义控件添加ToolTip

为自定义控件添加ToolTip时,一般做法是在PreTranslateMessage中添加如下代码:

if (NULL != m_pToolTipCtrl)           

              m_pToolTipCtrl->RelayEvent(pMsg);

希望CToolTipCtrl能够捕获鼠标移动等消息,但是结果PreTranslateMessage方法在ActiveX程序中不会执行(经验证在ProjectName+Ctrl(即整个ActiveX获得输入焦点)时PreTranslateMessage方法会执行)。

解决办法是为控件添加OnMouseMove消息响应,在OnMouseMoveUINT nFlags, CPoint point)方法中添加代码:

//构造一个MSG

        MSG msg;

        msg.hwnd = m_hWnd;

        msg.message = WM_MOUSEMOVE;

        msg.wParam = LOWORD(point.x);

        msg.lParam = LOWORD(point.y);

        msg.time = 0;

        msg.pt.x = LOWORD(point.y);

        msg.pt.y = HIWORD(point.y);

        m_ToolTip.RelayEvent(&msg);

这样才会使鼠标在控件上移动时显示ToolTip,但是要求要先点选过该控件才行。如果想要更进一步去掉这个先点选控件的限制,则需要在自定义控件的父窗口中响应OnMouseMove消息,并构造MSG关联到ToolTip。此时需要注意point的坐标转换。

完整的相关代码(PTZControlWndBitmapSlider)如下:

 

父窗口PTZControlWnd

//成员变量声明

CBitmapSlider m_bsSpeedOrStepsize;

voidPTZControlWnd::OnMouseMove(UINTnFlags,CPointpoint)

{

   (void)nFlags;

UpdateToolTipText();//更新ToolTip文字

m_bsSpeedOrStepsize->RelayToolTipEventFromParent(point);//此处的point的坐标是相对PTZControlWnd

   VAEBaseWnd::OnMouseMove(nFlags,point);

}

 

控件CBitmapSlider

//成员变量声明

CToolTipCtrl m_ToolTip;

voidCBitmapSlider::RelayToolTipEventFromParent(CPoint &point)

{

   //将相对父窗口的坐标转换成屏幕坐标

GetParent()->ClientToScreen(&point);

 

//从屏幕坐标转换成相对控件自身CBitmapSlider的坐标

ScreenToClient(&point);

 

//因为在CBitmapSlider::OnMouseMove中也要用到,所以提取成函数

   RelayToolTipEvent(point);

}

 

voidCBitmapSlider::RelayToolTipEvent(constCPoint &point )

{

   if (m_ToolTip.m_hWnd !=NULL)

    {

        //构造一个MSG

       MSGmsg;

 

       msg.hwnd =m_hWnd;

       msg.message =WM_MOUSEMOVE;

       msg.wParam =LOWORD(point.x);

       msg.lParam =LOWORD(point.y);

       msg.time = 0;

       msg.pt.x = LOWORD(point.y);

       msg.pt.y = HIWORD(point.y);

 

       m_ToolTip.RelayEvent(&msg);

    }

}

 

为整个ActiveX添加ToolTip的方法可以参考MSDN,同样没有使用PreTranslateMessage方法

http://support.microsoft.com/kb/141871/zh-cn

 

3.MFC ActiveX控件添加对外接口

打开类视图,找到ProjectName+Lib,此处为NVS_VAELib


_D+ProjectName(此处为_DNVS_VAE)上右键弹出菜单,选择添加方法


弹出窗口如下所示,填写相关内容,注意字符串类型参数需要选择BSTR

填写完毕点击『完成』,如果出现错误提示,可以关闭VisualStudio,删除解决方案文件夹下的“.ncb”文件,然后重新打开解决方案再添加方法。

修改已经添加的对外接口签名时注意除了声明和实现外还需要在“.idl”文件中更改相应的调度接口。


 

4.对外接口BSTR参数转换为char *

生成的方法签名中的对应BSTR类型的是LPCTSTR

javascript传进来的Unicode字符串转换为内部接口使用的char*,需要使用MFC宏,

USES_CONVERSION;

char *pszCameraID =W2A(bstrCameraID);

 

5.关于网页的刷新

     ocx加载在网页上时,如果F5刷新,ocx控件会销毁ocx的窗口类,但是ocxapp类是不销毁的,

 只有当网页关闭时,才销毁app类。

 1 刷新引起的问题

     app类中有成员变量时,请注意刷新回来后变量的值还是刷新前的值。

 2 利用刷新app类的不析构恢复刷新前的状态

     可在控件的APP类中保存刷新前的值,刷新后恢复刷新前的状态

 

6.一个网页中加载两次(或者多次)OCX控件

同一进程加载两次控件时,app类调用一次,ocx窗口类调用两次。也就是说两个控件实例使用的是同一个app类的实例,只是有各自的窗口。这时如果app类中有成员变量,值得注意。

 

7.当将UNICODE字符串转化为多字符集字符串时注意的问题

 unicode字符串中含有汉字时,注意转化前后的字符串长度。

 例如:TCHAR* pUnicde=_T("abc例子"); // pUnicde长度5

 char* pMutiBtye=T2A(pUnicde); // pMutiBtye长度是7,一个汉字占两个字节

 

8.开发DLL等控件时,加载字符串/图片等资源失败的原因

       MFC的对话框装载资源是通过获取当前线程对应的ModuleState保存的ResourceHandler来装载资源的。

       所以,DLL里的代码,需要在函数的入口,首先把当前执行线程的ModuleState换成该DllState,这样才能装载该dll的资源

       即:使用AFX_MANAGE_STATE(AfxGetStaticModuleState());

 

9.SetEventPulseEvent的区别

       SetEvent为设置事件对象为有信号状态;而PulseEvent也是将指定的事件设为有信号状态,不同的是如果是一个人工重设事件,

       正在等候事件的、被挂起的所有线程都会进入活动状态,函数随后将事件设回,并返回;如果是一个自动重设事件,

       则正在等候事件的、被挂起的单个线程会进入活动状态,事件随后设回无信号,并且函数返回。

       也就是说在自动重置模式下PulseEventSetEvent的作用没有什么区别,但在手动模式下PulseEvent就有明显的不同,

       可以比较容易的控制程序是单步走,还是连续走。如果让循环按要求执行一次就用PulseEvent,如果想让循环连续不停的运转就用SetEvent

       在要求停止的地方发个ResetEventOK了。


内容概要:本文针对功率阶跃工况下光储虚拟同步发电机(VSG)并网系统存在的电能质量问题,提出一种自适应治理策略。通过Simulink搭建完整的光储VSG并网系统仿真模型,重点研究在功率突变条件下系统出现的频率波动、电压畸变及谐波增加等动态问题。所提策略结合VSG的惯量与阻尼特性,设计了参数自适应调节机制,实现对系统动态响应过程的有效调控,显著提升了并网电流波形质量与频率稳定性,增强了系统在强扰动工况下的鲁棒性与电能质量治理能力。; 适合人群:具备电力电子、自动控制理论及新能源并网技术基础的科研人员、电气工程及相关专业的硕士/博士研究生,以及从事微电网、储能系统、VSG控制研发的工程技术人员。; 使用场景及目标:①用于分析光储系统在功率阶跃等动态工况下的并网特性与电能质量演变规律;②为VSG关键控制参数(如惯量、阻尼)的自适应整定提供设计思路与仿真验证平台;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的前期控制策略验证。; 阅读建议:建议结合Simulink仿真模型深入理解控制策略的实现逻辑,重点关注VSG惯量阻尼协同调节的自适应机制设计,可通过设置不同功率阶跃幅度、光照强度变化及负载投切等多场景进行仿真测试,全面评估策略的动态性能与适用边界。
内容概要:本文系统研究了基于ARIMA-CNN-LSTM的混合时间序列预测模型,并提供了完整的Python代码实现。该模型融合传统统计方法ARIMA与深度学习模型CNN和LSTM的优势,充分发挥ARIMA在捕捉线性趋势与季节性特征方面的能力,以及CNN和LSTM在提取局部特征和建模长期依赖关系方面的强大性能,从而有效提升对复杂非线性时间序列的预测精度。研究涵盖了数据预处理、模型构建、参数调优、训练与预测全流程,并通过实际案例验证模型在风电、光伏、负荷、电价等能源领域预测任务中的优越表现。文档还整合了电力系统、路径规划、信号处理等多个科研方向的仿真资源与代码示例,凸显其在学术研究与工程实践中的广泛应用价。; 适合人群:具备一定Python编程基础和机器学习理论知识,从事科研或工程技术工作的研究人员,特别适用于关注时间序列分析、深度学习建模的硕士生、博士生及行业从业者。; 使用场景及目标:①深入理解并掌握ARIMA与深度学习模型(如CNN、LSTM)融合的建模范式与技术细节;②应用于能源领域中风电出力、光伏发电、电力负荷及电价等关键变量的高精度预测;③为科研课题、学术论文复现、工程项目优化等提供可靠、可复用的代码框架与技术支持。; 阅读建议:建议结合所提供的Python代码进行动手实践,重点剖析数据预处理流程、混合模型架构设计及超参数调优策略,同时可参考文档中其他相关研究案例以拓宽技术视野和应用场景认知。
内容概要:本文围绕谐振式双有源桥(DAB)变换器,深入研究了一种无需电流传感器的模型预测控制(MPC)方法,并基于Simulink平台完成了完整的仿真实现。该方法通过构建精确的系统数学模型,替代传统依赖物理电流传感器的状态观测方式,有效降低了系统硬件成本与布线复杂度,同时提升了系统的可靠性和集成度。研究重点涵盖系统建模、预测模型构建、目标函数设计、约束条件处理以及控制律求解等关键环节,充分体现了模型预测控制在电力电子高频软开关变换器中的高动态响应、高稳态精度与强鲁棒性的优势。文中通过仿真验证了该无传感MPC策略在不同工况下的控制性能,展示了其在抑制电流冲击、提升能量转换效率及增强系统稳定性方面的良好表现。; 适合人群:电力电子、自动化、电气工程及其相关专业的硕士研究生、博士生、高校科研人员,以及从事DAB变换器拓扑设计、先进数字控制算法开发与新能源电能变换系统研发的工程技术人员。; 使用场景及目标:① 掌握谐振式DAB变换器的工作原理及其无传感控制的设计思路与实现路径;② 深入理解模型预测控制在电力电子系统中的建模方法、优化求解过程与仿真验证流程;③ 为开展无传感器驱动、高频隔离DC-DC变换、数字电源控制等前沿课题提供可复现的技术方案与仿真基准平台。; 阅读建议:建议结合提供的Simulink仿真模型同步学习,重点关注状态观测器设计与预测模型的耦合机制,动手调整系统参数与控制权重以观察动态响应变化,深化对MPC控制机理的理解,并可进一步拓展至其他软开关拓扑或融合人工智能优化算法进行性能提升研究。
内容概要:本文详细介绍了基于非线性反步法与Lyapunov-MPC模型预测控制相结合的自主水下航行器(AUV)轨迹跟踪控制方法,并完整实现了包含经典Fossen动力学模型的Matlab仿真代码,复现了高水平期刊研究成果。该方法通过反步法逐级构造控制律,结合Lyapunov函数确保系统全局渐近稳定性,同时引入模型预测控制(MPC)优化未来动态行为,有效提升控制器在复杂海洋环境下的轨迹跟踪精度、抗干扰能力与系统鲁棒性。整个设计充分体现了非线性控制理论与现代优化控制策略的深度融合。; 适合人群:具备自动控制原理、非线性系统分析、现代控制理论基础,熟悉Matlab/Simulink仿真工具,且从事水下机器人、无人航行器、航空航天、智能控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于自主水下航行器、无人机等强非线性系统的高精度轨迹跟踪控制器设计与仿真验证;②支撑高水平学术论文复现、科研课题攻关或实际工程原型开发,掌握先进复合控制策略的设计流程与实现技巧;③深入理解反步法、Lyapunov稳定性理论与模型预测控制三者协同设计的理论依据与工程应用价。; 阅读建议:建议读者结合Fossen动力学建模理论,逐步调试Matlab代码,重点关注控制器设计步骤、Lyapunov函数构造过程及MPC滚动优化实现细节,配合相关文献进行对比分析,以深化对非线性控制系统设计与仿真验证全过程的理解。
内容概要:本文档聚焦于采用BPSK和GMSK调制方式的Turbo码通信系统的研究与Matlab仿真实现,系统探讨了MSK/GMSK调制解调的基本原理、Turbo码的编码与译码机制以及二比特差分解调算法的具体实现。通过构建完整的通信链路模型,文档详细展示了调制、信道传输、解调及Turbo译码等关键环节的仿真流程,并对系统性能进行了全面评估,特别是误码率(BER)随信噪比(SNR)变化的曲线分析,为理解和优化现代数字通信系统提供了坚实的理论基础和实践指导。此外,文档还强调了GMSK作为一种连续相位调制技术,在提高频谱效率方面的优势,以及Turbo码作为强大前向纠错码在提升通信可靠性方面的重要作用。; 适合人群:具备通信原理基础知识和Matlab编程能力的高校学生、研究生及从事无线通信系统研发的工程技术人员,尤其适合正在进行相关课题研究或毕业设计的人员。; 使用场景及目标:① 学习并掌握GMSK与BPSK调制技术在Turbo码系统中的应用;② 实现并仿真Turbo码与不同调制方式结合的通信链路,分析其抗干扰与误码性能;③ 为通信系统仿真课程设计、科研项目或学术论文提供可复现的Matlab代码参考。; 阅读建议:建议读者结合通信原理教材,先理解Turbo码的编译码机制与GMSK调制特性,再对照Matlab代码逐步调试运行,重点关注调制解调模块与译码器的接口设计及仿真结果的分析方法。
内容概要:本文提出了一种基于TOGI-SOGI混合积分器的光储并网谐波自适应抑制方法,通过Simulink仿真实现,旨在提升光伏发电与储能系统并网过程中的电能质量。该方法创新性地融合三阶广义积分器(TOGI)与二阶广义积分器(SOGI)的优点,构建高性能混合积分结构,有效实现并网电流中基波分量的精确提取与谐波成分的自适应抑制,显著增强了系统的动态响应能力、稳态精度及抗干扰性能。文中详细阐述了控制策略的设计原理、系统建模步骤与仿真验证流程,并提供了完整的MATLAB/Simulink仿真资源,便于科研人员复现结果、深化理解并开展后续优化研究。; 适合人群:从事电力电子、新能源并网控制、电能质量治理及相关领域的研究生、高校科研人员和工程技术人员,尤其适合具备MATLAB/Simulink仿真基础和电力系统专业知识背景的研究者。; 使用场景及目标:①应用于光储并网系统中谐波抑制策略的设计与性能优化;②为相关领域学术论文的复现、算法改进与工程项目开发提供可靠的技术支持与实践范例;③推动高精度、自适应并网逆变器控制技术的研发与实际应用落地。; 阅读建议:建议读者结合所提供的仿真模型进行逐步操作与调试,重点关注TOGI-SOGI混合结构的工作机理及其在锁相环(PLL)与电流控制环路中的协同作用,深入理解关键参数的整定方法与仿真结果的分析逻辑,以全面掌握该谐波自适应抑制方法的核心技术要点与工程实现路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值