using Bro.Common.Base; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Bro.Device.GTSCard { public class GTSCardDriver : DeviceBase, IMotion { public List GetCurrentAxisInfo(params string[] axisName) { throw new NotImplementedException(); } protected override void Init() { throw new NotImplementedException(); } protected override void Pause() { throw new NotImplementedException(); } protected override void Resume() { throw new NotImplementedException(); } protected override void Start() { throw new NotImplementedException(); } protected override void Stop() { throw new NotImplementedException(); } /// /// 点位到点位 运动 /// /// 卡号 /// 轴号 /// 规划位置,单位毫米 /// 规划速度,单位米每秒 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 = GTSCardParameter.P2PAcc; trapprm.dec = GTSCardParameter.P2PDec; trapprm.smoothTime = 1; GTSCardAPI.GT_SetTrapPrm(cardNum, axisNum, ref trapprm); GTSCardAPI.GT_SetPos(cardNum, axisNum, prfPosition * GTSCardParameter.Dangliang); GTSCardAPI.GT_SetVel(cardNum, axisNum, prfVelocity * GTSCardParameter.Dangliang); GTSCardAPI.GT_Update(cardNum, 1 << (axisNum - 1)); } /// /// Jog运动 /// /// /// /// 规划速度,单位米每秒 public void Jog(short cardNum, short axisNum, double velocity) { 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, velocity);//设置目标速度 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 } /// /// 输出 /// /// 卡号 /// 输出口,返回1-16 /// 0表示输出,1表示关闭 public void WriteOut(short cardNumo, short index, bool value) { short 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; } } /// /// 停止 某个轴 /// /// /// /// 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, 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; } } /// /// 停止 全部轴 /// /// /// 停止方式,false表示平滑停止,true表示紧急停止 public void StopAll(short cardNum, bool value) { for (short i = 1; i <= GTSCardParameter.AxisCount; i++) { Stop(cardNum, i, value); } } /// /// 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); } } /// /// 读取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; } static object lockObj = new object(); /// /// 读取当前值 /// /// 卡号 /// 轴号 /// 返回当前值,单位毫米 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 / GTSCardParameter.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 } } } }