Я пытаюсь написать код, который считывает данные с двух последовательных портов одновременно.
Мне это удалось;однако после запуска приложения в течение нескольких минут оно зависает.
Мне нужно, чтобы оно работало не менее часа, чтобы записать достаточно точек данных.Я был бы очень признателен, если бы кто-нибудь взглянул на мой код и дал мне знать, если увидит какие-либо проблемы.
// Timer to get the data every half a second.
private void timer1_Tick(object sender, EventArgs e)
{
if (!Torque_serialport.IsOpen)
{
Torque_serialport.PortName = Torque_com_name;
Torque_serialport.BaudRate = Torque_baud_rate;
Torque_serialport.DataBits = Convert.ToInt32(Torque_data_bits);
Torque_serialport.Parity = Parity.None;
Torque_serialport.StopBits = StopBits.One;
Torque_serialport.Handshake = Handshake.XOnXOff;
}
if (!Torque_serialport.IsOpen) { Torque_serialport.Open(); }
// * Initializing Temperature Sensor and Checking Whether its Open or Not. If open, nothing is done. If close, open it.
if (!Temp_serialport.IsOpen)
{
Temp_serialport.PortName = Temp_com_name;
Temp_serialport.BaudRate = Temp_baud_rate;
Temp_serialport.DataBits = Convert.ToInt32(Temp_data_bits);
Temp_serialport.Parity = Parity.None;
Temp_serialport.StopBits = StopBits.One;
Temp_serialport.Handshake = Handshake.None;
}
if (!Temp_serialport.IsOpen) { Temp_serialport.Open(); }
Read_Data();
}
Функция Read_Data, где происходит чтение данных:
public void Read_Data()
{
// * Tell Torque Readout Device to switch to Instantaneous Readings Mode (sending S0)
byte[] Send_S0 = { 0x53, 0x30, 0x0D };
Torque_serialport.Write(Send_S0, 0, 3);
// * Initializing Reading Buffer and Necessary Variables for Storing Read Values.
byte[] read_buffer = new byte[8];
int bytesread = 0;
int offset = 0;
double Torque_Reading;
double Temp_Reading;
string Temp_reading_string;
DateTime Time_Stamp;
//int Grid_row_index = 0;
byte[] Send_Xon = { 0x11, 0x0D };
byte[] Send_Xoff = { 0x13, 0x0D };
byte[] Send_TempStart = { 0x3F, 0x54, 0x0D };
string[] Tabular_Data = new string[] { "", "", "" };
Torque_serialport.Write(Send_Xon, 0, 2);
while (offset < 8)
{
bytesread = Torque_serialport.Read(read_buffer, offset, 8 - offset);
offset = offset + bytesread;
if (read_buffer[7] == 0x0A)
{
Torque_serialport.Write(Send_Xoff, 0, 2);
offset = 0;
break;
}
}
Time_Stamp = DateTime.Now;
Temp_serialport.Write(Send_TempStart, 0, 3);
Temp_reading_string = Temp_serialport.ReadExisting();
if (Temp_reading_string != "")
{
Temp_Reading = double.Parse(Temp_reading_string.Substring(2, 6));
Torque_Reading = Calculate_Torque(read_buffer);
}
// Reset Variables
offset = 0;
for (int k = 0; k < 8; k++)
{
read_buffer[k] = 0;
}
// Delay System by 1 Seconds.
System.Threading.Thread.Sleep(1000);
this.Refresh();
}
Заранее большое спасибо за вашу помощь.