//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;
// }
// }
//}