/******************************************************************* *文件说明: control头文件,所有运动接口和IO接口 *作者: logos *日期: 2013/11/11 *修改日志: 2013/11/11 TOD2214 创建 2015/12/25 CW0793 重构 ***注意事项*** 1. 配置接口,如add_card/add_vision等等,传入参数是一个可修改的结构体, 接口调用后,结构体中的参数可能发生改变,如ID是由control模块生成的。 2. 单轴运动相关接口,必须创建工站后才有效,没有创建工站无法调用 3. 删除机器人插件,若有机器人插件,以卡方式加入,使用万能消息接口通讯 4. 增加整体暂停/复位接口,自动向所有插件发送暂停/复位消息 复位消息主要用于急停取消后,暂停消息主要用户机器人、控制器等. 5. axis增加状态机,基础状态机增加暂停中、停止中两种状态 6. 工站增加命令行功能,支持go move arc speed pallet here等指令 v2.0.13 修改全局速度时,立即生效 ***********************************************************************/ #pragma once #ifndef _INCLUDE_SDK_CONTROL_H #define _INCLUDE_SDK_CONTROL_H #include "dtype.h" #pragma region config /**************************************************** *Function: 设置control配置项 *Intput: pcfg 配置数据 *Output: pcfg 配置数据 *Return: 成功返回0,失败返回错误码<0 *PS: 运动中不能设置 ******************************************************/ EXPORT_C int WINAPI control_set_cfg(const TControlCfg* pcfg); /**************************************************** *Function: 获取control配置项 *Intput: pcfg 配置数据 *Output: NULL *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI control_get_cfg(TControlCfg* pcfg); /********************************************* *Function: 获取所有已支持设备信息 *Intput: pDevInfo 卡类型数据结构 *Output: pDevInfo 卡类型数据结构 *Return: 返回卡类型数量 *PS 入参为空时,获取类型数量 ************************************************/ EXPORT_C int WINAPI get_all_support_card(TDevInfo* pDevInfo = 0); /********************************************* *Function: 根据硬件ID获取支持设备信息 *Intput: dev 硬件ID *Output: pDevInfo 卡类型数据结构 *Return: 成功返回0,失败返回错误码<0 *PS pDevInfo 为空时,判断硬件ID是否存在 ************************************************/ EXPORT_C int WINAPI get_support_card(const char* dev, TDevInfo* pDevInfo); /*********************************************** *Function: 获取所有已支持视觉信息 *Intput: pDevInfo 视觉类型数据结构 *Output: pDevInfo 视觉类型数据结构 *Return: 返回视觉类型数量 *PS 入参为空时,获取类型数量 ************************************************/ EXPORT_C int WINAPI get_all_support_vision(TVisionDevInfo* pDevInfo = 0); /*********************************************** *Function: 根据视觉插件ID获取视觉信息 *Intput: dev 插件ID *Output: pDevInfo 插件类型数据结构 *Return: 成功返回0,失败返回错误码<0 *PS pDevInfo 为空时,判断硬件ID是否存在 ************************************************/ EXPORT_C int WINAPI get_support_vision(const char* dev, TVisionDevInfo* pDevInfo); /********************************************* *Function: 增加一张卡 *Intput: pCard 卡信息结 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 ************************************************/ EXPORT_C int WINAPI add_card(TCard* pCard); /********************************************* *Function: 修改一张卡 *Intput: pCard 卡信息结构体 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 ************************************************/ EXPORT_C int WINAPI update_card(TCard* pCard); /*********************************************** *Function: 增加一个视觉对象 *Intput: pVision 视觉信息结构体 *Output: 无 *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 ************************************************/ EXPORT_C int WINAPI add_vision(TVision* pVision); /*********************************************** *Function: 修改一个视觉对象 *Intput: pVision 视觉信息结构体 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 ************************************************/ EXPORT_C int WINAPI update_vision(TVision* pVision); /********************************************* *Function: 增加一个工站(轴组) *Intput: pStation 结构体参数 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 *********************************************/ EXPORT_C int WINAPI add_station(TStation* pStation); /********************************************* *Function: 修改一个工站(轴组) *Intput: pStation 结构体参数 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 *********************************************/ EXPORT_C int WINAPI update_station(TStation* pStation); /********************************************* *Function: 删除一个对象 -- 卡/视觉/工站 *Intput: pid 卡ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅control_is_run接口返回0时可以调用 ************************************************/ EXPORT_C int WINAPI delete_dev(int pid); /*********************************************** *Function: 增加一条安全规则 *Intput: psafe 安全规则信息 *Output: 无 *Return: 成功返回0,失败返回错误码<0 *PS: ID不用填充,自动生成.启动安全服务后无法调用此接口 ************************************************/ EXPORT_C int WINAPI add_safe_cfg(TSafeCfg* psafe); /*********************************************** *Function: 修改一条安全规则 *Intput: psafe 安全规则信息 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 根据ID匹配.启动安全服务后无法调用此接口 ************************************************/ EXPORT_C int WINAPI update_safe_cfg(TSafeCfg* psafe); /*********************************************** *Function: 删除一条安全规则 *Intput: safeid 安全规则ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 根据ID匹配.启动安全服务后无法调用此接口 ************************************************/ EXPORT_C int WINAPI del_safe_cfg(int safeid); /********************************************* *Function: 获取所有安全规则 *Intput: plist 安全规则缓冲区 *Output: plist 安全规则缓冲区 *Return: 返回数量 *PS: 可以传NULL获取数量 ************************************************/ EXPORT_C int WINAPI get_all_safe_cfg(TSafeCfg* plist = 0); /********************************************* *Function: 获取所有卡信息 *Intput: pCard 卡数据结构 *Output: pCard 卡数据结构 *Return: 返回卡数量 *PS 入参为空时,获取数量 ************************************************/ EXPORT_C int WINAPI get_all_card(TCard* pCard = 0); /*********************************************** *Function: 获取所有视觉对象信息 *Intput: pVision 视觉信息结构体数组 *Output: pVision 视觉信息结构体数组 *Return: 返回视觉对象数量 *PS 入参为空时,获取数量 ************************************************/ EXPORT_C int WINAPI get_all_vision(TVision* pVision = 0); /********************************************* *Function: 获取所有工站信息 *Intput: pStation 工站数据结构 *Output: pStation 工站数据结构 *Return: 返回工站数量 *PS 入参为空时,获取数量 ************************************************/ EXPORT_C int WINAPI get_all_station(TStation* pStation = 0); /********************************************* *Function: 获取卡信息 *Intput: pid 卡ID *Output: pCard 卡信息结构体 *Return: 成功返回0,失败返回错误码<0 *PS: pCard 为空判断卡是否存在 ************************************************/ EXPORT_C int WINAPI get_card(int pid, TCard* pCard = 0); /*********************************************** *Function: 获取视觉信息 *Intput: pid 视觉ID *Output: pVision 视觉信息结构体 *Return: 成功返回0,失败返回错误码<0 *PS: pVision 为空判断视觉是否存在 ************************************************/ EXPORT_C int WINAPI get_vision(int pid, TVision* pVision = 0); /********************************************* *Function: 获取工站信息 *Intput: pid 工站ID *Output: pStation,工站信息 *Return: 成功返回0,失败返回错误码<0 *PS: pStation 为空判断工站是否存在 *********************************************/ EXPORT_C int WINAPI get_station(int pid, TStation* pStation = 0); /********************************************* *Function: 通过轴ID获取工站信息 *Intput: axis 轴ID *Output: pStation,工站信息 *Return: 成功返回0,失败返回错误码<0 *PS: pStation 为空判断轴是否存在且已经创建工站 *********************************************/ EXPORT_C int WINAPI get_station_by_axis(int axis, TStation* pStation = 0); /********************************************* *Function: 获取一张卡的所有ad参数 *Intput: pid 卡ID *Output: pAdParam ad数组 *Return: 返回ad数量 ************************************************/ EXPORT_C int WINAPI get_ad_list(int pid, TAdParam* pAdParam = 0); /********************************************* *Function: 获取一张卡的所有指定类型Io项 *Intput: pid 卡ID dio_type io类型 *Output: pIoParam IO信息数组 *Return: 返回IO数量 ************************************************/ EXPORT_C int WINAPI get_io_list(int pid, EIOType dio_type, TIoParam* pIoParam = 0); /********************************************* *Function: 获取一张卡的所有轴参数 *Intput: pid 卡ID *Output: pAxisParam 轴信息数组 *Return: 返回轴数量,失败返回错误码<0 ************************************************/ EXPORT_C int WINAPI get_axis_list(int pid, TAxisParam* pAxisParam = 0); /********************************************* *Function: 获取未被工站占用的轴列表 *Intput: pAxisParam 轴信息数组 *Output: pAxisParam 轴信息数组 *Return: 返回轴数量 ************************************************/ EXPORT_C int WINAPI get_valid_axis(TAxisParam* pAxisParam = 0); /********************************************* *Function: 获取所有IO项 *Intput: bsetname 是否获取已设置名称的项 0表示获取所有项 *Output: pIoConfig IO信息数组 *Return: 返回IO数量 ************************************************/ EXPORT_C int WINAPI get_all_io(int bsetname = 1, IOConfig* pIoConfig = 0); /********************************************* *Function: 获取所有AD项 *Intput: bsetname 是否获取已设置名称的项 0表示获取所有项 *Output: pAdConfig AD信息数组 *Return: 返回AD数量 ************************************************/ EXPORT_C int WINAPI get_all_ad(int bsetname = 1, TAdParam* pAdConfig = 0); /********************************************* *Function: 获取所有Axis项 *Intput: bsetname 是否获取已设置名称的项 0表示获取所有项 *Output: pAxisConfig Axis信息数组 *Return: 返回Axis数量 ************************************************/ EXPORT_C int WINAPI get_all_axis(int bsetname = 1, TAxisParam* pAxisConfig = 0); /********************************************* *Function: 获取轴信息 *Intput: axis 轴ID *Output: pAxisParam 轴信息 *Return: 成功返回0,失败返回错误码<0 *PS: pAxisParam 为空判断轴是否存在 ************************************************/ EXPORT_C int WINAPI get_axis_info(int axis, TAxisParam* pAxisParam = 0); /********************************************* *Function: 获取ad信息 *Intput: aid ID *Output: pAdParam ad信息 *Return: 成功返回0,失败返回错误码<0 *PS: pAdParam 为空判断ad是否存在 ************************************************/ EXPORT_C int WINAPI get_ad_info(int aid, TAdParam* pAdParam = 0); /********************************************* *Function: 获取Io信息 *Intput: iid ID *Output: pIoParam io信息 *Return: 成功返回0,失败返回错误码<0 *PS: pIoParam 为空判断io是否存在 ************************************************/ EXPORT_C int WINAPI get_io_info(int iid, TIoParam* pIoParam = 0); /********************************************* *Function: 设置轴信息,以结构体中的ID为准 *Intput: pAxisParam,轴参数结构体 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅支持修改部分项 *PS: ************************************************/ EXPORT_C int WINAPI set_axis_info(const TAxisParam* pAxisParam); /********************************************* *Function: 设置ad信息,以结构体中的ID为准 *Intput: pAdParam,ad参数结构体 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅支持修改部分项 ************************************************/ EXPORT_C int WINAPI set_ad_info(const TAdParam* pAdParam); /********************************************* *Function: 设置Io信息,以结构体中的ID为准 *Intput: pIoParam,Io参数结构体 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 仅支持修改部分项 ************************************************/ EXPORT_C int WINAPI set_io_info(const TIoParam* pIoParam); /********************************************* *Function: 设置mapping信息-- 设置后contro会自动刷新变量 *Intput: pid 轴、工站、卡、视觉、IO、AD pvar 变量名称 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: pvar = 0 时标识删除mapping 当pid为轴ID时,刷新当前位置,pid为IO和AD时,刷新当前值 *PS: 当PID为工站、卡、视觉时,刷新当前的状态 ************************************************/ EXPORT_C int WINAPI set_mapping_info(int pid, const char* pvar = 0); /********************************************* *Function: 获取mapping已设置队列 *Intput: pMaplst 队列缓冲区 *Output: NULL *Return: 返回队列数组大小0,失败返回错误码<=0 *PS: 先传NULL获取大小,再new缓冲区获取内容 ************************************************/ EXPORT_C int WINAPI get_mapping_list(TDevMap* pMaplst = 0); #pragma endregion /********************************************* *Function: 初始化control模块 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 初始化以后才能调用该模块其它接口 *PS: 本接口会初始化所有基础模块 var/cfg/log... *********************************************/ EXPORT_C int WINAPI control_init(); /********************************************* *Function: 卸载control模块 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 卸载后该模块其它接口都会返回错误 *PS: 本接口会卸载所有基础模块 var/cfg/log... *********************************************/ EXPORT_C int WINAPI control_deinit(); /**************************************************** *Function: 启动control, 并初始化 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 会启动线程执行扫描 ******************************************************/ EXPORT_C int WINAPI control_startup(); /**************************************************** *Function: 关闭control服务 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI control_shutdown(); /**************************************************** *Function: control服务是否在运行 *Intput: NULL *Output: NULL *Return: 正在运行返回1,否则返回0 ******************************************************/ EXPORT_C int WINAPI control_is_run(); /********************************************* *Function: 获取control控制引擎版本号 - 4位整数 *Intput: NULL *Output: NULL *Return: 返回control版本号1401->1.4.01 *PS: 当版本号为5位时,为beta测试版,个位数为测试版本号 *********************************************/ EXPORT_C int WINAPI control_version(); /********************************************* *Function: 整体复位、重置 -- 仅发送指令 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 向所有插件发送"reset"指令 *********************************************/ EXPORT_C int WINAPI control_reset(); /********************************************* *Function: 整体暂停 -- 仅发送指令 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 向所有插件发送"pause,1/0"指令 *********************************************/ EXPORT_C int WINAPI control_pause(int bpause = 1); /********************************************* *Function: 加载配置 -- 默认data *Intput: path 配置目录 <256字节 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 加载成功后,下次会默认从此目录读取 *PS: 重新加载目录后,必须重新回原 *********************************************/ EXPORT_C int WINAPI control_load(const char* path); /********************************************* *Function: 加载点位、料盘配置 -- 默认data *Intput: path 配置目录 <256字节 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 加载成功后,下次会默认从此目录读取 *********************************************/ EXPORT_C int WINAPI load_points(const char* path); /*********************************************** *Function: 初始化一个对象(卡/视觉/工站) *Intput: pid 对象ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 ************************************************/ EXPORT_C int WINAPI init_dev(int pid); /*********************************************** *Function: 反初始化一个对象(卡/视觉/工站) *Intput: pid 对象ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 ************************************************/ EXPORT_C int WINAPI uninit_dev(int pid); /********************************************* *Function: 获取该对象支持的自定义指令列表 *Intput: pid 对象ID *Output: pszcmddesc 指令描述列表缓冲区 *Return: 返回字符串长度,返回0表示没有自定义指令 *PS: 可以传入NULL获取字符串长度,申请内存后重新获取内容 *********************************************/ EXPORT_C int WINAPI get_command_desc(int pid, char* pszcmddesc = 0); /********************************************* *Function: 向指定对象发送消息(万能接口) *Intput: pid 对象ID msg 要发送的消息 res 返回消息,可以不传 *Output: res 返回消息,可以不传 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI send_custom_msg(int pid, const char* msg, char* res = 0); /********************************************* *Function: 接收指定对象消息(万能接口) *Intput: pid 对象ID msg 过滤字段及参数,可以为空字符串 res 返回消息 timeout 超时机制 默认不等待 [0,500] 单位ms *Output: res 返回消息 *Return: 成功返回0,失败返回错误码<0 *PS: 超时返回ERR_TIMEOUT *********************************************/ EXPORT_C int WINAPI recv_custom_msg(int pid, const char* msg, char* res, int timeout = 0); /*********************************************** *Function: 获取一个对象状态 *Intput: pid 对象ID *Output: NULL *Return: 返回对象状态,参考EDevStatus/EMoveStatus *PS: 卡/工站/视觉/轴,全部使用此接口 ************************************************/ EXPORT_C int WINAPI get_dev_status(int pid); /*********************************************** *Function: 设置一个对象是否使用模拟状态 *Intput: pid 对象ID bsim 1模拟 0不模拟 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 卡/工站/视觉,统一使用此接口 ************************************************/ EXPORT_C int WINAPI set_dev_simulator(int pid, int bsim = 0); /*********************************************** *Function: 获取一个对象是否使用模拟状态 *Intput: pid 对象ID *Output: NULL *Return: 返回1模拟 0不模拟 *PS: 卡/工站/视觉,统一使用此接口 ************************************************/ EXPORT_C int WINAPI dev_is_simulator(int pid); /********************************************* *Function: 通过名称获取一个对象的ID > 0 *Intput: pszname 对象名称 *Output: NULL *Return: 成功返回对象ID,失败返回错误码<0 *PS: 可以获取control模块所有对象ID 包括卡/视觉/工站/轴/IO/AD *********************************************/ EXPORT_C int WINAPI get_id_by_name(const char* pszname); /********************************************* *Function: 清除指定轴限位状态/停止标识 -- 此接口创建工站后才有效 *Intput: axis 轴ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 停止状态下才可调用此接口 *********************************************/ EXPORT_C int WINAPI axis_reset(int axis); /********************************************* *Function: 指定轴停止运动 -- 此接口创建工站后才有效 *Intput: axis 轴ID stoptype 0平滑停止 1紧急停止 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI axis_stop(int axis, int stoptype = 0); /********************************************* *Function: 指定轴回原 -- 此接口创建工站后才有效 *Intput: axis 轴ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 调用 axis_status 判断回原是否结束 *********************************************/ EXPORT_C int WINAPI axis_home(int axis); /********************************************* *Function: 读取轴对应的特殊IO状态 -- 此接口创建工站后才有效 *Intput: axis 轴ID dio_type io类型 *Output: NULL *Return: 有信号1 无信号0, 其它为异常 *********************************************/ EXPORT_C int WINAPI axis_read(int axis, EIOType dio_type); /********************************************* *Function: 设置轴对应的特殊IO输出状态 -- 此接口创建工站后才有效 *Intput: axis 轴ID dio_type io类型 仅限 使能、清除报警两种类型 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI axis_write(int axis, EIOType dio_type, int val); /********************************************* *Function: 获取指定轴当前位置 -- 此接口创建工站后才有效 *Intput: axis 轴ID posType 0编码器位置 1规划器位置 *Output: pval 返回当前位置 mm *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI axis_get_pos(int axis, double* pval, int posType = EMPos_Default); /********************************************* *Function: 指定轴jog运动 -- 此接口创建工站后才有效 *Intput: axis 轴ID dir 0负方向 1正方向 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI axis_move_jog(int axis, int dir); /********************************************* *Function: 指定轴强制点位运动 -- 此接口创建工站后才有效 *Intput: axis 轴ID pos 目标位置 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 在运动中调用此接口,可以改变目标位置 *********************************************/ EXPORT_C int WINAPI axis_set_pos(int axis, double pos); /********************************************* *Function: 指定轴点位运动 -- 此接口创建工站后才有效 *Intput: axis 轴ID pos 目标位置 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI axis_move_pos(int axis, double pos); /********************************************* *Function: 指定轴偏移量运动 -- 此接口创建工站后才有效 *Intput: axis 轴ID offset 偏移量 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI axis_move_offset(int axis, double offset); /********************************************* *Function: 指定轴查找限位并设置到轴参数中 -- 此接口创建工站并回原后才有效 *Intput: axis 轴ID blimitN 1/0 为0时表示无效,此时负限位使用原点位置 blimitP 1/0 为0时表示无效,此时正限位使用原点位置 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 通过轴是否在运动中判断此接口是否结束 blimitN blimitP不能同时为0 *********************************************/ EXPORT_C int WINAPI axis_find_limit(int axis, int blimitN, int blimitP = 0); /********************************************* *Function: 设置指定工站接下来的运动速度 *Intput: tid 工站ID vel 运动速度 按百分比算 [0.01,100] acc 加速度 按百分比算 [0.01,100] dec 减速度 按百分比算 [0.01,100] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 点位运动中也可设置,仅更改速度,加减速下次运动才生效 *********************************************/ EXPORT_C int WINAPI set_speed(int tid, double vel, double acc, double dec); /********************************************* *Function: 获取指定工站的速度 *Intput: tid 工站ID *Output: vel 运动速度 按百分比算 [0.01,100] 不获取可传NULL acc 加速度 按百分比算 [0.01,100] 不获取可传NULL dec 减速度 按百分比算 [0.01,100] 不获取可传NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI get_speed(int tid, double* pvel = 0, double* pacc = 0, double* pdec = 0); /********************************************* *Function: 设置指定工站的全局速度 *Intput: tid 工站ID setval 最大值的百分比 [0.01,100] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS:工站最终运动速度会*全局速度的百分比,默认100% *********************************************/ EXPORT_C int WINAPI set_global_speed(int tid, double vel); /********************************************* *Function: 获取指定工站的全局速度 *Intput: tid 工站ID pvel 最大值的百分比 [0.01,100] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI get_global_speed(int tid, double* pvel); /********************************************* *Function: 设置指定工站料盘数据 *Intput: tid 工站ID plt 料盘数据 料盘索引[1,50] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI set_pallet_info(int tid, const TPallet* plt); /********************************************* *Function: 根据索引获取料盘 *Intput: tid 工站ID/名称 index 料盘索引[1,50] plt 料盘数据 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI get_pallet_info(int tid, int index, TPallet* plt); /********************************************* *Function: 判断当前位置是否在指定点附近 *Intput: tid 工站ID index 点索引[1,200] ptOffset 是否增加偏移 offset 最大偏移值 *Output: NULL *Return: 1在 0不在,其它返回错误码 *********************************************/ EXPORT_C int WINAPI is_near_point(int tid, int index, const TPoint* ptOffset = 0, double offset = 0.01); /********************************************* *Function: 获指定工站轴数量 *Intput: tid 工站ID *Output: NULL *Return: 返回工站轴数量 *********************************************/ EXPORT_C int WINAPI station_axis_count(int tid); /********************************************* *Function:清除指定工站所有轴限位状态/停止标识 *Intput: tid 工站ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 停止状态下才可调用 *********************************************/ EXPORT_C int WINAPI station_reset(int tid); /********************************************* *Function: 指定工站开始回原 *Intput: tid 工站ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 调用get_dev_status 判断回原是否结束 *********************************************/ EXPORT_C int WINAPI station_home(int tid); /********************************************* *Function: 指定工站暂停/恢复运动 *Intput: tid 工站ID ipause 1暂停 0恢复 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI station_pause(int tid, int ipause = 1); /********************************************* *Function: 让指定工站停止运动 *Intput: tid 工站ID stoptype 0平滑停止 1紧急停止 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI station_stop(int tid, int stoptype = 0); /********************************************* *Function: 指定工站点位运动到指定位置 *Intput: tid 工站ID ptPos,点位置,包含每个轴目标位置 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 此接口支持强制点位运动,即点位运动中时,可以强制改变目标位置 *PS: 未回原也可以调用此接口运动 *********************************************/ EXPORT_C int WINAPI go_to_pos(int tid, const TPoint* ptPos); /********************************************* *Function: 指定工站点位运动到指定点 *Intput: tid 工站ID index,点索引[0,200] 为0时基于当前位置 ptOffset 是否增加偏移 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: index=0时,必须带偏移量,否则不运动 *PS: 此接口支持强制点位运动,即点位运动中时,可以强制改变目标位置 当index=0时,未回原也可以运动 *********************************************/ EXPORT_C int WINAPI go_to_point(int tid, int index, const TPoint* ptOffset = 0); /********************************************* *Function: 指定工站直线插补运动到指定点 *Intput: tid 工站ID index 点索引[0,200] 为0时基于当前位置 ptOffset 是否增加偏移 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI move_to_point(int tid, int index, const TPoint* ptOffset = 0); /********************************************* *Function: 以当前位置为起始点, 圆弧插补运动 *Intput: tid 工站ID iPointMiddle, 圆弧上的中间点; iPointEnd, 圆弧上的终点; ptOffset 是否增加偏移 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI move_arc(int tid, int iPointMiddle, int iPointEnd, const TPoint* ptOffset = 0); /********************************************* *Function: 添加直线插补运动点位到连续运动合集 *Intput: tid 工站ID index 点索引 ptOffset 是否增加偏移 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI add_cp_line_point(int tid, int index, const TPoint* ptOffset = 0); /********************************************* *Function: 添加一段圆弧插补运动到连续运动合集 *Intput: tid 工站ID iPointMiddle, 圆弧上的中间点; iPointEnd, 圆弧上的终点; ptOffset 是否增加偏移 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI add_cp_arc_point(int tid, int iPointMiddle, int iPointEnd, const TPoint* ptOffset = 0); /********************************************* *Function: 启动cp运动 *Intput: tid 工站ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI start_cp_move(int tid); /********************************************* *Function: 获取指定工站的点位置(点列表的数据) *Intput: tid 工站ID index,点位索引[0,200] *Output: pt 返回的点结构体 *Return: 成功返回0,失败返回错误码<0 *PS: index=0时,返回工站当前位置 *********************************************/ EXPORT_C int WINAPI get_point_by_index(int tid, int index, TPoint* pt); /********************************************* *Function: 获取指定工站的点位置(点列表的数据) *Intput: tid 工站ID name 点位名称 *Output: pt 返回的点结构体 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI get_point_by_name(int tid, const char* name, TPoint* pt); /********************************************* *Function: 获取料盘数据点位 *Intput: tid 工站ID index,料盘索引 [1,50] col 第几列 > 0 row 第几行 > 0 *Output: pt 返回的点结构体 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI get_point_by_pallet(int tid, int index, int col, int row, TPoint* pt); /********************************************* *Function: 设置点位置数据,不会改变名字 *Intput: tid 工站ID pt,要保存的点数据 点位索引[1,200] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI set_point(int tid, const TPoint* pt); /********************************************* *Function: 设置点位置数据 -- 名称、点位一块修改 *Intput: tid 工站ID pt 要保存的点数据 点位索引[1,200] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI save_point(int tid, const TPoint* pt); /********************************************* *Function: 示教当前点位 *Intput: tid 工站ID index 点位索引[1,200] name 点位名称 长度[1,31] *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI teach_point(int tid, int index, const char *name); /********************************************* *Function: 注册安全检测接口,注册后所有运动+IO操作 都会回调到接口检查安全性 *Intput: fun... 回调接口 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *PS: 传入fun=0即为反注册,注册后必须打开配置中的bSafeChk开关才生效 *********************************************/ EXPORT_C int WINAPI regist_safe_chk(FunSafeCallBack fun = 0); //////////////////IO/////////////////////// /********************************************* *Function: 读取指定卡指定类型指定页IO状态 *Intput: pid 卡ID di_type 输入信号类型 EMIOControlType page 按页读取,默认为0,axis 每页8位,io每页16位 *Output: NULL *Return: 返回读取到的状态,按位表示 *********************************************/ EXPORT_C int WINAPI read_by_page(int pid, EIOType dio_type, int page = 0); /********************************************* *Function: 根据IO ID读取输入/输出状态 *Intput: iid io/ID *Output: NULL *Return: 有信号1 无信号0, 其它为异常 *********************************************/ EXPORT_C int WINAPI read_io(int iid); /********************************************* *Function: 根据IO ID设置一个IO输出状态 *Intput: iid io/ID val 操作值 必须为1/0 *Output: 无 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI write_out(int iid, ushort val); /********************************************* *Function: 按页读取输入电压值 *Intput: pid 卡ID pVal 读取缓冲区数组地址 page 按页读取,默认为0,每页最大8个double *Output: pval 返回读取到的电压数组 最大为8个 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI read_ad_by_page(int pid, double* pVal, int page = 0); /********************************************* *Function: 读取输入电压值 *Intput: aid ad id *Output: pval 读取到的电压值 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI read_ad(int aid, double* pVal); /********************************************* *Function: 根据ID写入指定ad的输出值 *Intput: aid ad id *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI write_ad(int aid, double val); /********************************************* *Function: 根据IO名称读取输入/输出状态 *Intput: name io名称 *Output: NULL *Return: 有信号1 无信号0, 其它为异常 *********************************************/ EXPORT_C int WINAPI read_by_name(const char* name); /********************************************* *Function: 根据IO名称设置一个IO输出状态 *Intput: name io名称 val 操作值 必须为1/0 *Output: 无 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI write_by_name(const char* name, ushort val); /********************************************* *Function: 根据名称读取输入电压值 *Intput: name ad别名 *Output: pval 读取到的电压值 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI read_ad_by_name(const char* name, double* pVal); /********************************************* *Function: 根据名称写入指定ad的输出值 *Intput: name ad别名 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI write_ad_by_name(const char* name, double val); /************************************************** *Function: 获取系统IO状态 *Intput: type 系统IO类型 start <= type <= stop *Output: NULL *Return: 返回组合状态1/0,start都为1则返回1,其它都为0则0 ******************************************************/ EXPORT_C int WINAPI get_sysio_value(EMIOSYSType type); /************************************************** *Function: 打开/关闭所有刹车 *Intput: val 1刹车有效 0刹车无效 *Output: NULL *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI set_break(int val = ION); /**************************************************** *Function: 视觉处理指令,拍照完成返回 *Intput: pid 视觉ID secne 场景ID,需根据视觉通讯协议传递 timeout 超时设置 *Output: NULL *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI vision_process(int pid, int secne); /**************************************************** *Function: 获取视觉处理图像数据流 -- 2选1 *Intput: pid 视觉ID secne 场景ID,需根据视觉通讯协议传递 *Output: pimg 图像数据 *Return: 成功返回数据流大小,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI get_process_image(int pid, int secne, TVisionImage* pimg); /**************************************************** *Function: 获取视觉处理图像路径/文件名 -- 2选1 *Intput: pid 视觉ID secne 场景ID,需根据视觉通讯协议传递 *Output: path 图像路径/文件名 MAX_PATH *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI get_process_image_path(int pid, int secne, char* path); /**************************************************** *Function: 等待/获取视觉处理结果 -- 处理完成返回 *Intput: pid 视觉ID secne 场景ID,需根据视觉通讯协议传递 timeout 超时设置 -1无限等待 *Output: pres 返回结果 *Return: 成功返回0,失败返回错误码<0 超时返回ERR_TIMEOUT ******************************************************/ EXPORT_C int WINAPI recv_process_result(int pid, int secne, TVisionResult* pres, int timeout = -1); /**************************************************** *Function: 本机注册licence *Intput: pszregsn 注册码 or 6位验证码 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 若3次输入错误,则会产生超时机制,短时间内无法注册 ******************************************************/ EXPORT_C int WINAPI license_regist(const char* pszregsn); /**************************************************** *Function: 获取许可证是否有效 *Intput: NULL *Output: NULL *Return: 有效返回1,无效返回0 ******************************************************/ EXPORT_C int WINAPI license_is_valid(); /**************************************************** *Function: 获取本机注册信息 *Intput: NULL *Output: pInfo 注册信息 *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI license_get_info(TLicenseInfo* pInfo); /*********************************************** *Function: 注册一个插件增加一个插件 *Intput: pszdev 硬件ID,不能重复 pszdesc 硬件描述符 <32字节 pszhome 回原描述符 多种回原方式以","隔开 总长度<256字节 ctx 初始化参数描述符 多个参数以","隔开 总长度<256字节 参数描述与默认值以|分割 axiscnt 插件支持轴数量 iocnt 插件支持IO数量 adcnt 插件支持AD数量 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS:如果需要在应用层注册插件,必须在control_init之前注册,否则会失败 ***********************************************/ EXPORT_C int WINAPI regist_card_dev(const char* pszdev, const char* pszdesc, const char* pszhome, const char* ctx, ushort axiscnt, ushort iocnt, ushort adcnt, DevCallBack fun); /*********************************************** *Function: 注册一个插件增加一个插件 *Intput: pszdev 硬件ID,不能重复 pszdesc 硬件描述符 <32字节 pszhome 回原描述符 多种回原方式以;分割<256字节 ctx 初始化参数描述符 多个参数以;分割<256字节 参数描述与默认值以|分割 axiscnt 插件支持轴数量 iocnt 插件支持IO数量 adcnt 插件支持AD数量 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS:如果需要在应用层注册插件,必须在control_init之前注册,否则会失败 ***********************************************/ EXPORT_C int WINAPI regist_card_devs(const char* pszdev, const char* pszdesc, const char* pszhome, const char* ctx, ushort axiscnt, ushort iocnt, ushort adcnt, MotorFun* pfunList); #endif //防止重复包含