You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1311 lines
65 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace ocean
{//运动控制模块
public enum EDevStatus
{//对象状态
EDev_NOINIT = 0, //未初始化
EDev_ERROR, //异常
EDev_IDLE, //就绪
EMove_NOHOME = 3, //未回原
EMove_STOP, //停止状态 -- 异常停止,限位停止
EMove_ISMOVING, //运动中
EMove_ISHOME, //回原中
EMove_PAUSE, //暂停
EMove_PAUSING, //正在暂停
EMove_STOPING, //正在停止
};
public enum EIOType
{//IO类型
IOT_COMIN = 0, //通用输入
IOT_COMOUT, //通用输出
IOT_LIMITP, //正限位
IOT_LIMITN, //负限位
IOT_ALARM, //报警
IOT_HOME, //原点
IOT_SEVON, //使能
IOT_CLEARALARM, //清除报警
};
public enum EMPosType
{//轴位置类型
EMPos_Default = -1, //默认位置 伺服-编码器 步进-规划器
EMPos_Encoder, //编码器位置
EMPos_Profile, //规划器位置
};
public enum EMIOSYSType
{//系统IO类型
IOS_Normal = 0, //普通IO
IOS_START, //启动
IOS_RESET, //复位
IOS_ESTOP, //急停
IOS_PAUSE, //暂停
IOS_STOP, //停止
IOS_BRAKE, //刹车
};
public enum EMAxisType
{//轴类型
EAXIS_SERVO = 0, //伺服
EAXIS_STEPPER, //步进电机
EAXIS_FLOW, //旋转电机,每次运动清零位置 - 不需要回原
EAXIS_ABSSERVO, //绝对值编码器 - 可以不回原
};
public enum EMAxisDir
{//轴方向
EAXIS_X = 0, //横向
EAXIS_Y, //纵向
EAXIS_Z, //上下
EAXIS_U, //平面旋转
EAXIS_V, //横向旋转
EAXIS_W, //纵向旋转
};
public enum EMHomeType
{//回原方式
EHOME_LIMITN = 0, //先回负限位
EHOME_LIMITP, //先回正限位
EHOME_HOMEP, //找原点再精确回原
EHOME_IOHOME, //IO控制回原
EHOME_GOHOME, //直接精确回原
EHOME_NOHOME, //不回原,直接以当前位置为原点
};
public enum EMIOVAL
{//IO操作
IOFF = 0, //关闭
ION, //打开
};
public enum EMDir
{//运动方向
DirN = 0, //负方向
DirP, //正方向
};
public struct TPoint
{//点位
public int index; //点索引
public int reserved; //保留字符保证按8位对齐
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name; //点名称
public double x; //分别为x,y,z,u,v,w的坐标值
public double y;
public double z;
public double u;
public double v;
public double w;
};
public struct TLicenseInfo
{//许可信息
public int dyn; //8位动态机器码
public int perdate; //有效期 20181212 0标识无效
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string hd;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string cpu;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string mac;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sn; //机器码
};
public struct TVisionResult
{//视觉结果结构体
public int res; //结果 0 - ok
public int resCnt; //结果个数
public double v1; //结果
public double v2;
public double v3;
public double v4;
public double v5;
public double v6;
public double v7;
public double v8;
public double v9;
public double v10;
public double v11;
public double v12;
public double v13;
public double v14;
public double v15;
public double v16;
};
#region nouse
public struct TCard
{//卡数据结构
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string dev;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] param; //初始化参数
public int cid; //卡ID
public UInt16 axisCnt; //轴数量 motor-轴/专用IO数量
public UInt16 ioCnt; //io-通用IO位数
public UInt16 adCnt; //ad-通道数量
public UInt16 reserved1; //备用1
public UInt16 reserved2; //备用2
public UInt16 reserved3; //备用3
};
#endregion
//底层插件注册接口
#region register_dll
//初始化 index 卡序号 ctx字符串参数 函数指针委托说明
public delegate int fun_init(ushort index, string ctx);
public delegate int fun_deinit(ushort index);
public delegate int fun_get_status(ushort index);
public delegate int fun_get_cmd_info(IntPtr pszcmddesc);
public delegate int fun_send_msg(ushort index, string msg, IntPtr res);
public delegate int fun_recv_msg(ushort index, string msg, IntPtr res, int timeout);
//控制卡底层继承类接口声明 -- 轴接口
public delegate int fun_axis_reset(ushort index, ushort axisIndex);
public delegate int fun_axis_home(ushort index, ushort axisIndex, ushort homeType, double pos, double offset, double vel);
public delegate int fun_axis_zero_pos(ushort index, ushort axisIndex);
public delegate int fun_axis_is_moving(ushort index, ushort axisIndex);
public delegate int fun_axis_set_speed(ushort index, ushort axisIndex, double vel, double acc, double dec);
public delegate int fun_axis_set_pos(ushort index, ushort axisIndex, double pos);
public delegate int fun_axis_stop(ushort index, ushort axisIndex, int type); //1急停 0平滑停止
//点位运动
public delegate int fun_axis_move_pos(ushort index, ushort axisIndex, double pos, double vel, double acc, double dec);
public delegate int fun_axis_move_offset(ushort index, ushort axisIndex, double offset, double vel, double acc, double dec);
public delegate int fun_axis_move_jog(ushort index, ushort axisIndex, int dir, double vel, double acc, double dec);
//轴输入输出
public delegate int fun_axis_read(ushort index, ushort axisIndex, int dio_type);
public delegate int fun_axis_write(ushort index, ushort axisIndex, ushort val, int do_type);
public delegate int fun_axis_get_pos(ushort index, ushort axisIndex, int postype, ref double pval);
//插补
//创建坐标系成功返回坐标系ID>0 失败返回错误代码
public delegate int fun_create_crd(ushort index, IntPtr pAxisIndex, ushort nsize); //pAxisIndex -- ushort[]
public delegate int fun_add_line_pos(int crd, IntPtr ppos, ushort nsize, double vel, double acc, double endvel); //ppos -- double[]
public delegate int fun_add_arc_pos(int crd, IntPtr ppos1, IntPtr ppos2, IntPtr ppos3, ushort nsize, double vel, double acc, double endvel);
public delegate int fun_crd_move(int crd);
public delegate int fun_crd_is_moving(int crd, IntPtr progress); //int*
public delegate int fun_close_crd(int crd);
//控制卡底层继承类接口声明 -- IO接口
public delegate int fun_read_in(ushort index, ushort in_index);
public delegate int fun_read_out(ushort index, ushort out_index);
public delegate int fun_write_out(ushort index, ushort out_index, ushort val);
//控制卡底层继承类接口声明 -- AD接口
public delegate int fun_read_ad(ushort index, ushort ad_index, IntPtr pVal); //double*
public delegate int fun_write_ad(ushort index, ushort ad_index, double val);
public struct MotorFun
{//回调函数列表
public fun_init funinit;
public fun_deinit fundeinit;
public fun_get_status funstatus;
public fun_send_msg funsend;
public fun_recv_msg funrecv;
public fun_get_cmd_info funcmdinfo;
public fun_axis_reset funreset;
public fun_axis_home funhome;
public fun_axis_zero_pos funzero;
public fun_axis_is_moving funismoving;
public fun_axis_set_speed funsetspeed;
public fun_axis_set_pos funsetpos;
public fun_axis_stop funstop;
public fun_axis_move_pos funmovepos;
public fun_axis_move_offset funmoveoffset;
public fun_axis_move_jog funmovejog;
public fun_axis_read funaxisread;
public fun_axis_write funaxiswrite;
public fun_axis_get_pos fungetpos;
public fun_create_crd funcrd;
public fun_add_line_pos funaddline;
public fun_add_arc_pos funaddarc;
public fun_crd_move funcrdmove;
public fun_crd_is_moving funcrdmoving;
public fun_close_crd funclosecrd;
public fun_read_in funreadin;
public fun_read_out funreadout;
public fun_write_out funwriteout;
public fun_read_ad funreadad;
public fun_write_ad funwritead;
};
#endregion
//安全类接口回调
//pid 轴ID或IO
//curval 当前位置 可标识axis/io位置
//val 目标位置 表示运动目标位置(mm) IO表示气缸控制目标信号
//bhome 轴ID时1表示回原0表示不是回原IO控制时此参数无意义
//返回值 返回1表示检测通过,可以运动 返回0表示检测不通过则control会终止该轴/IO所有运动接口
public delegate int FunSafeCallBack(int pid, int curval, int val, int bhome);
public class control
{
/***********************************************
*Function: 注册一个插件增加一个插件
*Intput: pszdev 硬件ID不能重复
pszdesc 硬件描述符 <32字节
pszhome 回原描述符 多种回原方式以;分割<256字节
ctx 初始化参数描述符 多个参数以;分割<256字节 参数描述与默认值以|分割
axiscnt 插件支持轴数量
iocnt 插件支持IO数量
adcnt 插件支持AD数量
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS:如果需要在应用层注册插件,每次程序启动必须按以下步骤初始化:
1. 调用control_init 初始化模块
2. 调用control_regist_dev 注册插件
3. 调用control_load_cfg 加载配置文件
***********************************************/
[DllImport(@"control.dll", EntryPoint = "regist_card_devs", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int regist(string pszdev, string pszdesc,
string pszhome, string ctx, ushort axiscnt,
ushort iocnt, ushort adcnt, ref MotorFun pfunList);
/*********************************************
*Function: 初始化control模块资源
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 初始化以后才能调用该模块其它接口
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_init", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int init();
/*********************************************
*Function: 释放control模块资源
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_deinit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int deinit();
/*********************************************
*Function: 独占方式启动所有控制卡
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_startup", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int startup();
/*********************************************
*Function: 停止控制所有卡
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_shutdown", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int shutdown();
/****************************************************
*Function: control服务是否在运行
*Intput: NULL
*Output: NULL
*Return: 正在运行返回1否则返回0
******************************************************/
[DllImport(@"control.dll", EntryPoint = "control_is_run", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int isrun();
/*********************************************
*Function: 获取control控制引擎版本号 - 4位整数
*Intput: NULL
*Output: NULL
*Return: 返回control版本号1401->1.4.01
*PS: 当版本号为5位时,为beta测试版,个位数为测试版本号
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_version", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int version();
/*********************************************
*Function: 整体复位、重置 -- 仅发送指令
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 向所有插件发送"reset"指令
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_reset", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int reset();
/*********************************************
*Function: 整体暂停 -- 仅发送指令
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 向所有插件发送"pause,1/0"指令
*********************************************/
[DllImport(@"control.dll", EntryPoint = "control_pause", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int pause(int bpause = 1);
/*********************************************
*Function: 加载点位、料盘配置 -- 默认data\\product
*Intput: path 配置目录 <256字节
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 加载成功后,下次会默认从此目录读取
*********************************************/
[DllImport(@"control.dll", EntryPoint = "load_points", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int load_points(string path);
/***********************************************
*Function: 初始化一个对象(卡/视觉/工站)
*Intput: pid 对象ID
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
************************************************/
[DllImport(@"control.dll", EntryPoint = "init_dev", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int init_dev(int pid);
/***********************************************
*Function: 反初始化一个对象(卡/视觉/工站)
*Intput: pid 对象ID
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
************************************************/
[DllImport(@"control.dll", EntryPoint = "uninit_dev", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int uninit_dev(int pid);
/*********************************************
*Function: 向指定对象发送消息(万能接口)
*Intput: pid 对象ID
msg 要发送的消息
res 返回消息,可以不传
*Output: res 返回消息,可以不传
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "send_custom_msg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int send_custom_msg(int pid, string msg, uint z = 0);
[DllImport(@"control.dll", EntryPoint = "send_custom_msg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int send_custom_msg(int pid, string msg, StringBuilder res);
/*********************************************
*Function: 接收指定对象消息(万能接口)
*Intput: pid 对象ID
msg 过滤字段及参数,可以为空字符串
res 返回消息
timeout 超时机制 默认不等待 [0,500] 单位ms
*Output: res 返回消息
*Return: 成功返回0,失败返回错误码<0
*PS: 超时返回ERR_TIMEOUT
*********************************************/
[DllImport(@"control.dll", EntryPoint = "recv_custom_msg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int recv_custom_msg(int pid, string msg, StringBuilder res, int timeout = 0);
/***********************************************
*Function: 获取一个对象状态
*Intput: pid 对象ID
*Output: NULL
*Return: 返回对象状态参考EDevStatus/EMoveStatus
*PS: 卡/工站/视觉/轴,全部使用此接口
************************************************/
[DllImport(@"control.dll", EntryPoint = "get_dev_status", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_dev_status(int pid);
/*********************************************
*Function: 通过名称获取一个对象的ID > 0
*Intput: pszname 对象名称
*Output: NULL
*Return: 成功返回对象ID,失败返回错误码<0
*PS: 可以获取control模块所有对象ID
包括卡/视觉/工站/轴/IO/AD
*********************************************/
[DllImport(@"control.dll", EntryPoint = "get_id_by_name", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_id_by_name(string pszname);
/*********************************************
*Function: 清除指定轴限位状态/停止标识 -- 此接口创建工站后才有效
*Intput: axis 轴ID
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 停止状态下才可调用此接口
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_reset", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_reset(int axis);
/*********************************************
*Function: 指定轴停止运动 -- 此接口创建工站后才有效
*Intput: axis 轴ID
stoptype 0平滑停止 1紧急停止
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_stop", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_stop(int axis, int stoptype = 0);
/*********************************************
*Function: 指定轴回原 -- 此接口创建工站后才有效
*Intput: axis 轴ID
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 调用 axis_status 判断回原是否结束
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_home", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_home(int axis);
/*********************************************
*Function: 读取轴对应的特殊IO状态 -- 此接口创建工站后才有效
*Intput: axis 轴ID
dio_type io类型
*Output: NULL
*Return: 有信号1 无信号0, 其它为异常
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_read", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_read(int axis, EIOType dio_type);
public static bool axisIO(int axis, EIOType dio_type)
{
if (0 == axis) return false;
return axis_read(axis, dio_type) == 1;
}
/*********************************************
*Function: 设置轴对应的特殊IO输出状态 -- 此接口创建工站后才有效
*Intput: axis 轴ID
dio_type io类型 仅限 使能、清除报警两种类型
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_write", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_write(int axis, EIOType dio_type, int val);
/*********************************************
*Function: 获取指定轴当前位置 -- 此接口创建工站后才有效
*Intput: axis 轴ID
posType 0编码器位置 1规划器位置
*Output: pval 返回当前位置 mm
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_get_pos", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_get_pos(int axis, ref double pval, int posType = -1);
public static double getAxisPos(int axis)
{
double val = 0;
int ret = axis_get_pos(axis, ref val);
return ret == 0 ? val : 0;
}
/*********************************************
*Function: 指定轴jog运动 -- 此接口创建工站后才有效
*Intput: axis 轴ID
dir 0负方向 1正方向
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_move_jog", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_move_jog(int axis, int dir);
/*********************************************
*Function: 指定轴点位运动 -- 此接口创建工站后才有效
*Intput: axis 轴ID
pos 目标位置
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_move_pos", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_move_pos(int axis, double pos);
/*********************************************
*Function: 指定轴强制点位运动 -- 此接口创建工站后才有效
*Intput: axis 轴ID
pos 目标位置
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 在运动中调用此接口,可以改变目标位置
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_set_pos", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_set_pos(int axis, double pos);
/*********************************************
*Function: 指定轴偏移量运动 -- 此接口创建工站后才有效
*Intput: axis 轴ID
offset 偏移量
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "axis_move_offset", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int axis_move_offset(int axis, double offset);
/*********************************************
*Function: 设置指定工站接下来的运动速度
*Intput: tid 工站ID
vel 运动速度 按百分比算 [0.01,100]
acc 加速度 按百分比算 [0.01,100]
dec 减速度 按百分比算 [0.01,100]
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 点位运动中也可设置,仅更改速度,加减速下次运动才生效
*********************************************/
[DllImport(@"control.dll", EntryPoint = "set_speed", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int set_speed(int tid, double vel, double acc, double dec);
/*********************************************
*Function: 获取指定工站的速度
*Intput: tid 工站ID
vel 运动速度 按百分比算 [0.01,100]
acc 加速度 按百分比算 [0.01,100]
dec 减速度 按百分比算 [0.01,100]
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 点位运动中也可设置,仅更改速度,加减速下次运动才生效
*********************************************/
[DllImport(@"control.dll", EntryPoint = "get_speed", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_speed(int tid, ref double vel, ref double acc, ref double dec);
/*********************************************
*Function: 设置指定工站的全局速度
*Intput: tid 工站ID
vel 最大值的百分比 [0.01,100]
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS:工站最终运动速度会*全局速度的百分比,默认100%
*********************************************/
[DllImport(@"control.dll", EntryPoint = "set_global_speed", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int set_global_speed(int tid, double vel);
/*********************************************
*Function: 获取指定工站的全局速度
*Intput: tid 工站ID
pvel 最大值的百分比 [0.01,100]
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "get_global_speed", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_global_speed(int tid, ref double pvel);
/*********************************************
*Function清除指定工站所有轴限位状态/停止标识
*Intput tid 工站ID
*Output: NULL
*Return 成功返回0,失败返回错误码<0
*PS: 停止状态下才可调用
*********************************************/
[DllImport(@"control.dll", EntryPoint = "station_reset", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int station_reset(int tid);
/*********************************************
*Function: 指定工站开始回原
*Intput: tid 工站ID
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 调用get_dev_status 判断回原是否结束
*********************************************/
[DllImport(@"control.dll", EntryPoint = "station_home", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int station_home(int tid);
/*********************************************
*Function: 指定工站暂停/恢复运动
*Intput: tid 工站ID
ipause 1暂停 0恢复
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "station_pause", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int station_pause(int tid, int ipause = 1);
/*********************************************
*Function: 让指定工站停止运动
*Intput: tid 工站ID
stoptype 0平滑停止 1紧急停止
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "station_stop", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int station_stop(int tid, int stoptype = 0);
/*********************************************
*Function: 指定工站点位运动到指定位置
*Intput: tid 工站ID
ptPos,点位置,包含每个轴目标位置
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 此接口支持强制点位运动,即点位运动中时,可以强制改变目标位置
*PS: 未回原也可以调用此接口运动
*********************************************/
[DllImport(@"control.dll", EntryPoint = "go_to_pos", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int go_to_pos(int tid, IntPtr ptr);
public static int gopos(int tid, TPoint pos)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(pos, ptr, false);
ret = go_to_pos(tid, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 指定工站点位运动到指定点
*Intput: tid 工站ID
index,点索引[0,200] 为0时基于当前位置
ptOffset 是否增加偏移
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: index=0时,必须带偏移量,否则不运动
*PS: 此接口支持强制点位运动,即点位运动中时,可以强制改变目标位置
当index=0时未回原也可以运动
*********************************************/
[DllImport(@"control.dll", EntryPoint = "go_to_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int go_to_point(int tid, int index, IntPtr ptr);
public static int go(int tid, int index)
{
return go_to_point(tid, index, IntPtr.Zero);
}
public static int go(int tid, int index, TPoint ptOffset)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(ptOffset, ptr, false);
ret = go_to_point(tid, index, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 指定工站直线插补运动到指定点
*Intput: tid 工站ID
index 点索引[0,200] 为0时基于当前位置
ptOffset 是否增加偏移
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "move_to_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int move_to_point(int tid, int index, IntPtr ptr);
public static int move(int tid, int index)
{
return move_to_point(tid, index, IntPtr.Zero);
}
public static int move(int tid, int index, TPoint ptOffset)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(ptOffset, ptr, false);
ret = move_to_point(tid, index, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 以当前位置为起始点, 圆弧插补运动
*Intput: tid 工站ID
iPointMiddle, 圆弧上的中间点;
iPointEnd, 圆弧上的终点;
ptOffset 是否增加偏移
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "move_arc", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int move_arc(int tid, int iPointMiddle, int iPointEnd, IntPtr ptr);
public static int arc(int tid, int iPointMiddle, int iPointEnd)
{
return move_arc(tid, iPointMiddle, iPointEnd, IntPtr.Zero);
}
public static int arc(int tid, int iPointMiddle, int iPointEnd, TPoint ptOffset)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(ptOffset, ptr, false);
ret = move_arc(tid, iPointMiddle, iPointEnd, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 添加直线插补运动点位到连续运动合集
*Intput: tid 工站ID
index 点索引
ptOffset 是否增加偏移
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "add_cp_line_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int add_cp_line_point(int tid, int index, IntPtr ptr);
public static int add_line(int tid, int index)
{
return add_cp_line_point(tid, index, IntPtr.Zero);
}
public static int add_line(int tid, int index, TPoint ptOffset)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(ptOffset, ptr, false);
ret = add_cp_line_point(tid, index, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 添加一段圆弧插补运动到连续运动合集
*Intput: tid 工站ID
iPointMiddle, 圆弧上的中间点;
iPointEnd, 圆弧上的终点;
ptOffset 是否增加偏移
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "add_cp_arc_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int add_cp_arc_point(int tid, int iPointMiddle, int iPointEnd, IntPtr ptr);
public static int add_arc(int tid, int iPointMiddle, int iPointEnd)
{
return add_cp_arc_point(tid, iPointMiddle, iPointEnd, IntPtr.Zero);
}
public static int add_arc(int tid, int iPointMiddle, int iPointEnd, TPoint ptOffset)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(ptOffset, ptr, false);
ret = add_cp_arc_point(tid, iPointMiddle, iPointEnd, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 启动cp运动
*Intput: tid 工站ID
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "start_cp_move", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int start_cp_move(int tid);
/*********************************************
*Function: 获取指定工站的点位置(点列表的数据)
*Intput: tid,工站ID
name 点位名称
pt,用于接收工站位置的point结构体
*Output: 返回点位结构体指针
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "get_point_by_name", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_point(int tid, string name, ref TPoint pt);
/*********************************************
*Function: 获取指定工站的点位置(点列表的数据)
*Intput: tid,工站ID
index,点位索引
pt 返回的点结构体
*Output: 返回点位结构体指针
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "get_point_by_index", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_point(int tid, int index, ref TPoint pt);
/*********************************************
*Function: 获取料盘数据点位
*Intput: tid 工站ID
index,料盘索引 [1,50]
col 第几列 > 0
row 第几行 > 0
*Output: pt 返回的点结构体
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "get_point_by_pallet", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_point(int tid, int index, int col, int row, ref TPoint pt);
/*********************************************
*Function: 设置点数据,只设置到内存,不会改变名字
*Intput: tid,工站ID
pt要保存的点数据
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "set_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int set_point(int tid, IntPtr ptr);
public static int setpoint(int tid, TPoint pt)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(pt, ptr, false);
ret = set_point(tid, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 判断当前位置是否在指定点附近
*Intput: tid 工站ID
index 点索引[1,200]
ptOffset 是否增加偏移
offset 最大偏移值
*Output: NULL
*Return: 1在 0不在,其它返回错误码
*********************************************/
[DllImport(@"control.dll", EntryPoint = "is_near_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int is_near_point(int tid, int index, IntPtr ptr, double offset = 0.1);
public static bool chk_near_pos(int tid, int index)
{
return is_near_point(tid, index, IntPtr.Zero) == 1;
}
public static bool chk_near_pos(int tid, int index, TPoint ptoffset, double offset = 0.01)
{
IntPtr ptr;
int ret = 0;
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ptoffset));
Marshal.StructureToPtr(ptoffset, ptr, false);
ret = is_near_point(tid, index, ptr, offset);
Marshal.FreeHGlobal(ptr);
return ret == 1;
}
/*********************************************
*Function: 设置点位置数据 -- 名称、点位一块修改
*Intput: tid 工站ID
pt 要保存的点数据 点位索引[1,200]
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "save_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int save_point(int tid, IntPtr ptr);
public static int savepoint(int tid, TPoint pt)
{
IntPtr ptr;
int ret = 0;
TPoint point = new TPoint();
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(point));
Marshal.StructureToPtr(pt, ptr, false);
ret = save_point(tid, ptr);
Marshal.FreeHGlobal(ptr);
return ret;
}
/*********************************************
*Function: 示教当前点位
*Intput: tid 工站ID
index 点位索引[1,200]
name 点位名称 长度[1,31]
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "teach_point", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int teach_point(int tid, int index, string name);
/*********************************************
*Function: 注册安全检测接口,注册后所有运动+IO操作
都会回调到接口检查安全性
*Intput: fun... 回调接口
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 传入fun=0即为反注册,注册后必须打开配置中的bSafeChk开关才生效
*********************************************/
[DllImport(@"control.dll", EntryPoint = "regist_safe_chk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int regist_safe_chk(FunSafeCallBack fun);
/*********************************************
*Function: 启动安全控制限制
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "start_safe_monitor", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int start_safe_monitor();
/*********************************************
*Function: 停止安全控制限制
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "stop_safe_monitor", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int stop_safe_monitor();
/*********************************************
*Function: 根据名称读取指定io的输入/输出状态
*Intput: name io名称
*Output: NULL
*Return: 有信号1 无信号0, 其它为异常
*********************************************/
[DllImport(@"control.dll", EntryPoint = "read_by_name", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int read(string name);
/*********************************************
*Function:根据IO名称设置一个IO输出状态
*Intput: out_name: io名称
val 操作值 必须为1/0
*Output: 无
*Return: 成功返回0失败返回错误代码
*********************************************/
[DllImport(@"control.dll", EntryPoint = "write_by_name", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int write(string out_name, ushort val);
/*********************************************
*Function: 读取输入电压值
*Intput: ad_name, ad名称
*Output: pval 读取到的电压值
*Return: 成功返回0失败返回错误代码
*********************************************/
[DllImport(@"control.dll", EntryPoint = "read_ad_by_name", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int read(string ad_name, ref double pVal);
/*********************************************
*Function: 根据名称写入指定ad的输出值
*Intput: name ad别名
val 电压值
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*********************************************/
[DllImport(@"control.dll", EntryPoint = "write_ad_by_name", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int write(string ad_name, double val);
/**************************************************
*Function: 获取系统IO状态
*Intput: type 系统IO类型 start <= type <= stop
*Output: NULL
*Return: 返回组合状态1/0start都为1则返回1其它都为0则0
******************************************************/
[DllImport(@"control.dll", EntryPoint = "get_sysio_value", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int get_sysio_value(int type);
/**************************************************
*Function: 打开/关闭所有刹车
*Intput: val 1刹车有效 0刹车无效
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
******************************************************/
[DllImport(@"control.dll", EntryPoint = "set_break", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int set_break(int val = 1);
public static int get_start_value()
{
return get_sysio_value(Convert.ToInt32(EMIOSYSType.IOS_START));
}
public static int get_reset_value()
{
return get_sysio_value(Convert.ToInt32(EMIOSYSType.IOS_RESET));
}
public static int get_pause_value()
{
return get_sysio_value(Convert.ToInt32(EMIOSYSType.IOS_PAUSE));
}
public static int get_estop_value()
{
return get_sysio_value(Convert.ToInt32(EMIOSYSType.IOS_ESTOP));
}
/****************************************************
*Function: 视觉处理指令,拍照完成返回
*Intput: vid 视觉ID
secne 场景ID需根据视觉通讯协议传递
timeout 超时设置
*Output: NULL
*Return: EM_ERR_CODE
******************************************************/
[DllImport(@"control.dll", EntryPoint = "vision_process", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int process(int vid, int secne);
/****************************************************
*Function: 获取视觉处理结果
*Intput: vid 视觉ID
secne 场景ID需根据视觉通讯协议传递
timeout 超时设置 -1无限等待
*Output: pres 返回结果
*Return: EM_ERR_CODE 超时返回ERR_TIMEOUT
******************************************************/
[DllImport(@"control.dll", EntryPoint = "recv_process_result", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int recv_result(int vid, int secne, ref TVisionResult pres, int timeout = -1);
/****************************************************
*Function: 获取本机注册信息
*Intput: NULL
*Output: pInfo 注册信息
*Return: 成功返回0,失败返回错误码<0
******************************************************/
[DllImport(@"control.dll", EntryPoint = "license_get_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int license_get_info(ref TLicenseInfo info);
/****************************************************
*Function: 本机注册licence
*Intput: pszregsn 注册码
*Output: NULL
*Return: 成功返回0失败返回错误码
******************************************************/
[DllImport(@"control.dll", EntryPoint = "license_regist", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int regist(string pszregsn);
/****************************************************
*Function: 获取许可证是否有效
*Intput: NULL
*Output: NULL
*Return: 有效返回1无效返回0
******************************************************/
[DllImport(@"control.dll", EntryPoint = "license_is_valid", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int license_is_valid();
#region nouse
public struct TAxisParam
{//轴参数
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name; //名称
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string outIO; //回原IO or 刹车IO
public int axis; //轴ID
public int cid; //卡ID
public int index; //在当前卡的索引
public int homeIndex; //回原方法序号 参考 插件返回的回原方式序列 -- 超过最大序号表示自定义回原
public int bDirNeg; //方向取反 1取反 0不取反
public EMAxisDir dir; //0==x 1==y 2==z 3==u 4==v 5==w
public EMAxisType motorType; //参考 0伺服, 1步进 2流水线 3绝对值编码器
public EMHomeType homeType; //回原方式 0负限位 1回正限位 2找原点 3IO控制回原 4直接回零 5直接回零 6不回零
public int homePos; //回原搜索的距离+方向 mm
public int limitN; //负限位位置 软限位
public int limitP; //正限位位置 软限位
public int highHomePos; //高速回原位置为0则禁用高速回原
public int iAfterhomeOffset; //回原后偏移量
public int arriveOffset; //到位误差 0表示无效 否则会检查编码器与规划期误差,到位后才结束运动
public double limitvel; //搜索限位速度 mm/s
public double homeVel; //搜索原点速度 mm/s
public double maxVel; //最大工作速度 mm/s
public double maxAcc; //最大工作加速度 mm/s^2
public double maxDec; //最大工作减速度 mm/s^2
public double stepvalue; //1mm对应多少脉冲
};
public struct TAdParam
{//ad参数 最终ad = readAD * ratio + offset
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name; //名称
public double ratio; //比例、系数
public double offset; //补偿值
public int aid; //ID
public int cid; //卡ID
public int index; //索引
public int reserved; //保留字符8位对齐
};
public struct IOConfig
{//io参数
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name; //名称
public int iid; //ID
public int cid; //卡ID
public int index; //索引
public int sense; //是否取反 0取反 1不取反
public EIOType type; //参考 EIOType 通用输入/输出 限位/原点等
public EMIOSYSType ios; //参考 EMIOSYSType 系统类型,开始?停止?等等
};
/*********************************************
*Function: 通过卡ID获取卡信息
*Intput: card 卡ID
*Output: pcard 返回卡信息
*Return: 成功返回0,失败返回错误码<0
************************************************/
[DllImport(@"control.dll", EntryPoint = "get_card", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_card(int card, ref TCard pcard);
/*********************************************
*Function: 获取轴信息
*Intput: axis 轴ID
*Output: pAxisParam 轴信息
*Return: 成功返回0,失败返回错误码<0
*PS: pAxisParam 为空判断轴是否存在
************************************************/
[DllImport(@"control.dll", EntryPoint = "get_axis_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_axis_info(int axis, ref TAxisParam paxis);
/*********************************************
*Function: 获取ad信息
*Intput: aid ID
*Output: pad ad信息
*Return: 成功返回0,失败返回错误码<0
*PS: pAdParam 为空判断ad是否存在
************************************************/
[DllImport(@"control.dll", EntryPoint = "get_ad_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_ad_info(int aid, ref TAdParam pad);
/*********************************************
*Function: 获取Io信息
*Intput: iid ID
*Output: pio io信息
*Return: 成功返回0,失败返回错误码<0
*PS: pIoParam 为空判断io是否存在
************************************************/
[DllImport(@"control.dll", EntryPoint = "get_io_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int get_io_info(int iid, ref IOConfig pio);
/*********************************************
*Function: 设置轴信息以结构体中的ID为准
*Intput: pAxisParam,轴参数结构体
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
*PS: 仅支持修改部分项
*PS:
************************************************/
[DllImport(@"control.dll", EntryPoint = "set_axis_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int set_axis(IntPtr ptr);
public static bool set_axis_info(TAxisParam paxis)
{
IntPtr ptr;
int ret = 0;
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(paxis));
Marshal.StructureToPtr(paxis, ptr, false);
ret = set_axis(ptr);
Marshal.FreeHGlobal(ptr); //释放非托管内存
return 0 == ret;
}
/*********************************************
*Function: 设置ad信息以结构体中的ID为准
*Intput: pAdParam,ad参数结构体
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
************************************************/
[DllImport(@"control.dll", EntryPoint = "set_ad_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int set_ad(IntPtr ptr);
public static bool set_ad_info(TAdParam pad)
{
IntPtr ptr;
int ret = 0;
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(pad));
Marshal.StructureToPtr(pad, ptr, false);
ret = set_ad(ptr);
Marshal.FreeHGlobal(ptr); //释放非托管内存
return 0 == ret;
}
/*********************************************
*Function: 设置Io信息以结构体中的ID为准
*Intput: pio,Io参数结构体
*Output: NULL
*Return: 成功返回0,失败返回错误码<0
************************************************/
[DllImport(@"control.dll", EntryPoint = "set_io_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern int set_io(IntPtr ptr);
public static bool set_io_info(IOConfig pio)
{
IntPtr ptr;
int ret = 0;
ptr = Marshal.AllocHGlobal(Marshal.SizeOf(pio));
Marshal.StructureToPtr(pio, ptr, false);
ret = set_io(ptr);
Marshal.FreeHGlobal(ptr); //释放非托管内存
return 0 == ret;
}
// /*********************************************
// *Function: 通过工站ID获取轴组信息
// *Intput: tid工站ID
// *Output: pStation,工站信息 传空可以判断是否存在
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "get_station", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int get_axis_group(int tid, ref TAxisGroup pStation);
//
// /*********************************************
// *Function: 通过工站ID获取机器人信息
// *Intput: tid工站ID
// *Output: pStation,工站信息 传空可以判断是否存在
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "get_station", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int get_robot(int tid, ref TRobot pStation);
//
// /*********************************************
// *Function: 获取工站类型,电机 EM_AXIS_STATION / EM_NET_ROBOT
// *Intput: tid工站ID
// *Output: NULL
// *Return: 返回工站类型,错误返回错误代码
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "get_station_type", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int get_type(int tid);
//
// /*********************************************
// *Function: 设置指定工站tool坐标系
// *Intput: tid,工站ID
// index tool 序号 0 < index <= 10
// ptOffset 偏移量
// *Output: NULL
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "create_tool", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int create_tool(int tid, int index, ref TPoint ptOffset);
//
// /*********************************************
// *Function: 指定工站使用哪种模式
// *Intput: tid,工站ID
// iModel 0 世界坐标 1工具坐标
// *Output: NULL
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "set_model", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int set_model(int tid, int iModel);
//
// /*********************************************
// *Function: 获取指定工站使用的model
// *Intput: tid,工站ID
// *Output: NULL
// *Return: 成功返回使用的model失败返回错误码
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "get_model", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int get_model(int tid);
//
// /*********************************************
// *Function: 设置料盘
// *Intput: tid,工站ID
// plt 料盘数据 0 < index <= 10
// *Output: NULL
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "create_pallet", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int create_pallet(int tid, ref TPallet plt);
//
// /*********************************************
// *Function: 根据索引获取料盘
// *Intput: tid,工站ID
// index 料盘索引
// plt 料盘数据 0 < index <= 10
// *Output: NULL
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "get_pallet_by_index", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int get_pallet(int tid, int index, ref TPallet plt);
//
// /*********************************************
// *Function: 根据索引获取Tool点位偏移量
// *Intput: tid,工站ID
// index tool坐标系索引
// pt 坐标系数据 0 < index <= 10
// *Output: NULL
// *Return: 成功返回0,失败返回错误码<0
// *********************************************/
// [DllImport(@"control.dll", EntryPoint = "get_tool_by_index", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
// public static extern int get_tool_info(int tid, int index, ref TPoint pt);
#endregion
}
}