/// <summary> /// 综合用户设置的状态与设备本身的状态,获取要写入数据库的状态(现在bz4暂时不用,值为0) /// </summary> /// <param name="state">设备本身状态</param> /// <param name="bz4">用户定义的状态</param> /// <returns></returns> public static short GetState(DeviceRunState state, int bz4) { short myState = (short)state; if ((bz4 & 0x02) == 0x02) { myState = (short)DeviceRunState.EquipmentSleep; } else if ((bz4 & 0x04) == 0x04) { myState = (short)DeviceRunState.EquipmentDebugging; } else if ((bz4 & 0x08) == 0x08) { myState = (short)DeviceRunState.EquipmentAdjusting; } return(myState); }
/// <summary> /// 更新和记录 继电器 控制设备 运行或关闭 /// </summary> public void DeviceNewAndRecord(int iRoomIndex, EventType eventType, DeviceRunState onOrOff, DeviceRunModel handOrAuto, bool blRecord) { EventContent eventContent = EventContent.开启; if (onOrOff == DeviceRunState.运行) { eventContent = EventContent.开启; if (eventType == EventType.烘干) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomHot.State = DeviceRunState.运行; } } else if (eventType == EventType.除湿) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomDehumi.State = DeviceRunState.运行; } } else if (eventType == EventType.新风) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomFan.State = DeviceRunState.运行; } } } else if (onOrOff == DeviceRunState.停止) { eventContent = EventContent.关闭; if (eventType == EventType.烘干) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomHot.State = DeviceRunState.停止; } } else if (eventType == EventType.除湿) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomDehumi.State = DeviceRunState.停止; } } else if (eventType == EventType.新风) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomFan.State = DeviceRunState.停止; } } } if (handOrAuto == DeviceRunModel.手动) { if (eventType == EventType.烘干) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomHot.HandOrAuto = DeviceRunModel.手动; clsEnvirControl.listRoom[iRoomIndex].roomHot.TimeHand = DateTime.Now; } } else if (eventType == EventType.除湿) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomDehumi.HandOrAuto = DeviceRunModel.手动; clsEnvirControl.listRoom[iRoomIndex].roomDehumi.TimeHand = DateTime.Now; } } else if (eventType == EventType.新风) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iRoomIndex].roomFan.HandOrAuto = DeviceRunModel.手动; clsEnvirControl.listRoom[iRoomIndex].roomFan.TimeHand = DateTime.Now; } } } if (blRecord) { string strSql = "insert into tb_EnviriEvent (Type,Area,Reason,EventContent,Time)values " + "('" + eventType.ToString() + "','" + clsEnvirControl.listRoom[iRoomIndex].StrName + "','" + handOrAuto.ToString() + "'," + "'" + eventContent.ToString() + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "')"; datalogic.SqlComNonQuery(strSql); //if (NewEventShowEvent != null) //{ // string strPoint = strArea; // if (blMoreAir) // strPoint += btAddr.ToString(); // if (content == EventContent.设置温度) // { // NewEventShowEvent(new NewEventEventArgs(EventType.空调, strPoint, content.ToString() + btSetTemp.ToString(), "", "")); // } // else // { // NewEventShowEvent(new NewEventEventArgs(EventType.空调, strPoint, content.ToString(), "", "")); // } //} } }
private void sbtnAirSet_Click(object sender, EventArgs e) { string strOnOff = cbbAirOnOff.Text; string strMode = cbbModel.Text; string strTemp = tbAirTemp.Text; if (string.IsNullOrEmpty(strOnOff)) { MessageUtil.ShowError("空调启停不可为空!"); return; } if (string.IsNullOrEmpty(strMode)) { MessageUtil.ShowError("空调模式不可为空!"); return; } if (string.IsNullOrEmpty(strTemp)) { MessageUtil.ShowError("空调设置温度不可为空!"); return; } sbtnAirSet.Enabled = false; clsEnvirControl.blAskAir = false; iAirClick = 30; Thread.Sleep(600); #region 空调控制 DeviceRunState state = DeviceRunState.停止; EventContent OnOff = EventContent.关闭; if (cbbAirOnOff.Text == DeviceRunState.停止.ToString()) { OnOff = EventContent.关闭; state = DeviceRunState.停止; } else if (cbbAirOnOff.Text == DeviceRunState.运行.ToString()) { OnOff = EventContent.开启; state = DeviceRunState.运行; } AirRunModel airRunModel = AirRunModel.制冷; EventContent model = EventContent.设置制冷; if (cbbModel.Text == AirRunModel.制冷.ToString()) { airRunModel = AirRunModel.制冷; model = EventContent.设置制冷; } else if (cbbModel.Text == AirRunModel.制热.ToString()) { airRunModel = AirRunModel.制热; model = EventContent.设置制热; } byte bTemp = Convert.ToByte(tbAirTemp.Text); string strArea = clsEnvirControl.listRoom[iIndex].StrName; bool blMoreAir = false;//是否 为 一个房间多台空调 if (clsEnvirControl.listRoom[iIndex].listAir.Count > 1) { blMoreAir = true; } for (int iIndexAir = 0; iIndexAir < clsEnvirControl.listRoom[iIndex].listAir.Count; iIndexAir++)//房间内的 所有空调 { #region 启停 if (clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].State != state) { AirFactoryType factory = clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].AirType; byte addr = (byte)clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].IntAddr; bool blRet = serialAir.AirControl(factory, addr, OnOff, 26, strArea, DeviceRunModel.手动, blMoreAir, IsWait.OnlyWait); if (blRet) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].State = state; clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].HandOrAuto = DeviceRunModel.手动; clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].TimeHand = DateTime.Now; } } else { MessageUtil.ShowTips(addr.ToString() + "#空调启停设置失败!"); iAirClick = 0; clsEnvirControl.blAskAir = true; sbtnAirSet.Enabled = true; return; } } #endregion #region 模式 if (clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].Model != airRunModel) { AirFactoryType factory = clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].AirType; byte addr = (byte)clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].IntAddr; bool blRet = serialAir.AirControl(factory, addr, model, 26, strArea, DeviceRunModel.自动, blMoreAir, IsWait.OnlyWait); if (blRet) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].Model = airRunModel; clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].HandOrAuto = DeviceRunModel.手动; clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].TimeHand = DateTime.Now; } } else { MessageUtil.ShowTips(addr.ToString() + "# 空调模式设置失败!"); iAirClick = 0; clsEnvirControl.blAskAir = true; sbtnAirSet.Enabled = true; return; } } #endregion #region 温度 if (clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].IntTempSet != bTemp) { AirFactoryType factory = clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].AirType; byte addr = (byte)clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].IntAddr; bool blRet = serialAir.AirControl(factory, addr, EventContent.设置温度, bTemp, strArea, DeviceRunModel.自动, blMoreAir, IsWait.OnlyWait); if (blRet) { lock (clsEnvirControl.listRoom) { clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].IntTempSet = clsEnvirSet.intSetTempCool; clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].HandOrAuto = DeviceRunModel.手动; clsEnvirControl.listRoom[iIndex].listAir[iIndexAir].TimeHand = DateTime.Now; } } else { MessageUtil.ShowTips(addr.ToString() + "# 空调温度设置失败!"); iAirClick = 0; clsEnvirControl.blAskAir = true; sbtnAirSet.Enabled = true; return; } } #endregion } #endregion iAirClick = 0; clsEnvirControl.blAskAir = true; sbtnAirSet.Enabled = true; }
/// <summary> /// 读大金空调运行状态 /// </summary> public CommuniState DjAirReadData(byte bAddr, ref DeviceRunState state, ref AirRunModel model, ref int iSetTemp) { CommuniState CommuniState = CommuniState.无回复; DjAirState[1] = bAddr; DjAirState[2] = 0x01; DjAirState[3] = 0x05; byte bCheck = 0; for (int i = 1; i < 4; i++) { bCheck += DjAirState[i]; } DjAirState[4] = bCheck; byte[] bRece = new byte[22]; int iReceLen = serial.SendReceByte(DjAirState, ref bRece, 10, IsWait.CanStop); //txt 发送 接受 txtLog.TxtWriteByte("Air.txt", "DjState Send", DjAirState, false); if (iReceLen > 0) { txtLog.TxtWriteByte("Air.txt", "DjState Rece", bRece, true); } if (iReceLen == 22) { bCheck = 0; for (int i = 1; i < 20; i++) { bCheck += bRece[i]; } if (bRece[0] == 0x7e && bRece[1] == bAddr && bRece[2] == 0x11 && bRece[3] == 0x05 && bRece[20] == bCheck && bRece[21] == 0x0d) { bool blPBoard = false;//P板和空调不通信 for (int i = 4; i < 20; i++) { if (bRece[i] != 0) { blPBoard = true; break; } } if (blPBoard) { CommuniState = CommuniState.正常; iSetTemp = bRece[4]; if (bRece[10] == 0x00) { state = DeviceRunState.停止; } else if (bRece[10] == 0x01) { state = DeviceRunState.运行; } // 60H:送风、61H:制热、62H:制冷、63H:自动、67H:除湿 if (bRece[11] == 0x60) { model = AirRunModel.送风; } else if (bRece[11] == 0x61) { model = AirRunModel.制热; } else if (bRece[11] == 0x62) { model = AirRunModel.制冷; } else if (bRece[11] == 0x63) { model = AirRunModel.自动; } else if (bRece[11] == 0x67) { model = AirRunModel.除湿; } } else { CommuniState = CommuniState.错误; } } } return(CommuniState); }
/// <summary> /// 生成报警记录 /// </summary> /// <param name="defInfo"></param> /// <param name="sTime"></param> /// <param name="dataState"></param> /// <param name="state"></param> public static void CreateJC_BInfo(Jc_DefInfo defInfo, DateTime sTime, DeviceDataState dataState, DeviceRunState state) { Jc_BInfo alarmInfo = new Jc_BInfo(); string controlport = string.Empty; alarmInfo.Cs = ""; alarmInfo.PointID = defInfo.PointID; alarmInfo.ID = IdHelper.CreateLongId().ToString(); alarmInfo.Devid = defInfo.Devid; alarmInfo.Fzh = defInfo.Fzh; alarmInfo.Kh = defInfo.Kh; alarmInfo.Dzh = defInfo.Dzh; alarmInfo.Kzk = controlport; alarmInfo.Point = defInfo.Point; alarmInfo.Ssz = EnumHelper.GetEnumDescription(state); alarmInfo.Isalarm = (short)defInfo.Alarm; alarmInfo.Stime = sTime; alarmInfo.Etime = new DateTime(1900, 1, 1, 0, 0, 0); alarmInfo.Type = (short)dataState; alarmInfo.State = GetState((DeviceRunState)state, defInfo.Bz4); alarmInfo.Upflag = "0"; alarmInfo.Wzid = defInfo.Wzid; InsertJC_BInfo(alarmInfo); }