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.

1115 lines
41 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.

/*******************************************************************
*文件说明: 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 //防止重复包含