Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 static HtmDllManager()
 {
     HTM.GetInitPara(out _initParam);
 }
Ejemplo n.º 6
0
 public int GetFbkPos(int axis, out double fbkPos)
 {
     _CheckAxisEnable(axis, "GetFbkPos");
     fbkPos = HTM.GetFbkPos(axis);
     return((int)ErrorDef.Success);
 }
Ejemplo n.º 7
0
 public int GetPulseFactor(int axis, out double fact)
 {
     _CheckAxisEnable(axis, "GetPulseFactor");
     fact = HTM.GetPulseFactor(axis);
     return((int)ErrorDef.Success);
 }
Ejemplo n.º 8
0
 public bool IsORG(int axis)
 {
     _CheckAxisEnable(axis, "IsORG");
     return(HTM.GetMotionIO(axis, HTM.MotionIO.ORG) == 1);
 }
Ejemplo n.º 9
0
 public bool IsSNL(int axis)
 {
     _CheckAxisEnable(axis, "IsSNL");
     return(HTM.GetMotionIO(axis, HTM.MotionIO.SMEL) == 1);
 }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 public bool IsINP(int axis)
 {
     _CheckAxisEnable(axis, "IsINP");
     return(HTM.GetINP(axis) == 1);
 }
Ejemplo n.º 12
0
 public bool IsMDN(int axis)
 {
     _CheckAxisEnable(axis, "IsMDN");
     return(HTM.OnceDone(axis) == 1);
 }
Ejemplo n.º 13
0
 public bool IsSVO(int axis)
 {
     _CheckAxisEnable(axis, "IsSVO");
     return(HTM.GetSVON(axis) == 1);//GetMotionIO(axis, MotionIO.SVON) == 1;
 }
Ejemplo n.º 14
0
 public bool IsALM(int axis)
 {
     _CheckAxisEnable(axis, "IsAlarm");
     return(HTM.GetAlarm(axis) == 1);//.GetMotionIO(axis, MotionIO.ALM) == 1;
 }
Ejemplo n.º 15
0
        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;
        }
Ejemplo n.º 16
0
        /// <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);
            }
        }
Ejemplo n.º 17
0
 public bool IsNL(int axis)
 {
     _CheckAxisEnable(axis, "IsNL");
     return(HTM.GetMEL(axis) == 1);
 }