/********************************************************************* *文件说明: 主工作模块接口文件,提供运动控制管理,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 //防止重复包含