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); }