C#与雷赛运动控制卡的使用(一) -控制卡系统

本文以雷赛DMC1000B控制卡为例。
C#是面向对象的语言,在使用控制卡时,应先将实际的DMC卡抽象成卡对象,总结出控制卡所包含的属性,以及使用卡所需要的方法。将具体的DMC1000B卡看成是卡系统的实例对象。由此可抽象一个卡接口。在使用雷赛其他卡如DMC2210 DMC2410时可实现此接口,调用不同的方法即可。
具体属性及方法可查看DMC1000B卡说明书。
(一)自定义卡接口ICard
接口应包含多种不同控制卡共用的一些属性及方法。

    public interface ICard
    {
        byte No { get; }				//卡编号
        byte AxisCount { get; }			//轴数量
        byte InCount { get; }			//输入点数量
        byte OutCount { get; }			//输出点数量
    }

(二) 不同控制卡的具体实现(以DMC1000B为例)

    public class Dmc1000Card : ICard
    {
        /// 
        /// 起始卡号:1
        /// 
        public byte No { get; private set; }
        /// 
        /// 起始轴号:0
        /// 
        public byte AxisCount { get; private set; }
        /// 
        /// 起始IO:1
        /// 
        public byte InCount { get; private set; }
        public byte OutCount { get; private set; }
        ///
        ///创建卡对象时按所使用的控制卡实例化
        public Dmc1000Card(byte _no, byte _motorCount, byte _inCount, byte _outCount)
        {
            this.No = _no;
            this.AxisCount = _motorCount;
            this.InCount = _inCount;
            this.OutCount = _outCount;
        }

(三)系统中使用了多张控制卡时,需将所有卡初始化,以及包含的轴数量,输入数量,输出数量

    public class CardSys
    {
        public int AxisTotal { get; private set; }			//轴汇总
        public int InTotal { get; private set; }			//输入汇总
        public int OutTotal { get; private set; }			//输出汇总
        public static int CardCount { get; private set; }		//卡数量
        /// 
        /// 控制卡已经初始化
        /// 
        public CardSys() 
        {
        }
        ///
        ///初始化 可获取PC中卡数量
        public static void Init()
        {
            try
            {
                CardCount = Dmc1000.d1000_board_init();
                if (CardCount <= 0)
                    throw new Exception("未找到DMC1000运动控制卡");
            }
            catch (Exception ex)
            {
                throw new Exception("控制卡初始化失败\n" + ex.Message);
            }
        }
        ///
        ///释放卡资源
        public static bool Close()
        {
            try
            {
                int errVal = Dmc1000.d1000_board_close();
                if (errVal > 0)
                    throw new Exception("释放控制卡资源出错");
                else
                    return true;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        ///
        ///添加所有的控制卡,汇总所有轴 输入 输出
        public void AddCard(ICard card)
        {
            if (card != null)
            {
                this.AxisTotal += card.AxisCount;
                this.InTotal += card.InCount;
                this.OutTotal += card.OutCount;
            }
        }
    }

你可能感兴趣的:(工控上位机C#,c#,开发语言)