110,535
社区成员
发帖
与我相关
我的任务
分享
while (com.IsOpen == true)
{
try
{
int status_limit1 = 0;
。。。。。。
int status_limit10 = 0;
Byte[] Data = new byte[Num_data2read];
Byte[] Num_battery = new Byte[10];
int num_combuffer = com.BytesToRead;
//System.Threading.Thread.Sleep(100);
//这个是读取串口的条件,现在秒钟读88个字节,Num_data2read就是88。每次读串口的条件是:缓冲区字节数为88,并且等待50ms,字节没有增加,认为数据正确,读取串口缓冲区
//////////////////////////////////大神们给看看,这个判断条件没问题吧??
if (num_combuffer == Num_data2read)
{
System.Threading.Thread.Sleep(50);
int num_combuffer1 = com.BytesToRead;
if (num_combuffer1 == num_combuffer)
{
//初始化一下,10组数据,每组数据有7个数
T11 = 0;
T12 = 0;
T13 = 0;
T14 = 0;
T15 = 0;
P11 = 0;
F11 = 0;
。。。。。
TA1 = 0;
TA2 = 0;
TA3 = 0;
TA4 = 0;
TA5 = 0;
PA1 = 0;
FA1 = 0;
//读串口1
com.Read(Data, 0, num_combuffer);
//错误测试代码,最后删除&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
string str_receive = "";
for (int i = 0; i < 44 * Num_terminal1 + 44; i = i + 22)
{
str_receive = str_receive + Data[i].ToString("x2") + Data[i + 1].ToString("x2)。。。。。。。tring("x2") + Data[i + 20].ToString("x2") + Data[i + 21].ToString("x2") + "\r\n";
}
FileStream fs_data = new FileStream(Name_data, FileMode.Append);
StreamWriter sw_data = new StreamWriter(fs_data);
//开始写入
sw_data.Write(DateTime.Now.ToLongTimeString() + "\r\n" + str_receive + "\r\n");
//清空缓冲区
sw_data.Flush();
//关闭流
sw_data.Close();
fs_data.Close();
//错误测试代码,最后删除&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
////////由于10组数据来的先后顺序不同,需要根据地址进行排序,sort_num_battery是对数据组进行排序
Num_battery = Sort_num_battery(Data);
/////下面是对拍好顺序的数据进行计算真实值,然后对界面上的对应位置进行更新显示
//解析第一个电池数据
Byte[] temp_battery_org1 = new Byte[16];
double[] temp_battery_res1 = new double[7];
int Num_1 = Num_battery[0];
if (Num_1 > 0)
{
temp_battery_org1[0] = Data[Num_1 + 2];
.....
temp_battery_org1[15] = Data[Num_1 + 17];
temp_battery_res1 = Jiexi_onebattery(temp_battery_org1);
T11 = cal_zero[0, 0] * temp_battery_res1[0] + cal_zero[0, 1];
.....
F11 = cal_zero[6, 0] * temp_battery_res1[6] + cal_zero[6, 1];
status_limit1 = 0;
if (T11 > Convert.ToDouble(textBox_TMX11.Text))
{
status_limit1 = status_limit1 + 128;
}
......
if (F11 > Convert.ToDouble(textBox_FMX11.Text))
{
status_limit1 = status_limit1 + 2;
}
SetTextBox_T11(T11);
....
SetTextBox_F11(F11);
ChangeImagePic_TMX11(T11);
....
ChangeImagePic_FMX11(F11);
}
else
{
SetTextBox_T11(T11);
SetTextBox_T12(T12);
SetTextBox_T13(T13);
SetTextBox_T14(T14);
SetTextBox_T15(T15);
SetTextBox_P11(P11);
SetTextBox_F11(F11);
ChangeImagePic_TMX11(T11);
ChangeImagePic_TMX12(T12);
ChangeImagePic_TMX13(T13);
ChangeImagePic_TMX14(T14);
ChangeImagePic_TMX15(T15);
ChangeImagePic_PMX11(P11);
ChangeImagePic_FMX11(F11);
}
//。。。。。。。。。。。。剩下的9组数据和界面控件操作,跟第一个完全一样
//把计算好的前面1组数据,写入到excel表
DateTime T0 = DateTime.Now;
//写入电池1数据
//获得需要写入行的编号
int rowCount1 = worksheet1.LastRowNum + 1;
//创建行
IRow row_i = worksheet1.CreateRow(rowCount1);
//写新行的每个列
ICell cell10 = row_i.CreateCell(0);
cell10.SetCellValue(rowCount1);
ICell cell11 = row_i.CreateCell(1);
cell11.SetCellValue(T0);
ICell cell12 = row_i.CreateCell(2);
cell12.SetCellValue(T11);
ICell cell13 = row_i.CreateCell(3);
cell13.SetCellValue(T12);
ICell cell14 = row_i.CreateCell(4);
cell14.SetCellValue(T13);
ICell cell15 = row_i.CreateCell(5);
cell15.SetCellValue(T14);
ICell cell16 = row_i.CreateCell(6);
cell16.SetCellValue(T15);
ICell cell17 = row_i.CreateCell(7);
cell17.SetCellValue(P11);
ICell cell18 = row_i.CreateCell(8);
cell18.SetCellValue(P12);
ICell cell19 = row_i.CreateCell(9);
cell19.SetCellValue(F11);
ICell cell1a = row_i.CreateCell(10);
cell1a.SetCellValue(status_limit1);
。。。。。 //写入2-10组数据的excel表操作,与第一组完全相同
using (FileStream fs = File.Open(strSaveFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
wk1.Write(fs);
fs.Close();
}
//实时更新曲线
//把数据加入到显示曲线的数组里
//电池1
Data_T11.Add(rowCount1, T11);
Data_T12.Add(rowCount1, T12);
Data_T13.Add(rowCount1, T13);
Data_T14.Add(rowCount1, T14);
Data_T15.Add(rowCount1, T15);
Data_P11.Add(rowCount1, P11);
Data_F11.Add(rowCount1, F11);
//电池2
。。。。。。把数据加入到显示曲线的数组里,2-10个,与第一个完全相同
string Battery_num = listBox_BatteryNum.SelectedItem.ToString();
//界面显示数据组的一些简单操作
if (Battery_num == "电池1")
{
if (radioButton_T1.Checked)
{
T_F_P = "T1";
Data_temp = Data_T11;
}
。。。。。。。。
//线程等待更新
RealTime_Update_Curve(Battery_num, T_F_P, Data_temp);
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(50);
}
else if ((num_combuffer1 > 44) & (num_combuffer1 < Num_data2read))
{
com.ReadExisting();
//Num_error = DateTime.Now.ToString();
FileStream fs_error = new FileStream(Name_error, FileMode.Append);
StreamWriter sw_error = new StreamWriter(fs_error);
//开始写入
sw_error.Write(DateTime.Now.ToString() +"字节少"+ "\r\n");
//清空缓冲区
sw_error.Flush();
//关闭流
sw_error.Close();
fs_error.Close();
}
}
}