领胜LDS 键盘AOI检测项目
wells.liu
2020-07-01 e9f47e76b9932949c9df829e98b09938eb93e870
完成 板卡警报+监听功能
4个文件已添加
15个文件已修改
2309 ■■■■ 已修改文件
src/Bro.Common.Device/DeviceBase/PLCBase.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Bro.Common.Model.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Helper/EnumHelper.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Interface/IMonitor.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Interface/IMonitorSetCollection.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Interface/IWarningSetCollection.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Model/IOItem.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Model/MonitorSet.cs 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Model/WarningSet.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardConfig.cs 229 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 281 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process/ProcessControl.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process/ProcessControl_Calibration.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs 1314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/Properties/Resources.Designer.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Device.Winform/Properties/Resources.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Device/DeviceBase/PLCBase.cs
@@ -36,8 +36,8 @@
        public abstract void WriteSingleAddress(int address, int writeValue, bool waitForReply = true);
        #region IMonitor
        public event Action<DateTime, string, IDevice, MonitorSet> OnMonitorInvoke;
        public event Action<DateTime, IDevice, WarningSet> OnMonitorAlarm;
        public event Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke;
        public event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
        public List<int> MonitorValues { get; set; } = new List<int>();
@@ -157,7 +157,7 @@
            ProcessResponse resValues = monitorSet.Response;
            if (resValues.ResultValue == (int)PLCReplyValue.IGNORE)
            if (resValues.ResultValue == (int)ReplyValue.IGNORE)
            {
                return;
            }
src/Bro.Common.Model/Bro.Common.Model.csproj
@@ -139,6 +139,7 @@
    <Compile Include="Interface\IHalconToolPath.cs" />
    <Compile Include="Interface\IInputConfig.cs" />
    <Compile Include="Interface\IMonitor.cs" />
    <Compile Include="Interface\IWarningSetCollection.cs" />
    <Compile Include="Interface\IMonitorSetCollection.cs" />
    <Compile Include="Interface\IOperationConfig.cs" />
    <Compile Include="Interface\IProcessConfig.cs" />
@@ -153,6 +154,7 @@
    <Compile Include="Model\ModbusFrame.cs" />
    <Compile Include="Model\MonitorSet.cs" />
    <Compile Include="Model\PageRequest.cs" />
    <Compile Include="Model\IOItem.cs" />
    <Compile Include="Model\PLCItem.cs" />
    <Compile Include="Model\ProcessResponse.cs" />
    <Compile Include="Model\ResponseMessage.cs" />
