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.

180 lines
8.3 KiB
C++

/*******************************************************************
*文件说明: 工站类接口文件
*作者: logos
*日期: 2013/11/11
*修改日志: 2013/11/11 TOD2214 创建
2015/12/25 CW0793 重构
***********************************************************************/
#pragma once
#ifndef _DLL_INCLUDE_IDEV_H
#define _DLL_INCLUDE_IDEV_H
#include "dtype.h"
enum EDevType
{//插件类型
EDCard = 0, //卡类插件
EDVision, //视觉类插件
EDStation, //工站类插件
};
class IDev
{//基础类插件接口
public:
virtual int getID() const = 0;
virtual int getType() const = 0;
virtual int getStatus() const = 0;
virtual const char* getName() const = 0;
virtual int init() = 0;
virtual int deinit() = 0;
virtual int sendMessage(const char* msg, char* res) = 0;
virtual int recvMessage(const char* msg, char* res, int timeout) = 0;
virtual int getCmdDesc(char* pszcmddesc) = 0;
};
//导出接口
EXPORT_C int WINAPI IDev_getID(void* p);
EXPORT_C int WINAPI IDev_getType(void* p);
EXPORT_C int WINAPI IDev_getStatus(void* p);
EXPORT_C int WINAPI IDev_init(void* p);
EXPORT_C int WINAPI IDev_deinit(void* p);
EXPORT_C int WINAPI IDev_sendMessage(void* p, const char* msg, char* res);
EXPORT_C int WINAPI IDev_recvMessage(void* p, const char* msg, char* res, int timeout);
class IVision : public IDev
{//视觉类插件接口
public:
virtual int process(int secne) = 0;
virtual int processImg(int secne, TVisionImage* pimg) = 0;
virtual int processImgPath(int secne, char* pszpath) = 0;
virtual int processRes(int secne, TVisionResult* pres, int timeout = -1) = 0;
};
//导出接口
EXPORT_C int WINAPI IVision_process(IVision* p, int secne);
EXPORT_C int WINAPI IVision_processImg(IVision* p, int secne, TVisionImage* pimg);
EXPORT_C int WINAPI IVision_processImgPath(IVision* p, int secne, char* pszpath);
EXPORT_C int WINAPI IVision_processRes(IVision* p, int secne, TVisionResult* pres, int timeout = -1);
class IStation : public IDev
{//工站类接口
public:
virtual double getVel() const = 0;
virtual double getAcc() const = 0;
virtual double getDec() const = 0;
virtual double getGlobalSpeed() = 0;
virtual int setGlobalSpeed(double setval) = 0;
virtual int setSpeed(double vel, double acc, double dec) = 0;
//示教
virtual int getPallet(int index, TPallet* plt) = 0;
virtual int setPallet(const TPallet* plt) = 0; //设置料盘,直接保存
virtual int setPoint(const TPoint* pt) = 0; //设置点数据 到内存 临时设置,不保存
virtual int savePoint(const TPoint* pt) = 0; //保存点到文件
virtual int teachPoint(int index, const char* pszname) = 0; //示教当前点
virtual int getPointByIndex(TPoint* pt, int index = 0) = 0; //0表示当前位置
virtual int getPointByName(TPoint* pt, const char* pszname) = 0;
virtual int getPointByPallet(TPoint* pt, int plt, int col, int row) = 0;
virtual int isNearPoint(int index, const TPoint* ptOffset = 0, double offset = 0.01) = 0; //判断当前是否处于某个点附近 1是 0不是
//单轴
virtual int axisCount() const = 0;
virtual int axisID(int ijoint) = 0;
virtual int axisReset(int ijoint) = 0; //*PS: 含停止功能,并等待停止完成
virtual int axisStop(int ijoint, int stoptype) = 0;
virtual int axisHome(int ijoint) = 0;
virtual int axisStatus(int ijoint) = 0;
virtual int axisRead(int ijoint, EIOType dio_type) = 0;
virtual int axisWrite(int ijoint, EIOType do_type, int val) = 0;
virtual int axisGetPos(int ijoint, double* pval, int posType = EMPos_Default) = 0;
virtual int axisMoveJog(int ijoint, int dir) = 0;
virtual int axisSetPos(int ijoint, double pos) = 0;
virtual int axisMovePos(int ijoint, double pos) = 0;
virtual int axisMoveOffset(int ijoint, double offset) = 0;
virtual int axisFindLimit(int ijoint, int blimitN, int blimitP) = 0;
//运动控制
virtual int home() = 0;
virtual int reset() = 0; //*PS: 重置限位状态,清除停止标识
virtual int stop(int itype = 0) = 0;
virtual int pause(int ipause = 1) = 0;
virtual int goToPos(const TPoint* ptPos) = 0;
virtual int goToPoint(int index, const TPoint* ptOffset = 0) = 0;
virtual int moveToPoint(int index, const TPoint* ptOffset = 0) = 0;
virtual int moveArc(int iMiddle, int iEnd, const TPoint* ptOffset = 0) = 0;
//连续插补
virtual int addLinePoint(int index, const TPoint* ptOffset = 0) = 0;
virtual int addArcPoint(int iMiddle, int iEnd, const TPoint* ptOffset = 0) = 0;
virtual int startcp() = 0;
};
//导出接口
EXPORT_C double WINAPI IStation_getVel(IStation* p);
EXPORT_C double WINAPI IStation_getAcc(IStation* p);
EXPORT_C double WINAPI IStation_getDec(IStation* p);
EXPORT_C double WINAPI IStation_getGlobalSpeed(IStation* p);
EXPORT_C int WINAPI IStation_setGlobalSpeed(IStation* p, double setval);
EXPORT_C int WINAPI IStation_setSpeed(IStation* p, double vel, double acc, double dec);
EXPORT_C int WINAPI IStation_getPallet(IStation* p, int index, TPallet* plt);
EXPORT_C int WINAPI IStation_setPallet(IStation* p, const TPallet* plt);
EXPORT_C int WINAPI IStation_setPoint(IStation* p, const TPoint* pt);
EXPORT_C int WINAPI IStation_savePoint(IStation* p, const TPoint* pt);
EXPORT_C int WINAPI IStation_teachPoint(IStation* p, int index, const char* pszname);
EXPORT_C int WINAPI IStation_getPointByIndex(IStation* p, TPoint* pt, int index = 0);
EXPORT_C int WINAPI IStation_getPointByName(IStation* p, TPoint* pt, const char* pszname);
EXPORT_C int WINAPI IStation_getPointByPallet(IStation* p, TPoint* pt, int plt, int col, int row);
EXPORT_C int WINAPI IStation_isNearPoint(IStation* p, int index, const TPoint* ptOffset = 0, double offset = 0.01);
EXPORT_C int WINAPI IStation_axisCount(IStation* p);
EXPORT_C int WINAPI IStation_axisID(IStation* p, int ijoint);
EXPORT_C int WINAPI IStation_axisReset(IStation* p, int ijoint);
EXPORT_C int WINAPI IStation_axisStop(IStation* p, int ijoint, int stoptype);
EXPORT_C int WINAPI IStation_axisHome(IStation* p, int ijoint);
EXPORT_C int WINAPI IStation_axisStatus(IStation* p, int ijoint);
EXPORT_C int WINAPI IStation_axisRead(IStation* p, int ijoint, EIOType dio_type);
EXPORT_C int WINAPI IStation_axisWrite(IStation* p, int ijoint, EIOType do_type, int val);
EXPORT_C int WINAPI IStation_axisGetPos(IStation* p, int ijoint, double* pval, int posType = EMPos_Default);
EXPORT_C int WINAPI IStation_axisMoveJog(IStation* p, int ijoint, int dir);
EXPORT_C int WINAPI IStation_axisSetPos(IStation* p, int ijoint, double pos);
EXPORT_C int WINAPI IStation_axisMovePos(IStation* p, int ijoint, double pos);
EXPORT_C int WINAPI IStation_axisMoveOffset(IStation* p, int ijoint, double offset);
EXPORT_C int WINAPI IStation_axisFindLimit(IStation* p, int ijoint, int blimitN, int blimitP);
EXPORT_C int WINAPI IStation_home(IStation* p);
EXPORT_C int WINAPI IStation_reset(IStation* p);
EXPORT_C int WINAPI IStation_stop(IStation* p, int itype = 0);
EXPORT_C int WINAPI IStation_pause(IStation* p, int ipause = 1);
EXPORT_C int WINAPI IStation_goToPos(IStation* p, const TPoint* ptPos);
EXPORT_C int WINAPI IStation_goToPoint(IStation* p, int index, const TPoint* ptOffset = 0);
EXPORT_C int WINAPI IStation_moveToPoint(IStation* p, int index, const TPoint* ptOffset = 0);
EXPORT_C int WINAPI IStation_moveArc(IStation* p, int iMiddle, int iEnd, const TPoint* ptOffset = 0);
EXPORT_C int WINAPI IStation_addLinePoint(IStation* p, int index, const TPoint* ptOffset = 0);
EXPORT_C int WINAPI IStation_addArcPoint(IStation* p, int iMiddle, int iEnd, const TPoint* ptOffset = 0);
EXPORT_C int WINAPI IStation_startcp(IStation* p);
/*********************************************
*Function: 获取卡对象操作接口
*Intput: pid 卡ID
*Output: NULL
*Return: 成功返回卡对象接口类,失败返回NULL
*********************************************/
EXPORT_C IDev* WINAPI get_icard(int cid);
/*********************************************
*Function: 获取视觉对象操作接口
*Intput: vid 视觉ID
*Output: NULL
*Return: 成功返回视觉对象接口类,失败返回NULL
*********************************************/
EXPORT_C IVision* WINAPI get_ivision(int vid);
/*********************************************
*Function: 获取工站对象操作接口
*Intput: tid 工站ID
*Output: NULL
*Return: 成功返回工站对象接口类,失败返回NULL
*********************************************/
EXPORT_C IStation* WINAPI get_istation(int tid);
#endif //防止重复包含