//using Broc.AOI.Entity; //using System; //using System.Collections.Generic; //using System.Runtime.InteropServices; //using System.Threading; //namespace Bro.Device.GTSCard //{ // public class GtsMotionCard // { // private const int dangliang = 1; // private object lockobj = new object();//线程锁 // /// // /// 初始化卡 // /// // /// // public bool InitCard() // { // short rtn; // rtn = GTSCardAPI.GT_Open(0, 0, 1); //打开运动控制器。参数必须为(0,1),不能修改。 // //rtn += mc.GT_Reset(0); // rtn += GTSCardAPI.GT_LoadConfig(0, AppDomain.CurrentDomain.BaseDirectory + @"Gts800.cfg"); // rtn += GTSCardAPI.GT_ClrSts(0, 1, 8); // return rtn == 0; // } // /// // /// 扩展模块初始化 // /// // /// // /// // public bool ExtIOModuleInit(short cardNum) // { // short rtn = 0; // rtn += GTSCardAPI.GT_OpenExtMdl(cardNum, "gts.dll"); // rtn += GTSCardAPI.GT_LoadExtConfig(cardNum, "ExtModule.cfg"); // rtn += GTSCardAPI.GT_ResetExtMdl(cardNum); // return rtn == 0; // } // /// // /// 回零 // /// // /// 卡号 // /// 轴号 // /// 轴回原点状态 // public bool GoHome(short cardNum, short axisNum, short home_mode, short home_dir, int homeoffset) // { // GTSCardAPI.GT_ZeroPos(cardNum, axisNum, 1); // GTSCardAPI.THomePrm thomeprm; // GTSCardAPI.THomeStatus homests; // short rtn = GTSCardAPI.GT_GetHomePrm(cardNum, axisNum, out thomeprm); // thomeprm.mode = home_mode;//回零方式 // thomeprm.moveDir = home_dir;//回零方向 // thomeprm.edge = 0; // thomeprm.velHigh = 50; // thomeprm.velLow = 50; // thomeprm.acc = 50; // thomeprm.dec = 50; // thomeprm.searchHomeDistance = 9999999;//搜搜距离 // thomeprm.homeOffset = 0; //偏移距离 // thomeprm.escapeStep = 1000; // rtn = GTSCardAPI.GT_GoHome(cardNum, axisNum, ref thomeprm); //启动回零 // //do // //{ // // mc.GT_GetHomeStatus(cardNum, axisNum, out homests);//获取回原点状态 // //} while (homests.run == 1); // 等待搜索原点停止 // //mc.GT_ZeroPos(cardNum, axisNum, 1); // //return true; // while (true) // { // Thread.Sleep(5); // GTSCardAPI.GT_GetHomeStatus(cardNum, axisNum, out homests); // if (homests.run == 0) // { // if (homests.error == 0) // { // Thread.Sleep(200); // GTSCardAPI.GT_ZeroPos(cardNum, axisNum, 1); // } // return true; // } // } // } // /// // /// 点位到点位 运动 // /// // /// 卡号 // /// 轴号 // /// 规划位置,单位毫米 // /// 规划速度,单位米每秒 // public void P2P(short cardNum, short axisNum, int prfPosition, int prfVelocity) // { // GTSCardAPI.TTrapPrm trapprm; // GTSCardAPI.GT_PrfTrap(cardNum, axisNum); // GTSCardAPI.GT_GetTrapPrm(cardNum, axisNum, out trapprm); // trapprm.acc = Parameter.p2pAcc; // trapprm.dec = Parameter.p2pDec; // trapprm.smoothTime = 1; // GTSCardAPI.GT_SetTrapPrm(cardNum, axisNum, ref trapprm); // GTSCardAPI.GT_SetPos(cardNum, axisNum, prfPosition * dangliang); // GTSCardAPI.GT_SetVel(cardNum, axisNum, prfVelocity * dangliang); // GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1)); // } // /// // /// 停止 // /// // /// // /// // /// 0表示平滑停止,1表示紧急停止 // public void Stop(short cardNum, short axisNum, short option) // { // GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), option); // } // /// // /// 停止 // /// // /// // /// 停止方式,false表示平滑停止,true表示紧急停止 // public void Stop(short cardNum, bool value) // { // for (short i = 1; i <= Axisn.Count; i++) // { // Stop(cardNum, i, value); // } // } // /// // /// Jog运动 // /// // /// // /// // /// 规划速度,单位米每秒 // public void Jog(short cardNum, short axisNum, double prfvel_ms) // { // GTSCardAPI.TJogPrm jogprm = new GTSCardAPI.TJogPrm(); // short rtn = GTSCardAPI.GT_PrfJog(cardNum, axisNum); // jogprm.acc = 1; // jogprm.dec = 1; // GTSCardAPI.GT_SetJogPrm(cardNum, axisNum, ref jogprm);//设置jog运动参数 // GTSCardAPI.GT_SetVel(cardNum, axisNum, prfvel_ms);//设置目标速度 // GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1));//更新轴运动 // } // /// // /// 读取输入 // /// // /// 卡号 // /// 输入口 // /// 有输入返回true,无输入返回false // public bool GetDi(short cardNum, short index) // { // int value; // GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_GPI, out value); // if ((value & 1 << index) == 0) return true;//有输入返回true // else return false; //无输入返回false // } // /// // /// 读取正限位 // /// // /// 卡号 // /// 轴号 // /// 0表示触发限位,1表示没有触发 // public bool GetPosLimit(short cardNum, short axisNum) // { // int value; // GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_LIMIT_POSITIVE, out value); // if ((value & 1 << axisNum) == 0) return true;////0表示触发限位,返回true, // else return false; // //1表示没有触发,返回false // } // /// // /// 读取负限位 // /// // /// 卡号 // /// 轴号 // /// 0表示触发限位,返回true,1表示没有触发,返回false // public bool GetNegLimit(short cardNum, short axisNum) // { // int value; // GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_LIMIT_NEGATIVE, out value); // if ((value & 1 << axisNum) == 0) return true;//0表示触发限位,返回true, // else return false; //1表示没有触发,返回false // } // /// // /// 输出 // /// // /// 卡号 // /// 输出口,返回1-16 // /// 0表示输出,1表示关闭 // public void WriteOut(short cardNumo, short index, bool value) // { // short outNum = 0; // outNum = (short)(index % 100 + 1); // switch (value) // { // case true: // { // GTSCardAPI.GT_SetDoBit(cardNumo, GTSCardAPI.MC_GPO, outNum, 0);//按位输出,0表示输出,1表示关闭 // } // break; // case false: // { // GTSCardAPI.GT_SetDoBit(cardNumo, GTSCardAPI.MC_GPO, outNum, 1);//按位输出,0表示输出,1表示关闭 // } // break; // } // } // /// // /// 读取IO输出状态 // /// // /// // /// // /// // public bool GetDoSts(short cardNumo, short index) // { // short outNum = 0; // int outSts; // outNum = (short)(index % 100); // GTSCardAPI.GT_GetDo(cardNumo, GTSCardAPI.MC_GPO, out outSts); // if ((outSts & (1 << outNum)) == 0) return true; // else return false; // } // /// // /// 读取当前值 // /// // /// 卡号 // /// 轴号 // /// 返回当前值,单位毫米 // public double GetPosMM(short cardNum, short axisNum) // { // lock (lockobj) // { // double prfpos = 0; uint pclock = 0; // GTSCardAPI.GT_GetPrfPos(cardNum, axisNum, out prfpos, 1, out pclock); // return prfpos / dangliang; // } // } // /// // /// 读取轴状态,判断电机是否停止 // /// // /// // /// // /// // public bool IsStop(short cardNum, short axisNum) // { // lock (lockobj) // { // int sts = 0; // uint pclock = 0; // GTSCardAPI.GT_GetSts(cardNum, axisNum, out sts, 1, out pclock); // if ((sts & 0x400) == 0) return true;//停止返回true // else return false; //运行中返回false // } // } // /// // /// 二维位置比较输出 // /// // /// // /// // public void Compare2DOutput(short cardNum, short chn, int[] output_data) // { // GTSCardAPI.GT_2DCompareClear(cardNum, chn); // GTSCardAPI.GT_2DCompareMode(cardNum, chn, GTSCardAPI.COMPARE2D_MODE_2D); // GTSCardAPI.GT_SetComparePort(cardNum, GTSCardAPI.COMPARE_PORT_GPO, 0, 1); // GTSCardAPI.T2DComparePrm Prm; // Prm.encx = 1; // Prm.ency = 2; // Prm.maxerr = 300; // Prm.outputType = 0; // Prm.source = 0; // Prm.startLevel = 0; // Prm.threshold = 10; // Prm.time = 10000; // GTSCardAPI.GT_2DCompareSetPrm(cardNum, chn, ref Prm); // GTSCardAPI.T2DCompareData[] pBuf = new GTSCardAPI.T2DCompareData[5]; // for (int i = 0; i < output_data.Length / 2; i += 2) // { // pBuf[i].px = 1000; // pBuf[i + 1].py = 1000; // } // GTSCardAPI.GT_2DCompareData(cardNum, chn, (short)(output_data.Length / 2), ref pBuf[0], 0); // GTSCardAPI.GT_2DCompareStart(cardNum, chn); // } // /// // /// 按位读取扩展IO输入口 // /// // /// // /// // /// // /// // public bool GetDiBit(short cardNum, short mdl, short index) // { // ushort pvalue = 0; // GTSCardAPI.GT_GetExtIoBit(cardNum, mdl, index, out pvalue); // return pvalue == 0; // } // /// // /// IO输出 // /// // /// 卡号 // /// 模块号 // /// IO输出 // /// true表示输出,false表示无输出 // public void MC_WriteDigitalOutput(short cardNum, short mdl, short index, bool value) // { // if (value) // { // GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 0); // } // else // { // GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 1); // } // } // /// // /// 建立插补坐标系 // /// // /// 坐标系号 // public void BuildCrd(short cardNum, short crdn, short axis_x, short axis_y, double maxVel, double maxAcc, short evenTime) // { // GTSCardAPI.TCrdPrm crdPrm; // crdPrm.dimension = 2; // crdPrm.synVelMax = maxVel; // crdPrm.synAccMax = maxAcc; // crdPrm.evenTime = evenTime; // crdPrm.profile1 = 1; // crdPrm.profile2 = 2; // crdPrm.profile3 = 0; // crdPrm.profile4 = 0; // crdPrm.profile5 = 0; // crdPrm.profile6 = 0; // crdPrm.profile7 = 0; // crdPrm.profile8 = 0; // crdPrm.setOriginFlag = 1; // crdPrm.originPos1 = 0; // crdPrm.originPos2 = 0; // crdPrm.originPos3 = 0; // crdPrm.originPos4 = 0; // crdPrm.originPos5 = 0; // crdPrm.originPos6 = 0; // crdPrm.originPos7 = 0; // crdPrm.originPos8 = 0; // GTSCardAPI.GT_SetCrdPrm(cardNum, crdn, ref crdPrm); // GTSCardAPI.GT_CrdClear(cardNum, crdn, 0); // GTSCardAPI.GT_ClrSts(cardNum, 1, 4); // } // /// // /// 直线插补 // /// // /// // public void LnXY(short cardNum, short crdn, short fifon, int[] data, double vel, double prfacc, double endVel) // { // short run; // int segment; // for (int i = 0; i < data.Length; i += 2) // { // run = GTSCardAPI.GT_LnXY(cardNum, crdn, data[i], data[i + 1], vel, prfacc, endVel, fifon); // } // run = GTSCardAPI.GT_CrdStart(cardNum, crdn, 0); // //while (true) // //{ // // mc.GT_CrdStatus(cardNum, crdn, out run, out segment, fifon); // // if (run == 0) // // { // // break; // // } // //} // } // /// // /// 以圆心做圆弧插补 // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // public void ArcXYC(short cardNum, short crdn, short fifon, int[] data, double xCenter, double yCenter, short dir, double vel, double prfacc, double endVel) // { // short run; // int segment; // for (int i = 0; i < data.Length; i += 2) // { // GTSCardAPI.GT_ArcXYC(cardNum, crdn, data[i], data[i + 1], xCenter, yCenter, dir, vel, prfacc, endVel, fifon); // } // GTSCardAPI.GT_CrdStart(cardNum, crdn, 0); // while (true) // { // GTSCardAPI.GT_CrdStatus(cardNum, crdn, out run, out segment, fifon); // if (run == 0) // { // break; // } // } // } // /// // /// 以半径做圆弧插补 // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // public void ArcXYR(short cardNum, short crdn, short fifon, int[] data, double rad, short dir, double vel, double prfacc, double endVel) // { // short run; // int segment; // for (int i = 0; i < data.Length; i += 2) // { // GTSCardAPI.GT_ArcXYR(cardNum, crdn, data[i], data[i + 1], rad, dir, vel, prfacc, endVel, fifon); // } // GTSCardAPI.GT_CrdStart(cardNum, crdn, 0); // while (true) // { // GTSCardAPI.GT_CrdStatus(cardNum, crdn, out run, out segment, fifon); // if (run == 0) // { // break; // } // } // } // /// // /// 停止运动 // /// // /// // /// 轴号 // /// 停止方式,false表示平滑停止,true表示紧急停止 // public void Stop(short cardNum, short axisNum, bool value) // { // switch (value) // { // case false: // { // GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 0); // } // break; // case true: // { // GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 1 << (axisNum - 1)); // } // break; // } // } // /// // /// 是否报警 // /// bit 0-光栅,bit 1-门开关,bit 2-急停 // /// 1100 0000 0101 // /// // /// // public bool IsAlarm() // { // GTSCardAPI.GT_GetDi(Parameter.cardNum, GTSCardAPI.MC_GPI, out var input); // var bRet = // ((input & (1 << Parameter.EXI6)) >> Parameter.EXI6) == 1 || // //((input & (1 << GlueInCommands.EXI1)) >> GlueInCommands.EXI1) == 0 || todo // ((input & (1 << Parameter.EXI4)) >> Parameter.EXI4) == 1; // //var bRet = isAlarm || // // ((input & (1 << Parameter.EXI6)) >> Parameter.EXI6) == 1 || // // //((input & (1 << GlueInCommands.EXI1)) >> GlueInCommands.EXI1) == 0 || todo // // ((input & (1 << Parameter.EXI4)) >> Parameter.EXI4) == 1; // return bRet; // } // } //}