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();
        }
Exemplo n.º 2
0
        public void motors_Init()//电机初始化
        {
            try
            {
                canObj             = new canOpenObj();         //实例化网络接口
                profileSettingsObj = new ProfileSettingsObj(); //实例化驱动器属性

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

                ampObj        = new AmpObj[MOTOR_NUM];                 //实例化四个驱动器(盘式电机)
                ampsetingsObj = new ampSettingsObj();

                ampsetingsObj.enableOnInit = true;
                ampsetingsObj.guardTime    = 2000; // 防止时间过长工控机电机失能
                //ampsetingsObj.heartbeatPeriod = 1000;
                //ampsetingsObj.heartbeatPeriod = 300;
                ampsetingsObj.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), ampsetingsObj);
                    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/圈
                }


                //ampObj[0].PositionActual = -1;
                //ampObj[1].PositionActual = -2;
                //ampObj[2].PositionActual = -2;
                //ampObj[3].PositionActual = -1;

                Linkage            = new LinkageObj();
                linkageSettingsObj = new LinkageSettingsObj();
                linkageSettingsObj.moveAckTimeout = 2000;                // 代替WaitMoveDone
                //Linkage.Initialize(ampObj);
                Linkage.InitializeExt(ampObj, linkageSettingsObj);       //电机联动初始化
                Linkage.SetMoveLimits(200000, 3000000, 3000000, 200000); // 设置电机速度,加速度等极限值
                EventObj              = Linkage.CreateEvent(CML_LINK_EVENT.LINKEVENT_TRJDONE | CML_LINK_EVENT.LINKEVENT_MOVEDONE | CML_LINK_EVENT.LINKEVENT_ABORT, CML_EVENT_CONDITION.CML_EVENT_ANY);
                EventObj.EventNotify += new eventObj.EventHandler(EventObj_EventNotify);


                motorsTimer          = new DispatcherTimer();
                motorsTimer.Tick    += new EventHandler(motorsTimer_Tick); //Tick是超过计时器间隔时发生事件,此处为Tick增加了一个叫ShowCurTimer的取当前时间并扫描串口的委托
                motorsTimer.Interval = TimeSpan.FromMilliseconds(100);;    //设置刻度之间的时间值,设定为1秒(即文本框会1秒改变一次输出文本)
                motorsTimer.Start();
            }
            catch (Exception)
            {
                MessageBox.Show("驱动器初始化错误");
            }
        }
Exemplo n.º 3
0
        public ActionResult ExportCfg()
        {
            var uuidDict = (from device in db.device
                            select new { device.alias, device.uuid }
                            ).ToDictionary(a => a.alias, a => a.uuid);
            var eventDict = (from linkage_event in db.linkage_event
                             select new { linkage_event.name, linkage_event.value }
                             ).ToDictionary(a => a.name, a => a.value);
            var operationDict = (from linkage_operation in db.linkage_operation
                                 select new { linkage_operation.name, linkage_operation.value }
                                 ).ToDictionary(a => a.name, a => a.value);
            var algorithmDict = (from linkage_algorithm in db.linkage_algorithm
                                 select new { linkage_algorithm.name, linkage_algorithm.value }
                                 ).ToDictionary(a => a.name, a => a.value);

            var trgList = (from linkage_trigger in db.linkage_trigger
                           select linkage_trigger).ToList();

            for (int i = 0; i < trgList.Count; i++)
            {
                try
                {
                    var trigger = trgList[i].trigger;
                    //整合为联动对象
                    LinkageObj linkageObj = new LinkageObj();

                    linkageObj.trigger  = eventDict[trigger];
                    linkageObj.delay    = (int)trgList[i].delay;
                    linkageObj.repeat   = trgList[i].repeat;
                    linkageObj.sequence = new Sequence();

                    var istrList = (from linkage_instruction in db.linkage_instruction
                                    where linkage_instruction.trigger == trigger
                                    select new Instruction
                    {
                        operation = linkage_instruction.operation,
                        detail = linkage_instruction.detail,
                        uuid = linkage_instruction.uuid
                    }).ToList();
                    linkageObj.sequence.num = istrList.Count;

                    foreach (var item in istrList)
                    {
                        item.operation = operationDict[item.operation];
                        if (!Regex.IsMatch(item.detail, @"^[+-]?\d*[.]?\d*$")) //判断是否为数字字符串注意斜杠转义
                        {
                            item.detail = algorithmDict[item.detail];
                        }
                        item.uuid = uuidDict[item.uuid];
                    }
                    linkageObj.sequence.instruction = istrList;

                    linkageObj.ToJson();
                    //将linkageJson发送到genbox接口
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    MyLinkage(linkageObj.trigger, js.Serialize(linkageObj));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message + ex.StackTrace);
                }
            }

            return(RedirectToAction("Index"));
        }