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.

533 lines
15 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.

#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