`
yiliner
  • 浏览: 218449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GMF常见问题

    博客分类:
  • GMF
阅读更多
1、问题:连接线旁边没有文字标签和箭头

文字标签:在gmfmap里的Connection Mappping下增加Label Mapping元素;箭头:在gmfgraph里为Polyline Connection指定一个Polyline Decorator作为source/target decoration,要为这个Decorator创建一些Template Point来决定箭头的形状,例如指定(-1,-1), (0,0), (-1,1)。

2、让一个图形可以在另一个图形里随意改变位置

在gmfgen里把作为容器的那个图形的Gen Compartment里把Listlayout属性改为false。

3、隐藏图形标签文字前的小图标

在gmfgen里把相应的Gen Node Label元素的Element Icon属性改为false(但重新生成gmfgen时这个属性会被覆盖)

4、让标签里同时显示和编辑多个属性

在gmfmap里把相应的Label Mapping元素的View Pattern属性改为类似“属性1:{0},属性2:{1}”的形式。

5、问题:跨Compartment进行连线操作时会创建两条连线

GMF的bug,见https://bugs.eclipse.org/bugs/show_bug.cgi?id=148021,在你的XXXDiagramCanonicalEditPolicy里覆盖方法:

protected boolean shouldHandleNotificationEvent(Notification event) {
    return false;
}

6、让Label出现在图元外面

在gmfgraph里定义这个Figure时把Label定义在外面,而非定义为Figure的子元素。

7、在gmfgraph里设置一个Figure使用GridLayout后生成的代码无法正确编译

GMF的bug,见https://bugs.eclipse.org/bugs/show_bug.cgi?id=133279

8、改变Figure的缺省大小

在gmfgraph里为Figure增加Preferred Size子元素;若想让图形尺寸小于40x40象素,要覆盖XXXEditPart里的createNodePlate()方法。在GMF2.0里,使用DefaultSizeFacet,见http://dev.eclipse.org/newslists/news.eclipse.modeling.gmf/msg01546.html

9、禁止用户修改图元的尺寸

在gmfgraph里将此Node的Resize Constraint属性值改为“NONE”(但size-on-drop功能仍存在,也就是用户仍然可以在创建时指定尺寸)。

10、让Compartment在容纳不下子图形时自动显示滚动箭头

在genmodel的GenDiagram元素里改Units属性为“himetric”(经测试对GMF1.0不起作用),见https://bugs.eclipse.org/bugs/show_bug.cgi?id=140789

11、为画布Canvas指定Layout

GMF1.0不支持,需要手工改代码,见https://bugs.eclipse.org/bugs/show_bug.cgi?id=139951

12、Border Item

Border Item是指只能紧贴其他图元运动的图形,GMF1.0可通过打patch实现这个功能,见https://bugs.eclipse.org/bugs/show_bug.cgi?id=124826;GMF2.0开始支持。

13、规定连接线的约束,例如规定source和target不能是同一对象

在gmfmap里定义,在Link Mapping元素下定义Link Constraint元素,缺省使用OCL,见教程http://wiki.eclipse.org/index.php /GMF_Tutorial_Part_2#Link_Constraints;不论使用OCL或是Java,在 XXXBaseItemSemanticEditPolicy里会生成LinkConstraint类,在生成command前检查是否满足这些 constraint。

14、Audit

定义的constraint出现在com.your.diagram项目的plugin.xml里,作为constraintProvider扩展;为了让这些constraint生效,要在gmfgen的Gen Diagram元素里设定Validate Enabled/Decorator属性值为true,并将优先级(Validation Provider Priority, Validation Decorator Provider Priority)设定为medium(非lowest)才会在Diagram菜单里出现Validate命令。

若是在gmfmap里选择使用Java验证,则在gmfmap里指定的是一个Java方法名,生成代码后,应在XXXValidationProvider类里应实现这个方法。

15、GMF里从EditPart得到Semantic Model

因为GMF里EditPart#getModel()方法得到的是Notation Model里的对象,如Node或Edge,所以可以使用这样的方法得到真正的业务对象: ((org.eclipse.gmf.runtime.notation.View) EditPart.getModel()).getElement()或ViewUtil.resolveSemanticElement(view)

16、问题:从gmfgen生成代码时产生java.lang.ClassCastException: org.eclipse.jdt.internal.core.jdom.DOMMethod

删除原先生成的代码中无法编译的类,重新生成。

17、在gmfgraph里定义Polyline的图形

在Rectangle上画Polyline,注意是固定大小的

18、问题:每次重新生成代码后,在plugin.xml里的修改会丢失

GMF1.0里生成代码时不能保留plugin.xml里的任何修改,从GMF2.0开始用户可以在plugin.xml里标记不要覆盖的区域

19、问题:Outline树视图里的节点没有图标

在plugin.xml里找到org.eclipse.gmf.runtime.emf.type.core.elementTypes扩展点,在下面相应的元素里指定icon属性,见http://dev.eclipse.org/newslists/news.eclipse.modeling.gmf/msg00341.html,但我在GMF1.0里测试不起作用,何况每次生成代码时这个文件都会被覆盖。

20、问题:提示java.lang.IllegalStateException: Cannot modify resource set without a write transaction异常

在GMF里修改Model要通过在TransactionalEditingDomain里执行命令完成,GMF提供的RecordingCommand是不错的选择,它为我们提供了Undo支持,我们只要实现执行部分的代码就可以了,下面是一个例子:

TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(myElement);
domain.getCommandStack().execute(new RecordingCommand(domain) {
    @Override
    protected void doExecute() {
        //Do anything
    }
});

若是在EditPolicy里需要返回一个Command,用下面的代码:

AbstractTransactionalCommand command = new AbstractTransactionalCommand(TransactionUtil
        .getEditingDomain(myElement), "Command Name", Collections.EMPTY_LIST) {
    @Override
    protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info)
            throws ExecutionException {
        //Any modification to the model
        return CommandResult.newOKCommandResult();
    }
};

21、问题:创建图元时提示异常“java.lang.IllegalArgumentException: Figure must be a child”

Workaround:注释掉产生异常的setRatio()方法里的全部内容。

22、问题:在AbstractBorderItemEditPart子类的getPrimaryDragEditPolicy()方法里提示ClassCastException异常

在gmfgraph里检查作为BorderItem的那个Node的Resize Constraint属性是否改过,若为缺省的NSEW则对应的editpart不会生成这个方法,对BorderItem(即Affixed Node Side属性不为NONE的Node)来说这个属性虽然设置为NSEW也无法改变大小。相关链接:https://bugs.eclipse.org/bugs/show_bug.cgi?id=155698

23、如何禁用PopupBar和ConnectionHandler功能(鼠标停止在图形上时出现的连线符号)

在需要禁用该功能的EditPart的createDefaultEditPolicies()方法的最后加下面的语句:

//禁用PopupBar
removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
//禁用ConnectionHandler
removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);

24、使用ConnectionHandler连接到canvas上已存在的图形或创建新的图形

覆盖XXXModelingAssistantProvider里的几个get方法,要连接到已存在的图形覆盖 getRelTypesOnSourceAndTarget()方法,创建新的作为源的图形覆盖getRelTypesOnSource()和 getTypesForTarget()方法,创建新的作为目标的图形应覆盖getRelTypesOnTarget()和 getTypesForSource()方法。具体代码可参考LogicModelingAssistantProvider里的实现。

25、给画布加背景图

http://www.cnblogs.com/bjzhanghao/archive/2007/03/13/673273.html
BTW, 以上所有问题只针对GMF1.0,GMF2.0的gmfmap模型和gmfgen模型与前一版本有所不同,一些问题可能也在GMF2.0里不存在了。

26、使用Label作为一个editpart的figure

在.gmfgraph里不用创建Node,只用Diagram Label即可;在.gmfmap里,Node Mapping的Diagram Node属性指定为这个Diagram Label,下面的Feature Label Mapping的Diagram Label属性也是这个Diagram Label。在parent使用ListLayout的时候这个方法比较有用。GMF的mindmap例子里的ThreadItem就是这样一个例子。

27、若类A包含B和C,且C继承B,则试图让A的图形同时包含B和C会造成运行时异常,异常信息是无法创建C的View,可能是GMF目前版本的bug。解决办法是建立抽象类D,让B和C都继承D,并且让A包含D。(update 2007/7/23: 有一点像这个bug,异常信息差不多)

28、用渐变色填充非矩形图形

覆盖图形的fillShape()方法,利用swt的Path,但draw2d的graphics对它的支持似乎不好。http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg13928.html

29、(这条实际是关于EMF的,anyway)为TableViewer增加Drag and Drop支持

非常简单,见下面的代码(tv是TreeViewer的一个实例)

int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
tv.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(tv));
tv.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, tv));

30、从EObject得到TransactionalEditingDomain

TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(eobject);

31、让Label换行

.gmfgraph里无法指定Label是否换行,要修改生成的代码:

fFigureXXXFigure = new WrapLabel();
fFigureXXXFigure.setTextWrap(true);//add this line
fFigureXXXFigure.setText("<>");

另外可以在.gmfgraph里指定需要的布局以便让换行Label更好的显示。给Label设置Margin Border会有问题(Label被推向右侧),可以给Parent图形设置Margin Border,或建一个RectangleFigure来实现设置文字边距的需求。

32、定制Project Exploerer里显示的内容

修改.gmfgen里Gen Navigator节点下面的元素,见http://wiki.eclipse.org/index.php/GMF_Tutorial_Part_4#Project_Navigator

33、可缩放的多边形

在.gmfgraph里定义为Scalable Polygon,和普通Polygon一样要定义template points,每个点的坐标绝对值不是关键,但它们之间的位置关系要保证。我发现绝对值定义得大一些时,得到的结果会更精确。下面是一个可缩放菱形的定义:
<descriptors name="ConditionFigure">
 
  <actualFigure xsi:type="gmfgraph:ScalablePolygon" name="MyDiamondFigure">
    <template x="200" y="0"/>
    <template x="0" y="200"/>
    <template x="200" y="400"/>
    <template x="400" y="200"/>
    <template x="200" y="0"/>
  </actualFigure>
</descriptors>

34、生成的RCP应用里,保存操作后经常提示“the file has been modifying on the file system...”信息。

GMF太“聪明”了,每次save后都要记录文件修改的timestamp,一旦发现不符则认为有其他程序修改了这个文件。要让RCP应用不检查当前编辑的文件是否被其他程序修改,可覆盖XXXDocumentProvider的isSynchronized()方法,让它直接“return super.isSynchronized(element);”。(但要小心,这有可能造成用户的修改无法被保存的情况。)

35、生成的GMF应用程序里,打印功能是禁用状态。
打开.gmfgen文件,修改Gen Plugin的"Printing Enabled"属性为true,再重新生成代码。这样除了 Print变为可用外,GMF还会生成一个XXXContributionItemProvider类在主菜单上添加Print Preview选项。 http://dev.eclipse.org/newslists/news.eclipse.modeling.gmf/msg02207.html

36、(实际是Eclipse OCL问题)脱离Eclipse环境使用OCL时,报异常java.lang.NoClassDefFoundError: lpg/lpgjavaruntime/RuleAction

Eclipse OCL依赖lpg库(LALR parser generator,使用EPL协议),在RCP里使用OCL需要把net.sourceforge.lpg.lpgjavaruntime这个插件加在dependencies列表里。参考链接

37、(还是OCL问题)Eclipse OCL实现里,OCL语句里各集合类型与ecore里集合类型的映射:
Collection Type isUnique isOrdered
Bag N N
Sequence N Y
Set Y N
OrderedSet Y Y

所以,如果一个EList在ecore里定义为Unique且Ordered(即缺省定义)时,在OCL里应该用OrderedSet类型,例如:XXX->allInstances()->asOrderedSet()或OrderedSet{object1, object2},等等。

38、在画布上创建一个元素(包括连接)后根据当前模型状态自动设置某属性值:

(GMF允许通过多种语言如ocl、regexp和java来实现初始值的设置,这里以java为例)在xxx.gmfmap文件里,找到这个元素对应的Mapping节点(如Node Mapping或Link Mapping),点右键新建一个Feature Seq Initializer元素,在这个元素上点右键再新建一个Feature Value Spec元素,设置后者的Feature为想要设置的类型,语言选java,在Body属性里输入一个方法名,例如 “initialMyFeature”。重新生成.gmfgen和代码,GMF会在名为ElementInitializers.java的文件里生成 initialMyFeature()这个空壳方法,实现它即可。

39、新建向导结束后,生成一个非空的模型文件。(Customize新创建的模型文件)

修改XXXDiagramEditorUtil#createInitialModel()方法。

40、在partition diagram里,从shortcut到一个正常节点间的连线在关闭editor后再次打开时丢失(2008.1.4)

原因不明,暂时的解决方法是注释掉XXXCanonicalEditPolicy#refreshConnections()方法里的deleteViews(existingLinks.iterator()),其中XXX代表link元素的父元素,例如Diagram。(这个解决方法有严重问题,会造成Initialize Diagram时丢失全部连接)。新探索出来的解决方法如下,覆盖XXXCanonicalEditPolicy#sholdDeleteView()方法:
/** *//**
* @generated NOT
*/
protected boolean shouldDeleteView(View view) {
    if(view instanceof Edge){
        Edge edge = (Edge)view;
        View sourceView = edge.getSource();
        View targetView = edge.getTarget();
        if(sourceView.getEAnnotation("Shortcut")!=null
                || targetView.getEAnnotation("Shortcut")!=null){
            return false;
        }
    }
    return true;
}

41、删除右键菜单里不需要的菜单项

在plugin.xml里声明contributionItemProviders扩展点,在popupContribution下指定如下元素:
<popupPredefinedItem id="autoSizeAction"remove="true"/>

一些GMF Runtime定义的ID:deleteFromModelAction, navigateGroup, fileMenu, toolbarArrangeAllAction, addGeoShapesGroup, addGeoShapes2Group

详见org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds

42、在单独的编辑窗口里编辑子图(Diagram Partitioning)

http://wiki.eclipse.org/Diagram_Partitioning

43、在单独的项目(非GMF生成的xxx.diagram项目)里扩展DiagramEditor能识别的adapter类型:

在单独项目的Activator的start()方法里用类似下面的代码,这样就不需要直接修改生成的XXXDiagramEditor#getAdapter()方法了(因为我们希望把定制的内容尽量放在生成的项目以外):
//Register adapters for ERM reports and charts
Platform.getAdapterManager().registerAdapters(new IAdapterFactory() {

    /** *//**
     * @see org.eclipse.core.runtime.IAdapterFactory
     */
    public Object getAdapter(Object adaptableObject, Class adapterType) {
        ErmDiagramEditor editor = (ErmDiagramEditor) adaptableObject;
        Process process = (Process) editor.getDiagram().getElement();
        if (adapterType == IRiskImportancePage.class) {
            return new RiskImportancePage(process);
        } else if (adapterType == IRiskDrillDownPage.class) {
            return new RiskDrillDownPage(process);
        }

        return null;
    }

    /** *//**
     * @see org.eclipse.core.runtime.IAdapterFactory
     */
    public Class[] getAdapterList() {
        return new Class[] { IRiskImportancePage.class, IRiskDrillDownPage.class };
    }

}, ErmDiagramEditor.class);
分享到:
评论

相关推荐

    Java初学小作业,文件操作

    Java初学小作业,文件操作

    一键创建WiFi无线热点工具

    本工具用于在支持无线网络的电脑上输入SSID和密码后一键创建WIFI热点

    4.3 信息检索与问题解决 openmv+STM32串口通信 openmv串口通信openmv识别物体 openmv神经网络训练 openmv openmv+STM32串口通信 op.md

    4.3 信息检索与问题解决 openmv+STM32串口通信 openmv串口通信openmv识别物体 openmv神经网络训练 openmv openmv+STM32串口通信 op

    机器人轨迹定位中EKF算法与里程计算法的精度对比及应用

    内容概要:本文详细探讨了EKF(扩展卡尔曼滤波)算法与传统里程计算法在机器人轨迹定位和跟踪中的性能差异。文中通过具体代码实例展示了两种方法的工作原理,并通过实验数据对比了两者的定位精度。里程计算法由于误差累积问题,定位精度较低,平均误差达到1.0283米;而EKF算法通过融合多种传感器数据并不断修正,显著提高了定位精度,平均误差仅为0.0716米。此外,文章还讨论了EKF算法的局限性和应用场景。 适合人群:从事机器人研究、开发的技术人员,尤其是关注机器人定位和导航系统的工程师。 使用场景及目标:适用于需要高精度机器人定位和跟踪的应用场景,如自动驾驶、仓储物流自动化等。目标是帮助技术人员选择合适的定位算法,优化机器人系统的性能。 其他说明:尽管EKF算法在大多数情况下表现出色,但在某些极端条件下(如急转弯)仍可能存在误差,此时可以考虑使用更高级的滤波算法,如UKF(无迹卡尔曼滤波)。

    基于微信小程序的一款模拟面试软件源码(使用微信Web开发者工具来实现用在线答题,支持在线面试,观看面试视频,投简历,刷新招聘信息、发布招聘信息等功能).zip

    1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息等)正在做课程设计、期末大作业和毕设项目的学生、或者相关技术学习者作为学习资料参考使用。 3、该资源包括全部源码,需要具备一定基础才能看懂并调试代码。 大学生创新创业项目-基于微信小程序的一款模拟面试软件源码(使用微信Web开发者工具来实现用在线答题,支持在线面试(视频面试),可以观看面试视频,可以投简历,随时刷新招聘的信息、发布招聘信息、收藏文章等功能).zip 大学生创新创业项目-基于微信小程序的一款模拟面试软件源码(使用微信Web开发者工具来实现用在线答题,支持在线面试(视频面试),可以观看面试视频,可以投简历,随时刷新招聘的信息、发布招聘信息、收藏文章等功能).zip 大学生创新创业项目-基于微信小程序的一款模拟面试软件源码(使用微信Web开发者工具来实现用在线答题,支持在线面试(视频面试),可以观看面试视频,可以投简历,随时刷新招聘的信息、发布招聘信息、收藏文章等功能).zip 大学生创新创业项目-基于微信小程序的一款模拟面试软件源码(使用微信Web开发者工具来实现用在线答题,支持在线面试(视频面试),可以观看面试视频,可以投简历,随时刷新招聘的信息、发布招聘信息、收藏文章等功能).zip 大学生创新创业项目-基于微信小程序的一款模拟面试软件源码(使用微信Web开发者工具来实现用在线答题,支持在线面试(视频面试),可以观看面试视频,可以投简历,随时刷新招聘的信息、发布招聘信息、收藏文章等功能).zip

    (源码)基于Go语言的数据库智能迁移工具.zip

    # 基于Go语言的数据库智能迁移工具 ## 项目简介 本项目是一个基于Go语言的数据库智能迁移工具,旨在帮助开发者方便、高效地进行数据库版本管理和迁移。通过简单的配置和SQL脚本,用户可以轻松地进行数据库结构的更新和数据的迁移。 ## 项目的主要特性和功能 1. 支持多种数据库涵盖MySQL、PostgreSQL,可按需选择。 2. 配置文件解析解析YAML格式配置文件,获取数据库连接、迁移目录、日志路径等参数。 3. 迁移文件过滤忽略以"ignore"开头的SQL文件,避免误执行。 4. 版本管理按文件名判断版本,依版本号顺序执行迁移脚本,保证迁移连续性。 5. 自动执行SQL脚本自动执行迁移目录下SQL文件,完成数据库结构更新和数据迁移。 6. 通知功能可通过企业微信等方式发送通知,告知迁移结果或提醒异常。 7. 日志记录详细记录迁移过程日志,便于追踪排查问题。 ## 安装使用步骤 1. 已下载项目的源码文件。

    数据迁移工具.exe

    本工具用于将一台电脑上的个人数据快速备份到移动介质上,然后再将备份的数据从移动介质上还原到另一台电脑中,实现用户数据的快速迁移。

    【操作系统安装】Ubuntu 20.04详细安装与配置教程:从下载到系统优化全流程指导

    内容概要:本文档详细介绍了 Ubuntu 20.04 的安装步骤,包括从下载镜像到安装后的配置。首先,用户需要访问 Ubuntu 官网下载 ISO 文件,并通过工具如 Rufus 或命令行工具 `dd` 制作启动 U 盘。接着,设置 BIOS 使 U 盘成为第一启动项,进入 Ubuntu 安装界面。在安装过程中,用户可以选择安装语言、连接网络、选择安装类型(普通或最小安装)、进行磁盘分区(可选),以及设置用户信息

    由Landsat 08卫星拍摄的7176张地形识别图像数据集

    数据说明: 由Landsat 08卫星拍摄的山区、森林覆盖和沙漠图像组成的数据集,为遥感分析的各种应用提供了宝贵的资源。每幅图像的分辨率为256x256像素,比例尺范围为2公里至50公里每厘米,该数据集提供了高细节水平和覆盖范围,可用于分类和分割任务。 对于这个数据集,一个潜在的开发想法是实施机器学习模型,用于自动分类图像中的土地覆盖类型。通过在这个数据集上训练深度学习网络,可以创建一个能够准确识别和分类不同土地覆盖类别的模型,例如山脉、森林和沙漠。这将对环境监测、土地利用规划和保护工作产生重大影响。 该数据集的另一个可能应用是在变化检测分析领域。通过比较在不同时间点拍摄的图像,可以识别和分析土地覆盖模式的变化,如森林砍伐、城市化或自然灾害。这些信息可用干评估人类活动对环境的影响,监测植被健康状况的变化或预测土地覆盖动态的未来趋势。 此外,该数据集可用于开发图像分割算法,这涉及将图像划分为多个区域或感兴趣的对象。通过对这一数据集应用先进的图像处理技术,将有可能在图像中准确划定不同土地覆被类型的界限,从而能够对数据进行更详细的分析和解释。

    增材制造中选区激光熔化与电子束选区熔化的ANSYS Fluent高斯热源模拟及应用

    内容概要:本文详细介绍了选区激光熔化(SLM)和电子束选区熔化(EBM)这两种增材制造技术的热源模拟方法。文中首先解释了这两种技术的基本原理及其面临的挑战,即如何精确控制热源分布和热影响区。随后,文章重点讨论了高斯热源模型的应用,包括其数学表达式以及在ANSYS Fluent中的具体实现方式。此外,还探讨了模拟过程中需要注意的关键点,如网格划分、边界条件和材料属性的设定。最后,通过一个具体的SLM模拟案例展示了整个模拟流程,并给出了实用的操作建议和技术细节。 适合人群:从事增材制造领域的研究人员、工程师以及相关专业的学生。 使用场景及目标:适用于希望通过数值模拟优化SLM和EBM工艺参数的研究人员和工程师,旨在提高成形件质量并降低成本。同时,也为初学者提供了一套完整的模拟指南。 其他说明:文章不仅提供了理论知识,还包括了大量的实践经验和代码示例,有助于读者更好地理解和掌握热源模拟的技术要点。

    永磁同步电机(PMSM)负载转矩估计与预测的MATLAB/Simulink仿真及卡尔曼滤波、Luenberger观测器的应用

    内容概要:本文详细介绍了永磁同步电机(PMSM)负载转矩估计的研究背景及其重要性,重点讨论了几种经典负载估计方法,包括卡尔曼滤波、离散卡尔曼滤波和Luenberger龙博格观测器。文中不仅提供了理论解释,还展示了具体的MATLAB/Simulink仿真模型,涵盖负载转矩测量、预测及转矩预测等功能。此外,文章深入探讨了负载自适应、转矩估计、电机转速闭环控制等关键技术的融合,强调了这些技术在实现PMSM高性能控制中的协同作用。通过实际案例和实验数据,验证了不同方法的有效性和优劣。 适合人群:从事电机控制、自动化工程及相关领域的研究人员和技术人员,尤其是对永磁同步电机负载转矩估计感兴趣的读者。 使用场景及目标:适用于希望深入了解PMSM负载转矩估计方法及其仿真的科研工作者和工程师。目标是掌握卡尔曼滤波、Luenberger观测器等技术的具体实现,提升电机控制系统的性能和稳定性。 其他说明:文章提供了详细的仿真模型和代码片段,便于读者理解和复现实验结果。同时,针对实际应用中的常见问题给出了优化建议,帮助读者避免常见的错误和陷阱。

    (源码)基于TensorFlow.js和Angular的表情分类应用.zip

    # 基于TensorFlow.js和Angular的表情分类应用 ## 项目简介 本项目是一个使用TensorFlow.js和Angular构建的表情分类应用。它通过机器学习和图像识别技术,帮助用户理解和预测他人的情绪表达。这是一个有趣且实用的工具,特别是在人际交往过程中,可以帮助你更好地理解他人的情绪和意图。 ## 项目的主要特性和功能 1. 表情识别: 通过摄像头实时捕捉图像,应用机器学习模型进行表情识别。 2. 简单的用户界面: 用户界面设计简洁明了,易于操作。 3. 训练模型: 用户可以通过点击不同的类别来录入图像,训练模型以识别不同的表情。 4. 实时反馈: 训练完毕后,应用会实时分析摄像头的图像,并给出最可能的表情类别。 ## 安装使用步骤

    QxEntityEditor-1.2.8-macosx

    QxEntityEditor 1.2.8 64位 MacOS程序安装包,QxOrm图形化编辑工具。官网无法访问,加速下载。

    前后端分离的图书管理系统新版源码+说明+数据库.zip

    《前后端分离的图书管理系统源码资源简介》 本资源包含前后端分离的图书管理系统新版源码、详细说明以及数据库文件,是一份极具学习价值的优质资源。 在前端方面,采用现代化的前端技术框架构建用户界面,具备简洁美观、交互友好的特点,能为用户提供流畅的操作体验,如便捷的图书查询、借阅操作等。后端则运用成熟的技术栈,实现系统的核心业务逻辑,包括对图书信息、用户信息的管理,以及借阅流程的处理等,确保系统的高效稳定运行。 详细说明文档对系统的各个功能模块、代码结构、关键技术点进行了详细解读,有助于学习者快速理解系统的设计思路和实现原理。数据库文件则为系统提供了数据存储支持,其设计合理,能满足图书管理系统的数据需求。 本资源为学习者提供了一个实际的项目案例,通过学习和研究该资源,可深入了解前后端分离的开发模式、相关技术的应用,提升编程能力和项目实践水平,但请注意,本资源仅用于学习交流,严禁用于商业用途。

    3.4.6-识别形状+颜色+增加最小变化阈值+增加最大变化阈值 STM32串口通信

    3.4.6-识别形状+颜色+增加最小变化阈值+增加最大变化阈值 STM32串口通信 openmv+STM32串口通信 openmv串口通信openmv识别物体 openmv神经网络训练 openmv数

    MATLAB 神经网络30个案例分析程序和数据.zip

    matlab

    汇川H5U转盘机程序框架详解:适用于自动化初学者的高效编程模板

    内容概要:本文详细介绍了一款基于汇川H5U的转盘机程序框架,该框架集成了多个实用功能,如上下料、CCD模拟、伺服运动控制等。框架采用模块化设计,分为HMI交互层、工位调度引擎、运动控制集群和仿真沙盒四大模块。每个工位作为一个独立的状态机,便于扩展和维护。文中提供了具体的代码示例,帮助读者理解各功能的具体实现方法。此外,框架支持仿真模式,可以在没有真实硬件的情况下进行测试。 适合人群:主要针对自动化领域的初学者和希望优化编程习惯的开发者。对于新手而言,这是一个非常好的学习模板,能够帮助他们快速掌握汇川PLC编程的基本技巧和最佳实践。 使用场景及目标:①学习汇川PLC编程的基础知识和最佳实践;②通过具体案例理解状态机的概念及其在工业自动化中的应用;③利用仿真功能进行无硬件测试,提高开发效率;④掌握工位管理和伺服控制的技术细节,为复杂项目打好基础。 其他说明:该框架不仅适用于小型项目,还可以扩展到更大规模的应用,如多工位生产线。通过深入研究该框架,开发者可以提升编程技能,避免常见的编程陷阱。

    飞轮储能系统建模与MATLAB仿真:永磁同步电机驱动详解及其应用场景

    内容概要:本文详细介绍了飞轮储能系统的建模方法及其在MATLAB中的仿真实现,主要针对永磁同步电机驱动的飞轮系统。文章首先解释了飞轮储能的基本概念,随后深入探讨了两种不同的运行模式:机侧网侧分家运作的结构(模型一)和机网侧协同运行(模型二)。模型一侧重于双闭环控制,强调了PI控制器的参数设置和坐标变换的正确实现;模型二则关注协同控制,特别是在能量双向流动控制和锁相环的应用方面。文中提供了多个具体的MATLAB代码片段,帮助读者理解和实现各个控制环节的关键技术。此外,文章还分享了许多实用的经验和注意事项,如求解器的选择、参数整定以及常见的调试陷阱。 适合人群:电气工程专业学生、从事电力系统研究的技术人员、对飞轮储能系统感兴趣的科研工作者。 使用场景及目标:适用于飞轮储能系统的教学、科研和工程项目预研。通过学习本文,读者可以掌握飞轮储能系统的建模方法,理解永磁同步电机驱动的具体实现方式,并能够在MATLAB/Simulink环境中进行有效的仿真。 其他说明:文章不仅提供了详细的理论讲解和技术指导,还附带了大量的代码实例和实践经验,有助于读者更好地理解和应用相关知识。

    电子洁净厂房温湿度精准控制:基于200SMART PLC的串级PID与露点焓值计算

    内容概要:本文详细介绍了针对电子洁净厂房温湿度控制难题而开发的一套基于西门子200SMART PLC的串级PID控制系统。该系统采用主副环结构,主环通过焓差控制,副环进行温湿度PID调节,实现了温度±1℃、湿度±5%的精确控制。文中展示了具体的控制架构、核心算法(如双向PID调节、露点计算)、以及调试过程中遇到的问题及其解决方案。此外,还提供了实测数据验证系统的有效性。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是有电子厂房环境控制需求的专业人士。 使用场景及目标:适用于需要高精度温湿度控制的电子洁净厂房,旨在提高生产环境稳定性和产品质量。具体目标包括但不限于:确保温度波动范围在±1℃以内,湿度控制精度达到±5%,并减少能源消耗。 其他说明:文中提到的技术细节对于理解和优化现有控制系统非常有价值,同时也强调了硬件选型(如选用200SMART PLC)和软件编程技巧的重要性。

    (源码)基于CC++的传感器管理项目.zip

    # 基于CC++的传感器管理项目 ## 项目简介 本项目是一个基于CC++的传感器管理项目,主要目标是管理并处理与传感器相关的操作。项目涵盖了多种传感器类型,包括加速度计、磁力计、陀螺仪、光传感器、接近传感器等,支持虚拟传感器和依赖传感器,并提供获取传感器列表、激活传感器、设置传感器延迟、轮询传感器事件、校准传感器等功能。 ## 项目的主要特性和功能 1. 传感器管理提供一套完整的传感器管理框架,支持多种传感器类型的操作,包括开启、关闭、设置延迟、读取事件等。 2. 校准功能支持传感器的校准操作,包括读取和写入传感器的校准参数,确保传感器数据的准确性和可靠性。 3. 虚拟传感器支持通过虚拟传感器类,可以处理或注入虚拟传感器数据,为无法直接访问实际传感器的情况提供解决方案。 4. 事件处理和数据读取实现读取传感器数据事件和处理相关事件的功能,确保数据的实时性和准确性。 5. XML配置文件处理支持读取和写入传感器的XML配置文件,便于用户自定义传感器的配置参数。

Global site tag (gtag.js) - Google Analytics