|
|
/*********************************************************************
|
|
|
*文件说明: 主工作模块接口文件,提供运动控制管理,IO检测管理,工作流程管理
|
|
|
*作者: luojing
|
|
|
*日期: 2013/10/26
|
|
|
*修改日志: 2013/10/26 CW0793 创建
|
|
|
|
|
|
与op通信协议: io 0,type,name,val type-io类型 name io名 val 值
|
|
|
move 1,type,index type-EM_OP_EVENT index 索引
|
|
|
返回消息:
|
|
|
1 成功 0 失败退出
|
|
|
1.4版本更新,消息机制改为回调通知+调用接口运行,提升效率--2015-04-23
|
|
|
增加组装运动模式 -- 2015-07-23 cw0793
|
|
|
增加模拟量运动模式 -- 2015-08-21 cw0793
|
|
|
增加虚拟工站,独立线程执行,可纯IO操作以及模拟量读取-- 2015-08-26 cw0793
|
|
|
-- CW4945 2017/01/11
|
|
|
-- 修改视觉消息成发送/等待消息,节点名称暂定为卡名称,消息szparam为消息内容
|
|
|
|
|
|
-- CW4945 2017/01/19
|
|
|
-- 修改节点运动参数,现在不可以发送消息,bparam2修改为是否等待运动结束,默认等待
|
|
|
-- 修改组装运动模式,现在不为设置偏移量,不运动,该步骤后续节点根据这个偏移运动
|
|
|
-- 增加5种运动模式
|
|
|
1. 回调应用层,之前的发送消息,现在独立成一种方式
|
|
|
2. 等待回原完成,可以等待单轴也可以等待工站
|
|
|
3. 等待运动完成
|
|
|
4. 等待运动到某位置附近,若运动完成还没到也不会报警。
|
|
|
5. 停止工站运动
|
|
|
v2.0 -- update by logos in 2020/05/11
|
|
|
优化部分节点模式,缩减至27种运动模式
|
|
|
|
|
|
-- update by logos in 2021/03/22
|
|
|
增加料盘/矩阵运动模式 可设置通用类料盘 #include "matrix.h"
|
|
|
|
|
|
2.1.01->2.1.02 update by logos in 2021/08/18
|
|
|
1. 修改脚本跳转节点时,如果之前发过应用层消息,可能引发错误
|
|
|
2. 修改配置参数,增加“暂停时不中断当前运动”选项,勾选后暂停时,当前节点会运动完成再暂停流程
|
|
|
3. 优化暂停方式,jog模式,以及暂停时检测当前哪些task需要暂停,
|
|
|
暂停并添加到队列,恢复的时候仅从队列恢复暂停,分清手动与自动控制的暂停恢复
|
|
|
|
|
|
2.1.02->2.1.03 修改暂停中断方式
|
|
|
2.1.03->2.1.04
|
|
|
1. 修改料盘接口,删除获取下一节点接口
|
|
|
2. 修改料盘对应脚本接口,现在只有4个接口 work_get work_set work_get_posx work_get_posy
|
|
|
2.1.04->2.1.05
|
|
|
1. 增加项目配置功能
|
|
|
2. 增加接口,切换项目,新建项目,获取项目列表等
|
|
|
|
|
|
***********************************************************************/
|
|
|
#pragma once
|
|
|
#ifndef _DLL_INCLUDE_OCTOPUS_H
|
|
|
#define _DLL_INCLUDE_OCTOPUS_H
|
|
|
|
|
|
#ifndef EXPORT_C
|
|
|
#define EXPORT_C extern "C"
|
|
|
#endif
|
|
|
|
|
|
#ifndef WINAPI
|
|
|
#define WINAPI __stdcall
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_NAME_LEN
|
|
|
#define MAX_NAME_LEN 32
|
|
|
#endif
|
|
|
|
|
|
#ifndef KEY_LEN
|
|
|
#define KEY_LEN 128
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_BUF_LEN
|
|
|
#define MAX_BUF_LEN 256
|
|
|
#endif
|
|
|
|
|
|
#define MIN_PROC_ID 1010 //最小流程ID
|
|
|
#define MAX_PROC_ID 1999 //最大流程ID
|
|
|
|
|
|
#define MIN_STEP_ID 20001 //最小步骤ID
|
|
|
#define MAX_STEP_ID 29999 //最大步骤ID
|
|
|
|
|
|
#define MIN_NODE_ID 1000001 //最小节点ID
|
|
|
#define MAX_NODE_ID 99999999 //最大节点ID
|
|
|
|
|
|
//ops专用变量
|
|
|
#define OPS_STATUS "ops_status" //ops状态
|
|
|
#define OPS_START "ops_start" //启动信号
|
|
|
#define OPS_RESET "ops_reset" //复位信号
|
|
|
#define OPS_ESTOP "ops_estop" //急停信号
|
|
|
#define OPS_PAUSE "ops_pause" //暂停信号
|
|
|
#define OPS_STOP "ops_stop" //停止信号
|
|
|
|
|
|
enum EOpsMsgType
|
|
|
{//ops消息类型
|
|
|
MSG_APP_CALL = 0, //应用层消息
|
|
|
MSG_RUN_ERR, //错误消息
|
|
|
MSG_RUN_WARN, //警告消息
|
|
|
};
|
|
|
|
|
|
enum EOpsStatus
|
|
|
{//系统状态
|
|
|
EOPS_NOINIT = 0, //未初始化
|
|
|
EOPS_ESTOP, //急停
|
|
|
EOPS_NEED_RESET, //等待复位
|
|
|
EOPS_IDLE, //就绪
|
|
|
EOPS_RESET, //复位中
|
|
|
EOPS_STOP, //停止中
|
|
|
EOPS_PAUSE, //暂停
|
|
|
EOPS_RUNING, //运行中
|
|
|
};
|
|
|
|
|
|
enum EProcStatus
|
|
|
{//流程状态
|
|
|
EPROC_IDLE = 0, //就绪
|
|
|
EPROC_RUNING, //运行中
|
|
|
EPROC_PAUSE, //暂停
|
|
|
EPROC_STOP, //手动停止 - 中断
|
|
|
EPROC_ERROR, //运行错误
|
|
|
EPROC_BREAK, //触发断点
|
|
|
};
|
|
|
|
|
|
enum ETaskStatus
|
|
|
{//任务运行状态
|
|
|
ETASK_IDLE = 0, //就绪
|
|
|
ETASK_PROCESS, //准备中
|
|
|
ETASK_SLEEP, //延时
|
|
|
ETASK_WAIT_APP, //等待应用层处理
|
|
|
ETASK_WAIT_IO, //等待io信号
|
|
|
ETASK_WAIT_POS, //等待到达指定位置
|
|
|
ETASK_WAIT_MSG, //等待接收消息
|
|
|
ETASK_WAIT_PROC, //等待流程运行完成
|
|
|
ETASK_WAIT_MOVE, //等待运动完成
|
|
|
ETASK_WAIT_CHECK, //等待检测信号
|
|
|
ETASK_WAIT_SIGNAL, //等待资源信号
|
|
|
ETASK_WAIT_VISIONR, //等待视觉结果
|
|
|
ETASK_BREAK, //触发断点
|
|
|
|
|
|
ETASK_RUN_ERR, //运行错误
|
|
|
};
|
|
|
|
|
|
struct TOpsCfg
|
|
|
{//设置项
|
|
|
int bPrintLog; //是否打印日志
|
|
|
int manyReset; //允许多次复位
|
|
|
int autoReset; //启动自动复位
|
|
|
int autoContinue; //暂停自动恢复 -- 默认需要按启动后继续
|
|
|
int resetStop; //复位=停止,工作中按复位触发停止
|
|
|
int startPause; //启动=暂停,工作中按启动触发暂停
|
|
|
int stopProc; //停止时,复位所有流程 - 系统流程除外
|
|
|
int bSaveTxt; //保存为文本文件
|
|
|
int offPause; //屏蔽暂停 -- 屏蔽安全门
|
|
|
int offIOChk; //屏蔽IO检测 -- 空跑
|
|
|
int offVision; //屏蔽视觉 -- 空跑
|
|
|
int offWarn; //屏蔽除运动外报警 -- 通过后续节点处理
|
|
|
int offMoveWarn; //屏蔽运动报警 -- 通过后续节点处理
|
|
|
int offNodeMsg; //屏蔽节点消息 -- 通过后续节点处理
|
|
|
int pauseNoStop; //暂停触发时不中断运动
|
|
|
int bsetFlowPath; //流程目录跟随产品目录
|
|
|
int offBreak; //屏蔽所有断点
|
|
|
int offMove; //屏蔽运动
|
|
|
};
|
|
|
|
|
|
struct TProductCfg
|
|
|
{//产品配置项
|
|
|
char key[KEY_LEN]; //段落
|
|
|
char name[KEY_LEN]; //键值
|
|
|
char desc[MAX_NAME_LEN]; //描述
|
|
|
char val[MAX_BUF_LEN]; //当前值
|
|
|
};
|
|
|
|
|
|
enum OpsErrCode
|
|
|
{//错误代码
|
|
|
ERR_OPS_NORUN = -800, //ops服务未运行
|
|
|
ERR_NODE_CMD, //节点命令行无效
|
|
|
ERR_PROC_TYPE, //流程类型错误
|
|
|
ERR_NODE_TYPE, //节点类型错误
|
|
|
ERR_INVALID_PROC, //无效的procID
|
|
|
ERR_INVALID_TASK, //无效的taskID
|
|
|
ERR_INVALID_STEP, //无效的stepID
|
|
|
ERR_INVALID_NODE, //无效的nodeID
|
|
|
ERR_NONEED_WORK, //不需要工作
|
|
|
ERR_STOP, //异常停止中
|
|
|
ERR_PARSE_STEP, //步骤脚本解析失败
|
|
|
};
|
|
|
|
|
|
//消息回调接口原型
|
|
|
//event 消息类型
|
|
|
//id 步骤ID、节点ID
|
|
|
typedef void (WINAPI *ProcReCall)(int evt, int id, void* lparam);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化ops模块资源
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 初始化以后才能调用该模块其它接口
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_init();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放ops模块资源
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_deinit();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前流程引擎版本号 - 4位整数
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前ops版本号1401->1.4.01
|
|
|
*PS: 当版本号为5位时,为beta测试版,个位数为测试版本号
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_version();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 启动ops服务 -- 为启动时ops状态为 未初始化
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 会启动线程执行扫描
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_startup();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭ops服务 -- 关闭后ops状态为 未初始化
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_shutdown();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个项目 -- 默认为default
|
|
|
*Intput: pszname 项目名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 所有项目都在project目录下
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI create_project(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个项目
|
|
|
*Intput: pszname 项目名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 所有项目都在project目录下,不能删除当前项目
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI delete_project(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 复制一个项目到另一个项目
|
|
|
*Intput: pszname 项目名称<32字节
|
|
|
pszcopy 待copy的项目名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 基于project目录下创建 若pszname不存在,则新建
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI copy_project(const char* pszname, const char* pszcopy);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 加载项目 -- 重启加载
|
|
|
*Intput: pszname 项目名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 必须保证该项目是存在的,否则加载会失败
|
|
|
*PS: 加载所有配置项目,加载后需要重启
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI load_project(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 加载项目 -- 立即加载
|
|
|
*Intput: pszname 项目名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 必须保证该项目是存在的,否则加载会失败
|
|
|
*PS: 加载所有配置项目,加载后需要重新复位
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI load_projects(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前项目名称
|
|
|
*Intput: NULL
|
|
|
*Output: pszname 当前项目名称 保证32字节
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_cur_project(char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取项目列表
|
|
|
*Intput: NULL
|
|
|
*Output: pathlist 名称列表缓冲区
|
|
|
*Return: 返回列表字符串长度,包含两个'\0'结束符
|
|
|
*PS: 可以传入NULL获取字符串长度,再申请内存传入获取
|
|
|
*PS: 返回列表数量,以'\0'分割,以两个'\0'结束
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_all_project(char* pathlist = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置OPS配置项
|
|
|
*Intput: pcfg 配置数据
|
|
|
*Output: pcfg 配置数据
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_set_cfg(const TOpsCfg* pcfg);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取OPS配置项
|
|
|
*Intput: pcfg 配置数据
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_get_cfg(TOpsCfg* pcfg);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个产品 -- 默认为default
|
|
|
*Intput: pszname 产品名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 基于工作目录下创建
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI create_product(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个产品
|
|
|
*Intput: pszname 产品名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 基于工作目录下的产品目录,不能删除当前产品
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI delete_product(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 复制一个产品参数到另一个产品
|
|
|
*Intput: pszname 产品名称<32字节
|
|
|
pszcopy 待copy的产品名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 基于工作目录下创建 若pszname不存在,则新建
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI copy_product(const char* pszname, const char* pszcopy);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 加载某个产品
|
|
|
*Intput: pszname 产品名称<32字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 必须保证该产品是存在的,否则加载会失败
|
|
|
*PS: 加载流程、点位、配置等等
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI load_product(const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前产品名称
|
|
|
*Intput: NULL
|
|
|
*Output: pszname 当前产品名称 保证32字节
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_cur_product(char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取产品列表
|
|
|
*Intput: NULL
|
|
|
*Output: pathlist 名称列表缓冲区
|
|
|
*Return: 返回列表字符串长度,包含两个'\0'结束符
|
|
|
*PS: 可以传入NULL获取字符串长度,再申请内存传入获取
|
|
|
*PS: 返回列表数量,以'\0'分割,以两个'\0'结束
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_all_product(char* pathlist = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置当前产品参数
|
|
|
*Intput: plst 产品参数结构体
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI set_product_cfg(TProductCfg* plst);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前产品参数
|
|
|
*Intput: plst 产品参数结构体 必须包含key+name
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_product_cfg(TProductCfg* plst);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前产品参数列表
|
|
|
*Intput: plst 列表缓冲区
|
|
|
nsize 列表缓冲区大小
|
|
|
*Output: plst 列表缓冲区
|
|
|
*Return: 返回参数列表大小
|
|
|
*PS:可以先传NULL获取大小,再申请内存再次调用获取数据
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_product_cfg_list(TProductCfg* plst = 0, int nsize = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取产品目录
|
|
|
*Intput: NULL
|
|
|
*Output: path 当前产品目录 保证256字节
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_product_path(char* path);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置产品目录
|
|
|
*Intput: path 产品目录 保证256字节
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS: 设置产品目录以后,会把原来产品目录下所有产品文件夹拷贝到新目录
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI set_product_path(const char* path);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置模拟IO信号
|
|
|
*Intput: type 类型 参考 EM_IO_TYPE 如:EM_IO_START
|
|
|
val 1为有信号 0为无信号
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 本接口功能是往ops专用变量写入信号
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_analog_signal(int type, int val = 1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查询当前ops状态
|
|
|
*Intput: 无
|
|
|
*Output: 无
|
|
|
*Return: 参考 EOPS_STATE
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_ops_status();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个流程的当前状态或者运行信息
|
|
|
*Intput: pid 流程ID
|
|
|
*Output: sid 正在执行的步骤ID 可不传入
|
|
|
*Return: 失败返回错误码<0,就绪返回0 参考 EPROC_STATE
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_proc_status(int pid, int* sid = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取最后一次流程运行ct, 单位ms 根据名称
|
|
|
*Intput: pid 流程ID
|
|
|
*Output: NULL
|
|
|
*Return: 返回运行耗时,失败返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_proc_ct(int pid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取task当前状态
|
|
|
*Intput: task taskID - 工站、卡、流程、视觉ID
|
|
|
*Output: pid 正在执行的流程ID 可不传入
|
|
|
sid 正在执行的步骤ID 可不传入
|
|
|
nid 正在执行的节点ID 可不传入
|
|
|
*Return: 失败返回错误码<0,就绪返回0 参考 ETaskStatus
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_task_status(int task, int* pid = 0, int* sid = 0, int* nid = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 启动一个流程
|
|
|
*Intput: pid 流程ID
|
|
|
sid 步骤ID 传入0表示从头开始
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proc_start(int pid, int sid = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 暂停一个流程
|
|
|
*Intput: pid 流程ID
|
|
|
bPause 是否暂停 1暂停 0取消
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proc_pause(int pid, int bPause = 1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 停止一个流程
|
|
|
*Intput: pid 流程ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 手动停止流程后状态会变成"停止",但不影响再次启动
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proc_stop(int pid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 重置流程状态 -- 停止且重置
|
|
|
*Intput: pid 流程ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 重置流程后状态会变成"就绪"
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proc_reset(int pid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 调试某个步骤或某个节点
|
|
|
*Intput: id 步骤ID/节点ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI proc_debug(int id);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 重置某个步骤或节点的当前断点标识,继续运行
|
|
|
*Intput: id 步骤ID/节点ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 只有触发断点时,才能调用
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI reset_break(int id);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 控制流程跳转到某个步骤继续执行
|
|
|
*Intput: sid 步骤ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
*PS: 必须保证该流程处于消息触发时调用
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI jump_step(int sid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 控制某task跳转到某个节点继续执行
|
|
|
*Intput: nid 节点ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 必须保证该task处于消息触发时调用
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI jump_node(int nid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 注册流程消息接收函数
|
|
|
*Intput: fun 回调函数
|
|
|
lparam 任意型指针
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
*PS:可以注册多个接口,ops会回调每一个接口,
|
|
|
但只要执行跳转动作后,其余的跳转将返回错误
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI regist_proc_notify(ProcReCall fun, void* param = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 反注册流程消息接收函数
|
|
|
*Intput: fun 回调函数
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI unregist_proc_notify(ProcReCall fun);
|
|
|
|
|
|
//------------此处提供UI修改工作流程的一些接口-------------------//
|
|
|
|
|
|
#ifndef ushort
|
|
|
#define ushort unsigned short
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_CMD_LEN
|
|
|
#define MAX_CMD_LEN 200
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_BUF_LEN
|
|
|
#define MAX_BUF_LEN 256
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_JS_LEN
|
|
|
#define MAX_JS_LEN 1024
|
|
|
#endif
|
|
|
|
|
|
#define NWAIT "asyn" //异步运动
|
|
|
#define DIRN "N" //负方向
|
|
|
#define DIRP "P" //正方向
|
|
|
|
|
|
enum ENodeType
|
|
|
{//节点类型 -- 所有带索引的参数,都是从1开始 0无效
|
|
|
ENODE_CALLAPP = 0, //callapp 等待应用层指令 -- 回调到应用层等待操作
|
|
|
ENODE_SLEEP, //sleep 50 设置延迟. 等待50ms
|
|
|
ENODE_SPEED, //speed 50 50 50 设置速度. vel,acc,dec速度百分比
|
|
|
ENODE_HOME, //home 1 [asyn] 工站回原.可传入参数单轴回原,整体回原时,单轴不再回原.轴索引[1,6] asyn-异步模式标识
|
|
|
ENODE_JOG, //jog 1 [dir] 单轴连续运动 1表示轴索引[1,6] dir: N表示运动方向为负 P表示正方向
|
|
|
ENODE_POS, //pos 1 val 单轴强制运动(运动中更改目标位置) 1表示轴索引[1,6] val 目标位置
|
|
|
ENODE_PTSET, //p1=pallet(1,1,2) +x(0.1) 设置点位.p0表示当前位置 pallet标识料盘 +x标识偏移 :x标识位置
|
|
|
ENODE_GO, //go p1 [+x(0.1)] 点位运动. p0表示当前位置 asyn-异步模式标识
|
|
|
ENODE_MOVE, //move p1 [+x(0.1)] 直线插补. p0表示当前位置 asyn-异步模式标识
|
|
|
ENODE_ARC, //arc p1,p2 [+x(0.1)] 圆弧插补.p0表示当前位置 asyn-异步模式标识
|
|
|
ENODE_WORK, //work p0 mid 根据预设矩阵获取工作点位 p0矩阵待设置点位, mid矩阵ID 每次执行结果会放到task变量中,通过变量判断结束(0)
|
|
|
ENODE_CHKPOS, //chkpos p1 [+x(0.1)] [0.001] 位置检测.p0表示当前位置 0.001-位置检测精度(double)
|
|
|
ENODE_WAITMOVE, //waitm 等待运动、回原结束
|
|
|
ENODE_STOP, //stopm 停止运动
|
|
|
ENODE_WIO, //wio 110011=1 写入IO值 110011-IO名称 1-写入1
|
|
|
ENODE_RIO, //rio 110011=1 500 [100] 读取/等待IO值 500-超时时间 100-扫描时间
|
|
|
ENODE_CHK, //chks 110011=1 500 检测执行, IO或者变量是否有效,仅有效信号触发时继续执行本工站本步骤后面节点
|
|
|
ENODE_WAITSIGNAL, //waits 101=1 等待竞争信号量,无限等待,多个流程竞争资源时使用 101-变量名 竞争1信号
|
|
|
ENODE_PROC, //startp 1002 [asyn] 启动流程 1002-流程ID asyn 异步模式标识
|
|
|
ENODE_WAITPROC, //waitp 1002 等待流程结束
|
|
|
ENODE_VP, //vp 101 1 视觉处理 101视觉ID 1-当前场景
|
|
|
ENODE_VPR, //vpr 101 2 5000 a1 a2...(16)等待视觉处理结果 2场景ID 5000超时时间ms a1,a2...(16)最多传入16个变量
|
|
|
ENODE_SEND, //send 101 msg 发送消息到一个对象.101-对象ID msg-消息内容
|
|
|
ENODE_RECV, //recv 101 "msg" 5000 a1 a2...(8)接收一个对象的消息 msg指令或消息匹配参数 5000超时时间ms a1,a2...(8)最多传入8个变量
|
|
|
ENODE_SHOWMSG, //msgbox 1 msg 弹窗提示消息,确认后会把结果写入当前工站对应的变量中,根据结果进行后续操作 1-MessageType msg 脚本内容
|
|
|
ENODE_PRINT, //print msg 打印日志 msg-脚本内容
|
|
|
ENODE_JUMP, //jump 1101 task跳转到某个节点继续执行
|
|
|
ENODE_SCRIPT, //cmd 运行脚本
|
|
|
};
|
|
|
|
|
|
enum ENodeState
|
|
|
{//节点标识
|
|
|
ENode_Normal = 0, //正常
|
|
|
ENode_Disable, //禁用
|
|
|
ENode_PError, //解析异常
|
|
|
ENode_Break, //断点
|
|
|
|
|
|
ENode_tsize, //范围标识
|
|
|
};
|
|
|
|
|
|
struct TNodeInfo
|
|
|
{//节点信息
|
|
|
char desc[MAX_NAME_LEN]; //描述
|
|
|
char cmd[MAX_CMD_LEN]; //命令行
|
|
|
int nid; //节点ID
|
|
|
int task; //taskID -- 卡ID、视觉ID、工站ID、流程ID
|
|
|
ENodeType type; //节点类型
|
|
|
ENodeState state; //0正常 1断点 2禁用 3解析异常
|
|
|
};
|
|
|
|
|
|
struct TStepInfo
|
|
|
{//步骤信息
|
|
|
char desc[MAX_NAME_LEN]; //描述
|
|
|
char script[MAX_JS_LEN]; //步骤完成后执行脚本
|
|
|
int sid; //步骤ID
|
|
|
ENodeState state; //0正常 1断点 2禁用 3解析异常
|
|
|
};
|
|
|
|
|
|
enum EMProcType
|
|
|
{//流程类型
|
|
|
EMProc_General = 0, //普通流程
|
|
|
EMProc_Start, //启动流程
|
|
|
EMProc_Reset, //复位流程
|
|
|
EMProc_Stop, //停止流程
|
|
|
EMProc_Pause, //暂停流程
|
|
|
EMProc_Continue, //恢复流程
|
|
|
EMProc_Sys, //系统流程 -- 自动启动且不响应系统信号
|
|
|
};
|
|
|
|
|
|
struct TFlow
|
|
|
{//流程信息
|
|
|
char name[MAX_NAME_LEN]; //名称
|
|
|
char start[MAX_NAME_LEN]; //启动IO - 可以是变量名
|
|
|
char pause[MAX_NAME_LEN]; //暂停IO - 可以是变量名
|
|
|
int pid; //流程ID
|
|
|
EMProcType type; //流程类型
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个流程
|
|
|
*Intput: pstProc 流程基本信息
|
|
|
*Output: pstProc 会填充procID
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 不提供删除流程接口,想要删除流程
|
|
|
可以关闭程序后在目录下直接删除文件
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI create_proc(TFlow* pstProc);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 修改一个流程
|
|
|
*Intput: pstProc 流程基本信息
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
*PS: 不提供删除流程接口,想要删除流程
|
|
|
可以关闭程序后在目录下直接删除文件
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI update_proc(TFlow* pstProc);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 插入一个步骤到流程
|
|
|
*Intput: pid 流程ID
|
|
|
sindex 步骤序号
|
|
|
pstStep 步骤结构体
|
|
|
*Output: pstStep 会填充stepID
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI insert_step(int pid, int sindex, TStepInfo* pstStep);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 修改一个步骤
|
|
|
*Intput: pstStep 步骤结构体
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI update_step(TStepInfo* pstStep);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 启用/禁用一个步骤 -- 根据步骤ID
|
|
|
*Intput: sid 步骤ID
|
|
|
bEnable 1启用 / 0禁用
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI enable_step(int sid, int bEnable = 1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置一个步骤为断点模式
|
|
|
*Intput: sid 步骤ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 设置以后,每次运行到该节点都会暂停
|
|
|
调用proc_reset_break清除才能继续运行
|
|
|
*PS: 调用enable_step可清除断点标识
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI break_step(int sid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个步骤
|
|
|
*Intput: sid 步骤ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI delete_step(int sid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 插入一个节点到某个步骤
|
|
|
*Intput: sid 步骤ID
|
|
|
nindex 节点序号
|
|
|
pNode 节点信息结构体
|
|
|
*Output: pNode 会填充nodeID
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI insert_node(int sid, int nindex, TNodeInfo* pNode);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 修改一个节点信息 -- 根据节点ID
|
|
|
*Intput: pNode 节点信息结构体
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI update_node(TNodeInfo* pNode);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 插入一个节点到某个步骤 -- 命令行
|
|
|
*Intput: sid 步骤ID
|
|
|
nindex 节点序号
|
|
|
task taskID -- 卡ID、视觉ID、工站ID、流程ID
|
|
|
pszcmd 命令行
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回节点ID>0,失败返回错误码<0
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
*PS: pszcmd格式: cmd param
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI insert_node_by_cmd(int sid, int nindex, int task, const char* pszcmd);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 修改一个节点信息 -- 根据节点ID
|
|
|
*Intput: nid 节点ID
|
|
|
pszcmd 命令行
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
*PS: pszcmd格式: cmd param
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI update_node_by_cmd(int nid, const char* pszcmd);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个节点信息的命令行 -- 根据节点ID
|
|
|
*Intput: nid 节点ID
|
|
|
pszcmd 命令行
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_node_cmd(int nid, char* pszcmd);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 启用/禁用一个节点
|
|
|
*Intput: nid 节点ID
|
|
|
bEnable 1启用 / 0禁用
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI enable_node(int nid, int bEnable = 1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置一个节点为断点模式
|
|
|
*Intput: nid 节点ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 设置以后,每次运行到该节点都会暂停
|
|
|
调用proc_reset_break清除才能继续运行
|
|
|
*PS: 调用enable_node可清除断点标识
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI break_node(int nid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个节点
|
|
|
*Intput: nid 节点ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 仅当该流程暂停时可设置
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI delete_node(int nid);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取所有流程基本信息
|
|
|
*Intput: pstProc 缓存指针 默认为空
|
|
|
*Output: pstProc 缓存指针
|
|
|
*Return: 返回工作流程数量
|
|
|
*PS: 先传NULL获取数量,new一个数组再传进来获取信息
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_all_proc(TFlow* pstProc = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个流程中所有步骤信息
|
|
|
*Intput: pid 流程ID
|
|
|
pstStep 缓存指针 默认为空,则获取数量
|
|
|
*Output: pstProc 缓存指针
|
|
|
*Return: 返回所有步骤数量
|
|
|
*PS: 先传NULL获取数量,new一个数组再传进来获取信息
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_all_step(int pid, TStepInfo* pstStep = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个步骤的所有节点信息
|
|
|
*Intput: sid 步骤ID
|
|
|
pNode 缓存指针 默认为空,则获取数量
|
|
|
*Output: pNode 节点信息结构体数组
|
|
|
*Return: 返回所有节点数量
|
|
|
*PS: 先传NULL获取数量,new一个数组再传进来获取信息
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_all_node(int sid, TNodeInfo* pNode = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个步骤内某个task的所有节点信息
|
|
|
*Intput: sid 步骤ID
|
|
|
task taskID
|
|
|
pNode 缓存指针 默认为空,则获取数量
|
|
|
*Output: pNode 节点信息结构体数组
|
|
|
*Return: 返回所有节点数量
|
|
|
*PS: 先传NULL获取数量,new一个数组再传进来获取信息
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_task_node(int sid, int task, TNodeInfo* pNode = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取某个流程基本信息
|
|
|
*Intput: pid 流程ID
|
|
|
pstProc 缓存指针 - 传0判断是否存在
|
|
|
*Output: pstProc 缓存指针
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_proc_info(int pid, TFlow* pstProc = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取某个步骤基本信息
|
|
|
*Intput: sid 步骤ID
|
|
|
pstStep 缓存指针 - 传0判断是否存在
|
|
|
*Output: pstStep 缓存指针
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_step_info(int sid, TStepInfo* pstStep = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取某个节点基本信息
|
|
|
*Intput: nid 节点ID
|
|
|
pNode 缓存指针 - 传0判断是否存在
|
|
|
*Output: pNode 缓存指针
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_node_info(int nid, TNodeInfo* pNode = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 检查脚本语法错误
|
|
|
*Intput: pszcmd 脚本内容
|
|
|
errmsg 错误消息提示 - 可以不传
|
|
|
*Output: errmsg 错误消息提示
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 检查错误,并不会真正运行
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ops_chk_js(const char* pszcmd, char* errmsg = 0);
|
|
|
|
|
|
#endif //防止重复包含
|