|
|
/*********************************************************************
|
|
|
*文件说明: 模拟接口,分为运动控制卡、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 //防止重复包含
|