Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0a288c5

Browse files
committed
El servidor en Java es funcional, establece comunicación con el cliente en C de forma correcta y permite detener y almacenar los datos capturados sin perjudicar el funcionamiento de los hilos tanto del lado del servidor como del lado del Cliente
1 parent ed42d65 commit 0a288c5

File tree

4 files changed

+141
-44
lines changed

4 files changed

+141
-44
lines changed

FileManager.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import java.io.BufferedWriter;
2+
import java.io.FileWriter;
3+
import java.io.IOException;
4+
import java.io.PrintWriter;
5+
6+
public class FileManager
7+
{
8+
private String fileName;
9+
public FileManager(String _fileName)
10+
{
11+
this.fileName = _fileName;
12+
}
13+
14+
public void save_array(double [][]process_signal, double [][]control_signal)
15+
{
16+
BufferedWriter bufferedWriter = null;
17+
FileWriter fileWriter = null;
18+
PrintWriter printWriter = null;
19+
try
20+
{
21+
fileWriter = new FileWriter(this.fileName, true);
22+
bufferedWriter = new BufferedWriter(fileWriter);
23+
printWriter = new PrintWriter(bufferedWriter);
24+
// formato del archivo ( time_signal, process_signal, control_signal )
25+
for(int i = 0; i < process_signal[0].length; i++)
26+
bufferedWriter.write(String.format("%f\t%f\t%f\n", process_signal[0][i], process_signal[1][i], control_signal[1][i]));
27+
28+
}
29+
catch(IOException e)
30+
{
31+
System.out.println("Error escribiendo el archivo");
32+
}
33+
finally
34+
{
35+
try
36+
{
37+
if(bufferedWriter != null)
38+
{
39+
bufferedWriter.close();
40+
printWriter.close();
41+
fileWriter.close();
42+
}
43+
}
44+
catch (IOException e)
45+
{
46+
47+
}
48+
}
49+
}
50+
}

Makefile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Before executing this Makefile, write the following lines in your terminal
2+
#
3+
# export CLASSPATH=$CLASSPATH:../lib/jfreechart-1.0.19.jar:../lib/jcommon-1.0.23.jar
4+
5+
6+
SRC = Main.java Window.java ThreadServer.java FileManager.java
7+
8+
all: ${SRC}
9+
javac $^
10+
11+
exec:
12+
java Main
13+
14+
clean:
15+
rm *.class
16+
17+

ThreadServer.java

Lines changed: 58 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import java.io.DataInputStream;
22
import java.io.DataOutputStream;
3+
import java.io.File;
34
import java.io.IOException;
45
import java.net.ServerSocket;
56
import java.net.Socket;
7+
import javax.swing.JFileChooser;
68

79
public class ThreadServer extends Thread
810
{
911
private int usbPort;
1012
private double ts;
1113
private double step_time;
14+
private double setpoint;
1215
private int server_answer = 2958;
1316
private int valid_client_request = 45862;
1417
private int finish = 0;
@@ -58,7 +61,8 @@ public ThreadServer(Window _gui)
5861
try
5962
{
6063
client_request = this.in.readInt();
61-
} catch (IOException e) {
64+
} catch (IOException e)
65+
{
6266
System.out.println("No se pudo escribir valor al cliente");
6367
e.printStackTrace();
6468
return;
@@ -88,55 +92,83 @@ public ThreadServer(Window _gui)
8892
return;
8993
}
9094
}
91-
System.out.println("client_request = "+String.valueOf(client_request));
92-
93-
// get user parameters
94-
this.ts = Double.parseDouble(this.gui.txt_sample_time.getText());
95-
this.usbPort = Integer.parseInt(this.gui.txt_sample_time.getText());
96-
this.step_time = Double.parseDouble(this.gui.txt_step_time.getText());
97-
98-
// Send parámeters
99-
try
100-
{
101-
out.writeInt(this.usbPort);
102-
out.writeDouble(this.ts);
103-
} catch (IOException e)
104-
{
105-
System.out.println("Error al enviar parámetros usbPort, Ts");
106-
e.printStackTrace();
107-
return;
108-
}
109-
11095
}// finally
111-
11296
}//finally
113-
114-
11597
}//ThreadServer
11698

11799
public void terminate()
118100
{
119101
this.alive = false;
120102
this.finish = 1;
103+
System.out.format("La cantidad de elementos es: %d\n", this.gui.process_output.getItemCount());
104+
105+
// option to save the captured data
106+
double[][] logged_signal = this.gui.process_output.toArray();
107+
double[][] control_signal = this.gui.process_input.toArray();
108+
109+
// Dialogo para seleccionar donde almacenar el archivo
110+
JFileChooser fileChooser = new JFileChooser();
111+
fileChooser.setDialogTitle("Indicar el archivo a guardar");
112+
int userSelection = fileChooser.showSaveDialog(this.gui);
113+
114+
if (userSelection == JFileChooser.APPROVE_OPTION)
115+
{
116+
File fileToSave = fileChooser.getSelectedFile();
117+
System.out.println("Save as file: " + fileToSave.getAbsolutePath());
118+
FileManager fileSaving = new FileManager(fileToSave.getAbsolutePath());
119+
fileSaving.save_array(logged_signal, control_signal);
120+
System.out.println("Archivo guardado");
121+
}
122+
else
123+
{
124+
System.out.println("Datos descartados");
125+
}
126+
121127
}
122128