src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -365,7 +365,7 @@
        //    Jpeg,
        //}
        public enum PLCReplyValue
        public enum ReplyValue
        {
            OK = 1,
            NG = -1,
@@ -583,5 +583,16 @@
            [Description("运动控制器没有响应")]
            GRCNotAck = -7                           // 运动控制器没有响应
        }
        /// <summary>
        /// 运动板卡 IO 类型(IN OUT)
        /// </summary>
        public enum IOModel
        {
            [Description("In输入")]
            In = 0,
            [Description("Out输出")]
            Out = 1
        }
    }
}
src/Bro.Common.Model/Interface/IMonitor.cs
@@ -10,7 +10,7 @@
        void Monitor();
        void ResetAlarm();
        event Action<DateTime, string, IDevice, MonitorSet> OnMonitorInvoke;
        event Action<DateTime, IDevice, WarningSet> OnMonitorAlarm;
        event Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke;
        event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
    }
}
src/Bro.Common.Model/Interface/IMonitorSetCollection.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using Bro.Common.Model;
using System.Collections.Generic;
namespace Bro.Common.Interface
{
@@ -35,5 +36,7 @@
        string DisplayText { get; }
        string SourceDevice { get; set; }
        ProcessResponse Response { get; set; }
    }
}
src/Bro.Common.Model/Interface/IWarningSetCollection.cs
New file
@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
namespace Bro.Common.Interface
{
    public interface IWarningSetCollection
    {
        List<IWarningSet> WarningSetCollection { get; set; }
        List<IWarningSet> GetAllWarningSet();
    }
    public interface IWarningSet
    {
        string Id { get; set; }
        string Name { get; set; }
        string DisplayText { get; }
        bool TriggerValue { get; set; }
        string WarningCode { get; set; }
        string WarningDescription { get; set; }
        int WarningLvl { get; set; }
        bool CurrentStatus { get; set; }
        string Source { get; set; }
        DateTime TriggerTime { get; set; }
    }
}
src/Bro.Common.Model/Model/IOItem.cs
New file
@@ -0,0 +1,30 @@
using Bro.Common.Helper;
using System;
using System.Collections.Generic;
using static Bro.Common.Helper.EnumHelper;
namespace Bro.Common.Model
{
    public class IOItem : IComplexDisplay
    {
        /// <summary>
        /// IO点编号
        /// </summary>
        public int IONum { get; set; }
        /// <summary>
        /// IO点的值
        /// </summary>
        public int Value { get; set; }
        /// <summary>
        /// IO点是in还是out
        /// </summary>
        public IOModel Model { get; set; }
        public string GetDisplayText()
        {
            return $"{Model.GetEnumDescription()},编号{IONum},IO点的值{Value}";
        }
    }
}
src/Bro.Common.Model/Model/MonitorSet.cs
@@ -11,6 +11,7 @@
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using static Bro.Common.Helper.EnumHelper;
namespace Bro.Common.Model
{
@@ -61,6 +62,10 @@
        [Description("监听调用描述")]
        [DisplayName("监听名称")]
        public string Name { get; set; } = "";
        [Browsable(false)]
        [JsonIgnore]
        public ProcessResponse Response { get; set; } = new ProcessResponse();
        [Browsable(false)]
        public string DisplayText
@@ -120,10 +125,10 @@
    public class MonitorSet : SimpleMonitorSet
    {
        /// <summary>
        /// 监听地址索引 按照PLC监听地址从0开始的索引
        /// 监听地址索引 按照监听地址从0开始的索引
        /// </summary>
        [Category("监听设置")]
        [Description("监听地址索引 按照PLC监听地址从0开始的索引")]
        [Description("监听地址索引 按照监听地址从0开始的索引")]
        [DisplayName("触发索引")]
        public int TriggerIndex { get; set; } = -1;
@@ -136,16 +141,16 @@
        public int TriggerValue { get; set; } = -1;
        /// <summary>
        /// 传入数据地址的索引 按照PLC监听地址从0开始的索引集合
        /// 传入数据地址的索引 按照监听地址从0开始的索引集合
        /// </summary>
        [Category("监听设置")]
        [Description("传入数据地址的索引 按照PLC监听地址从0开始的索引")]
        [Description("传入数据地址的索引 按照监听地址从0开始的索引")]
        [DisplayName("传入数据索引")]
        [TypeConverter(typeof(SimpleCollectionConvert<int>))]
        public List<int> InputDataIndex { get; set; } = new List<int>();
        /// <summary>
        /// 数据地址 实际PLC寄存器的地址,例如 40012
        /// 数据地址 实际寄存器的地址,例如 40012
        /// </summary>
        [Category("回传设置")]
        [Description("回传数据地址 实际PLC寄存器的地址,10进制,例如 40012")]
@@ -153,16 +158,12 @@
        public int ReplyDataAddress { get; set; } = -1;
        /// <summary>
        /// 通知地址 实际PLC寄存器的地址,例如 40012
        /// 通知地址 实际寄存器的地址,例如 40012
        /// </summary>
        [Category("回传设置")]
        [Description("通知地址 实际PLC寄存器的地址,10进制,例如 40012")]
        [Description("通知地址 实际寄存器的地址,10进制,例如 40012")]
        [DisplayName("通知地址")]
        public int NoticeAddress { get; set; } = -1;
        [Browsable(false)]
        [JsonIgnore]
        public ProcessResponse Response { get; set; } = new ProcessResponse();
        public MonitorSet() { }
@@ -176,6 +177,46 @@
        }
    }
    /// <summary>
    /// 运动板卡监听配置对象
    /// </summary>
    public class MotionCardMonitorSet : SimpleMonitorSet
    {
        /// <summary>
        /// 监听类型
        /// </summary>
        [Category("监听设置")]
        [DisplayName("监听类型")]
        [Description("监听运动板卡 IO 类型(IN OUT)")]
        public IOModel MonitorIOModel { get; set; }
        /// <summary>
        /// 监听地址索引
        /// </summary>
        [Category("监听设置")]
        [Description("监听地址索引")]
        [DisplayName("触发索引")]
        public int TriggerIndex { get; set; } = -1;
        /// <summary>
        /// 触发值
        /// </summary>
        [Category("监听设置")]
        [Description("触发值,设置为-999时变化即触发")]
        [DisplayName("触发值")]
        public int TriggerValue { get; set; } = -1;
        /// <summary>
        /// 监听回传
        /// </summary>
        [Category("回传设置")]
        [DisplayName("监听回传")]
        [Description("监听运动板卡,并往指定的IO写入数据")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(IOItem), typeof(UITypeEditor))]
        public List<IOItem> ReplyIODatas { get; set; } = new List<IOItem>();
    }
    public class IOperationConfigEditor : UITypeEditor
    {
        public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
src/Bro.Common.Model/Model/WarningSet.cs
@@ -1,23 +1,24 @@
using Bro.Common.Helper;
using Bro.Common.Interface;
using Newtonsoft.Json;
using System;
using System.ComponentModel;
using static Bro.Common.Helper.EnumHelper;
namespace Bro.Common.Model
{
    /// <summary>
    /// 警报配置
    /// PLC警报配置
    /// </summary>
    public class WarningSet : IComplexDisplay
    public class WarningSet : IComplexDisplay, IWarningSet
    {
        [Category("索引设置")]
        [Description("警报索引——字索引")]
        [Description("PLC警报索引——字索引")]
        [DisplayName("警报字索引")]
        public int WarningIndex_Word { get; set; }
        [Category("索引设置")]
        [Description("警报索引——位索引")]
        [Description("PLC警报索引——位索引")]
        [DisplayName("警报位索引")]
        public int WarningIndex_Bit { get; set; }
@@ -57,9 +58,91 @@
        [JsonIgnore]
        public DateTime TriggerTime { get; set; } = DateTime.Now;
        [Browsable(false)]
        public string Id { get; set; } = Guid.NewGuid().ToString();
        [Category("个性化设置")]
        [Description("警报")]
        [DisplayName("警报名称")]
        public string Name { get; set; } = "";
        [Browsable(false)]
        public string DisplayText => GetDisplayText();
        public string GetDisplayText()
        {
            return $"{WarningIndex_Word}:{WarningIndex_Bit}-{WarningCode}-{WarningDescription}";
            return $"{Name}-{WarningIndex_Word}:{WarningIndex_Bit}-{WarningCode}-{WarningDescription}";
        }
    }
    /// <summary>
    /// 运动板卡警报配置对象
    /// </summary>
    public class MotionCardWarningSet : IComplexDisplay, IWarningSet
    {
        [Browsable(false)]
        public string Id { get; set; } = Guid.NewGuid().ToString();
        [Category("个性化设置")]
        [Description("警报")]
        [DisplayName("警报名称")]
        public string Name { get; set; } = "";
        [Category("触发设置")]
        [Description("当该触发索引的值与设置的TriggerValue相同时,警报触发")]
        [DisplayName("触发索引")]
        public int TriggerIndex { get; set; }
        /// <summary>
        /// 警报类型
        /// </summary>
        [Category("警报设置")]
        [DisplayName("警报类型")]
        [Description("警报设置:运动板卡 IO 类型(IN OUT)")]
        public IOModel WarningIOModel { get; set; }
        [Category("触发设置")]
        [Description("true:高电平触发报警 false:低电平触发报警")]
        [DisplayName("触发值")]
        public bool TriggerValue { get; set; } = true;
        [Category("警报内容")]
        [Description("警报代码")]
        [DisplayName("警报代码")]
        public string WarningCode { get; set; }
        [Category("警报内容")]
        [Description("警报描述")]
        [DisplayName("警报描述")]
        public string WarningDescription { get; set; }
        [Category("级别设置")]
        [Description("警报级别")]
        [DisplayName("警报级别")]
        public int WarningLvl { get; set; } = 0;
        /// <summary>
        /// 表示报警状态,是报警地址值和警报触发值比较后的结果
        /// true 正在报警 false 取消报警
        /// </summary>
        [Browsable(false)]
        [JsonIgnore]
        public bool CurrentStatus { get; set; } = false;
        [Browsable(false)]
        [JsonIgnore]
        public string Source { get; set; } = "";
        [Browsable(false)]
        [JsonIgnore]
        public DateTime TriggerTime { get; set; } = DateTime.Now;
        [Browsable(false)]
        public string DisplayText => GetDisplayText();
        public string GetDisplayText()
        {
            return $"{Name}-{WarningIOModel.GetEnumDescription()}:{WarningCode}-{WarningDescription}";
        }
    }
}
src/Bro.Device.GTSCard/GTSCardConfig.cs
@@ -1,6 +1,7 @@
using Bro.Common.Base;
using Bro.Common.Helper;
using Bro.Common.Interface;
using Bro.Common.Model;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -39,20 +40,11 @@
        [Description("CardNum:卡号")]
        public int CardNum { get; set; }
        //[Category("板卡配置")]
        //[Description("IO卡号")]
        //public int IOCardNum { get; set; }
        [Category("板卡配置")]
        [DisplayName("初始配置文件路径")]
        [Description("InitialConfigFilePath:初始配置文件路径")]
        [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
        public string InitialConfigFilePath { get; set; }
        [Category("IO扫描配置")]
        [DisplayName("扫描间隔")]
        [Description("ScanInterval:扫描间隔,以毫秒为单位")]
        public int ScanInterval { get; set; } = 100;
        [Category("轴配置")]
        [DisplayName("轴数量")]
@@ -76,15 +68,63 @@
        [Description("ActionAfterDelay:动作完成后延迟")]
        public int ActionAfterDelay { get; set; } = 100;
        public bool IsEnableMonitor { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
        public int MonitorInterval { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
        public int MonitorTimeout { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
        public List<IMonitorSet> MonitorSetCollection { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
        [Category("警报配置")]
        [Description("WarningSetCollection:警报配置列表")]
        [DisplayName("警报配置")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(WarningSetsEditor), typeof(UITypeEditor))]
        public List<IWarningSet> WarningSetCollection { get; set; } = new List<IWarningSet>();
        #region IMonitorConfig
        [Category("监听设置")]
        [Description("MonitorSetCollection:监听操作配置集合")]
        [DisplayName("监听配置")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<MotionCardMonitorSet>), typeof(UITypeEditor))]
        public List<IMonitorSet> MonitorSetCollection { get; set; } = new List<IMonitorSet>();
        [Category("监听设置")]
        [Description("true:启动监听 false:关闭监听")]
        [DisplayName("监听启用")]
        public bool IsEnableMonitor { get; set; } = true;
        [Category("监听设置")]
        [Description("扫描间隔时间,单位:ms")]
        [DisplayName("扫描间隔")]
        public int MonitorInterval { get; set; } = 10;
        [Category("监听设置")]
        [Description("超时设置,单位:ms")]
        [DisplayName("监听超时")]
        public int MonitorTimeout { get; set; } = 500;
        //[Category("事件地址设置")]
        //[Description("事件开始地址,PLC的实际寄存器地址。十进制,不包含功能码。")]
        //[DisplayName("监听开始地址")]
        //public int EventStartAddress { get; set; } = 8000;
        //[Category("事件地址设置")]
        //[Description("事件地址长度,最大长度128")]
        //[DisplayName("监听长度")]
        //public int EventLength { get; set; } = 120;
        public List<IMonitorSet> GetAllMonitorSet()
        {
            throw new NotImplementedException();
            WarningSetCollection.ForEach(m => m.Source = this.Name);
            MonitorSetCollection.ForEach(m => m.SourceDevice = this.Id);
            return MonitorSetCollection;
        }
        #endregion
        //#region IMotion Related
        //[Category("运动配置")]
        //[Description("运动轴状态集合")]
        //[DisplayName("运动轴状态集合")]
        //[TypeConverter(typeof(CollectionCountConvert))]
        //[Editor(typeof(ComplexCollectionEditor<PLCMotionDefinition_State>), typeof(UITypeEditor))]
        //public List<PLCMotionDefinition_State> MotionStateCollection { get; set; } = new List<PLCMotionDefinition_State>();
        //#endregion
    }
    /// <summary>
@@ -575,165 +615,4 @@
        public AutoResetEvent MoveSendHandle { get; set; } = new AutoResetEvent(false);
    }
    ///// <summary>
    ///// 点位类型
    ///// </summary>
    //public enum PosType
    //{
    //    /// <summary>
    //    /// 直线插补
    //    /// </summary>
    //    Line = 1,
    //    /// <summary>
    //    /// 圆弧插补(半径)
    //    /// </summary>
    //    CircleRadius,
    //    /// <summary>
    //    /// 圆弧插补(圆心)
    //    /// </summary>
    //    CircleCenter
    //}
    //public static class GTSCardParameter
    //{
    //    #region 运动参数
    //    public static int Dangliang = 1;
    //    public static int AxisCount = 2;//运动轴数量
    //    public static short CardNum = Convert.ToInt16(ConfigurationManager.AppSettings["cardNum"]);
    //    public static short fifo = Convert.ToInt16(ConfigurationManager.AppSettings["fifo"]);
    //    public static int FlySpeed = Convert.ToInt32(ConfigurationManager.AppSettings["flySpeed"]);
    //    public static double FlyAcc = Convert.ToDouble(ConfigurationManager.AppSettings["flyAcc"]);
    //    public static int P2PSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["p2pSpeed"]);
    //    public static double P2PAcc = Convert.ToDouble(ConfigurationManager.AppSettings["p2pAcc"]);
    //    public static double P2PDec = Convert.ToDouble(ConfigurationManager.AppSettings["p2pDec"]);
    //    public static int FreeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["freeSpeed"]);
    //    public static int VelEnd = Convert.ToInt32(ConfigurationManager.AppSettings["velEnd"]);//飞拍结束速度
    //    public static int HomeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["homeSpeed"]);
    //    public static int Loading = Convert.ToInt32(ConfigurationManager.AppSettings["loading"]);
    //    //public const short cardn = 0;//运动控制器卡号 默认为:0
    //    //public const short crdn = 1;//坐标系号 取值范围:[1, 2]
    //    //public const short fifo = 0;//插补缓存区号 取值范围:[0, 1],默认值为:0
    //    //public const int flySpeed = 250;//飞拍速度
    //    //public const double flyAcc = 0.5;//飞拍加速度
    //    //public const int gocatorSpeed = 150;//3D检测轴运动速度
    //    //public const int p2pSpeed = 250;//P2P速度
    //    //public const double p2pAcc = 1;//P2P加速度
    //    //public const double p2pDec = 1;//P2P减速度
    //    //public const int calibrationSpeed = 10;//标定速度
    //    //public const int calibrationZ = 19336;//标定Z轴高度
    //    //public const int barcodeSpeed = 250;//条码检测轴运动速度
    //    //public const int freeSpeed = 250;//非检测时轴运动速度
    //    //public const int velEnd = 0;//飞拍结束速度
    //    //public const int homeSpeed = 50;//回零速度
    //    //public const int loading = 80000;//上料位置
    //    #endregion
    //    #region IO
    //    /// <summary>
    //    /// 输入IO默认值
    //    /// </summary>
    //    public const int InDefaultValue = 0xFFDA;
    //    /// <summary>
    //    /// 夹紧气缸
    //    /// </summary>
    //    public const short EXO_1 = 100;//夹紧气缸
    //    /// <summary>
    //    /// 日光灯
    //    /// </summary>
    //    public const short EXO_2 = 101;//日光灯
    //    /// <summary>
    //    /// 光源切换
    //    /// </summary>
    //    public const short EXO_3 = 102;//光源切换
    //    /// <summary>
    //    /// 红灯
    //    /// </summary>
    //    public const short EXO_4 = 103;//红灯
    //    /// <summary>
    //    /// 黄灯
    //    /// </summary>
    //    public const short EXO_5 = 104;//黄灯
    //    /// <summary>
    //    /// 绿灯
    //    /// </summary>
    //    public const short EXO_6 = 105;//绿灯
    //    /// <summary>
    //    /// 蜂鸣器
    //    /// </summary>
    //    public const short EXO_7 = 106;//蜂鸣器
    //    /// <summary>
    //    /// Gocator X
    //    /// </summary>
    //    public const short EXO_8 = 107;//Gocator X
    //    /// <summary>
    //    /// 正面光(左)
    //    /// </summary>
    //    public const short EXO_9 = 108;//正面光(左)
    //    /// <summary>
    //    /// 正面光(后)
    //    /// </summary>
    //    public const short EXO_10 = 109;//正面光(后)
    //    /// <summary>
    //    /// 正面光(右)
    //    /// </summary>
    //    public const short EXO_11 = 110;//正面光(右)
    //    /// <summary>
    //    /// 正面光(前)
    //    /// </summary>
    //    public const short EXO_12 = 111;//正面光(前)
    //    /// <summary>
    //    /// Gocator Y
    //    /// </summary>
    //    public const short EXO_16 = 115;//Gocator Y
    //    /// <summary>
    //    /// 输出IO默认值
    //    /// </summary>
    //    public const int OutDefaultValue = 0xFFF;
    //    /// <summary>
    //    /// 左启动
    //    /// </summary>
    //    public const short EXI0 = 0;//左起动
    //    /// <summary>
    //    /// 右启动
    //    /// </summary>
    //    public const short EXI1 = 1;//右起动
    //    /// <summary>
    //    /// 停止
    //    /// </summary>
    //    public const short EXI2 = 2;//停止
    //    /// <summary>
    //    /// 复位
    //    /// </summary>
    //    public const short EXI3 = 3;//复位
    //    /// <summary>
    //    /// 急停
    //    /// </summary>
    //    public const short EXI4 = 4;//急停
    //    /// <summary>
    //    /// 门开关
    //    /// </summary>
    //    public const short EXI5 = 5;//门开关
    //    /// <summary>
    //    /// 安全光幕
    //    /// </summary>
    //    public const short EXI6 = 6;//安全光幕
    //    public const short EXI7 = 7;//
    //    /// <summary>
    //    /// 夹紧气缸原位
    //    /// </summary>
    //    public const short EXI8 = 8;//夹紧气缸原位
    //    /// <summary>
    //    /// 夹紧气缸到位
    //    /// </summary>
    //    public const short EXI9 = 9;//夹紧气缸到位
    //    #endregion
    //}
}
src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -6,7 +6,9 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
@@ -18,10 +20,6 @@
    [Device("GTSCard", "固高板卡", EnumHelper.DeviceAttributeType.Device)]
    public class GTSCardDriver : DeviceBase, IMonitor, IMotion
    {
        public event Action<DateTime, string, IDevice, MonitorSet> OnMonitorInvoke;
        public event Action<DateTime, IDevice, WarningSet> OnMonitorAlarm;
        public delegate bool OnAxisStartToCheckDelegate(int axisIndex, int startPosition, int endPosition);
        // 异常事件
        public Action<Exception> OnExceptionRaised;
@@ -266,8 +264,6 @@
        /// <returns></returns>
        public double GetPrfPosition(int axisNum)
        {
            lock (moveLock)
            {
                double position = 0;
                double prfpos = 0; uint pclock = 0;
                var ret = GTSCardAPI.GT_GetPrfPos((short)IConfig.CardNum, (short)axisNum, out prfpos, 1, out pclock);
@@ -277,7 +273,6 @@
                }
                position = prfpos / IConfig.AxisVelocityRatio;
                return position;
            }
        }
        /// <summary>
@@ -300,7 +295,6 @@
                return position;
            }
        }
        /// <summary>
        /// Set Single Axis Do Jog Move  
@@ -510,7 +504,7 @@
        }
        /// <summary>
        /// 运动停止
        /// 某个轴运动停止
        /// </summary>
        /// <param name="axisNum">axisNo</param>
        /// <param name="option">0表示平滑停止,1表示紧急停止</param>
@@ -617,7 +611,7 @@
        }
        /// <summary>
        /// 读取输入
        /// 读取IO输入
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="index">输入口</param>
@@ -626,12 +620,27 @@
        {
            int value;
            GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_GPI, out value);
            if ((value & 1 << index) == 0) return true;//有输入返回true
            if ((value & (1 << index)) == 0) return true;//有输入返回true
            else return false;          //无输入返回false
        }
        /// <summary>
        /// 输出
        /// 读取IO输出
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public bool GetDoSts(short cardNum, short index)
        {
            int outSts;
            short outNum = (short)(index % 100);
            GTSCardAPI.GT_GetDo(cardNum, GTSCardAPI.MC_GPO, out outSts);
            if ((outSts & (1 << outNum)) == 0) return true;
            else return false;
        }
        /// <summary>
        /// 按位设置数字 IO 输出状态
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="index">输出口,返回1-16</param>
@@ -647,59 +656,6 @@
            {
                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, 1);
            }
        }
        /// <summary>
        /// 停止 某个轴
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="axisNum">轴号</param>
        /// <param name="value">停止方式,false表示平滑停止,true表示紧急停止</param>
        public void Stop(short cardNum, short axisNum, bool emergencyStop)
        {
            if (emergencyStop)
            {
                GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 1 << (axisNum - 1));
            }
            else
            {
                GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 0);
            }
        }
        /// <summary>
        /// IO输出
        /// </summary>
        /// <param name="cardNum">卡号</param>
        /// <param name="mdl">模块号</param>
        /// <param name="index">IO输出</param>
        /// <param name="value">true表示输出,false表示无输出</param>
        public void MC_WriteDigitalOutput(short cardNum, short mdl, short index, bool value)
        {
            if (value)
            {
                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 0);
            }
            else
            {
                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 1);
            }
        }
        /// <summary>
        /// 读取IO输出状态
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public bool GetDoSts(short cardNum, short index)
        {
            short outNum = 0;
            int outSts;
            outNum = (short)(index % 100);
            GTSCardAPI.GT_GetDo(cardNum, GTSCardAPI.MC_GPO, out outSts);
            if ((outSts & (1 << outNum)) == 0) return true;
            else return false;
        }
        /// <summary>
