using Shared.Common; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using ZigBee.Device; namespace Shared.Phone.UserCenter.DeviceCurtain { /// /// 开合帘的方向与限位的配置界面 /// public class AutoOpenDirectionAndLimitSettionForm : EditorCommonForm { #region ■ 变量声明___________________________ /// ///窗帘的回路 /// private Rollershade curtainDevice = null; /// /// 窗帘数据 /// private CurtainData curtainData = null; /// /// 接收开限位 false:没有接收到 true:已经接收到 /// private bool receiveOpenlimit = false; /// /// 接收合限位 false:没有接收到 true:已经接收到 /// private bool receiveCloseLimit = false; /// /// 发送区分 1:开限位 2:合限位 /// private int sendDiv = 0; /// /// 是否备份窗帘数据 /// private bool backupCurtainData = false; /// /// 列表控件 /// private VerticalListControl listView = null; /// /// 开限位的进度条 /// private SeekBarControl openSeekBar = null; /// /// 合限位的进度条 /// private SeekBarControl closeSeekBar = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 窗帘的回路 public void ShowForm(Rollershade i_CurtainDevice) { this.ScrollEnabled = false; this.curtainDevice = i_CurtainDevice; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uDirectionAndLimit)); HdlThreadLogic.Current.RunThread(() => { //初始化中部控件 this.InitMiddleFrame(); }); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //获取设备初始数据 var result = this.InitCurtainDefultData(); if (result == false) { //显示重新加载的界面 this.ShowReLoadView(); return; } HdlThreadLogic.Current.RunMain(() => { //清空bodyFrame bodyFrameLayout.BackgroundColor = UserCenterColor.Current.White; this.ClearBodyFrame(); this.listView = new VerticalListControl(29); listView.Y = Application.GetRealHeight(-6); listView.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listView); //导轨长度为0时 if (curtainData.CurtainLength <= 0) { //电机数据异常,请重置电机 this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain)); try { //设备异常补救 -> 添加重置电机行 this.AddElectricalMachineryRow(); return; } catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常1"); return; } } try { //添加方向行 this.AddDirectionRow(); //添加限位行 this.AddLimitRow(); //添加重置电机行 this.AddElectricalMachineryRow(); //限位数据接收 this.ReceiveLimitData(); } catch (Exception ex) { //Log出力 string msg = "当前激活的界面[" + UserCenterResourse.NowActionFormID + "]"; HdlLogLogic.Current.WriteLog(ex, msg); //电机数据异常,请重置电机 this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain)); try { this.listView.RemoveAll(); //设备异常补救 -> 添加重置电机行 this.AddElectricalMachineryRow(); } catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常2"); } } }); } #endregion #region ■ 方向行_____________________________ /// /// 添加方向行 /// private void AddDirectionRow() { var rowDirection = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowDirection); //方向 rowDirection.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uDirection), 600); //右箭头 rowDirection.AddRightArrow(); //状态 var btnStatu = rowDirection.AddMostRightView("", 300); btnStatu.TextID = curtainData.Direction == false ? R.MyInternationalizationString.uForwardDirection : R.MyInternationalizationString.uReverseDirection; //底线 rowDirection.AddBottomLine(); int nowSelectNo = curtainData.Direction == false ? 0 : 1; rowDirection.ButtonClickEvent += (sender, e) => { var listText = new List(); listText.Add(Language.StringByID(R.MyInternationalizationString.uForwardDirection));//正向 listText.Add(Language.StringByID(R.MyInternationalizationString.uReverseDirection));//反向 var form = new BottomItemSelectForm(); form.AddForm(Language.StringByID(R.MyInternationalizationString.uDirectionSelect), listText, nowSelectNo); form.FinishSelectEvent += (index) => { //变更方向 var result = HdlDeviceCurtainLogic.Current.SetCurtainDirection(curtainDevice, index == 0 ? false : true); if (result == false) { return; } nowSelectNo = index; btnStatu.Text = listText[index]; curtainData.Direction = index == 0 ? false : true; }; }; } #endregion #region ■ 限位行_____________________________ /// /// 添加限位行 /// private void AddLimitRow() { var frameBack = new FrameLayout(); frameBack.Height = Application.GetRealHeight(956); var rowLimit = new FrameRowControl(listView.rowSpace / 2); rowLimit.UseClickStatu = false; listView.AddChidren(rowLimit); //限位 rowLimit.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uLimit), 600); //右箭头 var btnRinght = rowLimit.AddMostRightEmptyIcon(58, 58); rowLimit.ChangedChidrenBindMode(btnRinght, ChidrenBindMode.NotBind); btnRinght.UseClickStatu = false; btnRinght.UnSelectedImagePath = "Item/RightNext.png"; btnRinght.SelectedImagePath = "Item/Down.png"; btnRinght.IsSelected = true; btnRinght.ButtonClickEvent += (sender, e) => { btnRinght.IsSelected = !btnRinght.IsSelected; //展开折叠 frameBack.Height = frameBack.Height > 10 ? 0 : Application.GetRealHeight(956); }; //底线 rowLimit.AddBottomLine(); listView.AddChidren(frameBack); //添加开限位进度条 this.AddOpenLimitProgress(frameBack); //添加合限位进度条 this.AddCloseLimitProgress(frameBack); } #endregion #region ■ 开限位行___________________________ /// /// 添加开限位进度条 /// /// private void AddOpenLimitProgress(FrameLayout frameBack) { //开限位 var btnProgressView = new NormalViewControl(200, 50, true); btnProgressView.X = ControlCommonResourse.XXLeft; btnProgressView.Y = Application.GetRealHeight(78); btnProgressView.TextSize = 12; btnProgressView.TextColor = UserCenterColor.Current.TextGrayColor1; btnProgressView.TextID = R.MyInternationalizationString.uOpenLimit; frameBack.AddChidren(btnProgressView); int progressValue = (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100); //设置百分比的初始值 curtainData.OpenLimitPersent = progressValue; var btnProgress1 = new NormalViewControl(200, 50, true); btnProgress1.X = Application.GetRealWidth(200); btnProgress1.Y = btnProgressView.Y; btnProgress1.TextSize = 12; btnProgress1.TextColor = UserCenterColor.Current.TextGrayColor1; btnProgress1.Text = progressValue + "%"; frameBack.AddChidren(btnProgress1); //进度条 this.openSeekBar = new SeekBarControl(965); openSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46); openSeekBar.ProgressBarColor = 0xff288bfd; openSeekBar.Progress = progressValue; frameBack.AddChidren(openSeekBar); var btnTemp1 = new NormalViewControl(200, 50, true); btnTemp1.X = ControlCommonResourse.XXLeft; btnTemp1.Y = btnProgressView.Bottom + Application.GetRealHeight(115); btnTemp1.TextSize = 12; btnTemp1.TextColor = UserCenterColor.Current.TextGrayColor3; btnTemp1.Text = "0%"; frameBack.AddChidren(btnTemp1); var btnTemp2 = new NormalViewControl(200, 50, true); btnTemp2.X = frameBack.Width - Application.GetRealWidth(200 + 50); btnTemp2.Y = btnTemp1.Y; btnTemp2.TextAlignment = TextAlignment.CenterRight; btnTemp2.TextSize = 12; btnTemp2.TextColor = UserCenterColor.Current.TextGrayColor3; btnTemp2.Text = "100%"; frameBack.AddChidren(btnTemp2); //线 var btnLine = new NormalViewControl(frameBack.Width - ControlCommonResourse.XXLeft * 2, ControlCommonResourse.BottomLineHeight, false); btnLine.X = ControlCommonResourse.XXLeft; btnLine.Y = btnTemp2.Bottom + Application.GetRealHeight(156); btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine; frameBack.AddChidren(btnLine); //减号 var btnMinus = new IconViewControl(104); btnMinus.UseClickStatu = true; btnMinus.X = Application.GetRealWidth(847); btnMinus.Y = Application.GetRealHeight(46); btnMinus.UnSelectedImagePath = "Item/MinusSign2.png"; btnMinus.SelectedImagePath = "Item/MinusSign2Selected.png"; frameBack.AddChidren(btnMinus); btnMinus.ButtonClickEvent += (sender, e) => { if (openSeekBar.Progress <= 0) { return; } openSeekBar.Progress -= 5; openSeekBar.ProgressChangedEvent(1, openSeekBar.Progress); }; //加号 var btnPlus = new IconViewControl(104); btnPlus.UseClickStatu = true; btnPlus.X = btnMinus.Right; btnPlus.Y = btnMinus.Y; btnPlus.UnSelectedImagePath = "Item/PlusSign2.png"; btnPlus.SelectedImagePath = "Item/PlusSign2Selected.png"; frameBack.AddChidren(btnPlus); btnPlus.ButtonClickEvent += (sender, e) => { if (openSeekBar.Progress >= 100) { return; } openSeekBar.Progress += 5; openSeekBar.ProgressChangedEvent(1, openSeekBar.Progress); }; //保存 var btnSave = new NormalViewControl(150, 60, true); btnSave.X = Application.GetRealWidth(906); btnSave.Y = btnTemp1.Bottom + Application.GetRealHeight(68); btnSave.TextAlignment = TextAlignment.Center; btnSave.TextID = R.MyInternationalizationString.uSave; btnSave.TextColor = UserCenterColor.Current.TextOrangeColor; frameBack.AddChidren(btnSave); btnSave.ButtonClickEvent += (sender, e) => { //2020.05.17:追加虚拟住宅可以直接点击 if (this.receiveOpenlimit == true || Common.Config.Instance.Home.IsVirtually == true) { //确认开限位点 this.SaveOpenLimit(); } }; int oldProValue = curtainData.OpenLimitPersent; openSeekBar.ProgressChangedEvent += (div, value) => { //开限位不能大于合限位 if (value > closeSeekBar.Progress) { openSeekBar.Progress = closeSeekBar.Progress; return; } btnProgress1.Text = value + "%"; //数据变更,百分比 curtainData.OpenLimitPersent = value; }; //虚拟住宅不需要监听 if (Common.Config.Instance.Home.IsVirtually == true) { return; } HdlThreadLogic.Current.RunThread(async () => { while (openSeekBar.Parent != null) { int nowValue = curtainData.OpenLimitPersent; if (oldProValue == nowValue) { //值不等才处理 await Task.Delay(500); continue; } oldProValue = nowValue; //将窗帘调整到指定百分比 this.sendDiv = 1; curtainDevice.WcdGoToTiltValue(nowValue); } }); } /// /// 确认开限位点 /// private void SaveOpenLimit() { //确认当前位置为开限位? string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainOpenLimitMsg); this.ShowMassage(ShowMsgType.Confirm, msg, () => { decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength; decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength; if (openValue < 0) { openValue = 0; } if (closeValue < 0) { closeValue = curtainData.CurtainLength; } //执行确认及覆盖上限位点 var result = HdlDeviceCurtainLogic.Current.SetAutoOpenCurtainLimitPoint(curtainDevice, (int)openValue, (int)closeValue, curtainData.CurtainLength); if (result == true) { this.receiveOpenlimit = false; } }); } #endregion #region ■ 合限位行___________________________ /// /// 添加合限位进度条 /// /// private void AddCloseLimitProgress(FrameLayout frameBack) { //合限位 var btnProgressView = new NormalViewControl(200, 50, true); btnProgressView.X = ControlCommonResourse.XXLeft; btnProgressView.Y = Application.GetRealHeight(536); btnProgressView.TextSize = 12; btnProgressView.TextColor = UserCenterColor.Current.TextGrayColor1; btnProgressView.TextID = R.MyInternationalizationString.uCloseLimit; frameBack.AddChidren(btnProgressView); int progressValue = (int)(curtainData.CloseLimitValue / (curtainData.CurtainLength * 1.0) * 100); //设置百分比的初始值 curtainData.CloseLimitPersent = progressValue; var btnProgress1 = new NormalViewControl(200, 50, true); btnProgress1.X = Application.GetRealWidth(200); btnProgress1.Y = btnProgressView.Y; btnProgress1.TextSize = 12; btnProgress1.TextColor = UserCenterColor.Current.TextGrayColor1; btnProgress1.Text = progressValue + "%"; frameBack.AddChidren(btnProgress1); //进度条 this.closeSeekBar = new SeekBarControl(965); closeSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46); closeSeekBar.ProgressBarColor = 0xff288bfd; closeSeekBar.Progress = progressValue; frameBack.AddChidren(closeSeekBar); var btnTemp1 = new NormalViewControl(200, 50, true); btnTemp1.X = ControlCommonResourse.XXLeft; btnTemp1.Y = btnProgressView.Bottom + Application.GetRealHeight(115); btnTemp1.TextSize = 12; btnTemp1.TextColor = UserCenterColor.Current.TextGrayColor3; btnTemp1.Text = "0%"; frameBack.AddChidren(btnTemp1); var btnTemp2 = new NormalViewControl(200, 50, true); btnTemp2.X = frameBack.Width - Application.GetRealWidth(200 + 50); btnTemp2.Y = btnTemp1.Y; btnTemp2.TextAlignment = TextAlignment.CenterRight; btnTemp2.TextSize = 12; btnTemp2.TextColor = UserCenterColor.Current.TextGrayColor3; btnTemp2.Text = "100%"; frameBack.AddChidren(btnTemp2); //线 var btnLine = new NormalViewControl(frameBack.Width - ControlCommonResourse.XXLeft * 2, ControlCommonResourse.BottomLineHeight, false); btnLine.X = ControlCommonResourse.XXLeft; btnLine.Y = btnTemp2.Bottom + Application.GetRealHeight(156); btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine; frameBack.AddChidren(btnLine); //减号 var btnMinus = new IconViewControl(104); btnMinus.UseClickStatu = true; btnMinus.X = Application.GetRealWidth(847); btnMinus.Y = Application.GetRealHeight(504); btnMinus.UnSelectedImagePath = "Item/MinusSign2.png"; btnMinus.SelectedImagePath = "Item/MinusSign2Selected.png"; frameBack.AddChidren(btnMinus); btnMinus.ButtonClickEvent += (sender, e) => { if (closeSeekBar.Progress <= 0) { return; } closeSeekBar.Progress -= 5; closeSeekBar.ProgressChangedEvent(1, closeSeekBar.Progress); }; //加号 var btnPlus = new IconViewControl(104); btnPlus.UseClickStatu = true; btnPlus.X = btnMinus.Right; btnPlus.Y = btnMinus.Y; btnPlus.UnSelectedImagePath = "Item/PlusSign2.png"; btnPlus.SelectedImagePath = "Item/PlusSign2Selected.png"; frameBack.AddChidren(btnPlus); btnPlus.ButtonClickEvent += (sender, e) => { if (closeSeekBar.Progress >= 100) { return; } closeSeekBar.Progress += 5; closeSeekBar.ProgressChangedEvent(1, closeSeekBar.Progress); }; //保存 var btnSave = new NormalViewControl(150, 60, true); btnSave.X = Application.GetRealWidth(906); btnSave.Y = btnTemp1.Bottom + Application.GetRealHeight(68); btnSave.TextAlignment = TextAlignment.Center; btnSave.TextID = R.MyInternationalizationString.uSave; btnSave.TextColor = UserCenterColor.Current.TextOrangeColor; frameBack.AddChidren(btnSave); btnSave.ButtonClickEvent += (sender, e) => { //2020.05.17:追加虚拟住宅可以直接点击 if (this.receiveCloseLimit == true || Common.Config.Instance.Home.IsVirtually == true) { //保存合限位点 this.SaveCloseLimit(); } }; int oldProValue = curtainData.CloseLimitPersent; closeSeekBar.ProgressChangedEvent += (div, value) => { if (value < curtainData.OpenLimitPersent) { //合限位不能小于合限位 closeSeekBar.Progress = openSeekBar.Progress; return; } btnProgress1.Text = value + "%"; //数据变更,百分比 curtainData.CloseLimitPersent = value; }; //虚拟住宅不需要监听 if (Common.Config.Instance.Home.IsVirtually == true) { return; } HdlThreadLogic.Current.RunThread(async () => { while (closeSeekBar.Parent != null) { int nowValue = curtainData.CloseLimitPersent; if (oldProValue == nowValue) { //值不等才处理 await Task.Delay(500); continue; } oldProValue = nowValue; //将窗帘调整到指定百分比 this.sendDiv = 2; curtainDevice.WcdGoToTiltValue(nowValue); } }); } /// /// 保存合限位点 /// private void SaveCloseLimit() { //确认当前位置为合限位? string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainCloseLimitMsg); this.ShowMassage(ShowMsgType.Confirm, msg, () => { decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength; decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength; if (openValue < 0) { openValue = 0; } if (closeValue < 0) { closeValue = curtainData.CurtainLength; } //执行确认及覆盖上限位点 var result = HdlDeviceCurtainLogic.Current.SetAutoOpenCurtainLimitPoint(curtainDevice, (int)openValue, (int)closeValue, curtainData.CurtainLength); if (result == true) { this.receiveCloseLimit = false; } }); } #endregion #region ■ 重置电机___________________________ /// /// 添加重置电机行 /// private void AddElectricalMachineryRow() { var rowReset = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowReset); //重置电机 rowReset.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uResetElectricalMachinery), 600); //底线 rowReset.AddBottomLine(); rowReset.ButtonClickEvent += (sender, e) => { //如果当前是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { return; } //重置电机将初始化{0}方向与限位设置,确认继续? string msg = Language.StringByID(R.MyInternationalizationString.uResetElectricalMachineryMsg); msg = msg.Replace("{0}", "\r\n"); this.ShowMassage(ShowMsgType.Confirm, msg, () => { //开启进度条 ProgressFormBar.Current.Start(); //正在重置电机 ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uElectricalMachineryResetting)); //重置窗帘 HdlThreadLogic.Current.RunThread(async () => { var result = await HdlDeviceCurtainLogic.Current.RestoreCurtain(curtainDevice); if (result == false) { //关闭进度条 ProgressFormBar.Current.Close(); return; } //每10的长度大概是2秒,多预留1次出来 int waitCount = ((curtainData.CurtainLength / 10) + 1) * 3; if (waitCount < 12) { waitCount = 12; } int timeCount = 0; while (timeCount <= waitCount) { //进度条值 ProgressFormBar.Current.SetValue(timeCount, waitCount); timeCount++; System.Threading.Thread.Sleep(1000); } //关闭进度条 ProgressFormBar.Current.Close(); //获取数据后,备份窗帘数据 this.backupCurtainData = true; //重新初始化界面 this.InitMiddleFrame(); }); }); }; } #endregion #region ■ 初始化窗帘数据_____________________ /// /// 初始化窗帘数据 /// /// private bool InitCurtainDefultData() { this.curtainData = new CurtainData(); this.receiveOpenlimit = false; this.receiveCloseLimit = false; this.sendDiv = 0; //如果当前是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { var data = ModelData.DeviceModelDataLogic.Current.GetCurtainLimitPoint(curtainDevice); curtainData.Direction = data.Direction; curtainData.CurtainLength = data.curtainLength; curtainData.OpenLimitValue = data.upLimit; curtainData.CloseLimitValue = data.downLimit; return true; } //开启进度条 this.ShowProgressBar(); int receiptDataCount = 0; string mainkeys = LocalDevice.Current.GetDeviceMainKeys(curtainDevice); HdlGatewayReceiveLogic.Current.AddAttributeEvent("CurtainDeviceAttribute", ReceiveComandDiv.A设备属性上报, (device) => { string checkKey = LocalDevice.Current.GetDeviceMainKeys(device); if (mainkeys != checkKey || device.DeviceStatusReport.CluterID != 258) { return; } foreach (var attriBute in device.DeviceStatusReport.AttriBute) { if (attriBute.AttributeId == 23) { //开合帘方向 if (0 < (attriBute.AttriButeData & 0x01)) { //反向 curtainData.Direction = true; } else { //正向 curtainData.Direction = false; } receiptDataCount++; } else if (attriBute.AttributeId == 1) { //窗帘总长 curtainData.CurtainLength = attriBute.AttriButeData; receiptDataCount++; } else if (attriBute.AttributeId == 16) { //开限位 curtainData.OpenLimitValue = attriBute.AttriButeData; receiptDataCount++; } else if (attriBute.AttributeId == 17) { //合限位 curtainData.CloseLimitValue = attriBute.AttriButeData; receiptDataCount++; } } }); //发送获取窗帘限位配置的命令 HdlDeviceCurtainLogic.Current.SetGetCurtainLimitSettionComand(curtainDevice); int timeCount = 30; while (receiptDataCount != 4 && timeCount >= 0) { System.Threading.Thread.Sleep(100); timeCount--; } //关闭进度条 this.CloseProgressBar(); if (timeCount <= 0) { //获取窗帘方向与限位设置失败 string msg = Language.StringByID(R.MyInternationalizationString.uGetCurtainDirectionAndLimitSettionFail); //拼接上【网关回复超时】的Msg msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时"); this.ShowMassage(ShowMsgType.Tip, msg); return false; } //移除监听 HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute"); return true; } #endregion #region ■ 限位数据接收_______________________ /// /// 限位数据接收 /// private void ReceiveLimitData() { if (HdlGatewayReceiveLogic.Current.IsEsixt("ReceiveLimitData") == true) { HdlGatewayReceiveLogic.Current.RemoveEvent("ReceiveLimitData"); } string mainkeys = LocalDevice.Current.GetDeviceMainKeys(curtainDevice); HdlGatewayReceiveLogic.Current.AddAttributeEvent("ReceiveLimitData", ReceiveComandDiv.A设备属性上报, (device) => { string checkKey = LocalDevice.Current.GetDeviceMainKeys(device); if (mainkeys != checkKey || device.DeviceStatusReport.CluterID != 258) { return; } foreach (var attriBute in device.DeviceStatusReport.AttriBute) { //窗帘百分比推送 if (attriBute.AttributeId == 8) { //开限位 if (sendDiv == 1) { receiveOpenlimit = true; } //合限位 else if (sendDiv == 2) { receiveCloseLimit = true; } } } }); } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute"); HdlGatewayReceiveLogic.Current.RemoveEvent("ReceiveLimitData"); base.CloseFormBefore(); } #endregion #region ■ 结构体_____________________________ /// /// 窗帘数据 /// private class CurtainData { /// /// false:电机方向正向;true:电机方向反向 /// public bool Direction = false; /// /// 开限位的值 /// public int OpenLimitValue = -1; /// /// 开限位的百分比 /// public int OpenLimitPersent = -1; /// /// 合限位的值 /// public int CloseLimitValue = -1; /// /// 合限位的百分比 /// public int CloseLimitPersent = -1; /// /// 窗帘总长 /// public int CurtainLength = -1; } #endregion } }