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.

878 lines
32 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检测管理,工作流程管理
*作者: 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 //防止重复包含