@@ -722,9 +678,168 @@
        #endregion
        public void Monitor()
        #region IMonitor
        public event Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke;
        public event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
        public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
        public List<IOItem> GetMonitorValues()
        {
            throw new NotImplementedException();
            var result = new List<IOItem>();
            //读取IO输入
            int inValue;
            GTSCardAPI.GT_GetDi((short)IConfig.CardNum, GTSCardAPI.MC_GPI, out inValue);
            //读取IO输出
            int outValue;
            GTSCardAPI.GT_GetDo((short)IConfig.CardNum, GTSCardAPI.MC_GPO, out outValue);
            //解析结果
            for (var index = 1; index <= 16; index++)
            {
                IOItem inItem = new IOItem()
                {
                    IONum = index,
                    Value = (inValue & (1 << index)) == 0 ? 1 : 0,
                    Model = IOModel.In
                };
                IOItem outItem = new IOItem()
                {
                    IONum = index,
                    Value = (outValue & (1 << index)) == 0 ? 1 : 0,
                    Model = IOModel.Out
                };
                result.Add(inItem);
                result.Add(outItem);
            }
            return result;
        }
        public async void Monitor()
        {
            await Task.Run(() =>
            {
                while (CurrentState != EnumHelper.DeviceState.DSClose && CurrentState != EnumHelper.DeviceState.DSExcept && CurrentState != EnumHelper.DeviceState.DSUninit)
                {
                    try
                    {
                        if (!IConfig.IsEnableMonitor)
                            return;
                        var newValues = GetMonitorValues();
                        if (newValues == null || newValues.Count == 0)
                            continue;
                        Stopwatch sw = new Stopwatch();
                        sw.Start();
                        if (MonitorValues.Count == newValues.Count)
                        {
                            var tempNew = new List<IOItem>(newValues);//clone
                            var tempOld = new List<IOItem>(MonitorValues);
                            MonitorCheckAndInvoke(tempNew, tempOld);
                        }
                        MonitorValues = new List<IOItem>(newValues);
                        sw.Stop();
                        if (sw.ElapsedMilliseconds > 20)
                        {
                            LogAsync(DateTime.Now, $"{this.Name}轮询时间:{sw.ElapsedMilliseconds}", "");
                        }
                        if (IConfig.MonitorInterval > 0)
                        {
                            Thread.Sleep(IConfig.MonitorInterval);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (CurrentState == DeviceState.DSOpen)
                        {
                            LogAsync(DateTime.Now, $"{this.Name}监听异常", ex.GetExceptionMessage());
                        }
                    }
                }
            });
        }
        private void OnMethodInvoked(IAsyncResult ar)
        {
            MotionCardMonitorSet monitorSet = ar.AsyncState as MotionCardMonitorSet;
            ProcessResponse resValues = monitorSet.Response;
            if (resValues.ResultValue == (int)ReplyValue.IGNORE)
            {
                return;
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            // 将指定IOItem写入板卡
            foreach (var replyIOData in monitorSet.ReplyIODatas)
            {
                //写入IO输出
                if (replyIOData.Model == IOModel.Out)
                {
                    GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPI, (short)replyIOData.IONum, (short)replyIOData.Value);
                }
                // in只读不能写
            }
            sw.Stop();
            LogAsync(DateTime.Now, $"{Name}反馈完成,耗时{sw.ElapsedMilliseconds}ms", $"{resValues.GetDisplayText()}");
        }
        protected void MonitorCheckAndInvoke(List<IOItem> tempNew, List<IOItem> tempOld)
        {
            #region 警报信息
            Parallel.ForEach(IConfig.WarningSetCollection, wSet =>
            {
                MotionCardWarningSet warningSet = wSet as MotionCardWarningSet;
                bool isOn = ((tempNew.FirstOrDefault(u => u.IONum == warningSet.TriggerIndex && u.Model == warningSet.WarningIOModel)?.Value >> warningSet.TriggerIndex) & 1) == (warningSet.TriggerValue ? 1 : 0);
                if (warningSet.CurrentStatus != isOn)
                {
                    warningSet.CurrentStatus = isOn;
                    warningSet.TriggerTime = DateTime.Now;
                    warningSet.WarningDescription = $"警报:{warningSet.Name}-触发索引:{warningSet.TriggerIndex}-{warningSet.WarningIOModel.GetEnumDescription()}:{warningSet.WarningCode}";
                    SaveAlarmCSVAsync(DateTime.Now, this.Name, warningSet);
                    OnMonitorAlarm?.BeginInvoke(DateTime.Now, this, warningSet, null, null);
                }
            });
            #endregion
            #region 监听信息
            Parallel.ForEach(IConfig.MonitorSetCollection, mSet =>
            {
                MotionCardMonitorSet monitorSet = mSet as MotionCardMonitorSet;
                if (monitorSet.TriggerIndex < 0 || monitorSet.TriggerIndex > tempNew.Count)
                {
                    return;
                }
                var newIOItem = tempNew.FirstOrDefault(u => u.IONum == monitorSet.TriggerIndex);
                var oldIOItem = tempOld.FirstOrDefault(u => u.IONum == monitorSet.TriggerIndex);
                if (newIOItem?.Value != oldIOItem?.Value)
                {
                    if (monitorSet.TriggerValue == -999 || newIOItem.Value == monitorSet.TriggerValue)
                    {
                        if (monitorSet.OpConfig == null)
                        {
                            monitorSet.OpConfig = new OperationConfigBase();
                        }
                        //monitorSet.OpConfig.InputPara = monitorSet.InputDataIndex.ConvertAll(index =>
                        //{
                        //    return tempNew[index].Value;
                        //}).ToList();
                        OnMonitorInvoke?.BeginInvoke(DateTime.Now, monitorSet.InvokeDevice, this, monitorSet, OnMethodInvoked, monitorSet);
                    }
                }
            });
            #endregion
        }
        public void ResetAlarm()
@@ -769,5 +884,37 @@
            GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
        }
        object _alarmLock = new object();
        private async void SaveAlarmCSVAsync(DateTime now, string plcName, IWarningSet ws)
        {
            await Task.Run(() =>
            {
                lock (_alarmLock)
                {
                    DirectoryInfo dir = new DirectoryInfo(this.IConfig.LogPath);
                    if (!dir.Exists)
                    {
                        dir.Create();
                    }
                    string path = Path.Combine(IConfig.LogPath, $"Alarm_{Name}_{now.ToString("yyyyMMdd")}.csv");
                    bool fileExist = File.Exists(path);
                    using (StreamWriter writer = new StreamWriter(path, true, System.Text.Encoding.UTF8))
                    {
                        if (!fileExist)
                        {
                            writer.WriteLine("Time,Source,AlarmCode,AlarmDescription,AlarmStatus");
                        }
                        writer.WriteLine($"{now.ToString("HH:mm:ss.fff")},{plcName},{ws.WarningCode},{ws.WarningDescription},{(ws.CurrentStatus ? "报警" : "停止")}");
                        writer.Flush();
                        writer.Close();
                    }
                }
            });
        }
        #endregion
    }
}
src/Bro.Process/ProcessControl.cs
@@ -484,7 +484,7 @@
        #endregion
        #region IMonitor监听
        protected virtual void OnMonitorInvoke(DateTime dt, string deviceId, IDevice sourceDevice, MonitorSet monitorSet)
        protected virtual void OnMonitorInvoke(DateTime dt, string deviceId, IDevice sourceDevice, IMonitorSet monitorSet)
        {
            string methodCode = monitorSet.MethodCode;
@@ -642,9 +642,9 @@
        #endregion
        #region 报警和DownTime
        ObservableCollection<WarningSet> _warningRemains = new ObservableCollection<WarningSet>();
        ObservableCollection<IWarningSet> _warningRemains = new ObservableCollection<IWarningSet>();
        protected virtual void OnMonitorAlarm(DateTime dt, IDevice device, WarningSet warning)
        protected virtual void OnMonitorAlarm(DateTime dt, IDevice device, IWarningSet warning)
        {
            if (warning.CurrentStatus)
            {
src/Bro.Process/ProcessControl_Calibration.cs
@@ -40,13 +40,13 @@
                    _frmCalibration_9P.ShowDialog();
                });
                return (int)PLCReplyValue.NG;
                return (int)ReplyValue.NG;
            }
            if (config.InputPara[0] <= 0 || config.InputPara[0] > config.Results.Count)
            {
                config.InputPara = null;
                return (int)PLCReplyValue.IGNORE;
                return (int)ReplyValue.IGNORE;
            }
            int sequence = config.InputPara[0];
@@ -100,7 +100,7 @@
            //}
            config.InputPara = null;
            return (int)PLCReplyValue.OK;
            return (int)ReplyValue.OK;
        }
        public void GetCalibrationPoints(CameraBase camera, CalibrationConfig config, string methodName, int sequence)
src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
@@ -102,6 +102,11 @@
      <DependentUpon>CtrlPLCRunBase.cs</DependentUpon>
    </Compile>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="CtrlCameraRunBase.resx">
@@ -113,6 +118,10 @@
    <EmbeddedResource Include="CtrlPLCRunBase.resx">
      <DependentUpon>CtrlPLCRunBase.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs
@@ -28,59 +28,58 @@
        /// </summary>
        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CtrlMotionCardRunBase));
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.groupBox3 = new System.Windows.Forms.GroupBox();
            this.propGrid = new System.Windows.Forms.PropertyGrid();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.button4 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.radioButton3 = new System.Windows.Forms.RadioButton();
            this.radioButton2 = new System.Windows.Forms.RadioButton();
            this.radioButton1 = new System.Windows.Forms.RadioButton();
            this.groupBoxCommBtn = new System.Windows.Forms.GroupBox();
            this.btnStart = new System.Windows.Forms.Button();
            this.button1 = new System.Windows.Forms.Button();
            this.button11 = new System.Windows.Forms.Button();
            this.button8 = new System.Windows.Forms.Button();
            this.button10 = new System.Windows.Forms.Button();
            this.button9 = new System.Windows.Forms.Button();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.groupBox4 = new System.Windows.Forms.GroupBox();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.label5 = new System.Windows.Forms.Label();
            this.label7 = new System.Windows.Forms.Label();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.textBox4 = new System.Windows.Forms.TextBox();
            this.ioIndicatorCtrl1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl9 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl4 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl5 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl3 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl7 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBox5 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
            this.ioIndicatorCtrl15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl17 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl18 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl19 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl20 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl21 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl22 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl23 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl24 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl25 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBox5 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl26 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl25 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl24 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl17 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl20 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl19 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl23 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl22 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl21 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl18 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBox4 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl9 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.textBox4 = new System.Windows.Forms.TextBox();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label7 = new System.Windows.Forms.Label();
            this.label5 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.groupBox6 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl27 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl28 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
@@ -98,45 +97,16 @@
            this.ioIndicatorCtrl40 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl41 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl42 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.groupBox7 = new System.Windows.Forms.GroupBox();
            this.groupBox8 = new System.Windows.Forms.GroupBox();
            this.groupBox9 = new System.Windows.Forms.GroupBox();
            this.ioIndicatorCtrl43 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl44 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl45 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl46 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl47 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl48 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl49 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl50 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl51 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl52 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl53 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl54 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl55 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl56 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl57 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl58 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl59 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl60 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl61 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl62 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl63 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl64 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl65 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.ioIndicatorCtrl66 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
            this.tableLayoutPanel1.SuspendLayout();
            this.tableLayoutPanel2.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.groupBox3.SuspendLayout();
            this.groupBox1.SuspendLayout();
            this.groupBoxCommBtn.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.groupBox4.SuspendLayout();
            this.groupBox5.SuspendLayout();
            this.tableLayoutPanel3.SuspendLayout();
            this.groupBox5.SuspendLayout();
            this.groupBox4.SuspendLayout();
            this.groupBox6.SuspendLayout();
            this.groupBox7.SuspendLayout();
            this.groupBox8.SuspendLayout();
            this.groupBox9.SuspendLayout();
            this.SuspendLayout();
            // 
            // tableLayoutPanel1
