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(); }
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("驱动器初始化错误"); } }
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")); }