蓬森莉 发表于 2025-12-25 14:50:03

在 GeckoCIRCUITS 上开发新工具模块的方法

简介

最近在使用开源电力电子仿真软件 GeckoCIRCUITS 进行仿真时,我想使用离散时间控制器,但是 GeckoCIRCUITS 中没有这个模块,需要使用工具栏中自带的 JAVA 模块添加算法代码。但是我想把类似这样常用的模块固定在工具栏里,方便使用。于是我找到软件的源代码 (https://github.com/geckocircuits/GeckoCIRCUITS),在工具类中进行了添加和修改。
步骤1:新建一个工具类

在源文件目录中找到 src/main/java/ch/technokrat/gecko/geckocircuits/control 文件夹, 新建 ReglerDPRCONTROL.java, 添加如下代码,内容是定义器件名称、尺寸、IO 名称,关联描述键值、计算函数等。
package ch.technokrat.gecko.geckocircuits.control;

import ch.technokrat.gecko.geckocircuits.allg.AbstractComponentTyp;
import ch.technokrat.gecko.geckocircuits.control.calculators.AbstractControlCalculatable;
import ch.technokrat.gecko.geckocircuits.control.calculators.DPRControlCalculator;
import ch.technokrat.gecko.i18n.resources.I18nKeys;
import java.awt.Window;

public final class ReglerDPRCONTROL extends RegelBlock{
    private static final int BLOCK_WIDTH = 5;
    public static final ControlTypeInfo tinfo = new ControlTypeInfo(ReglerDPRCONTROL.class, "DIGITAL_PR_CTRL", I18nKeys.DIGITAL_PR_CONTROL);

    public ReglerDPRCONTROL() {
      super();
      
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "input"));
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "kp"));
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "kr"));
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "wo"));      
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "fs"));
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "wrc"));
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "max"));
      XIN.add(new TerminalControlInputWithLabel(this, -3, -XIN.size(), "min"));
      
      YOUT.add(new TerminalControlOutputWithLabel(this, 3, -YOUT.size(), "output"));
    }

    @Override
    public int getBlockWidth() {
      return BLOCK_WIDTH * dpix;
    }
   
   
    @Override
    public String[] getOutputNames() {
      return new String[]{"output"};
    }

    @Override
    public I18nKeys[] getOutputDescription() {
      return new I18nKeys[]{
            };
    }
   

    @Override
    public double getXShift() {
      return 1 / 2.0;
    }

    @Override
    public AbstractControlCalculatable getInternalControlCalculatableForSimulationStart() {
      return new DPRControlCalculator();
    }

    @Override
    protected String getCenteredDrawString() {
      return "DIGITAL\nPR\nCTRL";
    }
               

    @Override
    protected final Window openDialogWindow() {
      return new DialogWindowWithoutInput(this);
    }
}步骤2:添加工具计算函数

在源文件目录中找到 src/main/java/ch/technokrat/gecko/geckocircuits/control/calculators 文件夹,新建 DPRControlCalculator.java,添加如下代码,内容是定义器件 IO 数量,设计模块算法。
package ch.technokrat.gecko.geckocircuits.control.calculators;

public class DPRControlCalculator extends AbstractControlCalculatable{

    //variables

    public DPRControlCalculator() {
      super(8, 1);
    }

    @Override
    public void berechneYOUT(final double deltaT) {      
      //algorithm
      }
   
}步骤3:添加工具字符串键值

在 src/main/java/ch/technokrat/gecko/i18n/resources/I18nKeys.java 中添加工具的描述键值:
DIGITAL_PR_CONTROL("Digital PR controller")在 src/main/java/ch/technokrat/gecko/geckocircuits/control/ControlTyp.java 中添加它在控制类工具中的键值:
C_DIGITAL_PR_CTRL(92, ReglerDPRCONTROL.tinfo)步骤4:新建和初始化工具组

在 src/main/java/ch/technokrat/gecko/geckocircuits/circuit/SchematischeEingabeAuswahl2.java 中添加新的工具组,将新建工具的键值放到工具组里:
private AbstractComponentTyp[] _typDSPTOOLS = new AbstractComponentTyp[]{
      ControlTyp.C_DIGITAL_PR_CTRL
    };在初始化方法中添加新的工具组:
createJPanelForTypes(_typDSPTOOLS, "DSP Tools");步骤5: 编译和运行

使用命令编译项目:
mvn package assembly:single将在target 目录下生成 target/gecko-1.0-jar-with-dependencies.jar 文件,运行命令:
java -Xmx3G -Dpolyglot.js.nashorn-compat=true -jar target/gecko-1.0-jar-with-dependencies.jar打开软件界面后验证,新建的工具已添加成功。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

裆趾针 发表于 2026-1-5 23:45:05

东西不错很实用谢谢分享

打阗渖 发表于 2026-1-12 10:08:06

感谢分享,下载保存了,貌似很强大

廖彗云 发表于 2026-1-13 23:03:30

用心讨论,共获提升!

黎娅茜 发表于 2026-1-14 21:48:04

鼓励转贴优秀软件安全工具和文档!

替攀浮 发表于 2026-1-15 06:00:56

不错,里面软件多更新就更好了

伏滢 发表于 2026-1-15 16:37:11

分享、互助 让互联网精神温暖你我

剩鹄逅 发表于 2026-1-19 09:53:18

懂技术并乐意极积无私分享的人越来越少。珍惜

史华乐 发表于 2026-1-20 09:43:17

用心讨论,共获提升!

衣旱 发表于 2026-1-20 22:26:41

这个好,看起来很实用

瘴锲如 发表于 2026-1-21 20:05:44

很好很强大我过来先占个楼 待编辑

铵滔 发表于 2026-1-22 11:26:32

谢谢楼主提供!

饮邺谲 发表于 2026-1-22 22:22:25

谢谢分享,试用一下

醋辛 发表于 2026-1-23 09:55:32

感谢分享,学习下。

袁可佳 发表于 2026-1-28 14:15:49

谢谢楼主提供!

咚獭 发表于 2026-1-29 04:02:02

这个好,看起来很实用

院儿饯 发表于 2026-2-4 04:39:38

感谢发布原创作品,程序园因你更精彩

瞪皱炕 发表于 2026-2-5 06:05:23

谢谢分享,试用一下

缀访 发表于 2026-2-6 05:59:00

不错,里面软件多更新就更好了

墨淳雅 发表于 2026-2-7 05:08:08

很好很强大我过来先占个楼 待编辑
页: [1] 2 3
查看完整版本: 在 GeckoCIRCUITS 上开发新工具模块的方法