@@ -166,122 +136,12 @@
            this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
            this.tableLayoutPanel2.Name = "tableLayoutPanel2";
            this.tableLayoutPanel2.RowCount = 4;
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 110F));
            this.tableLayoutPanel2.Size = new System.Drawing.Size(386, 714);
            this.tableLayoutPanel2.TabIndex = 0;
            //
            // groupBox3
            //
            this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox3.Location = new System.Drawing.Point(3, 143);
            this.groupBox3.Name = "groupBox3";
            this.groupBox3.Size = new System.Drawing.Size(380, 458);
            this.groupBox3.TabIndex = 6;
            this.groupBox3.TabStop = false;
            this.groupBox3.Text = "参数及操作";
            //
            // groupBox1
            //
            this.groupBox1.Controls.Add(this.button4);
            this.groupBox1.Controls.Add(this.button3);
            this.groupBox1.Controls.Add(this.button2);
            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox1.Location = new System.Drawing.Point(3, 73);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(380, 64);
            this.groupBox1.TabIndex = 5;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "运动类型";
            //
            // button4
            //
            this.button4.Location = new System.Drawing.Point(152, 32);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(70, 25);
            this.button4.TabIndex = 4;
            this.button4.Text = "GoHome";
            this.button4.UseVisualStyleBackColor = true;
            //
            // button3
            //
            this.button3.Location = new System.Drawing.Point(76, 32);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(70, 25);
            this.button3.TabIndex = 4;
            this.button3.Text = "Jog";
            this.button3.UseVisualStyleBackColor = true;
            //
            // button2
            //
            this.button2.Location = new System.Drawing.Point(0, 32);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(70, 25);
            this.button2.TabIndex = 4;
            this.button2.Text = "P2P";
            this.button2.UseVisualStyleBackColor = true;
            //
            // groupBoxCommBtn
            //
            this.groupBoxCommBtn.Controls.Add(this.button1);
            this.groupBoxCommBtn.Controls.Add(this.button11);
            this.groupBoxCommBtn.Controls.Add(this.button8);
            this.groupBoxCommBtn.Controls.Add(this.button10);
            this.groupBoxCommBtn.Controls.Add(this.button9);
            this.groupBoxCommBtn.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxCommBtn.Location = new System.Drawing.Point(3, 3);
            this.groupBoxCommBtn.Name = "groupBoxCommBtn";
            this.groupBoxCommBtn.Size = new System.Drawing.Size(380, 64);
            this.groupBoxCommBtn.TabIndex = 0;
            this.groupBoxCommBtn.TabStop = false;
            this.groupBoxCommBtn.Text = "公共操作";
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(0, 31);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(70, 25);
            this.button1.TabIndex = 4;
            this.button1.Text = "清除状态";
            this.button1.UseVisualStyleBackColor = true;
            //
            // button11
            //
            this.button11.Location = new System.Drawing.Point(305, 31);
            this.button11.Name = "button11";
            this.button11.Size = new System.Drawing.Size(70, 25);
            this.button11.TabIndex = 4;
            this.button11.Text = "紧急停止";
            this.button11.UseVisualStyleBackColor = true;
            //
            // button8
            //
            this.button8.Location = new System.Drawing.Point(76, 31);
            this.button8.Name = "button8";
            this.button8.Size = new System.Drawing.Size(70, 25);
            this.button8.TabIndex = 4;
            this.button8.Text = "伺服使能";
            this.button8.UseVisualStyleBackColor = true;
            //
            // button10
            //
            this.button10.Location = new System.Drawing.Point(228, 31);
            this.button10.Name = "button10";
            this.button10.Size = new System.Drawing.Size(70, 25);
            this.button10.TabIndex = 4;
            this.button10.Text = "平滑停止";
            this.button10.UseVisualStyleBackColor = true;
            //
            // button9
            //
            this.button9.Location = new System.Drawing.Point(152, 31);
            this.button9.Name = "button9";
            this.button9.Size = new System.Drawing.Size(70, 25);
            this.button9.TabIndex = 4;
            this.button9.Text = "位置清零";
            this.button9.UseVisualStyleBackColor = true;
            // 
            // groupBox2
            // 
@@ -305,200 +165,168 @@
            this.listBox1.Size = new System.Drawing.Size(374, 84);
            this.listBox1.TabIndex = 1;
            // 
            // groupBox4
            // groupBox3
            // 
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl7);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl3);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl5);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl2);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl4);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl10);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl9);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl8);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl6);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl1);
            this.groupBox4.Controls.Add(this.textBox4);
            this.groupBox4.Controls.Add(this.textBox3);
            this.groupBox4.Controls.Add(this.textBox2);
            this.groupBox4.Controls.Add(this.textBox1);
            this.groupBox4.Controls.Add(this.label7);
            this.groupBox4.Controls.Add(this.label5);
            this.groupBox4.Controls.Add(this.label4);
            this.groupBox4.Controls.Add(this.label3);
            this.groupBox4.Controls.Add(this.label2);
            this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox4.Location = new System.Drawing.Point(3, 3);
            this.groupBox4.Name = "groupBox4";
            this.groupBox4.Size = new System.Drawing.Size(578, 136);
            this.groupBox4.TabIndex = 3;
            this.groupBox4.TabStop = false;
            this.groupBox4.Text = "轴状态";
            this.groupBox3.Controls.Add(this.propGrid);
            this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox3.Location = new System.Drawing.Point(3, 143);
            this.groupBox3.Name = "groupBox3";
            this.groupBox3.Size = new System.Drawing.Size(380, 458);
            this.groupBox3.TabIndex = 6;
            this.groupBox3.TabStop = false;
            this.groupBox3.Text = "参数";
            // 
            // label2
            // propGrid
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(7, 21);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(65, 12);
            this.label2.TabIndex = 2;
            this.label2.Text = "规划位置:";
            this.propGrid.Dock = System.Windows.Forms.DockStyle.Fill;
            this.propGrid.Location = new System.Drawing.Point(3, 17);
            this.propGrid.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
            this.propGrid.Name = "propGrid";
            this.propGrid.Size = new System.Drawing.Size(374, 438);
            this.propGrid.TabIndex = 1;
            // 
            // label3
            // groupBox1
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(218, 21);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(65, 12);
            this.label3.TabIndex = 2;
            this.label3.Text = "实际位置:";
            this.groupBox1.Controls.Add(this.radioButton3);
            this.groupBox1.Controls.Add(this.radioButton2);
            this.groupBox1.Controls.Add(this.radioButton1);
            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox1.Location = new System.Drawing.Point(3, 93);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(380, 44);
            this.groupBox1.TabIndex = 5;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "运动类型";
            // 
            // label4
            // radioButton3
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(7, 48);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(65, 12);
            this.label4.TabIndex = 2;
            this.label4.Text = "规划速度:";
            this.radioButton3.AutoSize = true;
            this.radioButton3.Location = new System.Drawing.Point(156, 22);
            this.radioButton3.Name = "radioButton3";
            this.radioButton3.Size = new System.Drawing.Size(59, 16);
            this.radioButton3.TabIndex = 5;
            this.radioButton3.TabStop = true;
            this.radioButton3.Text = "GoHome";
            this.radioButton3.UseVisualStyleBackColor = true;
            // 
            // label5
            // radioButton2
            // 
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(218, 51);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(65, 12);
            this.label5.TabIndex = 2;
            this.label5.Text = "实际速度:";
            this.radioButton2.AutoSize = true;
            this.radioButton2.Location = new System.Drawing.Point(82, 22);
            this.radioButton2.Name = "radioButton2";
            this.radioButton2.Size = new System.Drawing.Size(41, 16);
            this.radioButton2.TabIndex = 5;
            this.radioButton2.TabStop = true;
            this.radioButton2.Text = "Jog";
            this.radioButton2.UseVisualStyleBackColor = true;
            // 
            // label7
            // radioButton1
            // 
            this.label7.AutoSize = true;
            this.label7.Location = new System.Drawing.Point(7, 214);
            this.label7.Name = "label7";
            this.label7.Size = new System.Drawing.Size(0, 12);
            this.label7.TabIndex = 2;
            this.radioButton1.AutoSize = true;
            this.radioButton1.Checked = true;
            this.radioButton1.Location = new System.Drawing.Point(9, 22);
            this.radioButton1.Name = "radioButton1";
            this.radioButton1.Size = new System.Drawing.Size(41, 16);
            this.radioButton1.TabIndex = 5;
            this.radioButton1.TabStop = true;
            this.radioButton1.Text = "P2P";
            this.radioButton1.UseVisualStyleBackColor = true;
            this.radioButton1.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged);
            // 
            // textBox1
            // groupBoxCommBtn
            // 
            this.textBox1.Location = new System.Drawing.Point(69, 18);
            this.textBox1.Name = "textBox1";
            this.textBox1.ReadOnly = true;
            this.textBox1.Size = new System.Drawing.Size(116, 21);
            this.textBox1.TabIndex = 3;
            this.groupBoxCommBtn.Controls.Add(this.btnStart);
            this.groupBoxCommBtn.Controls.Add(this.button1);
            this.groupBoxCommBtn.Controls.Add(this.button11);
            this.groupBoxCommBtn.Controls.Add(this.button8);
            this.groupBoxCommBtn.Controls.Add(this.button10);
            this.groupBoxCommBtn.Controls.Add(this.button9);
            this.groupBoxCommBtn.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxCommBtn.Location = new System.Drawing.Point(3, 3);
            this.groupBoxCommBtn.Name = "groupBoxCommBtn";
            this.groupBoxCommBtn.Size = new System.Drawing.Size(380, 84);
            this.groupBoxCommBtn.TabIndex = 0;
            this.groupBoxCommBtn.TabStop = false;
            this.groupBoxCommBtn.Text = "公共操作";
            // 
            // textBox2
            // btnStart
            // 
            this.textBox2.Location = new System.Drawing.Point(280, 18);
            this.textBox2.Name = "textBox2";
            this.textBox2.ReadOnly = true;
            this.textBox2.Size = new System.Drawing.Size(116, 21);
            this.textBox2.TabIndex = 3;
            this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.btnStart.AutoSize = true;
            this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnStart.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnStart.Image = ((System.Drawing.Image)(resources.GetObject("btnStart.Image")));
            this.btnStart.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
            this.btnStart.Location = new System.Drawing.Point(248, 20);
            this.btnStart.Name = "btnStart";
            this.btnStart.Size = new System.Drawing.Size(126, 54);
            this.btnStart.TabIndex = 5;
            this.btnStart.Text = "  启  动";
            this.btnStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
            this.btnStart.UseVisualStyleBackColor = true;
            // 
            // textBox3
            // button1
            // 
            this.textBox3.Location = new System.Drawing.Point(69, 45);
            this.textBox3.Name = "textBox3";
            this.textBox3.ReadOnly = true;
            this.textBox3.Size = new System.Drawing.Size(116, 21);
            this.textBox3.TabIndex = 3;
            this.button1.Location = new System.Drawing.Point(6, 18);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(70, 25);
            this.button1.TabIndex = 4;
            this.button1.Text = "清除状态";
            this.button1.UseVisualStyleBackColor = true;
            // 
            // textBox4
            // button11
            // 
            this.textBox4.Location = new System.Drawing.Point(280, 48);
            this.textBox4.Name = "textBox4";
            this.textBox4.ReadOnly = true;
            this.textBox4.Size = new System.Drawing.Size(116, 21);
            this.textBox4.TabIndex = 3;
            this.button11.Location = new System.Drawing.Point(86, 53);
            this.button11.Name = "button11";
            this.button11.Size = new System.Drawing.Size(70, 25);
            this.button11.TabIndex = 4;
            this.button11.Text = "紧急停止";
            this.button11.UseVisualStyleBackColor = true;
            // 
            // ioIndicatorCtrl1
            // button8
            // 
            this.ioIndicatorCtrl1.Desc = "驱动报警";
            this.ioIndicatorCtrl1.IsOn = null;
            this.ioIndicatorCtrl1.Location = new System.Drawing.Point(9, 76);
            this.ioIndicatorCtrl1.Name = "ioIndicatorCtrl1";
            this.ioIndicatorCtrl1.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl1.TabIndex = 4;
            this.button8.Location = new System.Drawing.Point(86, 18);
            this.button8.Name = "button8";
            this.button8.Size = new System.Drawing.Size(70, 25);
            this.button8.TabIndex = 4;
            this.button8.Text = "伺服使能";
            this.button8.UseVisualStyleBackColor = true;
            // 
            // ioIndicatorCtrl6
            // button10
            // 
            this.ioIndicatorCtrl6.Desc = "正限位";
            this.ioIndicatorCtrl6.IsOn = null;
            this.ioIndicatorCtrl6.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl6.Name = "ioIndicatorCtrl6";
            this.ioIndicatorCtrl6.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl6.TabIndex = 4;
            this.button10.Location = new System.Drawing.Point(6, 53);
            this.button10.Name = "button10";
            this.button10.Size = new System.Drawing.Size(70, 25);
            this.button10.TabIndex = 4;
            this.button10.Text = "平滑停止";
            this.button10.UseVisualStyleBackColor = true;
            // 
            // ioIndicatorCtrl8
            // button9
            // 
            this.ioIndicatorCtrl8.Desc = "负限位";
            this.ioIndicatorCtrl8.IsOn = null;
            this.ioIndicatorCtrl8.Location = new System.Drawing.Point(145, 106);
            this.ioIndicatorCtrl8.Name = "ioIndicatorCtrl8";
            this.ioIndicatorCtrl8.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl8.TabIndex = 4;
            this.button9.Location = new System.Drawing.Point(168, 18);
            this.button9.Name = "button9";
            this.button9.Size = new System.Drawing.Size(70, 25);
            this.button9.TabIndex = 4;
            this.button9.Text = "位置清零";
            this.button9.UseVisualStyleBackColor = true;
            // 
            // ioIndicatorCtrl9
            // tableLayoutPanel3
            // 
            this.ioIndicatorCtrl9.Desc = "运动状态";
            this.ioIndicatorCtrl9.IsOn = null;
            this.ioIndicatorCtrl9.Location = new System.Drawing.Point(306, 103);
            this.ioIndicatorCtrl9.Name = "ioIndicatorCtrl9";
            this.ioIndicatorCtrl9.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl9.TabIndex = 4;
            //
            // ioIndicatorCtrl10
            //
            this.ioIndicatorCtrl10.Desc = "运动出错";
            this.ioIndicatorCtrl10.IsOn = null;
            this.ioIndicatorCtrl10.Location = new System.Drawing.Point(306, 73);
            this.ioIndicatorCtrl10.Name = "ioIndicatorCtrl10";
            this.ioIndicatorCtrl10.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl10.TabIndex = 4;
            //
            // ioIndicatorCtrl4
            //
            this.ioIndicatorCtrl4.Desc = "正限位";
            this.ioIndicatorCtrl4.IsOn = null;
            this.ioIndicatorCtrl4.Location = new System.Drawing.Point(3, 391);
            this.ioIndicatorCtrl4.Name = "ioIndicatorCtrl4";
            this.ioIndicatorCtrl4.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl4.TabIndex = 4;
            //
            // ioIndicatorCtrl2
            //
            this.ioIndicatorCtrl2.Desc = "伺服使能";
            this.ioIndicatorCtrl2.IsOn = null;
            this.ioIndicatorCtrl2.Location = new System.Drawing.Point(145, 76);
            this.ioIndicatorCtrl2.Name = "ioIndicatorCtrl2";
            this.ioIndicatorCtrl2.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl2.TabIndex = 4;
            //
            // ioIndicatorCtrl5
            //
            this.ioIndicatorCtrl5.Desc = "负限位";
            this.ioIndicatorCtrl5.IsOn = null;
            this.ioIndicatorCtrl5.Location = new System.Drawing.Point(3, 461);
            this.ioIndicatorCtrl5.Name = "ioIndicatorCtrl5";
            this.ioIndicatorCtrl5.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl5.TabIndex = 4;
            //
            // ioIndicatorCtrl3
            //
            this.ioIndicatorCtrl3.Desc = "运动状态";
            this.ioIndicatorCtrl3.IsOn = null;
            this.ioIndicatorCtrl3.Location = new System.Drawing.Point(3, 613);
            this.ioIndicatorCtrl3.Name = "ioIndicatorCtrl3";
            this.ioIndicatorCtrl3.Size = new System.Drawing.Size(90, 15);
            this.ioIndicatorCtrl3.TabIndex = 4;
            //
            // ioIndicatorCtrl7
            //
            this.ioIndicatorCtrl7.Desc = "运动出错";
            this.ioIndicatorCtrl7.IsOn = null;
            this.ioIndicatorCtrl7.Location = new System.Drawing.Point(3, 612);
            this.ioIndicatorCtrl7.Name = "ioIndicatorCtrl7";
            this.ioIndicatorCtrl7.Size = new System.Drawing.Size(90, 16);
            this.ioIndicatorCtrl7.TabIndex = 4;
            this.tableLayoutPanel3.ColumnCount = 1;
            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tableLayoutPanel3.Controls.Add(this.groupBox5, 0, 1);
            this.tableLayoutPanel3.Controls.Add(this.groupBox4, 0, 0);
            this.tableLayoutPanel3.Controls.Add(this.groupBox6, 0, 2);
            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel3.Location = new System.Drawing.Point(395, 3);
            this.tableLayoutPanel3.Name = "tableLayoutPanel3";
            this.tableLayoutPanel3.RowCount = 3;
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
            this.tableLayoutPanel3.Size = new System.Drawing.Size(584, 714);
            this.tableLayoutPanel3.TabIndex = 1;
            // 
            // groupBox5
            // 
