public int BuffAbsArc2CA(int axis1, int axis2, double center1, double center2, double angle, JFMotionParam mp) { _CheckAxisEnable(axis1, "BuffAbsArc2CA"); _CheckAxisEnable(axis2, "BuffAbsArc2CA"); lock (ml) { HTM.MOTION_PARA _mp = new HTM.MOTION_PARA() { vStart = mp.vs, vMax = mp.vm, vEnd = mp.ve, acc = mp.acc, dec = mp.dec, sFactor = mp.curve, timeout = double.MaxValue }; int opt = HTM.ArcCa(axis1, axis2, center1, center2, angle, 1.0, HTM.MotionMode.AS | HTM.MotionMode.BUF, ref _mp); if (0 != opt) { return((int)ErrorDef.InvokeFailed); } return((int)ErrorDef.Success); } }
public int RelArc2CE_P(int axis1, int axis2, double center1, double center2, double pos1, double pos2, bool isPositive, JFMotionParam mp) { _CheckAxisEnable(axis1, "AbsArc2CE_P"); _CheckAxisEnable(axis2, "AbsArc2CE_P"); lock (ml) { HTM.MOTION_PARA _mp = new HTM.MOTION_PARA() { vStart = mp.vs, vMax = mp.vm, vEnd = mp.ve, acc = mp.acc, dec = mp.dec, sFactor = mp.curve, timeout = double.MaxValue }; int opt = HTM.ArcCe(axis1, axis2, center1, center2, pos1, pos2, isPositive ? 1 : 0, 1.0, HTM.MotionMode.RS, ref _mp); if (0 != opt) { return((int)ErrorDef.InvokeFailed); } return((int)ErrorDef.Success); } }
bool HasAio() { bool isAioExisted = false; HTM.IO_INFO ioInfo; //int? ioMaxCount = dev.GetInitParamValue("最大IO数量") as int?; //if (null == ioMaxCount) // throw new Exception("HTM控制器初始化参数\"最大IO数量\"未设置! "); int ioCount = HTM.GetIoNum(); for (int i = 0; i < ioCount; i++) { int opt = HTM.GetIoInfo(i, out ioInfo); if (0 == opt) { if ((int)HTM.IoCardType.AIO_HTNET == ioInfo.cardType) { isAioExisted = true; break; } } } return(isAioExisted); }
public int SetTrigMode(int encChn, JFCompareTrigMode mode) { if (!IsOpen) { return((int)ErrorDef.NotOpen); } if (encChn < 0 || encChn >= EncoderChannels) { throw new ArgumentOutOfRangeException("SetTrigMode(encChn ,...) fialed By:encChn = " + encChn + " is outof range:0~" + (EncoderChannels - 1)); } int err = 0; if (mode == trigModes[encChn]) { return((int)ErrorDef.Success); } int ret = (int)ErrorDef.ParamError; switch (mode) { case JFCompareTrigMode.disable: err = HTM.SetLinTrigEnable(devIndexes[devIndexes[encChn]], 0); if (err != 0) { return((int)ErrorDef.InvokeFailed); } if (trigType == TriggerType.PosTrig) { for (int i = 0; i < trigTables[encChn].Length; i++) //HTM点表触发只支持2个点 { err = HTM.SetPtTrigEnable(devIndexes[encChn], i, 0); if (err != 0) { return((int)ErrorDef.InvokeFailed); } } } ret = (int)ErrorDef.Success; trigModes[encChn] = mode; break; case JFCompareTrigMode.liner: err = HTM.SetLinTrigEnable(devIndexes[encChn], 1); if (err != 0) { ret = (int)ErrorDef.InvokeFailed; break; } if (trigType == TriggerType.PosTrig) { for (int i = 0; i < trigTables[encChn].Length; i++) //HTM点表触发只支持2个点 { err = HTM.SetPtTrigEnable(devIndexes[encChn], i, 0); if (err != 0) { return((int)ErrorDef.InvokeFailed); } } } ret = (int)ErrorDef.Success; trigModes[encChn] = mode; break; case JFCompareTrigMode.table: err = HTM.SetLinTrigEnable(devIndexes[encChn], 0); //先禁用线性触发 if (err != 0) { return((int)ErrorDef.InvokeFailed); } //if (trigType == TriggerType.PosTrig) { for (int i = 0; i < trigTables[encChn].Length; i++) //HTM点表触发只支持2个点 { err = HTM.SetPtTrigEnable(devIndexes[encChn], i, 1); if (err != 0) { return((int)ErrorDef.InvokeFailed); } } } ret = (int)ErrorDef.Success; trigModes[encChn] = mode; break; default: break; } return(ret); }
static HtmDllManager() { HTM.GetInitPara(out _initParam); }
public int GetFbkPos(int axis, out double fbkPos) { _CheckAxisEnable(axis, "GetFbkPos"); fbkPos = HTM.GetFbkPos(axis); return((int)ErrorDef.Success); }
public int GetPulseFactor(int axis, out double fact) { _CheckAxisEnable(axis, "GetPulseFactor"); fact = HTM.GetPulseFactor(axis); return((int)ErrorDef.Success); }
public bool IsORG(int axis) { _CheckAxisEnable(axis, "IsORG"); return(HTM.GetMotionIO(axis, HTM.MotionIO.ORG) == 1); }
public bool IsSNL(int axis) { _CheckAxisEnable(axis, "IsSNL"); return(HTM.GetMotionIO(axis, HTM.MotionIO.SMEL) == 1); }
public int OpenDevice() { if (!IsInitOK) { return((int)ErrorDef.InitFailedWhenOpenCard); } if (IsDeviceOpen) { return((int)ErrorDef.Success); } HTM.INIT_PARA initParam = new HTM.INIT_PARA(); initParam.para_file = config_file; initParam.use_aps_card = (byte)(Array.IndexOf(yesnoRange, use_aps_card) == 0 ? 1 : 0); initParam.use_htnet_card = (byte)(Array.IndexOf(yesnoRange, use_htnet_card) == 0 ? 1 : 0); initParam.offline_mode = (byte)(Array.IndexOf(openModeRange, offline_mode)); initParam.max_axis_num = (ushort)max_axis_num; initParam.max_io_num = (ushort)max_io_num; initParam.max_dev_num = (ushort)max_dev_num; initParam.max_module_num = (ushort)max_module_num; initParam.language = 0; lock (HtmDllManager.AsynLocker) { if (0 != HTM.Init(ref initParam)) { HTM.Discard(); int nErr = 0;// HTM.Init(ref initParam); for (int i = 0; i < 3; i++) { System.Threading.Thread.Sleep(500); nErr = HTM.Init(ref initParam); if (0 == nErr) { break; } } if (nErr < 0) { return((int)ErrorDef.InvokeFailed); } } HtmDllManager.OpendDevCount++; IsDeviceOpen = true; } if (HasAxis()) { McCount = 1; mc.Open(); } else { McCount = 0; } if (HasDio()) { DioCount = 1; dio.Open(); } else { DioCount = 0; } if (HasAio()) { AioCount = 1; aio.Open(); } else { AioCount = 0; } //if (HasCompareTrigger()) //{ // cmpTrig.Open(); // CompareTriggerCount = 1; //} //else // CompareTriggerCount = 0; GenCompareTrigs(); return((int)ErrorDef.Success); }
public bool IsINP(int axis) { _CheckAxisEnable(axis, "IsINP"); return(HTM.GetINP(axis) == 1); }
public bool IsMDN(int axis) { _CheckAxisEnable(axis, "IsMDN"); return(HTM.OnceDone(axis) == 1); }
public bool IsSVO(int axis) { _CheckAxisEnable(axis, "IsSVO"); return(HTM.GetSVON(axis) == 1);//GetMotionIO(axis, MotionIO.SVON) == 1; }
public bool IsALM(int axis) { _CheckAxisEnable(axis, "IsAlarm"); return(HTM.GetAlarm(axis) == 1);//.GetMotionIO(axis, MotionIO.ALM) == 1; }
internal void Open() { if (IsOpen) { return; } //devIndexes.Clear(); trigTables.Clear(); trigLiners.Clear(); trigModes.Clear(); //trigEnables.Clear(); int err, i, j; //int devCount = HTM.GetDeviceNum(); //for (i = 0; i < devCount; i++) //{ // HTM.DEVICE_INFO devInfo; // if (0 == HTM.GetDeviceInfo(i, out devInfo)) // if (devInfo.devType == (byte)HTM.DeviceType.POSTRIG || devInfo.devType == (int)HTM.DeviceType.HTDHVD) // { // devIndexes.Add(i); // } //} //if (devIndexes.Count == 0) // return; for (i = 0; i < TrigChannels; i++) { trigTables.Add(new double[2] { 0, 0 }); if (trigType == TriggerType.PosTrig) //目前只有位置触发板卡支持点表模式 { for (j = 0; j < 2; j++) { err = HTM.SetPtTrigPos(devIndexes[i], j, trigTables[i][j]); if (err != 0) { throw new Exception(string.Format("HtmCompareTrigger.Open() failed By HTM.SetPtTrigPos(devIndexes = {0},ptIndex = {1},0) return Errorcode = {2}", devIndexes[i], j, err)); } } for (j = 0; j < 2; j++) { err = HTM.SetPtTrigEnable(devIndexes[i], j, 0); if (0 != err) { throw new Exception(string.Format("HtmCompareTrigger.Open() failed By HTM.SetPtTrigEnable(devIndexes = {0},j = {1},0) return Errorcode = {2}", devIndexes[i], j, err)); } } } HTM.TRIG_LINEAR tl = new HTM.TRIG_LINEAR() { startPos = 0, endPos = 0, interval = 1 }; err = HTM.SetLinTrigPos(devIndexes[i], ref tl); //if (0 != err) // throw new Exception(string.Format("HtmCompareTrigger.Open() failed By HTM.SetLinTrigPos(devIndexes = {0},TRIG_LINEAR =\"0,0,0\") return Errorcode = {1}", devIndexes[i], err)); err = HTM.SetLinTrigEnable(devIndexes[i], 0); //if (0 != err) // throw new Exception(string.Format("HtmCompareTrigger.Open() failed By HTM.SetLinTrigEnable(devIndexes = {0},0) return Errorcode = {1}", devIndexes[i], err)); trigModes.Add(JFCompareTrigMode.disable); trigLiners.Add(new JFCompareTrigLinerParam() { start = 0, interval = 0, repeats = 0 }); //trigEnables.Add(false); } IsOpen = true; }
/// <summary> /// 打开设备 /// </summary> public int OpenDevice() { lock (asynLocker) { if (!IsInitOK) { return((int)ErrorDef.InitFailedWhenOpen); } if (IsDeviceOpen) { return((int)ErrorDef.Success); } HTM.INIT_PARA initParam = new HTM.INIT_PARA(); initParam.para_file = config_file; initParam.use_aps_card = (byte)(Array.IndexOf(yesnoRange, use_aps_card) == 0?1:0); initParam.use_htnet_card = (byte)(Array.IndexOf(yesnoRange, use_htnet_card) == 0 ? 1 : 0); initParam.offline_mode = (byte)(Array.IndexOf(openModeRange, offline_mode)); initParam.max_axis_num = (ushort)max_axis_num; initParam.max_io_num = (ushort)max_io_num; initParam.max_dev_num = (ushort)max_dev_num; initParam.max_module_num = (ushort)max_module_num; initParam.language = 0; int nErr = 0; lock (HtmDllManager.AsynLocker) { if (HtmDllManager.OpendDevCount == 0) { HTM.Discard(); nErr = HTM.Init(ref initParam); if (nErr < 0) { return((int)ErrorDef.InvokeFailed); } } HtmDllManager.OpendDevCount++;//HtmDllManager.LightTrigOpend++; IsDeviceOpen = true; } nErr = HTM.SetLightTrigSrc((int)devIndex, 0); //关闭所有通道 if (0 != nErr) { throw new Exception("Turn off all channels failed when open HtmLightTrig devIndex = " + devIndex); } for (int i = 0; i < TrigChannelCount; i++) { srcChannels[i] = 0; channelEnables[i] = false; } nErr = HTM.SetLightTrigTime((int)devIndex, 0); if (0 != nErr) { throw new Exception("SetLightTrigTime(devIndex, 0) failed when open HtmLightTrig devIndex = " + devIndex); } trigDuration = 0; IsDeviceOpen = true; return((int)ErrorDef.Success); } }
public bool IsNL(int axis) { _CheckAxisEnable(axis, "IsNL"); return(HTM.GetMEL(axis) == 1); }