在 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打开软件界面后验证,新建的工具已添加成功。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 东西不错很实用谢谢分享 感谢分享,下载保存了,貌似很强大 用心讨论,共获提升! 鼓励转贴优秀软件安全工具和文档! 不错,里面软件多更新就更好了 分享、互助 让互联网精神温暖你我 懂技术并乐意极积无私分享的人越来越少。珍惜 用心讨论,共获提升! 这个好,看起来很实用 很好很强大我过来先占个楼 待编辑 谢谢楼主提供! 谢谢分享,试用一下 感谢分享,学习下。 谢谢楼主提供! 这个好,看起来很实用 感谢发布原创作品,程序园因你更精彩 谢谢分享,试用一下 不错,里面软件多更新就更好了 很好很强大我过来先占个楼 待编辑