@@ -519,180 +347,311 @@
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl15);
            this.groupBox5.Controls.Add(this.ioIndicatorCtrl11);
            this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox5.Location = new System.Drawing.Point(3, 145);
            this.groupBox5.Location = new System.Drawing.Point(3, 431);
            this.groupBox5.Name = "groupBox5";
            this.groupBox5.Size = new System.Drawing.Size(578, 136);
            this.groupBox5.TabIndex = 6;
            this.groupBox5.TabStop = false;
            this.groupBox5.Text = "数字量输入";
            // 
            // ioIndicatorCtrl11
            //
            this.ioIndicatorCtrl11.Desc = "正限位";
            this.ioIndicatorCtrl11.IsOn = null;
            this.ioIndicatorCtrl11.Location = new System.Drawing.Point(9, 18);
            this.ioIndicatorCtrl11.Name = "ioIndicatorCtrl11";
            this.ioIndicatorCtrl11.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl11.TabIndex = 4;
            //
            // ioIndicatorCtrl12
            //
            this.ioIndicatorCtrl12.Desc = "正限位";
            this.ioIndicatorCtrl12.IsOn = null;
            this.ioIndicatorCtrl12.Location = new System.Drawing.Point(145, 18);
            this.ioIndicatorCtrl12.Name = "ioIndicatorCtrl12";
            this.ioIndicatorCtrl12.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl12.TabIndex = 4;
            //
            // ioIndicatorCtrl13
            //
            this.ioIndicatorCtrl13.Desc = "正限位";
            this.ioIndicatorCtrl13.IsOn = null;
            this.ioIndicatorCtrl13.Location = new System.Drawing.Point(306, 18);
            this.ioIndicatorCtrl13.Name = "ioIndicatorCtrl13";
            this.ioIndicatorCtrl13.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl13.TabIndex = 4;
            //
            // ioIndicatorCtrl14
            // 
            this.ioIndicatorCtrl14.Desc = "正限位";
            this.ioIndicatorCtrl14.Desc = "IN 4";
            this.ioIndicatorCtrl14.IsOn = null;
            this.ioIndicatorCtrl14.Location = new System.Drawing.Point(477, 18);
            this.ioIndicatorCtrl14.Name = "ioIndicatorCtrl14";
            this.ioIndicatorCtrl14.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl14.TabIndex = 4;
            // 
            // tableLayoutPanel3
            // ioIndicatorCtrl13
            // 
            this.tableLayoutPanel3.ColumnCount = 1;
            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tableLayoutPanel3.Controls.Add(this.groupBox8, 0, 5);
            this.tableLayoutPanel3.Controls.Add(this.groupBox5, 0, 1);
            this.tableLayoutPanel3.Controls.Add(this.groupBox4, 0, 0);
            this.tableLayoutPanel3.Controls.Add(this.groupBox6, 0, 2);
            this.tableLayoutPanel3.Controls.Add(this.groupBox7, 0, 3);
            this.tableLayoutPanel3.Controls.Add(this.groupBox9, 0, 4);
            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel3.Location = new System.Drawing.Point(395, 3);
            this.tableLayoutPanel3.Name = "tableLayoutPanel3";
            this.tableLayoutPanel3.RowCount = 6;
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.02002F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.02002F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.02002F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.31331F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.31331F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.31331F));
            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
            this.tableLayoutPanel3.Size = new System.Drawing.Size(584, 714);
            this.tableLayoutPanel3.TabIndex = 1;
            this.ioIndicatorCtrl13.Desc = "IN 3";
            this.ioIndicatorCtrl13.IsOn = null;
            this.ioIndicatorCtrl13.Location = new System.Drawing.Point(306, 18);
            this.ioIndicatorCtrl13.Name = "ioIndicatorCtrl13";
            this.ioIndicatorCtrl13.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl13.TabIndex = 4;
            // 
            // ioIndicatorCtrl15
            // ioIndicatorCtrl12
            // 
            this.ioIndicatorCtrl15.Desc = "正限位";
            this.ioIndicatorCtrl15.IsOn = null;
            this.ioIndicatorCtrl15.Location = new System.Drawing.Point(9, 48);
            this.ioIndicatorCtrl15.Name = "ioIndicatorCtrl15";
            this.ioIndicatorCtrl15.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl15.TabIndex = 4;
            this.ioIndicatorCtrl12.Desc = "IN 2";
            this.ioIndicatorCtrl12.IsOn = null;
            this.ioIndicatorCtrl12.Location = new System.Drawing.Point(145, 18);
            this.ioIndicatorCtrl12.Name = "ioIndicatorCtrl12";
            this.ioIndicatorCtrl12.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl12.TabIndex = 4;
            // 
            // ioIndicatorCtrl16
            // ioIndicatorCtrl26
            // 
            this.ioIndicatorCtrl16.Desc = "正限位";
            this.ioIndicatorCtrl16.IsOn = null;
            this.ioIndicatorCtrl16.Location = new System.Drawing.Point(9, 77);
            this.ioIndicatorCtrl16.Name = "ioIndicatorCtrl16";
            this.ioIndicatorCtrl16.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl16.TabIndex = 4;
            //
            // ioIndicatorCtrl17
            //
            this.ioIndicatorCtrl17.Desc = "正限位";
            this.ioIndicatorCtrl17.IsOn = null;
            this.ioIndicatorCtrl17.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl17.Name = "ioIndicatorCtrl17";
            this.ioIndicatorCtrl17.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl17.TabIndex = 4;
            //
            // ioIndicatorCtrl18
            //
            this.ioIndicatorCtrl18.Desc = "正限位";
            this.ioIndicatorCtrl18.IsOn = null;
            this.ioIndicatorCtrl18.Location = new System.Drawing.Point(145, 48);
            this.ioIndicatorCtrl18.Name = "ioIndicatorCtrl18";
            this.ioIndicatorCtrl18.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl18.TabIndex = 4;
            //
            // ioIndicatorCtrl19
            //
            this.ioIndicatorCtrl19.Desc = "正限位";
            this.ioIndicatorCtrl19.IsOn = null;
            this.ioIndicatorCtrl19.Location = new System.Drawing.Point(306, 48);
            this.ioIndicatorCtrl19.Name = "ioIndicatorCtrl19";
            this.ioIndicatorCtrl19.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl19.TabIndex = 4;
            //
            // ioIndicatorCtrl20
            //
            this.ioIndicatorCtrl20.Desc = "正限位";
            this.ioIndicatorCtrl20.IsOn = null;
            this.ioIndicatorCtrl20.Location = new System.Drawing.Point(477, 48);
            this.ioIndicatorCtrl20.Name = "ioIndicatorCtrl20";
            this.ioIndicatorCtrl20.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl20.TabIndex = 4;
            //
            // ioIndicatorCtrl21
            //
            this.ioIndicatorCtrl21.Desc = "正限位";
            this.ioIndicatorCtrl21.IsOn = null;
            this.ioIndicatorCtrl21.Location = new System.Drawing.Point(145, 77);
            this.ioIndicatorCtrl21.Name = "ioIndicatorCtrl21";
            this.ioIndicatorCtrl21.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl21.TabIndex = 4;
            //
            // ioIndicatorCtrl22
            //
            this.ioIndicatorCtrl22.Desc = "正限位";
            this.ioIndicatorCtrl22.IsOn = null;
            this.ioIndicatorCtrl22.Location = new System.Drawing.Point(306, 77);
            this.ioIndicatorCtrl22.Name = "ioIndicatorCtrl22";
            this.ioIndicatorCtrl22.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl22.TabIndex = 4;
            //
            // ioIndicatorCtrl23
            //
            this.ioIndicatorCtrl23.Desc = "正限位";
            this.ioIndicatorCtrl23.IsOn = null;
            this.ioIndicatorCtrl23.Location = new System.Drawing.Point(477, 77);
            this.ioIndicatorCtrl23.Name = "ioIndicatorCtrl23";
            this.ioIndicatorCtrl23.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl23.TabIndex = 4;
            //
            // ioIndicatorCtrl24
            //
            this.ioIndicatorCtrl24.Desc = "正限位";
            this.ioIndicatorCtrl24.IsOn = null;
            this.ioIndicatorCtrl24.Location = new System.Drawing.Point(145, 107);
            this.ioIndicatorCtrl24.Name = "ioIndicatorCtrl24";
            this.ioIndicatorCtrl24.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl24.TabIndex = 4;
            this.ioIndicatorCtrl26.Desc = "IN 16";
            this.ioIndicatorCtrl26.IsOn = null;
            this.ioIndicatorCtrl26.Location = new System.Drawing.Point(477, 107);
            this.ioIndicatorCtrl26.Name = "ioIndicatorCtrl26";
            this.ioIndicatorCtrl26.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl26.TabIndex = 4;
            // 
            // ioIndicatorCtrl25
            // 
            this.ioIndicatorCtrl25.Desc = "正限位";
            this.ioIndicatorCtrl25.Desc = "IN 15";
            this.ioIndicatorCtrl25.IsOn = null;
            this.ioIndicatorCtrl25.Location = new System.Drawing.Point(306, 107);
            this.ioIndicatorCtrl25.Name = "ioIndicatorCtrl25";
            this.ioIndicatorCtrl25.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl25.TabIndex = 4;
            // 
            // ioIndicatorCtrl26
            // ioIndicatorCtrl24
            // 
            this.ioIndicatorCtrl26.Desc = "正限位";
            this.ioIndicatorCtrl26.IsOn = null;
            this.ioIndicatorCtrl26.Location = new System.Drawing.Point(477, 107);
            this.ioIndicatorCtrl26.Name = "ioIndicatorCtrl26";
            this.ioIndicatorCtrl26.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl26.TabIndex = 4;
            this.ioIndicatorCtrl24.Desc = "IN 14";
            this.ioIndicatorCtrl24.IsOn = null;
            this.ioIndicatorCtrl24.Location = new System.Drawing.Point(145, 107);
            this.ioIndicatorCtrl24.Name = "ioIndicatorCtrl24";
            this.ioIndicatorCtrl24.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl24.TabIndex = 4;
            //
            // ioIndicatorCtrl17
            //
            this.ioIndicatorCtrl17.Desc = "IN 13";
            this.ioIndicatorCtrl17.IsOn = null;
            this.ioIndicatorCtrl17.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl17.Name = "ioIndicatorCtrl17";
            this.ioIndicatorCtrl17.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl17.TabIndex = 4;
            //
            // ioIndicatorCtrl16
            //
            this.ioIndicatorCtrl16.Desc = "IN 9";
            this.ioIndicatorCtrl16.IsOn = null;
            this.ioIndicatorCtrl16.Location = new System.Drawing.Point(9, 77);
            this.ioIndicatorCtrl16.Name = "ioIndicatorCtrl16";
            this.ioIndicatorCtrl16.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl16.TabIndex = 4;
            //
            // ioIndicatorCtrl20
            //
            this.ioIndicatorCtrl20.Desc = "IN 8";
            this.ioIndicatorCtrl20.IsOn = null;
            this.ioIndicatorCtrl20.Location = new System.Drawing.Point(477, 48);
            this.ioIndicatorCtrl20.Name = "ioIndicatorCtrl20";
            this.ioIndicatorCtrl20.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl20.TabIndex = 4;
            //
            // ioIndicatorCtrl19
            //
            this.ioIndicatorCtrl19.Desc = "IN 7";
            this.ioIndicatorCtrl19.IsOn = null;
            this.ioIndicatorCtrl19.Location = new System.Drawing.Point(306, 48);
            this.ioIndicatorCtrl19.Name = "ioIndicatorCtrl19";
            this.ioIndicatorCtrl19.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl19.TabIndex = 4;
            //
            // ioIndicatorCtrl23
            //
            this.ioIndicatorCtrl23.Desc = "IN 12";
            this.ioIndicatorCtrl23.IsOn = null;
            this.ioIndicatorCtrl23.Location = new System.Drawing.Point(477, 77);
            this.ioIndicatorCtrl23.Name = "ioIndicatorCtrl23";
            this.ioIndicatorCtrl23.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl23.TabIndex = 4;
            //
            // ioIndicatorCtrl22
            //
            this.ioIndicatorCtrl22.Desc = "IN 11";
            this.ioIndicatorCtrl22.IsOn = null;
            this.ioIndicatorCtrl22.Location = new System.Drawing.Point(306, 77);
            this.ioIndicatorCtrl22.Name = "ioIndicatorCtrl22";
            this.ioIndicatorCtrl22.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl22.TabIndex = 4;
            //
            // ioIndicatorCtrl21
            //
            this.ioIndicatorCtrl21.Desc = "IN 10";
            this.ioIndicatorCtrl21.IsOn = null;
            this.ioIndicatorCtrl21.Location = new System.Drawing.Point(145, 77);
            this.ioIndicatorCtrl21.Name = "ioIndicatorCtrl21";
            this.ioIndicatorCtrl21.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl21.TabIndex = 4;
            //
            // ioIndicatorCtrl18
            //
            this.ioIndicatorCtrl18.Desc = "IN 6";
            this.ioIndicatorCtrl18.IsOn = null;
            this.ioIndicatorCtrl18.Location = new System.Drawing.Point(145, 48);
            this.ioIndicatorCtrl18.Name = "ioIndicatorCtrl18";
            this.ioIndicatorCtrl18.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl18.TabIndex = 4;
            //
            // ioIndicatorCtrl15
            //
            this.ioIndicatorCtrl15.Desc = "IN 5";
            this.ioIndicatorCtrl15.IsOn = null;
            this.ioIndicatorCtrl15.Location = new System.Drawing.Point(9, 48);
            this.ioIndicatorCtrl15.Name = "ioIndicatorCtrl15";
            this.ioIndicatorCtrl15.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl15.TabIndex = 4;
            //
            // ioIndicatorCtrl11
            //
            this.ioIndicatorCtrl11.Desc = "IN 1";
            this.ioIndicatorCtrl11.IsOn = null;
            this.ioIndicatorCtrl11.Location = new System.Drawing.Point(9, 18);
            this.ioIndicatorCtrl11.Name = "ioIndicatorCtrl11";
            this.ioIndicatorCtrl11.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl11.TabIndex = 4;
            //
            // groupBox4
            //
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl2);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl10);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl9);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl8);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl6);
            this.groupBox4.Controls.Add(this.ioIndicatorCtrl1);
            this.groupBox4.Controls.Add(this.textBox4);
            this.groupBox4.Controls.Add(this.textBox3);
            this.groupBox4.Controls.Add(this.textBox2);
            this.groupBox4.Controls.Add(this.textBox1);
            this.groupBox4.Controls.Add(this.label7);
            this.groupBox4.Controls.Add(this.label5);
            this.groupBox4.Controls.Add(this.label4);
            this.groupBox4.Controls.Add(this.label3);
            this.groupBox4.Controls.Add(this.label2);
            this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox4.Location = new System.Drawing.Point(3, 3);
            this.groupBox4.Name = "groupBox4";
            this.groupBox4.Size = new System.Drawing.Size(578, 422);
            this.groupBox4.TabIndex = 3;
            this.groupBox4.TabStop = false;
            this.groupBox4.Text = "轴状态";
            //
            // ioIndicatorCtrl2
            //
            this.ioIndicatorCtrl2.Desc = "伺服使能";
            this.ioIndicatorCtrl2.IsOn = null;
            this.ioIndicatorCtrl2.Location = new System.Drawing.Point(145, 76);
            this.ioIndicatorCtrl2.Name = "ioIndicatorCtrl2";
            this.ioIndicatorCtrl2.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl2.TabIndex = 4;
            //
            // ioIndicatorCtrl10
            //
            this.ioIndicatorCtrl10.Desc = "运动出错";
            this.ioIndicatorCtrl10.IsOn = null;
            this.ioIndicatorCtrl10.Location = new System.Drawing.Point(306, 73);
            this.ioIndicatorCtrl10.Name = "ioIndicatorCtrl10";
            this.ioIndicatorCtrl10.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl10.TabIndex = 4;
            //
            // ioIndicatorCtrl9
            //
            this.ioIndicatorCtrl9.Desc = "运动状态";
            this.ioIndicatorCtrl9.IsOn = null;
            this.ioIndicatorCtrl9.Location = new System.Drawing.Point(306, 103);
            this.ioIndicatorCtrl9.Name = "ioIndicatorCtrl9";
            this.ioIndicatorCtrl9.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl9.TabIndex = 4;
            //
            // ioIndicatorCtrl8
            //
            this.ioIndicatorCtrl8.Desc = "负限位";
            this.ioIndicatorCtrl8.IsOn = null;
            this.ioIndicatorCtrl8.Location = new System.Drawing.Point(145, 106);
            this.ioIndicatorCtrl8.Name = "ioIndicatorCtrl8";
            this.ioIndicatorCtrl8.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl8.TabIndex = 4;
            //
            // ioIndicatorCtrl6
            //
            this.ioIndicatorCtrl6.Desc = "正限位";
            this.ioIndicatorCtrl6.IsOn = null;
            this.ioIndicatorCtrl6.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl6.Name = "ioIndicatorCtrl6";
            this.ioIndicatorCtrl6.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl6.TabIndex = 4;
            //
            // ioIndicatorCtrl1
            //
            this.ioIndicatorCtrl1.Desc = "驱动报警";
            this.ioIndicatorCtrl1.IsOn = null;
            this.ioIndicatorCtrl1.Location = new System.Drawing.Point(9, 76);
            this.ioIndicatorCtrl1.Name = "ioIndicatorCtrl1";
            this.ioIndicatorCtrl1.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl1.TabIndex = 4;
            //
            // textBox4
            //
            this.textBox4.Location = new System.Drawing.Point(280, 48);
            this.textBox4.Name = "textBox4";
            this.textBox4.ReadOnly = true;
            this.textBox4.Size = new System.Drawing.Size(116, 21);
            this.textBox4.TabIndex = 3;
            //
            // textBox3
            //
            this.textBox3.Location = new System.Drawing.Point(69, 45);
            this.textBox3.Name = "textBox3";
            this.textBox3.ReadOnly = true;
            this.textBox3.Size = new System.Drawing.Size(116, 21);
            this.textBox3.TabIndex = 3;
            //
            // textBox2
            //
            this.textBox2.Location = new System.Drawing.Point(280, 18);
            this.textBox2.Name = "textBox2";
            this.textBox2.ReadOnly = true;
            this.textBox2.Size = new System.Drawing.Size(116, 21);
            this.textBox2.TabIndex = 3;
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(69, 18);
            this.textBox1.Name = "textBox1";
            this.textBox1.ReadOnly = true;
            this.textBox1.Size = new System.Drawing.Size(116, 21);
            this.textBox1.TabIndex = 3;
            //
            // label7
            //
            this.label7.AutoSize = true;
            this.label7.Location = new System.Drawing.Point(7, 214);
            this.label7.Name = "label7";
            this.label7.Size = new System.Drawing.Size(0, 12);
            this.label7.TabIndex = 2;
            //
            // label5
            //
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(218, 51);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(65, 12);
            this.label5.TabIndex = 2;
            this.label5.Text = "实际速度:";
            //
            // label4
            //
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(7, 48);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(65, 12);
            this.label4.TabIndex = 2;
            this.label4.Text = "规划速度:";
            //
            // label3
            //
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(218, 21);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(65, 12);
            this.label3.TabIndex = 2;
            this.label3.Text = "实际位置:";
            //
            // label2
            //
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(7, 21);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(65, 12);
            this.label2.TabIndex = 2;
            this.label2.Text = "规划位置:";
            // 
            // groupBox6
            // 
