static Program() { g_inspectionInterval = ini.IniReadValue("XunJianInfo", "inspectionInterval"); g_laterInterval = ini.IniReadValue("XunJianInfo", "laterInterval"); //ini.IniWriteValue("TermInfo", "checi", "T141"); g_checi = ini.IniReadValue("TermInfo", "checi"); //读取车次号 //ini.IniWriteValue("TermInfo", "lcNumber", "000002"); g_lcNumber = ini.IniReadValue("TermInfo", "lcNumber"); //读取列车号 g_deadline = ini.IniReadValue("TermInfo", "deadline"); g_localListenPort = ini.IniReadValue("TermInfo", "localListenPort"); g_serialNum = ini.IniReadValue("TermInfo", "serialNum"); g_train = ini.IniReadValue("TermInfo", "train"); g_url = ini.IniReadValue("TermInfo", "url"); g_localVadioUsername = ini.IniReadValue("TermInfo", "localVedioUserName"); g_localVadioPassword = ini.IniReadValue("TermInfo", "localVedioPwd"); g_localVedioIp = ini.IniReadValue("TermInfo", "localVedioIp"); g_localVedioPort = ini.IniReadValue("TermInfo", "localVedioPort"); g_connString = ini.IniReadValue("TermInfo", "connString"); g_comPort = ini.IniReadValue("TermInfo", "comPort"); g_comPortTemperature = ini.IniReadValue("TermInfo", "comPortTemperature"); g_stationNo = ini.IniReadValue("TermInfo", "stationNo"); g_readTempTime = ini.IniReadValue("TermInfo", "readTempTime"); g_TemperatureInterval = ini.IniReadValue("TermInfo", "TemperatureInterval"); g_maxTemp = ini.IniReadValue("TermInfo", "maxTemp"); g_axDvalue = ini.IniReadValue("TermInfo", "axDvalue"); g_waterFormula1 = ini.IniReadValue("TermInfo", "WaterFormula1"); g_waterFormula2 = ini.IniReadValue("TermInfo", "WaterFormula2"); g_waterFormula3 = ini.IniReadValue("TermInfo", "WaterFormula3"); g_oilFormula1 = ini.IniReadValue("TermInfo", "OilFormula1"); g_oilFormula2 = ini.IniReadValue("TermInfo", "OilFormula2"); g_oilFormula3 = ini.IniReadValue("TermInfo", "OilFormula3"); g_waterAlarm1Value = ini.IniReadValue("TermInfo", "waterAlarm1Value"); CriticalData cd = new CriticalData(Program.g_serialNum, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, DateTime.Now, DateTime.Now, false, "1"); g_criticalDataList[0] = cd; g_criticalDataList[1] = cd; g_criticalDataList[2] = cd; }
/// <summary> /// 获取电机关键数据 /// </summary> /// <param name="oilMass">油量</param> /// <param name="generatorId">电机号</param> /// <param name="alarmValue">公共报警值</param> /// <param name="voltage">电压</param> /// <returns>关键数据</returns> public CriticalData GetCriticalData(float oilMass, int generatorId, int alarmValue, float voltage, float voltage24V) { PartialOriginalData partialOriginalData = da.GetPartialOriginalData(generatorId, voltage); CriticalData criticalData = new CriticalData(); AlarmInfo alarmInfo1 = new AlarmInfo(); alarmInfo1.AlarmValue = alarmValue; criticalData.GeneratorId = generatorId; criticalData.Date = DateTime.Now; criticalData._Current = CurrentConvert(partialOriginalData._Current); criticalData.Frequency = FrequencyConvert(partialOriginalData.Frequency); criticalData.OilMass = oilMass; criticalData.OilPress = OilPressConvert(partialOriginalData.GeneratorId, partialOriginalData.OilPress, voltage24V); criticalData.PowerFactor = PowerFactorConvert(partialOriginalData.PowerFactor); criticalData.Voltage = voltageConvert(partialOriginalData.Voltage); criticalData.WaterTemp = WaterTempConvert(partialOriginalData.GeneratorId, partialOriginalData.WaterTemp, voltage24V);//2 parameter criticalData.MotorPower = GetMotorPower(criticalData.Voltage, criticalData._Current); criticalData.MotorSpeed = GetMotorSpeed(criticalData.Frequency); switch (generatorId) { case 1: alarmInfo1.AlarmMS1 = judgeAlarmMS(criticalData.MotorSpeed); alarmInfo1.AlarmOP1 = judgeOilPress(criticalData.OilPress); alarmInfo1.AlarmWT1 = judgeAlarmWT(criticalData.WaterTemp); alarmInfo1.OilLeak1 = partialOriginalData.OilLeak; break; case 2: alarmInfo1.AlarmMS2 = judgeAlarmMS(criticalData.MotorSpeed); alarmInfo1.AlarmOP2 = judgeOilPress(criticalData.OilPress); alarmInfo1.AlarmWT2 = judgeAlarmWT(criticalData.WaterTemp); alarmInfo1.OilLeak2 = partialOriginalData.OilLeak; break; case 3: alarmInfo1.AlarmMS3 = judgeAlarmMS(criticalData.MotorSpeed); alarmInfo1.AlarmOP3 = judgeOilPress(criticalData.OilPress); alarmInfo1.AlarmWT3 = judgeAlarmWT(criticalData.WaterTemp); alarmInfo1.OilLeak3 = partialOriginalData.OilLeak; break; } criticalData.AlarmValue = alarmInfo1.AlarmValue; return(criticalData); }
//显示关键数据 private void showCriticalData(CriticalData cd) { Model.AlarmInfo alarmInfo = new AlarmInfo(cd.AlarmValue, cd.LcNum); try { this.labTopOilMass.Text = alarmInfo.UpOilPlace ? "异常" : "正常"; this.labWaterTankLevel.Text = alarmInfo.UpWaterPlace ? "异常" : "正常"; this.labCellVoltage.Text = alarmInfo.BatteryVoltage ? "异常" : "正常"; this.labFireworks.Text = alarmInfo.FireAlarm ? "异常" : "正常"; this.pictureBox1.Image = alarmInfo.UpOilPlace ? redCircle : greenCircle; this.pictureBox2.Image = alarmInfo.UpWaterPlace ? redCircle : greenCircle; this.pictureBox3.Image = alarmInfo.BatteryVoltage ? redCircle : greenCircle; this.pictureBox4.Image = alarmInfo.FireAlarm ? redCircle : greenCircle; if (cd.GeneratorId == 1) { this.label14.Text = cd.Frequency == -1 ? "——" : cd.Frequency.ToString("0.00"); label16.Text = cd.OilPress == -1 ? "——" : cd.OilPress.ToString("0.00"); label18.Text = cd.PowerFactor == -1 ? "——" : cd.PowerFactor.ToString("0.00"); label20.Text = cd.WaterTemp == -1 ? "——" : cd.WaterTemp.ToString("0.00"); label22.Text = cd.MotorSpeed == -1 ? "——" : cd.MotorSpeed.ToString("0.00"); label24.Text = cd.MotorPower == -1 ? "——" : cd.MotorPower.ToString("0.00"); label28.Text = cd._Current == -1 ? "——" : cd._Current.ToString("0.00"); label30.Text = cd.Frequency == -1 ? "——" : alarmInfo.OilLeak1 ? "报警" : "正常"; label26.Text = cd.Voltage == -1 ? "——" : cd.Voltage.ToString(); this.pictureBox22.Image = cd.Run ? greenCircle : redCircle; this.label48.Text = cd.Run ? "运行" : "停机"; this.pictureBox5.Image = alarmInfo.AlarmOP1 ? redCircle : greenCircle; this.pictureBox6.Image = alarmInfo.AlarmWT1 ? redCircle : greenCircle; this.pictureBox7.Image = alarmInfo.AlarmMS1 ? redCircle : greenCircle; this.pictureBox8.Image = alarmInfo.OilLeak1 ? redCircle : greenCircle; } if (cd.GeneratorId == 2) { this.label40.Text = cd.Frequency == -1 ? "——" : cd.Frequency.ToString("0.00"); label39.Text = cd.OilPress == -1 ? "——" : cd.OilPress.ToString("0.00"); label38.Text = cd.PowerFactor == -1 ? "——" : cd.PowerFactor.ToString("0.00"); label37.Text = cd.WaterTemp == -1 ? "——" : cd.WaterTemp.ToString("0.00"); label36.Text = cd.MotorSpeed == -1 ? "——" : cd.MotorSpeed.ToString("0.00"); label34.Text = cd.MotorPower == -1 ? "——" : cd.MotorPower.ToString("0.00"); label12.Text = cd._Current == -1 ? "——" : cd._Current.ToString("0.00"); label11.Text = cd.Frequency == -1 ? "——" : alarmInfo.OilLeak1 ? "报警" : "正常"; label32.Text = cd.Voltage == -1 ? "——" : cd.Voltage.ToString(); this.pictureBox23.Image = cd.Run ? greenCircle : redCircle; this.label13.Text = cd.Run ? "运行" : "停机"; this.pictureBox12.Image = alarmInfo.AlarmOP2 ? redCircle : greenCircle; this.pictureBox9.Image = alarmInfo.AlarmWT2 ? redCircle : greenCircle; this.pictureBox10.Image = alarmInfo.AlarmMS2 ? redCircle : greenCircle; this.pictureBox11.Image = alarmInfo.OilLeak2 ? redCircle : greenCircle; } if (cd.GeneratorId == 3) { this.label60.Text = cd.Frequency == -1 ? "——" : cd.Frequency.ToString("0.00"); label59.Text = cd.OilPress == -1 ? "——" : cd.OilPress.ToString("0.00"); label58.Text = cd.PowerFactor == -1 ? "——" : cd.PowerFactor.ToString("0.00"); label57.Text = cd.WaterTemp == -1 ? "——" : cd.WaterTemp.ToString("0.00"); label56.Text = cd.MotorSpeed == -1 ? "——" : cd.MotorSpeed.ToString("0.00"); label54.Text = cd.MotorPower == -1 ? "——" : cd.MotorPower.ToString("0.00"); label50.Text = cd._Current == -1 ? "——" : cd._Current.ToString("0.00"); label49.Text = cd.Frequency == -1 ? "——" : alarmInfo.OilLeak1 ? "报警" : "正常"; label52.Text = cd.Voltage == -1 ? "——" : cd.Voltage.ToString(); this.pictureBox24.Image = cd.Run ? greenCircle : redCircle; this.label10.Text = cd.Run ? "运行" : "停机"; this.pictureBox16.Image = alarmInfo.AlarmOP3 ? redCircle : greenCircle; this.pictureBox13.Image = alarmInfo.AlarmWT3 ? redCircle : greenCircle; this.pictureBox14.Image = alarmInfo.AlarmMS3 ? redCircle : greenCircle; this.pictureBox15.Image = alarmInfo.OilLeak3 ? redCircle : greenCircle; } } catch (Exception error) { Program.WriteLog("显示关键数据异常" + error.ToString()); return; } }
//采集关键数据 private void gatherCriticalData() { //初始化报警值 int oldAlarmValue = 0; int alarm = 0; //初始化电机状态 string oldGeneratorStatus = "";//其实int或者byte最好 try { //DataAcquisitionManager dataAcquisitionMana = new DataAcquisitionManager(); //DataAcquisition da = new DataAcquisition(); //获取公共数据 CommonOriginalData commonData = da.GetOriginalCommonData(); //获取油量值 float oilMass = (float)((commonData.OilMass - 5.03) * 1525 / 0.726); //采集三个电机的电压值,判断是否处于开机状态 float[] voltageArray = da.GetGeneratorVoltage(); if (PowerShutDownEvent != null) { bool off = false; if (voltageArray[4] > 0.5) { off = true; } PowerShutDownEvent(off); } bool started1 = voltageArray[0] >= 6.0; bool started2 = voltageArray[1] >= 6.0; bool started3 = voltageArray[2] >= 6.0; //如果电机处于打开状态进行数据采集 //获取三个电机的关键数据 if (started1 || started2 || started3) { string gsStr = ""; gsStr += started1 ? "1" : "0"; gsStr += started2 ? "1" : "0"; gsStr += started3 ? "1" : "0"; if (gsStr != oldGeneratorStatus) { oldGeneratorStatus = gsStr; } AlarmInfo alarmInfo = new AlarmInfo(); //设置相关报警值 alarmInfo.FireAlarm = dataAcquisitionMana.judgeFireAlarm(commonData.FireAlarmValue); alarmInfo.BatteryVoltage = commonData.BattaryVoltage; alarmInfo.UpOilPlace = commonData.UpOilPlace; alarmInfo.UpWaterPlace = commonData.UpWaterPlace; int alarmValue1 = 0; int alarmValue2 = 0; int alarmValue3 = 0; DateTime saveNowTime = DateTime.Now; //一号电机数据采集 if (started1) { CriticalData cd = dataAcquisitionMana.GetCriticalData(oilMass, 1, alarmInfo.AlarmValue, voltageArray[0], voltageArray[3]); cd.LcNum = Program.g_serialNum;//列车编号 cd.Run = true; cd.SaveNowTime = saveNowTime; cd.Isuploadstate = "1"; Program.g_criticalDataList[0] = cd; a1++; if (a1 > timesCount) { Program.WriteLog("保存一号电机关键数据"); //Type t = typeof(CriticalData); //System.Reflection.PropertyInfo[] properties = t.GetProperties(); //foreach (System.Reflection.PropertyInfo info in properties) //{ // Program.WriteLog("name=" + info.Name + ";" + "type=" + info.PropertyType.Name + ";value=" + Program.ini.GetObjectPropertyValue<CriticalData>(cd, info.Name) + "<br />"); //} bll.GetCricialDataToDataBase(cd); //保存数据 a1 = 0; } //showCriticalData(cd); //如果具有报警,且报警灯处于停止状态,通知UI报警灯闪烁 alarmValue1 = cd.AlarmValue; if (cd.AlarmValue > 0 && !Program.g_isflashed) { Program.WriteLog("报警值为:" + cd.AlarmValue); Program.g_isflashed = true; //标示报警灯已经处于闪烁状态 da.StartAlarm(); //开始报警 } } else { Program.WriteLog("一号电机未开机"); CriticalData criticalData = new CriticalData(Program.g_serialNum, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, DateTime.Now, saveNowTime, false, "1"); Program.g_criticalDataList[0] = criticalData; //showCriticalData(criticalData); } //二号电机数据采集 if (started2) { CriticalData cd = dataAcquisitionMana.GetCriticalData(oilMass, 2, alarmInfo.AlarmValue, voltageArray[1], voltageArray[3]); cd.LcNum = Program.g_serialNum;//列车编号 cd.Run = true; cd.SaveNowTime = saveNowTime; cd.Isuploadstate = "1"; Program.g_criticalDataList[1] = cd; a2++; if (a2 > timesCount) { Program.WriteLog("保存二号电机关键数据"); bll.GetCricialDataToDataBase(cd); //保存数据 a2 = 0; } //showCriticalData(cd); //如果具有报警,且报警灯处于停止状态,通知UI报警灯闪烁 alarmValue2 = cd.AlarmValue; if (cd.AlarmValue > 0 && !Program.g_isflashed) { Program.WriteLog("报警值为:" + cd.AlarmValue); Program.g_isflashed = true; //标示报警灯已经处于闪烁状态 da.StartAlarm(); //开始报警 } } else { Program.WriteLog("二号电机未开机"); Program.g_criticalDataList[1] = new CriticalData(Program.g_serialNum, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, DateTime.Now, saveNowTime, false, "1"); //showCriticalData(criticalData); } //三号电机数据采集 if (started3) { CriticalData cd = dataAcquisitionMana.GetCriticalData(oilMass, 3, alarmInfo.AlarmValue, voltageArray[2], voltageArray[3]); cd.LcNum = Program.g_serialNum;//列车编号 cd.Run = true; cd.SaveNowTime = saveNowTime; cd.Isuploadstate = "1"; Program.g_criticalDataList[2] = cd; a3++; if (a3 > timesCount) { Program.WriteLog("保存三号电机关键数据"); bll.GetCricialDataToDataBase(cd); //保存数据 a3 = 0; } //showCriticalData(cd); //如果具有报警,且报警灯处于停止状态,通知UI报警灯闪烁 alarmValue2 = cd.AlarmValue; if (cd.AlarmValue > 0 && !Program.g_isflashed) { Program.WriteLog("报警值为:" + cd.AlarmValue); Program.g_isflashed = true; //标示报警灯已经处于闪烁状态 da.StartAlarm(); //开始报警 } } else { Program.WriteLog("三号电机未开机"); Program.g_criticalDataList[2] = new CriticalData(Program.g_serialNum, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, DateTime.Now, saveNowTime, false, "1"); //showCriticalData(criticalData); } //将三个电机报警值合并 int newAlarmValue = alarmValue1 | alarmValue2 | alarmValue3; //报警值只有15个,确保前16位为0 newAlarmValue = (newAlarmValue << 16) >> 16; //CriticalDataHandle(cdList); //如果报警值发生变化发送到服务器 if (newAlarmValue != oldAlarmValue) { oldAlarmValue = newAlarmValue; alarm = oldAlarmValue; //comManger.AsyncSendAlarm(newAlarmValue);//mark } ///如果报警清除,关闭报警灯 if (newAlarmValue == 0 && Program.g_isflashed) { Program.WriteLog("清除报警值"); Program.g_isflashed = false; da.StopAlarm(); } } else { for (int i = 1; i < 4; i++) { CriticalData criticalData = new CriticalData(Program.g_serialNum, i, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, DateTime.Now, DateTime.Now, false, "1"); //界面显示 //bll.GetCricialDataToDataBase(criticalData); //保存数据 } if (oldGeneratorStatus != "000") { oldGeneratorStatus = "000"; } alarm = oldAlarmValue; } a4++; if (a4 > 15) { a4 = 0; //comManger.AsyncSendGs(oldGeneratorStatus, alarm); //向服务器发送数据 } } catch (Exception error) { Program.WriteLog("采集关键数据出错" + error.ToString()); } }