using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ges
{
class GES
{
public struct TDoublePnt
{
public double X;
public double Y;
public double Z;
public double W;
}
#region 设置运动控制器
///
/// 打开运动控制器
///
///
///
[DllImport("ges.dll")]
public static extern short GT_Open(int address = 65535);
///
/// 关闭运动控制器
///
///
[DllImport("ges.dll")]
public static extern short GT_Close();
///
/// 复位运动控制器
///
///
[DllImport("ges.dll")]
public static extern short GT_Reset();
///
/// 硬件复位运动控制器
///
///
[DllImport("ges.dll")]
public static extern short GT_HardRst();
///
/// 挂接用户自定义处理函数
///
/// 所挂接的指令处理程序的地址
///
[DllImport("ges.dll")]
public static extern short GT_HookCommand(int TCommandHandle);
#endregion
#region 设置控制轴在这里插入代码片
///
/// 控制轴驱动报警有效
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_AlarmOn(short axis);
///
/// 控制轴驱动报警信号无效
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_AlarmOff(short axis);
///
/// 控制轴限位信号有效
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_LmtsOn(short axis);
///
/// 控制轴限位无效
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_LmtsOff(short axis);
///
/// 设置运动控制器各轴限位开关触发电平(默认为0,高电平触发 )
///
/// 电平信号
///
[DllImport("ges.dll")]
public static extern short GT_LmtSns(short sense);
///
/// 控制轴编码器的记数方向
///
/// 记数方向
///
[DllImport("ges.dll")]
public static extern short GT_EncSns(short sense);
///
/// 运动控制器各轴Home信号触发沿(默认为0,下降沿触发)
///
/// 电平方向
///
[DllImport("ges.dll")]
public static extern short GT_HomeSns(short sense);
///
/// 轴为模拟量输出或脉冲输出
///
/// 指定控制轴编号
/// 模式
///
[DllImport("ges.dll")]
public static extern short GT_CtrlMode(short axis, short mode);
///
/// 轴的脉冲输出模式设置为“脉冲+方向”
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_StepDir(short axis);
///
/// 将指定控制轴的脉冲输出方式设置为“正负脉冲”
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_StepPulse(short axis);
///
/// 消除指定控制轴的伺服报警信号
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_DrvRst(short axis);
///
/// 打开控制轴的编码器输入
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_EncOn(short axis);
///
/// 关闭控制轴的编码器输入
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_EncOff(short axis);
#endregion
#region 设置控制轴运动参数
///
/// 将指定控制轴的实际位置、目标位置和规划位置设置为 0
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_ZeroPos(short axis);
///
/// 将指定控制轴的实际位置、目标位置和规划位置设置为指定值
///
/// 指定控制轴编号
///
///
[DllImport("ges.dll")]
public static extern short GT_SetAtlPos(short axis, double pos);
///
/// 读取指定控制轴的实际位置
///
/// 指定控制轴编号
/// 读取指定控制轴的实际位置
///
[DllImport("ges.dll")]
public static extern short GT_GetAtlPos(short axis, out int pos);
///
/// 获得轨迹运动中各轴的规划位置值
///
/// 各轴的内部计数值
///
[DllImport("ges.dll")]
public static extern short GT_GetPrfPnt(out TDoublePnt point);
///
/// 读取断点位置信息
///
/// 断点的位置
///
[DllImport("ges.dll")]
public static extern short GT_GetBrkPnt(out TDoublePnt point);
///
/// 读取指定控制轴的规划速度
///
/// 指定控制轴编号
/// 读取指定控制轴的规划速度
///
[DllImport("ges.dll")]
public static extern short GT_GetPrfVel(short axis, out double vel);
#endregion
#region 设置控制轴控制参数
///
/// 设置指定控制轴的误差比例增益
///
/// 指定控制轴编号
/// 设置指定控制轴的误差比例增益
///
[DllImport("ges.dll")]
public static extern short GT_SetKp(short axis, double kp);
///
/// 读取指定控制轴的误差增益
///
/// 指定控制轴编号
/// 读取指定控制轴的误差比例增益
///
[DllImport("ges.dll")]
public static extern short GT_GetKp(short axis, out double kp);
///
/// 设置指定控制轴的误差积分增益
///
/// 指定控制轴编号
/// 设置指定控制轴的误差积分增益
///
[DllImport("ges.dll")]
public static extern short GT_SetKi(short axis, double ki);
///
/// 读取指定控制轴的误差积分增益
///
/// 指定控制轴编号
/// 读取指定控制轴的误差积分增益
///
[DllImport("ges.dll")]
public static extern short GT_GetKi(short axis, out double ki);
///
/// 设置指定控制轴的误差微分增益
///
/// 指定控制轴编号
/// 设置指定控制轴的误差微分增益
///
[DllImport("ges.dll")]
public static extern short GT_SetKd(short axis, double kd);
///
/// 设置指定控制轴的误差微分增益
///
/// 指定控制轴编号
/// 设置指定控制轴的误差微分增益
///
[DllImport("ges.dll")]
public static extern short GT_GetKd(short axis, out double kd);
///
/// 设置指定控制轴的速度前馈系数
///
/// 指定控制轴编号
/// 设置指定控制轴的速度前馈系数
///
[DllImport("ges.dll")]
public static extern short GT_SetKvff(short axis, double kvff);
///
/// 设置指定控制轴的速度前馈系数
///
/// 指定控制轴编号
/// 设置指定控制轴的速度前馈系数
///
[DllImport("ges.dll")]
public static extern short GT_GetKvff(short axis, out double kvff);
///
/// 设置指定控制轴的加速度前馈系数
///
/// 指定控制轴编号
/// 设置指定控制轴的加速度前馈系数
///
[DllImport("ges.dll")]
public static extern short GT_SetKaff(short axis, double kaff);
///
/// 读取指定控制轴的加速度前馈系数
///
/// 指定控制轴编号
/// 读取指定控制轴的加速度前馈系数
///
[DllImport("ges.dll")]
public static extern short GT_GetKaff(short axis, out double kaff);
///
/// 设置指定控制轴的零漂电压补偿
///
/// 指定控制轴编号
/// 设置指定控制轴的零漂电压补偿值
///
[DllImport("ges.dll")]
public static extern short GT_SetMtrBias(short axis, short bias);
///
/// 读取指定控制轴的零漂电压补偿
///
/// 指定控制轴编号
/// 读取指定控制轴的零漂电压补偿值
///
[DllImport("ges.dll")]
public static extern short GT_GetMtrBias(short axis, out short bias);
///
/// 读取指定控制轴的零漂电压补偿
///
/// 指定控制轴编号
/// 读取指定控制轴的零漂电压补偿值
///
[DllImport("ges.dll")]
public static extern short GT_SetMtrLmt(short axis, short limit);
///
/// 读取指定控制轴的输出电压饱和极限
///
/// 指定控制轴编号
/// 读取指定控制轴的输出电压饱和极限
///
[DllImport("ges.dll")]
public static extern short GT_GetMtrLmt(short axis, out short limit);
///
/// 设置指定控制轴的误差积分饱和极限
///
/// 指定控制轴编号
/// 设置指定控制轴的误差积分饱和极限
///
[DllImport("ges.dll")]
public static extern short GT_SetILmt(short axis, short limit);
///
/// 读取指定控制轴的误差积分极限
///
/// 指定控制轴编号
/// 读取指定控制轴的误差积分饱和极限
///
[DllImport("ges.dll")]
public static extern short GT_GetILmt(short axis, out short limit);
///
/// 设置指定控制轴的跟随误差极限
///
/// 指定控制轴编号
/// 设置指定控制轴的跟随误差极限
///
[DllImport("ges.dll")]
public static extern short GT_SetPosErr(short axis, short err);
///
/// 读取指定控制轴的跟随误差极限
///
/// 指定控制轴编号
/// 读取指定控制轴的跟随误差极限
///
[DllImport("ges.dll")]
public static extern short GT_GetPosErr(short axis, out short err);
#endregion
#region 控制轴运动控制指令
///
/// 使能指定控制轴
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_AxisOn(short axis);
///
/// 关闭指定控制轴所连电机的伺服使能信号
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_AxisOff(short axis);
///
/// 使指定控制轴参数生效
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_Update(short axis);
///
/// 多个控制轴参数(包括运动参数和控制参数)刷新
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_MltiUpdt(short mk);
#endregion
#region 连续轨迹运动指令
///
/// 实现二维直线插补运动
///
///
///
///
[DllImport("ges.dll")]
public static extern short GT_LnXY(double X, double y);
///
/// 实现二维直线插补运动
///
///
///
///
[DllImport("ges.dll")]
public static extern short GT_LnXYG0(double X, double y);
///
/// 实现三维直线插补运动
///
///
///
///
///
[DllImport("ges.dll")]
public static extern short GT_LnXYZ(double X, double Y, double Z);
///
/// 实现三维直线插补运动
///
///
///
///
///
[DllImport("ges.dll")]
public static extern short GT_LnXYZG0(double X, double Y, double Z);
///
/// 实现四维直线插补运动
///
///
///
///
///
///
[DllImport("ges.dll")]
public static extern short GT_LnXYZA(double X, double Y, double Z, double a);
///
/// 四维直线插补
///
///
///
///
///
///
[DllImport("ges.dll")]
public static extern short GT_LnXYZAG0(double X, double Y, double Z, double a);
///
/// 实现 XOY 平面内的两轴圆弧插补
///
/// 圆弧
/// 圆心
/// 旋转角度
///
[DllImport("ges.dll")]
public static extern short GT_ArcXY(double x_center, double y_center, double angle);
///
/// 实现 XOY 平面内的两轴圆弧插补
///
/// 圆弧终点位置
/// 圆弧终点位置
/// 圆弧半径并带符号
/// 圆弧旋转方向
///
[DllImport("ges.dll")]
public static extern short GT_ArcXYP(double x_end, double y_end, double R, short Direction);
///
/// 令实现 YOZ 平面内的两轴圆弧插补
///
/// 圆弧圆心位置
/// 圆弧圆心位置
/// 旋转角度
///
[DllImport("ges.dll")]
public static extern short GT_ArcYZ(double y_center, double z_center, double angle);
/************GE300SX only***************/
///
/// 实现 YOZ 平面内的两轴圆弧插补
///
/// 圆弧圆心位置
/// 圆弧圆心位置
/// 圆弧半径并带符号
/// 圆弧旋转方向
///
[DllImport("ges.dll")]
public static extern short GT_ArcYZP(double y_end, double z_end, double R, short dirction);
///
/// 实现 ZOX 平面内的两轴圆弧插补
///
/// 圆弧圆心位置
/// 圆弧圆心位置
/// 旋转角度
///
[DllImport("ges.dll")]
public static extern short GT_ArcZX(double z_center, double x_center, double angle);
///
/// 实现 ZOX 平面内的两轴圆弧插补
///
/// 圆弧终点位置
/// 圆弧终点位置
/// 圆弧半径并带符号
/// 圆弧旋转方向
///
[DllImport("ges.dll")]
public static extern short GT_ArcZXP(double z_end, double x_end, double R, short dirction);
///
/// 设置轨迹段的进给速度
///
/// 设定的轨迹运动的进给速度值
///
[DllImport("ges.dll")]
public static extern short GT_SetSynVel(double vel);
///
/// 设置连续轨迹运动的进给加速度
///
/// 设定的进给加速度值
///
[DllImport("ges.dll")]
public static extern short GT_SetSynAcc(double acc);
///
/// 设定连续轨迹运动的启动速度
///
/// 启动速度值
///
[DllImport("ges.dll")]
public static extern short GT_SetStrtVel(double vel);
///
/// 设定系统的停止加速度
///
/// 停止加速度值
///
[DllImport("ges.dll")]
public static extern short GT_SetStpAcc(double acc);
///
/// 设定系统最高运行速度
///
/// 设定控制卡最高运行速度
///
[DllImport("ges.dll")]
public static extern short GT_SetMaxVel(double vel);
///
/// 设置除 GT_LnXYG0、GT_LnXYZG0、GT_LnXYZAG0 以及定位指令以外的轨迹描述指令所产生运动的速度倍率
///
/// 设置的速度倍率
///
[DllImport("ges.dll")]
public static extern short GT_Override(double override1);
///
/// 设置 GT_LnXYG0、GT_LnXYZG0、GT_LnXYZAG0 以及定位指令的速度倍率
///
/// 设置的速度倍率
///
[DllImport("ges.dll")]
public static extern short GT_OverrideG0(double override1);
///
/// 按照设定的进给加速度停止轨迹运动
///
///
[DllImport("ges.dll")]
public static extern short GT_StpMtn();
///
/// 紧急停止连续轨迹运动
///
///
[DllImport("ges.dll")]
public static extern short GT_EStpMtn();
///
/// 设置坐标偏移量
///
/// 指定控制轴编号
/// 设定要偏移的脉冲数
///
[DllImport("ges.dll")]
public static extern short GT_MapCnt(short axis, double count);
#endregion
#region 缓冲区管理指令
///
/// 打开并清空缓冲区
///
///
[DllImport("ges.dll")]
public static extern short GT_StrtList();
///
/// 定义二维连续轨迹的缓冲区命令的起点位置
///
/// 起点位置
/// 起点位置
/// 设定进给速度
/// 设定进给加速度
///
[DllImport("ges.dll")]
public static extern short GT_MvXY(double X, double Y, double vel, double acc);
///
/// 定义三维连续轨迹的缓冲区命令的起点位置
///
///
///
///
/// 设定进给速度
/// 设定进给加速度
///
[DllImport("ges.dll")]
public static extern short GT_MvXYZ(double X, double Y, double Z, double vel, double acc);
///
/// 定义四维连续轨迹的缓冲区命令的起点位置
///
///
///
///
///
/// 设定进给速度
/// 设定进给加速度
///
[DllImport("ges.dll")]
public static extern short GT_MvXYZA(double X, double Y, double Z, double a, double vel, double acc);
///
/// 在缓冲区命令输入状态下,调用本指令结束缓冲区命令输入状态
///
///
[DllImport("ges.dll")]
public static extern short GT_EndList();
///
/// 重新打开被关闭的缓冲区
///
///
[DllImport("ges.dll")]
public static extern short GT_AddList();
///
/// 启动缓冲区连续轨迹运动
///
///
[DllImport("ges.dll")]
public static extern short GT_StrtMtn();
///
/// 在缓冲区运动暂停后,使用此命令可使中断的运动从断点处继续运动
///
///
[DllImport("ges.dll")]
public static extern short GT_RestoreMtn();
///
/// 返回当前缓冲区中正在执行的轨迹段编号
///
/// 返回轨迹段编号
///
[DllImport("ges.dll")]
public static extern short GT_GetMtnNm(out short number);
#endregion
#region 状态检测
///
/// 读取指定控制轴的状态寄存器
///
/// 指定控制轴编号
/// 读取指定控制轴的状态寄存器
///
[DllImport("ges.dll")]
public static extern short GT_GetSts(short axis, out short status);
///
/// 确定指令执行出错的原因
///
/// 读取指令执行出错原因
///
[DllImport("ges.dll")]
public static extern short GT_GetCmdSts(out short status);
///
/// 该指令获得轨迹运动状态
///
/// 返回该状态
///
[DllImport("ges.dll")]
public static extern short GT_GetCrdSts(out short status);
///
/// 将指定控制轴状态寄存器的 bit0~7 清 0,其它状态位不受影响
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_ClrSts(short axis);
///
/// 将指定控制轴状态寄存器的指定状态位清 0
///
/// 指定控制轴编号
/// 指定清除指定控制轴状态寄存器的哪些状态位
///
[DllImport("ges.dll")]
public static extern short GT_RstSts(short axis, short mk);
#endregion
#region Home/Index捕获
///
/// 将指定控制轴的位置捕获设置为由 Home 信号触发
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_CaptHome(short axis);
///
/// 将指定控制轴的位置捕获设置为由编码器 C 相脉冲信号或者光栅尺的Index 信号触发
///
/// 指定控制轴编号
///
[DllImport("ges.dll")]
public static extern short GT_CaptIndex(short axis);
///
/// 该函数设置捕获探针输入信号事件
///
///
[DllImport("ges.dll")]
public static extern short GT_CaptProb();
///
/// 读取指定控制轴的 Home 信号或者 Index 信号触发时,其实际位置捕获值
///
/// 指定控制轴编号
/// 读取指定控制轴的捕获位置
///
[DllImport("ges.dll")]
public static extern short GT_GetCapt(short axis, out int pos);
#endregion
#region 数字I/O
///
/// 读取 16 路通用数字量输入
///
/// 读取 16 路通用数字 I/O 的输入信号
///
[DllImport("ges.dll")]
public static extern int GT_ExInpt(out int ninput);
///
/// 设置 16 路通用数字量输出
///
/// 设置 16 路通用数字 I/O 的输出信号
///
[DllImport("ges.dll")]
public static extern short GT_ExOpt(ushort value);
///
/// 设置 16 路通用数字量单个I/O输出
///
/// I/O引脚
/// 设置单个数字 I/O 的输出信号
///
[DllImport("ges.dll")]
public static extern short GT_ExOptBit(short bit, ushort value);
///
/// 读取运动控制器 Home 开关的状态
///
/// 读取各轴原点开关的电平状态
///
[DllImport("ges.dll")]
public static extern short GT_GetHomeSwt(out short home);
///
/// 读取运动控制器各轴的限位开关状态
///
/// 读取各轴正负限位开关的电平状态
///
[DllImport("ges.dll")]
public static extern short GT_GetLmtSwt(out short limit);
///
/// 在缓冲区方式下,控制通用 IO 的输出
///
/// 表示 16 位通用 IO 输出的状态
///
[DllImport("ges.dll")]
public static extern short GT_BufIO(short value);
///
/// 在缓冲区方式下,设置指定的通用输出端口的高低电平状态
///
/// 表示指定的通用输出位通道
/// 表示指定的通用输出的状态(只能为“0”或者“1”
///
[DllImport("ges.dll")]
public static extern short GT_BufIOBit(short bit, short status);
#endregion
#region 运动速度控制指令
///
/// 设定线段的终点位置
///
/// 设定轨迹段终点速度
///
[DllImport("ges.dll")]
public static extern short GT_SetDccVel(double vel);
#endregion
#region 前瞻预处理指令
///
/// 将数据发送到预处理缓冲区
///
/// 曲线类型
/// 平面代码
/// 圆弧半径
/// 坐标X位置
/// 坐标Y位置
/// 坐标Z位置
/// 当前段目标速度
/// 圆弧位置
/// 圆心位置
/// 压入到缓冲区的具体位置
/// 当前段的标识
/// 当前段是否降速到0
///
[DllImport("ges.dll")]
public static extern short GT_AddLookData(byte Code, byte PlaneGroup, double R, double X, double Y, double Z, double vel, double Cx, double Cy, short i, int n, short flag);
///
/// 计算预处理缓冲区中当前轨迹段的终点速度
///
/// 返回终点速度
/// 对应的用户加工代码段号
///
[DllImport("ges.dll")]
public static extern short GT_CalVel(out double vel, out int number);
///
/// 初始化预处理功能模块的各项参数
///
/// 拐弯时间
/// 系统能承受的最大加速度
/// 系统设定加速度
/// 用户加工的目标速度
/// 需预处理的段数
/// 脉冲数与标准长度单位对应值
///
[DllImport("ges.dll")]
public static extern short GT_InitLookAhead(double T, double acc_max, double acc, double vel, short n, double con);
#endregion
#region 辅助编码器指令
///
/// 该指令用来读取辅助编码器实际位置值
///
/// 表示需要读取的辅助编码器号
/// 读取指定辅助编码器的实际位置
///
[DllImport("ges.dll")]
public static extern short GT_EncPos(short axis, out int pos);
///
/// 获取当前运动控制器的卡号
///
///
[DllImport("ges.dll")]
public static extern short GT_GetCurrentCardNo();
///
/// 该指令用于切换当前运动控制器卡号
///
/// 将被设为当前运动控制器的卡号
///
[DllImport("ges.dll")]
public static extern short GT_SwitchtoCardNo(short number);
#endregion
#region 手脉控制指令(可选)
///
/// 手脉功能
///
/// 指定要跟随手脉运动的轴号
/// 设定跟随轴的倍率
///
[DllImport("ges.dll")]
public static extern short GT_HandWheel(short axis, double value);
///
/// 使处于手脉控制模式的控制轴退出手脉控制模式
///
///
[DllImport("ges.dll")]
public static extern short GT_ExitHWheel();
#endregion
#region 主轴控制指令(可选)
///
/// 关闭主轴信号输出
///
///
[DllImport("ges.dll")]
public static extern short GT_CloseSpindle();
///
/// 设定主轴转速并开始主轴运动
///
///
///
[DllImport("ges.dll")]
public static extern short GT_SetSpindleVel(short value);
#endregion
#region A/D(可选)
///
/// 运动控制器提供了 8 路 12 位精度的外部模拟电压输入通道
///
/// 指定模拟电压输入通道
/// 读取指定输入通道的模拟电压
///
[DllImport("ges.dll")]
public static extern short GT_GetAdc(short channel, out short D_data);
///
/// 设置 A/D 通道数目,用来提高 A/D 的采样频率
///
/// 通道数
///
[DllImport("ges.dll")]
public static extern short GT_SetAdcChn(short value);
#endregion
}
}