protected void SendFeedback(byte[] feedbackData) { CANBusDataFrame aFrame = new CANBusDataFrame(CANSendType.Single, CANFrameType.Extern, CANFrameFormat.Data, (uint)((Utility.BCD(Convert.ToUInt32(_RoomStatusChangerFloorNum))) << 21) + (Utility.BCD(Convert.ToUInt32(_RoomStatusChangerRoomNum) << (int)13))); aFrame.DataLength = Convert.ToByte(feedbackData.Length); for (int i = 0; i < aFrame.DataLength; i++) { aFrame.Data[i] = feedbackData[i]; } try { _Connection.SendFrame(aFrame); } catch { } }
/// <summary> /// Send Data to ATM (a room) include the rooms default temperature and air conditioner default running status /// </summary> /// <param name="aRoom"></param> /// <param name="wakeUp"></param> protected virtual void SendDataToATM(Room aRoom) { CANBusDataFrame aFrame = new CANBusDataFrame(CANSendType.Single, CANFrameType.Extern, CANFrameFormat.Data, (uint)((Utility.BCD(Convert.ToUInt32(aRoom.MyFloor.Number)) << 21) + (Utility.BCD(Convert.ToUInt32(aRoom.Number)) << (int)13))); aFrame.DataLength = 8; aFrame.Data[0] = (byte)Utility.BCD(Convert.ToUInt32(aRoom.MyFloor.Number)); aFrame.Data[1] = (byte)(Utility.BCD(Convert.ToUInt32(aRoom.Number))); aFrame.Data[2] = (byte)(Convert.ToByte(aRoom.MyAirConditioner.DefaultTemperature) + ((aRoom.MyAirConditioner.DefaultRunningStatus ? 0 : 1) * 128)); BitArray array = new BitArray(8); switch (aRoom.HotelUsingStatus) { case HotelUsingStatusType.CheckOut: array[1] = true; break; case HotelUsingStatusType.Rented: array[0] = true; break; case HotelUsingStatusType.Vacant: array[2] = true; break; case HotelUsingStatusType.Empty: array[3] = true; break; case HotelUsingStatusType.Booked: array[4] = true; break; case HotelUsingStatusType.VIP: array[5] = true; break; case HotelUsingStatusType.Maintanent: array[7] = true; break; default: break; } // 睡眠模式设置 array[6] = aRoom.AutoSleep && aRoom.IsSleepTime; // array[7] = aRoom.MyAirConditioner.ApplyRunning;//空调开关设置 array.CopyTo(aFrame.Data, 3); aFrame.Data[4] = 0; //(byte)aRoom.MyAirConditioner.RunningType; //每小时开关时间分布 aFrame.Data[5] = aRoom.AutoSleep ? (byte)aRoom.ChangeTemperature : (byte)0; //睡眠温度调节: 1~5度范围调节 aFrame.Data[6] = (aRoom.HotelUsingStatus == HotelUsingStatusType.Empty || aRoom.HotelUsingStatus == HotelUsingStatusType.Vacant) ? (byte)0 : (byte)128; int CheckSum = 0; for (int i = 0; i <= 6; i++) { CheckSum += aFrame.Data[i]; } aFrame.Data[7] = (byte)(CheckSum % 256); try { _Connection.SendFrame(aFrame); } catch { } }