@@ -713,16 +672,16 @@
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl41);
            this.groupBox6.Controls.Add(this.ioIndicatorCtrl42);
            this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox6.Location = new System.Drawing.Point(3, 287);
            this.groupBox6.Location = new System.Drawing.Point(3, 573);
            this.groupBox6.Name = "groupBox6";
            this.groupBox6.Size = new System.Drawing.Size(578, 136);
            this.groupBox6.Size = new System.Drawing.Size(578, 138);
            this.groupBox6.TabIndex = 7;
            this.groupBox6.TabStop = false;
            this.groupBox6.Text = "数字量输出";
            // 
            // ioIndicatorCtrl27
            // 
            this.ioIndicatorCtrl27.Desc = "正限位";
            this.ioIndicatorCtrl27.Desc = "OUT 4";
            this.ioIndicatorCtrl27.IsOn = null;
            this.ioIndicatorCtrl27.Location = new System.Drawing.Point(477, 18);
            this.ioIndicatorCtrl27.Name = "ioIndicatorCtrl27";
@@ -731,7 +690,7 @@
            // 
            // ioIndicatorCtrl28
            // 
            this.ioIndicatorCtrl28.Desc = "正限位";
            this.ioIndicatorCtrl28.Desc = "OUT 3";
            this.ioIndicatorCtrl28.IsOn = null;
            this.ioIndicatorCtrl28.Location = new System.Drawing.Point(306, 18);
            this.ioIndicatorCtrl28.Name = "ioIndicatorCtrl28";
