public void deviceInfo(dataStructure.device device) { id.Text = device.id; time.Text = device.time.ToString(); runningtime.Text = device.runningTime; if (device.isCanConnection == true) { int canReverse = device.canDirectionandSpeedMode & 0x0004; int canInterlock = device.canDirectionandSpeedMode & 0x0010; reverse.Text = canReverse.ToString(); interlock.Text = canInterlock.ToString(); int Direction = device.canDirectionandSpeedMode & 0x0003; int SpeedMode = device.canDirectionandSpeedMode & 0x0008; switch (Direction) { case 0: direction.Text = "无效"; break; case 1: direction.Text = "前进"; break; case 2: direction.Text = "后退"; break; case 3: direction.Text = "无效"; break; default: break; } if (SpeedMode == 0) { speedmode.Text = "高速"; } else { speedmode.Text = "低速"; } if (device.canLowPowerMode == 0xaa) { lowpowermode.Text = "低功耗"; } else { lowpowermode.Text = "其他"; } speed.Text = device.canSpeed.ToString() + "rpm"; course.Text = device.canCourse.ToString() + "km"; DirectVoltage.Text = device.canDirectVoltage.ToString() + "V"; MotorCurrent.Text = device.canMotorCurrent.ToString() + "A"; MotorTemperature.Text = device.canMotorTemperature.ToString() + "°C"; } else { reverse.Text = "##"; interlock.Text = "##"; direction.Text = "##"; speedmode.Text = "##"; lowpowermode.Text = "##"; speed.Text = "##"; course.Text = "##"; DirectVoltage.Text = "##"; MotorCurrent.Text = "##"; MotorTemperature.Text = "##"; } //模拟量数据2个 liftMotorCurrent.Text = device.liftMotorCurrent.ToString() + "A"; liftMotorTemperature.Text = device.liftMotorTemperature.ToString() + "°C"; //下面是数字量显示 hornSwitch.Text = device.hornSwitch ? "正常" : "不正常"; horn.Text = device.hornCount.ToString() + "次"; hornGround.Text = device.hornGround ? "不正常" : "正常"; upBtnSwitch.Text = device.upBtnSwitch ? "正常" : "不正常"; upBtnContactorCoilUpper.Text = device.upBtnCount.ToString() + "次"; upBtnContactorCoilDown.Text = device.upBtnContactorCoilDown ? "不正常" : "正常"; upBtnContactUpper.Text = device.upBtnContactUpper ? "正常" : "不正常"; upBtnContactDown.Text = device.upBtnContactorCount.ToString() + "次"; downBtnSwitch.Text = device.downBtnSwitch ? "正常" : "不正常"; downBtnsolenoidvalveUpper.Text = device.downBtnCount.ToString() + "次"; downBtnsolenoidvalveDown.Text = device.downBtnsolenoidvalveDown ? "不正常" : "正常"; masterContactorCoilUpper.Text = device.masterContactorCoilUpper ? "正常" : "不正常"; masterContactorCoilDown.Text = device.masterContactorCoilDown ? "不正常" : "正常"; masterContactUpper.Text = device.masterContactUpper ? "正常" : "不正常"; masterContactDown.Text = device.masterContactorCount.ToString() + "次"; arresterUpper.Text = device.arresterUpper ? "正常" : "不正常"; arresterDown.Text = device.arresterCount.ToString() + "次"; }
/// <summary> /// 报警检测(改成数据库较为方便) /// </summary> /// <param name="faultDevice"></param> /// <param name="deviceState"></param> public void errorCheckAndShow(ref ConcurrentDictionary <KeyValuePair <string, int>, dataStructure.faultWarnData> faultDevice, dataStructure.device deviceState) { if ((deviceState.canError & 0x0080) > 0) { int faultNumber = deviceState.canError & 0x7f; //faultData.faultID = deviceState.id; //报警ID //faultData.faultTime = deviceState.time;//报警时间 //faultData.runningTime = deviceState.runningTime;//运行时间 if (faultNumber != 0) { if (faultDevice.ContainsKey(new KeyValuePair <string, int>(deviceState.id, faultNumber))) //如果已经有该ID的该类型报警 { int errorState = 0; if (faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorState.LastOrDefault() == 2) { errorState = 0; } else { errorState = 1; } int errorCount = ++faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorCount; faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].faultTime.Add(deviceState.time); faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorState.Add(errorState); if (faultNumber == 40) { faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorValue.Add(deviceState.liftMotorCurrent); } else if (faultNumber == 41) { faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorValue.Add(deviceState.liftMotorTemperature); } else { faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorValue.Add(0); } // faultDevice[new KeyValuePair<string, int>(deviceState.id, faultNumber)].runningTime = deviceState.runningTime; //存入储存队列 // dataStructure.faultWarnData save = faultDevice[new KeyValuePair<string, int>(deviceState.id, faultNumber)]; this.Invoke((Action)( () => { ListViewItem li = FaultWarnList.Items.Cast <ListViewItem>().FirstOrDefault(x => x.SubItems[1].Text == faultNumber.ToString()); if (li != null) { FaultWarnList.BeginUpdate(); li.SubItems[0].Text = deviceState.time.ToString("HH:mm:ss"); li.SubItems[2].Text = errorCount.ToString(); li.BackColor = Color.Red; FaultWarnList.EndUpdate(); } if (btnFaultWarn.Enabled == true) { warningTimer.Enabled = true; } })); } else { dataStructure.faultWarnData errorData = new dataStructure.faultWarnData(); errorData.faultID = deviceState.id; //errorData.runningTime = deviceState.runningTime; errorData.errorNumber = faultNumber; errorData.faultTime = new List <DateTime>(); errorData.errorValue = new List <int>(); errorData.errorState = new List <int>(); errorData.faultTime.Add(deviceState.time); errorData.errorState.Add(0); if (faultNumber == 40) { errorData.errorValue.Add(deviceState.liftMotorCurrent); } else if (faultNumber == 41) { errorData.errorValue.Add(deviceState.liftMotorCurrent); } else { errorData.errorValue.Add(0); } // errorData.errorArea = dictOfIdAndArea[deviceState.id].Country; // errorData.errorContent = dataStructure.errorDictionary[errorData.errorNumber]; errorData.errorLevel = 1; // errorData.errorMethod = dataStructure.errorMethod[errorData.errorNumber]; errorData.errorCount = 1; faultDevice.TryAdd(new KeyValuePair <string, int>(deviceState.id, faultNumber), errorData); //报警表格中添加信息 ListViewItem item = new ListViewItem(deviceState.time.ToString("HH:mm:ss")); item.SubItems.Add(errorData.errorNumber.ToString()); //item.SubItems.Add(dictOfIdAndArea[errorData.faultID].Country); item.SubItems.Add(errorData.errorCount.ToString()); // item.SubItems.Add(errorData.runningTime.ToString()); item.BackColor = Color.Red; this.Invoke((Action)( () => { FaultWarnList.Items.Add(item); if (btnFaultWarn.Enabled == true) { warningTimer.Enabled = true; } }) ); //errorDeviceDataQueue.Enqueue(faultData); //推入存储队列 //item.SubItems.Add(onlineDeviceNowTimeData["20" + deviceId].canCourse.ToString() + "公里"); //if (i % 2 == 0) //{ // item.BackColor = Color.LightSlateGray; //} //i++; //.Items.Add(item); } } } else { int faultNumber = deviceState.canError & 0x7f; int errorCount = 0; if (faultDevice.ContainsKey(new KeyValuePair <string, int>(deviceState.id, faultNumber))) { errorCount = ++faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorCount; faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].faultTime.Add(deviceState.time); faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorState.Add(2); if (faultNumber == 40) { faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorValue.Add(deviceState.liftMotorCurrent); } else if (faultNumber == 41) { faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorValue.Add(deviceState.liftMotorTemperature); } else { faultDevice[new KeyValuePair <string, int>(deviceState.id, faultNumber)].errorValue.Add(0); } } this.Invoke((Action)( () => { ListViewItem li = FaultWarnList.Items.Cast <ListViewItem>().FirstOrDefault(x => x.SubItems[1].Text == faultNumber.ToString()); if (li != null) { FaultWarnList.BeginUpdate(); li.SubItems[0].Text = deviceState.time.ToString("HH:mm:ss"); li.SubItems[2].Text = errorCount.ToString(); li.BackColor = Color.Green; FaultWarnList.EndUpdate(); } }) ); //ListViewItem li = FaultWarnList.Items.Cast<ListViewItem>().First(x => x.Text == deviceState.id && x.SubItems[2].Text == faultNumber.ToString()); //li.BackColor = Color.Green; } }
public deviceInfo(dataStructure.device device, main mainform, string lang) { language = lang; if (lang == "en") { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en"); //对当前窗体应用更改后的资源 } InitializeComponent(); mainformhandle = mainform; stateid = device.id; //this.Text = "编号" + device.id + "叉车信息"; id.Text = device.id; time.Text = device.time.ToString(); runningtime.Text = device.runningTime; if (device.isCanConnection == true) { if (dataStructure.errorDictionary.ContainsKey(device.canError)) { if (language == "en") { error.Text = dataStructure.EnglishErrorDictionary[device.canError]; errormethod.Text = dataStructure.EnglishErrorMethod[device.canError]; } else { error.Text = dataStructure.errorDictionary[device.canError]; errormethod.Text = dataStructure.errorMethod[device.canError]; } this.error.ForeColor = Color.Red; this.errormethod.ForeColor = Color.Red; } else { error.Text = " #### "; errormethod.Text = " #### "; } int canReverse = device.canDirectionandSpeedMode & 0x0004; int canInterlock = device.canDirectionandSpeedMode & 0x0010; reverse.Text = canReverse.ToString(); interlock.Text = canInterlock.ToString(); int Direction = device.canDirectionandSpeedMode & 0x0003; int SpeedMode = device.canDirectionandSpeedMode & 0x0008; switch (Direction) { case 0: direction.Text = (language == "en") ? "Invalid" : "无效"; break; case 1: direction.Text = (language == "en") ? "Forward" : "前进"; break; case 2: direction.Text = (language == "en") ? "Backward" : "后退"; break; case 3: direction.Text = (language == "en")? "Invalid" : "无效"; break; default: break; } if (SpeedMode == 0) { speedmode.Text = (language == "en")? "High speed" : "高速"; } else { speedmode.Text = (language == "en") ? "Low speed" : "低速"; } if (device.canLowPowerMode == 0xaa) { lowpowermode.Text = (language == "en") ? "yes" : "低功耗"; } else { lowpowermode.Text = (language == "en") ? "no" : "其他"; } speed.Text = device.canSpeed.ToString() + "rpm"; course.Text = device.canCourse.ToString() + "km"; DirectVoltage.Text = device.canDirectVoltage.ToString() + "V"; MotorCurrent.Text = device.canMotorCurrent.ToString() + "A"; MotorTemperature.Text = device.canMotorTemperature.ToString() + "°C"; } else { reverse.Text = "##"; interlock.Text = "##"; error.Text = "##"; errormethod.Text = "##"; direction.Text = "##"; speedmode.Text = "##"; lowpowermode.Text = "##"; speed.Text = "##"; course.Text = "##"; DirectVoltage.Text = "##"; MotorCurrent.Text = "##"; MotorTemperature.Text = "##"; } //模拟量数据2个 liftMotorCurrent.Text = device.liftMotorCurrent.ToString() + "A"; liftMotorTemperature.Text = device.liftMotorTemperature.ToString() + "°C"; //下面是数字量显示 hornSwitch.Text = device.hornSwitch ? "正常" : "不正常"; horn.Text = device.hornCount.ToString() + "次"; hornGround.Text = device.hornGround ? "不正常" : "正常"; upBtnSwitch.Text = device.upBtnSwitch ? "正常" : "不正常"; upBtnContactorCoilUpper.Text = device.upBtnCount.ToString() + "次"; upBtnContactorCoilDown.Text = device.upBtnContactorCoilDown ? "不正常" : "正常"; upBtnContactUpper.Text = device.upBtnContactUpper ? "正常" : "不正常"; upBtnContactDown.Text = device.upBtnContactorCount.ToString() + "次"; downBtnSwitch.Text = device.downBtnSwitch ? "正常" : "不正常"; downBtnsolenoidvalveUpper.Text = device.downBtnCount.ToString() + "次"; downBtnsolenoidvalveDown.Text = device.downBtnsolenoidvalveDown ? "不正常" : "正常"; masterContactorCoilUpper.Text = device.masterContactorCoilUpper ? "正常" : "不正常"; masterContactorCoilDown.Text = device.masterContactorCoilDown ? "不正常" : "正常"; masterContactUpper.Text = device.masterContactUpper ? "正常" : "不正常"; masterContactDown.Text = device.masterContactorCount.ToString() + "次"; arresterUpper.Text = device.arresterUpper ? "正常" : "不正常"; arresterDown.Text = device.arresterCount.ToString() + "次"; }
/// <summary> /// 数据解析 /// </summary> /// <param name="data"></param> private void dataprocess(string data) { int dataHead = data.IndexOf("@"); int dataTail = data.IndexOf("$"); if (dataHead > dataTail) { return; } if (dataTail - dataHead < 26) //信息不完整直接返回; { return; } string dataLenth = data.Substring(dataHead + 21, 2); int dataLen = stringToInt(dataLenth, 2); if (data.Length != 26 + dataLen) { return; } string dstSource = data.Substring(dataHead + 1, 4); string srcSource = data.Substring(dataHead + 5, 4); string id = "20" + data.Substring(dataHead + 9, 10); string fc = data.Substring(dataHead + 19, 2); string checksum = data.Substring(dataTail - 2, 2); int datacheck = stringToInt(checksum, 2); //数据中的校验和 string collectData = data.Substring(dataHead + 23, dataLen); int check = main.CheckSum(collectData, dataLen); if (check != datacheck) { return; //校验失败直接退出 } switch (fc) { //状态采集信息处理 case "01": dataStructure.device deviceState = new dataStructure.device(id, collectData); //推入在线设备队列 standloneid = deviceState.id; standlonerunningtime = deviceState.runningTime; refresh ourrefresh = new refresh(deviceInfo); this.Invoke(ourrefresh, deviceState); //} break; case "02": dataStructure.device FaultdeviceState = new dataStructure.device(id, collectData); //推入在线设备队列 //onlineDeviceDataQueue.Enqueue(FaultdeviceState); //deviceStateSaveQueue.Enqueue(deviceState); standloneid = FaultdeviceState.id; standlonerunningtime = FaultdeviceState.runningTime; ///检查状态信息中是否有故障 errorCheckAndShow(ref faultDevice, FaultdeviceState); break; default: break; } //byte[] idchar = System.Text.Encoding.UTF8.GetBytes(id); //dictOfIdforClient[id].Send(idchar); }
private void timer1_Tick(object sender, EventArgs e) { dataStructure.device device = mainformhandle.getNewlyDataState(stateid); if (device == null) { return; } id.Text = device.id; time.Text = device.time.ToString(); runningtime.Text = device.runningTime; if (device.isCanConnection == true) { if (dataStructure.errorDictionary.ContainsKey(device.canError)) { if (language == "en") { error.Text = dataStructure.EnglishErrorDictionary[device.canError]; errormethod.Text = dataStructure.EnglishErrorMethod[device.canError]; } else { error.Text = dataStructure.errorDictionary[device.canError]; errormethod.Text = dataStructure.errorMethod[device.canError]; } this.error.ForeColor = Color.Red; this.errormethod.ForeColor = Color.Red; } else { error.Text = " #### "; errormethod.Text = " #### "; } int canReverse = device.canDirectionandSpeedMode & 0x0004; int canInterlock = device.canDirectionandSpeedMode & 0x0010; reverse.Text = canReverse.ToString(); interlock.Text = canInterlock.ToString(); int Direction = device.canDirectionandSpeedMode & 0x0003; int SpeedMode = device.canDirectionandSpeedMode & 0x0008; switch (Direction) { case 0: direction.Text = (language == "en") ? "Invalid" : "无效"; break; case 1: direction.Text = (language == "en") ? "Forward" : "前进"; break; case 2: direction.Text = (language == "en") ? "Backward" : "后退"; break; case 3: direction.Text = (language == "en") ? "Invalid" : "无效"; break; default: break; } if (SpeedMode == 0) { speedmode.Text = (language == "en") ? "High speed" : "高速"; } else { speedmode.Text = (language == "en") ? "Low speed" : "低速"; } if (device.canLowPowerMode == 0xaa) { lowpowermode.Text = (language == "en") ? "yes" : "低功耗"; } else { lowpowermode.Text = (language == "en") ? "no" : "其他"; } speed.Text = device.canSpeed.ToString() + "rpm"; course.Text = device.canCourse.ToString() + "km"; DirectVoltage.Text = device.canDirectVoltage.ToString() + "V"; MotorCurrent.Text = device.canMotorCurrent.ToString() + "A"; MotorTemperature.Text = device.canMotorTemperature.ToString() + "°C"; } else { reverse.Text = "##"; interlock.Text = "##"; error.Text = "##"; errormethod.Text = "##"; direction.Text = "##"; speedmode.Text = "##"; lowpowermode.Text = "##"; speed.Text = "##"; course.Text = "##"; DirectVoltage.Text = "##"; MotorCurrent.Text = "##"; MotorTemperature.Text = "##"; } //模拟量数据2个 liftMotorCurrent.Text = device.liftMotorCurrent.ToString() + "A"; liftMotorTemperature.Text = device.liftMotorTemperature.ToString() + "°C"; //下面是数字量显示 hornSwitch.Text = device.hornSwitch ? "正常" : "不正常"; horn.Text = device.hornCount.ToString() + "次"; hornGround.Text = device.hornGround ? "不正常" : "正常"; upBtnSwitch.Text = device.upBtnSwitch ? "正常" : "不正常"; upBtnContactorCoilUpper.Text = device.upBtnCount.ToString() + "次"; upBtnContactorCoilDown.Text = device.upBtnContactorCoilDown ? "不正常" : "正常"; upBtnContactUpper.Text = device.upBtnContactUpper ? "正常" : "不正常"; upBtnContactDown.Text = device.upBtnContactorCount.ToString() + "次"; downBtnSwitch.Text = device.downBtnSwitch ? "正常" : "不正常"; downBtnsolenoidvalveUpper.Text = device.downBtnCount.ToString() + "次"; downBtnsolenoidvalveDown.Text = device.downBtnsolenoidvalveDown ? "不正常" : "正常"; masterContactorCoilUpper.Text = device.masterContactorCoilUpper ? "正常" : "不正常"; masterContactorCoilDown.Text = device.masterContactorCoilDown ? "不正常" : "正常"; masterContactUpper.Text = device.masterContactUpper ? "正常" : "不正常"; masterContactDown.Text = device.masterContactorCount.ToString() + "次"; arresterUpper.Text = device.arresterUpper ? "正常" : "不正常"; arresterDown.Text = device.arresterCount.ToString() + "次"; }