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.

317 lines
12 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.

/*********************************************************************
*文件说明: 模拟接口分为运动控制卡、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: 圆弧插补只能基于两轴进行通过ppos1ppos2 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 //防止重复包含