#pragma once #ifndef SECS_PORT_EXTERN #define SECS_PORT_EXTERN // 使用C++ Builder 编译器 // #define __CPP_BUILDER__ #ifdef __CPP_BUILDER__ #define SECS_DLLEXPORT #endif // 定义导出宏定义 #ifdef SECS_DLLEXPORT #define SP_DLLEXPORT __declspec(dllexport) #else #define SP_DLLEXPORT __declspec(dllimport) #endif #ifdef __cplusplus # define SP_EXTERN extern "C" SP_DLLEXPORT #else # define SP_EXTERN extern SP_DLLEXPORT #endif #ifndef CALL_TYPE #define STDCALL #ifdef STDCALL #define CALL_TYPE __stdcall #else #define CALL_TYPE __cdecl #endif #endif /* IMC指针 */ #ifdef SECS_PORT_BUILD typedef class CSecsPort300Ex* IMCHandle; #else typedef void* IMCHandle; #endif // 适应不同编译器:VC6,VS2010,VS2015 // 适应 c\c++\c#\vb typedef unsigned __int8 u8; typedef unsigned __int16 u16; typedef unsigned __int32 u32; typedef unsigned __int64 u64; typedef signed __int8 int8; typedef signed __int16 int16; typedef signed __int32 int32; typedef signed __int64 int64; typedef unsigned char uchar; /* 统一使用int64 64位整形,兼容x64,x86*/ enum LOCKER_TYPE { eLocker=0, }; // 定义授权 // 产品类型 #define JNG_PRODUCT_NOT_EXIST 0 // 不存在产品类型 #define JNG_PRODUCT_SECS_DRIVER 1001 // SECS Driver 版本 #define JNG_PRODUCT_SECS_GEM_DEMO 1010 // SECS/GEM demo 版本 #define JNG_PRODUCT_SECS_GEM_DATA 1011 // SECS/GEM 数据版,仅读数据(终端数据采集) #define JNG_PRODUCT_SECS_GEM_STANDRAD 1020 // SECS/GEM 标准版 #define JNG_PRODUCT_SECS_GEM_PREMINUM 1030 // SECS/GEM 高级版 #define JNG_PRODUCT_SECS_GEM_300MM 1100 // SECS/GEM 300 通讯 /* ** 定义回调事件处理 */ /* 这是 Connected() 事件 ** 发生在成功初始化后 */ typedef void (IMCConnectedProc) (IMCHandle); /* ** 与服务器断开通讯时发生 */ typedef void (IMCDisconnectedProc) (IMCHandle); /* 错误处理 */ typedef void (IMCErrorProc) (IMCHandle, int64 errnum, const char *text); /* 断开通讯 */ typedef void (IMCShutdownProc) (IMCHandle, int64 *StayAlive); /* ** 追溯功能 ** 出错或者关键步骤通知 */ typedef void (IMCTraceLogProc) (IMCHandle, int64 nCode, const char* pText); // pDestination :消息发送目的地 // Data : 数据 // ClientData : 客户传进来的参数 typedef void (WhenProc) (IMCHandle imc, const char* pDestinationMailbox, const char *pReplyMailbox, const char *Data, void *ClientData); // SECS消息接收处理 typedef void (SecsMessageReceiveProc)(IMCHandle *, int64 stream, int64 function, bool send_reply, int64 transactionID, const char* TSN_data, const char* header, void *clientData); typedef void (IMCStateChangeProc)(IMCHandle, const char* pType, __int64 nState); // 状态改变 typedef void (IMCTerminalProc)(IMCHandle, __int64 nTid, __int64 nSize, const char* pText); // 终端消息 typedef void (IMCRemoteProc)(IMCHandle, const char* pText, const char** pName, const char** pValue, __int64 pCount); // 远程命令 // 远程控制 /* 构造一个连接对象 */ /* guname: 全局唯一名称 */ SP_EXTERN IMCHandle imc_new(); /* 断开一个连接(如果需要断开连接)和释放资源 */ SP_EXTERN void imc_destroy(IMCHandle handle); /* 设置输出语言信息 */ /* pHandle可以为空 */ SP_EXTERN void imc_language(IMCHandle pHandle, int64 nType); /* 开始 */ SP_EXTERN int64 imc_start(IMCHandle handle, const char* pServerAddr, int64 nPort); /* 停止 */ SP_EXTERN void imc_stop(IMCHandle handle); /* 禁用/启用SECS */ SP_EXTERN void imc_secsEnable(IMCHandle handle, bool bEnable); // 启用通信 SP_EXTERN int64 imc_communicationEnable(IMCHandle handle); // 关闭通信 SP_EXTERN int64 imc_communicationDisable(IMCHandle handle); // 通讯是否启用 SP_EXTERN int64 imc_communicationIsEnable(IMCHandle handle, bool &bEnable); // 通信状态获取 SP_EXTERN int64 imc_getCommunicationState(IMCHandle handle, int64& nState); // 加载Csv文件数据 // pFileDir 为空则认为在配置目录中 SP_EXTERN int64 imc_loadDataByCsvFile(IMCHandle pHandle, const char* pFileDir); // 加载SECS配置 SP_EXTERN int64 imc_loadSecsConfig(IMCHandle pHandle, const char* pFileDir); // 添加处理对象 SP_EXTERN int64 imc_messageTypeAdd(IMCHandle, int64 stream, int64 function, SecsMessageReceiveProc* pCallback, void* pClientData); // 删除处理对象 SP_EXTERN void imc_messageTypeRemote(IMCHandle, int64 stream, int64 function); // 处理指定返回的消息 SP_EXTERN int64 imc_wheneverAdd(IMCHandle, const char* receiveMailbox, WhenProc* whenmsgProc, void* clientData = NULL); // 移除处理 SP_EXTERN void imc_wheneverRemove(IMCHandle, const char* receiveMailbox); // 答复同步消息 SP_EXTERN int64 imc_relpy(IMCHandle, const char* receiveMailbox, const char* data); // 获取授权数据点的数量 SP_EXTERN int64 imc_getLicenseLevel(__int32& nLevel); // 获取许可授权级别 SP_EXTERN int64 imc_getMaxRunCount(__int32& nCount); // 获取允许运行个数 SP_EXTERN int64 imc_getMaxRunDataPoint(__int32& nDataPoint); // 获取允许运行数据点(变量、事件、警报分别计算) /* 你能够设置一个值,在事件回调的时候,将会附带该值*/ SP_EXTERN void* imc_getClientData(IMCHandle); SP_EXTERN void* imc_setClientData(IMCHandle, void* pClientData); /* 设置回调方法 */ SP_EXTERN void imc_setConnectedProc(IMCHandle, IMCConnectedProc *); SP_EXTERN void imc_setDisconnectedProc(IMCHandle, IMCDisconnectedProc *); SP_EXTERN void imc_setErrorProc(IMCHandle, IMCErrorProc *); SP_EXTERN void imc_setShutdownProc(IMCHandle, IMCShutdownProc *); SP_EXTERN void imc_setTraceProc(IMCHandle, IMCTraceLogProc*); // 回调 SP_EXTERN void imc_setStateChangeProc(IMCHandle, IMCStateChangeProc*); SP_EXTERN void imc_setTerminalProc(IMCHandle, IMCTerminalProc*); SP_EXTERN void imc_setRemoteProc(IMCHandle, IMCRemoteProc*); // 获取追溯设置类型 // 返回当前值 SP_EXTERN void imc_enableTrace(IMCHandle, bool bEnable); // 设置超时时间 // pTx代表 "T1","T2" ... "T8" SP_EXTERN int64 imc_setTn(IMCHandle, const char* pTn, int64 nTimeout); // 设置参数, // list列举出来 SP_EXTERN int64 imc_setParameter(IMCHandle, const char** type, const char** param, int64 nCount); // 设置超时时间 // 0: OFF-LINE // 1: ON-LINE LOCAL // 2: ON-LINE REMOTE SP_EXTERN int64 imc_setControlMode(IMCHandle, int64 nControlMode); SP_EXTERN int64 imc_setControlModeForce(IMCHandle, int64 nControlMode); // 获取控制状态, 分为5种 SP_EXTERN int64 imc_getControlState(IMCHandle, int64& nControlState); // 主动请求在线 SP_EXTERN int64 imc_activeRequestOnline(IMCHandle); // 获取代码的错误信息 SP_EXTERN char* imc_GetErrorByCode(int64 nCode); ///////////////////////////////////////////////////////////////////// // 报警操作 // 添加报警 SP_EXTERN int64 imc_alarmAdd(IMCHandle, int64 nALID, const char* pALTX, int64 nAlarmSetCEID, int64 nAlarmClearCEID, bool bEnable, int64 nCategory, bool bAddEvent); // 启用报警 SP_EXTERN int64 imc_alarmEnable(IMCHandle, int64 nALID, bool bEnable); SP_EXTERN int64 imc_alarmEnableByName(IMCHandle, const char* pALTX, bool bEnable); // 设置报警 SP_EXTERN int64 imc_alarmSet(IMCHandle, int64 nALID, bool bSet); SP_EXTERN int64 imc_alarmSetByName(IMCHandle, const char* pALTX, bool bSet); // 设置报警:通过名称识别 SP_EXTERN int64 imc_alarmSetAll(IMCHandle, bool bSet); // 警报发生后,事件通知方式 SP_EXTERN __int64 imc_alarmNotifyEventMode(IMCHandle, __int64 nMode); // 获取报警列表 SP_EXTERN char* imc_alarmGetList(IMCHandle); ///////////////////////////////////////////////////////////////////// // 变量操作 // 变量增加 SP_EXTERN int64 imc_variableAdd(IMCHandle pHandle, int64 varID, const char* varName, const char* description, const char* valueType, const char* initValue, const char* units, const char* varClass); // 设置变量新值 SP_EXTERN int64 imc_variableSet(IMCHandle pHandle, int64 varID, const char* newValue); SP_EXTERN int64 imc_variableSetByName(IMCHandle pHandle, const char* varName, const char* newValue); // 获取变量的值 // 失败值为空 // 值需要释放 SP_EXTERN char* imc_variableGet(IMCHandle pHandle, int64 varID); // 获取变量信息列表 // 失败值为空 // 值需要释放 SP_EXTERN char* imc_variableGetList(IMCHandle pHandle); // 设置处理方法 SP_EXTERN int64 imc_variableSetMethod(IMCHandle pHandle, int64 varID, bool enable); ///////////////////////////////////////////////////////////////////// // 常量数值获取 // 常量获取 // 失败值为空 // 值需要释放 SP_EXTERN int64 imc_constantsGet(IMCHandle pHandle, int64 nECID, char** pValue); // 常量设置 SP_EXTERN int64 imc_constantsSet(IMCHandle pHandle, int64 nECID, const char* newValue); // 添加常量 SP_EXTERN int64 imc_constantsAdd(IMCHandle pHandle, int64 nECID, const char* name, const char* description, const char* Type, const char* Units, const char* MinValue, const char* MaxValue, const char* DefValue); // 常量信息获取 // 常量获取 // 失败值为空 // 值需要释放 SP_EXTERN int64 imc_constantsInfoGet(IMCHandle pHandle, char** pValue); // 设置处理方法 SP_EXTERN int64 imc_constantsSetMethod(IMCHandle pHandle, int64 nECID, bool enable); // 启用/禁用常量改变发送事件 SP_EXTERN int64 imc_constantChangeSendEventEnable(IMCHandle pHandle, bool bEnable); ///////////////////////////////////////////////////////////////////// // 事件操作 // 事件添加 SP_EXTERN int64 imc_eventAdd(IMCHandle pHandle, int64 CEID, const char* description, const char* eventName, bool bEnable); // 事件发送:CEID SP_EXTERN int64 imc_eventPos(IMCHandle pHandle, int64 CEID, bool bWaitReply); // 事件发送: 事件名称 SP_EXTERN int64 imc_eventPosByName(IMCHandle pHandle, const char* EventName, bool bWaitReply); // 事件启用/禁用 SP_EXTERN int64 imc_eventEnable(IMCHandle pHandle, int64 CEID, bool bEnable); // 事件查询启用/禁用 SP_EXTERN int64 imc_eventIsEnable(IMCHandle pHandle, int64 CEID, bool& bEnable); // 获取全部事件数据列表 // 失败值为空 // 值需要释放 SP_EXTERN char* imc_eventGetList(IMCHandle pHandle); // event dvval 映射,通过名称 SP_EXTERN int64 imc_eventDvvalByName(IMCHandle pHandle, const char* pEventName, const char* pDvvalNameList); // event dvval 映射 SP_EXTERN int64 imc_eventDvval(IMCHandle pHandle, int64 nCEID, const char* pDvvalList); // 事件S6,F3发送:CEID SP_EXTERN int64 imc_eventDiscreteVarPos(IMCHandle pHandle, int64 nCEID, bool bWait); //报告 // 事件-报表关联 SP_EXTERN int64 imc_eventReportLink(IMCHandle pHandle, int64 nECID, const char* report); // 事件-报表取消关联 SP_EXTERN int64 imc_eventReportUnlink(IMCHandle pHandle, int64 nECID); // 报表定义 SP_EXTERN int64 imc_reportDefine(IMCHandle pHandle, int64 rptID, const char* varID); // 获取报表定义 SP_EXTERN int64 imc_reportDefineGet(IMCHandle pHandle, int64 rptID, char** varID); // 删除报表 SP_EXTERN int64 imc_reportDelete(IMCHandle pHandle, int64 rptID); // 清除报表所有与之相关的事件 SP_EXTERN int64 imc_reportUnlink(IMCHandle pHandle, int64 rptID); // 清除所有报告定义,并且清除所有事件与报告之间的并联 SP_EXTERN int64 imc_reportClear(IMCHandle pHandle); // 报告严格按照标准规范处理:E5标准的处理及返回值 SP_EXTERN __int64 imc_reportStrictlyFollowStandard(IMCHandle pHandle, bool bFollow); // 报告保存服务器配置到本地 SP_EXTERN __int64 imc_reportAutoSaveHostLinkConfig(IMCHandle pHandle, bool bEnable); ///////////////////////////////////////////////////////////////////// // 时间同步 // 主动请求主机时间进行同步 SP_EXTERN int64 imc_hostTimeSynchronizeRequest(IMCHandle pHandle); ///////////////////////////////////////////////////////////////////// // 终端操作 // 发送单一终端消息 // 返回错误代码 SP_EXTERN int64 imc_sendSingleTerminal(IMCHandle pHandle, const char* content); ///////////////////////////////////////////////////////////////////// // PP 处理程序 // 允许主机下载 SP_EXTERN int64 imc_ppAllowHostDowmload(IMCHandle pHandle, bool bAllow); // PP处理模式 SP_EXTERN int64 imc_ppHandleMode(IMCHandle pHandle, int64 nMode); //////// // 内置功能 // 设置程式目录 SP_EXTERN void imc_setRecipeDirectory(IMCHandle pHandle, const char* dir); // 上传 SP_EXTERN int64 imc_processProgramUpload(IMCHandle pHandle, const char* ppid); // 下载 SP_EXTERN int64 imc_processProgramDownload(IMCHandle pHandle, const char* ppid); // 设置PP是文件夹目录 SP_EXTERN int64 imc_ppIsFolderDir(IMCHandle pHandle, bool bFolder); // 设置winrar目录 SP_EXTERN int64 imc_setWinrarPath(IMCHandle pHandle, const char* path); // PP设置扩展名 SP_EXTERN int64 imc_ppSetFilenameExtension(IMCHandle pHandle, const char* pFileExten); SP_EXTERN int64 imc_ppFormatAdd(IMCHandle pHandle, const char* pCmdCode, const char* pName, const char* pValueType); // PP序列化对象添加 SP_EXTERN int64 imc_ppFormatSend(IMCHandle pHandle, const char* ppid); // PP序列化上传 SP_EXTERN int64 imc_ppFormatRequest(IMCHandle pHandle, const char* ppid); // PP序列化下载 SP_EXTERN int64 imc_ppFormatSetCodeMode(IMCHandle pHandle, int nMode); // PP序列化设置模式 // wafer map // 晶圆图上传 SP_EXTERN int64 imc_waferMapUpload(IMCHandle pHandle, const char* pWaferMap); // 晶圆图下传请求 SP_EXTERN int64 imc_waferMapDownload(IMCHandle pHandle, const char* pRequstInfo, char** pWaferMap); // 条带图下传请求 SP_EXTERN int64 imc_stripMapDownload(IMCHandle pHandle, const char* pRequstInfo, char** pStripMap); /////// // 扩展型功能 ///////////////////////////////////////////////////////////////////// // 主动发送消息 // 发送一个F0终止消息 SP_EXTERN void imc_sendAbort(IMCHandle pHandle, int64 stream, int64 primaryFunction); // 发送SECS答复 SP_EXTERN void imc_sendReply(IMCHandle pHandle, int64 stream, int64 function, int64 transactionID, const char *TSN_data); // 发送SECS错误消息 SP_EXTERN void imc_sendS9(IMCHandle pHandle, int64 function, const char* header); // 发送SECS消息 // 主动发送,只返回数据 SP_EXTERN int64 imc_sendSecsMsg(IMCHandle pHandle, int64 stream, int64 function, bool replyWanted, const char *TSN_data, char** replyData, bool waitForReply); // 发送SECS消息 // 如果要接受消息,可以通过messageTypeAdd()添加,或者内置处理机制. // nMsgID是关联ID SP_EXTERN __int64 imc_sendSecsMsgAsync(IMCHandle pHandle, int64 stream, int64 function, bool replyWanted, int64& nMsgID, const char *TSN_data = ""); ///////////////////////////////////////////////////////////////////////////////////// // 字符操作 // 输入TclList // 成功时候返回 rc = 0 // 成功时候必须调用 imc_free释放argv // 拆分后的列表argc, argv // // 返回结果: // 0:成功 // 1:大括号中的list元素后跟非空格 // 2:引号中的list元素后跟非空格 // 3: 不匹配的开环数组 // 4: 不匹配的支撑数组 SP_EXTERN int64 imc_listSplit(const char* pList, int64* argc, char** argv[]); // 该函数为了适应C#、JAVA等其他语言提取数据 // 返回值不需要释放 SP_EXTERN char* imc_listSplitDataGetRow(int64 row, char **argv); // 把元素加入链表 // 需要调用imc_free()释放 SP_EXTERN char* imc_listJoin(int64 argc, const char* argv[]); // 需要调用imc_free()释放 SP_EXTERN char* imc_listAppend(const char* pList, const char* argv[], int64 argc); SP_EXTERN char* imc_listAppendOne(const char *pList, const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, const char* e6); // 为适应C#乱码问题 // 获取列表中第index1个元素,再从获取值获取index2个元素,再从获取值获取index3个元素 // -1 代表不起作用 // 需要调用imc_free()释放 SP_EXTERN char* imc_listElement(const char *pDataList, int64 index1, int64 index2, int64 index3); // 开辟内存 SP_EXTERN void* imc_malloc(__int64 nSize); // 释放内存 SP_EXTERN void imc_free(void* ptr); /////////////////////////////////////// // 锁操作 // 创建锁 SP_EXTERN void* imc_createLocker(int64 locker_type); // 释放锁 SP_EXTERN void imc_releaseLocker(void* pObject); // 锁 SP_EXTERN void imc_locker(void* pObject); // 解锁 SP_EXTERN void imc_unlocker(void* pObject); // 其他辅助函数 // 16进制转10进制 SP_EXTERN unsigned char imc_hexToDec(char cHightHex, char cLowHex); // 10进制转16进制 SP_EXTERN void imc_decToHex(const unsigned char nDec, char& cHightHex, char& cLowHex); #endif