Hoihoi,
Ik zal eerst ff beginnen met mijn code.
Controle.java
XYZVlak.java
De code in XYZVlak.java wordt aangeroepen zodra er op een knop wordt gedrukt. De gebruiker vult 3 waarden in (X, Y (Z is niet belangrijk nu))
Mijn probleem is nu als de gebruiker de volgende waarden invoert:
X = 1 of 2 of 3
Y = 1 of 2 of 3
dan gaat alles goed, behalve als de gebruiker waarden invoert hoger dan 3 of voor zowel X en Y de waarde 3 invoert.
De waarden zijn het aantal cm (wordt omgerekend naar het aantal stappen) dat een stappenmotor moet draaien.
De commando worden via de COMpoort verstuurt (Ja, alles is goed geinstalleerd, geconfigureerd). Ik gebruik j2sdk versie 1.3.1_03 en heb het geprobeerd op Windows 2000 en Windows 98 en allebei hetzeflde probleem.
Wie weet waar het aan kan liggen? Ik snap niet waarom waarden boven de 3 niet goed werken
Ik zal eerst ff beginnen met mijn code.
Controle.java
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
| public class Controle
{
private Communicatie com1 = new Communicatie("COM1");
public Controle()
{
// Voert een scancommando uit.
com1.Uitvoer("&P1");
try
{
Thread.sleep(7000);
}
catch(Exception e)
{}
// Stelt de begin- en eindsnelheid in van de motoren.
com1.Uitvoer("XI200");
com1.Uitvoer("XV5000");
com1.Uitvoer("YI200");
com1.Uitvoer("YV5000");
com1.Uitvoer("ZI200");
com1.Uitvoer("ZV5000");
// Zet de beginpositie van de motoren op 0.
com1.Uitvoer("XO0");
com1.Uitvoer("YO0");
com1.Uitvoer("ZO0");
}
public void BeweegZ(int iZ)
{
int aantalStappenZ = berekenStappen(iZ);
com1.Uitvoer("Z-" + aantalStappenZ);
com1.Uitvoer("ZE0");
com1.Uitvoer("&W*");
com1.Uitvoer("ZW100");
}
public int OptellenX(int X, int iX)
{
int aantalStappenX = berekenStappen(iX);
com1.Uitvoer("X-" + aantalStappenX / iX); // Beweeg 1cm per keer.
com1.Uitvoer("XE0"); // Brengt de stroom weer tot 0.
com1.Uitvoer("&W*"); // Wacht tot alle assen zijn gestopt
com1.Uitvoer("XW100");
X++;
return X;
}
public int AftellenX(int X, int iX)
{
int aantalStappenX = berekenStappen(iX);
com1.Uitvoer("X+" + aantalStappenX/iX);
com1.Uitvoer("XE0");
com1.Uitvoer("&W*");
com1.Uitvoer("XW100");
X--;
return X;
}
public int OptellenY(int Y, int iY)
{
int aantalStappenY = berekenStappen(iY);
com1.Uitvoer("Y-" + aantalStappenY / iY);
com1.Uitvoer("YE0");
com1.Uitvoer("&W*");
com1.Uitvoer("YW100");
Y++;
return Y;
}
// Bereken hoeveel stappen een bepaalde lengte is.
private int berekenStappen(int lengte)
{
int stappen = lengte * 20100; // 1cm is 20100 stappen.
return stappen;
}
public void Reset()
{
com1.Uitvoer("RESET");
}
public void Stoppen()
{
// Stop elke beweging/proces.
com1.Uitvoer("ABORT");
}
public void Beginpunt()
{
// Brengt alle assen weer naar de beginpositie.
com1.Uitvoer("XR0");
com1.Uitvoer("YR0");
com1.Uitvoer("ZR0");
// Brengt de stroom van alle assen weer naar 0.
com1.Uitvoer("XE0");
com1.Uitvoer("YE0");
com1.Uitvoer("ZE0");
}
} |
XYZVlak.java
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| Controle controle = new Controle();
private void startXYZVlak()
{
int X = 0;
int Y = 0;
int C = 0;
// Maakt van de cijfer in een tekstvak een Integer.
int iX = Integer.parseInt(txtCmX.getText());
int iY = Integer.parseInt(txtCmY.getText());
int iZ = Integer.parseInt(txtCmZ.getText());
if (iZ != 0)
{
controle.BeweegZ(iZ);
}
for (int a = 1; a <= iY+1; a++)
{
if (X == iX)
{
do
{
X = controle.AftellenX(X, iX);
}
while (X != 0);
C++;
}
else
{
do
{
X = controle.OptellenX(X, iX);
}
while (X != iX);
C++;
}
if (C == 1)
{
if (Y != iY)
{
Y = controle.OptellenY(Y, iY);;
C--;
}
}
}
controle.Beginpunt();
} |
De code in XYZVlak.java wordt aangeroepen zodra er op een knop wordt gedrukt. De gebruiker vult 3 waarden in (X, Y (Z is niet belangrijk nu))
Mijn probleem is nu als de gebruiker de volgende waarden invoert:
X = 1 of 2 of 3
Y = 1 of 2 of 3
dan gaat alles goed, behalve als de gebruiker waarden invoert hoger dan 3 of voor zowel X en Y de waarde 3 invoert.
De waarden zijn het aantal cm (wordt omgerekend naar het aantal stappen) dat een stappenmotor moet draaien.
De commando worden via de COMpoort verstuurt (Ja, alles is goed geinstalleerd, geconfigureerd). Ik gebruik j2sdk versie 1.3.1_03 en heb het geprobeerd op Windows 2000 en Windows 98 en allebei hetzeflde probleem.
Wie weet waar het aan kan liggen? Ik snap niet waarom waarden boven de 3 niet goed werken