@@ -740,7 +699,7 @@
            // 
            // ioIndicatorCtrl29
            // 
            this.ioIndicatorCtrl29.Desc = "正限位";
            this.ioIndicatorCtrl29.Desc = "OUT 2";
            this.ioIndicatorCtrl29.IsOn = null;
            this.ioIndicatorCtrl29.Location = new System.Drawing.Point(145, 18);
            this.ioIndicatorCtrl29.Name = "ioIndicatorCtrl29";
@@ -749,7 +708,7 @@
            // 
            // ioIndicatorCtrl30
            // 
            this.ioIndicatorCtrl30.Desc = "正限位";
            this.ioIndicatorCtrl30.Desc = "OUT 16";
            this.ioIndicatorCtrl30.IsOn = null;
            this.ioIndicatorCtrl30.Location = new System.Drawing.Point(477, 107);
            this.ioIndicatorCtrl30.Name = "ioIndicatorCtrl30";
@@ -758,7 +717,7 @@
            // 
            // ioIndicatorCtrl31
            // 
            this.ioIndicatorCtrl31.Desc = "正限位";
            this.ioIndicatorCtrl31.Desc = "OUT 15";
            this.ioIndicatorCtrl31.IsOn = null;
            this.ioIndicatorCtrl31.Location = new System.Drawing.Point(306, 107);
            this.ioIndicatorCtrl31.Name = "ioIndicatorCtrl31";
@@ -767,7 +726,7 @@
            // 
            // ioIndicatorCtrl32
            // 
            this.ioIndicatorCtrl32.Desc = "正限位";
            this.ioIndicatorCtrl32.Desc = "OUT 14";
            this.ioIndicatorCtrl32.IsOn = null;
            this.ioIndicatorCtrl32.Location = new System.Drawing.Point(145, 107);
            this.ioIndicatorCtrl32.Name = "ioIndicatorCtrl32";
@@ -776,7 +735,7 @@
            // 
            // ioIndicatorCtrl33
            // 
            this.ioIndicatorCtrl33.Desc = "正限位";
            this.ioIndicatorCtrl33.Desc = "OUT 13";
            this.ioIndicatorCtrl33.IsOn = null;
            this.ioIndicatorCtrl33.Location = new System.Drawing.Point(9, 106);
            this.ioIndicatorCtrl33.Name = "ioIndicatorCtrl33";
@@ -785,7 +744,7 @@
            // 
            // ioIndicatorCtrl34
            // 
            this.ioIndicatorCtrl34.Desc = "正限位";
            this.ioIndicatorCtrl34.Desc = "OUT 9";
            this.ioIndicatorCtrl34.IsOn = null;
            this.ioIndicatorCtrl34.Location = new System.Drawing.Point(9, 77);
            this.ioIndicatorCtrl34.Name = "ioIndicatorCtrl34";
@@ -794,7 +753,7 @@
            // 
            // ioIndicatorCtrl35
            // 
            this.ioIndicatorCtrl35.Desc = "正限位";
            this.ioIndicatorCtrl35.Desc = "OUT 8";
            this.ioIndicatorCtrl35.IsOn = null;
            this.ioIndicatorCtrl35.Location = new System.Drawing.Point(477, 48);
            this.ioIndicatorCtrl35.Name = "ioIndicatorCtrl35";
@@ -803,7 +762,7 @@
            // 
            // ioIndicatorCtrl36
            // 
            this.ioIndicatorCtrl36.Desc = "正限位";
            this.ioIndicatorCtrl36.Desc = "OUT 7";
            this.ioIndicatorCtrl36.IsOn = null;
            this.ioIndicatorCtrl36.Location = new System.Drawing.Point(306, 48);
            this.ioIndicatorCtrl36.Name = "ioIndicatorCtrl36";
@@ -812,7 +771,7 @@
            // 
            // ioIndicatorCtrl37
            // 
            this.ioIndicatorCtrl37.Desc = "正限位";
            this.ioIndicatorCtrl37.Desc = "OUT 12";
            this.ioIndicatorCtrl37.IsOn = null;
            this.ioIndicatorCtrl37.Location = new System.Drawing.Point(477, 77);
            this.ioIndicatorCtrl37.Name = "ioIndicatorCtrl37";
@@ -821,7 +780,7 @@
            // 
            // ioIndicatorCtrl38
            // 
            this.ioIndicatorCtrl38.Desc = "正限位";
            this.ioIndicatorCtrl38.Desc = "OUT 11";
            this.ioIndicatorCtrl38.IsOn = null;
            this.ioIndicatorCtrl38.Location = new System.Drawing.Point(306, 77);
            this.ioIndicatorCtrl38.Name = "ioIndicatorCtrl38";
@@ -830,7 +789,7 @@
            // 
            // ioIndicatorCtrl39
            // 
            this.ioIndicatorCtrl39.Desc = "正限位";
            this.ioIndicatorCtrl39.Desc = "OUT 10";
            this.ioIndicatorCtrl39.IsOn = null;
            this.ioIndicatorCtrl39.Location = new System.Drawing.Point(145, 77);
            this.ioIndicatorCtrl39.Name = "ioIndicatorCtrl39";
@@ -839,7 +798,7 @@
            // 
            // ioIndicatorCtrl40
            // 
            this.ioIndicatorCtrl40.Desc = "正限位";
            this.ioIndicatorCtrl40.Desc = "OUT 6";
            this.ioIndicatorCtrl40.IsOn = null;
            this.ioIndicatorCtrl40.Location = new System.Drawing.Point(145, 48);
            this.ioIndicatorCtrl40.Name = "ioIndicatorCtrl40";
@@ -848,7 +807,7 @@
            // 
            // ioIndicatorCtrl41
            // 
            this.ioIndicatorCtrl41.Desc = "正限位";
            this.ioIndicatorCtrl41.Desc = "OUT 5";
            this.ioIndicatorCtrl41.IsOn = null;
            this.ioIndicatorCtrl41.Location = new System.Drawing.Point(9, 48);
            this.ioIndicatorCtrl41.Name = "ioIndicatorCtrl41";
@@ -857,282 +816,12 @@
            // 
            // ioIndicatorCtrl42
            // 
            this.ioIndicatorCtrl42.Desc = "正限位";
            this.ioIndicatorCtrl42.Desc = "OUT 1";
            this.ioIndicatorCtrl42.IsOn = null;
            this.ioIndicatorCtrl42.Location = new System.Drawing.Point(9, 18);
            this.ioIndicatorCtrl42.Name = "ioIndicatorCtrl42";
            this.ioIndicatorCtrl42.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl42.TabIndex = 4;
            //
            // groupBox7
            //
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl50);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl49);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl48);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl47);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl46);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl45);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl44);
            this.groupBox7.Controls.Add(this.ioIndicatorCtrl43);
            this.groupBox7.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox7.Location = new System.Drawing.Point(3, 429);
            this.groupBox7.Name = "groupBox7";
            this.groupBox7.Size = new System.Drawing.Size(578, 89);
            this.groupBox7.TabIndex = 8;
            this.groupBox7.TabStop = false;
            this.groupBox7.Text = "Home";
            //
            // groupBox8
            //
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl59);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl60);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl61);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl62);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl63);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl64);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl65);
            this.groupBox8.Controls.Add(this.ioIndicatorCtrl66);
            this.groupBox8.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox8.Location = new System.Drawing.Point(3, 619);
            this.groupBox8.Name = "groupBox8";
            this.groupBox8.Size = new System.Drawing.Size(578, 92);
            this.groupBox8.TabIndex = 9;
            this.groupBox8.TabStop = false;
            this.groupBox8.Text = "Lim-";
            //
            // groupBox9
            //
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl58);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl57);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl56);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl55);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl54);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl53);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl52);
            this.groupBox9.Controls.Add(this.ioIndicatorCtrl51);
            this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox9.Location = new System.Drawing.Point(3, 524);
            this.groupBox9.Name = "groupBox9";
            this.groupBox9.Size = new System.Drawing.Size(578, 89);
            this.groupBox9.TabIndex = 9;
            this.groupBox9.TabStop = false;
            this.groupBox9.Text = "Lim+";
            //
            // ioIndicatorCtrl43
            //
            this.ioIndicatorCtrl43.Desc = "正限位";
            this.ioIndicatorCtrl43.IsOn = null;
            this.ioIndicatorCtrl43.Location = new System.Drawing.Point(6, 20);
            this.ioIndicatorCtrl43.Name = "ioIndicatorCtrl43";
            this.ioIndicatorCtrl43.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl43.TabIndex = 4;
            //
            // ioIndicatorCtrl44
            //
            this.ioIndicatorCtrl44.Desc = "正限位";
            this.ioIndicatorCtrl44.IsOn = null;
            this.ioIndicatorCtrl44.Location = new System.Drawing.Point(145, 20);
            this.ioIndicatorCtrl44.Name = "ioIndicatorCtrl44";
            this.ioIndicatorCtrl44.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl44.TabIndex = 4;
            //
            // ioIndicatorCtrl45
            //
            this.ioIndicatorCtrl45.Desc = "正限位";
            this.ioIndicatorCtrl45.IsOn = null;
            this.ioIndicatorCtrl45.Location = new System.Drawing.Point(306, 20);
            this.ioIndicatorCtrl45.Name = "ioIndicatorCtrl45";
            this.ioIndicatorCtrl45.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl45.TabIndex = 4;
            //
            // ioIndicatorCtrl46
            //
            this.ioIndicatorCtrl46.Desc = "正限位";
            this.ioIndicatorCtrl46.IsOn = null;
            this.ioIndicatorCtrl46.Location = new System.Drawing.Point(477, 20);
            this.ioIndicatorCtrl46.Name = "ioIndicatorCtrl46";
            this.ioIndicatorCtrl46.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl46.TabIndex = 4;
            //
            // ioIndicatorCtrl47
            //
            this.ioIndicatorCtrl47.Desc = "正限位";
            this.ioIndicatorCtrl47.IsOn = null;
            this.ioIndicatorCtrl47.Location = new System.Drawing.Point(477, 59);
            this.ioIndicatorCtrl47.Name = "ioIndicatorCtrl47";
            this.ioIndicatorCtrl47.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl47.TabIndex = 4;
            //
            // ioIndicatorCtrl48
            //
            this.ioIndicatorCtrl48.Desc = "正限位";
            this.ioIndicatorCtrl48.IsOn = null;
            this.ioIndicatorCtrl48.Location = new System.Drawing.Point(306, 59);
            this.ioIndicatorCtrl48.Name = "ioIndicatorCtrl48";
            this.ioIndicatorCtrl48.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl48.TabIndex = 4;
            //
            // ioIndicatorCtrl49
            //
            this.ioIndicatorCtrl49.Desc = "正限位";
            this.ioIndicatorCtrl49.IsOn = null;
            this.ioIndicatorCtrl49.Location = new System.Drawing.Point(145, 59);
            this.ioIndicatorCtrl49.Name = "ioIndicatorCtrl49";
            this.ioIndicatorCtrl49.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl49.TabIndex = 4;
            //
            // ioIndicatorCtrl50
            //
            this.ioIndicatorCtrl50.Desc = "正限位";
            this.ioIndicatorCtrl50.IsOn = null;
            this.ioIndicatorCtrl50.Location = new System.Drawing.Point(9, 59);
            this.ioIndicatorCtrl50.Name = "ioIndicatorCtrl50";
            this.ioIndicatorCtrl50.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl50.TabIndex = 4;
            //
            // ioIndicatorCtrl51
            //
            this.ioIndicatorCtrl51.Desc = "正限位";
            this.ioIndicatorCtrl51.IsOn = null;
            this.ioIndicatorCtrl51.Location = new System.Drawing.Point(9, 20);
            this.ioIndicatorCtrl51.Name = "ioIndicatorCtrl51";
            this.ioIndicatorCtrl51.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl51.TabIndex = 4;
            //
            // ioIndicatorCtrl52
            //
            this.ioIndicatorCtrl52.Desc = "正限位";
            this.ioIndicatorCtrl52.IsOn = null;
            this.ioIndicatorCtrl52.Location = new System.Drawing.Point(9, 59);
            this.ioIndicatorCtrl52.Name = "ioIndicatorCtrl52";
            this.ioIndicatorCtrl52.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl52.TabIndex = 4;
            //
            // ioIndicatorCtrl53
            //
            this.ioIndicatorCtrl53.Desc = "正限位";
            this.ioIndicatorCtrl53.IsOn = null;
            this.ioIndicatorCtrl53.Location = new System.Drawing.Point(145, 59);
            this.ioIndicatorCtrl53.Name = "ioIndicatorCtrl53";
            this.ioIndicatorCtrl53.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl53.TabIndex = 4;
            //
            // ioIndicatorCtrl54
            //
            this.ioIndicatorCtrl54.Desc = "正限位";
            this.ioIndicatorCtrl54.IsOn = null;
            this.ioIndicatorCtrl54.Location = new System.Drawing.Point(145, 20);
            this.ioIndicatorCtrl54.Name = "ioIndicatorCtrl54";
            this.ioIndicatorCtrl54.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl54.TabIndex = 4;
            //
            // ioIndicatorCtrl55
            //
            this.ioIndicatorCtrl55.Desc = "正限位";
            this.ioIndicatorCtrl55.IsOn = null;
            this.ioIndicatorCtrl55.Location = new System.Drawing.Point(306, 20);
            this.ioIndicatorCtrl55.Name = "ioIndicatorCtrl55";
            this.ioIndicatorCtrl55.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl55.TabIndex = 4;
            //
            // ioIndicatorCtrl56
            //
            this.ioIndicatorCtrl56.Desc = "正限位";
            this.ioIndicatorCtrl56.IsOn = null;
            this.ioIndicatorCtrl56.Location = new System.Drawing.Point(306, 59);
            this.ioIndicatorCtrl56.Name = "ioIndicatorCtrl56";
            this.ioIndicatorCtrl56.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl56.TabIndex = 4;
            //
            // ioIndicatorCtrl57
            //
            this.ioIndicatorCtrl57.Desc = "正限位";
            this.ioIndicatorCtrl57.IsOn = null;
            this.ioIndicatorCtrl57.Location = new System.Drawing.Point(477, 59);
            this.ioIndicatorCtrl57.Name = "ioIndicatorCtrl57";
            this.ioIndicatorCtrl57.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl57.TabIndex = 4;
            //
            // ioIndicatorCtrl58
            //
            this.ioIndicatorCtrl58.Desc = "正限位";
            this.ioIndicatorCtrl58.IsOn = null;
            this.ioIndicatorCtrl58.Location = new System.Drawing.Point(477, 20);
            this.ioIndicatorCtrl58.Name = "ioIndicatorCtrl58";
            this.ioIndicatorCtrl58.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl58.TabIndex = 4;
            //
            // ioIndicatorCtrl59
            //
            this.ioIndicatorCtrl59.Desc = "正限位";
            this.ioIndicatorCtrl59.IsOn = null;
            this.ioIndicatorCtrl59.Location = new System.Drawing.Point(478, 15);
            this.ioIndicatorCtrl59.Name = "ioIndicatorCtrl59";
            this.ioIndicatorCtrl59.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl59.TabIndex = 5;
            //
            // ioIndicatorCtrl60
            //
            this.ioIndicatorCtrl60.Desc = "正限位";
            this.ioIndicatorCtrl60.IsOn = null;
            this.ioIndicatorCtrl60.Location = new System.Drawing.Point(478, 54);
            this.ioIndicatorCtrl60.Name = "ioIndicatorCtrl60";
            this.ioIndicatorCtrl60.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl60.TabIndex = 6;
            //
            // ioIndicatorCtrl61
            //
            this.ioIndicatorCtrl61.Desc = "正限位";
            this.ioIndicatorCtrl61.IsOn = null;
            this.ioIndicatorCtrl61.Location = new System.Drawing.Point(307, 54);
            this.ioIndicatorCtrl61.Name = "ioIndicatorCtrl61";
            this.ioIndicatorCtrl61.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl61.TabIndex = 7;
            //
            // ioIndicatorCtrl62
            //
            this.ioIndicatorCtrl62.Desc = "正限位";
            this.ioIndicatorCtrl62.IsOn = null;
            this.ioIndicatorCtrl62.Location = new System.Drawing.Point(307, 15);
            this.ioIndicatorCtrl62.Name = "ioIndicatorCtrl62";
            this.ioIndicatorCtrl62.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl62.TabIndex = 8;
            //
            // ioIndicatorCtrl63
            //
            this.ioIndicatorCtrl63.Desc = "正限位";
            this.ioIndicatorCtrl63.IsOn = null;
            this.ioIndicatorCtrl63.Location = new System.Drawing.Point(146, 15);
            this.ioIndicatorCtrl63.Name = "ioIndicatorCtrl63";
            this.ioIndicatorCtrl63.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl63.TabIndex = 9;
            //
            // ioIndicatorCtrl64
            //
            this.ioIndicatorCtrl64.Desc = "正限位";
            this.ioIndicatorCtrl64.IsOn = null;
            this.ioIndicatorCtrl64.Location = new System.Drawing.Point(146, 54);
            this.ioIndicatorCtrl64.Name = "ioIndicatorCtrl64";
            this.ioIndicatorCtrl64.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl64.TabIndex = 10;
            //
            // ioIndicatorCtrl65
            //
            this.ioIndicatorCtrl65.Desc = "正限位";
            this.ioIndicatorCtrl65.IsOn = null;
            this.ioIndicatorCtrl65.Location = new System.Drawing.Point(10, 54);
            this.ioIndicatorCtrl65.Name = "ioIndicatorCtrl65";
            this.ioIndicatorCtrl65.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl65.TabIndex = 11;
            //
            // ioIndicatorCtrl66
            //
            this.ioIndicatorCtrl66.Desc = "正限位";
            this.ioIndicatorCtrl66.IsOn = null;
            this.ioIndicatorCtrl66.Location = new System.Drawing.Point(10, 15);
            this.ioIndicatorCtrl66.Name = "ioIndicatorCtrl66";
            this.ioIndicatorCtrl66.Size = new System.Drawing.Size(90, 24);
            this.ioIndicatorCtrl66.TabIndex = 12;
            // 
            // CtrlMotionCardRunBase
            // 
