Exemplo n.º 1
0
        public void motors_Init()                                  //电机初始化
        {
            canObj             = new canOpenObj();                 //实例化网络接口
            profileSettingsObj = new ProfileSettingsObj();         //实例化驱动器属性

            canObj.BitRate = CML_BIT_RATES.BITRATE_1_Mbit_per_sec; //设置CAN传输速率为1M/s
            canObj.Initialize();                                   //网络接口初始化

            ampObj         = new AmpObj[MOTOR_NUM];                //实例化四个驱动器(盘式电机)
            ampsettingsObj = new ampSettingsObj();
            ampsettingsObj.enableOnInit = true;
            ampsettingsObj.guardTime    = 1000;
            ampsettingsObj.lifeFactor   = 1000;
            for (int i = 0; i < MOTOR_NUM; i++)    //初始化四个驱动器
            {
                ampObj[i] = new AmpObj();
                //ampObj[i].Initialize(canObj, (short)(i + 1));
                ampObj[i].InitializeExt(canObj, (short)(i + 1), ampsettingsObj);
                ampObj[i].HaltMode      = CML_HALT_MODE.HALT_DECEL;                                //选择通过减速来停止电机的方式
                ampObj[i].CountsPerUnit = 1;                                                       //电机转一圈编码器默认计数25600次,设置为4后转一圈计数6400次
                userUnits[i]            = ampObj[i].MotorInfo.ctsPerRev / ampObj[i].CountsPerUnit; //用户定义单位,counts/圈
            }

            Linkage = new LinkageObj();
            Linkage.Initialize(ampObj);
            Linkage.SetMoveLimits(200000, 3000000, 3000000, 200000);

            motorsTimer          = new DispatcherTimer();
            motorsTimer.Tick    += new EventHandler(motorsTimer_Tick); //Tick是超过计时器间隔时发生事件,此处为Tick增加了一个叫ShowCurTimer的取当前时间并扫描串口的委托
            motorsTimer.Interval = TimeSpan.FromMilliseconds(100);;    //设置刻度之间的时间值,设定为1秒(即文本框会1秒改变一次输出文本)
            motorsTimer.Start();
        }