123129
public void run()
124130
{
125-
double sig_value = 0.0;
131+
double output_process_val = 0.0;
132+
double input_process_val = 0.0;
126133
double time_value = 0.0;
134+
135+
// get user parameters
136+
this.usbPort = Integer.parseInt(this.gui.txt_port.getText());
137+
this.ts = Double.parseDouble(this.gui.txt_sample_time.getText());
138+
this.setpoint = Double.parseDouble(this.gui.txt_setpoint.getText());
139+
this.step_time = Double.parseDouble(this.gui.txt_step_time.getText());
140+
141+
// Send parámeters
142+
try
143+
{
144+
out.writeInt(this.usbPort);
145+
out.writeDouble(this.ts);
146+
out.writeDouble(this.setpoint);
147+
out.writeDouble(this.step_time);
148+
}
149+
catch (IOException e)
150+
{
151+
System.out.println("Error al enviar parámetros usbPort, Ts");
152+
e.printStackTrace();
153+
return;
154+
}
155+
156+
127157
while(this.alive)
128158
{
129159
try
130160
{
131-
sig_value = this.in.readDouble();
161+
output_process_val = this.in.readDouble();
162+
input_process_val = this.in.readDouble();
132163
time_value = this.in.readDouble();
133164
out.writeInt(this.finish);
134165
} catch (IOException e)
135166
{
136167
System.out.println("No se pudo hacer la lectura de la señal o la transferencia del finish");
137168
e.printStackTrace();
138169
}
139-
this.gui.dataLogged.add(time_value, sig_value);
170+
this.gui.process_output.add(time_value, output_process_val);
171+
this.gui.process_input.add(time_value, input_process_val);
140172
}
141173
try
142174
{

Window.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
public class Window extends JFrame
1818
{
1919
private static final long serialVersionUID = 1L;
20-
final XYSeries dataLogged;
20+
final XYSeries process_output;
21+
final XYSeries process_input;
2122
final XYSeriesCollection collectionData;
2223
final JFreeChart display;
2324
public JTextField txt_port;
24-
public JTextField txt_acq_time;
25+
public JTextField txt_setpoint;
2526
public JTextField txt_sample_time;
2627
public JTextField txt_step_time;
27-
public JTextField txt_file_name;
2828
public JButton btn_server_init;
2929
public JButton btn_server_stop;
3030

@@ -39,46 +39,44 @@ public Window()
3939
/*Parameters panel*/
4040
JPanel parametersPanel = new JPanel();
4141
JLabel lbl_param_1 = new JLabel("Port Number");
42-
JLabel lbl_param_2 = new JLabel("Acquisition Time (s)");
42+
JLabel lbl_param_2 = new JLabel("Setpoint (v)");
4343
JLabel lbl_param_3 = new JLabel("Sample Time (s)");
4444
JLabel lbl_param_4 = new JLabel("Step Time (s)");
45-
JLabel lbl_param_5 = new JLabel("File Name");
4645
txt_port = new JTextField("16");
47-
txt_acq_time = new JTextField("");
46+
txt_setpoint = new JTextField("1");
4847
txt_sample_time = new JTextField("0.5");
49-
txt_step_time = new JTextField("15");
50-
txt_file_name = new JTextField("");
48+
txt_step_time = new JTextField("8");
5149
txt_port.setHorizontalAlignment(JTextField.CENTER);
52-
txt_acq_time.setHorizontalAlignment(JTextField.CENTER);
50+
txt_setpoint.setHorizontalAlignment(JTextField.CENTER);
5351
txt_sample_time.setHorizontalAlignment(JTextField.CENTER);
5452
txt_step_time.setHorizontalAlignment(JTextField.CENTER);
55-
txt_file_name.setHorizontalAlignment(JTextField.CENTER);
5653
btn_server_init = new JButton("Start Acquisition");
5754
btn_server_stop = new JButton("Save Data");
5855
btn_server_init.setActionCommand("start");
5956
btn_server_stop.setActionCommand("stop");
60-
parametersPanel.setLayout(new GridLayout(6, 2,10,10));
57+
parametersPanel.setLayout(new GridLayout(5, 2,10,10));
6158
parametersPanel.add(lbl_param_1);
6259
parametersPanel.add(txt_port);
6360
parametersPanel.add(lbl_param_2);
64-
parametersPanel.add(txt_acq_time);
61+
parametersPanel.add(txt_setpoint);
6562
parametersPanel.add(lbl_param_3);
6663
parametersPanel.add(txt_sample_time);
6764
parametersPanel.add(lbl_param_4);
6865
parametersPanel.add(txt_step_time);
69-
parametersPanel.add(lbl_param_5);
70-
parametersPanel.add(txt_file_name);
7166
parametersPanel.add(btn_server_init);
7267
parametersPanel.add(btn_server_stop);
7368
mainPanel.add(parametersPanel, BorderLayout.EAST);
7469
this.getContentPane().add(mainPanel, BorderLayout.EAST);
7570

7671
// Setup the Chart panel
77-
dataLogged = new XYSeries("Proocess Dynamics");
78-
dataLogged.add(0,0);
72+
process_input = new XYSeries("Process Input");
73+
process_output = new XYSeries("Process Output");
74+
process_input.clear();
75+
process_output.clear();
7976
collectionData = new XYSeriesCollection();
80-
collectionData.addSeries(dataLogged);
81-
display = ChartFactory.createXYLineChart("Realtime Plant Output",
77+
collectionData.addSeries(process_input);
78+
collectionData.addSeries(process_output);
79+
display = ChartFactory.createXYLineChart("Realtime Process Dynamics",
8280
"Time",
8381
"Amplitude",
8482
collectionData,

0 commit comments

Comments
 (0)