/// <summary> /// 发送string数据命令 /// </summary> /// <param name="strSend"></param> /// <param name="Overtime"></param> /// <returns></returns> //public string SendReceStr(string strSend, int Overtime) //{ // string strRece=""; // try // { // if (!(comPort.IsOpen)) comPort.Open(); // comPort.ReadExisting(); // comPort.Write(strSend); // System.Threading.Thread.Sleep(Overtime); // strRece = comPort.ReadExisting(); // } // catch (Exception ex) // { // if (frmMain.blDebug) // MessageUtil.ShowTips(ex.Message); // } // return strRece; //} public string SendReceStr(string strSend, int Overtime, IsWait isWait) { string strRece = ""; try { if (!(comPort.IsOpen)) { comPort.Open(); } comPort.ReadExisting(); comPort.Write(strSend); for (int i = 0; i < Overtime; i++) { if (isWait == IsWait.OnlyWait) { Thread.Sleep(100); } else if (isWait == IsWait.CanStop) { if (clsEnvirControl.blAskAir) { Thread.Sleep(100); } else { i = Overtime; } } } strRece = comPort.ReadExisting(); } catch (Exception ex) { if (frmMain.blDebug) { MessageUtil.ShowTips(ex.Message); } } return(strRece); }
/// <summary> /// 设置空调厂家 /// </summary> /// <param name="bAddr"></param> /// <param name="bTemp"></param> public bool OtherAirSetType(byte bAddr, byte bFactory, int iCode, IsWait isWait) { bool blRet = false; if (bAddr >= 10) { Byte bHAddr = (byte)(bAddr % 10); OtherAirType[3] = (byte)(bHAddr + 0x30);//地址高位 } else { OtherAirType[4] = (byte)(bAddr + 0x30); //地址低位 } OtherAirType[5] = 0x02; //设置空调厂家 OtherAirType[7] = bFactory;; OtherAirType[6] = 0x00; //校验 OtherAirType[9] = (byte)(OtherAirType[5] ^ OtherAirType[6] ^ OtherAirType[7] ^ OtherAirType[8]); OtherAirType[11] = (byte)iCode; OtherAirType[10] = (byte)(iCode >> 8); byte[] bRece = new byte[14]; int iReceLen = serial.SendReceByte(OtherAirType, ref bRece, 10, isWait); //txt 发送 接受 txtLog.TxtWriteByte("Air.txt", "OtherAirCode Send", OtherAirType, false); if (iReceLen > 0) { txtLog.TxtWriteByte("Air.txt", "OtherAirCode Rece", bRece, true); } if (iReceLen == 14) { byte ReceCheck = (byte)(bRece[5] ^ bRece[6] ^ bRece[7] ^ bRece[8]); if (bRece[0] == OtherAirType[0] && bRece[1] == OtherAirType[1] && bRece[2] == OtherAirType[2] && bRece[3] == OtherAirType[3] && bRece[4] == OtherAirType[4] && bRece[5] == 0x02 && bRece[9] == ReceCheck && bRece[13] == 0x0D)//&& bRece[12] == 0x01 { blRet = true; } } return(blRet); }
/// <summary> /// DKP 空调控制器 收发数据 判断接受数据 根据情况 多次或 等待发送 /// </summary> /// <returns></returns> private CommuniState DkpDadaSendRece(IsWait isWait) { CommuniState CommuniState = CommuniState.无回复; byte[] bRece = new byte[8]; int iReceLen = serial.SendReceByte(DjControl, ref bRece, 10, isWait); //txt 发送 接受 txtLog.TxtWriteByte("Air.txt", "DjControl Send", DjControl, false); if (iReceLen > 0) { txtLog.TxtWriteByte("Air.txt", "DjControl Rece", bRece, true); } if (iReceLen == 8) { if (bRece[0] == DjControl[0] && bRece[1] == DjControl[1] && bRece[2] == DjControl[2] && bRece[3] == DjControl[3] && bRece[4] == DjControl[4] && bRece[5] == DjControl[5] && bRece[6] == DjControl[6] && bRece[7] == DjControl[7]) { CommuniState = CommuniState.正常; } else { CommuniState = CommuniState.错误; } } else { if (iReceLen == 0) { CommuniState = CommuniState.无回复; } else { CommuniState = CommuniState.错误; } } return(CommuniState); }
/// <summary> /// 控制大金空调 开关或模式 /// </summary> public bool DjAirControl(byte bAddr, DjControlType type, byte bContent, IsWait isWiat) { bool blRet = false; DjControl[1] = bAddr; DjControl[2] = 0x03; DjControl[3] = 0x04; DjControl[4] = (byte)type; DjControl[5] = bContent; byte bCheck = 0; for (int i = 1; i < 6; i++) { bCheck += DjControl[i]; } DjControl[6] = bCheck; CommuniState ret = DkpDadaSendRece(isWiat); if (ret == CommuniState.错误) { int iSend = 3; for (int i = 0; i < iSend; i++) { Thread.Sleep(2000); ret = DkpDadaSendRece(isWiat); if (ret == CommuniState.正常) { break; } } } if (ret == CommuniState.正常) { blRet = true; } return(blRet); }
/// <summary> /// 开启关闭 设备 空调、加热、除湿、新风 /// </summary> /// <param name="Addr">板地址</param> /// <param name="bOnOff">开启关闭4</param> /// <param name="bHotDehumi">继电器序号 加热为0 除湿为1 即继电器0 继电器1 </param> public bool OnOffDevice(int Addr, OnOffRelay bOnOff, DeviceRelayNo bRelayNo, string area, DeviceRunModel runModel, bool blRecord, IsWait isWait) { bool blRet = false; SendRelay[0] = (byte)Addr; SendRelay[1] = 0x05; SendRelay[2] = 0x00; SendRelay[3] = (byte)bRelayNo; SendRelay[4] = (byte)bOnOff; SendRelay[5] = 0x00; ushort crc = crc16.CalculateCrc16(SendRelay, 6); SendRelay[7] = (byte)(crc); SendRelay[6] = (byte)(crc >> 8); byte[] bRece = new byte[8]; int iReceLen = serial.SendReceByte(SendRelay, ref bRece, 10, isWait); //txt 发送 接受 txtLog.TxtWriteByte("Io.txt", "OnOff Send", SendRelay, false); if (iReceLen > 0) { txtLog.TxtWriteByte("Io.txt", "OnOff Rece", bRece, true); } if (iReceLen == 8 && bRece[0] == SendRelay[0] && bRece[1] == SendRelay[1] && bRece[2] == SendRelay[2] && bRece[3] == SendRelay[3] && bRece[4] == SendRelay[4] && bRece[5] == SendRelay[5] && bRece[6] == SendRelay[6] && bRece[7] == SendRelay[7]) { blRet = true; if (blRecord) { EventType eventType = EventType.初值; switch (bRelayNo) { case DeviceRelayNo.除湿: eventType = EventType.除湿; break; case DeviceRelayNo.烘干: eventType = EventType.烘干; break; case DeviceRelayNo.警灯: eventType = EventType.警灯; break; case DeviceRelayNo.新风: eventType = EventType.新风; break; } string strContent = bOnOff.ToString(); if (eventType != EventType.初值) { NewEventRecord(eventType, area, runModel, strContent); //commonCls.NewEnvirEventRecord(eventType, area, runModel, strContent); //if (NewEventShowEvent != null) //{ // NewEventShowEvent(new NewEventEventArgs(eventType, area, strContent, "", "")); //} } } } return(blRet); }
/// <summary> /// 发送 接受 byte数据命令 /// </summary> /// <param name="SendData">发送数据</param> /// <param name="ReceiveData">接收数据</param> /// <param name="Overtime">重复次数</param> /// <returns></returns> public int SendReceByte(byte[] SendData, ref byte[] ReceiveData, int Overtime, IsWait isWait) { int ret = 0; try { //OpenPort(); if (!(comPort.IsOpen)) { comPort.Open(); } comPort.ReadExisting(); comPort.Write(SendData, 0, SendData.Length); for (int i = 0; i < Overtime; i++) { if (isWait == IsWait.OnlyWait) { Thread.Sleep(100); } else if (isWait == IsWait.CanStop) { if (clsEnvirControl.blAskIo) { Thread.Sleep(100); } else { i = Overtime; } } } int iRecelen = comPort.BytesToRead; if (iRecelen >= ReceiveData.Length) { ReceiveData = new byte[iRecelen]; ret = comPort.Read(ReceiveData, 0, ReceiveData.Length); } } catch (Exception ex) { if (frmMain.blDebug) { MessageBox.Show(ex.ToString()); } } return(ret); }
public bool OperDevice(int Addr, OnOffRelay bOnOff, string area, DeviceRunModel runModel, bool blRecord, IsWait isWait) { bool isok = false; try { bool blRet = false; bytOperXF[0] = (byte)Addr; bytOperXF[1] = 0x05; bytOperXF[2] = 0x00; bytOperXF[4] = (byte)bOnOff; bytOperXF[5] = 0x00; ushort crc = crc16.CalculateCrc16(bytOperXF, 6); bytOperXF[7] = (byte)(crc); bytOperXF[6] = (byte)(crc >> 8); byte[] bRece = new byte[8]; int iReceLen = serial.SendReceByte(bytOperXF, ref bRece, 10, isWait); //txt 发送 接受 txtLog.TxtWriteByte("XF.txt", "OnOff Send", bytOperXF, false); if (iReceLen > 0) { txtLog.TxtWriteByte("XF.txt", "OnOff Rece", bRece, true); } if (iReceLen == 8 && bRece[0] == bytOperXF[0] && bRece[1] == bytOperXF[1] && bRece[2] == bytOperXF[2] && bRece[3] == bytOperXF[3] && bRece[4] == bytOperXF[4] && bRece[5] == bytOperXF[5] && bRece[6] == bytOperXF[6] && bRece[7] == bytOperXF[7]) { blRet = true; if (blRecord) { EventType eventType = EventType.新风; string strContent = bOnOff.ToString(); if (eventType != EventType.初值) { NewEventRecord(eventType, area, runModel, strContent); } } } return(blRet); } catch (Exception ex) { } return(isok); }
///// <summary> ///// 新告警显示 事件 ///// </summary> //public event NewEventShowEventHandler NewAlarmShowEvent; #endregion /// <summary> /// 空调控制 及SQL 存储 /// </summary> public bool AirControl(AirFactoryType factory, byte btAddr, EventContent content, byte btSetTemp, string strArea, DeviceRunModel runMode, bool blMoreAir, IsWait isWait) { bool blRet = false; string strContent = content.ToString(); #region 大金 空调控制 if (factory == AirFactoryType.大金) { if (content == EventContent.开启 || content == EventContent.关闭) { if (content == EventContent.开启) { blRet = DjAirControl(btAddr, DjControlType.开关, (byte)DjOnOff.开启, isWait); } else if (content == EventContent.关闭) { blRet = DjAirControl(btAddr, DjControlType.开关, (byte)DjOnOff.关闭, isWait); } } else if (content == EventContent.设置制冷 || content == EventContent.设置制热 || content == EventContent.设置除湿) { if (content == EventContent.设置制冷) { blRet = DjAirControl(btAddr, DjControlType.模式, (byte)DjModel.制冷, isWait); } else if (content == EventContent.设置制热) { blRet = DjAirControl(btAddr, DjControlType.模式, (byte)DjModel.制热, isWait); } else if (content == EventContent.设置除湿) { } } else if (content == EventContent.设置温度) { blRet = DjAirControl(btAddr, DjControlType.温度, btSetTemp, isWait); strContent = content.ToString() + btSetTemp.ToString(); } } #endregion #region 其他 空调控制 else if (factory == AirFactoryType.其他) { if (content == EventContent.开启 || content == EventContent.关闭) { if (content == EventContent.开启) { blRet = OtherAirControl(btAddr, OtherAirControlType.开关, (byte)OtherAirOnOff.开启, isWait); } else if (content == EventContent.关闭) { blRet = OtherAirControl(btAddr, OtherAirControlType.开关, (byte)OtherAirOnOff.关闭, isWait); } } else if (content == EventContent.设置制冷 || content == EventContent.设置制热 || content == EventContent.设置除湿) { if (content == EventContent.设置制冷) { blRet = OtherAirControl(btAddr, OtherAirControlType.模式, (byte)OtherAirModelType.制冷, isWait); } else if (content == EventContent.设置制热) { blRet = OtherAirControl(btAddr, OtherAirControlType.模式, (byte)OtherAirModelType.制热, isWait); } else if (content == EventContent.设置除湿) { } } else if (content == EventContent.设置温度) { blRet = OtherAirControl(btAddr, OtherAirControlType.温度, btSetTemp, isWait); strContent = content.ToString() + btSetTemp.ToString(); } } #endregion if (blRet) { commonCls.NewEnvirEventRecord(EventType.空调, strArea, runMode, strContent); if (NewEventShowEvent != null) { string strPoint = strArea + " "; if (blMoreAir) { strPoint += btAddr.ToString(); strPoint += "#空调"; } if (content == EventContent.设置温度) { NewEventShowEvent(new NewEventEventArgs(EventType.空调, strPoint, content.ToString() + btSetTemp.ToString(), "", "", DateTime.Now)); } else { NewEventShowEvent(new NewEventEventArgs(EventType.空调, strPoint, content.ToString(), "", "", DateTime.Now)); } } } return(blRet); }
public bool OtherAirControl(byte bAddr, OtherAirControlType controlType, byte btContent, IsWait isWait) { bool blRet = false; if (bAddr >= 10) { Byte bHAddr = (byte)(bAddr % 10); OtherAirSend[3] = (byte)(bHAddr + 0x30);//地址高位 } else { OtherAirSend[4] = (byte)(bAddr + 0x30); //地址低位 } OtherAirSend[5] = (byte)controlType; //控制类型 OtherAirSend[6] = btContent; //校验 OtherAirSend[9] = (byte)(OtherAirSend[5] ^ OtherAirSend[6] ^ OtherAirSend[7] ^ OtherAirSend[8]); byte[] bRece = new byte[12]; int iReceLen = serial.SendReceByte(OtherAirSend, ref bRece, 10, isWait); //txt 发送 txtLog.TxtWriteByte("Air.txt", "OtherAir Send", OtherAirSend, false); if (bRece != null && bRece.Length >= 12) { int index = bRece.FindIndex(p => p == 0x49); if (index >= 0) { byte[] retdata = new byte[12]; Array.Copy(bRece, index, retdata, 0, 12); // 接受 if (iReceLen > 0) { txtLog.TxtWriteByte("Air.txt", "OtherAir Rece", retdata, true); } if (retdata != null && retdata.Length == 12) { byte ReceCheck = (byte)(retdata[5] ^ retdata[6] ^ retdata[7] ^ retdata[8]); if (retdata[0] == OtherAirSend[0] && retdata[1] == OtherAirSend[1] && retdata[2] == OtherAirSend[2] && retdata[3] == OtherAirSend[3] && retdata[4] == OtherAirSend[4] && retdata[5] == OtherAirSend[5] && retdata[6] == OtherAirSend[6] && retdata[7] == OtherAirSend[7] && retdata[8] == OtherAirSend[8] && retdata[9] == ReceCheck && retdata[11] == OtherAirSend[11])//&&bRece[10] == 0x01 { blRet = true; } } } } return(blRet); }