public override bool ProcessPacket(byte[] buffer, int offset, int count) { bool pResult = false; byte bId = buffer[0]; //设备ID byte bFunCode = buffer[1]; //功能码 int bDataLen = (buffer[2] << 8) | buffer[3]; //从第4字节到数据结束的总字节数 if (32 != bDataLen) { Program.Logger.Debug("数据长度出错。。。放弃本帧数据"); Console.WriteLine("数据长度出错。。。放弃本帧数据"); return(false); } //字节高低位。高前低后 double lData1 = ((buffer[4] << 8) | buffer[5]) * 0.1; //CO2:数据库无此字段 double lData2 = ((buffer[6] << 8) | buffer[7]) * 0.1; //AIR_TEMPERATURE double lData3 = ((buffer[8] << 8) | buffer[9]) * 0.1; //AIR_MOISTURE double lData4 = ((buffer[10] << 8) | buffer[11]) * 10; //SUNSHINE double lData5 = ((buffer[12] << 8) | buffer[13]) * 0.01; //SOIL_PH double lData6 = ((buffer[14] << 8) | buffer[15]) * 0.1; //SOIL_TEMPERATURE double lData7 = ((buffer[16] << 8) | buffer[17]) * 0.1; //SOIL_MOISTURE//20cm double lData8 = ((buffer[18] << 8) | buffer[19]) * 0.1; //SOIL_MOISTURE30 DataClassLH dclh = new DataClassLH(); dclh.ID = bId; dclh.dAirTemperature = lData2; dclh.dAirMoisture = lData3; dclh.dSunshine = lData4; dclh.dSoilPH = lData5; dclh.dSoilTempture = lData6; dclh.dSoilMoisture = lData7; dclh.dSoilMoisture30 = lData8; DataManager.listLH.AddFirst(dclh);///新进来的放在第一条,与取出的方向不一样 count++; // // string strOut = "CO2:" + lData1 + " 环境温度:" + lData2 + " 环境湿度:" + lData3 + " 光照:" + lData4 + " 土壤PH:" + lData5 + " 土壤温度:" + lData6 + " 土壤湿度:" + lData7 + " 土壤湿度30:" + lData8; // Console.WriteLine(count + " " +strOut); //Convert.ToDouble(); return(pResult); }
/// <summary> /// LH:土壤数据存入数据库 /// </summary> private void DataProcessListLH() { while (true) { if (0 == listLH.Count) { Thread.Sleep(100); // Console.WriteLine("+++++++++++none"); continue; } DataClassLH dclh = (DataClassLH)listLH.Last(); string strOut = "CO2:" + 0 + " 环境温度:" + dclh.dAirTemperature + " 环境湿度:" + dclh.dAirMoisture + " 光照:" + dclh.dSunshine + " 土壤PH:" + dclh.dSoilPH + " 土壤温度:" + dclh.dSoilTempture + " 土壤湿度:" + dclh.dSoilMoisture + " 土壤湿度30:" + dclh.dSoilMoisture30; Console.WriteLine(System.DateTime.Now + ":" + strOut); Dictionary <string, double> dct = new Dictionary <string, double>(); dct.Add("SOIL_TEMPERATURE", dclh.dSoilTempture); dct.Add("SOIL_MOISTURE", dclh.dSoilMoisture); dct.Add("SUNSHINE", dclh.dSunshine); dct.Add("AIR_TEMPERATURE", dclh.dAirTemperature); dct.Add("AIR_MOISTURE", dclh.dAirMoisture); dct.Add("SOIL_MOISTURE30", dclh.dSoilMoisture30); dct.Add("SOIL_PH", dclh.dSoilPH); ///将数据插入数据库 /// DBOperation db = DBOperation.GetDbOperation(); if (db != null) { count++; if (count > 20000) { count = 0; } db.updateSoilData(dclh.ID, dct); Console.WriteLine(System.DateTime.Now + ":insert to soil database ok!!:" + count); } else { Program.Logger.Debug("database open failed!!!"); } listLH.RemoveLast(); } }