- 浏览: 1547385 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
http://www.codeproject.com/KB/macros/Lexware_AssemblyReference.aspx
Introduction
Visual Studio 2005 / 2008 both lack a good way to define assembly references per solution configuration (‘Debug’ or ‘Release’).
Background
There are some ways to define assembly references which change if the solution configuration changes, but they are not sufficient for larger projects. The following features of Visual Studio 2005 / 2008 are fine for small projects:
- Set a Project reference from one project to another. The projects must be all in one solution. This is not always possible in projects where a lot of developers are working on multiple projects lying in different solutions.
- Set a reference to an assembly lying in the output path of the project. Visual Studio 2005 searches for assembly references first in the output path of the project. A way to define assembly references per solution configuration is to put all assemblies in a common output directory (MSDN Article ). This is inflexible.
The Lexware Assembly Reference Tool fills this gap, by providing a
new tool window in Visual Studio 2005 / 2008, which allows you to
change ‘hard-coded’ assembly reference paths to flexible reference
paths which change depending on the solution configuration. The tool
detects ‘Debug’ or ‘Release’ in the assembly reference path and marks
the assembly in red to show you the potential problem you have, when
you build the project in another configuration. You only need to press
a button and all these paths will be converted to paths which depend on
the configuration of the project.
Additionally the tool provides the following features:
- Change the ‘Copy Local’ property
- Manipulate the ‘Special Version’ property
- Edit the assembly reference path (‘HintPath’)
- Convert a project reference into an assembly references
- Delete an assembly reference
After installing and starting the Add-In you can open the assembly reference tool via the Visual Studio 2005 / 2008 tools menu.
How it works
The general idea behind it
The tool allows flexible assembly reference paths by replacing
“\Debug\” or “\Release\” in the reference path against
“\$Configuration\”, which is a placeholder for the solution
configuration in Visual Studio 2005 / 2008. Visual Basic and CSharp
projects are able to replace the placeholder back to “\Debug\” or
“\Relase\” when trying to resolve an assembly path.
Since the
Visual Studio 2005 / 2008 object model doesn’t allow any change to a
reference path, the tool changes the path in the underlying project
file. It manipulates the tag , the path to the assembly, which is referenced.
When the tool saves the project file, Visual Studio notices that change and asks you to reload the project.
For
some features the tool holds a reference to the internal Visual Studio
representation of an assembly reference (VSLangProj80.Reference3),
which allows a manipulation of properties like ‘CopyLocal’,
‘SpecificVersion’ or deleting a reference. Changes to these properties
are directly reflected by the original property window of the assembly
reference in Visual Studio.
The Tool solution itself
The solution contains a CSharp and a setup project. The setup project was created with the Setup Project template. The CSharp project is originally created with a Visual Studio Add-In project template of Visual Studio 2005.
Visual Studio automatically creates a ‘Tool’ menu item for the add-in, if you choose so in the project wizard. If you select ‘I would like my Add-In to load, …’ Visual Studio loads your Add-In directly when it starts.
In the new project Visual Studio creates two files with the extension ‘AddIn’. One is lying in the project folder (e.g. ‘Lexware.Tools.AssemblyReferences.AddIn’) and this is used when the Add-In is deployed. The other one (e.g. ‘Lexware.Tools.AssemblyReferences - For Testing.AddIn’) is placed in the Visual Studio Add-In folder. This is the one which is used while debugging the Add-In. The Visual Studio Add-In folder is contained in your documents folder. For Windows Vista it should be found here: C:\Users\’Your User Name’\Documents\Visual Studio 2005\Addins. An Add-In file contains a full description of the Add-In. It provides a friendly name, the load behavior and other information, necessary for Visual Studio to display the Add-In in the ‘Add-in Manager’.
The Add-In
The Add-In project contains the file ‘connect.cs’, which contains the code connecting to Visual Studio. The class ‘Connect’ is called, when the Add-In starts. In fact it is defined in the ‘FullClassName’ tag of the ‘.Addin’ file described below.
The class Connect
The class Connect
implements the Visual Studio interface IDTExtensibility2
, which defines the Method OnConnection
.
This method is called, when Visual Studio loads the Add-In into its
memory. This is the place where you can add menu items and in this case
create a tool window.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; CreateToolWindow(); if (connectMode == ext_ConnectMode.ext_cm_UISetup) { object [] contextGUIDS = new object [] {}; Commands2 commands = (Commands2)_applicationObject.Commands; string toolsMenuName; try { // If you would like to move the command to a different menu, change the // word "Tools" to the English version of the menu. This code will take // the culture, append on the name of the menu then add the command to // that menu. You can find a list of all the top-level menus in the file // CommandBar.resx. ResourceManager resourceManager = new ResourceManager( " Lexware.Tools.AssemblyReferences.CommandBar" , Assembly.GetExecutingAssembly()); CultureInfo cultureInfo = new CultureInfo(_applicationObject.LocaleID); string resourceName = String .Concat(cultureInfo.TwoLetterISOLanguageName, LocalResources.ToolbarName); toolsMenuName = resourceManager.GetString(resourceName); } catch { // We tried to find a localized version of the word Tools, but one was // not found. // Default to the en-US word, which may work for the current culture. toolsMenuName = LocalResources.ToolbarName; } // Place the command on the tools menu. // Find the MenuBar command bar, which is the top-level command bar holding // all the main menu items: Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar = ( (CommandBars)_applicationObject.CommandBars)[" MenuBar" ]; // Find the Tools command bar on the MenuBar command bar: CommandBarControl toolsControl = menuBarCommandBar.Controls[toolsMenuName]; CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl; // This try/catch block can be duplicated if you wish to add multiple commands // to be handled by your Add-in, // just make sure you also update the QueryStatus/Exec method to include // the new command names. try { // Add a command to the Commands collection: Command command = commands.AddNamedCommand2(_addInInstance, " AssemblyReferences" , " Assembly Reference Tool" , " Checks and fixes assembly references. Uses placeholder for debug and release directory." , true , 0 , ref contextGUIDS, (int )vsCommandStatus.vsCommandStatusSupported + (int )vsCommandStatus.vsCommandStatusEnabled, (int )vsCommandStyle.vsCommandStyleText, vsCommandControlType.vsCommandControlTypeButton); // Add a control for the command to the tools menu: if ((command != null ) && (toolsPopup != null )) { command.AddControl(toolsPopup.CommandBar, 1 ); } } catch (ArgumentException) { // If we are here, then the exception is probably because a // command with that name // already exists. If so there is no need to recreate the command and we can // safely ignore the exception. } } }
When the user clicks your menu item, the method Exec
in the same class will be called. You can filter the commandName
, to know whether the called menu item was yours.
public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled) { handled = false ; if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) { if (commandName == " Lexware.Tools.AssemblyReferences.Connect.AssemblyReferences" ) { // Open Toolwindow CreateToolWindow(); handled = true ; return ; } } }
The tool window, which contains all the important code in this Add-In, is a UserControl. To create it, you can call CreateToolWindow2
. This method creates a new Visual Studio tool window and hosts a user control in it.
private void CreateToolWindow() { if (_toolWindow != null ) { _toolWindow.Activate(); } else { // This guid must be unique for each different tool window, // but you may use the same guid for the same tool window. // This guid can be used for indexing the windows collection, // for example: applicationObject.Windows.Item(guidstr) Windows2 windows2 = (Windows2)_applicationObject.Windows; Assembly asm = Assembly.GetExecutingAssembly(); object customControl = null ; string className = " Lexware.Tools.AssemblyReferences.ToolWindowControl" ; string caption = " Assembly References" ; _toolWindow = windows2.CreateToolWindow2(_addInInstance, asm.Location, className, caption, _toolWindowGuid, ref customControl); // Set the picture displayed when the window is tab docked (this causes // problems in Visual Studio 2008) try { _toolWindow.SetTabPicture(LocalResources.LexwareBmp.GetHbitmap()); } catch { } // When using the hosting control, you must set visible to true before calling // HostUserControl, otherwise the UserControl cannot be hosted properly. _toolWindow.Visible = true ; if (customControl != null ) { _toolWindowControl = (ToolWindowControl)customControl; _toolWindowControl.ApplicationObject = _applicationObject; _toolWindowControl.ParentToolWindow = _toolWindow; } } }
The ToolWindow
The tool window registers some events of the Visual Studio solution, document and the command object, so that changes in the solution will be noticed by the Add-In.
private void RegisterEvents() { if (_solutionEvents != null ) { UnregisterEvents(); } _solutionEvents = _applicationObject.Events.SolutionEvents; // register new events _solutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler( _solutionEvents_Opened); _solutionEvents.ProjectAdded += new _dispSolutionEvents_ProjectAddedEventHandler( _solutionEvents_ProjectAdded); _solutionEvents.ProjectRemoved += new _dispSolutionEvents_ProjectRemovedEventHandler( _solutionEvents_ProjectRemoved); _solutionEvents.ProjectRenamed += new _dispSolutionEvents_ProjectRenamedEventHandler( _solutionEvents_ProjectRenamed); _solutionEvents.AfterClosing += new _dispSolutionEvents_AfterClosingEventHandler( _solutionEvents_AfterClosing); _documentEvents.DocumentSaved += new _dispDocumentEvents_DocumentSavedEventHandler( _documentEvents_DocumentSaved); _commandEvents.AfterExecute += new _dispCommandEvents_AfterExecuteEventHandler( _commandEvents_AfterExecute); } private void _commandEvents_AfterExecute(string Guid, int ID, object CustomIn, object CustomOut) { // Command name: File.SaveSelectedItems // Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 331 // Command name: File.SaveAll // Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 224 // Command name: File.SaveSelectedItemsAs // Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 226 // Command name: Build.SolutionConfigurations // Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 684 // Command name: Project.Addreference // Command GUID/ID: {1496A755-94DE-11D0-8C3F-00C04FC2AAE2}, 1113 if (((Guid == " {5EFC7975-14BC-11CF-9B2B-00AA00573819}" ) && (ID == 331 )) || ((Guid == " {5EFC7975-14BC-11CF-9B2B-00AA00573819}" ) && (ID == 224 )) || ((Guid == " {5EFC7975-14BC-11CF-9B2B-00AA00573819}" ) && (ID == 226 ))) { ReadAllReferences(); } else if ((Guid == " {1496A755-94DE-11D0-8C3F-00C04FC2AAE2}" ) && (ID == 1113 )) { ParentToolWindow.Activate(); } }
When the solution changes, the Add-In iterates the projects
contained in the solution and reads in the references of each project.
It adds each reference to the list view and puts an instance of the
class AssemblyReferenceInformation
at the tag of the ListViewItem
. This instance contains information about the project file (.csproj or .vbproj) and the assembly reference (VSLangProj80.Reference3
), which will be used when manipulating the reference.
private void ReadAllReferences() { ClearHintLists(); if ((_applicationObject != null ) && (_applicationObject.Solution != null )) { // Walk through the projects of the solution and search for assembly references foreach (Project currentProject in _applicationObject.Solution.Projects) { ReadProjectReferences(currentProject); } } } private void ReadProjectReferences(Project currentProject) { try { if (currentProject != null ) { VSProject2 visualStudioProject = currentProject.Object as VSProject2; // The current project can be a 'real' project, but it can also be a // folder (see else if) if (visualStudioProject != null ) { string projectFullName = currentProject.FullName; if (!string.IsNullOrEmpty(projectFullName)) { FileInfo projectFileInfo = new FileInfo(projectFullName); // If it is a csproj or a vbproj, add it the the list view if (projectFileInfo.Exists && ((projectFileInfo.Extension == _csProjectFileExtension) || (projectFileInfo.Extension == _vbProjectFileExtension))) { // Add a group for this project ListViewGroup projectGroup = GetProjectGroup(currentProject); AddAssemblyHintsToListView(currentProject, projectFullName, projectGroup, visualStudioProject); } } } else if ((currentProject.ProjectItems != null ) && ( currentProject.ProjectItems.Count > 0 )) { // Project Item Type GUID // Physical File {6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C} // Physical Folder {6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C} // Virtual Folder {6BB5F8F0-4483-11D3-8BCF-00C04F8EC28C} // Subproject {EA6618E8-6E24-4528-94BE-6889FE16485C} // The projects contains a sub folder -> search for projects in // these folders foreach (ProjectItem currentProjectItem in currentProject.ProjectItems) { if (currentProjectItem.SubProject != null ) { ReadProjectReferences(currentProjectItem.SubProject); } } } } // Enable fixit button, if there is something to fix toolStripButtonFixIt.Enabled = (_needsToBeSaved.Count > 0 ); } catch (Exception ex) { ShowMessage(ex); } }
When the user hits the 'FixIt' button, the tool changes the underlying project file. It save all projects which needs to be saved, due to an incorrect assembly path.
private void SaveDirtyProjects() { try { foreach (KeyValuePair project in _needsToBeSaved) { XmlDocumentHolder documentHolder = project.Value; SaveProject(documentHolder); } } catch (Exception ex) { ShowMessage(ex); } } private void SaveProject(XmlDocumentHolder documentHolder) { string projectName = documentHolder.Project.FullName; if (!documentHolder.Project.Saved) { MessageBox.Show(" Please save all projects before you fix the problems." ); return ; } // Check out the project if ((_sourceControl != null ) && (_sourceControl.IsItemUnderSCC(projectName)) && (!_sourceControl.IsItemCheckedOut(projectName))) { _sourceControl.CheckOutItem(projectName); } using (XmlTextWriter writer = new XmlTextWriter(documentHolder.ProjectFileName, Encoding.UTF8)) { writer.Formatting = Formatting.Indented; documentHolder.XmlDocument.Save(writer); } }
Visual Studio notices that the tool changed the project file and asks you to reload the project.
The setup project
The setup project deploys the Add-In to the AddIns folders of Visual Studio 2005 and Visual Studio 2008.
It
automatically detects newer and older version, older versions will be
removed before installing a new version. To create a new setup version
for the Add-In, only change the version of the setup. Visual Studio
will generate a new ProductCode for you, but it will not touch the
UpgradeCode. With the combination of codes, Windows Installer is able
to detect and update older or newer versions of the Add-In.
Requirements to build the solution
To build the solution, you need Visual Studio 2008. The Add-In is tested on Visual Studio 2005 and 2008 Team Developer and Team Suite.
History
no changes
<!-- Main Page Contents End -->License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
About the Author
Thomas Dörr
Member |
Thomas has been programming in C, C++, VB and C# since many years.
He works as a Senior Software Architect for Lexware GmbH & Co.KG in
Freiburg, Germany.
|
Other popular Macros and Add-ins articles:
-
Undocumented Visual C++
Spelunking in the Badlands of MSDEV
-
CodePlotter 1.6 - Add and edit diagrams in your code with this 'Visio-like' tool
A Visual Studio addin for creating and editing ASCII diagrams in source files
-
Versioning Controlled Build
A Visual Studio add-in and command-line utility that automates versioning of .NET and VC++ projects
-
Useful enhancements for Visual Studio .NET
Several tools packed into one addin for Visual Studio .NET
-
WTL Helper
Add-in for Microsoft VC++.NET 2003 that helps to insert message handlers for WTL.
发表评论
-
WPF/Silverlight深度解决方案:(六)HLSL自定义渲染特效之完美攻略(上)
2010-01-13 16:40 2383Shader Effect 中文名称为“渲染特效”或“滤镜” ... -
Silverlight Image Source URI : 一个反斜杠引发的血案
2010-01-12 13:10 3596Silverlight Image Source U ... -
SilverLight跨域访问及其常用的几种解决方法
2010-01-06 16:59 5438SilverLight 出于对安全性的考虑默认情况下对UR ... -
有关silverlight中调用webservice的问题!!
2010-01-06 15:07 3351System.InvalidOperationExceptio ... -
Server.UrlEncode、HttpUtility.UrlDecode不同编码
2010-01-06 12:39 3279Server.UrlEncode、HttpUtility.U ... -
LINQ to XML一些基本查询
2010-01-06 12:34 2045/**/ /// /根据元素的名称进行筛选(有命名空 ... -
使用LINQ to XML来查询XML
2010-01-06 12:16 2758使用LINQ to XML来查询XML ... -
给弟弟起步学习软件开发(.Net 方向)的指导,博友们帮助看看,提些意见给他。
2010-01-06 11:15 977在我学习的时候走了至少3年的弯路,那个时候没有人告诉我该如 ... -
LINQ to XML 用 LINQ 查询 XML
2010-01-06 11:15 1517LINQ to XML 用 LINQ 查询 XML ... -
一个实例掌握linq to XML增查删改
2010-01-06 11:10 2254最近忽然想把过去写的I ... -
使用XML LINQ查询和转换XML
2010-01-06 10:37 1500本章包括 n XML LI ... -
XML LINQ简介
2010-01-06 10:32 1571本章包括 n XML LINQ ... -
.Net 中string与byte[]相互转换
2010-01-05 16:43 2438public static byt ... -
正则表达式收集(持久更新)
2010-01-04 15:56 1128正则表达式收集( ... -
网上搜集的webbrower的资料,很有借鉴价值
2010-01-04 15:54 1904http://hi.baidu.com/lovemoe/ ... -
Visual Studio的 诡异bug(mscorlib无法引用)
2010-01-04 09:27 2524这个需要手动修改项目的配置文件 添加 <Re ... -
[C#实战]Google Map开发实战参考
2010-01-03 16:48 5779[C# 实战] ... -
复习一下 .Net: delegate(委托)、event(事件) 的基础知识,从头到尾实现事件!
2010-01-02 23:33 2573有这样一道 .Net/C# 面试题:请以事件的概念实现 ... -
ADO.NET Entity Framework简介
2009-12-21 18:46 2705下一代的ADO.NET的目标是要解决关系数据模型和实际应用程序 ...
相关推荐
这些类的特殊之处在于您具有对Lexware数据库的完全访问权限(包括写入),并且-与已知的ODBC解决方案相反-不必打开Lexware! 执照 该库受。 NuGet软件包 描述 徽章 基础库 Lexware基本组件 NHibernate组件 全球...
网络上的 Lexware 信息和工具 有关 Web 文档和在线工具,请参阅 。 在这个存储库中: ├── lw2xml : Validator and dictionary formatter ├── analysis : Xquery extraction from xhtml ├── pages_md : ...
"cteward-sa-meckerfritze"项目似乎是一个针对"Mtefritze"(可能是 Lexware 公司的一个产品)的自动化脚本集,由用户"cteward"创建。"Lexware"是一家知名的德国软件公司,其产品主要面向小型和中型企业,提供财务、...
这是在簿记框架内完成的,为此还需要一个簿记程序——一个接口被内置到簿记程序中(例如“Lexware Buchhalter”)。 捐款可以通过会计部门作为俱乐部捐款(非物质领域)或作为参与者费用(需缴纳销售税!)在发票上...
MATLAB数字滤波器设计及其在语音信号去噪中的应用:源码详解与报告分享,MATLAB 数字滤波器设计 及其语音信号去噪应用。 (供学习交流)带源码,带注释。 有代码和报告。 ,核心关键词:MATLAB; 数字滤波器设计; 语音信号去噪应用; 源码; 注释; 代码与报告。,"MATLAB数字滤波器设计及其在语音信号去噪中的应用:带源码注释与报告"
COMSOL软件模拟三维电化学腐蚀过程的研究分析,comsol三维电化学腐蚀。 ,核心关键词:Comsol;三维电化学;腐蚀;模型模拟;电化学腐蚀过程。,"Comsol模拟:三维电化学腐蚀过程解析"
基于COMSOL的降雨入渗模型:边坡与渗流边界下的强度折减塑性形变研究,comsol降雨入渗模型,边坡降雨边界与渗流边界 强度折减塑性形变 ,comsol降雨入渗模型; 降雨边界; 渗流边界; 强度折减; 塑性形变,"COMSOL降雨入渗模型:边坡渗流与强度折减塑性形变分析"
2025员工安全意识培训试题及答案.docx
Python自动化办公源码-06在Word表格中将上下行相同内容的单元格自动合并
基于深度学习的神经网络技术在信息通信领域的应用研究.pdf
1.内容概要 通过KNN实现鸢尾花分类,即将新的数据点分配给已知类别中的某一类。该算法的核心思想是通过比较距离来确定最近邻的数据点,然后利用这些邻居的类别信息来决定待分类数据点的类别。 2.KNN算法的伪代码 对未知类别属性的数据集中的每个点依次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离; (2)按照距离递增次序排序; (3)选取与当前点距离最小的k个点; (4)确定前k个点所在类别的出现频率; (5)返回前k个点出现频率最高的类别作为当前点的预测分类。 3.数据集说明 代码使用`pandas`库加载了一个名为`iris.arff.csv`的数据集 4.学习到的知识 通过鸢尾花分类学习了KNN算法,选择样本数据集中前k个最相似的数据,就是KNN算法中k的出处。k值过大,会出现分类结果模糊的情况;k值较小,那么预测的标签比较容易受到样本的影响。在实验过程中,不同的k值也会导致分类器的错误率不同。KNN算法精度高、无数据输入的假定,可以免去训练过程。但是对于数据量较多的训练样本,KNN必须保存全部数据集,可能会存在计算的时间复杂度、空间复杂度高的情况,存在维数灾难问
感应电机控制与矢量控制仿真:磁链闭环、转速闭环与电流闭环的综合应用研究,感应电机控制仿真,矢量控制,异步电机仿真,磁链闭环,转速闭环,电流闭环 ,核心关键词:感应电机控制仿真; 矢量控制; 异步电机仿真; 磁链闭环; 转速闭环; 电流闭环,"感应电机矢量控制仿真:磁链、转速、电流三闭环异步电机模拟"
威纶通TK6071IP触摸屏锁屏宏指令程序详解:注释清晰,便于理解与学习,威纶通触摸屏锁屏宏指令程序 ~ 威纶通触摸屏锁屏宏指令程序,TK6071IP触摸屏 利用宏指令程序来控制,宏指令注释清晰,方便理解程序。 具有很好的学习意义和借鉴价值。 ,关键词:威纶通触摸屏;锁屏宏指令程序;TK6071IP触摸屏;宏指令控制;注释清晰;学习借鉴。,威纶通触摸屏宏指令程序:清晰注释,学习借鉴之利器
2025输血相关法律法规试题考核试题及答案.docx
Python游戏编程源码-2048小游戏
2025最新康复医学概论考试题库(含答案).doc
Python自动化办公源码-09用Python批量往Word文档中指定位置添加图片
高品质车载充电器技术解决方案:含原理图、PCB图、C源代码及DSP控制器资料,附赠CDCDC模块资料,车载充电器 3Kw OBC 车载充电器 含原理图、PCB图、C源代码、变压器参数等生产资料。 附赠15kwdcdc模块资料 1、这款产品的方案采用的是dsp2803x系列。 2、原理图和Pcb采用AD绘制。 此方案仅供学习 ,车载充电器; 3Kw OBC; 原理图; PCB图; C源代码; 变压器参数; 生产资料; dsp2803x系列; AD绘制; 15kwdcdc模块资料,3Kw车载充电器方案:DSP2803x系列原理图、PCB图及C源学习包
2025最新康复医学考试题及答案.docx
内容概要:本文介绍了一种用于视频处理的新型卷积神经网络(CNN)加速器。主要创新点在于引入了混合精度计算、跨帧数据重用控制器及引擎,以及混合位宽差帧数据编码解码器。这些特性有效解决了视频帧间的时空相关性和稀疏性带来的挑战,提高了处理速度并降低了功耗和带宽需求。具体来说,通过对连续帧的数据相似度利用,可以在保持高精度的同时减少计算量和内存访问次数;通过多类型稀疏卷积聚类数组实现了对现代稀疏神经网络的支持;并通过混合位宽度编码减少了离芯片外的数据传输量,最高达到68%。 适用人群:从事深度学习硬件加速设计的研究人员和技术爱好者;关注AI边缘计算领域的从业者。 使用场景及目标:适用于自动驾驶汽车摄像头、监控系统等实时视频流应用场景。旨在为开发者提供高效的低能耗解决方案,在有限的时间和资源下完成大量的图像信号处理任务,如跟踪、分类等。 其他说明:文中还详细描述了芯片的设计细节,测试平台构建,以及不同模型(如MobileNet)在网络上的实际性能表现。