@@ -1143,17 +832,17 @@
            this.Size = new System.Drawing.Size(982, 720);
            this.tableLayoutPanel1.ResumeLayout(false);
            this.tableLayoutPanel2.ResumeLayout(false);
            this.groupBox1.ResumeLayout(false);
            this.groupBoxCommBtn.ResumeLayout(false);
            this.groupBox2.ResumeLayout(false);
            this.groupBox3.ResumeLayout(false);
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.groupBoxCommBtn.ResumeLayout(false);
            this.groupBoxCommBtn.PerformLayout();
            this.tableLayoutPanel3.ResumeLayout(false);
            this.groupBox5.ResumeLayout(false);
            this.groupBox4.ResumeLayout(false);
            this.groupBox4.PerformLayout();
            this.groupBox5.ResumeLayout(false);
            this.tableLayoutPanel3.ResumeLayout(false);
            this.groupBox6.ResumeLayout(false);
            this.groupBox7.ResumeLayout(false);
            this.groupBox8.ResumeLayout(false);
            this.groupBox9.ResumeLayout(false);
            this.ResumeLayout(false);
        }
@@ -1170,9 +859,6 @@
        private System.Windows.Forms.Button button8;
        private System.Windows.Forms.Button button10;
        private System.Windows.Forms.Button button9;
        private System.Windows.Forms.Button button4;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.ListBox listBox1;
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
@@ -1194,11 +880,7 @@
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl15;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl11;
        private System.Windows.Forms.GroupBox groupBox4;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl7;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl3;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl5;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl2;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl4;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl10;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl9;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl8;
@@ -1213,7 +895,6 @@
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.GroupBox groupBox8;
        private System.Windows.Forms.GroupBox groupBox6;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl27;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl28;
@@ -1231,31 +912,10 @@
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl40;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl41;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl42;
        private System.Windows.Forms.GroupBox groupBox7;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl50;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl49;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl48;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl47;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl46;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl45;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl44;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl43;
        private System.Windows.Forms.GroupBox groupBox9;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl59;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl60;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl61;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl62;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl63;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl64;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl65;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl66;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl58;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl57;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl56;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl55;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl54;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl53;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl52;
        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl51;
        private System.Windows.Forms.RadioButton radioButton3;
        private System.Windows.Forms.RadioButton radioButton2;
        private System.Windows.Forms.RadioButton radioButton1;
        private System.Windows.Forms.PropertyGrid propGrid;
        private System.Windows.Forms.Button btnStart;
    }
}
src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs
@@ -17,5 +17,9 @@
            InitializeComponent();
        }
        private void RadioButton_CheckedChanged(object sender, EventArgs e)
        {
        }
    }
}
src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx
@@ -117,4 +117,27 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="btnStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
        JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5AEVBQUmshfOegAAA3lJREFU
        WEe90D1sG2UcBvBXSiUYKmUoTGTpxEfEQgffnc/+v/flOztJk6ZfI1LFxoAYGBiYWGCjoktBQkxV90qN
        oCCUxj7HdomxE380scNCUZkqtdKLVFV9eV7fpaUltI59ziP9csmdfc/zhp3bnWfndxfY+d8X3oBvYBs2
        4Svcn1XP/y3xxC+egosolM/p4v5HcOwsPnd2d24g0cQD3oQ7IPfxGH7BgGWUv6oGnOlHEkl8KgIB8gXU
        8yuQOtM/gQGFJ8ZKfBoCAXIId1H6BRw/3c+zPSMnPgUGFDCggIKhbZ3uFz5A+bQasNyDUYbEJyAQIA/o
        EfwI+eVe4chyL8CQyNCJv0AgQI7oPnwL7y32PHaq5z/x0pzCACAQIMf0B3yG4pmlHZ/teWHipRjgY4CP
        lyRiY6nnv4/yo4s7ObZn3yzhARAIkAl6CNfAWdwJphZ3PIyIPJN4HYEAOQH34GsUv31y22NPudGAk1gE
        BALkBPXhE5S/toByJRqAX4BAgDwEP6B8NhrhsMESIBAgD8kKyqcHA+bxAwgEyEPyAHTAgNu2QiBAHoa5
        jv2g0LB0YGzutqUQCJAT17EkileCEp8O1jljBQwAAgFykvItLoMN/pNfpneDKmdBBQPyXa4QCJAToYrr
        1Pcr9KlfzL4eVIjlf0O5Sr6LP7qEAYQBhC8kJ2hDg+751ezlXCn7TqHJmR8Sw39gYJAAA4BAgExEh6S/
        mX2Yu5W97oUZz7luTOXCLMMIpq7PxO9kFQIBcmxbWZnbyNS9dfOCu2oe9dYzzCtBmIkbn4vfySgYkMGA
        DF4ymlwrI726ecetmJ+7RXMmV1XFJorNqOj/ksMAIBAgD6xtSq9h3ndr6e+dUvrEwl8uc1HqluFl5Spe
        GyvbJoEAeRBuI/3IqaVv2KExZ93QjjhhmmEEU9eh47bTCoEAOZTNtHR+NVp22fjQWtWnnbKBYgiN+K0H
        CF449ABny5BO3bhrV/Qv7TX9uFMzmF0ElI8cp4nlTYOcliFA7gvFdt34G8VXraKuXZDzKNWZtaINrmPF
        quJFVf0tu6n/abd0+R8N/bFV02/yknaO/6y/YqniIoxbvBe+pjFa0aZ4TbtoNTVpbcUamuS3tC4PtY/5
        qnbMClG6FpUnGpyMUTHF6GZqhsqp73g1tc0rqU0KU5dwbxanH4zkxUiyYewfjPxR3uNflhgAAAAASUVO
        RK5CYII=
</value>
  </data>
</root>
src/Bro.UI.Device.Winform/Properties/Resources.Designer.cs
New file
@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.42000
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Bro.UI.Device.Winform.Properties {
    using System;
    /// <summary>
    ///   一个强类型的资源类,用于查找本地化的字符串等。
    /// </summary>
    // 此类是由 StronglyTypedResourceBuilder
    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
    // (以 /str 作为命令选项),或重新生成 VS 项目。
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    internal class Resources {
        private static global::System.Resources.ResourceManager resourceMan;
        private static global::System.Globalization.CultureInfo resourceCulture;
        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal Resources() {
        }
        /// <summary>
        ///   返回此类使用的缓存的 ResourceManager 实例。
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Bro.UI.Device.Winform.Properties.Resources", typeof(Resources).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }
        /// <summary>
        ///   重写当前线程的 CurrentUICulture 属性
        ///   重写当前线程的 CurrentUICulture 属性。
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Globalization.CultureInfo Culture {
            get {
                return resourceCulture;
            }
            set {
                resourceCulture = value;
            }
        }
    }
}
src/Bro.UI.Device.Winform/Properties/Resources.resx
New file
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>