/// <summary> /// download all information from hardware /// </summary> /// <param name="DevName"></param> public void DownloadSMSFrmDeviceToBuf(string DevName, int wdDeviceType, int intActivePage, int num1, int num2)// 0 mean all, else that tab only { string strMainRemark = DevName.Split('\\')[1].Trim(); DevName = DevName.Split('\\')[0].Trim(); //保存basic informations网络信息 byte bytSubID = byte.Parse(DevName.Split('-')[0].ToString()); byte bytDevID = byte.Parse(DevName.Split('-')[1].ToString()); // read basic paramters byte[] ArayTmp = null; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x000E, bytSubID, bytDevID, false, true, true, false) == true) { byte[] arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = CsConst.myRevBuf[25 + intI]; } Devname = bytSubID.ToString() + "-" + bytDevID.ToString() + "\\" + HDLPF.Byte2String(arayRemark); } else { return; } ArayTmp = new byte[3]; ArayTmp[0] = 0; ArayTmp[1] = 1; if (intActivePage == 0 || intActivePage == 1) { if (CsConst.isRestore) { num1 = 0; num2 = 99; if (wdDeviceType == 4001) { num2 = 90; } } MyControls = new List <SMSControls>(); #region for (byte bytI = (byte)num1; bytI < num2; bytI++) { ArayTmp[2] = bytI; SMSControls oTmpSMS = new SMSControls(); oTmpSMS.ID = bytI; oTmpSMS.MyVerify = new List <PhoneInF>(); oTmpSMS.MyTargets = new List <UVCMD.ControlTargets>(); if (CsConst.mySends.AddBufToSndList(ArayTmp, 0xC017, bytSubID, bytDevID, true, true, true, false) == true) { // 20 bytes remark byte[] arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = CsConst.myRevBuf[28 + intI]; } oTmpSMS.strRemark = HDLPF.Byte2String(arayRemark); // 30 bytes sms content unicode arayRemark = new byte[32]; for (int intI = 0; intI < 32; intI++) { arayRemark[intI] = CsConst.myRevBuf[48 + intI]; } oTmpSMS.strSMSContent = HDLPF.Byte22String(arayRemark, true); // 判断是否验证手机号码 #region oTmpSMS.blnIsVerify = (CsConst.myRevBuf[896] == 0x11); oTmpSMS.blnReply = (CsConst.myRevBuf[897] == 0x11); for (int intJ = 0; intJ < 12; intJ++) { PhoneInF oPhone = new PhoneInF(); arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = CsConst.myRevBuf[80 + intJ * 36 + intI]; } oPhone.Remark = HDLPF.Byte2String(arayRemark); arayRemark = new byte[16]; for (int intI = 0; intI < 16; intI++) { if (CsConst.myRevBuf[100 + intJ * 36 + intI] != 0x45) { arayRemark[intI] = CsConst.myRevBuf[100 + intJ * 36 + intI]; } else { arayRemark[intI] = 0; } } oPhone.PhoneNum = HDLPF.Byte2String(arayRemark); oTmpSMS.MyVerify.Add(oPhone); } #endregion // 判断是否存在控制目标 #region int intTmpST = 512; for (int intI = 0; intI < 48; intI++) { //if (CsConst.myRevBuf[intTmpST + intI * 8 + 7] == 0xAA) //只保留有效 //{ UVCMD.ControlTargets oCMD = new UVCMD.ControlTargets(); oCMD.SubnetID = CsConst.myRevBuf[intTmpST + intI * 8]; oCMD.DeviceID = CsConst.myRevBuf[intTmpST + intI * 8 + 1]; oCMD.Type = CsConst.myRevBuf[intTmpST + intI * 8 + 2]; //oCMD.Type = HDLSysPF.GetIDAccordinglyRightControlTypeSMS(CsConst.myRevBuf[intTmpST + intI * 8 + 2]); //转换为正确的类型 oCMD.Param1 = CsConst.myRevBuf[intTmpST + intI * 8 + 3]; oCMD.Param2 = CsConst.myRevBuf[intTmpST + intI * 8 + 4]; oCMD.Param3 = CsConst.myRevBuf[intTmpST + intI * 8 + 5]; oCMD.Param4 = CsConst.myRevBuf[intTmpST + intI * 8 + 6]; oCMD.IsValid = (CsConst.myRevBuf[intTmpST + intI * 8 + 7] == 0xAA); oTmpSMS.MyTargets.Add(oCMD); //} } #endregion MyControls.Add(oTmpSMS); } else { return; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(bytI / 2, null); } HDLUDP.TimeBetwnNext(20); } #endregion MyRead2UpFlags[0] = true; } if (intActivePage == 0 || intActivePage == 2) { // send message when needs #region ArayTmp = new byte[4]; ArayTmp[0] = 0; ArayTmp[1] = 2; MySendSMS = new List <SendSMS>(); if (CsConst.isRestore) { num1 = 0; num2 = 20; if (wdDeviceType == 4001) { num2 = 90; } } for (byte bytI = (byte)num1; bytI < num2; bytI++) { ArayTmp[2] = bytI; byte[] TmpSMS = new byte[1794]; SendSMS oTmpSMS = new SendSMS(); oTmpSMS.ID = bytI; oTmpSMS.MyGuests = new List <PhoneInF>(); if (wdDeviceType == 4001) { if (CsConst.mySends.AddBufToSndList(ArayTmp, 0xC060, bytSubID, bytDevID, true, true, true, false) == true) { Array.Copy(CsConst.myRevBuf, 29, TmpSMS, 0, 598); HDLUDP.TimeBetwnNext(20); } else { return; } } else { for (int intI = 0; intI < 3; intI++) //分三次读取数据 { ArayTmp[3] = Convert.ToByte(intI); if (CsConst.mySends.AddBufToSndList(ArayTmp, 0xC060, bytSubID, bytDevID, true, true, true, false) == true) { Array.Copy(CsConst.myRevBuf, 29, TmpSMS, intI * 598, 598); HDLUDP.TimeBetwnNext(20); } else { return; } } } // 20 bytes remark byte[] arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = TmpSMS[intI]; } oTmpSMS.strRemark = HDLPF.Byte2String(arayRemark); // 判断接收的手机号码 #region int num = 10; if (wdDeviceType == 4001) { num = 3; } for (int intJ = 0; intJ < num; intJ++) { PhoneInF oPhone = new PhoneInF(); if (TmpSMS[200 + intJ * 177] == 0xAA) { oPhone.Valid = true; } else { oPhone.Valid = false; } oPhone.ID = Convert.ToByte(intJ); arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = TmpSMS[24 + intJ * 177 + intI]; } oPhone.Remark = HDLPF.Byte2String(arayRemark); arayRemark = new byte[16]; for (int intI = 0; intI < 16; intI++) { if (TmpSMS[44 + intJ * 177 + intI] != 0x45) { arayRemark[intI] = TmpSMS[44 + intJ * 177 + intI]; } else { arayRemark[intI] = 0; } } oPhone.PhoneNum = HDLPF.Byte2String(arayRemark); arayRemark = new byte[140]; for (int intI = 0; intI < 140; intI++) { arayRemark[intI] = TmpSMS[60 + intJ * 177 + intI]; } oPhone.strSMS = HDLPF.Byte22String(arayRemark, true); oTmpSMS.MyGuests.Add(oPhone); } #endregion MySendSMS.Add(oTmpSMS); if (CsConst.calculationWorker != null) { CsConst.calculationWorker.ReportProgress(50 + bytI / 2, null); } } #endregion MyRead2UpFlags[1] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(100, null); } }
/// <summary> /// 下载所有数据 /// </summary> /// <param name="DevName"></param> /// <returns></returns> public bool DownloadFHInforsFrmDevice(string DevName, int wdDeviceType, int intActivePage, byte num1, byte num2) { string strMainRemark = DevName.Split('\\')[1].Trim(); DevName = DevName.Split('\\')[0].Trim(); byte bytSubID = byte.Parse(DevName.Split('-')[0].ToString()); byte bytDevID = byte.Parse(DevName.Split('-')[1].ToString()); byte[] ArayTmp = new byte[0]; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x000E, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { byte[] arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = CsConst.myRevBuf[25 + intI]; } DevName = bytSubID.ToString() + "-" + bytDevID.ToString() + "\\" + HDLPF.Byte2String(arayRemark); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(1); } if (intActivePage == 0 || intActivePage == 1) { #region arayDateTime = new byte[10]; araySummer = new byte[30]; arayOutdoor = new byte[10]; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0xD99E, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 25, arayDateTime, 0, 7); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(2); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1C12, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 25, arayDateTime, 7, 2); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(3); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1D1A, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 26, araySummer, 0, 23); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(4); } if (wdDeviceType == 211 || wdDeviceType == 208 || wdDeviceType == 209) { if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1D06, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 25, arayOutdoor, 0, 5); HDLUDP.TimeBetwnNext(1); } else { return(false); } } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(5); } #endregion MyRead2UpFlags[0] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(10); } //读取6回路状态 if (intActivePage == 0 || intActivePage == 2) { #region myHeating = new List <FHeating>(); for (byte i = 1; i <= 6; i++) { FHeating temp = new FHeating(); temp.ID = i; temp.arayWorkControl = new byte[20]; temp.arayFlush = new byte[20]; temp.araySensorSetting = new byte[30]; temp.arayWorkSetting = new byte[20]; if (CsConst.isRestore || (i >= num1 && i <= num2)) { ArayTmp = new byte[1]; ArayTmp[0] = i; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1D02, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { byte[] arayRemark = new byte[20]; for (int intI = 0; intI < 20; intI++) { arayRemark[intI] = CsConst.myRevBuf[26 + intI]; } temp.strRemark = HDLPF.Byte22String(arayRemark, true); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(10 + (i - 1) * 5 + 1); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1C5E, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 26, temp.arayWorkControl, 0, 13); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(10 + (i - 1) * 5 + 2); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1C5A, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 26, temp.arayWorkSetting, 0, 10); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (wdDeviceType == 211 || wdDeviceType == 208 || wdDeviceType == 209) { if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1D0A, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 26, temp.arayWorkSetting, 10, 1); HDLUDP.TimeBetwnNext(1); } else { return(false); } } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(10 + (i - 1) * 5 + 3); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1C56, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 26, temp.araySensorSetting, 0, 20); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1C62, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 26, temp.arayFlush, 0, 11); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(10 + (i - 1) * 5 + 4); } myHeating.Add(temp); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(10 + i * 5); } } #endregion MyRead2UpFlags[1] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(40); } //读取主从机功能 if (intActivePage == 0 || intActivePage == 3) { #region araySynChannel = new byte[10]; arayHost = new byte[20]; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1C6E, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 25, araySynChannel, 0, 6); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(41); } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1CE6, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Array.Copy(CsConst.myRevBuf, 25, arayHost, 0, 15); HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(42); } #endregion MyRead2UpFlags[2] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(50); } // 读取额外目标设置 if (intActivePage == 0 || intActivePage == 4 || intActivePage == 6) { #region byte Chn = Convert.ToByte(num1 >> 4); byte Statue = Convert.ToByte(num2 >> 4); myTargets1 = new List <FHTargets>(); for (byte i = 1; i <= 6; i++) { if (CsConst.isRestore || i == Chn) { for (byte j = 0; j < 4; j++) { if (CsConst.isRestore || j == Statue) { FHTargets temp = new FHTargets(); temp.ID = i; temp.StatusIndex = j; temp.Targets = new List <UVCMD.ControlTargets>(); ArayTmp = new byte[3]; ArayTmp[0] = i; ArayTmp[1] = j; for (byte k = 0; k < 5; k++) { ArayTmp[2] = k; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1CE2, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { UVCMD.ControlTargets oCMD = new UVCMD.ControlTargets(); oCMD.ID = Convert.ToByte(CsConst.myRevBuf[27]); oCMD.Type = CsConst.myRevBuf[28]; //转换为正确的类型 oCMD.SubnetID = CsConst.myRevBuf[29]; oCMD.DeviceID = CsConst.myRevBuf[30]; oCMD.Param1 = CsConst.myRevBuf[31]; oCMD.Param2 = CsConst.myRevBuf[32]; oCMD.Param3 = CsConst.myRevBuf[33]; oCMD.Param4 = CsConst.myRevBuf[34]; temp.Targets.Add(oCMD); HDLUDP.TimeBetwnNext(1); } else { return(false); } } myTargets1.Add(temp); } } } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(50 + i); } } if ((wdDeviceType == 211 || wdDeviceType == 208 || wdDeviceType == 209) && intActivePage != 6) { if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1CEA, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { FHTargetEnable = CsConst.myRevBuf[25]; RelayTargetEnable = CsConst.myRevBuf[26]; } else { return(false); } } #endregion MyRead2UpFlags[5] = true; MyRead2UpFlags[3] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(60); } if (intActivePage == 0 || intActivePage == 5 || intActivePage == 6) { #region if (wdDeviceType == 211 || wdDeviceType == 208 || wdDeviceType == 209) { #region byte Chn = Convert.ToByte(num1 & 0x0F); byte Statue = Convert.ToByte(num2 & 0x0F); myTargets2 = new List <FHTargets>(); for (byte i = 1; i <= 6; i++) { if (CsConst.isRestore || i == Chn) { for (byte j = 0; j < 2; j++) { if (CsConst.isRestore || j == Statue) { FHTargets temp = new FHTargets(); temp.ID = i; temp.StatusIndex = j; temp.Targets = new List <UVCMD.ControlTargets>(); ArayTmp = new byte[3]; ArayTmp[0] = i; ArayTmp[1] = j; for (byte k = 0; k < 5; k++) { ArayTmp[2] = k; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1CEE, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { UVCMD.ControlTargets oCMD = new UVCMD.ControlTargets(); oCMD.ID = Convert.ToByte(CsConst.myRevBuf[27]); oCMD.Type = CsConst.myRevBuf[28]; //转换为正确的类型 oCMD.SubnetID = CsConst.myRevBuf[29]; oCMD.DeviceID = CsConst.myRevBuf[30]; oCMD.Param1 = CsConst.myRevBuf[31]; oCMD.Param2 = CsConst.myRevBuf[32]; oCMD.Param3 = CsConst.myRevBuf[33]; oCMD.Param4 = CsConst.myRevBuf[34]; temp.Targets.Add(oCMD); HDLUDP.TimeBetwnNext(1); } else { return(false); } } myTargets2.Add(temp); } } } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(60 + i); } } if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1CEA, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { FHTargetEnable = CsConst.myRevBuf[25]; RelayTargetEnable = CsConst.myRevBuf[26]; } else { return(false); } #endregion } #endregion MyRead2UpFlags[5] = true; MyRead2UpFlags[4] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(70); } if (intActivePage == 0 || intActivePage == 7) { #region if (wdDeviceType == 208) { myPumps = new List <Pumps>(); if (CsConst.mySends.AddBufToSndList(null, 0x1D22, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { PumpsEnable = CsConst.myRevBuf[25]; HDLUDP.TimeBetwnNext(1); } else { return(false); } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(71); } for (byte i = 0; i <= 6; i++) { ArayTmp = new byte[1]; ArayTmp[0] = i; if (CsConst.mySends.AddBufToSndList(ArayTmp, 0x1D26, bytSubID, bytDevID, false, true, true, CsConst.minAllWirelessDeviceType.Contains(wdDeviceType)) == true) { Pumps temp = new Pumps(); temp.TrueTargets = new List <UVCMD.ControlTargets>(); temp.FalseTargets = new List <UVCMD.ControlTargets>(); temp.ID = i; temp.Enable = CsConst.myRevBuf[26]; temp.ChooseChns = CsConst.myRevBuf[27]; temp.TrueDelay = CsConst.myRevBuf[28] * 256 + CsConst.myRevBuf[29]; temp.FalseDelay = CsConst.myRevBuf[30] * 256 + CsConst.myRevBuf[31]; if (temp.TrueDelay > 600) { temp.TrueDelay = 600; } if (temp.FalseDelay > 600) { temp.FalseDelay = 600; } myPumps.Add(temp); HDLUDP.TimeBetwnNext(1); } else { return(false); } } } #endregion MyRead2UpFlags[6] = true; } if (CsConst.calculationWorker != null && CsConst.calculationWorker.IsBusy) { CsConst.calculationWorker.ReportProgress(100, null); } return(true); }