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.

284 lines
11 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
*日期: 2016/04/12
*修改日志: 2016/04/12 EW-0551 创建
***注意事项***
1. 无论哪种类型卡,都必须支持公共接口
2. 根据axis/io/ad数量获取相应操作接口若接口检测不通过则硬件加载会失败
io类提供通用IO输入输出的操作总共3个接口read_in/read_out/write_out,
若一个硬件包含IO类功能则必须实现这3个接口。
3. ad卡提供read_ad功能若包含此类型则必须支持该接口
4. 如果一张卡axis数量不为0则IO数量也不能为0.
5. 初始化参数描述/轴回原方法必须从get_dev_info接口返回数量和数组大小匹配
***********************************************************************/
#pragma once
#ifndef _INCLUDE_MOTOR_H
#define _INCLUDE_MOTOR_H
#include "dtype.h"
/***********************************************
*Function: 获取硬件信息描述
*Intput: pDev 硬件信息结构体
*Output: pDev 硬件信息缓冲区
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI get_dev_info(TDevInfo* pDev);
/***********************************************
*Function: 重置单轴状态、限位等
*Intput: cindex 卡号
axisIndex 轴号
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_reset(ushort cindex, ushort axisIndex);
/***********************************************
*Function: 单轴清零位置
*Intput: cindex 卡号
axisIndex 轴号
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_zero_pos(ushort cindex, ushort axisIndex);
/***********************************************
*Function: 单轴回原
*Intput: cindex 卡号
axisIndex 轴号
homeType 回原方式,根据 THomeTypeDesc 序号传递
pos 回原搜索距离
pspeed 回原速度
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_home(ushort cindex, ushort axisIndex, ushort homeType, double pos, double offset, double vel);
/***********************************************
*Function: 判断单轴是否正在运动
*Intput: cindex 卡号
axisIndex 轴号
*Output: NULL
*Return: 1表示正在运动 0表示不在运动中
*********************************************/
EXPORT_C int WINAPI axis_is_moving(ushort cindex, ushort axisIndex);
/***********************************************
*Function: 设置单轴速度,就绪/运动时都可用
*Intput: cindex 卡号
axisIndex 轴号
vel 运动速度 脉冲/ms
acc 运动加速度
dec 运动减速度
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_set_speed(ushort cindex, ushort axisIndex, double vel, double acc, double dec);
/***********************************************
*Function: 运动中修改单轴目标位置,仅单轴运动中可用,插补时不可用
*Intput: cindex 卡号
axisIndex 轴号
pos 目标位置 脉冲
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_set_pos(ushort cindex, ushort axisIndex, double pos);
/***********************************************
*Function: 停止单轴运动
*Intput: cindex 卡号
axisIndex 轴号
type 0: 平滑停止
1紧急停止
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_stop(ushort cindex, ushort axisIndex, int type);
/***********************************************
*Function: 单轴相对移动(连续)
*Intput: cindex 卡号
axisIndex 轴号
dir 0 负方向 1 正方向
vel 运动速度 脉冲/ms
acc 运动加速度
dec 运动减速度
*Output: 无
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_move_jog(ushort cindex, ushort axisIndex, int dir, double vel, double acc, double dec);
/***********************************************
*Function: 单轴移动到指定位置(脉冲)
*Intput: cindex 卡号
axisIndex 轴号
pos 点位(脉冲)
vel 运动速度 脉冲/ms
acc 运动加速度
dec 运动减速度
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_move_pos(ushort cindex, ushort axisIndex, double pos, double vel, double acc, double dec);
/***********************************************
*Function: 单轴相对当前位置移动(脉冲)
*Intput: cindex 卡号
axisIndex 轴号
offset 偏移距离 有正负之分
vel 运动速度 脉冲/ms
acc 运动加速度
dec 运动减速度
*Output: 无
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_move_offset(ushort cindex, ushort axisIndex, double offset, double vel, double acc, double dec);
/***********************************************
*Function: 读取指定轴IO输入输出状态
*Intput: cindex 卡索引
axisIndex 轴索引
dio_type IO类型
*Output: NULL
*Return: 有信号为1无信号为0
*********************************************/
EXPORT_C int WINAPI axis_read(ushort cindex, ushort axisIndex, EIOType dio_type);
/***********************************************
*Function: 对指定位轴IO操作
*Intput: cindex 卡索引
axisIndex 轴索引
do_type 输出IO类型
val 写入值 1 / 0
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI axis_write(ushort cindex, ushort axisIndex, ushort val, EIOType do_type);
/***********************************************
*Function: 获取轴当前位置(脉冲)
*Intput: ardIndex, 卡号
axisIndex 轴号
postype 0 编码器位置 1 规划器位置
*Output: pval 当前点位数据
*Return: 参考EM_ERR_CODE
*********************************************/
EXPORT_C int WINAPI axis_get_pos(ushort cindex, ushort axisIndex, EMPosType postype, double *pval);
/***********************************************
*Function: 创建一个坐标系
*Intput: cindex, 卡号
pAxisIndex 轴号索引数组
nsize 数组大小,最少两个轴
*Output: NULL
*Return: 成功返回坐标系ID>=0 失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI create_crd(ushort cindex, ushort *pAxisIndex, ushort nsize);
/***********************************************
*Function: 增加一个位置到直线插补运动队列
*Intput: crd 坐标系ID
ppos 位置数组(脉冲),大小必须是创建坐标系时的轴数量
nsize 数组大小,需跟创建坐标系时保持一致
vel 运动速度 脉冲/ms
acc 运动加速度
endvel 终点速度默认为0
*Output: NULL
*Return: 成功返回0失败返回错误码<0
PS: 根据卡类型决定支持最大多少轴插补
*********************************************/
EXPORT_C int WINAPI add_line_pos(int crd, double *ppos, ushort nsize, double vel, double acc, double endvel = 0);
/***********************************************
*Function: 增加两个位置到圆弧插补运动队列
*Intput: crd 坐标系ID
ppos1 位置数组(脉冲),大小必须是创建坐标系时的轴数量
ppos2 位置数组(脉冲),大小必须是创建坐标系时的轴数量
ppos3 位置数组(脉冲),大小必须是创建坐标系时的轴数量
nsize 数组大小,需跟创建坐标系时保持一致
vel 运动速度 脉冲/ms
acc 运动加速度
endvel 终点速度默认为0
*Output: NULL
*Return: 成功返回0失败返回错误码<0
PS: 圆弧插补只能基于两轴进行通过ppos1ppos2 ppos3 3个点计算得出
若点位数据超过两轴发生变化,则会运动失败
*********************************************/
EXPORT_C int WINAPI add_arc_pos(int crd, double *ppos1, double *ppos2, double *ppos3, ushort nsize, double vel, double acc, double endvel = 0);
/***********************************************
*Function: 启动插补运动
*Intput: crd 坐标系ID
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI crd_move(int crd);
/***********************************************
*Function: 查询插补运动坐标系状态
*Intput: crd 坐标系ID
*Output: progress 返回当前已经完成的插补段数
*Return: 返回1标识在运动中0不在运动
*********************************************/
EXPORT_C int WINAPI crd_is_moving(int crd, int *progress);
/***********************************************
*Function: 关闭一个坐标系
*Intput: crd 坐标系ID
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI close_crd(int crd);
/***********************************************
*Function: 读取指定位通用输入io状态
*Intput: cindex 卡索引
in_index io索引号
*Output: NULL
*Return: 有信号为1无信号为0
*********************************************/
EXPORT_C int WINAPI read_in(ushort cindex, ushort in_index);
/***********************************************
*Function: 获取指定位通用IO操作状态
*Intput: cindex 卡索引
out_index io索引号
*Output: NULL
*Return: 有信号为1无信号为0失败返回EM_ERR_CODE
*********************************************/
EXPORT_C int WINAPI read_out(ushort cindex, ushort out_index);
/***********************************************
*Function: 对指定位通用输出IO写入值
*Intput: cindex 卡索引
out_index io索引号
val 写入值 1 / 0
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI write_out(ushort cindex, ushort out_index, ushort val);
/***********************************************
*Function: 读取指定通道的模拟量值
*Intput: cindex 卡索引
index 通道索引
*Output: pVal 待读取模拟量
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI read_ad(ushort cindex, ushort index, double* pVal);
/***********************************************
*Function: 对指定通道写入模拟量
*Intput: cindex 卡索引
index 通道索引
val 模拟量
*Output: NULL
*Return: 成功返回0失败返回错误码<0
*********************************************/
EXPORT_C int WINAPI write_ad(ushort cindex, ushort index, double val);
#endif //防止重复包含