📄 pidtrainer.java
字号:
import com.ms.wfc.app.*;
import com.ms.wfc.core.*;
import com.ms.wfc.ui.*;
import com.ms.wfc.html.*;
public class PIDTrainer extends Form
{
String version = "PID Trainer Demo version 0.9a Alpha";
BufferedControl display = new BufferedControl();
PIDDisplay pidDisplay;
EventHandler aeh = new EventHandler(onActivate);
EventHandler orh = new EventHandler(onResize);
int x = 0;
int y = 0;
public PIDTrainer()
{
// Required for Visual J++ Form Designer support
initForm();
initEvents();
setSize(650,425);
//onResize(null,null);
}
public void onResize(Object o, Event e) {
//Size display then move everything else
//display.setSize(1000,1000);
x = this.getWidth();
y = this.getHeight();
if (x >= 611) {
outputBar.setLeft(x-611+347);
label1.setLeft(x-611+339);
groupBox2.setLeft(x-611+409);
label2.setLeft(x-611+387);
label3.setLeft(x-611+387);
outputState.setLeft(x-611+339);
pidButton.setLeft(x-611+409);
pidResults.setLeft(x-611+409);
groupBox3.setLeft(x-611+518);
display.setW(x-611+300);
pidDisplay.setW(185);//x-611+185);
pidDisplay.setLeft(x-611+411);
//pidDisplay.setAnchor(ControlAnchor.
} else { this.setWidth(650);}
if (y >= 339) {
groupBox4.setTop(y-339+219);
label19.setTop(y-339+224);
timeIndexBox.setTop(y-339+222);
madeSetpointLabel.setTop(y-339+220);
//outputState.setTop(y-339+218);
hurtzGroup.setTop(y-339+245);
powerGroup.setTop(y-339+245);
styleGroup.setTop(y-339+245);
int temp = y-339+204;
labelB.setTop( temp/4);// -16);
labelC.setTop((temp/2));// -16);
labelD.setTop( (temp*3)/4);// -16);
//labelE.setTop(temp);// -16);
display.setH(temp);
pidDisplay.setH(y-339);// + 79);
}else { this.setHeight(425);}
//display.update();
//this.update();
//this.invalidate();
}
public void initEvents() {
//NEW STUFF
display.setOutputEdit(outputEdit);
display.setHighEdit(highEdit);
display.setLowEdit(lowEdit);
display.setSize(300,204);
//display.setLocation(75,10);
display.setLocation(31,11);
display.setVisible(true);
display.setTimeIndexBox(timeIndexBox);
display.setInfoEdit(infoEdit);
display.setErrEdit(lerrEdit);
display.setIntGEdit(intgEdit);
display.setPEdit(pEdit);
display.setIEdit(iEdit);
display.setDEdit(dEdit);
display.setOutputSlider(outputBar);
display.setMadeSetpointLabel(madeSetpointLabel);
display.setMeasurementLagEdit(measurementLagEdit);
display.setDeadTimeEdit(deadTimeEdit);
//NEW PID Display
pidDisplay = new PIDDisplay(display.system);
pidDisplay.setLocation(411,317);
pidDisplay.setVisible(true);
//END PID Display
kpEdit.setText(display.system.getKp()+"");
kiEdit.setText(display.system.getKi()+"");
kdEdit.setText(display.system.getKd()+"");
measurementLagEdit.setText(display.system.measurementLagSec +"");
deadTimeEdit.setText(display.system.deadTimeSec +"");
groupBox1.setVisible(false);
//infoEdit.setVisible(false);
pidButton.setEnabled(false);
this.add(display);
this.add(pidDisplay);
//In case program is run on Win2000 Systems
this.addOnActivate(aeh);
}
public void dispose()
{
super.dispose();
components.dispose();
display.dispose();
}
public void onActivate(Object o, Event e) {
this.focus();
this.bringToFront();
this.focus();
this.update();
this.removeOnActivate(aeh);
this.addOnResize(orh);
onResize(null,null);
}
private void outputBar_scroll(Object source, Event e)
{
display.system.setOutputCommand((float)outputBar.getValue()/100);
}
private void checkBox1_click(Object source, Event e)
{ display.system.outputDisabled = outputState.getChecked(); }
private void pidButton_click(Object source, Event e)
{
float t1, t2, t3;
int i1, i2;
try {
t1 =Float.valueOf(kpEdit.getText()).floatValue();
t2 =Float.valueOf(kiEdit.getText()).floatValue();
t3 =Float.valueOf(kdEdit.getText()).floatValue();
i1 = Integer.valueOf(measurementLagEdit.getText()).intValue();
i2 = Integer.valueOf(deadTimeEdit.getText()).intValue();
display.system.setPIDTerms(t1, t2,t3);
display.system.setMeasurementLag(i1);
display.system.setDeadTime(i2);
pidButton.setEnabled(false);
} catch (NumberFormatException excp) {}
}
private void kpEdit_textChanged(Object source, Event e)
{ pidButton.setEnabled(true); }
private void kiEdit_textChanged(Object source, Event e)
{ pidButton.setEnabled(true); }
private void kdEdit_textChanged(Object source, Event e)
{ pidButton.setEnabled(true); }
private void timeIndexBox_selectedIndexChanged(Object source, Event e)
{ display.system.setTimeIndex( timeIndexBox.getSelectedIndex());}
private void measurementLagEdit_textChanged(Object source, Event e)
{pidButton.setEnabled(true);}
private void deadTimeEdit_textChanged(Object source, Event e)
{pidButton.setEnabled(true);}
private void hurtzEdit_textChanged(Object source, Event e)
{ display.system.setLoadHurtz(Float.valueOf(hurtzEdit.getText()).floatValue() ); }
private void offCheckBox_checkedChanged(Object source, Event e) {
if (offCheckBox.getChecked()) display.system.setLoadStrength(0);
if (lowCheckBox.getChecked()) display.system.setLoadStrength(1);
if (medCheckBox.getChecked()) display.system.setLoadStrength(2);
if (highCheckBox.getChecked()) display.system.setLoadStrength(3);
}
private void squareCheckBox_checkedChanged(Object source, Event e) {
if (squareCheckBox.getChecked()) display.system.setLoadType(1);
if (sineCheckBox.getChecked()) display.system.setLoadType(2);
if (onCheckBox.getChecked()) display.system.setLoadType(3);
}
/**
* NOTE: The following code is required by the Visual J++ form
* designer. It can be modified using the form editor. Do not
* modify it using the code editor.
*/
Container components = new Container();
GroupBox groupBox1 = new GroupBox();
Edit infoEdit = new Edit();
TrackBar outputBar = new TrackBar();
Label label1 = new Label();
Label label2 = new Label();
Label label3 = new Label();
CheckBox outputState = new CheckBox();
GroupBox groupBox2 = new GroupBox();
Edit kpEdit = new Edit();
Edit kiEdit = new Edit();
Edit kdEdit = new Edit();
Label Kp = new Label();
Label label4 = new Label();
Label label5 = new Label();
Label labelA = new Label();
Label labelC = new Label();
Label labelB = new Label();
Label labelD = new Label();
Edit lerrEdit = new Edit();
Edit intgEdit = new Edit();
Label label11 = new Label();
Label label12 = new Label();
ComboBox timeIndexBox = new ComboBox();
Panel panel1 = new Panel();
GroupBox groupBox3 = new GroupBox();
Edit measurementLagEdit = new Edit();
Label label13 = new Label();
Edit deadTimeEdit = new Edit();
Label label14 = new Label();
Button pidButton = new Button();
GroupBox groupBox4 = new GroupBox();
Label label15 = new Label();
Label label16 = new Label();
Label label17 = new Label();
Label label18 = new Label();
Label label19 = new Label();
GroupBox styleGroup = new GroupBox();
GroupBox powerGroup = new GroupBox();
RadioButton squareCheckBox = new RadioButton();
RadioButton sineCheckBox = new RadioButton();
RadioButton offCheckBox = new RadioButton();
RadioButton lowCheckBox = new RadioButton();
RadioButton medCheckBox = new RadioButton();
RadioButton highCheckBox = new RadioButton();
GroupBox hurtzGroup = new GroupBox();
Edit hurtzEdit = new Edit();
MainMenu mainMenu1 = new MainMenu();
MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem();
RadioButton onCheckBox = new RadioButton();
GroupBox pidResults = new GroupBox();
Edit pEdit = new Edit();
Label label20 = new Label();
Edit iEdit = new Edit();
Edit dEdit = new Edit();
Label label21 = new Label();
Label label22 = new Label();
Label label23 = new Label();
Label madeSetpointLabel = new Label();
Edit highEdit = new Edit();
Edit lowEdit = new Edit();
Edit outputEdit = new Edit();
private void initForm()
{
// NOTE: This form is storing resource information in an
// external file. Do not modify the string parameter to any
// resources.getObject() function call. For example, do not
// modify "foo1_location" in the following line of code
// even if the name of the Foo object changes:
// foo1.setLocation((Point)resources.getObject("foo1_location"));
IResourceManager resources = new ResourceManager(this, "PIDTrainer");
groupBox1.setAnchor(ControlAnchor.LEFT);
groupBox1.setLocation(new Point(8, 327));
groupBox1.setSize(new Point(245, 216));
groupBox1.setTabIndex(0);
groupBox1.setTabStop(false);
groupBox1.setText("Information");
infoEdit.setAnchor(ControlAnchor.ALL);
infoEdit.setCursor(Cursor.NO);
infoEdit.setLocation(new Point(8, 16));
infoEdit.setSize(new Point(228, 192));
infoEdit.setTabIndex(0);
infoEdit.setTabStop(false);
infoEdit.setText("");
infoEdit.setMultiline(true);
infoEdit.setReadOnly(true);
outputBar.setLocation(new Point(347, 16));
outputBar.setSize(new Point(42, 199));
outputBar.setTabIndex(1);
outputBar.setTabStop(false);
outputBar.setText("trackBar1");
outputBar.setAutoSize(false);
outputBar.setLargeChange(20);
outputBar.setMaximum(100);
outputBar.setOrientation(Orientation.VERTICAL);
outputBar.setTickStyle(TickStyle.BOTH);
outputBar.setTickFrequency(10);
outputBar.addOnScroll(new EventHandler(this.outputBar_scroll));
label1.setLocation(new Point(339, 0));
label1.setSize(new Point(56, 16));
label1.setTabIndex(2);
label1.setTabStop(false);
label1.setText("Output");
label1.setTextAlign(HorizontalAlignment.CENTER);
label2.setLocation(new Point(387, 24));
label2.setSize(new Point(16, 16));
label2.setTabIndex(4);
label2.setTabStop(false);
label2.setText("0");
label3.setLocation(new Point(387, 199));
label3.setSize(new Point(16, 16));
label3.setTabIndex(3);
label3.setTabStop(false);
label3.setText("1");
outputState.setBackColor(Color.YELLOW);
outputState.setForeColor(Color.RED);
outputState.setLocation(new Point(339, 218));
outputState.setSize(new Point(64, 23));
outputState.setTabIndex(5);
outputState.setText("Disable");
outputState.setAppearance(Appearance.BUTTON);
outputState.addOnClick(new EventHandler(this.checkBox1_click));
groupBox2.setBackColor(Color.CONTROL);
groupBox2.setForeColor(Color.WINDOWTEXT);
groupBox2.setLocation(new Point(409, 3));
groupBox2.setSize(new Point(103, 141));
groupBox2.setTabIndex(6);
groupBox2.setTabStop(false);
groupBox2.setText("PID Terms");
kpEdit.setLocation(new Point(32, 16));
kpEdit.setSize(new Point(58, 20));
kpEdit.setTabIndex(0);
kpEdit.setText("");
kpEdit.addOnTextChanged(new EventHandler(this.kpEdit_textChanged));
kiEdit.setLocation(new Point(32, 40));
kiEdit.setSize(new Point(58, 20));
kiEdit.setTabIndex(1);
kiEdit.setText("");
kiEdit.addOnTextChanged(new EventHandler(this.kiEdit_textChanged));
kdEdit.setLocation(new Point(33, 64));
kdEdit.setSize(new Point(58, 20));
kdEdit.setTabIndex(2);
kdEdit.setText("");
kdEdit.addOnTextChanged(new EventHandler(this.kdEdit_textChanged));
Kp.setLocation(new Point(8, 16));
Kp.setSize(new Point(24, 16));
Kp.setTabIndex(7);
Kp.setTabStop(false);
Kp.setText("Kp");
label4.setLocation(new Point(8, 40));
label4.setSize(new Point(24, 16));
label4.setTabIndex(6);
label4.setTabStop(false);
label4.setText("Ki");
label5.setLocation(new Point(8, 64));
label5.setSize(new Point(24, 16));
label5.setTabIndex(5);
label5.setTabStop(false);
label5.setText("Kd");
labelA.setForeColor(Color.BLUE);
labelA.setLocation(new Point(11, 8));
labelA.setSize(new Point(16, 16));
labelA.setTabIndex(11);
labelA.setTabStop(false);
labelA.setText("95");
labelC.setForeColor(Color.BLUE);
labelC.setLocation(new Point(11, 96));
labelC.setSize(new Point(16, 16));
labelC.setTabIndex(10);
labelC.setTabStop(false);
labelC.setText("75");
labelB.setForeColor(Color.BLUE);
labelB.setLocation(new Point(11, 48));
labelB.setSize(new Point(16, 16));
labelB.setTabIndex(9);
labelB.setTabStop(false);
labelB.setText("85");
labelD.setForeColor(Color.BLUE);
labelD.setLocation(new Point(11, 144));
labelD.setSize(new Point(16, 16));
labelD.setTabIndex(8);
labelD.setTabStop(false);
labelD.setText("65");
lerrEdit.setBackColor(Color.INACTIVECAPTIONTEXT);
lerrEdit.setLocation(new Point(32, 88));
lerrEdit.setSize(new Point(58, 20));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -