public override bool Open() { int boardIdInBits = 0; int ret = APS168.APS_register_virtual_board(1, 1); // Card(Board) initial,mode bit0(0:By system assigned, 1:By dip switch) ret = APS168.APS_initial(ref boardIdInBits, m_cardIdMode); if (ret >= 0) { APS168.APS_get_first_axisId(m_cardId, ref m_startAxisIndex, ref m_totalAxisCount); int CardName = 0; APS168.APS_get_card_name(m_cardId, ref CardName); if (CardName != (Int32)APS_Define.DEVICE_NAME_ENET_EMX100) { throw new Exception("运动控制是型号不是EMX100!"); } } else { throw new Exception("运动控制卡初始化失败,请检查驱动是否装好或者MotionCreatePro已经开启!"); } m_isInitialed = true; return(true); }
/// <summary>运动控制卡DIO初始化 </summary> internal void Open() { int StartAxisId = 0, TotalAxis = 0, CardName = 0; APS168.APS_get_first_axisId(BoardID, ref StartAxisId, ref TotalAxis); APS168.APS_get_card_name(BoardID, ref CardName); //if (/*CardName != (Int32)APS_Define.DEVICE_NAME_PCI_825458 && */CardName != (Int32)APS_Define.DEVICE_NAME_AMP_20408C) //throw new Exception(string.Format("AMP204MC.Initialize Failed :运动控制是型号不是204C或208C!")); if (CardName == (Int32)APS_Define.DEVICE_NAME_AMP_20408C || CardName == (Int32)APS_Define.DEVICE_NAME_PCI_825458 /*&& TotalAxis == 4*/) { DICount = 16; DOCount = 16; } else { throw new Exception(string.Format("未实现的运动控制DIO模块型号:" + CardName)); } //if (CardName == (Int32)APS_Define.DEVICE_NAME_AMP_20408C && TotalAxis == 8) //{ // DICount = 16; // DOCount = 16; //} IsOpen = true; }
private void InitializeCard() { var boardBits = 0; var ret = APS168.APS_initial(ref boardBits, 0); if (ret == 0) { foreach (var cardNo in _cardNos) { if (((boardBits >> cardNo) & 1) == 0) { throw new SystemException("Board Id search error !"); } var cardName = 0; ret = APS168.APS_get_card_name(cardNo, ref cardName); var innerMsg = ""; innerMsg = GetErrorCodeDesc((APS_Define)ret); if (innerMsg != "No Error") { MessageBox.Show(string.Format("APS_get_card_name Error:{0}", innerMsg)); } //ThrowIfResultError(ret, "Initial"); if ((cardName == (int)APS_Define.DEVICE_NAME_PCI_825458) || (cardName == (int)APS_Define.DEVICE_NAME_AMP_20408C)) { var startAxisId = 0; var totalAxisNum = 0; APS168.APS_get_first_axisId(cardNo, ref startAxisId, ref totalAxisNum); for (var index = 0; index < totalAxisNum; ++index) { _axises.Add(startAxisId + index); } APS168.APS_load_parameter_from_flash(cardNo); } else { MessageBox.Show("Board type not matching!"); //throw new ApsException("Board type not matching!"); } } } else { var innerMsg = ""; innerMsg = GetErrorCodeDesc((APS_Define)ret); if (innerMsg != "No Error") { MessageBox.Show(string.Format("板卡初始化错误:{0}", innerMsg)); } //ThrowIfResultError(ret, "APS_initial"); } }
public void Initial(int cardId, int mode) { CardId = cardId; var boardIdInBits = 0; // Card(Board) initial,mode bit0(0:By system assigned, 1:By dip switch) var ret = APS168.APS_initial(ref boardIdInBits, mode); if (ret >= 0) { IsInitialed = true; APS168.APS_get_first_axisId(cardId, ref StartAxisId, ref TotalAxis); APS168.APS_get_card_name(cardId, ref CardName); if (CardName != (int)APS_Define.DEVICE_NAME_PCI_825458 && CardName != (int)APS_Define.DEVICE_NAME_AMP_20408C) { MessageBox.Show("运动控制是型号不是204C或208C!"); } } else { MessageBox.Show("运动控制卡初始化失败,请检查驱动是否装好或者MotionCreatePro已经开启!"); } }
public bool InitialFixture(int cardId, int mode) { CardId = cardId; int boardIdInBits = 0; // Card(Board) initial,mode bit0(0:By system assigned, 1:By dip switch) int ret = APS168.APS_initial(ref boardIdInBits, mode); if (ret >= 0) { APS168.APS_get_first_axisId(cardId, ref StartAxisId, ref TotalAxis); APS168.APS_get_card_name(cardId, ref CardName); if (CardName != (Int32)APS_Define.DEVICE_NAME_PCI_825458 && CardName != (Int32)APS_Define.DEVICE_NAME_AMP_20408C) { //MessageBox.Show("运动控制是型号不是204C或208C!"); return(false); } } else { //MessageBox.Show("运动控制卡初始化失败,请检查驱动是否装好或者MotionCreatePro已经开启!"); return(false); } //判断配置文件是否存在 if (File.Exists(txtXmlFilename)) { if (LoadParamFromFile(txtXmlFilename) == false) { return(false); } } IsInitialed = true; return(true); }
/// <summary>运动控制卡Compare Trigger初始化 </summary> internal void Open() { if (IsOpen) { return; } int StartAxisId = 0, TotalAxis = 0, CardName = 0; APS168.APS_get_first_axisId(BoardID, ref StartAxisId, ref TotalAxis); APS168.APS_get_card_name(BoardID, ref CardName); if (/*CardName != (Int32)APS_Define.DEVICE_NAME_PCI_825458 && */ CardName != (Int32)APS_Define.DEVICE_NAME_AMP_20408C) { throw new Exception(string.Format("AMP204MC.Initialize Failed :运动控制卡型号不是204C或208C!")); } if (CardName == (Int32)APS_Define.DEVICE_NAME_AMP_20408C && TotalAxis == 4) { TrigChannels = 2; EncoderChannels = 4; for (int i = 0; i < TrigChannels; i++) { if (!lcmpSource.ContainsKey(i)) { lcmpSource.Add(i, (Int32)APS_Define.TGR_LCMP0_SRC + i); tcmpSource.Add(i, (Int32)APS_Define.TGR_TCMP0_SRC + i); tcmpDir.Add(i, (Int32)APS_Define.TGR_TCMP0_DIR + i); } } } if (CardName == (Int32)APS_Define.DEVICE_NAME_AMP_20408C && TotalAxis == 8) { TrigChannels = 4; EncoderChannels = 8; for (int i = 0; i < TrigChannels; i++) { if (i < 2) { if (!lcmpSource.ContainsKey(i)) { lcmpSource.Add(i, (Int32)APS_Define.TGR_LCMP0_SRC + i); tcmpSource.Add(i, (Int32)APS_Define.TGR_TCMP0_SRC + i); tcmpDir.Add(i, (Int32)APS_Define.TGR_TCMP0_DIR + i); } } else { if (!lcmpSource.ContainsKey(i)) { lcmpSource.Add(i, (Int32)APS_Define.TGR_LCMP2_SRC + i); tcmpSource.Add(i, (Int32)APS_Define.TGR_TCMP2_SRC + i); tcmpDir.Add(i, (Int32)APS_Define.TGR_TCMP2_DIR + i); } } } } #region Dictionary 初始化 lock (_jf168Cfg) { if (!_jf168Cfg.ContainsItem("Card_" + BoardID)) { _jf168Cfg.AddItem("Card_" + BoardID, new JFXmlDictionary <string, object>()); } _dictCT = _jf168Cfg.GetItemValue("Card_" + BoardID) as JFXmlDictionary <string, object>; if (_dictCT.ContainsKey(TrigTablesKeyName)) { trigTables = _dictCT[TrigTablesKeyName] as JFXmlDictionary <int, double[]>; } else { for (int i = 0; i < EncoderChannels; i++) { if (trigTables.ContainsKey(i)) { trigTables[i] = new double[0]; } else { trigTables.Add(i, new double[0]); } } _dictCT.Add(TrigTablesKeyName, trigTables); } if (_dictCT.ContainsKey(TrigLinersKeyName)) { trigLiners = _dictCT[TrigLinersKeyName] as JFXmlDictionary <int, JFCompareTrigLinerParam>; } else { for (int i = 0; i < EncoderChannels; i++) { if (trigLiners.ContainsKey(i)) { trigLiners[i] = new JFCompareTrigLinerParam(); } else { trigLiners.Add(i, new JFCompareTrigLinerParam()); } } _dictCT.Add(TrigLinersKeyName, trigLiners); } if (_dictCT.ContainsKey(TrigModesKeyName)) { trigModes = _dictCT[TrigModesKeyName] as JFXmlDictionary <int, JFCompareTrigMode>; } else { for (int i = 0; i < EncoderChannels; i++) { if (trigModes.ContainsKey(i)) { trigModes[i] = JFCompareTrigMode.disable; } else { trigModes.Add(i, JFCompareTrigMode.disable); } } _dictCT.Add(TrigModesKeyName, trigModes); } if (_dictCT.ContainsKey(ChnTrigKeyName)) { chnTrig = _dictCT[ChnTrigKeyName] as JFXmlDictionary <int, int[]>; } if (_dictCT.ContainsKey(TrigEnableKeyName)) { trigEnables = _dictCT[TrigEnableKeyName] as JFXmlDictionary <int, bool>; } else { for (int i = 0; i < TrigChannels; i++) { if (trigEnables.ContainsKey(i)) { trigEnables[i] = false; } else { trigEnables.Add(i, false); } } _dictCT.Add(TrigEnableKeyName, trigEnables); } if (_dictCT.ContainsKey(LCmprUsedKeyName)) { lcmprUsed = _dictCT[LCmprUsedKeyName] as JFXmlDictionary <int, bool>; } else { for (int i = 0; i < TrigChannels; i++) { if (lcmprUsed.ContainsKey(i)) { lcmprUsed[i] = false; } else { lcmprUsed.Add(i, false); } } _dictCT.Add(LCmprUsedKeyName, lcmprUsed); } if (_dictCT.ContainsKey(TCmprUsedKeyName)) { tcmprUsed = _dictCT[TCmprUsedKeyName] as JFXmlDictionary <int, bool>; } else { for (int i = 0; i < TrigChannels; i++) { if (tcmprUsed.ContainsKey(i)) { tcmprUsed[i] = false; } else { tcmprUsed.Add(i, false); } } _dictCT.Add(TCmprUsedKeyName, tcmprUsed); } if (_dictCT.ContainsKey(TrigLCmprKeyName)) { trigLCmprSource = _dictCT[TrigLCmprKeyName] as JFXmlDictionary <int, List <int> >; } if (_dictCT.ContainsKey(TrigTCmprKeyName)) { trigTCmprSource = _dictCT[TrigTCmprKeyName] as JFXmlDictionary <int, List <int> >; } if (_dictCT.ContainsKey(ChnTCmprKeyName)) { chnTcmpr = _dictCT[ChnTCmprKeyName] as JFXmlDictionary <int, int>; } if (_dictCT.ContainsKey(ChnLCmprKeyName)) { chnLcmpr = _dictCT[ChnLCmprKeyName] as JFXmlDictionary <int, int>; } if (!_dictCT.ContainsKey("PulseFactor")) { pulseFactors = new double[TotalAxis]; for (int i = 0; i < TotalAxis; i++) { pulseFactors[i] = 1; } } else { pulseFactors = _dictCT["PulseFactor"] as double[]; if (pulseFactors.Length < TotalAxis) { _dictCT.Remove("PulseFactor"); pulseFactors = new double[TotalAxis]; for (int i = 0; i < TotalAxis; i++) { pulseFactors[i] = 1; } _dictCT.Add("PulseFactor", pulseFactors); } } _jf168Cfg.Save(); } #endregion for (int i = 0; i < TrigChannels; i++) { if (APS168.APS_reset_trigger_count(BoardID, i) != 0)//reset count { throw new Exception(string.Format("AMP204MC.APS_reset_trigger_count Failed :重置触发通道{0}计数器失败!", i)); } if (APS168.APS_set_trigger_param(BoardID, (Int32)APS_Define.TGR_TRG0_SRC + i, 0) != 0)//Trig source bind { throw new Exception(string.Format("AMP204MC.APS_set_trigger_param Failed :接触触发通道{0}绑定关系!", i)); } //if (SetTrigEnable(i, trigEnables[i]) != (int)ErrorDef.Success)//enable or disable trig //调用慢,先屏蔽 remarked by Boby // throw new Exception(string.Format("AMP204MC.SetTrigEnable Failed :设置触发通道{0}使能状态失败!", i)); } for (int i = 0; i < EncoderChannels; i++) { if (!chnTrig.ContainsKey(i)) { continue; } if (chnTrig[i].Length <= 0) { continue; } int[] TrigChns = new int[chnTrig[i].Length]; TrigChns = chnTrig[i]; //if(SetEncoderTrigBind(i, TrigChns)!=(int)ErrorDef.Success) //调用慢,先屏蔽 remarked by Boby // throw new Exception(string.Format("AMP204MC.SetEncoderTrigBind Failed :绑定编码器{0}和触发通道{1}失败!",i, chnTrig[i])); } IsOpen = true; }