Я пытаюсь написать код, который одновременно считывает данные из двух последовательных портов.Несколько последовательных портов считывают только через несколько минут
Я был успешным в этом; однако, после запуска приложения в течение пары минут он вешает трубку.
Мне нужно, чтобы он работал как минимум на один час, чтобы записать достаточное количество точек данных. Я был бы очень признателен, если кто-то взглянет на мой код и сообщит мне, если они увидят какие-либо проблемы.
// 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();
}
Большое спасибо заранее за вашу помощь.
Попробуйте использовать portmon, чтобы узнать, какие данные отправляются. Это ошибка, потому что устройство перестает отправлять данные или что-то в вашем приложении. Также почему вы используете таймер, а затем также спать в этой теме? – SamFisher83
благодарит за комментарий. Я запускал каждый из датчиков самостоятельно, используя программное обеспечение, предоставляемое производителями, и все работало нормально. – user1217173
Сэм, спасибо за ваш комментарий. Я попробую то, что вы сказали, и, надеюсь, выясните, что происходит. – user1217173