/********************************************************************* *文件说明: 模拟接口,分为运动控制卡、IO卡、ad卡、机器人、视觉 *作者: logos *日期: 2017/05/12 *修改日志: 2017/05/12 CW4945 创建 模拟硬件接口 ***********************************************************************/ #pragma once #ifndef _INCLUDE_MOTOR_SIMULATOR_H #define _INCLUDE_MOTOR_SIMULATOR_H #include "dtype.h" /*********************************************** *Function: 模拟初始化一张卡 *Intput: card 卡ID axiscnt 轴数量 iocnt IO数量 adcnt ad数量 param 初始化参数 最多支持8个参数 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_init_card(int card, ushort axiscnt, ushort iocnt, ushort adcnt); /*********************************************** *Function: 模拟初始化一个视觉插件 *Intput: vid 视觉ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_init_vision(int vid); /*********************************************** *Function: 释放一个对象 卡/机器人/视觉 *Intput: pid 对象ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_deinit(int pid); /*********************************************** *Function: 获取对象状态 *Intput: pid 对象ID *Output: NULL *Return: 返回对象状态 >=0 *********************************************/ EXPORT_C int WINAPI sim_get_status(int pid); /********************************************* *Function: 向指定对象发送消息(万能接口) *Intput: pid 对象ID msg 要发送的消息 res 返回消息,可以不传 *Output: res 返回消息,可以不传 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_send(int pid, const char* msg, char* res = 0); /********************************************* *Function: 接收指定对象消息(万能接口) *Intput: pid 对象ID msg 过滤字段及参数,可以为空字符串 res 返回消息 timeout 超时机制 单位ms *Output: res 返回消息 *Return: 成功返回0,失败返回错误码<0 *PS: 超时返回ERR_TIMEOUT *PS: 若有过滤机制,未接收到的消息由底层插件自行处理,或缓存下来 *********************************************/ EXPORT_C int WINAPI sim_recv(int pid, const char* msg, char* res, int timeout = 0); /********************************************* *Function: 复位指定轴 *Intput: axis 轴ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_reset(int axis); /*********************************************** *Function: 单轴清零位置 *Intput: axis 轴ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_zero_pos(int axis); /*********************************************** *Function: 单轴回原 *Intput: axis 轴ID pos 搜索距离 offset 回原后偏移 vel 回原速度 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_home(int axis, double pos, double offset, double vel); /*********************************************** *Function: 判断单轴是否正在运动 *Intput: axis 轴ID *Output: NULL *Return: 1表示正在运动 0表示不在运动中 *********************************************/ EXPORT_C int WINAPI sim_axis_is_moving(int axis); /*********************************************** *Function: 设置单轴速度,就绪/运动时都可用 *Intput: axis 轴ID vel 运动速度 脉冲 acc 运动加速度 dec 运动减速度 *Output: NULL *Return: 返回0成功,否则错误码 *********************************************/ EXPORT_C int WINAPI sim_axis_set_speed(int axis, double vel, double acc, double dec); /*********************************************** *Function: 运动中修改单轴目标位置,仅单轴运动中可用,插补时不可用 *Intput: axis 轴ID pos 目标位置 脉冲 *Output: NULL *Return: 返回0成功,否则错误码 *********************************************/ EXPORT_C int WINAPI sim_axis_set_pos(int axis, double pos); /*********************************************** *Function: 停止单轴运动 *Intput: axis 轴ID type 0: 平滑停止 1:紧急停止 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_stop(int axis, int type); /*********************************************** *Function: 单轴移动到指定位置(脉冲) *Intput: axis 轴ID pos 点位(脉冲) vel 运动速度 脉冲 acc 运动加速度 dec 运动减速度 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_move_pos(int axis, double pos, double vel, double acc, double dec); /*********************************************** *Function: 单轴相对移动(连续) *Intput: axis 轴ID dir 0 负方向 1 正方向 vel 运动速度 脉冲 acc 运动加速度 dec 运动减速度 *Output: 无 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_move_jog(int axis, int dir, double vel, double acc, double dec); /*********************************************** *Function: 获取轴当前位置(脉冲) *Intput: axis 轴ID postype 0 编码器位置 1 规划器位置 *Output: pval 当前点位数据 *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_axis_get_pos(int axis, int postype, double *pval); /*********************************************** *Function: 创建一个坐标系 *Intput: pAxis 轴ID数组 nsize 轴数量,索引集数量 最少两个轴 *Output: NULL *Return: 失败返回 INVALID_HANDLE_INT,成功返回坐标系ID *********************************************/ EXPORT_C int WINAPI sim_create_crd(int *pAxis, ushort nsize); /*********************************************** *Function: 增加直线插补运动队列 *Intput: crdID 坐标系ID ppos 位置数组(脉冲),大小必须是创建坐标系时的轴数量 nsize 数组大小,需跟创建坐标系时保持一致 vel 运动速度 脉冲/ms acc 运动加速度 endvel 终点速度,默认为0 *Output: NULL *Return: 成功返回0,失败返回错误码<0 PS: 根据卡类型决定支持最大多少轴插补 *********************************************/ EXPORT_C int WINAPI sim_add_line_pos(int crdID, double *ppos, ushort nsize, double vel, double acc, double endvel = 0); /*********************************************** *Function: 增加圆弧插补运动队列 *Intput: crdID 坐标系ID ppos1 位置数组(脉冲),大小必须是创建坐标系时的轴数量 ppos2 位置数组(脉冲),大小必须是创建坐标系时的轴数量 ppos3 位置数组(脉冲),大小必须是创建坐标系时的轴数量 nsize 数组大小,需跟创建坐标系时保持一致 vel 运动速度 脉冲/ms acc 运动加速度 endvel 终点速度,默认为0 *Output: NULL *Return: 成功返回0,失败返回错误码<0 PS: 圆弧插补只能基于两轴进行,通过ppos1,ppos2 ppos3 3个点计算得出 若点位数据超过两轴发生变化,则会运动失败 *********************************************/ EXPORT_C int WINAPI sim_add_arc_pos(int crdID, double *ppos1, double *ppos2, double *ppos3, ushort nsize, double vel, double acc, double endvel = 0); /*********************************************** *Function: 启动插补运动 *Intput: crdID 坐标系ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_crd_move(int crdID); /*********************************************** *Function: 查询插补运动坐标系状态 *Intput: crdID 坐标系ID *Output: progress 返回当前已经完成的插补段数 *Return: 返回1标识在运动中,0不在运动 *PS: 当重新建立坐标系或者调用 clear_crd_data 指令后,该值会被清零 *********************************************/ EXPORT_C int WINAPI sim_crd_is_moving(int crdID, int *progress); /*********************************************** *Function: 关闭一个坐标系 *Intput: crdID 坐标系ID *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_close_crd(int crdID); /*********************************************** *Function: 读取指定位通用输入io状态 *Intput: iid IO *Output: NULL *Return: 有信号为1,无信号为0 *********************************************/ EXPORT_C int WINAPI sim_read_in(int iid); /*********************************************** *Function: 读取指定位通用输出io状态 *Intput: iid IO *Output: NULL *Return: 有信号为1,无信号为0 *********************************************/ EXPORT_C int WINAPI sim_read_out(int iid); /*********************************************** *Function: 对指定位通用输出IO写入值 *Intput: iid IO val 写入值 1 / 0 *Output: NULL *Return: 成功返回0,失败返回错误码<0 *********************************************/ EXPORT_C int WINAPI sim_write_out(int iid, ushort val); /*********************************************** *Function: 读取指定通道的模拟量值 *Intput: card 卡ID *Output: pVal 读取到的值 *Return: 有信号为1,无信号为0 *********************************************/ EXPORT_C int WINAPI sim_read_ad(int aid, double* pVal); /*********************************************** *Function: 写入指定通道的模拟量值 *Intput: aid AD *Output: NULL *Return: 有信号为1,无信号为0 *********************************************/ EXPORT_C int WINAPI sim_write_ad(int aid, double val); /**************************************************** *Function: 视觉处理指令,拍照完成返回 *Intput: vid 视觉ID secne 场景ID,需根据视觉通讯协议传递 timeout 超时设置 *Output: NULL *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI sim_vision_process(int vid, int secne); /**************************************************** *Function: 获取视觉处理结果 *Intput: vid 视觉ID secne 场景ID,需根据视觉通讯协议传递 timeout 超时设置 -1无线等待 *Output: pres 返回结果 *Return: 成功返回0,失败返回错误码<0 超时返回ERR_TIMEOUT ******************************************************/ EXPORT_C int WINAPI sim_recv_process_result(int vid, int secne, TVisionResult* pres, int timeout); /**************************************************** *Function: 获取视觉处理图像数据流 *Intput: vid 视觉ID secne 场景ID,需根据视觉通讯协议传递 *Output: pimg 图像数据 *Return: 成功返回数据流大小,失败返回错误码 < 0 ******************************************************/ EXPORT_C int WINAPI sim_get_process_image(int vid, int secne, TVisionImage* pimg); /**************************************************** *Function: 获取视觉处理图像路径 *Intput: vid 视觉ID secne 场景ID,需根据视觉通讯协议传递 *Output: path 图像路径 256字节 *Return: 成功返回0,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI sim_get_process_image_path(int vid, int secne, char* path); #endif //防止重复包含