From 289e80888ba0d7c2920ebd7d959969de65d3d1f2 Mon Sep 17 00:00:00 2001 From: BlueMatthew Date: Sat, 18 Nov 2023 11:35:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E4=B8=BAutf-8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 13 +- DSFileSystem.cpp | 28 +- DSFileSystem.h | 262 +-- DlgDevListImpl.cpp | 8 +- Inifile.cpp | 478 +++--- Makefile | 27 + MySQLAdo.cpp | 23 +- MySQLAdo.h | 14 +- Profile_Hash.cpp | 474 ++--- Profile_Hash.h | 334 ++-- baohua.h | 6 +- basefunc.cpp | 40 +- basefunc.h | 10 +- basetype.h | 4 +- buban101.cpp | 714 ++++---- buban101.h | 306 ++-- buban103.cpp | 3422 ++++++++++++++++++------------------- buban103.h | 2338 ++++++++++++------------- buban104.cpp | 16 +- buban104.h | 264 +-- chainlist.h | 18 +- cmake/FindMySQL.cmake | 934 ++++++++++ common.h | 734 ++++---- commport.h | 54 +- conf_close.cpp | 16 +- conf_open.cpp | 14 +- conf_read_key.cpp | 32 +- conf_write_key.cpp | 28 +- confrw.h | 102 +- confrw_errno.h | 28 +- display.cpp | 158 +- global_errno.h | 258 +-- harximoban.h | 382 ++--- widgets.sln => iec103.sln | 0 inifile.h | 60 +- list_entry.cpp | 22 +- list_entry.h | 52 +- netport.h | 4 +- os_heap.cpp | 134 +- os_heap.h | 66 +- platform_def.h | 68 +- scadaprotect.cpp | 698 ++++---- scadaprotect.h | 316 ++-- tcphost.cpp | 442 ++--- tcphost.h | 194 +-- typedef.h | 96 +- udpcomm.cpp | 106 +- udpping.cpp | 104 +- udpping.h | 24 +- widgets.cpp | 7 +- widgets.vcxproj | 7 +- 51 files changed, 7465 insertions(+), 6474 deletions(-) create mode 100644 cmake/FindMySQL.cmake rename widgets.sln => iec103.sln (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index a00e7d8..238cd0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,12 +7,13 @@ set(CMAKE_CXX_STANDARD_REQUIRED On) set(CMAKE_CXX_EXTENSIONS Off) set(CMAKE_CXX_FLAGS_DEBUG "-g") # SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) -# list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") project ("iec103") set_property( GLOBAL PROPERTY CXX_STANDARD 11) add_definitions(-DOS_UNIX) +add_definitions(-DUSING_MYSQL) # Add source to this project's executable. add_executable (iec103 basefunc.cpp @@ -32,6 +33,7 @@ add_executable (iec103 basefunc.cpp os_heap.cpp Profile_Hash.cpp scadaprotect.cpp + MySQLAdo.cpp # tcphost.cpp # udpcomm.cpp # udpping.cpp @@ -41,10 +43,18 @@ add_executable (iec103 basefunc.cpp # find_package(Threads REQUIRED) #target_link_libraries(iec103 PUBLIC Threads::Threads) + set_target_properties(iec103 PROPERTIES COMPILE_FLAGS "-pthread" LINK_FLAGS "-pthread") +link_directories(/usr/lib64/mysql/) +# find_package(MySQL MODULE REQUIRED) +#if (SQLITE3_FOUND) +# include_directories(${SQLITE3_INCLUDE_DIRS}) + target_link_libraries (iec103 /usr/lib64/mysql/libmysqlclient.so) +# # target_link_libraries (${OUT_TARGET} ${SQLite3_LIBRARIES}) +#endif (SQLITE3_FOUND) # find_package (SQLite3) #if (SQLITE3_FOUND) @@ -61,4 +71,5 @@ if (ZLIB_FOUND) endif (ZLIB_FOUND) + # TODO: Add tests and install targets if needed. diff --git a/DSFileSystem.cpp b/DSFileSystem.cpp index 53cc4bd..322457d 100644 --- a/DSFileSystem.cpp +++ b/DSFileSystem.cpp @@ -3,7 +3,7 @@ * Programmer : AAAwen * * Writen at : 2005.05.10 * * Version : 1.0 * - * Description: 定义文件系统用来管理存储在flash中的文件 * + * Description: 瀹氫箟鏂囦欢绯荤粺鐢ㄦ潵绠$悊瀛樺偍鍦╢lash涓殑鏂囦欢 * * Last modify: 2005.05.10 * *****************************************************************************/ #ifdef OS_WINDOWS @@ -286,7 +286,7 @@ HDSFILE DSOpenFile(const char *szFileName) hFile = (HDSFILE)HEAP_MALLOC(sizeof(DSFILE)); memset(hFile, 0, sizeof(DSFILE)); #ifdef OS_LINUX - // 首4个字节文文件系统的长度 + // 棣4涓瓧鑺傛枃鏂囦欢绯荤粺鐨勯暱搴 pFSAddr = (BYTE *)(MCF5272_FRAMBAR + DS_FILESYSTEM_ADDR+4); hFile->m_lContentLen = LoadFileInDSFS(szFileName, &hFile->m_pContent, pFSAddr); #else @@ -361,7 +361,7 @@ HDSFILE DSOpenFileEx3(const char *szRootDir, const char *szFileName) hFile = (HDSFILE)HEAP_MALLOC(sizeof(DSFILE)); memset(hFile, 0, sizeof(DSFILE)); #ifdef OS_LINUX - // 首4个字节文文件系统的长度 + // 棣4涓瓧鑺傛枃鏂囦欢绯荤粺鐨勯暱搴 pFSAddr = (BYTE *)(MCF5272_FRAMBAR + DS_FILESYSTEM_ADDR+4); hFile->m_lContentLen = LoadFileInDSFS(szFileName, &hFile->m_pContent, pFSAddr); #else @@ -402,7 +402,7 @@ HDSFILE DSOpenFileEx2(const char *szRootDir, const char *szFSName, const char *s hFile = (HDSFILE)HEAP_MALLOC(sizeof(DSFILE)); memset(hFile, 0, sizeof(DSFILE)); #ifdef OS_LINUX - // 首4个字节文文件系统的长度 + // 棣4涓瓧鑺傛枃鏂囦欢绯荤粺鐨勯暱搴 pFSAddr = (BYTE *)(MCF5272_FRAMBAR + DS_FILESYSTEM_ADDR+4); hFile->m_lContentLen = LoadFileInDSFS(szFileName, &hFile->m_pContent, pFSAddr); #else @@ -946,7 +946,7 @@ BOOL FsCombinAllFile(const char *szListFileName, const char *szDestFileName, con iLen = strlen(szDestDir)+strlen(szList)+2; if(iLen > sizeof(szFileName)) { - sprintf(szDbg, "文件名称长度(%d > %d)过长", iLen, sizeof(szFileName)); + sprintf(szDbg, "鏂囦欢鍚嶇О闀垮害(%d > %d)杩囬暱", iLen, sizeof(szFileName)); DebugPrint(szDbg); bReturn = FALSE; continue; @@ -956,16 +956,16 @@ BOOL FsCombinAllFile(const char *szListFileName, const char *szDestFileName, con fp_file = fopen(szFileName, "rb"); if(NULL == fp_file) { - sprintf(szDbg, "文件<%s>不存在或者打开错误.", szFileName); + sprintf(szDbg, "鏂囦欢<%s>涓嶅瓨鍦ㄦ垨鑰呮墦寮閿欒.", szFileName); DebugPrint(szDbg); bReturn = FALSE; continue; } - // 写文件出错后,恢复的位置 + // 鍐欐枃浠跺嚭閿欏悗,鎭㈠鐨勪綅缃 iFileOffset = ftell(fp_dest); - // 文件的头结构 + // 鏂囦欢鐨勫ご缁撴瀯 iFileLen = GetFileLen(fp_file); fseek(fp_file, 0, SEEK_SET); pBuf = (BYTE *)HEAP_MALLOC(iFileLen); @@ -1015,7 +1015,7 @@ BOOL FsCombinAllFile(const char *szListFileName, const char *szDestFileName, con fclose(fp_file); } - // 文件系统的头结构 + // 鏂囦欢绯荤粺鐨勫ご缁撴瀯 fseek(fp_dest, 0, SEEK_SET); iOffset = sFileSystemHead.m_iOffset; if(bNetSequence == FALSE) @@ -1093,7 +1093,7 @@ BOOL FsSplitAllFile(const char *szCombinFile, const char *szDestDir) iLen = pFileHead->m_iFileNameLen+strlen(szDestDir)+2; if(iLen > sizeof(szFileName)) { - sprintf(szDbg, "文件名称长度(%d > %d)过长", iLen, sizeof(szFileName)); + sprintf(szDbg, "鏂囦欢鍚嶇О闀垮害(%d > %d)杩囬暱", iLen, sizeof(szFileName)); DebugPrint(szDbg); bReturn = FALSE; break; @@ -1102,7 +1102,7 @@ BOOL FsSplitAllFile(const char *szCombinFile, const char *szDestDir) fp_dest = fopen(szFileName, "wb"); if(fp_dest == NULL) { - sprintf(szDbg, "文件<%s>打开错误.", szFileName); + sprintf(szDbg, "鏂囦欢<%s>鎵撳紑閿欒.", szFileName); DebugPrint(szDbg); bReturn = FALSE; break; @@ -1161,7 +1161,7 @@ BYTE *FsReadCombinFile(const char *szCombinFile) fclose(fp); - // 将文件系统转换为主机字节格式 + // 灏嗘枃浠剁郴缁熻浆鎹负涓绘満瀛楄妭鏍煎紡 FsNetToHost(pBuf); return pBuf; @@ -1203,7 +1203,7 @@ BYTE *FsReadCombinFileEx(const char *szCombinFile) fclose(fp); - // 将文件系统转换为主机字节格式 + // 灏嗘枃浠剁郴缁熻浆鎹负涓绘満瀛楄妭鏍煎紡 FsNetToHost(pBuf); return pBuf; @@ -1241,7 +1241,7 @@ BOOL FsLoadFileSystem(const char *szFileSystem, BYTE **ppDestBuf) *ppDestBuf = (BYTE *)(MCF5272_FRAMBAR + DS_FILESYSTEM_ADDR+4); #endif*/ - // 将文件系统转换为主机字节格式 + // 灏嗘枃浠剁郴缁熻浆鎹负涓绘満瀛楄妭鏍煎紡 FsNetToHost(*ppDestBuf); return TRUE; diff --git a/DSFileSystem.h b/DSFileSystem.h index b48bc4f..a9dab06 100644 --- a/DSFileSystem.h +++ b/DSFileSystem.h @@ -14,58 +14,58 @@ //typedef char* HDSFILE; /*! - 清除数据流已经被读取的字节数 + 娓呴櫎鏁版嵁娴佸凡缁忚璇诲彇鐨勫瓧鑺傛暟 */ #define SEEK_CLR_RCNT SEEK_END+10 #define SEEK_CUR_EX SEEK_END+11 -// 修改DS中的配置文件系统 +// 淇敼DS涓殑閰嶇疆鏂囦欢绯荤粺 #define DS_FILESYSTEM_ADDR 0x3b0000 #define DS_FILESYSTEM_LEN (0x50000-4) -#define DS_SECTION_OUT -1 // 段名称长度越限 -#define DS_SECTION_NOEXIST 0 // 段名称不存在 -#define DS_SECTION_EXIST 1 // 段名称存在 -#define DS_SECTION_SEARCH 2 // 段名称查找 +#define DS_SECTION_OUT -1 // 娈靛悕绉伴暱搴﹁秺闄 +#define DS_SECTION_NOEXIST 0 // 娈靛悕绉颁笉瀛樺湪 +#define DS_SECTION_EXIST 1 // 娈靛悕绉板瓨鍦 +#define DS_SECTION_SEARCH 2 // 娈靛悕绉版煡鎵 typedef struct tsgDSFILE { /*! - 文件内容长度 + 鏂囦欢鍐呭闀垮害 */ long m_lContentLen; /*! - 文件读取的当前位置 + 鏂囦欢璇诲彇鐨勫綋鍓嶄綅缃 */ long m_lOffset; /*! - 文件读取的字节数量 + 鏂囦欢璇诲彇鐨勫瓧鑺傛暟閲 */ long m_lReadCount; - // 增加优化配置文件读取项 + // 澧炲姞浼樺寲閰嶇疆鏂囦欢璇诲彇椤 /*! - 段名称是否存在 + 娈靛悕绉版槸鍚﹀瓨鍦 */ long m_lSectionOk; /*! - 段名称行数 + 娈靛悕绉拌鏁 */ long m_lSectionLines; /*! - 段名称行数增加标识 + 娈靛悕绉拌鏁板鍔犳爣璇 */ long m_lSectionLinesAddFlag; /*! - 段在文件中的偏移位置 + 娈靛湪鏂囦欢涓殑鍋忕Щ浣嶇疆 */ long m_lSectionOffset; /*! - 段名称 + 娈靛悕绉 */ char m_szSection[64]; /*! - 文件正文 + 鏂囦欢姝f枃 */ char *m_pContent; }DSFILE, *HDSFILE; @@ -75,13 +75,13 @@ typedef struct tsgDSFILE typedef struct tagDSFILESYSTEMHEAD { /*! - 文件系统中文件数量 + 鏂囦欢绯荤粺涓枃浠舵暟閲 */ int m_iFiles; /*! - 文件系统中首文件偏移 + 鏂囦欢绯荤粺涓鏂囦欢鍋忕Щ \note - 第一个文件=this+m_iOffset + 绗竴涓枃浠=this+m_iOffset */ int m_iOffset; }DSFILESYSTEMHEAD; @@ -89,19 +89,19 @@ typedef struct tagDSFILESYSTEMHEAD typedef struct tagDSFILEHEAD { /*! - 文件长度(文件内容+文件头) + 鏂囦欢闀垮害(鏂囦欢鍐呭+鏂囦欢澶) */ int m_iFileSize; /*! - 文件内容偏移 + 鏂囦欢鍐呭鍋忕Щ */ int m_iOffset; /*! - 文件名长度 + 鏂囦欢鍚嶉暱搴 */ int m_iFileNameLen; /*! - 文件名称 + 鏂囦欢鍚嶇О */ char m_FileName[1]; }DSFILEHEAD, *pDSFILEHEAD; @@ -117,13 +117,13 @@ typedef struct tagFILECONTENT typedef struct tagDSFILESYSTEMHEAD { /*! - 文件系统中文件数量 + 鏂囦欢绯荤粺涓枃浠舵暟閲 */ int m_iFiles ; /*! - 文件系统中首文件偏移 + 鏂囦欢绯荤粺涓鏂囦欢鍋忕Щ \note - 第一个文件=this+m_iOffset + 绗竴涓枃浠=this+m_iOffset */ int m_iOffset ; }DSFILESYSTEMHEAD; @@ -131,19 +131,19 @@ typedef struct tagDSFILESYSTEMHEAD typedef struct tagDSFILEHEAD { /*! - 文件长度(文件内容+文件头) + 鏂囦欢闀垮害(鏂囦欢鍐呭+鏂囦欢澶) */ int m_iFileSize ; /*! - 文件内容偏移 + 鏂囦欢鍐呭鍋忕Щ */ int m_iOffset ; /*! - 文件名长度 + 鏂囦欢鍚嶉暱搴 */ int m_iFileNameLen ; /*! - 文件名称 + 鏂囦欢鍚嶇О */ char m_FileName[1] ; }DSFILEHEAD, *pDSFILEHEAD; @@ -159,143 +159,143 @@ typedef struct tagFILECONTENT /*! - \brief 将指定文件载入目的内存 - \param szFileName -- 要载入的文件名 - \param ppDestMem -- 目的内存指针的指针 - \retval -- 返回分配内存长度 + \brief 灏嗘寚瀹氭枃浠惰浇鍏ョ洰鐨勫唴瀛 + \param szFileName -- 瑕佽浇鍏ョ殑鏂囦欢鍚 + \param ppDestMem -- 鐩殑鍐呭瓨鎸囬拡鐨勬寚閽 + \retval -- 杩斿洖鍒嗛厤鍐呭瓨闀垮害 \note - 如果内存分配失败或者文件为空返回0\n - pDestMem必须在使用后有调用者释放 + 濡傛灉鍐呭瓨鍒嗛厤澶辫触鎴栬呮枃浠朵负绌鸿繑鍥0\n + pDestMem蹇呴』鍦ㄤ娇鐢ㄥ悗鏈夎皟鐢ㄨ呴噴鏀 */ long LoadFile(const char *szFileName, char **ppDestMem); /*! - \brief 将指定文件载入目的内存 - \param szFileName -- 要载入的文件名 - \param ppDestMem -- 目的内存指针的指针 - \param pFSAddr -- 文件系统首地址指针 - \retval -- 返回分配内存长度 + \brief 灏嗘寚瀹氭枃浠惰浇鍏ョ洰鐨勫唴瀛 + \param szFileName -- 瑕佽浇鍏ョ殑鏂囦欢鍚 + \param ppDestMem -- 鐩殑鍐呭瓨鎸囬拡鐨勬寚閽 + \param pFSAddr -- 鏂囦欢绯荤粺棣栧湴鍧鎸囬拡 + \retval -- 杩斿洖鍒嗛厤鍐呭瓨闀垮害 \note - 如果内存分配失败或者文件为空返回0\n - pDestMem必须在使用后有调用者释放 + 濡傛灉鍐呭瓨鍒嗛厤澶辫触鎴栬呮枃浠朵负绌鸿繑鍥0\n + pDestMem蹇呴』鍦ㄤ娇鐢ㄥ悗鏈夎皟鐢ㄨ呴噴鏀 */ long LoadFileInDSFS(const char *szFileName, char **ppDestMem, BYTE *pFSAddr); /*! - \brief 设置数据流偏移量 - \param stream -- 数据流指针 - \param offset -- 与origin的偏移值 - \param origin -- 初始位置 - \retval -- 成功返回0 + \brief 璁剧疆鏁版嵁娴佸亸绉婚噺 + \param stream -- 鏁版嵁娴佹寚閽 + \param offset -- 涓巓rigin鐨勫亸绉诲 + \param origin -- 鍒濆浣嶇疆 + \retval -- 鎴愬姛杩斿洖0 */ DSLIB_API int DS_Seek(FILECONTENT *stream, long offset, int origin); DSLIB_API char *DS_Gets(char *pDest, int iDestMax, FILECONTENT *stream); /*! - \brief 获取文件长度 - \param fp -- 已经打开的文件指针 - \retval -- 返回文件长度 + \brief 鑾峰彇鏂囦欢闀垮害 + \param fp -- 宸茬粡鎵撳紑鐨勬枃浠舵寚閽 + \retval -- 杩斿洖鏂囦欢闀垮害 */ DSLIB_API int GetFileLen(FILE *fp); /*! - \brief 将指定文件载入目的内存 - \param szFileName -- 要载入的文件名 - \retval -- 返回文件句柄 + \brief 灏嗘寚瀹氭枃浠惰浇鍏ョ洰鐨勫唴瀛 + \param szFileName -- 瑕佽浇鍏ョ殑鏂囦欢鍚 + \retval -- 杩斿洖鏂囦欢鍙ユ焺 \note - 如果内存分配失败或者文件为空返回0\n - pDestMem必须在使用后有调用者释放 + 濡傛灉鍐呭瓨鍒嗛厤澶辫触鎴栬呮枃浠朵负绌鸿繑鍥0\n + pDestMem蹇呴』鍦ㄤ娇鐢ㄥ悗鏈夎皟鐢ㄨ呴噴鏀 */ DSLIB_API HDSFILE DSOpenFile(const char *szFileName); DSLIB_API HDSFILE DSOpenFileEx(const char *szFileName); /*! - \brief 将指定文件载入目的内存 - \param szRootDir -- 文件系统的根路径 - \param szFileName -- 要载入的文件名 - \retval -- 返回文件句柄 + \brief 灏嗘寚瀹氭枃浠惰浇鍏ョ洰鐨勫唴瀛 + \param szRootDir -- 鏂囦欢绯荤粺鐨勬牴璺緞 + \param szFileName -- 瑕佽浇鍏ョ殑鏂囦欢鍚 + \retval -- 杩斿洖鏂囦欢鍙ユ焺 \note - 如果内存分配失败或者文件为空返回0\n - pDestMem必须在使用后有调用者释放 - 该函数仅适合于pc系统,用来浏览文件系统信息 - 在嵌入式系统中,参数1无意义 + 濡傛灉鍐呭瓨鍒嗛厤澶辫触鎴栬呮枃浠朵负绌鸿繑鍥0\n + pDestMem蹇呴』鍦ㄤ娇鐢ㄥ悗鏈夎皟鐢ㄨ呴噴鏀 + 璇ュ嚱鏁颁粎閫傚悎浜巔c绯荤粺锛岀敤鏉ユ祻瑙堟枃浠剁郴缁熶俊鎭 + 鍦ㄥ祵鍏ュ紡绯荤粺涓紝鍙傛暟1鏃犳剰涔 */ DSLIB_API HDSFILE DSOpenFileEx3(const char *szRootDir, const char *szFileName); DSLIB_API HDSFILE DSOpenFileEx2(const char *szRootDir, const char *szFSName, const char *szFileName); /*! - \brief 关闭打开的文件 - \param hFile -- 打开的文件句柄 + \brief 鍏抽棴鎵撳紑鐨勬枃浠 + \param hFile -- 鎵撳紑鐨勬枃浠跺彞鏌 \note - 如果内存分配失败或者文件为空返回0\n - pDestMem必须在使用后有调用者释放 + 濡傛灉鍐呭瓨鍒嗛厤澶辫触鎴栬呮枃浠朵负绌鸿繑鍥0\n + pDestMem蹇呴』鍦ㄤ娇鐢ㄥ悗鏈夎皟鐢ㄨ呴噴鏀 */ DSLIB_API BOOL DSCloseFile(HDSFILE hFile); /*! - \brief 从数据流中获取数据 - \param buffer -- 获取数据缓冲区指针 - \param size -- 获取数据单元的长度 - \param count -- 获取数据单元的数量 - \param hFile -- 数据流指针 - \retval -- 成功返回实际的读取数据单元数量 + \brief 浠庢暟鎹祦涓幏鍙栨暟鎹 + \param buffer -- 鑾峰彇鏁版嵁缂撳啿鍖烘寚閽 + \param size -- 鑾峰彇鏁版嵁鍗曞厓鐨勯暱搴 + \param count -- 鑾峰彇鏁版嵁鍗曞厓鐨勬暟閲 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 鎴愬姛杩斿洖瀹為檯鐨勮鍙栨暟鎹崟鍏冩暟閲 */ DSLIB_API size_t DSfread(void *buffer, size_t size, size_t count, HDSFILE hFile); /*! - \brief 获取数据流一个字符串(以回车和换行结束) - \param string -- 获取字符串的缓冲区指针 - \param origin -- 缓冲区长度 - \param hFile -- 数据流指针 - \retval -- 成功返回读取的字符串指针 + \brief 鑾峰彇鏁版嵁娴佷竴涓瓧绗︿覆(浠ュ洖杞﹀拰鎹㈣缁撴潫) + \param string -- 鑾峰彇瀛楃涓茬殑缂撳啿鍖烘寚閽 + \param origin -- 缂撳啿鍖洪暱搴 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 鎴愬姛杩斿洖璇诲彇鐨勫瓧绗︿覆鎸囬拡 */ DSLIB_API char *DSfgets(char *string, int iMaxSize, HDSFILE hFile); /*! - \brief 获取数据流一个字符串(以回车和换行结束) - \param string -- 获取字符串的缓冲区指针 - \param origin -- 缓冲区长度 - \param hFile -- 数据流指针 - \param ioffset -- 当前位置读取偏移 - \retval -- 成功返回读取的字符串指针 + \brief 鑾峰彇鏁版嵁娴佷竴涓瓧绗︿覆(浠ュ洖杞﹀拰鎹㈣缁撴潫) + \param string -- 鑾峰彇瀛楃涓茬殑缂撳啿鍖烘寚閽 + \param origin -- 缂撳啿鍖洪暱搴 + \param hFile -- 鏁版嵁娴佹寚閽 + \param ioffset -- 褰撳墠浣嶇疆璇诲彇鍋忕Щ + \retval -- 鎴愬姛杩斿洖璇诲彇鐨勫瓧绗︿覆鎸囬拡 \note - 读取指针不移动,需要用户干预 + 璇诲彇鎸囬拡涓嶇Щ鍔,闇瑕佺敤鎴峰共棰 */ DSLIB_API char *DSfgetsEx(char *string, int iMaxSize, HDSFILE hFile); /*! - \brief 读取文件已经读取的数据量 - \param hFile -- 数据流指针 - \retval -- 实际读取的数据量 + \brief 璇诲彇鏂囦欢宸茬粡璇诲彇鐨勬暟鎹噺 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 瀹為檯璇诲彇鐨勬暟鎹噺 */ DSLIB_API int DSfgetreadcount(HDSFILE hFile); /*! - \brief 设置数据流偏移量 - \param hFile -- 数据流指针 - \param offset -- 与origin的偏移值 - \param origin -- 初始位置 - \retval -- 成功返回0 + \brief 璁剧疆鏁版嵁娴佸亸绉婚噺 + \param hFile -- 鏁版嵁娴佹寚閽 + \param offset -- 涓巓rigin鐨勫亸绉诲 + \param origin -- 鍒濆浣嶇疆 + \retval -- 鎴愬姛杩斿洖0 */ DSLIB_API int DSfseek(HDSFILE hFile, long offset, int origin); /*! - \brief 是否到数据流底部 - \param hFile -- 数据流指针 - \retval -- 成功返回0 + \brief 鏄惁鍒版暟鎹祦搴曢儴 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 鎴愬姛杩斿洖0 */ DSLIB_API int DSfeof(HDSFILE hFile); /*! - \brief 是否到数据流底部 - \param hFile -- 数据流指针 - \retval -- 成功返回0 + \brief 鏄惁鍒版暟鎹祦搴曢儴 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 鎴愬姛杩斿洖0 */ DSLIB_API int DSfeofEx(HDSFILE hFile); /*! - \brief 是否数据流全部浏览完毕 - \param hFile -- 数据流指针 - \retval -- 成功返回0,否则为浏览过的字节数 + \brief 鏄惁鏁版嵁娴佸叏閮ㄦ祻瑙堝畬姣 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 鎴愬姛杩斿洖0,鍚﹀垯涓烘祻瑙堣繃鐨勫瓧鑺傛暟 */ DSLIB_API int DSfeob(HDSFILE hFile); /*! - \brief 数据流的偏移量 - \param hFile -- 数据流指针 - \retval -- 返回偏移量 + \brief 鏁版嵁娴佺殑鍋忕Щ閲 + \param hFile -- 鏁版嵁娴佹寚閽 + \retval -- 杩斿洖鍋忕Щ閲 */ DSLIB_API int DSftell(HDSFILE hFile); DSLIB_API int DSHaveSection(char *pSection, HDSFILE hFile); @@ -307,53 +307,53 @@ DSLIB_API int DSSetSectionLinesAddFlag(int iFlag, HDSFILE hFile); DSLIB_API int DSSectionisOver(int iReadLines, HDSFILE hFile); /*! - \brief 合并所有文件 - \param szListFileName -- 要合并的文件列表文件名称 - \param szDestFileName -- 合并的目的文件 - \param szDestDir -- 文件路径 - \retval -- 成功返回TRUE + \brief 鍚堝苟鎵鏈夋枃浠 + \param szListFileName -- 瑕佸悎骞剁殑鏂囦欢鍒楄〃鏂囦欢鍚嶇О + \param szDestFileName -- 鍚堝苟鐨勭洰鐨勬枃浠 + \param szDestDir -- 鏂囦欢璺緞 + \retval -- 鎴愬姛杩斿洖TRUE \note - 合并后的文件必须是偶字节对齐 + 鍚堝苟鍚庣殑鏂囦欢蹇呴』鏄伓瀛楄妭瀵归綈 */ DSLIB_API BOOL FsCombinAllFile(const char *szListFileName, const char *szDestFileName, const char *szDestDir); /*! - \brief 文件分离 - \param szCombinFile -- 合并的文件名称 - \param szDestDir -- 要分离的文件目录 - \retval -- 成功返回TRUE + \brief 鏂囦欢鍒嗙 + \param szCombinFile -- 鍚堝苟鐨勬枃浠跺悕绉 + \param szDestDir -- 瑕佸垎绂荤殑鏂囦欢鐩綍 + \retval -- 鎴愬姛杩斿洖TRUE */ DSLIB_API BOOL FsSplitAllFile(const char *szCombinFile, const char *szDestDir); -//测试用 +//娴嬭瘯鐢 /*! - \brief 读取合并的文件(文件系统) - \param szCombinFile -- 合并的文件名称 - \retval -- 成功返回TRUE + \brief 璇诲彇鍚堝苟鐨勬枃浠(鏂囦欢绯荤粺) + \param szCombinFile -- 鍚堝苟鐨勬枃浠跺悕绉 + \retval -- 鎴愬姛杩斿洖TRUE */ DSLIB_API BYTE *FsReadCombinFile(const char *szCombinFile); DSLIB_API BYTE *FsReadCombinFileEx(const char *szCombinFile); /*! - \brief 装载文件系统 - \param szFileSystem -- 文件系统名称 - \param ppDestBuf -- 文件系统的目的缓冲区 - \retval -- 成功返回TRUE + \brief 瑁呰浇鏂囦欢绯荤粺 + \param szFileSystem -- 鏂囦欢绯荤粺鍚嶇О + \param ppDestBuf -- 鏂囦欢绯荤粺鐨勭洰鐨勭紦鍐插尯 + \retval -- 鎴愬姛杩斿洖TRUE */ DSLIB_API BOOL FsLoadFileSystem(const char *szFileSystem, BYTE **ppDestBuf); /*! - \brief 卸载文件系统 - \param ppDestBuf -- 文件系统的目的缓冲区 - \retval -- 成功返回TRUE + \brief 鍗歌浇鏂囦欢绯荤粺 + \param ppDestBuf -- 鏂囦欢绯荤粺鐨勭洰鐨勭紦鍐插尯 + \retval -- 鎴愬姛杩斿洖TRUE */ DSLIB_API BOOL FsUnLoadFileSystem(BYTE **ppDestBuf); /*! - \brief 显示指定文件系统路径的文件名称 - \param szPath -- 要显示的文件系统路径 - \param szFileSystem -- 指定的文件系统 - \retval -- 成功返回TRUE + \brief 鏄剧ず鎸囧畾鏂囦欢绯荤粺璺緞鐨勬枃浠跺悕绉 + \param szPath -- 瑕佹樉绀虹殑鏂囦欢绯荤粺璺緞 + \param szFileSystem -- 鎸囧畾鐨勬枃浠剁郴缁 + \retval -- 鎴愬姛杩斿洖TRUE */ DSLIB_API BOOL FsDirFileName(const char *szPath, const char *szFileSystem); diff --git a/DlgDevListImpl.cpp b/DlgDevListImpl.cpp index a824be9..d693fb4 100644 --- a/DlgDevListImpl.cpp +++ b/DlgDevListImpl.cpp @@ -15,7 +15,7 @@ // Construction/Destruction ////////////////////////////////////////////////////////////////////// -const char* gColumnName[MAX_NET_NUM+1] = {"序号","IP地址1","IP地址2","IP地址3"}; +const char* gColumnName[MAX_NET_NUM+1] = {"搴忓彿","IP鍦板潃1","IP鍦板潃2","IP鍦板潃3"}; CDlgDevListImpl::CDlgDevListImpl(DEV_DEF *pDevParam, int iDevNum, int iCurSel, QWidget* parent, const char* name, bool modal, WFlags fl) : DevList(parent, name, modal, fl) @@ -67,9 +67,9 @@ CDlgDevListImpl::~CDlgDevListImpl() void CDlgDevListImpl::languageChange() { - setCaption(CHS("设备列表")); - m_BtnChange->setText(CHS("选择")); - m_BtnCancel->setText(CHS("取消")); + setCaption(CHS("璁惧鍒楄〃")); + m_BtnChange->setText(CHS("閫夋嫨")); + m_BtnCancel->setText(CHS("鍙栨秷")); } void CDlgDevListImpl::ChangeSelectSlot() diff --git a/Inifile.cpp b/Inifile.cpp index 5c206b9..43df44c 100644 --- a/Inifile.cpp +++ b/Inifile.cpp @@ -1,74 +1,74 @@ /*----------------------------------------------------------------------------------- - 平台无关的INI文件读写函数 V1.65 + 骞冲彴鏃犲叧鐨処NI鏂囦欢璇诲啓鍑芥暟 V1.65 - 张磊 2002.10.3 + 寮犵 2002.10.3 ----------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------- -[编写及维护记录]: +[缂栧啓鍙婄淮鎶よ褰昡: -(1) V1.0 2002.8.13 仿照windows同类API的调用方式实现了其基本功能。 +(1) V1.0 2002.8.13 浠跨収windows鍚岀被API鐨勮皟鐢ㄦ柟寮忓疄鐜颁簡鍏跺熀鏈姛鑳姐 -(2) V1.1 2002.9.13 修正了写配置文件函数中存在的两个BUG +(2) V1.1 2002.9.13 淇浜嗗啓閰嶇疆鏂囦欢鍑芥暟涓瓨鍦ㄧ殑涓や釜BUG - 1. 修改配置文件条目时出现部分乱码 - 2. 写配置文件时,文件尾部原先的超长部分没有被删掉,即没有按新的文件长度截断文件 + 1. 淇敼閰嶇疆鏂囦欢鏉$洰鏃跺嚭鐜伴儴鍒嗕贡鐮 + 2. 鍐欓厤缃枃浠舵椂锛屾枃浠跺熬閮ㄥ師鍏堢殑瓒呴暱閮ㄥ垎娌℃湁琚垹鎺,鍗虫病鏈夋寜鏂扮殑鏂囦欢闀垮害鎴柇鏂囦欢 -(3) V1.2 2002.9.18 给QGetPrivateProfileInt()函数增加了16进制字符串识别功能 +(3) V1.2 2002.9.18 缁橯GetPrivateProfileInt()鍑芥暟澧炲姞浜16杩涘埗瀛楃涓茶瘑鍒姛鑳 -(4) V1.3 2002.9.19 修正了存在的两个BUG +(4) V1.3 2002.9.19 淇浜嗗瓨鍦ㄧ殑涓や釜BUG - 1. 给StrTrimLeft, StrTrimRight两个函数增加删除TAB字符(ASC码为9)功能,这是由于Ini - 文件中进行注释等操作时往往会用到TAB键 - 2. 从读取的一行文本中剔除";"即注释字符及其后面内容后,新增调用StrTrimAll()函数 - 删除剩下字符串右边往往存在的空格或TAB字符 + 1. 缁橲trTrimLeft, StrTrimRight涓や釜鍑芥暟澧炲姞鍒犻櫎TAB瀛楃(ASC鐮佷负9)鍔熻兘,杩欐槸鐢变簬Ini + 鏂囦欢涓繘琛屾敞閲婄瓑鎿嶄綔鏃跺線寰浼氱敤鍒癟AB閿 + 2. 浠庤鍙栫殑涓琛屾枃鏈腑鍓旈櫎";"鍗虫敞閲婂瓧绗﹀強鍏跺悗闈㈠唴瀹瑰悗锛屾柊澧炶皟鐢⊿trTrimAll()鍑芥暟 + 鍒犻櫎鍓╀笅瀛楃涓插彸杈瑰線寰瀛樺湪鐨勭┖鏍兼垨TAB瀛楃 -(5) V1.4a 2002.9.20 按照一次将文件内容全部读入字符串再处理的算法对三个函数进行了优化 - OpenPort()函数执行时间从原来的30秒降为16秒左右 +(5) V1.4a 2002.9.20 鎸夌収涓娆″皢鏂囦欢鍐呭鍏ㄩ儴璇诲叆瀛楃涓插啀澶勭悊鐨勭畻娉曞涓変釜鍑芥暟杩涜浜嗕紭鍖 + OpenPort()鍑芥暟鎵ц鏃堕棿浠庡師鏉ョ殑30绉掗檷涓16绉掑乏鍙 -(6) V1.41a 2002.9.23 对读函数继续优化,即连续对相同文件名进行读操作,第一次读文件 - 时将文件全部读入缓冲区,后面则直接从缓冲区中读取文件内容,不 - 再需要每次都读入文件全部内容,OpenPort()函数从16秒降到了14秒, - 但这种方法和其它文件有些牵连,否则不能正确获知目标文件的变化而 - 重新装入,导致通用性变差, 最终决定不采用此算法,仍沿用打开-关闭模式 +(6) V1.41a 2002.9.23 瀵硅鍑芥暟缁х画浼樺寲锛屽嵆杩炵画瀵圭浉鍚屾枃浠跺悕杩涜璇绘搷浣滐紝绗竴娆¤鏂囦欢 + 鏃跺皢鏂囦欢鍏ㄩ儴璇诲叆缂撳啿鍖猴紝鍚庨潰鍒欑洿鎺ヤ粠缂撳啿鍖轰腑璇诲彇鏂囦欢鍐呭锛屼笉 + 鍐嶉渶瑕佹瘡娆¢兘璇诲叆鏂囦欢鍏ㄩ儴鍐呭,OpenPort()鍑芥暟浠16绉掗檷鍒颁簡14绉掞紝 + 浣嗚繖绉嶆柟娉曞拰鍏跺畠鏂囦欢鏈変簺鐗佃繛锛屽惁鍒欎笉鑳芥纭幏鐭ョ洰鏍囨枃浠剁殑鍙樺寲鑰 + 閲嶆柊瑁呭叆,瀵艰嚧閫氱敤鎬у彉宸, 鏈缁堝喅瀹氫笉閲囩敤姝ょ畻娉,浠嶆部鐢ㄦ墦寮-鍏抽棴妯″紡 -(7) V1.5 2002.9.23 执行速度有了极大提高,具体说明如下: +(7) V1.5 2002.9.23 鎵ц閫熷害鏈変簡鏋佸ぇ鎻愰珮锛屽叿浣撹鏄庡涓嬶細 - 1. 重写了QGetPrivateProfileString()函数的段搜索部分, 算法为:直接在整个文件字符串 - 中查找段名,以快速定位段的位置,然后从该位置开始逐行读取,进行键的搜索。由于INI文 - 件中分段存储的本意就是根据段来快速定位键的位置,因此如果搜索段时也是逐行扫描, - 且要找的段可能在INI文件尾部或不存在,将使效率将大大降低;另外对于键的搜索不能 - 采用这种直接查找字符串的办法,因为即使找到一个键也无法容易地判断它属于哪个段。 - 使用该算法后,OpenPort()函数执行时间骤降至3-4秒. + 1. 閲嶅啓浜哘GetPrivateProfileString()鍑芥暟鐨勬鎼滅储閮ㄥ垎, 绠楁硶涓猴細鐩存帴鍦ㄦ暣涓枃浠跺瓧绗︿覆 + 涓煡鎵炬鍚,浠ュ揩閫熷畾浣嶆鐨勪綅缃,鐒跺悗浠庤浣嶇疆寮濮嬮愯璇诲彇,杩涜閿殑鎼滅储銆傜敱浜嶪NI鏂 + 浠朵腑鍒嗘瀛樺偍鐨勬湰鎰忓氨鏄牴鎹鏉ュ揩閫熷畾浣嶉敭鐨勪綅缃,鍥犳濡傛灉鎼滅储娈垫椂涔熸槸閫愯鎵弿锛 + 涓旇鎵剧殑娈靛彲鑳藉湪INI鏂囦欢灏鹃儴鎴栦笉瀛樺湪锛屽皢浣挎晥鐜囧皢澶уぇ闄嶄綆锛涘彟澶栧浜庨敭鐨勬悳绱笉鑳 + 閲囩敤杩欑鐩存帴鏌ユ壘瀛楃涓茬殑鍔炴硶锛屽洜涓哄嵆浣挎壘鍒颁竴涓敭涔熸棤娉曞鏄撳湴鍒ゆ柇瀹冨睘浜庡摢涓銆 + 浣跨敤璇ョ畻娉曞悗锛孫penPort()鍑芥暟鎵ц鏃堕棿楠ら檷鑷3-4绉. - 2. 由于前置机程序WritePrivateProfileString()函数的调用不超过10次,且都是在交互场合 - 下,对速度无严格要求,因此该函数中的段搜索及文件读写部分暂时没有优化。 + 2. 鐢变簬鍓嶇疆鏈虹▼搴廤ritePrivateProfileString()鍑芥暟鐨勮皟鐢ㄤ笉瓒呰繃10娆,涓旈兘鏄湪浜や簰鍦哄悎 + 涓嬶紝瀵归熷害鏃犱弗鏍艰姹傦紝鍥犳璇ュ嚱鏁颁腑鐨勬鎼滅储鍙婃枃浠惰鍐欓儴鍒嗘殏鏃舵病鏈変紭鍖栥 -(8) V1.6 2002.9.27 彻底实现了读取ini文件时平台文件格式无关性: +(8) V1.6 2002.9.27 褰诲簳瀹炵幇浜嗚鍙杋ni鏂囦欢鏃跺钩鍙版枃浠舵牸寮忔棤鍏虫э細 - 为保证提取一行的操作与平台文件格式无关,只查找换行符(0x0A),这种做法和fgets()类似 - 对于windows下的ini文件按此方法读出后还要去掉行字符串结尾的一个回车符(0x0D),这样 - 只查找0x0A,可保证windows下能正确访问unix格式的ini文件。 + 涓轰繚璇佹彁鍙栦竴琛岀殑鎿嶄綔涓庡钩鍙版枃浠舵牸寮忔棤鍏,鍙煡鎵炬崲琛岀(0x0A),杩欑鍋氭硶鍜宖gets()绫讳技 + 瀵逛簬windows涓嬬殑ini鏂囦欢鎸夋鏂规硶璇诲嚭鍚庤繕瑕佸幓鎺夎瀛楃涓茬粨灏剧殑涓涓洖杞︾(0x0D),杩欐牱 + 鍙煡鎵0x0A,鍙繚璇亀indows涓嬭兘姝g‘璁块棶unix鏍煎紡鐨刬ni鏂囦欢銆 -(9) V1.65 2002.10.3 针对provdata.ini读写时遇到的 - 1. 行内注释符在该文件中被特别定义成"//"而不是";" - 2. 该配置文件中一行尾部有'\'续行符 +(9) V1.65 2002.10.3 閽堝provdata.ini璇诲啓鏃堕亣鍒扮殑 + 1. 琛屽唴娉ㄩ噴绗﹀湪璇ユ枃浠朵腑琚壒鍒畾涔夋垚"//"鑰屼笉鏄";" + 2. 璇ラ厤缃枃浠朵腑涓琛屽熬閮ㄦ湁'\'缁绗 - 因此做如下改动: - 1. 增加续行功能(续行功能只会出现在键的读取上) - 2. 给两个读函数增加两个参数,分别指定行内注释符(缺省为';')和续行符(缺省为'\') + 鍥犳鍋氬涓嬫敼鍔: + 1. 澧炲姞缁鍔熻兘(缁鍔熻兘鍙細鍑虹幇鍦ㄩ敭鐨勮鍙栦笂) + 2. 缁欎袱涓鍑芥暟澧炲姞涓や釜鍙傛暟,鍒嗗埆鎸囧畾琛屽唴娉ㄩ噴绗(缂虹渷涓';')鍜岀画琛岀(缂虹渷涓'\') -----------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------- -[使用说明]: +[浣跨敤璇存槑]: -(1) 因部分内容和操作系统相关,如换行符号,因此如在unix下运行要确保定义了OS_UNIX宏 -(2) 采用全文件字符串搜索算法对INI文件格式有一个约束,既: - 要求'['和']'必须和段名紧贴,之间不能留有空格。不允许INI文件中段名形式为"[ xxx ]", - 只有"[xxx]"格式才能正确访问 +(1) 鍥犻儴鍒嗗唴瀹瑰拰鎿嶄綔绯荤粺鐩稿叧,濡傛崲琛岀鍙,鍥犳濡傚湪unix涓嬭繍琛岃纭繚瀹氫箟浜哋S_UNIX瀹 +(2) 閲囩敤鍏ㄦ枃浠跺瓧绗︿覆鎼滅储绠楁硶瀵笽NI鏂囦欢鏍煎紡鏈変竴涓害鏉,鏃: + 瑕佹眰'['鍜']'蹇呴』鍜屾鍚嶇揣璐达紝涔嬮棿涓嶈兘鐣欐湁绌烘牸銆備笉鍏佽INI鏂囦欢涓鍚嶅舰寮忎负"[ xxx ]"锛 + 鍙湁"[xxx]"鏍煎紡鎵嶈兘姝g‘璁块棶 -------------------------------------------------------------------------------------*/ @@ -79,86 +79,86 @@ #include //#include /*------------------------------------------------------------------------------------- - 平台无关的INI文件读函数(字符串),和同类API相比,只是参数类型从const char*变成char* - 返回值类型从DWORD改成int,这里返回值的意义从读取字节个数(同名API返回DWORD类型)变成 - 了读取成功与否标志(int类型),但并不影响使用 + 骞冲彴鏃犲叧鐨処NI鏂囦欢璇诲嚱鏁(瀛楃涓),鍜屽悓绫籄PI鐩告瘮,鍙槸鍙傛暟绫诲瀷浠巆onst char*鍙樻垚char* + 杩斿洖鍊肩被鍨嬩粠DWORD鏀规垚int,杩欓噷杩斿洖鍊肩殑鎰忎箟浠庤鍙栧瓧鑺備釜鏁(鍚屽悕API杩斿洖DWORD绫诲瀷)鍙樻垚 + 浜嗚鍙栨垚鍔熶笌鍚︽爣蹇(int绫诲瀷),浣嗗苟涓嶅奖鍝嶄娇鐢 -------------------------------------------------------------------------------------*/ int QGetPrivateProfileString( - const char* lpszSectionName, //段名 - const char* lpszKeyName, //键名 - const char* lpszDefault, //缺省字符串 - char* lpszReturnedString, //结果字符串 - u_32 nSize, //结果字符串长度 - const char* lpszFileName, //ini文件名 - const char* lpszRemarkInLineStr, //行内注释符 - const char chContinueLineChar //续行符号 + const char* lpszSectionName, //娈靛悕 + const char* lpszKeyName, //閿悕 + const char* lpszDefault, //缂虹渷瀛楃涓 + char* lpszReturnedString, //缁撴灉瀛楃涓 + u_32 nSize, //缁撴灉瀛楃涓查暱搴 + const char* lpszFileName, //ini鏂囦欢鍚 + const char* lpszRemarkInLineStr, //琛屽唴娉ㄩ噴绗 + const char chContinueLineChar //缁绗﹀彿 ) { FILE* IniFile = NULL; BOOL bSecFoundFlag = FALSE; BOOL bKeyFoundFlag = FALSE; BOOL bEOF = FALSE; - char szLineBuf[MAX_LINE_BUF_LENGTH]; //行缓冲区 - char szKeyItemBuf[MAX_LINE_BUF_LENGTH*4]; //最终内容缓冲区(因键所在行可能因使用续行符而占据多行) - char *lpszFileText = NULL; //放置INI文件全部内容的字符串 - char *lpszLineBegin = NULL; //一行开始指针 + char szLineBuf[MAX_LINE_BUF_LENGTH]; //琛岀紦鍐插尯 + char szKeyItemBuf[MAX_LINE_BUF_LENGTH*4]; //鏈缁堝唴瀹圭紦鍐插尯(鍥犻敭鎵鍦ㄨ鍙兘鍥犱娇鐢ㄧ画琛岀鑰屽崰鎹琛) + char *lpszFileText = NULL; //鏀剧疆INI鏂囦欢鍏ㄩ儴鍐呭鐨勫瓧绗︿覆 + char *lpszLineBegin = NULL; //涓琛屽紑濮嬫寚閽 char *lpszTmp = NULL; i_32 lFileSize = 0; int iPos, iRetVal; - BOOL bLineContinue = FALSE; //2002.10.3 续行标志 + BOOL bLineContinue = FALSE; //2002.10.3 缁鏍囧織 /*--------------------------------------------------------------------------------- - char szLineEndStr[3]; //行末尾换行符号 + char szLineEndStr[3]; //琛屾湯灏炬崲琛岀鍙 memset(szLineEndStr, 0, 3); #ifdef OS_UNIX - strcpy(szLineEndStr, "\n"); //UNIX文本文件行末只有一个换行符'\n' + strcpy(szLineEndStr, "\n"); //UNIX鏂囨湰鏂囦欢琛屾湯鍙湁涓涓崲琛岀'\n' #else - strcpy(szLineEndStr, "\r\n"); //Windows文本文件行末有一个回车符'\r',一个换行符'\n' + strcpy(szLineEndStr, "\r\n"); //Windows鏂囨湰鏂囦欢琛屾湯鏈変竴涓洖杞︾'\r',涓涓崲琛岀'\n' #endif ----------------------------------------------------------------------------------*/ - IniFile = fopen(lpszFileName, "rb"); //二进制可读方式打开(文件必须存在) + IniFile = fopen(lpszFileName, "rb"); //浜岃繘鍒跺彲璇绘柟寮忔墦寮(鏂囦欢蹇呴』瀛樺湪) if(!IniFile) { //qDebug("fopen error, %s", lpszFileName); return FILE_OPEN_ERROR; } - fseek(IniFile, 0, SEEK_END); //定位到文件尾部 - lFileSize = ftell(IniFile); //获取文件尾指针位置(该值=文件总长=文件指针位置最大值+1) + fseek(IniFile, 0, SEEK_END); //瀹氫綅鍒版枃浠跺熬閮 + lFileSize = ftell(IniFile); //鑾峰彇鏂囦欢灏炬寚閽堜綅缃(璇ュ=鏂囦欢鎬婚暱=鏂囦欢鎸囬拡浣嶇疆鏈澶у+1) lpszFileText = new char[lFileSize+1]; memset(lpszFileText, 0, lFileSize+1); - fseek(IniFile, 0, SEEK_SET); //重新定位到开头 - fread(lpszFileText, 1, lFileSize, IniFile); //将文件所有内容全部读入字符串 - fclose(IniFile); //读入全部内容后立即关闭文件 + fseek(IniFile, 0, SEEK_SET); //閲嶆柊瀹氫綅鍒板紑澶 + fread(lpszFileText, 1, lFileSize, IniFile); //灏嗘枃浠舵墍鏈夊唴瀹瑰叏閮ㄨ鍏ュ瓧绗︿覆 + fclose(IniFile); //璇诲叆鍏ㄩ儴鍐呭鍚庣珛鍗冲叧闂枃浠 lpszLineBegin = lpszFileText; - //段搜索 + //娈垫悳绱 /*---------------------------------------------------------------------------- //while(!feof(IniFile)) while(!bEOF) { - //ReadLineFromFile(IniFile, szLineBuf, MAX_LINE_BUF_LENGTH); //读取一行 + //ReadLineFromFile(IniFile, szLineBuf, MAX_LINE_BUF_LENGTH); //璇诲彇涓琛 memset(szLineBuf, 0, MAX_LINE_BUF_LENGTH); - lpszTmp = strstr(lpszLineBegin, szLineEndStr); //搜索换行符号来定位行末 + lpszTmp = strstr(lpszLineBegin, szLineEndStr); //鎼滅储鎹㈣绗﹀彿鏉ュ畾浣嶈鏈 if(lpszTmp != NULL) { strncpy(szLineBuf, lpszLineBegin, min(MAX_LINE_BUF_LENGTH-1, lpszTmp-lpszLineBegin)); lpszLineBegin = lpszTmp + strlen(szLineEndStr); } - else //最后一行 + else //鏈鍚庝竴琛 { strncpy(szLineBuf, lpszLineBegin, min(MAX_LINE_BUF_LENGTH-1, lpszFileText+lFileSize-lpszLineBegin)); bEOF = TRUE; @@ -166,21 +166,21 @@ int QGetPrivateProfileString( StrTrimAll(szLineBuf); - if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) continue; //注释行和空行不处理 + if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) continue; //娉ㄩ噴琛屽拰绌鸿涓嶅鐞 - //将一行尾部可能存在的";"注释部分剔除(这样key=value的value中不能含有;否则将被当成注释而删除 + //灏嗕竴琛屽熬閮ㄥ彲鑳藉瓨鍦ㄧ殑";"娉ㄩ噴閮ㄥ垎鍓旈櫎(杩欐牱key=value鐨剉alue涓笉鑳藉惈鏈;鍚﹀垯灏嗚褰撴垚娉ㄩ噴鑰屽垹闄 lpszTmp = strchr(szLineBuf, ';'); if(lpszTmp != NULL) *lpszTmp = 0; - StrTrimAll(szLineBuf); //zl 2002.9.19 ";"和有用内容间必有空格或TAB字符,必须删除这些分割字符 + StrTrimAll(szLineBuf); //zl 2002.9.19 ";"鍜屾湁鐢ㄥ唴瀹归棿蹇呮湁绌烘牸鎴朤AB瀛楃,蹇呴』鍒犻櫎杩欎簺鍒嗗壊瀛楃 iPos = strlen(szLineBuf) - 1; - if(szLineBuf[0] == '[' && szLineBuf[iPos] == ']') //该行是一个段 + if(szLineBuf[0] == '[' && szLineBuf[iPos] == ']') //璇ヨ鏄竴涓 { - szLineBuf[iPos] = 0; //去掉"["和"]",便于比较 + szLineBuf[iPos] = 0; //鍘绘帀"["鍜"]",渚夸簬姣旇緝 lpszTmp = &szLineBuf[1]; - if( strcmp(lpszTmp, lpszSectionName) == 0 ) //指定的段找到了 + if( strcmp(lpszTmp, lpszSectionName) == 0 ) //鎸囧畾鐨勬鎵惧埌浜 { bSecFoundFlag = TRUE; break; @@ -190,31 +190,31 @@ int QGetPrivateProfileString( ----------------------------------------------------------------------------*/ - //zl 2002.9.23 新的段搜索算法(直接在包含整个ini文件内容的字符串中定位段名) + //zl 2002.9.23 鏂扮殑娈垫悳绱㈢畻娉(鐩存帴鍦ㄥ寘鍚暣涓猧ni鏂囦欢鍐呭鐨勫瓧绗︿覆涓畾浣嶆鍚) - char szFindStr[MAX_LINE_BUF_LENGTH]; //搜索字符串 + char szFindStr[MAX_LINE_BUF_LENGTH]; //鎼滅储瀛楃涓 sprintf(szFindStr, "[%s]", lpszSectionName); while(!bEOF) { lpszTmp = strstr(lpszLineBegin, szFindStr); - if( lpszTmp != NULL ) //找到段名,继续验证其是否合法 + if( lpszTmp != NULL ) //鎵惧埌娈靛悕,缁х画楠岃瘉鍏舵槸鍚﹀悎娉 { - lpszLineBegin = lpszTmp + strlen(szFindStr); //计算新的查找起始位置 + lpszLineBegin = lpszTmp + strlen(szFindStr); //璁$畻鏂扮殑鏌ユ壘璧峰浣嶇疆 if( lpszLineBegin > (lpszFileText + lFileSize -1) ) bEOF = TRUE; - if( lpszTmp == lpszFileText ) //"[xxx]"是文件的开头内容,为合法段名 + if( lpszTmp == lpszFileText ) //"[xxx]"鏄枃浠剁殑寮澶村唴瀹癸紝涓哄悎娉曟鍚 { bSecFoundFlag = TRUE; break; } /*---------------------------------------------------------------------------- - 从'['向前查找,如果遇到换行符0xA,表明是合法段名,如果是空格或tab字符(ASC码9) - 则继续向前搜索,如果是此外的其它任何字符,该段名都判为非法, ']'后面的内容不 - 予处理 + 浠'['鍚戝墠鏌ユ壘,濡傛灉閬囧埌鎹㈣绗0xA,琛ㄦ槑鏄悎娉曟鍚,濡傛灉鏄┖鏍兼垨tab瀛楃(ASC鐮9) + 鍒欑户缁悜鍓嶆悳绱,濡傛灉鏄澶栫殑鍏跺畠浠讳綍瀛楃,璇ユ鍚嶉兘鍒や负闈炴硶, ']'鍚庨潰鐨勫唴瀹逛笉 + 浜堝鐞 ----------------------------------------------------------------------------*/ lpszTmp--; @@ -232,10 +232,10 @@ int QGetPrivateProfileString( break; } - if( bSecFoundFlag ) break; //退出外循环 + if( bSecFoundFlag ) break; //閫鍑哄寰幆 } else - break; //没找到段名,退出 + break; //娌℃壘鍒版鍚,閫鍑 } @@ -245,29 +245,29 @@ int QGetPrivateProfileString( goto func_end; } - //继续键搜索(定位段后,对于所属键的查找为逐行读取扫描方式,键可能占用多行) + //缁х画閿悳绱(瀹氫綅娈靛悗锛屽浜庢墍灞為敭鐨勬煡鎵句负閫愯璇诲彇鎵弿鏂瑰紡,閿彲鑳藉崰鐢ㄥ琛) while(!bEOF) { if( !bLineContinue ) - memset(szKeyItemBuf, 0, sizeof(szKeyItemBuf)); //关键,控制多行连接 + memset(szKeyItemBuf, 0, sizeof(szKeyItemBuf)); //鍏抽敭,鎺у埗澶氳杩炴帴 memset(szLineBuf, 0, MAX_LINE_BUF_LENGTH); - //zl 2002.9.27 为保证提取一行的操作与平台文件格式无关,只查找换行符(0x0A),这和fgets()类似 + //zl 2002.9.27 涓轰繚璇佹彁鍙栦竴琛岀殑鎿嶄綔涓庡钩鍙版枃浠舵牸寮忔棤鍏,鍙煡鎵炬崲琛岀(0x0A),杩欏拰fgets()绫讳技 lpszTmp = strchr(lpszLineBegin, 0x0A); if(lpszTmp != NULL) { - strncpy(szLineBuf, lpszLineBegin, min(MAX_LINE_BUF_LENGTH-1, lpszTmp-lpszLineBegin)); //从字符串中提取一行 + strncpy(szLineBuf, lpszLineBegin, min(MAX_LINE_BUF_LENGTH-1, lpszTmp-lpszLineBegin)); //浠庡瓧绗︿覆涓彁鍙栦竴琛 - /* 读windows文本文件时,每行尾部多一个回车符(0x0D),必须去掉,否则后面连续出错 */ + /* 璇粀indows鏂囨湰鏂囦欢鏃,姣忚灏鹃儴澶氫竴涓洖杞︾(0x0D),蹇呴』鍘绘帀,鍚﹀垯鍚庨潰杩炵画鍑洪敊 */ if( szLineBuf[strlen(szLineBuf)-1] == 0x0D ) szLineBuf[strlen(szLineBuf)-1] = 0; - lpszLineBegin = lpszTmp + 1; //1表示"0x0A"一个字符 + lpszLineBegin = lpszTmp + 1; //1琛ㄧず"0x0A"涓涓瓧绗 } - else //最后一行 + else //鏈鍚庝竴琛 { strncpy(szLineBuf, lpszLineBegin, min(MAX_LINE_BUF_LENGTH-1, lpszFileText+lFileSize-lpszLineBegin)); bEOF = TRUE; @@ -275,10 +275,10 @@ int QGetPrivateProfileString( StrTrimAll(szLineBuf); - //全注释行和空行不处理 + //鍏ㄦ敞閲婅鍜岀┖琛屼笉澶勭悊 if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) { - if( bLineContinue && strlen(szKeyItemBuf) > 0 ) //2002.10.7 如果前面是续行,则继续处理szKeyItemBuf已有内容而不是continue重新读入一行,否则当前行(空行或注释行)上面的一个续行的全部内容将丢失 + if( bLineContinue && strlen(szKeyItemBuf) > 0 ) //2002.10.7 濡傛灉鍓嶉潰鏄画琛,鍒欑户缁鐞唖zKeyItemBuf宸叉湁鍐呭鑰屼笉鏄痗ontinue閲嶆柊璇诲叆涓琛,鍚﹀垯褰撳墠琛(绌鸿鎴栨敞閲婅)涓婇潰鐨勪竴涓画琛岀殑鍏ㄩ儴鍐呭灏嗕涪澶 bLineContinue = FALSE; else { @@ -288,57 +288,57 @@ int QGetPrivateProfileString( } else { - //2002.10.3 判断续行,续行符为行末最后的一个非空格或TAB字符,缺省为'\' + //2002.10.3 鍒ゆ柇缁,缁绗︿负琛屾湯鏈鍚庣殑涓涓潪绌烘牸鎴朤AB瀛楃,缂虹渷涓'\' if( szLineBuf[strlen(szLineBuf)-1] == chContinueLineChar ) { bLineContinue = TRUE; - szLineBuf[strlen(szLineBuf)-1] = 0; //去掉续行符 + szLineBuf[strlen(szLineBuf)-1] = 0; //鍘绘帀缁绗 StrTrimAll(szLineBuf); strcat(szKeyItemBuf, szLineBuf); continue; } - else //无续行字符行 + else //鏃犵画琛屽瓧绗﹁ { bLineContinue = FALSE; strcat(szKeyItemBuf, szLineBuf); } } - //将一行尾部可能存在的行内注释部分(缺省行内注释符是";")剔除 + //灏嗕竴琛屽熬閮ㄥ彲鑳藉瓨鍦ㄧ殑琛屽唴娉ㄩ噴閮ㄥ垎(缂虹渷琛屽唴娉ㄩ噴绗︽槸";")鍓旈櫎 //lpszTmp = strchr(szLineBuf, ';'); - lpszTmp = strstr(szKeyItemBuf, lpszRemarkInLineStr); //2002.10.3 可以任意指定行内注释符 + lpszTmp = strstr(szKeyItemBuf, lpszRemarkInLineStr); //2002.10.3 鍙互浠绘剰鎸囧畾琛屽唴娉ㄩ噴绗 if(lpszTmp != NULL) *lpszTmp = 0; - StrTrimAll(szKeyItemBuf); //zl 2002.9.19 ";"和有用内容间必有空格或TAB字符,必须删除这些分割字符 + StrTrimAll(szKeyItemBuf); //zl 2002.9.19 ";"鍜屾湁鐢ㄥ唴瀹归棿蹇呮湁绌烘牸鎴朤AB瀛楃,蹇呴』鍒犻櫎杩欎簺鍒嗗壊瀛楃 iPos = strlen(szKeyItemBuf)-1; - if(szKeyItemBuf[0] == '[' && szKeyItemBuf[iPos] == ']') //又到了一个段,说明指定段下的指定key没有找到 + if(szKeyItemBuf[0] == '[' && szKeyItemBuf[iPos] == ']') //鍙堝埌浜嗕竴涓锛岃鏄庢寚瀹氭涓嬬殑鎸囧畾key娌℃湁鎵惧埌 { iRetVal = KEY_NOT_FOUND; goto func_end; } - lpszTmp = strchr(szKeyItemBuf, '='); //定位'=' - if(lpszTmp == NULL) continue; //不含等号的非段行被视为无效行 + lpszTmp = strchr(szKeyItemBuf, '='); //瀹氫綅'=' + if(lpszTmp == NULL) continue; //涓嶅惈绛夊彿鐨勯潪娈佃琚涓烘棤鏁堣 - *lpszTmp = 0; //为便于操作,在'='位置将szLineBuf从中间截断, 将szLineBuf分成key和value两个部分 - StrTrimAll(szKeyItemBuf); //此时szLineBuf是key + *lpszTmp = 0; //涓轰究浜庢搷浣滐紝鍦'='浣嶇疆灏唖zLineBuf浠庝腑闂存埅鏂, 灏唖zLineBuf鍒嗘垚key鍜寁alue涓や釜閮ㄥ垎 + StrTrimAll(szKeyItemBuf); //姝ゆ椂szLineBuf鏄痥ey - if(strcmp(szKeyItemBuf, lpszKeyName) == 0) //找到了指定key + if(strcmp(szKeyItemBuf, lpszKeyName) == 0) //鎵惧埌浜嗘寚瀹歬ey { lpszTmp++; - StrTrimAll(lpszTmp); //lpszTmp++是key对应的value + StrTrimAll(lpszTmp); //lpszTmp++鏄痥ey瀵瑰簲鐨剉alue if( strlen(lpszTmp) < nSize ) - strcpy(lpszReturnedString, lpszTmp); //返回key对应的value + strcpy(lpszReturnedString, lpszTmp); //杩斿洖key瀵瑰簲鐨剉alue else strncpy(lpszReturnedString, lpszTmp, strlen(lpszTmp)); - iRetVal = 1; //1表示正确 + iRetVal = 1; //1琛ㄧず姝g‘ bKeyFoundFlag = TRUE; break; @@ -351,7 +351,7 @@ func_end: delete [] lpszFileText; - //如果出错同时缺省参数不为NULL,则返回缺省参数 + //濡傛灉鍑洪敊鍚屾椂缂虹渷鍙傛暟涓嶄负NULL锛屽垯杩斿洖缂虹渷鍙傛暟 if( iRetVal < 0 && lpszDefault != NULL ) { if( strlen(lpszDefault) < nSize ) @@ -364,41 +364,41 @@ func_end: } /*------------------------------------------------------------------------------------- - 平台无关的INI文件读函数(整数),和同类API相比,只是参数类型从const char*变成char*, - 返回值类型从UINT改成int + 骞冲彴鏃犲叧鐨処NI鏂囦欢璇诲嚱鏁(鏁存暟),鍜屽悓绫籄PI鐩告瘮,鍙槸鍙傛暟绫诲瀷浠巆onst char*鍙樻垚char*, + 杩斿洖鍊肩被鍨嬩粠UINT鏀规垚int -------------------------------------------------------------------------------------*/ int QGetPrivateProfileInt( - const char* lpszSectionName, //段名 - const char* lpszKeyName, //键名 - int nDefault, //缺省值 - const char* lpszFileName, //ini文件名 - const char* lpszRemarkInLineStr, //行内注释符 - const char chContinueLineChar //续行符号 + const char* lpszSectionName, //娈靛悕 + const char* lpszKeyName, //閿悕 + int nDefault, //缂虹渷鍊 + const char* lpszFileName, //ini鏂囦欢鍚 + const char* lpszRemarkInLineStr, //琛屽唴娉ㄩ噴绗 + const char chContinueLineChar //缁绗﹀彿 ) { int iRet, iResult; - char szNumStr[256]; //数字字符串 + char szNumStr[256]; //鏁板瓧瀛楃涓 iRet = QGetPrivateProfileString( - lpszSectionName, //段名 - lpszKeyName, //键名 - NULL, //缺省字符串 - szNumStr, //结果字符串 - 256, //结果字符串长度 - lpszFileName, //INI文件名 - lpszRemarkInLineStr, //行内注释符 - chContinueLineChar //续行符号 + lpszSectionName, //娈靛悕 + lpszKeyName, //閿悕 + NULL, //缂虹渷瀛楃涓 + szNumStr, //缁撴灉瀛楃涓 + 256, //缁撴灉瀛楃涓查暱搴 + lpszFileName, //INI鏂囦欢鍚 + lpszRemarkInLineStr, //琛屽唴娉ㄩ噴绗 + chContinueLineChar //缁绗﹀彿 ); //qDebug(lpszFileName); - if(iRet < 0) return nDefault; //出错则返回缺省值 + if(iRet < 0) return nDefault; //鍑洪敊鍒欒繑鍥炵己鐪佸 StrTrimAll(szNumStr); /*-------------------------------------------------------------------------------- - 因原先未考虑ini中用"0x1801"这种16进制字符串,导致转换时出错,因为atoi不认识16进制串 - 2002.9.18 加入非十进制字符串识别支持,目前只支持16进制,字符串格式为"0x数字" + 鍥犲師鍏堟湭鑰冭檻ini涓敤"0x1801"杩欑16杩涘埗瀛楃涓,瀵艰嚧杞崲鏃跺嚭閿,鍥犱负atoi涓嶈璇16杩涘埗涓 + 2002.9.18 鍔犲叆闈炲崄杩涘埗瀛楃涓茶瘑鍒敮鎸侊紝鐩墠鍙敮鎸16杩涘埗,瀛楃涓叉牸寮忎负"0x鏁板瓧" --------------------------------------------------------------------------------*/ BOOL bIsHexFlag = FALSE; @@ -409,82 +409,82 @@ int QGetPrivateProfileInt( } if( bIsHexFlag ) - iRet = sscanf(&szNumStr[2], "%x", &iResult); //16进制 + iRet = sscanf(&szNumStr[2], "%x", &iResult); //16杩涘埗 else - iRet = sscanf(szNumStr, "%d", &iResult); //10进制 + iRet = sscanf(szNumStr, "%d", &iResult); //10杩涘埗 - if( iRet != 1 ) //如数字字符串合法的话,应只转换一个field,故返回值不为1表示出错,此时返回缺省值 + if( iRet != 1 ) //濡傛暟瀛楀瓧绗︿覆鍚堟硶鐨勮瘽,搴斿彧杞崲涓涓猣ield,鏁呰繑鍥炲间笉涓1琛ㄧず鍑洪敊,姝ゆ椂杩斿洖缂虹渷鍊 return nDefault; else - return iResult; //正确返回 + return iResult; //姝g‘杩斿洖 } /*------------------------------------------------------------------------------------- - 平台无关的INI文件写函数,和同类API相比,只是参数类型从const char*改成了char* - 目前该函数尚未对段搜索部分进行优化 + 骞冲彴鏃犲叧鐨処NI鏂囦欢鍐欏嚱鏁,鍜屽悓绫籄PI鐩告瘮,鍙槸鍙傛暟绫诲瀷浠巆onst char*鏀规垚浜哻har* + 鐩墠璇ュ嚱鏁板皻鏈娈垫悳绱㈤儴鍒嗚繘琛屼紭鍖 -------------------------------------------------------------------------------------*/ BOOL QWritePrivateProfileString( - const char* lpszSectionName, //段名 - const char* lpszKeyName, //键名 - const char* lpszString, //要写入的字符串 - const char* lpszFileName //INI文件名 + const char* lpszSectionName, //娈靛悕 + const char* lpszKeyName, //閿悕 + const char* lpszString, //瑕佸啓鍏ョ殑瀛楃涓 + const char* lpszFileName //INI鏂囦欢鍚 ) { FILE* IniFile; char szLineBuf[MAX_LINE_BUF_LENGTH]; - char *lpszFrontBlock = NULL, *lpszRearBlock = NULL; //装入前后两块文件各自所占的内存区指针 + char *lpszFrontBlock = NULL, *lpszRearBlock = NULL; //瑁呭叆鍓嶅悗涓ゅ潡鏂囦欢鍚勮嚜鎵鍗犵殑鍐呭瓨鍖烘寚閽 char *lpszTmp = NULL; - i_32 lPrePos = 0, lCurPos = 0; //前一次读取及本次读取的文件指针位置 + i_32 lPrePos = 0, lCurPos = 0; //鍓嶄竴娆¤鍙栧強鏈璇诲彇鐨勬枃浠舵寚閽堜綅缃 bool bSecFoundFlag = FALSE; bool bKeyFoundFlag = FALSE; - bool bMeetAnotherBlock = FALSE; //遇到另外一个段 + bool bMeetAnotherBlock = FALSE; //閬囧埌鍙﹀涓涓 i_32 lEndPos; int iPos; - char szLineEndStr[3]; //行末尾换行符号 + char szLineEndStr[3]; //琛屾湯灏炬崲琛岀鍙 #ifdef OS_UNIX - strcpy(szLineEndStr, "\n"); //UNIX文本文件行末只有一个换行符'\n' + strcpy(szLineEndStr, "\n"); //UNIX鏂囨湰鏂囦欢琛屾湯鍙湁涓涓崲琛岀'\n' #else - strcpy(szLineEndStr, "\r\n"); //Windows文本文件行末有一个回车符'\r',一个换行符'\n' + strcpy(szLineEndStr, "\r\n"); //Windows鏂囨湰鏂囦欢琛屾湯鏈変竴涓洖杞︾'\r',涓涓崲琛岀'\n' #endif - IniFile = fopen(lpszFileName, "r+b"); //二进制方式打开,可读可写(但文件必须存在) + IniFile = fopen(lpszFileName, "r+b"); //浜岃繘鍒舵柟寮忔墦寮锛屽彲璇诲彲鍐(浣嗘枃浠跺繀椤诲瓨鍦) if(!IniFile) return false; - fseek(IniFile, 0, SEEK_END); //定位到文件尾部 - lEndPos = ftell(IniFile); //计算文件尾部指针位置(该值=文件总长=文件指针位置最大值+1) + fseek(IniFile, 0, SEEK_END); //瀹氫綅鍒版枃浠跺熬閮 + lEndPos = ftell(IniFile); //璁$畻鏂囦欢灏鹃儴鎸囬拡浣嶇疆(璇ュ=鏂囦欢鎬婚暱=鏂囦欢鎸囬拡浣嶇疆鏈澶у+1) - fseek(IniFile, 0, SEEK_SET); //重新定位到开头 + fseek(IniFile, 0, SEEK_SET); //閲嶆柊瀹氫綅鍒板紑澶 - //先找指定的section + //鍏堟壘鎸囧畾鐨剆ection while(!feof(IniFile)) { - lPrePos = lCurPos; //保留上次文件指针位置 + lPrePos = lCurPos; //淇濈暀涓婃鏂囦欢鎸囬拡浣嶇疆 - ReadLineFromFile(IniFile, szLineBuf, MAX_LINE_BUF_LENGTH); //读取一行 + ReadLineFromFile(IniFile, szLineBuf, MAX_LINE_BUF_LENGTH); //璇诲彇涓琛 - lCurPos = ftell(IniFile); //当前文件指针位置 + lCurPos = ftell(IniFile); //褰撳墠鏂囦欢鎸囬拡浣嶇疆 StrTrimAll(szLineBuf); - if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) continue; //注释行和空行不处理 + if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) continue; //娉ㄩ噴琛屽拰绌鸿涓嶅鐞 - //将一行尾部可能存在的";"注释部分剔除(这样key=value的value中不能含有;否则将被当成注释而删除 + //灏嗕竴琛屽熬閮ㄥ彲鑳藉瓨鍦ㄧ殑";"娉ㄩ噴閮ㄥ垎鍓旈櫎(杩欐牱key=value鐨剉alue涓笉鑳藉惈鏈;鍚﹀垯灏嗚褰撴垚娉ㄩ噴鑰屽垹闄 lpszTmp = strchr(szLineBuf, ';'); if(lpszTmp != NULL) *lpszTmp = 0; - StrTrimAll(szLineBuf); //zl 2002.9.19 ";"和有用内容间必有空格或TAB字符,必须删除这些分割字符 + StrTrimAll(szLineBuf); //zl 2002.9.19 ";"鍜屾湁鐢ㄥ唴瀹归棿蹇呮湁绌烘牸鎴朤AB瀛楃,蹇呴』鍒犻櫎杩欎簺鍒嗗壊瀛楃 iPos = strlen(szLineBuf) - 1; - if(szLineBuf[0] == '[' && szLineBuf[iPos] == ']') //该行是一个段 + if(szLineBuf[0] == '[' && szLineBuf[iPos] == ']') //璇ヨ鏄竴涓 { - szLineBuf[iPos] = 0; //去掉"["和"]",便于比较 + szLineBuf[iPos] = 0; //鍘绘帀"["鍜"]",渚夸簬姣旇緝 lpszTmp = &szLineBuf[1]; - if( strcmp(lpszTmp, lpszSectionName) == 0 ) //指定的段找到了 + if( strcmp(lpszTmp, lpszSectionName) == 0 ) //鎸囧畾鐨勬鎵惧埌浜 { bSecFoundFlag = TRUE; break; @@ -492,15 +492,15 @@ BOOL QWritePrivateProfileString( } } - //[情况一]:如果未找到指定段,则指定key肯定也不存在,因此即要新建section也要新建key, - // 这些内容就直接追加到文件尾部,同时约定在文件尾部新建一个段时,默认在前面 - // 追加换行符号以确保和前面的其它内容不在一行 + //[鎯呭喌涓]锛氬鏋滄湭鎵惧埌鎸囧畾娈,鍒欐寚瀹歬ey鑲畾涔熶笉瀛樺湪,鍥犳鍗宠鏂板缓section涔熻鏂板缓key, + // 杩欎簺鍐呭灏辩洿鎺ヨ拷鍔犲埌鏂囦欢灏鹃儴,鍚屾椂绾﹀畾鍦ㄦ枃浠跺熬閮ㄦ柊寤轰竴涓鏃,榛樿鍦ㄥ墠闈 + // 杩藉姞鎹㈣绗﹀彿浠ョ‘淇濆拰鍓嶉潰鐨勫叾瀹冨唴瀹逛笉鍦ㄤ竴琛 if( !bSecFoundFlag ) { char szNewSection[2048]; memset(szNewSection, 0, 2048); - //生成新的段字符串 + //鐢熸垚鏂扮殑娈靛瓧绗︿覆 sprintf(szNewSection, "%s[%s]%s%s = %s%s", szLineEndStr, lpszSectionName, szLineEndStr, lpszKeyName, lpszString, szLineEndStr); fseek(IniFile, 0, SEEK_END); @@ -509,66 +509,66 @@ BOOL QWritePrivateProfileString( goto func_end; } - //找到指定段后,再继续找指定key + //鎵惧埌鎸囧畾娈靛悗锛屽啀缁х画鎵炬寚瀹歬ey while(!feof(IniFile)) { - lPrePos = lCurPos; //保留上次文件指针位置 + lPrePos = lCurPos; //淇濈暀涓婃鏂囦欢鎸囬拡浣嶇疆 - ReadLineFromFile(IniFile, szLineBuf, MAX_LINE_BUF_LENGTH); //读取一行 + ReadLineFromFile(IniFile, szLineBuf, MAX_LINE_BUF_LENGTH); //璇诲彇涓琛 - lCurPos = ftell(IniFile); //保留当前文件指针位置 + lCurPos = ftell(IniFile); //淇濈暀褰撳墠鏂囦欢鎸囬拡浣嶇疆 StrTrimAll(szLineBuf); - if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) continue; //注释行和空行不处理 + if( szLineBuf[0] == ';' || szLineBuf[0] == 0 ) continue; //娉ㄩ噴琛屽拰绌鸿涓嶅鐞 - //将一行尾部可能存在的";"注释部分剔除(这样key=value的value中不能含有;否则将被当成注释而删除 + //灏嗕竴琛屽熬閮ㄥ彲鑳藉瓨鍦ㄧ殑";"娉ㄩ噴閮ㄥ垎鍓旈櫎(杩欐牱key=value鐨剉alue涓笉鑳藉惈鏈;鍚﹀垯灏嗚褰撴垚娉ㄩ噴鑰屽垹闄 lpszTmp = strchr(szLineBuf, ';'); if(lpszTmp != NULL) *lpszTmp = 0; - StrTrimAll(szLineBuf); //zl 2002.9.19 ";"和有用内容间必有空格或TAB字符,必须删除这些分割字符 + StrTrimAll(szLineBuf); //zl 2002.9.19 ";"鍜屾湁鐢ㄥ唴瀹归棿蹇呮湁绌烘牸鎴朤AB瀛楃,蹇呴』鍒犻櫎杩欎簺鍒嗗壊瀛楃 iPos = strlen(szLineBuf)-1; if(szLineBuf[0] == '[' && szLineBuf[iPos] == ']') { - bMeetAnotherBlock = TRUE; //又到了一个段,说明指定段下的指定key没有找到 + bMeetAnotherBlock = TRUE; //鍙堝埌浜嗕竴涓锛岃鏄庢寚瀹氭涓嬬殑鎸囧畾key娌℃湁鎵惧埌 break; } - lpszTmp = strchr(szLineBuf, '='); //定位'=' - if(lpszTmp == NULL) continue; //不含等号的非段行被视为无效行 + lpszTmp = strchr(szLineBuf, '='); //瀹氫綅'=' + if(lpszTmp == NULL) continue; //涓嶅惈绛夊彿鐨勯潪娈佃琚涓烘棤鏁堣 - *lpszTmp = 0; //为便于操作,在'='位置将szLineBuf从中间截断, 将szLineBuf分成key和value两个部分 - StrTrimAll(szLineBuf); //此时szLineBuf是key + *lpszTmp = 0; //涓轰究浜庢搷浣滐紝鍦'='浣嶇疆灏唖zLineBuf浠庝腑闂存埅鏂, 灏唖zLineBuf鍒嗘垚key鍜寁alue涓や釜閮ㄥ垎 + StrTrimAll(szLineBuf); //姝ゆ椂szLineBuf鏄痥ey - /* 找到了指定key */ + /* 鎵惧埌浜嗘寚瀹歬ey */ - if(strcmp(szLineBuf, lpszKeyName) == 0) //该比较大小写敏感 + if(strcmp(szLineBuf, lpszKeyName) == 0) //璇ユ瘮杈冨ぇ灏忓啓鏁忔劅 { char szKeyValBlock[2048]; memset(szKeyValBlock, 0, 2048); - //重新组织key = value对,实现修改目的 + //閲嶆柊缁勭粐key = value瀵癸紝瀹炵幇淇敼鐩殑 sprintf(szKeyValBlock, "%s = %s%s", szLineBuf, lpszString, szLineEndStr); - //注意:这里和下面的段前插入内容不同,这里是要将原有的key=value对去掉, - //代之以新对,因此lPrePos和lCurPos之间的文件内容(即原有key=value对)不要, - //该操作是替换而不是插入 + //娉ㄦ剰锛氳繖閲屽拰涓嬮潰鐨勬鍓嶆彃鍏ュ唴瀹逛笉鍚岋紝杩欓噷鏄灏嗗師鏈夌殑key=value瀵瑰幓鎺夛紝 + //浠d箣浠ユ柊瀵,鍥犳lPrePos鍜宭CurPos涔嬮棿鐨勬枃浠跺唴瀹(鍗冲師鏈塳ey=value瀵)涓嶈, + //璇ユ搷浣滄槸鏇挎崲鑰屼笉鏄彃鍏 lpszRearBlock = new char[lEndPos-lCurPos+1]; memset(lpszRearBlock, 0, lEndPos-lCurPos+1); - fread(lpszRearBlock, sizeof(char), lEndPos-lCurPos, IniFile); //从当前位置开始读其后面的文件内容(长度为lEndPos-lCurPos, 注意lEndPos是end结尾符号的位置,等于文件长度,比最大有效文件指针位置大1) + fread(lpszRearBlock, sizeof(char), lEndPos-lCurPos, IniFile); //浠庡綋鍓嶄綅缃紑濮嬭鍏跺悗闈㈢殑鏂囦欢鍐呭(闀垮害涓簂EndPos-lCurPos, 娉ㄦ剰lEndPos鏄痚nd缁撳熬绗﹀彿鐨勪綅缃,绛変簬鏂囦欢闀垮害,姣旀渶澶ф湁鏁堟枃浠舵寚閽堜綅缃ぇ1) lpszFrontBlock = new char[lPrePos+1]; memset(lpszFrontBlock, 0, lPrePos+1); fseek(IniFile, 0, SEEK_SET); - fread(lpszFrontBlock, sizeof(char), lPrePos, IniFile); //从头部开始读其后面的文件内容(长度为lPrePos,因为文件指针从0开始,lPrePos位置前的文件长度就是lPrePos) + fread(lpszFrontBlock, sizeof(char), lPrePos, IniFile); //浠庡ご閮ㄥ紑濮嬭鍏跺悗闈㈢殑鏂囦欢鍐呭(闀垮害涓簂PrePos,鍥犱负鏂囦欢鎸囬拡浠0寮濮,lPrePos浣嶇疆鍓嶇殑鏂囦欢闀垮害灏辨槸lPrePos) - //先关闭文件再用可写方式打开以清空原有内容,最后依次写文件的各个部分,如要不关闭 - //打开文件而是直接清空文件内容,因unix和windows中设置文件长度的调用不同,比较麻烦 + //鍏堝叧闂枃浠跺啀鐢ㄥ彲鍐欐柟寮忔墦寮浠ユ竻绌哄師鏈夊唴瀹癸紝鏈鍚庝緷娆″啓鏂囦欢鐨勫悇涓儴鍒,濡傝涓嶅叧闂 + //鎵撳紑鏂囦欢鑰屾槸鐩存帴娓呯┖鏂囦欢鍐呭,鍥爑nix鍜寃indows涓缃枃浠堕暱搴︾殑璋冪敤涓嶅悓,姣旇緝楹荤儲 fclose(IniFile); - IniFile = fopen(lpszFileName, "wb"); //可写方式打开(如文件已存在,其所有内容被清空) + IniFile = fopen(lpszFileName, "wb"); //鍙啓鏂瑰紡鎵撳紑(濡傛枃浠跺凡瀛樺湪,鍏舵墍鏈夊唴瀹硅娓呯┖) if(!IniFile) return FALSE; fwrite(lpszFrontBlock, sizeof(char), lPrePos, IniFile); @@ -583,35 +583,35 @@ BOOL QWritePrivateProfileString( } } - //如果在指定段下未找到指定key,则要新建key=value对 + //濡傛灉鍦ㄦ寚瀹氭涓嬫湭鎵惧埌鎸囧畾key,鍒欒鏂板缓key=value瀵 if( !bKeyFoundFlag ) { char szKeyBlock[2048]; memset(szKeyBlock, 0, 2048); - if(bMeetAnotherBlock) //遇到了另外一个段,此时要在该段前面插入新建的key=value对 + if(bMeetAnotherBlock) //閬囧埌浜嗗彟澶栦竴涓,姝ゆ椂瑕佸湪璇ユ鍓嶉潰鎻掑叆鏂板缓鐨刱ey=value瀵 { sprintf(szKeyBlock, "%s = %s%s", lpszKeyName, lpszString, szLineEndStr); - //以下以lPrePos为界线将文件拆成两部分,和上面替换操作中lPrePos和lCurPos间内容 - //不要不同,这里是插入而不是替换, 因此直接以lPrePos为界将文件分开,进行插入操作 + //浠ヤ笅浠PrePos涓虹晫绾垮皢鏂囦欢鎷嗘垚涓ら儴鍒,鍜屼笂闈㈡浛鎹㈡搷浣滀腑lPrePos鍜宭CurPos闂村唴瀹 + //涓嶈涓嶅悓,杩欓噷鏄彃鍏ヨ屼笉鏄浛鎹, 鍥犳鐩存帴浠PrePos涓虹晫灏嗘枃浠跺垎寮,杩涜鎻掑叆鎿嶄綔 - fseek(IniFile, lPrePos, SEEK_SET); //定位到lPrePos(这里lPrePos是另一个段的开始字符,如"[") + fseek(IniFile, lPrePos, SEEK_SET); //瀹氫綅鍒發PrePos(杩欓噷lPrePos鏄彟涓涓鐨勫紑濮嬪瓧绗,濡"[") lpszRearBlock = new char[lEndPos-lPrePos+1]; memset(lpszRearBlock, 0, lEndPos-lPrePos+1); - fread(lpszRearBlock, sizeof(char), lEndPos-lPrePos, IniFile); //从当前位置开始读其后面的文件内容(长度为lEndPos-lPrePos) + fread(lpszRearBlock, sizeof(char), lEndPos-lPrePos, IniFile); //浠庡綋鍓嶄綅缃紑濮嬭鍏跺悗闈㈢殑鏂囦欢鍐呭(闀垮害涓簂EndPos-lPrePos) lpszFrontBlock = new char[lPrePos+1]; memset(lpszFrontBlock, 0, lPrePos+1); fseek(IniFile, 0, SEEK_SET); - fread(lpszFrontBlock, sizeof(char), lPrePos, IniFile); //从头部开始读其后面的文件内容(长度为lPrePos) + fread(lpszFrontBlock, sizeof(char), lPrePos, IniFile); //浠庡ご閮ㄥ紑濮嬭鍏跺悗闈㈢殑鏂囦欢鍐呭(闀垮害涓簂PrePos) - //先关闭文件再用可写方式打开以清空原有内容,最后依次写文件的各个部分,如要不关闭 - //打开文件而是直接清空文件内容,因unix和windows中设置文件长度的调用不同,比较麻烦 + //鍏堝叧闂枃浠跺啀鐢ㄥ彲鍐欐柟寮忔墦寮浠ユ竻绌哄師鏈夊唴瀹癸紝鏈鍚庝緷娆″啓鏂囦欢鐨勫悇涓儴鍒,濡傝涓嶅叧闂 + //鎵撳紑鏂囦欢鑰屾槸鐩存帴娓呯┖鏂囦欢鍐呭,鍥爑nix鍜寃indows涓缃枃浠堕暱搴︾殑璋冪敤涓嶅悓,姣旇緝楹荤儲 fclose(IniFile); - IniFile = fopen(lpszFileName, "wb"); //可写方式打开(如文件已存在,其所有内容被清空) + IniFile = fopen(lpszFileName, "wb"); //鍙啓鏂瑰紡鎵撳紑(濡傛枃浠跺凡瀛樺湪,鍏舵墍鏈夊唴瀹硅娓呯┖) if(!IniFile) return FALSE; fwrite(lpszFrontBlock, sizeof(char), lPrePos, IniFile); @@ -622,11 +622,11 @@ BOOL QWritePrivateProfileString( delete [] lpszRearBlock; } - else //如果连一个段都没有碰到,则肯定已到了文件尾部, 追加key=value块到尾部即可 + else //濡傛灉杩炰竴涓閮芥病鏈夌鍒帮紝鍒欒偗瀹氬凡鍒颁簡鏂囦欢灏鹃儴, 杩藉姞key=value鍧楀埌灏鹃儴鍗冲彲 { fseek(IniFile, 0, SEEK_END); - /* 如当前位置前已有换行符号则无需另行增加,此举可防止新增部分和上面一行连在一起 */ + /* 濡傚綋鍓嶄綅缃墠宸叉湁鎹㈣绗﹀彿鍒欐棤闇鍙﹁澧炲姞,姝や妇鍙槻姝㈡柊澧為儴鍒嗗拰涓婇潰涓琛岃繛鍦ㄤ竴璧 */ if( IfBeforeHasRet(IniFile) ) sprintf(szKeyBlock, "%s = %s%s", lpszKeyName, lpszString, szLineEndStr); else @@ -642,7 +642,7 @@ func_end: return true; } -//辅助函数,判断文件中当前指针位置前面是否有换行符号,使用该函数前必须确保文件已经打开并将文件指针定位到应有的位置 +//杈呭姪鍑芥暟,鍒ゆ柇鏂囦欢涓綋鍓嶆寚閽堜綅缃墠闈㈡槸鍚︽湁鎹㈣绗﹀彿,浣跨敤璇ュ嚱鏁板墠蹇呴』纭繚鏂囦欢宸茬粡鎵撳紑骞跺皢鏂囦欢鎸囬拡瀹氫綅鍒板簲鏈夌殑浣嶇疆 bool IfBeforeHasRet(FILE* pFile) { char szTmp[3]; @@ -651,9 +651,9 @@ bool IfBeforeHasRet(FILE* pFile) memset(szTmp, 0, 3); - lOldPos = ftell(pFile); //保存文件当前指针位置 + lOldPos = ftell(pFile); //淇濆瓨鏂囦欢褰撳墠鎸囬拡浣嶇疆 - /* 读当前位置前面的两个字节, 因为windows下是回车换行两个字节 */ + /* 璇诲綋鍓嶄綅缃墠闈㈢殑涓や釜瀛楄妭, 鍥犱负windows涓嬫槸鍥炶溅鎹㈣涓や釜瀛楄妭 */ fseek(pFile, -2, SEEK_CUR); fread(szTmp, sizeof(char), 2, pFile); @@ -663,70 +663,70 @@ bool IfBeforeHasRet(FILE* pFile) if( szTmp[0] == 0x0d && szTmp[1] == 0x0a ) bBeforeHasRet = TRUE; #endif - fseek(pFile, lOldPos, SEEK_SET); //恢复原先的文件指针位置 + fseek(pFile, lOldPos, SEEK_SET); //鎭㈠鍘熷厛鐨勬枃浠舵寚閽堜綅缃 return bBeforeHasRet; } -/*-----------------------------------工具函数----------------------------------*/ +/*-----------------------------------宸ュ叿鍑芥暟----------------------------------*/ -//从指定文件中读取一行 +//浠庢寚瀹氭枃浠朵腑璇诲彇涓琛 int ReadLineFromFile(FILE* IniFile, char* lpszLineBuf, int iLen) { int iPos; /*----------------------------------------------------------------------------- - 注意:如果文件以t即text方式打开,则回车换行两个字符在input时被当作一个字符处理, - 因此fgets()得到的一行字符串尾部只有一个换行符而没有回车符,而如果是binary - 方式打开则一行字符尾部同时有回车换行两个字符,打开方式的不同直接影响fgets - 读入一行后删除行尾部控制字符的操作,如果是text方式,只要删除换行符号即可, - 如果是binary方式,则要删掉两个控制字符。以下对两个控制字符是否存在都进行 - 判断,可以同时适应text和binary两种模式,也就能同时适应Windows下和Unix两种 - 不同格式的文本文件(unix文本文件行末只有一个换行符,即0A,没有回车符) + 娉ㄦ剰锛氬鏋滄枃浠朵互t鍗硉ext鏂瑰紡鎵撳紑锛屽垯鍥炶溅鎹㈣涓や釜瀛楃鍦╥nput鏃惰褰撲綔涓涓瓧绗﹀鐞嗭紝 + 鍥犳fgets()寰楀埌鐨勪竴琛屽瓧绗︿覆灏鹃儴鍙湁涓涓崲琛岀鑰屾病鏈夊洖杞︾锛岃屽鏋滄槸binary + 鏂瑰紡鎵撳紑鍒欎竴琛屽瓧绗﹀熬閮ㄥ悓鏃舵湁鍥炶溅鎹㈣涓や釜瀛楃锛屾墦寮鏂瑰紡鐨勪笉鍚岀洿鎺ュ奖鍝峟gets + 璇诲叆涓琛屽悗鍒犻櫎琛屽熬閮ㄦ帶鍒跺瓧绗︾殑鎿嶄綔锛屽鏋滄槸text鏂瑰紡锛屽彧瑕佸垹闄ゆ崲琛岀鍙峰嵆鍙紝 + 濡傛灉鏄痓inary鏂瑰紡锛屽垯瑕佸垹鎺変袱涓帶鍒跺瓧绗︺備互涓嬪涓や釜鎺у埗瀛楃鏄惁瀛樺湪閮借繘琛 + 鍒ゆ柇锛屽彲浠ュ悓鏃堕傚簲text鍜宐inary涓ょ妯″紡,涔熷氨鑳藉悓鏃堕傚簲Windows涓嬪拰Unix涓ょ + 涓嶅悓鏍煎紡鐨勬枃鏈枃浠(unix鏂囨湰鏂囦欢琛屾湯鍙湁涓涓崲琛岀锛屽嵆0A,娌℃湁鍥炶溅绗) - 后续记录: fopen()中打开模式里的"t"是微软自己定义的,Ansi C 只支持 "b"模式 + 鍚庣画璁板綍: fopen()涓墦寮妯″紡閲岀殑"t"鏄井杞嚜宸卞畾涔夌殑锛孉nsi C 鍙敮鎸 "b"妯″紡 ----------------------------------------------------------------------------*/ - if(fgets(lpszLineBuf, iLen, IniFile) != NULL) //fgets()函数遇到第一个换行符(0x0A)后结束(包括换行符),然后在尾部追加一个NULL后返回,因此换行符总是倒数第二个字符 + if(fgets(lpszLineBuf, iLen, IniFile) != NULL) //fgets()鍑芥暟閬囧埌绗竴涓崲琛岀(0x0A)鍚庣粨鏉(鍖呮嫭鎹㈣绗),鐒跺悗鍦ㄥ熬閮ㄨ拷鍔犱竴涓狽ULL鍚庤繑鍥,鍥犳鎹㈣绗︽绘槸鍊掓暟绗簩涓瓧绗 { iPos = strlen(lpszLineBuf) - 1; - if( lpszLineBuf[iPos-1] == 0x0D ) lpszLineBuf[iPos-1] = 0; //删除尾部可能存在的回车符(0x0D) - if( lpszLineBuf[iPos] == 0x0A ) lpszLineBuf[iPos] = 0; //删除尾部可能存在的换行符(0x0A) + if( lpszLineBuf[iPos-1] == 0x0D ) lpszLineBuf[iPos-1] = 0; //鍒犻櫎灏鹃儴鍙兘瀛樺湪鐨勫洖杞︾(0x0D) + if( lpszLineBuf[iPos] == 0x0A ) lpszLineBuf[iPos] = 0; //鍒犻櫎灏鹃儴鍙兘瀛樺湪鐨勬崲琛岀(0x0A) } else return -1; - return 0; //0表示正确 + return 0; //0琛ㄧず姝g‘ } /*---------------------------------------------------------------------------- -//从指定字符串中读取一行 +//浠庢寚瀹氬瓧绗︿覆涓鍙栦竴琛 int ReadLineFromString(char* lpszText, char* lpszLineBuf, int iLen) { int iPos; - if(fgets(lpszLineBuf, iLen, IniFile) != NULL) //fgets()函数遇到第一个换行符(0x0A)后结束(包括换行符),然后在尾部追加一个NULL后返回,因此换行符总是倒数第二个字符 + if(fgets(lpszLineBuf, iLen, IniFile) != NULL) //fgets()鍑芥暟閬囧埌绗竴涓崲琛岀(0x0A)鍚庣粨鏉(鍖呮嫭鎹㈣绗),鐒跺悗鍦ㄥ熬閮ㄨ拷鍔犱竴涓狽ULL鍚庤繑鍥,鍥犳鎹㈣绗︽绘槸鍊掓暟绗簩涓瓧绗 { iPos = strlen(lpszLineBuf) - 1; - if( lpszLineBuf[iPos-1] == 0x0D ) lpszLineBuf[iPos-1] = 0; //删除尾部可能存在的回车符(0x0D) - if( lpszLineBuf[iPos] == 0x0A ) lpszLineBuf[iPos] = 0; //删除尾部可能存在的换行符(0x0A) + if( lpszLineBuf[iPos-1] == 0x0D ) lpszLineBuf[iPos-1] = 0; //鍒犻櫎灏鹃儴鍙兘瀛樺湪鐨勫洖杞︾(0x0D) + if( lpszLineBuf[iPos] == 0x0A ) lpszLineBuf[iPos] = 0; //鍒犻櫎灏鹃儴鍙兘瀛樺湪鐨勬崲琛岀(0x0A) } else return -1; - return 0; //0表示正确 + return 0; //0琛ㄧず姝g‘ } ---------------------------------------------------------------------------*/ -//删除字符串的左侧空格, 2002.9.19增加删除TAB字符(ASC码为9)功能 +//鍒犻櫎瀛楃涓茬殑宸︿晶绌烘牸, 2002.9.19澧炲姞鍒犻櫎TAB瀛楃(ASC鐮佷负9)鍔熻兘 void StrTrimLeft(char* szBuf) { char *szBak = NULL; @@ -736,20 +736,20 @@ void StrTrimLeft(char* szBuf) while(*p == ' ' || *p == 9) { p++; } //qDebug("StrtrimLeft:p=%s",p); - if(p != szBuf) //头部有空格或TAB字符 + if(p != szBuf) //澶撮儴鏈夌┖鏍兼垨TAB瀛楃 { - szBak = _strdup(p); //strcpy()中如source和dest重合(overlap),则copy结果不可预料,故另设一个缓冲区临时存放这个头部没有空格的字符串 - strcpy(szBuf, szBak); //strcpy()肯定不会溢出,因p是szBuf的一个子集,同时strcpy会拷贝结尾的null,因此无须人工截断szBuf + szBak = _strdup(p); //strcpy()涓source鍜宒est閲嶅悎(overlap)锛屽垯copy缁撴灉涓嶅彲棰勬枡锛屾晠鍙﹁涓涓紦鍐插尯涓存椂瀛樻斁杩欎釜澶撮儴娌℃湁绌烘牸鐨勫瓧绗︿覆 + strcpy(szBuf, szBak); //strcpy()鑲畾涓嶄細婧㈠嚭锛屽洜p鏄痵zBuf鐨勪竴涓瓙闆嗭紝鍚屾椂strcpy浼氭嫹璐濈粨灏剧殑null锛屽洜姝ゆ棤椤讳汉宸ユ埅鏂璼zBuf free(szBak); } } -//删除字符串的右侧空格, 2002.9.19增加删除TAB字符(ASC码为9)功能 +//鍒犻櫎瀛楃涓茬殑鍙充晶绌烘牸, 2002.9.19澧炲姞鍒犻櫎TAB瀛楃(ASC鐮佷负9)鍔熻兘 void StrTrimRight(char* szBuf) { char *szBak = NULL; - int iPos = strlen(szBuf)-1; //最后一个非NULL字符的下标 + int iPos = strlen(szBuf)-1; //鏈鍚庝竴涓潪NULL瀛楃鐨勪笅鏍 if(!szBuf) return; @@ -757,30 +757,30 @@ void StrTrimRight(char* szBuf) while(*p == ' ' || *p == 9) { p--; } - if(p != &szBuf[iPos]) //尾部有空格 + if(p != &szBuf[iPos]) //灏鹃儴鏈夌┖鏍 { p++; - *p = 0; //直接尾部截断,比删除头部空格还简单 + *p = 0; //鐩存帴灏鹃儴鎴柇锛屾瘮鍒犻櫎澶撮儴绌烘牸杩樼畝鍗 } } -//删除左右两边所有空格 +//鍒犻櫎宸﹀彸涓よ竟鎵鏈夌┖鏍 void StrTrimAll(char* szBuf) { StrTrimRight(szBuf); StrTrimLeft(szBuf); } -//获取指定文件的长度 +//鑾峰彇鎸囧畾鏂囦欢鐨勯暱搴 i_32 GetFileSize(char* lpszFileName) { FILE* pFile; - pFile = fopen(lpszFileName, "rb"); //二进制方式 + pFile = fopen(lpszFileName, "rb"); //浜岃繘鍒舵柟寮 if(pFile == NULL) return -1; - fseek(pFile, 0, SEEK_END); //定位到文件尾部 - i_32 lFileSize = ftell(pFile); //获取文件指针当前位置(此时文件指针指向EOF结束标志)[文件指针是从0开始计数的] + fseek(pFile, 0, SEEK_END); //瀹氫綅鍒版枃浠跺熬閮 + i_32 lFileSize = ftell(pFile); //鑾峰彇鏂囦欢鎸囬拡褰撳墠浣嶇疆(姝ゆ椂鏂囦欢鎸囬拡鎸囧悜EOF缁撴潫鏍囧織)[鏂囦欢鎸囬拡鏄粠0寮濮嬭鏁扮殑] fclose(pFile); diff --git a/Makefile b/Makefile index cbcf69c..da10b4e 100644 --- a/Makefile +++ b/Makefile @@ -162,6 +162,30 @@ Inifile.cpp.s: $(MAKE) -f CMakeFiles/iec103.dir/build.make CMakeFiles/iec103.dir/Inifile.cpp.s .PHONY : Inifile.cpp.s +MySQLAdo.o: MySQLAdo.cpp.o +.PHONY : MySQLAdo.o + +# target to build an object file +MySQLAdo.cpp.o: + $(MAKE) -f CMakeFiles/iec103.dir/build.make CMakeFiles/iec103.dir/MySQLAdo.cpp.o +.PHONY : MySQLAdo.cpp.o + +MySQLAdo.i: MySQLAdo.cpp.i +.PHONY : MySQLAdo.i + +# target to preprocess a source file +MySQLAdo.cpp.i: + $(MAKE) -f CMakeFiles/iec103.dir/build.make CMakeFiles/iec103.dir/MySQLAdo.cpp.i +.PHONY : MySQLAdo.cpp.i + +MySQLAdo.s: MySQLAdo.cpp.s +.PHONY : MySQLAdo.s + +# target to generate assembly for a file +MySQLAdo.cpp.s: + $(MAKE) -f CMakeFiles/iec103.dir/build.make CMakeFiles/iec103.dir/MySQLAdo.cpp.s +.PHONY : MySQLAdo.cpp.s + Profile_Hash.o: Profile_Hash.cpp.o .PHONY : Profile_Hash.o @@ -561,6 +585,9 @@ help: @echo "... Inifile.o" @echo "... Inifile.i" @echo "... Inifile.s" + @echo "... MySQLAdo.o" + @echo "... MySQLAdo.i" + @echo "... MySQLAdo.s" @echo "... Profile_Hash.o" @echo "... Profile_Hash.i" @echo "... Profile_Hash.s" diff --git a/MySQLAdo.cpp b/MySQLAdo.cpp index bb2eeea..096e615 100644 --- a/MySQLAdo.cpp +++ b/MySQLAdo.cpp @@ -3,7 +3,11 @@ #include #include +#include #include +#include +#include +#include using namespace std; #ifdef USING_MYSQL @@ -152,7 +156,7 @@ bool InitDatabase(int argc, char **argv, const char* host, const char* username, } mysql_query(mysql, "SET NAMES utf8"); - return true; + return LoadIecPoints(); #else return true; #endif // USING_MYSQL @@ -183,8 +187,8 @@ bool PingDatabase() #ifdef USING_MYSQL bool LoadIecPoints() { - // const char* sql = "SELECT t1.`id`,t1.`site_id`,t1.`sensor_id`,t2.sensor_code,t2.grp_no FROM iec_points AS t1 LEFT JOIN iec_sensors AS t2 t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t2.sadr"; - const char* sql = "SELECT t1.`id`,t1.`site_id`,t1.`sensor_id`,t2.sensor_code,t2.grp_no FROM niec_points AS t1 LEFT JOIN niec_sensors AS t2 t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t2.sadr"; + // const char* sql = "SELECT t1.`id`,t1.sadr,t1.`site_id`,t1.`sensor_id`,t1.item_no,t2.sensor_code,t2.grp_no FROM iec_points AS t1 LEFT JOIN iec_sensors AS t2 ON t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t1.sadr"; + const char* sql = "SELECT t1.`id`,t1.sadr,t1.`site_id`,t1.`sensor_id`,t1.item_no,t2.sensor_code,t2.grp_no FROM niec_points AS t1 LEFT JOIN niec_sensors AS t2 ON t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t1.sadr"; if (mysql_query(mysql, sql)) { @@ -208,8 +212,9 @@ bool LoadIecPoints() // t1.`id`,t1.`site_id`,t1.`sensor_id`,t2.sensor_code,t2.grp_no pt.sadr = strtoul(row[fieldIdx++], NULL, 10); pt.siteId = strtoul(row[fieldIdx++], NULL, 10); - fieldIdx++; // sensor code 17浣嶇紪鐮 pt.sensorId = strtoul(row[fieldIdx++], NULL, 10); + pt.itemNo = strtoul(row[fieldIdx++], NULL, 10); + fieldIdx++; // sensor code 17浣嶇紪鐮 pt.sensorGroupNo = strtoul(row[fieldIdx++], NULL, 10); g_iec_points.push_back(pt); @@ -238,12 +243,16 @@ int GetAIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCur const IEC_POINT_TABLE& pt = g_iec_points[j]; - if (PingDatabase()) + if (!PingDatabase()) { return -1; } - std::string sql = "SELECT sadr,state,stype,ival,fval,d_time FROM niec_origin_data WHERE sadr=" + std::to_string(pt.sadr) + " ORDER BY `id` DESC LIMIT 1"; + char buf[16] = { 0 }; + sprintf(buf, "%u", pt.sadr); + std::string sql = "SELECT sadr,state,stype,ival,fval,d_time FROM niec_origin_data WHERE sadr="; + sql += buf; + sql += " ORDER BY `id` DESC LIMIT 1"; if (mysql_query(mysql, sql.c_str())) { @@ -263,7 +272,7 @@ int GetAIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCur { if (igno != NULL) *igno = pt.sensorGroupNo; if (iItemNo != NULL) *iItemNo = pt.itemNo; - if (iaddr != NULL) *iaddr = pt.sadr; + if (iaddr != NULL) *iaddr = pt.sensorId; if (pfValue != NULL) *pfValue = atof(row[4]); if (sCurTime != NULL && row[5] != NULL) { diff --git a/MySQLAdo.h b/MySQLAdo.h index 62458f4..2444cfc 100644 --- a/MySQLAdo.h +++ b/MySQLAdo.h @@ -17,9 +17,9 @@ struct IEC_POINT_TABLE unsigned int sadr; unsigned int siteId; unsigned int sensorId; - unsigned int sensorGroupNo; - unsigned char stype; // 1: 1:遥信 2:遥测 - unsigned int itemNo; + unsigned char sensorGroupNo; + unsigned char stype; // 1: 1:閬ヤ俊 2:閬ユ祴 + unsigned char itemNo; }; extern std::vector g_iec_points; @@ -44,10 +44,10 @@ inline void BindValue(MYSQL_BIND& bind, const char* value, unsigned long& len); bool InitDatabase(int argc, char **argv, const char* host, const char* username, const char* password, const char* database); bool UninitDatabase(); /* -返回值: -1: 正确 -0: 没有更多数据 --1: 出错 +杩斿洖鍊硷細 +1: 姝g‘ +0: 娌℃湁鏇村鏁版嵁 +-1: 鍑洪敊 */ int GetAIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCurTime, float* pfValue, unsigned int *iaddr); diff --git a/Profile_Hash.cpp b/Profile_Hash.cpp index 12310f2..31ec656 100644 --- a/Profile_Hash.cpp +++ b/Profile_Hash.cpp @@ -2,7 +2,7 @@ * * Copyright (C) 1999-2001 SCADA Technology Control Co., Ltd. All rights reserved. * - * 配置文件处理与哈希索引处理的有关的头文件 + * 閰嶇疆鏂囦欢澶勭悊涓庡搱甯岀储寮曞鐞嗙殑鏈夊叧鐨勫ご鏂囦欢 * * m.j.y 2001/12/07 * @@ -24,7 +24,7 @@ * no message * * Revision 1.5 2003/07/14 02:22:38 scada - * 使用def文件导出函数,而不是使用SCADA_API. + * 浣跨敤def鏂囦欢瀵煎嚭鍑芥暟,鑰屼笉鏄娇鐢⊿CADA_API. * * Revision 1.4 2003/01/02 03:14:50 scada * trim substitution line @@ -39,7 +39,7 @@ * temporarily import * * Revision 1.21 2002/06/03 10:06:27 mhorse - * 更改了AddNode函数 + * 鏇存敼浜咥ddNode鍑芥暟 * * Revision 1.20 2002/03/20 03:40:21 harold * no message @@ -66,10 +66,10 @@ * modify2002-01-22-16:46 * * Revision 1.14 2002/01/21 06:15:49 harold - * 修改了函数返回值及参数 + * 淇敼浜嗗嚱鏁拌繑鍥炲煎強鍙傛暟 * * Revision 1.13 2002/01/21 05:55:25 mhorse - * 修改了函数返回值及参数 + * 淇敼浜嗗嚱鏁拌繑鍥炲煎強鍙傛暟 * * Revision 1.11 2002/01/18 12:57:15 harold * revise errno @@ -85,10 +85,10 @@ * * * Revision 1.2 2001/12/19 02:19:22 mhorse - * 第2次修改 + * 绗2娆′慨鏀 * * Revision 1.1.1.1 2001/12/18 06:42:11 mhorse - * 马健莹第一次把配置文件读写库模块加入CVS(2001/12/18) + * 椹仴鑾圭涓娆℃妸閰嶇疆鏂囦欢璇诲啓搴撴ā鍧楀姞鍏VS(2001/12/18) * * ******************************************************************************/ @@ -116,24 +116,24 @@ #include "common.h" #include "basefunc.h" -//定义句柄记录数组 +//瀹氫箟鍙ユ焺璁板綍鏁扮粍 static SProfileHanleInfo g_pHandleIndex[MAX_PROFILEHANDLE_NUM]; -//句柄记录数组是否经过初始化 PGCTRUE-已经被初始化 +//鍙ユ焺璁板綍鏁扮粍鏄惁缁忚繃鍒濆鍖 PGCTRUE-宸茬粡琚垵濮嬪寲 static PGCBOOL g_bHandleInit = PGCFALSE; -//定义行注释符 +//瀹氫箟琛屾敞閲婄 #define MARK_pgcchar_NUM 2 static pgcchar gs_szMarkpgcchar[MARK_pgcchar_NUM] = {';', '#'}; -//行结尾字符为\n,不包括\r +//琛岀粨灏惧瓧绗︿负\n,涓嶅寘鎷琝r //#define LINE_EXCLUDE_0A -// 函数名 : UpperCase -// 函数说明 : 将小写转为大写 -// 返回值说明 : pgcchar -- 转换后的字符 -// 参数说明 : cCh -- 源字符 +// 鍑芥暟鍚 : UpperCase +// 鍑芥暟璇存槑 : 灏嗗皬鍐欒浆涓哄ぇ鍐 +// 杩斿洖鍊艰鏄 : pgcchar -- 杞崲鍚庣殑瀛楃 +// 鍙傛暟璇存槑 : cCh -- 婧愬瓧绗 pgcchar* UpperCase(pgcchar *szSource) { pgcchar* pcTemp = szSource, *pcFirst = szSource; @@ -153,32 +153,32 @@ pgcchar* UpperCase(pgcchar *szSource) /* -* 哈希函数 +* 鍝堝笇鍑芥暟 */ -// 给出关键字, 求同义词序号 +// 缁欏嚭鍏抽敭瀛, 姹傚悓涔夎瘝搴忓彿 static u32 fnhash_index_of(const void * pKey, u32 hash_size); -// 求关键字 +// 姹傚叧閿瓧 static void * fnhash_key_of(const SItemInCache * pindex); -// 比较关键字 +// 姣旇緝鍏抽敭瀛 static int fnhash_compare(const void * pKey1, const void * pKey2); /* -* 根据已知的历史数据库索引数组, 为其建立一个哈希表. +* 鏍规嵁宸茬煡鐨勫巻鍙叉暟鎹簱绱㈠紩鏁扮粍, 涓哄叾寤虹珛涓涓搱甯岃〃. * -* 参数 -* pindex -- 索引数组的指针 -* count -- pindex索引数组中索引的个数, pindex[0] -- pindex[count - 1]为 -* 索引 -* pphash_of_index -- 将pindex所指向的数组哈希化, 这样, 在随后的索引搜索 -* 时, 使用该哈希索引. +* 鍙傛暟 +* pindex -- 绱㈠紩鏁扮粍鐨勬寚閽 +* count -- pindex绱㈠紩鏁扮粍涓储寮曠殑涓暟, pindex[0] -- pindex[count - 1]涓 +* 绱㈠紩 +* pphash_of_index -- 灏唒index鎵鎸囧悜鐨勬暟缁勫搱甯屽寲, 杩欐牱, 鍦ㄩ殢鍚庣殑绱㈠紩鎼滅储 +* 鏃, 浣跨敤璇ュ搱甯岀储寮. * -* 返回值 -* SUCCESS -- 成功 -* 其它 -- 失败代码 +* 杩斿洖鍊 +* SUCCESS -- 鎴愬姛 +* 鍏跺畠 -- 澶辫触浠g爜 * */ #define INDEX_HASH_TABLE_SIZE_FACTOR 20 @@ -212,17 +212,17 @@ pgc32 profile_build_hash_index ( SItemInCache * pindex, /* -* 在索引区中搜索 +* 鍦ㄧ储寮曞尯涓悳绱 * -* 参数 -* pindex_base -- 被哈希化的索引数组的指针 -* phash_of_index -- 索引数组的哈希表 -* szSecName -- 被查询的段名 -* szItemName - 被查询的项目名 +* 鍙傛暟 +* pindex_base -- 琚搱甯屽寲鐨勭储寮曟暟缁勭殑鎸囬拡 +* phash_of_index -- 绱㈠紩鏁扮粍鐨勫搱甯岃〃 +* szSecName -- 琚煡璇㈢殑娈靛悕 +* szItemName - 琚煡璇㈢殑椤圭洰鍚 * -* 返回值 -* 索引在索引数组中的序号 -- 成功的查找到指定的配置项目的索引 -* -1 -- 失败 +* 杩斿洖鍊 +* 绱㈠紩鍦ㄧ储寮曟暟缁勪腑鐨勫簭鍙 -- 鎴愬姛鐨勬煡鎵惧埌鎸囧畾鐨勯厤缃」鐩殑绱㈠紩 +* -1 -- 澶辫触 */ pgc32 profile_search_sequence ( SItemInCache **pindex_base, TChainHash *phash_of_index, @@ -234,7 +234,7 @@ pgc32 profile_search_sequence ( SItemInCache **pindex_base, memset(&index, 0, sizeof(SItemInCache)); if (szSecName != NULL) { - //以下执行大小写转换 + //浠ヤ笅鎵ц澶у皬鍐欒浆鎹 #ifdef OS_WINDOWS lstrcpyn((LPWSTR)index.szSecName, (LPCWSTR)szSecName, MAX_CHAR_LINE); // strupr(index.szSecName); @@ -264,9 +264,9 @@ pgc32 profile_search_sequence ( SItemInCache **pindex_base, /* -* 哈希函数 +* 鍝堝笇鍑芥暟 */ -// 给出关键字, 求同义词序号 +// 缁欏嚭鍏抽敭瀛, 姹傚悓涔夎瘝搴忓彿 static u32 fnhash_index_of(const void * pKey, u32 hash_size) { long index = 0; @@ -276,7 +276,7 @@ static u32 fnhash_index_of(const void * pKey, u32 hash_size) SItemInCache * pindex = (SItemInCache *)pKey, sindex; memcpy(&sindex, pindex, sizeof(SItemInCache)); - //以下执行大小写转换 + //浠ヤ笅鎵ц澶у皬鍐欒浆鎹 #ifndef OS_WINDOWS strupr(sindex.szSecName); strupr(sindex.szItemName); @@ -285,7 +285,7 @@ static u32 fnhash_index_of(const void * pKey, u32 hash_size) UpperCase(sindex.szItemName); #endif - //哈希转换 + //鍝堝笇杞崲 pbString = (u_char*)sindex.szSecName; for (i = 0; i < MAX_CHAR_LINE; i++) { @@ -307,7 +307,7 @@ static u32 fnhash_index_of(const void * pKey, u32 hash_size) -// 求关键字 +// 姹傚叧閿瓧 static void * fnhash_key_of(const SItemInCache * pindex) { return (void *)(pindex); @@ -315,7 +315,7 @@ static void * fnhash_key_of(const SItemInCache * pindex) -// 比较关键字 +// 姣旇緝鍏抽敭瀛 static int fnhash_compare(const void * pKey1, const void * pKey2) { SItemInCache * pindex1 = (SItemInCache *)pKey1; @@ -362,7 +362,7 @@ static int fnhash_compare(const void * pKey1, const void * pKey2) -//判断某行是否被注释 +//鍒ゆ柇鏌愯鏄惁琚敞閲 PGCBOOL LineIsMark(pgcchar *szLine) { for (pgc32 i = 0; i < MARK_pgcchar_NUM; i++) @@ -372,7 +372,7 @@ PGCBOOL LineIsMark(pgcchar *szLine) } -//寻找段尾 +//瀵绘壘娈靛熬 pgcchar* FindSecTail(pgcchar *szString) { pgcchar *szStart = NULL, *szTemp = NULL; @@ -405,7 +405,7 @@ pgcchar* FindSecTail(pgcchar *szString) } -//提取段名 +//鎻愬彇娈靛悕 PGCBOOL DigSecName(const pgcchar *szString, pgcchar *szRevBuffer, pgc32 iBufferLength) { pgcchar *szStart = NULL, *szTemp = NULL; @@ -447,7 +447,7 @@ PGCBOOL DigSecName(const pgcchar *szString, pgcchar *szRevBuffer, pgc32 iBufferL } -//提取项目名及项目值 +//鎻愬彇椤圭洰鍚嶅強椤圭洰鍊 PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemVal, pgc32 iBufferLength) { pgcchar *pcBeval = NULL, *pcTemp = NULL, szTemp[MAX_CHAR_LINE]; @@ -457,7 +457,7 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV if ((pcBeval = strchr(szString, '=')) == NULL) return PGCFALSE; - //获取项目名 + //鑾峰彇椤圭洰鍚 pcTemp = szString; while ((pcTemp < pcBeval) && (iCount < (MAX_CHAR_LINE - 1))) { @@ -467,7 +467,7 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV } szTemp[iCount] = '\0'; - //删除前面多余空格 + //鍒犻櫎鍓嶉潰澶氫綑绌烘牸 for ( i = 0; i < MAX_CHAR_LINE; i++) { if (szTemp[i] != ' ') @@ -480,7 +480,7 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV }// end if }// end for - //删除后面多余空格 + //鍒犻櫎鍚庨潰澶氫綑绌烘牸 for (i = iCount - 1; i >= 0; i--) { if (szTemp[i] != ' ') @@ -494,14 +494,14 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV #endif*/ strcpy(szItemName, szTemp); - //获取项目值 + //鑾峰彇椤圭洰鍊 memset(szTemp, 0, MAX_CHAR_LINE); #ifdef OS_WINDOWS lstrcpyn((LPWSTR)szTemp, (LPCWSTR)pcBeval + 1, MAX_CHAR_LINE); #else strncpy(szTemp ,pcBeval + 1, MAX_CHAR_LINE - 1); #endif - //删除前面多余空格 + //鍒犻櫎鍓嶉潰澶氫綑绌烘牸 for (i = 0; i < MAX_CHAR_LINE; i++) { if (szTemp[i] != ' ') @@ -514,7 +514,7 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV }// end if }// end for - //删除后面多余空格 + //鍒犻櫎鍚庨潰澶氫綑绌烘牸 for ( i = (pgc32)strlen(szTemp) - 1 ; i >= 0; i--) { if (szTemp[i] != ' ') @@ -527,13 +527,13 @@ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemV } -// 函数名 : InsertNode -// 函数说明 : 在指定的段添加新项目 -// 返回值说明 : PGCBOOL -- -// 参数说明 : psHead -- -// 参数说明 : iPos -- -// 参数说明 : psCacheEntry -- -// 参数说明 : iSecPos -- +// 鍑芥暟鍚 : InsertNode +// 鍑芥暟璇存槑 : 鍦ㄦ寚瀹氱殑娈垫坊鍔犳柊椤圭洰 +// 杩斿洖鍊艰鏄 : PGCBOOL -- +// 鍙傛暟璇存槑 : psHead -- +// 鍙傛暟璇存槑 : iPos -- +// 鍙傛暟璇存槑 : psCacheEntry -- +// 鍙傛暟璇存槑 : iSecPos -- PGCBOOL InsertNode(SItemSequence * &psHead, pgc32 iPos, SItemInCache *psCacheEntry, pgc32 iSecPos) { SItemSequence *psTemp = NULL, *psNewNode = NULL, *psPrior = NULL; @@ -568,12 +568,12 @@ PGCBOOL InsertNode(SItemSequence * &psHead, pgc32 iPos, SItemInCache *psCacheEnt -// 函数名 : DisableSec -// 函数说明 : 使指定的段及其下属的各个项目无效 -// 返回值说明 : PGCBOOL -- -// 参数说明 : psHead -- -// 参数说明 : iSecPos -- -// 参数说明 : psCacheEntry -- +// 鍑芥暟鍚 : DisableSec +// 鍑芥暟璇存槑 : 浣挎寚瀹氱殑娈靛強鍏朵笅灞炵殑鍚勪釜椤圭洰鏃犳晥 +// 杩斿洖鍊艰鏄 : PGCBOOL -- +// 鍙傛暟璇存槑 : psHead -- +// 鍙傛暟璇存槑 : iSecPos -- +// 鍙傛暟璇存槑 : psCacheEntry -- PGCBOOL DisableSec(SItemSequence * &psHead, pgc32 iSecPos, SItemInCache *psCacheEntry) { SItemSequence *psTemp = NULL; @@ -602,7 +602,7 @@ PGCBOOL DisableSec(SItemSequence * &psHead, pgc32 iSecPos, SItemInCache *psCache -//添加一个节点到顺序链表尾部 +//娣诲姞涓涓妭鐐瑰埌椤哄簭閾捐〃灏鹃儴 PGCBOOL AddNode(SItemSequence * &psHead, SItemSequence * &pCurSeq, pgc32 iPos) { SItemSequence *psNewNode = NULL; @@ -647,7 +647,7 @@ void ReleaseProfileCache(HPROFILE hProfile) delete pHashTable; pSequence = g_pHandleIndex[hProfile].pSequence; - //删除该链表的所有节点 + //鍒犻櫎璇ラ摼琛ㄧ殑鎵鏈夎妭鐐 while (pSequence != NULL) { psPrior = pSequence; @@ -658,7 +658,7 @@ void ReleaseProfileCache(HPROFILE hProfile) iCurItemCount = g_pHandleIndex[hProfile].CurUseItems; psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry; - //首先释放注释节点 + //棣栧厛閲婃斁娉ㄩ噴鑺傜偣 if (psCacheEntry != NULL) { for (pgc32 i = 0; i < iCurItemCount; i++) @@ -679,7 +679,7 @@ void ReleaseProfileCache(HPROFILE hProfile) } -//调整缓冲区大小 +//璋冩暣缂撳啿鍖哄ぇ灏 pgcu32 AdjustCache(HPROFILE hCacher, pgc32 iNewItem) { pgc32 iOldSize = g_pHandleIndex[hCacher].CurItemCount, iNewSize = 0; @@ -699,7 +699,7 @@ pgcu32 AdjustCache(HPROFILE hCacher, pgc32 iNewItem) g_pHandleIndex[hCacher].CurItemCount = iNewSize; g_pHandleIndex[hCacher].pCacheEntry = pCacheEntry; - //分离哈希表的所有数据项 + //鍒嗙鍝堝笇琛ㄧ殑鎵鏈夋暟鎹」 g_pHandleIndex[hCacher].pHashTable->detachItems(); for (pgc32 i = 0; i < iOldUse; i++) g_pHandleIndex[hCacher].pHashTable->insertItem(pCacheEntry + i); @@ -710,11 +710,11 @@ pgcu32 AdjustCache(HPROFILE hCacher, pgc32 iNewItem) -// 函数名 : get_file_lastMTime -// 函数说明 : 获取文件上一次被修改的时间 -// 返回值说明 : void -- -// 参数说明 : pszfname -- -// 参数说明 : pt -- +// 鍑芥暟鍚 : get_file_lastMTime +// 鍑芥暟璇存槑 : 鑾峰彇鏂囦欢涓婁竴娆¤淇敼鐨勬椂闂 +// 杩斿洖鍊艰鏄 : void -- +// 鍙傛暟璇存槑 : pszfname -- +// 鍙傛暟璇存槑 : pt -- pgc32 get_file_lastMTime(char * pszfname, timeval *pt) { int ret = 0; @@ -734,7 +734,7 @@ pgc32 get_file_lastMTime(char * pszfname, timeval *pt) -//将缓冲的数据重新写成文件 +//灏嗙紦鍐茬殑鏁版嵁閲嶆柊鍐欐垚鏂囦欢 pgc32 ReWriteProfile(HPROFILE hProfile) { pgc32 iSize = 0; @@ -756,11 +756,11 @@ pgc32 ReWriteProfile(HPROFILE hProfile) psTemp = psCacheEntry + psSeq->iPos; if (psTemp->valid) { - //有注释吗? + //鏈夋敞閲婂悧锛 psMemo = psTemp->memo; while (psMemo != NULL) { - //写一行注释 + //鍐欎竴琛屾敞閲 pcTemp = psMemo->szMemo; while (*pcTemp != '\0') { @@ -779,7 +779,7 @@ pgc32 ReWriteProfile(HPROFILE hProfile) psMemo = psMemo->NextNode; } - //是段吗? + //鏄鍚楋紵 if (psTemp->bIsSecName) { if (bSecExist) @@ -847,7 +847,7 @@ pgc32 ReWriteProfile(HPROFILE hProfile) psSeq = psSeq->NextNode; }// end while - //2002/03/05 杨小波++++++++++++++++++++++++++++++++++++++++++++ + //2002/03/05 鏉ㄥ皬娉++++++++++++++++++++++++++++++++++++++++++++ #if 0 pgcu32 numwritten = (pgcu32)pcFileBuffer - (pgcu32)pcHead ; #endif @@ -856,14 +856,14 @@ pgc32 ReWriteProfile(HPROFILE hProfile) #ifdef OS_WINDOWS - //windows下打开文件 + //windows涓嬫墦寮鏂囦欢 /*if ((stream = fopen(g_pHandleIndex[hProfile].szPathName, "w+b")) == NULL) { free(pcHead); return ERROR_FOPEN; }*/ #else - //unix下打开文件 + //unix涓嬫墦寮鏂囦欢 /*PGCBOOL bOpenOK = PGCFALSE; do { @@ -886,11 +886,11 @@ pgc32 ReWriteProfile(HPROFILE hProfile) #endif fseek(stream, 0, SEEK_SET); - //函数fwrite在写数据到文件时,如遇字符NULL,会产生错误,从而使文件无法定位结尾 + //鍑芥暟fwrite鍦ㄥ啓鏁版嵁鍒版枃浠舵椂锛屽閬囧瓧绗ULL锛屼細浜х敓閿欒锛屼粠鑰屼娇鏂囦欢鏃犳硶瀹氫綅缁撳熬 pgc32 numwritted = (pgc32)fwrite(pcHead, sizeof( pgcchar ), numwritten , stream ); free(pcHead); fclose(stream); - //记录下修改文件的时间 + //璁板綍涓嬩慨鏀规枃浠剁殑鏃堕棿 get_file_lastMTime(g_pHandleIndex[hProfile].szPathName, &g_pHandleIndex[hProfile].tLastModify); if (numwritted != numwritten) { @@ -912,10 +912,10 @@ int timeval_compare(timeval * ptv1, timeval * ptv2) } -// 函数名 : ReCreateCache -// 函数说明 : 当有当前进程以外的进程修改配置文件后,需要调用此函数重建配置文件缓冲 -// 返回值说明 : void -- -// 参数说明 : hProfile -- +// 鍑芥暟鍚 : ReCreateCache +// 鍑芥暟璇存槑 : 褰撴湁褰撳墠杩涚▼浠ュ鐨勮繘绋嬩慨鏀归厤缃枃浠跺悗锛岄渶瑕佽皟鐢ㄦ鍑芥暟閲嶅缓閰嶇疆鏂囦欢缂撳啿 +// 杩斿洖鍊艰鏄 : void -- +// 鍙傛暟璇存槑 : hProfile -- void ReCreateCache(HPROFILE hProfile) { timeval tLastModify, *ptRecModify = NULL; @@ -949,12 +949,12 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) long lFileLength = 0; SItemInCache *psCacheEntry = NULL, *psCacheTep = NULL; pgc32 iCount = 0, iPos = 0, iCurSec = 0, iCurItem = 0, iCurItemCount = 0; - //iCurLineType:当前行类型 0-不能确定 ;1-注释行; 2-段名 ;3-项目内容,4-空行 + //iCurLineType:褰撳墠琛岀被鍨 0锛嶄笉鑳界‘瀹 锛1锛嶆敞閲婅锛 2锛嶆鍚 锛3锛嶉」鐩唴瀹癸紝4锛嶇┖琛 pgc32 iCurLineType = 0, iLines = 0, i = 0; pgcchar szProfileName[MAX_PATH_NUM]; memset(szProfileName, 0, MAX_PATH_NUM); - //保存文件全路径名 + //淇濆瓨鏂囦欢鍏ㄨ矾寰勫悕 #ifdef OS_WINDOWS lstrcpyn((LPWSTR)szProfileName, (LPWSTR)g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM); #else @@ -963,13 +963,13 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) memset(&g_pHandleIndex[hProfile], 0, sizeof(SProfileHanleInfo)); //#ifdef OS_WINDOWS - //windows下打开文件 + //windows涓嬫墦寮鏂囦欢 if ((fstream = fopen(szProfileName, "r+b")) == NULL) { return ERROR_FOPEN; } /*#else - //unix下打开文件 + //unix涓嬫墦寮鏂囦欢 PGCBOOL bOpenOK = PGCFALSE; do { @@ -992,7 +992,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) return 0; } - //获取文件长度 + //鑾峰彇鏂囦欢闀垮害 lFileLength = ftell(fstream); pcTemp = new pgcchar[lFileLength + 1]; if (pcTemp == NULL) @@ -1006,7 +1006,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) fclose(fstream); return 0; } - //将文件读入缓冲 + //灏嗘枃浠惰鍏ョ紦鍐 if ((iCount = (pgc32)fread(pcTemp, sizeof( pgcchar ), lFileLength, fstream)) != lFileLength) { fclose(fstream); @@ -1015,7 +1015,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) - //格式化流(去除每一行前面的多余空格) + //鏍煎紡鍖栨祦锛堝幓闄ゆ瘡涓琛屽墠闈㈢殑澶氫綑绌烘牸锛 pcStart = pcTemp; pcEnd = pcTemp + iCount; while ((pcStart != NULL) && (pcStart < pcEnd)) @@ -1039,7 +1039,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) - //格式化流(去除每一行结束标志"\r\n"中的"\r"标志,仅保留"\n"标志) + //鏍煎紡鍖栨祦锛堝幓闄ゆ瘡涓琛岀粨鏉熸爣蹇"\r\n"涓殑"\r"鏍囧織,浠呬繚鐣"\n"鏍囧織锛 pcStart = pcTemp; while ((pcStart != NULL) && (pcStart < pcEnd)) { @@ -1054,7 +1054,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) - //统计行数 + //缁熻琛屾暟 pcStart = pcTemp; while ((pcStart != NULL) && (pcStart < pcEnd)) { @@ -1067,7 +1067,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) iLines++; g_pHandleIndex[hProfile].CurLines = iLines; - //重建文件缓冲 + //閲嶅缓鏂囦欢缂撳啿 pcFileBuffer = new pgcchar[iCount + 1]; memset(pcFileBuffer, 0, iCount + 1); for ( i = 0; i < iCount; i++) @@ -1082,7 +1082,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) - //分配配置项缓冲 + //鍒嗛厤閰嶇疆椤圭紦鍐 psCacheEntry = (SItemInCache *)malloc(INITCACHE_ITEM_NUM * sizeof(SItemInCache)); if (psCacheEntry == NULL) { @@ -1100,24 +1100,24 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) g_pHandleIndex[hProfile].CurItemCount = iCurItemCount; g_pHandleIndex[hProfile].pCacheEntry = psCacheEntry; - //提取各段 + //鎻愬彇鍚勬 pcStart = pcFileBuffer; pcEnd = NULL; while ((pcStart != NULL) && (pcStart < (pcFileBuffer + iPos))) { - //寻找段尾 + //瀵绘壘娈靛熬 pcEnd = FindSecTail(pcStart + 1); if (pcEnd != NULL) *(pcEnd - 1) = '\0'; - //检查行类型 + //妫鏌ヨ绫诲瀷 while (pcStart != NULL) { - //确定下一行的位置 + //纭畾涓嬩竴琛岀殑浣嶇疆 if ((pcNextLine = strchr(pcStart, '\n')) != NULL) { - //如果为空行 + //濡傛灉涓虹┖琛 if (pcStart == pcNextLine) iCurLineType = 4; *pcNextLine = '\0'; @@ -1126,7 +1126,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) if (iCurLineType != 4) { - //检查当前行是否为注释行 + //妫鏌ュ綋鍓嶈鏄惁涓烘敞閲婅 if (LineIsMark(pcStart)) { iCurLineType = 1; @@ -1135,7 +1135,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) { pcTemp = strchr(pcStart, '['); pcTemp1 = strchr(pcStart, ']'); - //如果当前行是段名,则提取段名 + //濡傛灉褰撳墠琛屾槸娈靛悕锛屽垯鎻愬彇娈靛悕 if ( pcTemp && pcTemp1 && (pcTemp1 > pcTemp)) { DigSecName(pcStart, szSecName, MAX_CHAR_LINE); @@ -1144,7 +1144,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) else { pcTemp = strchr(pcStart, '='); - //如果当前行是项目记录,则提取项目名及项目值 + //濡傛灉褰撳墠琛屾槸椤圭洰璁板綍锛屽垯鎻愬彇椤圭洰鍚嶅強椤圭洰鍊 if (pcTemp != NULL) { DigItemContent(pcStart, CurItemName, CurItemVal, MAX_CHAR_LINE); @@ -1158,10 +1158,10 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) switch (iCurLineType) { - //如果是注释行,或空行 + //濡傛灉鏄敞閲婅,鎴栫┖琛 case 1: case 4: - //将注释行添加入节点 + //灏嗘敞閲婅娣诲姞鍏ヨ妭鐐 psMemoTep = psMemo; if (psMemoTep != NULL) { @@ -1216,7 +1216,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) break; - //如果是段名 + //濡傛灉鏄鍚 case 2: psTemp = &psCacheEntry[iCurItem]; strcpy(psTemp->szSecName, szSecName); @@ -1229,7 +1229,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) iCurItem ++; psMemo = NULL; break; - //如果是项目赋值 + //濡傛灉鏄」鐩祴鍊 case 3: if (bSecNameExist) { @@ -1251,7 +1251,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) iCurLineType = 0; - //如果原先的缓冲区太小,则递增缓冲区 + //濡傛灉鍘熷厛鐨勭紦鍐插尯澶皬锛屽垯閫掑缂撳啿鍖 if (iCurItem >= iCurItemCount) { psCacheTep = (SItemInCache*)malloc((iCurItemCount + RESIZE_ITEM_NUM) * sizeof(SItemInCache)); @@ -1280,7 +1280,7 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) pgc32 iRev = -1; - //创建哈希表 + //鍒涘缓鍝堝笇琛 iRev = profile_build_hash_index(psCacheEntry, iCurItem , &phash_table); if (iRev != SUCCESS) { @@ -1295,13 +1295,13 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) fstream = g_pHandleIndex[hProfile].fstream; g_pHandleIndex[hProfile].fstream = 0; fclose(fstream); - //保存文件全路径名 + //淇濆瓨鏂囦欢鍏ㄨ矾寰勫悕 #ifdef OS_WINDOWS lstrcpyn((LPWSTR)g_pHandleIndex[hProfile].szPathName, (LPCWSTR)szProfileName, MAX_PATH_NUM); #else strncpy(g_pHandleIndex[hProfile].szPathName, szProfileName, MAX_PATH_NUM - 1); #endif - //记录下修改文件的时间 + //璁板綍涓嬩慨鏀规枃浠剁殑鏃堕棿 get_file_lastMTime(szProfileName, &g_pHandleIndex[hProfile].tLastModify); return SUCCESS; @@ -1311,24 +1311,24 @@ pgc32 ProcessCreateCache(HPROFILE hProfile) -//以下为应用接口 +//浠ヤ笅涓哄簲鐢ㄦ帴鍙 //----------------------------------------------------------------------------------------- -// 函数名 : create_profile_cache -// 函数说明 : 建立配置文件缓冲 -// 返回值说明 : HPROFILE -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 - -// 返回值 说明 -// SUCCESS 成功建立配置文件缓冲 -// ERROR_CONF_NOHANDLE 建立配置文件缓冲失败,原因:没有空闲的配置文件缓冲句柄分配给当前配置文件缓冲 -// ERROR_FOPEN 打开文件失败 -// ERROR_FREAD 读文件失败 -// ERROR_CONF_CREATEHASH 建立哈希表失败 -// ERROR_MEMORY_ALLOC 申请分配指定大小的内存失败 -// ERROR_CONF_NULL_HANDEPTR 输入了一个空的句柄指针作参数 - -// 参数说明 : szProfileName --[in] 配置文件全路径名 -// 参数说明 : phfile --[out]如果函数执行成功,则返回一个句柄 +// 鍑芥暟鍚 : create_profile_cache +// 鍑芥暟璇存槑 : 寤虹珛閰嶇疆鏂囦欢缂撳啿 +// 杩斿洖鍊艰鏄 : HPROFILE -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 + +// 杩斿洖鍊 璇存槑 +// SUCCESS 鎴愬姛寤虹珛閰嶇疆鏂囦欢缂撳啿 +// ERROR_CONF_NOHANDLE 寤虹珛閰嶇疆鏂囦欢缂撳啿澶辫触锛屽師鍥狅細娌℃湁绌洪棽鐨勯厤缃枃浠剁紦鍐插彞鏌勫垎閰嶇粰褰撳墠閰嶇疆鏂囦欢缂撳啿 +// ERROR_FOPEN 鎵撳紑鏂囦欢澶辫触 +// ERROR_FREAD 璇绘枃浠跺け璐 +// ERROR_CONF_CREATEHASH 寤虹珛鍝堝笇琛ㄥけ璐 +// ERROR_MEMORY_ALLOC 鐢宠鍒嗛厤鎸囧畾澶у皬鐨勫唴瀛樺け璐 +// ERROR_CONF_NULL_HANDEPTR 杈撳叆浜嗕竴涓┖鐨勫彞鏌勬寚閽堜綔鍙傛暟 + +// 鍙傛暟璇存槑 : szProfileName --[in] 閰嶇疆鏂囦欢鍏ㄨ矾寰勫悕 +// 鍙傛暟璇存槑 : phfile --[out]濡傛灉鍑芥暟鎵ц鎴愬姛锛屽垯杩斿洖涓涓彞鏌 int create_profile_cache(pgcchar *szProfileName, int *phfile) { HPROFILE hCurCacher = 0; @@ -1339,14 +1339,14 @@ int create_profile_cache(pgcchar *szProfileName, int *phfile) if (phfile == NULL) return ERROR_CONF_NULL_HANDEPTR; - //检查句柄数组是否经过初始化 + //妫鏌ュ彞鏌勬暟缁勬槸鍚︾粡杩囧垵濮嬪寲 if (!g_bHandleInit) { memset(g_pHandleIndex, 0, MAX_PROFILEHANDLE_NUM * sizeof(SProfileHanleInfo)); g_bHandleInit = PGCTRUE; } - //为当前缓冲寻找一个空闲句柄 + //涓哄綋鍓嶇紦鍐插鎵句竴涓┖闂插彞鏌 for (int i = 1; i < MAX_PROFILEHANDLE_NUM; i++) if (g_pHandleIndex[i].pCacheEntry == NULL) { @@ -1359,7 +1359,7 @@ int create_profile_cache(pgcchar *szProfileName, int *phfile) return ERROR_CONF_NOHANDLE; } - //保存文件全路径名 + //淇濆瓨鏂囦欢鍏ㄨ矾寰勫悕 #ifdef OS_WINDOWS lstrcpyn((LPWSTR)g_pHandleIndex[hCurCacher].szPathName, (LPWSTR)szProfileName, MAX_PATH_NUM); #else @@ -1375,16 +1375,16 @@ int create_profile_cache(pgcchar *szProfileName, int *phfile) -// 函数名 : CloseProfileHandle -// 函数说明 : 关闭配置文件缓冲 -// 函数逻辑 : 根据在该配置文件缓冲句柄中记录的信息,释放资源 -// 返回值说明 : int -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 +// 鍑芥暟鍚 : CloseProfileHandle +// 鍑芥暟璇存槑 : 鍏抽棴閰嶇疆鏂囦欢缂撳啿 +// 鍑芥暟閫昏緫 : 鏍规嵁鍦ㄨ閰嶇疆鏂囦欢缂撳啿鍙ユ焺涓褰曠殑淇℃伅锛岄噴鏀捐祫婧 +// 杩斿洖鍊艰鏄 : int -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 -// 返回值 说明 -// SUCCESS 成功关闭配置文件缓冲 -// ERROR_CONF_INVALIDHANDLE 输入了非法的配置文件缓冲句柄 +// 杩斿洖鍊 璇存槑 +// SUCCESS 鎴愬姛鍏抽棴閰嶇疆鏂囦欢缂撳啿 +// ERROR_CONF_INVALIDHANDLE 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺 -// 参数说明 : hProfile --[in]配置文件缓冲句柄 +// 鍙傛暟璇存槑 : hProfile --[in]閰嶇疆鏂囦欢缂撳啿鍙ユ焺 int close_profile_handle(HPROFILE hProfile) { if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM)) @@ -1398,44 +1398,44 @@ int close_profile_handle(HPROFILE hProfile) } -// 函数名 : GetPgcProfileString -// 函数说明 : 根据段名,项目名获取项目值 -// 函数逻辑 : 调用者通过参数lpAppName, lpKeyName传入要取出的项目值所在的段名和项目名, -// 如果指定的段及项目名存在,函数将取出的项目值拷贝到以lpReturnedString为首地址的 -// 目标缓冲中(目标缓冲的长度通过指针pdwSize传入),随后函数会将取出的项目值 -// 的长度(包括'\0'字符)写入地址指针pdwSize中; 如果指定的段及项目名不存在,则执行缺省拷贝,即将 -// lpDefault 所指向的字符串拷贝到目标缓冲区lpReturnedString中; 如果目标缓冲区的首地址 -// lpReturnedString为空或传入的目标缓冲的长度小于1,那么函数不会将任何字符串拷贝到 -// 目标缓冲,但是仍会将取出的项目值的长度(包括'\0'字符)写入到指针pdwSize所指向的地址中。 +// 鍑芥暟鍚 : GetPgcProfileString +// 鍑芥暟璇存槑 : 鏍规嵁娈靛悕锛岄」鐩悕鑾峰彇椤圭洰鍊 +// 鍑芥暟閫昏緫 : 璋冪敤鑰呴氳繃鍙傛暟lpAppName锛 lpKeyName浼犲叆瑕佸彇鍑虹殑椤圭洰鍊兼墍鍦ㄧ殑娈靛悕鍜岄」鐩悕锛 +// 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鍙栧嚭鐨勯」鐩兼嫹璐濆埌浠pReturnedString涓洪鍦板潃鐨 +// 鐩爣缂撳啿涓(鐩爣缂撳啿鐨勯暱搴﹂氳繃鎸囬拡pdwSize浼犲叆)锛岄殢鍚庡嚱鏁颁細灏嗗彇鍑虹殑椤圭洰鍊 +// 鐨勯暱搴(鍖呮嫭'\0'瀛楃)鍐欏叆鍦板潃鎸囬拡pdwSize涓紱 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕涓嶅瓨鍦紝鍒欐墽琛岀己鐪佹嫹璐濓紝鍗冲皢 +// lpDefault 鎵鎸囧悜鐨勫瓧绗︿覆鎷疯礉鍒扮洰鏍囩紦鍐插尯lpReturnedString涓; 濡傛灉鐩爣缂撳啿鍖虹殑棣栧湴鍧 +// lpReturnedString涓虹┖鎴栦紶鍏ョ殑鐩爣缂撳啿鐨勯暱搴﹀皬浜1锛岄偅涔堝嚱鏁颁笉浼氬皢浠讳綍瀛楃涓叉嫹璐濆埌 +// 鐩爣缂撳啿锛屼絾鏄粛浼氬皢鍙栧嚭鐨勯」鐩肩殑闀垮害(鍖呮嫭'\0'瀛楃)鍐欏叆鍒版寚閽坧dwSize鎵鎸囧悜鐨勫湴鍧涓 // // -// 返回值说明 : int -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 +// 杩斿洖鍊艰鏄 : int -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 -// 返回值 说明 -// SUCCESS 如果指定的段及项目名存在,函数将取出的项目值拷贝到以lpReturnedString为首地址的 -// 目标缓冲中,如果取出的项目值的长度小于或等于目标缓冲区的长度,那么整个项目值将 -// 被完全拷贝到目标缓冲中,此时函数返回SUCCESS +// 杩斿洖鍊 璇存槑 +// SUCCESS 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鍙栧嚭鐨勯」鐩兼嫹璐濆埌浠pReturnedString涓洪鍦板潃鐨 +// 鐩爣缂撳啿涓紝濡傛灉鍙栧嚭鐨勯」鐩肩殑闀垮害灏忎簬鎴栫瓑浜庣洰鏍囩紦鍐插尯鐨勯暱搴︼紝閭d箞鏁翠釜椤圭洰鍊煎皢 +// 琚畬鍏ㄦ嫹璐濆埌鐩爣缂撳啿涓紝姝ゆ椂鍑芥暟杩斿洖SUCCESS -// ERROR_CONF_REVBUFFER 如果指定的段及项目名存在,但是取出的项目值的长度大于目标缓冲 -// 区的长度, 那么取出的项目值将被截断为和目标缓冲区一样的大小,然后再拷贝到目标缓 -// 区,此时函数返回ERROR_CONF_REVBUFFER +// ERROR_CONF_REVBUFFER 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪,浣嗘槸鍙栧嚭鐨勯」鐩肩殑闀垮害澶т簬鐩爣缂撳啿 +// 鍖虹殑闀垮害, 閭d箞鍙栧嚭鐨勯」鐩煎皢琚埅鏂负鍜岀洰鏍囩紦鍐插尯涓鏍风殑澶у皬锛岀劧鍚庡啀鎷疯礉鍒扮洰鏍囩紦 +// 鍖猴紝姝ゆ椂鍑芥暟杩斿洖ERROR_CONF_REVBUFFER // -// SUCCESS_CONF_DEFCOPY 如果指定的段及项目名不存在,并且lpDefault指针不为空,则函数将lpDefault -// 所指向的字符串拷贝到目标缓冲区lpReturnedString,如果lpDefault指向的字符串 -// 的长度大于目标缓冲区的长度,那么只从lpDefault开始拷贝 [目标缓冲区的长度 - 1] -// 个字符到缓冲中。 +// SUCCESS_CONF_DEFCOPY 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕涓嶅瓨鍦紝骞朵笖lpDefault鎸囬拡涓嶄负绌猴紝鍒欏嚱鏁板皢lpDefault +// 鎵鎸囧悜鐨勫瓧绗︿覆鎷疯礉鍒扮洰鏍囩紦鍐插尯lpReturnedString锛屽鏋渓pDefault鎸囧悜鐨勫瓧绗︿覆 +// 鐨勯暱搴﹀ぇ浜庣洰鏍囩紦鍐插尯鐨勯暱搴︼紝閭d箞鍙粠lpDefault寮濮嬫嫹璐 [鐩爣缂撳啿鍖虹殑闀垮害 锛 1] +// 涓瓧绗﹀埌缂撳啿涓 -// ERROR_CONF_INVALIDHANDLE 输入了非法的配置文件缓冲句柄 +// ERROR_CONF_INVALIDHANDLE 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺 -// ERROR_FAIL 函数执行失败,即未拷贝任何字符到目标缓冲区 +// ERROR_FAIL 鍑芥暟鎵ц澶辫触锛屽嵆鏈嫹璐濅换浣曞瓧绗﹀埌鐩爣缂撳啿鍖 -// 参数说明 : lpAppName --[in]段名 -// 参数说明 : lpKeyName --[in]项目名 -// 参数说明 : lpDefault --[in] 当获取指定的项目值失败时,将该缓冲区的字符串写入lpReturnedString目标缓冲 -// 参数说明 : lpReturnedString --[out] 目标缓冲区,用来存放取出的项目值 -// 参数说明 : pdwSize -- [in][out]指向缓冲区的长度的指针,同时在调用结束后,将取出的项目字符串的长度(包括'\0'字符)写入该地址 -// 参数说明 : hProfile --[in] 配置文件缓冲句柄 +// 鍙傛暟璇存槑 : lpAppName --[in]娈靛悕 +// 鍙傛暟璇存槑 : lpKeyName --[in]椤圭洰鍚 +// 鍙傛暟璇存槑 : lpDefault --[in] 褰撹幏鍙栨寚瀹氱殑椤圭洰鍊煎け璐ユ椂锛屽皢璇ョ紦鍐插尯鐨勫瓧绗︿覆鍐欏叆lpReturnedString鐩爣缂撳啿 +// 鍙傛暟璇存槑 : lpReturnedString --[out] 鐩爣缂撳啿鍖猴紝鐢ㄦ潵瀛樻斁鍙栧嚭鐨勯」鐩 +// 鍙傛暟璇存槑 : pdwSize -- [in][out]鎸囧悜缂撳啿鍖虹殑闀垮害鐨勬寚閽堬紝鍚屾椂鍦ㄨ皟鐢ㄧ粨鏉熷悗锛屽皢鍙栧嚭鐨勯」鐩瓧绗︿覆鐨勯暱搴(鍖呮嫭'\0'瀛楃)鍐欏叆璇ュ湴鍧 +// 鍙傛暟璇存槑 : hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺 int get_pgcprofile_string( const pgcchar * lpAppName, // points to section name const pgcchar * lpKeyName, // point to key name @@ -1448,7 +1448,7 @@ int get_pgcprofile_string( SItemInCache *psTemp = NULL; TChainHash *phash_table = NULL; pgcu32 dwBuffer = 0, dwCount = 0, dwNeed = 0; - //bRevBuffer - PGCTRUE表示接收缓冲区足够大 + //bRevBuffer - PGCTRUE琛ㄧず鎺ユ敹缂撳啿鍖鸿冻澶熷ぇ PGCBOOL bRevBuffer = PGCTRUE; if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM)) @@ -1483,7 +1483,7 @@ int get_pgcprofile_string( } else { - //执行缺省拷贝 + //鎵ц缂虹渷鎷疯礉 if ((lpDefault != NULL) && (pdwSize != NULL)) { dwBuffer = (pgcu32)strlen(lpDefault) + 1; @@ -1495,7 +1495,7 @@ int get_pgcprofile_string( } if ((dwBuffer > 0) && (lpReturnedString != NULL)) { - //2002/03/05 杨小波++++++++++++++++++++++++++++++++++++++++++++ + //2002/03/05 鏉ㄥ皬娉++++++++++++++++++++++++++++++++++++++++++++ #if 0 for (pgcu32 dwCount = 0; dwCount < dwBuffer - 1; dwCount++) #endif @@ -1522,31 +1522,31 @@ int get_pgcprofile_string( -// 函数名 : WritePgcProfileString -// 函数说明 : 根据段名,项目名写项目值 -// 函数逻辑 : 调用者通过参数lpAppName, lpKeyName传入要写入的项目值所在的段名和项目名, -// 如果指定的段及项目名存在,函数将把lpString所指向的以空字符结尾的字符串拷贝到 -// 以该段名,项目名对应的项目值缓冲中,然后再把整个配置文件缓冲的内容写入到文件中, -// 并返回SUCCESS;如果指定的段及项目名不存在,函数会根据参数bInsertItem的值决定是否将输入的段名以及 -// 项目名添加到配置文件中,如果bInsertItem为真,则添加该段名和项目名,然后写入项目值, -// 并返回SUCCESS; 如果bInsertItem为假,函数返回ERROR_FAIL。 +// 鍑芥暟鍚 : WritePgcProfileString +// 鍑芥暟璇存槑 : 鏍规嵁娈靛悕锛岄」鐩悕鍐欓」鐩 +// 鍑芥暟閫昏緫 : 璋冪敤鑰呴氳繃鍙傛暟lpAppName锛 lpKeyName浼犲叆瑕佸啓鍏ョ殑椤圭洰鍊兼墍鍦ㄧ殑娈靛悕鍜岄」鐩悕锛 +// 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鎶妉pString鎵鎸囧悜鐨勪互绌哄瓧绗︾粨灏剧殑瀛楃涓叉嫹璐濆埌 +// 浠ヨ娈靛悕锛岄」鐩悕瀵瑰簲鐨勯」鐩肩紦鍐蹭腑锛岀劧鍚庡啀鎶婃暣涓厤缃枃浠剁紦鍐茬殑鍐呭鍐欏叆鍒版枃浠朵腑, +// 骞惰繑鍥濻UCCESS;濡傛灉鎸囧畾鐨勬鍙婇」鐩悕涓嶅瓨鍦紝鍑芥暟浼氭牴鎹弬鏁癰InsertItem鐨勫煎喅瀹氭槸鍚﹀皢杈撳叆鐨勬鍚嶄互鍙 +// 椤圭洰鍚嶆坊鍔犲埌閰嶇疆鏂囦欢涓紝濡傛灉bInsertItem涓虹湡锛屽垯娣诲姞璇ユ鍚嶅拰椤圭洰鍚嶏紝鐒跺悗鍐欏叆椤圭洰鍊硷紝 +// 骞惰繑鍥濻UCCESS; 濡傛灉bInsertItem涓哄亣锛屽嚱鏁拌繑鍥濫RROR_FAIL銆 -// 返回值说明 : int -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 +// 杩斿洖鍊艰鏄 : int -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 -// 返回值 说明 -// SUCCESS 如果指定的段及项目名存在,函数将把lpString所指向的以空字符结尾的字符串拷贝到 -// 以该段名,项目名对应的项目值缓冲中,然后再把整个配置文件缓冲的内容写入到文件中, -// 并返回SUCCESS -// ERROR_FWRITE 写文件错误 -// ERROR_CONF_INVALIDHANDLE 输入了非法的配置文件缓冲句柄 -// ERROR_CONF_INPUTSTRING_TOOLARGE 输入的段名,项目名,项目值的字符串长度超长 -// ERROR_FAIL 函数执行失败,即未将任何字符写到配置文件缓冲区以及文件 +// 杩斿洖鍊 璇存槑 +// SUCCESS 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鎶妉pString鎵鎸囧悜鐨勪互绌哄瓧绗︾粨灏剧殑瀛楃涓叉嫹璐濆埌 +// 浠ヨ娈靛悕锛岄」鐩悕瀵瑰簲鐨勯」鐩肩紦鍐蹭腑锛岀劧鍚庡啀鎶婃暣涓厤缃枃浠剁紦鍐茬殑鍐呭鍐欏叆鍒版枃浠朵腑, +// 骞惰繑鍥濻UCCESS +// ERROR_FWRITE 鍐欐枃浠堕敊璇 +// ERROR_CONF_INVALIDHANDLE 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺 +// ERROR_CONF_INPUTSTRING_TOOLARGE 杈撳叆鐨勬鍚嶏紝椤圭洰鍚嶏紝椤圭洰鍊肩殑瀛楃涓查暱搴﹁秴闀 +// ERROR_FAIL 鍑芥暟鎵ц澶辫触锛屽嵆鏈皢浠讳綍瀛楃鍐欏埌閰嶇疆鏂囦欢缂撳啿鍖轰互鍙婃枃浠 -// 参数说明 : lpAppName[in] -- 段名 -// 参数说明 : lpKeyName[in] -- 项目名 -// 参数说明 : lpString[in] -- 要写入的字符串 -// 参数说明 : hProfile[in] -- 配置文件缓冲句柄 -// 参数说明 : bInsertItem[in] -- 当指定的段名或项目名不存在时,是否添加该段或项目;PGCTRUE-添加;PGCFALSE-不添加(缺省) +// 鍙傛暟璇存槑 : lpAppName[in] -- 娈靛悕 +// 鍙傛暟璇存槑 : lpKeyName[in] -- 椤圭洰鍚 +// 鍙傛暟璇存槑 : lpString[in] -- 瑕佸啓鍏ョ殑瀛楃涓 +// 鍙傛暟璇存槑 : hProfile[in] -- 閰嶇疆鏂囦欢缂撳啿鍙ユ焺 +// 鍙傛暟璇存槑 : bInsertItem[in] -- 褰撴寚瀹氱殑娈靛悕鎴栭」鐩悕涓嶅瓨鍦ㄦ椂锛屾槸鍚︽坊鍔犺娈垫垨椤圭洰锛汸GCTRUE-娣诲姞锛汸GCFALSE-涓嶆坊鍔狅紙缂虹渷锛 int write_pgcprofile_string( const pgcchar * lpAppName, // point to section name const pgcchar * lpKeyName, // point to key name @@ -1559,17 +1559,17 @@ int write_pgcprofile_string( TChainHash *phash_table = NULL; pgc32 iBuffer = 0, iCurItem = 0, iSecPos = 0, i = 0, iWriteSuccess = 0; PGCBOOL bSecExist = PGCFALSE; - PGCBOOL bTrunc = PGCFALSE ;/*写入的字符串是否被截断*/ + PGCBOOL bTrunc = PGCFALSE ;/*鍐欏叆鐨勫瓧绗︿覆鏄惁琚埅鏂*/ - //输入句柄合法性检查 + //杈撳叆鍙ユ焺鍚堟硶鎬ф鏌 if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM)) return ERROR_CONF_INVALIDHANDLE; - //输入段名及项目名合法性检查 + //杈撳叆娈靛悕鍙婇」鐩悕鍚堟硶鎬ф鏌 if ((lpAppName == NULL) || ( lpKeyName == NULL)) return ERROR_FAIL; - //判断输入字符串是否超长 + //鍒ゆ柇杈撳叆瀛楃涓叉槸鍚﹁秴闀 if (strlen(lpAppName) >= MAX_CHAR_LINE) bTrunc = PGCTRUE; if (strlen(lpKeyName) >= MAX_CHAR_LINE) @@ -1579,10 +1579,10 @@ int write_pgcprofile_string( if (bTrunc) return ERROR_CONF_INPUTSTRING_TOOLARGE; - //如果配置文件被其它进程修改,则重构缓冲 + //濡傛灉閰嶇疆鏂囦欢琚叾瀹冭繘绋嬩慨鏀,鍒欓噸鏋勭紦鍐 ReCreateCache(hProfile); - //哈希表合法性检查 + //鍝堝笇琛ㄥ悎娉曟ф鏌 phash_table = g_pHandleIndex[hProfile].pHashTable; if (phash_table == NULL) return ERROR_CONF_INVALIDHANDLE; @@ -1593,13 +1593,13 @@ int write_pgcprofile_string( profile_search_sequence(&psTemp, phash_table, lpAppName, lpKeyName); if ((psTemp == NULL) && (bInsertItem)) { - //检查该段名是否已经存在 + //妫鏌ヨ娈靛悕鏄惁宸茬粡瀛樺湪 profile_search_sequence(&psSec, phash_table, lpAppName, NULL); if (psSec != NULL) { pgcu32 a1, a2; - //2002/03/05 杨小波++++++++++++++++++++++++++++++++++++++++++++ + //2002/03/05 鏉ㄥ皬娉++++++++++++++++++++++++++++++++++++++++++++ #if 0 a1 = (pgcu32)psSec - (pgcu32)psCacheEntry; #endif @@ -1612,12 +1612,12 @@ int write_pgcprofile_string( psSec->valid = PGCTRUE; } - //重构缓冲区大小 + //閲嶆瀯缂撳啿鍖哄ぇ灏 AdjustCache(hProfile, 2); psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry; iCurItem = g_pHandleIndex[hProfile].CurUseItems; - //应该插入新段名吗? + //搴旇鎻掑叆鏂版鍚嶅悧锛 if (!bSecExist) { psTemp = &psCacheEntry[iCurItem]; @@ -1638,7 +1638,7 @@ int write_pgcprofile_string( iCurItem++; g_pHandleIndex[hProfile].CurLines++; } - //插入新项目名及项目值 + //鎻掑叆鏂伴」鐩悕鍙婇」鐩 psTemp = &psCacheEntry[iCurItem]; #ifdef OS_WINDOWS @@ -1673,7 +1673,7 @@ int write_pgcprofile_string( if ((psTemp == NULL) && (!bInsertItem)) return ERROR_CONF_NOTEXIST; - //如果指定段的项目存在则 + //濡傛灉鎸囧畾娈电殑椤圭洰瀛樺湪鍒 if ((psTemp != NULL) && (lpString != NULL)) { if ((psTemp->valid) || (bInsertItem)) @@ -1695,17 +1695,17 @@ int write_pgcprofile_string( -// 函数名 : GetPgcProfileSectionNames -// 函数说明 : 获取配置文件的所有段名 -// 函数逻辑 :将从配置文件中获取的段名按在文件中出现的先后次序写到pdwSize所指向的地址空间, -// 每个段名以一个空字符作为结束标志,在最后一个段名的结尾处再多加一个空字符 -// 作为所有段名的结束标志,即内存格式为 :段名1\0段名2\0......最后一个段名\0\0 +// 鍑芥暟鍚 : GetPgcProfileSectionNames +// 鍑芥暟璇存槑 : 鑾峰彇閰嶇疆鏂囦欢鐨勬墍鏈夋鍚 +// 鍑芥暟閫昏緫 锛氬皢浠庨厤缃枃浠朵腑鑾峰彇鐨勬鍚嶆寜鍦ㄦ枃浠朵腑鍑虹幇鐨勫厛鍚庢搴忓啓鍒皃dwSize鎵鎸囧悜鐨勫湴鍧绌洪棿锛 +// 姣忎釜娈靛悕浠ヤ竴涓┖瀛楃浣滀负缁撴潫鏍囧織锛屽湪鏈鍚庝竴涓鍚嶇殑缁撳熬澶勫啀澶氬姞涓涓┖瀛楃 +// 浣滀负鎵鏈夋鍚嶇殑缁撴潫鏍囧織锛屽嵆鍐呭瓨鏍煎紡涓 锛氭鍚1\0娈靛悕2\0......鏈鍚庝竴涓鍚峔0\0 -// 返回值说明 : int -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 -// 参数说明 : LPTSTR lpszReturnBuffer --[out] 写入缓冲区 -// 参数说明 : pgcu32 *pdwSize -- [in][out]写入缓冲区的按字节长度 -// 参数说明 : pgcu32 *nSecNum --[out]将获取的段总数写入该地址 -// 参数说明 : hProfile-- [in] handle to Profile Cache +// 杩斿洖鍊艰鏄 : int -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 +// 鍙傛暟璇存槑 : LPTSTR lpszReturnBuffer --[out] 鍐欏叆缂撳啿鍖 +// 鍙傛暟璇存槑 : pgcu32 *pdwSize -- [in][out]鍐欏叆缂撳啿鍖虹殑鎸夊瓧鑺傞暱搴 +// 鍙傛暟璇存槑 : pgcu32 *nSecNum --[out]灏嗚幏鍙栫殑娈垫绘暟鍐欏叆璇ュ湴鍧 +// 鍙傛暟璇存槑 : hProfile-- [in] handle to Profile Cache int get_pgcprofile_secnames( pgcchar * lpszReturnBuffer, // address of return buffer pgcu32 * pdwSize, // size of return buffer pgcu32 *nSecNum, @@ -1750,7 +1750,7 @@ int get_pgcprofile_secnames( pgcchar * lpszReturnBuffer, // address of return }// end for *lpszReturnBuffer = '\0'; } - //求所有段名的字符个数总和以及段个数 + //姹傛墍鏈夋鍚嶇殑瀛楃涓暟鎬诲拰浠ュ強娈典釜鏁 for (pgc32 iStart = i + 1; iStart < iCount; iStart++) { if ((psCacheEntry[iStart].bIsSecName) && (psCacheEntry[iStart].valid)) @@ -1773,14 +1773,14 @@ int get_pgcprofile_secnames( pgcchar * lpszReturnBuffer, // address of return -// 函数名 : del_pgcprofile_key -// 函数说明 : 删除指定的项目 -// 函数逻辑 :在缓冲中删除指定的项目,以及该项目上方的注释,然后以覆盖方式重写文件。 +// 鍑芥暟鍚 : del_pgcprofile_key +// 鍑芥暟璇存槑 : 鍒犻櫎鎸囧畾鐨勯」鐩 +// 鍑芥暟閫昏緫 锛氬湪缂撳啿涓垹闄ゆ寚瀹氱殑椤圭洰锛屼互鍙婅椤圭洰涓婃柟鐨勬敞閲婏紝鐒跺悗浠ヨ鐩栨柟寮忛噸鍐欐枃浠躲 -// 返回值说明 : int -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 -// 参数说明 : lpAppName --[in] 段名 -// 参数说明 : lpKeyName -- [in]项目名 -// 参数说明 : HPROFILE hProfile --[in]配置文件的缓冲句柄 +// 杩斿洖鍊艰鏄 : int -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 +// 鍙傛暟璇存槑 : lpAppName --[in] 娈靛悕 +// 鍙傛暟璇存槑 : lpKeyName -- [in]椤圭洰鍚 +// 鍙傛暟璇存槑 : HPROFILE hProfile 锛-[in]閰嶇疆鏂囦欢鐨勭紦鍐插彞鏌 int del_pgcprofile_key( const pgcchar * lpAppName, // point to section name const pgcchar * lpKeyName, // point to key name HPROFILE hProfile // point to initialization filename @@ -1816,14 +1816,14 @@ int del_pgcprofile_key( const pgcchar * lpAppName, // point to section name -// 函数名 : del_pgcprofile_sec -// 函数说明 : 删除指定的段 -// 函数逻辑 :在缓冲中删除指定的段,以及该段上方的注释,然后以覆盖方式重写文件; -// 在删除一个段的同时,该段下属的所有项目(包括项目上方的注释)将被删除 +// 鍑芥暟鍚 : del_pgcprofile_sec +// 鍑芥暟璇存槑 : 鍒犻櫎鎸囧畾鐨勬 +// 鍑芥暟閫昏緫 锛氬湪缂撳啿涓垹闄ゆ寚瀹氱殑娈碉紝浠ュ強璇ユ涓婃柟鐨勬敞閲婏紝鐒跺悗浠ヨ鐩栨柟寮忛噸鍐欐枃浠讹紱 +// 鍦ㄥ垹闄や竴涓鐨勫悓鏃讹紝璇ユ涓嬪睘鐨勬墍鏈夐」鐩紙鍖呮嫭椤圭洰涓婃柟鐨勬敞閲婏級灏嗚鍒犻櫎 -// 返回值说明 : int -- 成功则返回SUCCESS,失败则返回具体的执行失败的代码 -// 参数说明 : lpAppName --[in] 段名 -// 参数说明 : HPROFILE hProfile --[in]配置文件的缓冲句柄 +// 杩斿洖鍊艰鏄 : int -- 鎴愬姛鍒欒繑鍥濻UCCESS,澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 +// 鍙傛暟璇存槑 : lpAppName --[in] 娈靛悕 +// 鍙傛暟璇存槑 : HPROFILE hProfile 锛-[in]閰嶇疆鏂囦欢鐨勭紦鍐插彞鏌 int del_pgcprofile_sec( const pgcchar * lpAppName, HPROFILE hProfile ) @@ -1853,7 +1853,7 @@ int del_pgcprofile_sec( const pgcchar * lpAppName, { pgcu32 a1, a2; - //2002/03/05 杨小波++++++++++++++++++++++++++++++++++++++++++++ + //2002/03/05 鏉ㄥ皬娉++++++++++++++++++++++++++++++++++++++++++++ #if 0 a1 = (pgcu32)psSec - (pgcu32)psCacheEntry; #endif diff --git a/Profile_Hash.h b/Profile_Hash.h index 730caab..7e452ab 100644 --- a/Profile_Hash.h +++ b/Profile_Hash.h @@ -1,8 +1,8 @@ /****************************************************************************************** * - * 作者: m.j.y + * 浣滆: m.j.y * - * Pgc配置文件读写等操作--内部函数定义 + * Pgc閰嶇疆鏂囦欢璇诲啓绛夋搷浣--鍐呴儴鍑芥暟瀹氫箟 * * $Log: Profile_Hash.h,v $ * Revision 1.2 2006/08/04 03:37:33 zhuzhenhua @@ -12,10 +12,10 @@ * no message * * Revision 1.4 2003/07/14 01:56:23 scada - * 使用def文件导出函数 + * 浣跨敤def鏂囦欢瀵煎嚭鍑芥暟 * * Revision 1.3 2003/06/05 03:56:16 jehu - * 将注释修改为符合doxgen工具提取开发文档 + * 灏嗘敞閲婁慨鏀逛负绗﹀悎doxgen宸ュ叿鎻愬彇寮鍙戞枃妗 * * Revision 1.2 2002/12/04 07:47:36 scada * for NT @@ -24,7 +24,7 @@ * temporarily import * * Revision 1.14 2002/06/03 10:07:04 mhorse - * 更改了宏的值 + * 鏇存敼浜嗗畯鐨勫 * * Revision 1.13 2002/03/20 03:40:02 harold * no message @@ -78,11 +78,11 @@ * \if developer_doc * \file * - * \brief Pgc配置文件读写等操作--内部函数定义头文件。 + * \brief Pgc閰嶇疆鏂囦欢璇诲啓绛夋搷浣--鍐呴儴鍑芥暟瀹氫箟澶存枃浠躲 * * id: $Id: Profile_Hash.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * - * \author 杨小波 prcharold@sina.com.cn develop1@szscada.com + * \author 鏉ㄥ皬娉 prcharold@sina.com.cn develop1@szscada.com * \endif */ @@ -109,10 +109,10 @@ */ /*! - * 配置文件中, 每一行的最大长度 + * 閰嶇疆鏂囦欢涓, 姣忎竴琛岀殑鏈澶ч暱搴 */ #define MAX_CONF_LINE_L (1024) -//!< 定义每行(注释行的字符个数无限制)允许的最大字符个数, 包括换行符号'\r\n'及null字符 +//!< 瀹氫箟姣忚(娉ㄩ噴琛岀殑瀛楃涓暟鏃犻檺鍒讹級鍏佽鐨勬渶澶у瓧绗︿釜鏁, 鍖呮嫭鎹㈣绗﹀彿'\r\n'鍙妌ull瀛楃 #define MAX_CHAR_LINE (MAX_CONF_LINE_L) #ifndef PATH_MAX @@ -120,38 +120,38 @@ #endif #define MAX_PATH 260 -//!< 定义存储文件路径的字符串数组的大小 +//!< 瀹氫箟瀛樺偍鏂囦欢璺緞鐨勫瓧绗︿覆鏁扮粍鐨勫ぇ灏 #define MAX_PATH_NUM (MAX_PATH) -//在重新生成配置文件时,是否将'\r\n'作为行结束标志 +//鍦ㄩ噸鏂扮敓鎴愰厤缃枃浠舵椂锛屾槸鍚﹀皢'\r\n'浣滀负琛岀粨鏉熸爣蹇 //#define REWRITEFILE_ADDCHAR_13 -//!< 设置缓冲区的最大段数 +//!< 璁剧疆缂撳啿鍖虹殑鏈澶ф鏁 #define MAX_SEC_NUM 2500 -//!< 设置缓冲区的每一段的最大项目个数 +//!< 璁剧疆缂撳啿鍖虹殑姣忎竴娈电殑鏈澶ч」鐩釜鏁 #define MAX_ITEM_NUM 30 -//!< 定义初始化缓冲区容纳项目的个数 +//!< 瀹氫箟鍒濆鍖栫紦鍐插尯瀹圭撼椤圭洰鐨勪釜鏁 #define INITCACHE_ITEM_NUM 5000 -//!< 缓冲区增大时的递增项目的个数 +//!< 缂撳啿鍖哄澶ф椂鐨勯掑椤圭洰鐨勪釜鏁 #define RESIZE_ITEM_NUM 5000 -//!< 定义在一个进程中允许同时打开的配置文件缓冲句柄的个数 +//!< 瀹氫箟鍦ㄤ竴涓繘绋嬩腑鍏佽鍚屾椂鎵撳紑鐨勯厤缃枃浠剁紦鍐插彞鏌勭殑涓暟 #define MAX_PROFILEHANDLE_NUM 50 -//!< 定义配置文件缓冲句柄 +//!< 瀹氫箟閰嶇疆鏂囦欢缂撳啿鍙ユ焺 typedef pgc32 HPROFILE; -//!< 保存注释的链表 +//!< 淇濆瓨娉ㄩ噴鐨勯摼琛 typedef struct tagMemoChain { pgcchar *szMemo; tagMemoChain * NextNode; } SMemoChain; -//!< 缓冲项的结构 +//!< 缂撳啿椤圭殑缁撴瀯 typedef struct tagItemInCache { pgcchar szItemName[MAX_CHAR_LINE]; @@ -166,7 +166,7 @@ typedef struct tagItemInCache } } SItemInCache; -//!< 项目位置链表结构 +//!< 椤圭洰浣嶇疆閾捐〃缁撴瀯 typedef struct tagItemSequence { pgc32 iPos; @@ -177,29 +177,29 @@ typedef struct tagItemSequence } } SItemSequence; -//!< 定义存储句柄对应的信息的结构 +//!< 瀹氫箟瀛樺偍鍙ユ焺瀵瑰簲鐨勪俊鎭殑缁撴瀯 typedef struct tagProfileHanleInfo { FILE *fstream; - //!< 保存配置文件全路径名 + //!< 淇濆瓨閰嶇疆鏂囦欢鍏ㄨ矾寰勫悕 pgcchar szPathName[MAX_PATH_NUM]; - //!< 配置文件上一次被修改的时间 + //!< 閰嶇疆鏂囦欢涓婁竴娆¤淇敼鐨勬椂闂 timeval tLastModify; - //!< 哈希表指针 + //!< 鍝堝笇琛ㄦ寚閽 TChainHash *pHashTable; - //!< 行位置链表头指针 + //!< 琛屼綅缃摼琛ㄥご鎸囬拡 SItemSequence *pSequence; - //!< 行位置链表当前指针 + //!< 琛屼綅缃摼琛ㄥ綋鍓嶆寚閽 SItemSequence *pCurSeq; - //!< 缓冲区数组入口 + //!< 缂撳啿鍖烘暟缁勫叆鍙 SItemInCache* pCacheEntry; - //!< 段总数 + //!< 娈垫绘暟 pgc32 CurSecNum; - //!< 当前缓冲区能容纳的项目个数 + //!< 褰撳墠缂撳啿鍖鸿兘瀹圭撼鐨勯」鐩釜鏁 pgc32 CurItemCount; - //!< 已经使用的项目个数 + //!< 宸茬粡浣跨敤鐨勯」鐩釜鏁 pgc32 CurUseItems; - //!< 当前文件中的行数 + //!< 褰撳墠鏂囦欢涓殑琛屾暟 pgc32 CurLines; tagProfileHanleInfo() { @@ -208,14 +208,14 @@ typedef struct tagProfileHanleInfo } SProfileHanleInfo; /*! -* \brief 根据已知的历史数据库索引数组, 为其建立一个哈希表. +* \brief 鏍规嵁宸茬煡鐨勫巻鍙叉暟鎹簱绱㈠紩鏁扮粍, 涓哄叾寤虹珛涓涓搱甯岃〃. * -* \param pindex --[in] 索引数组的指针 -* \param count --[in] pindex索引数组中索引的个数, pindex[0] -- pindex[count - 1]为索引 -* \param pphash_of_index --[in] 将pindex所指向的数组哈希化, 这样, 在随后的索引搜索时, 使用该哈希索引. +* \param pindex --[in] 绱㈠紩鏁扮粍鐨勬寚閽 +* \param count --[in] pindex绱㈠紩鏁扮粍涓储寮曠殑涓暟, pindex[0] -- pindex[count - 1]涓虹储寮 +* \param pphash_of_index --[in] 灏唒index鎵鎸囧悜鐨勬暟缁勫搱甯屽寲, 杩欐牱, 鍦ㄩ殢鍚庣殑绱㈠紩鎼滅储鏃, 浣跨敤璇ュ搱甯岀储寮. * -* \retval SUCCESS -- 成功 -* \retval 其它 -- 失败代码 +* \retval SUCCESS -- 鎴愬姛 +* \retval 鍏跺畠 -- 澶辫触浠g爜 * */ pgc32 profile_build_hash_index ( SItemInCache * pindex, @@ -224,15 +224,15 @@ pgc32 profile_build_hash_index ( SItemInCache * pindex, /*! -* \brief 在索引区中搜索 +* \brief 鍦ㄧ储寮曞尯涓悳绱 * -* \param pindex_base --[in] 被哈希化的索引数组的指针 -* \param phash_of_index --[in] 索引数组的哈希表 -* \param szSecName --[in] 被查询的段名 -* \param szItemName --[in] 被查询的项目名 +* \param pindex_base --[in] 琚搱甯屽寲鐨勭储寮曟暟缁勭殑鎸囬拡 +* \param phash_of_index --[in] 绱㈠紩鏁扮粍鐨勫搱甯岃〃 +* \param szSecName --[in] 琚煡璇㈢殑娈靛悕 +* \param szItemName --[in] 琚煡璇㈢殑椤圭洰鍚 * -* \retval 索引在索引数组中的序号 -- 成功的查找到指定的配置项目的索引 -* \retval -1 -- 失败 +* \retval 绱㈠紩鍦ㄧ储寮曟暟缁勪腑鐨勫簭鍙 -- 鎴愬姛鐨勬煡鎵惧埌鎸囧畾鐨勯厤缃」鐩殑绱㈠紩 +* \retval -1 -- 澶辫触 */ pgc32 profile_search_sequence ( SItemInCache **pindex_base, TChainHash *phash_of_index, @@ -241,159 +241,159 @@ pgc32 profile_search_sequence ( SItemInCache **pindex_base, /*! -* \brief 判断某行是否被注释。 +* \brief 鍒ゆ柇鏌愯鏄惁琚敞閲娿 * -* \param szLine --[in] 行字串 +* \param szLine --[in] 琛屽瓧涓 * -* \retval PGCTRUE 是注释行 -* \retval PGCFALSE 不是注释行 +* \retval PGCTRUE 鏄敞閲婅 +* \retval PGCFALSE 涓嶆槸娉ㄩ噴琛 */ PGCBOOL LineIsMark(pgcchar *szLine); /*! -* \brief 寻找段尾。 +* \brief 瀵绘壘娈靛熬銆 * -* \param szString --[in] 字串 +* \param szString --[in] 瀛椾覆 * -* \retval 字船指针 段尾的位置指针 -* \retval NULL 没找到段尾 +* \retval 瀛楄埞鎸囬拡 娈靛熬鐨勪綅缃寚閽 +* \retval NULL 娌℃壘鍒版灏 */ pgcchar* FindSecTail(pgcchar *szString); /*! -* \brief 提取段名。 +* \brief 鎻愬彇娈靛悕銆 * -* \param szString --[in] 需要提取段名的字串。 -* \param szRevBuffer --[out] 段名字串缓冲,返回的段名保存在此。 -* \param iBufferLength --[in] 段名字串缓冲空间的长度。 +* \param szString --[in] 闇瑕佹彁鍙栨鍚嶇殑瀛椾覆銆 +* \param szRevBuffer --[out] 娈靛悕瀛椾覆缂撳啿锛岃繑鍥炵殑娈靛悕淇濆瓨鍦ㄦ銆 +* \param iBufferLength --[in] 娈靛悕瀛椾覆缂撳啿绌洪棿鐨勯暱搴︺ * -* \retval PGCTRUE 提取段名成功 -* \retval PGCFALSE 提取段名失败 +* \retval PGCTRUE 鎻愬彇娈靛悕鎴愬姛 +* \retval PGCFALSE 鎻愬彇娈靛悕澶辫触 */ PGCBOOL DigSecName(const pgcchar *szString, pgcchar *szRevBuffer, pgc32 iBufferLength); /*! -* \brief 提取项目名及项目值。 +* \brief 鎻愬彇椤圭洰鍚嶅強椤圭洰鍊笺 * -* \param szString --[in] 需要提取项目名及项目值的字串。 -* \param szItemName --[in] 行字符串头指针。 -* \param szItemVal --[out] 项目值字串缓冲,返回的项目值保存在此。 -* \param iBufferLength --[in] 项目值字串空间的长度。 +* \param szString --[in] 闇瑕佹彁鍙栭」鐩悕鍙婇」鐩肩殑瀛椾覆銆 +* \param szItemName --[in] 琛屽瓧绗︿覆澶存寚閽堛 +* \param szItemVal --[out] 椤圭洰鍊煎瓧涓茬紦鍐诧紝杩斿洖鐨勯」鐩间繚瀛樺湪姝ゃ +* \param iBufferLength --[in] 椤圭洰鍊煎瓧涓茬┖闂寸殑闀垮害銆 * -* \retval PGCTRUE 成功 -* \retval PGCFALSE 失败 +* \retval PGCTRUE 鎴愬姛 +* \retval PGCFALSE 澶辫触 */ PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemVal, pgc32 iBufferLength); /*! -* \brief 添加一个节点到顺序链表中。 +* \brief 娣诲姞涓涓妭鐐瑰埌椤哄簭閾捐〃涓 * -* \param psHead --[in] 顺序链表头节点的指针。 -* \param iPos --[in] 该节点要保存的缓冲数组的偏移位置。 +* \param psHead --[in] 椤哄簭閾捐〃澶磋妭鐐圭殑鎸囬拡銆 +* \param iPos --[in] 璇ヨ妭鐐硅淇濆瓨鐨勭紦鍐叉暟缁勭殑鍋忕Щ浣嶇疆銆 * -* \retval PGCTRUE 成功 -* \retval PGCFALSE 失败 +* \retval PGCTRUE 鎴愬姛 +* \retval PGCFALSE 澶辫触 */ PGCBOOL AddNode(SItemSequence * &psHead, pgc32 iPos); /*! -* \brief 释放配置文件缓冲句柄。 +* \brief 閲婃斁閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 * -* \param hProfile --[in] 配置文件缓冲句柄。 +* \param hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 */ void ReleaseProfileCache(HPROFILE hProfile); /*! -* \brief 重写配置文件。 +* \brief 閲嶅啓閰嶇疆鏂囦欢銆 * -* \param hProfile --[in] 配置文件缓冲句柄。 +* \param hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 * -* \retval SUCCESS 成功。 -* \retval 其它 失败,错误代码。 +* \retval SUCCESS 鎴愬姛銆 +* \retval 鍏跺畠 澶辫触锛岄敊璇唬鐮併 */ pgc32 ReWriteProfile(HPROFILE hProfile); /*! -* \brief 创建文件句柄缓冲。 +* \brief 鍒涘缓鏂囦欢鍙ユ焺缂撳啿銆 * -* \param hProfile --[in] 配置文件缓冲句柄。 +* \param hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 * -* \retval SUCCESS 成功。 -* \retval 其它 失败,错误代码。 +* \retval SUCCESS 鎴愬姛銆 +* \retval 鍏跺畠 澶辫触锛岄敊璇唬鐮併 */ pgc32 ProcessCreateCache(HPROFILE hProfile); //----------------------------------------------------------------------------------------- /*! *\verbatim -//以下为应用接口 +//浠ヤ笅涓哄簲鐢ㄦ帴鍙 ****************************************************************************************** * -* 作者: m.j.y +* 浣滆: m.j.y * -* Pgc读配置文件--外部函数定义(供外部调用人员使用) +* Pgc璇婚厤缃枃浠--澶栭儴鍑芥暟瀹氫箟锛堜緵澶栭儴璋冪敤浜哄憳浣跨敤锛 * ****************************************************************************************** *\endverbaim */ /*! -* \brief 建立配置文件缓冲。 +* \brief 寤虹珛閰嶇疆鏂囦欢缂撳啿銆 * -* \param szProfileName --[in] 配置文件全路径名。 -* \param phfile --[out] 如果函数执行成功,则返回一个句柄。 +* \param szProfileName --[in] 閰嶇疆鏂囦欢鍏ㄨ矾寰勫悕銆 +* \param phfile --[out] 濡傛灉鍑芥暟鎵ц鎴愬姛锛屽垯杩斿洖涓涓彞鏌勩 * -* \retval SUCCESS -- 成功建立配置文件缓冲。 -* \retval 失败则返回具体的执行失败的代码。 -* \retval ERROR_CONF_NOHANDLE -- 建立配置文件缓冲失败,原因:没有空闲的配置文件缓冲句柄分配给当前配置文件缓冲。 -* \retval ERROR_FOPEN -- 打开文件失败。 -* \retval ERROR_FREAD -- 读文件失败。 -* \retval ERROR_CONF_CREATEHASH -- 建立哈希表失败。 -* \retval ERROR_MEMORY_ALLOC -- 不能不能分配指定大小的内存。 +* \retval SUCCESS -- 鎴愬姛寤虹珛閰嶇疆鏂囦欢缂撳啿銆 +* \retval 澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮併 +* \retval ERROR_CONF_NOHANDLE -- 寤虹珛閰嶇疆鏂囦欢缂撳啿澶辫触锛屽師鍥狅細娌℃湁绌洪棽鐨勯厤缃枃浠剁紦鍐插彞鏌勫垎閰嶇粰褰撳墠閰嶇疆鏂囦欢缂撳啿銆 +* \retval ERROR_FOPEN -- 鎵撳紑鏂囦欢澶辫触銆 +* \retval ERROR_FREAD -- 璇绘枃浠跺け璐ャ +* \retval ERROR_CONF_CREATEHASH -- 寤虹珛鍝堝笇琛ㄥけ璐ャ +* \retval ERROR_MEMORY_ALLOC -- 涓嶈兘涓嶈兘鍒嗛厤鎸囧畾澶у皬鐨勫唴瀛樸 */ int create_profile_cache(pgcchar *szProfileName, int *phfile); /*! -* \brief 关闭配置文件缓冲。 +* \brief 鍏抽棴閰嶇疆鏂囦欢缂撳啿銆 * -* 函数逻辑:根据在该配置文件缓冲句柄中记录的信息,释放资源. +* 鍑芥暟閫昏緫锛氭牴鎹湪璇ラ厤缃枃浠剁紦鍐插彞鏌勪腑璁板綍鐨勪俊鎭紝閲婃斁璧勬簮. * -* \param hProfile --[in] 配置文件缓冲句柄。 +* \param hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 * -* \retval SUCCESS -- 成功。 -* \retval 失败则返回具体的执行失败的代码。 -* \retval ERROR_CONF_INVALIDHANDLE -- 输入了非法的配置文件缓冲句柄。 +* \retval SUCCESS -- 鎴愬姛銆 +* \retval 澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮併 +* \retval ERROR_CONF_INVALIDHANDLE -- 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 */ int close_profile_handle(HPROFILE hProfile); /*! -* \brief 根据段名,项目名获取项目值。 +* \brief 鏍规嵁娈靛悕锛岄」鐩悕鑾峰彇椤圭洰鍊笺 * -* 函数逻辑:调用者通过参数lpAppName, lpKeyName传入要取出的项目值所在的段名和项目名, -* 如果指定的段及项目名存在,函数将取出的项目值拷贝到以lpReturnedString为首地址的 -* 目标缓冲中(目标缓冲的长度通过指针pdwSize传入),随后函数会将取出的项目值 -* 的长度(包括'\0'字符)写入地址指针pdwSize中; 如果指定的段及项目名不存在,则执行缺省拷贝,即将 -* lpDefault 所指向的字符串拷贝到目标缓冲区lpReturnedString中; 如果目标缓冲区的首地址 -* lpReturnedString为空或传入的目标缓冲的长度小于1,那么函数不会将任何字符串拷贝到 -* 目标缓冲,但是仍会将取出的项目值的长度(包括'\0'字符)写入地址指针pdwSize中。 +* 鍑芥暟閫昏緫:璋冪敤鑰呴氳繃鍙傛暟lpAppName锛 lpKeyName浼犲叆瑕佸彇鍑虹殑椤圭洰鍊兼墍鍦ㄧ殑娈靛悕鍜岄」鐩悕锛 +* 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鍙栧嚭鐨勯」鐩兼嫹璐濆埌浠pReturnedString涓洪鍦板潃鐨 +* 鐩爣缂撳啿涓(鐩爣缂撳啿鐨勯暱搴﹂氳繃鎸囬拡pdwSize浼犲叆)锛岄殢鍚庡嚱鏁颁細灏嗗彇鍑虹殑椤圭洰鍊 +* 鐨勯暱搴(鍖呮嫭'\0'瀛楃)鍐欏叆鍦板潃鎸囬拡pdwSize涓紱 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕涓嶅瓨鍦紝鍒欐墽琛岀己鐪佹嫹璐濓紝鍗冲皢 +* lpDefault 鎵鎸囧悜鐨勫瓧绗︿覆鎷疯礉鍒扮洰鏍囩紦鍐插尯lpReturnedString涓; 濡傛灉鐩爣缂撳啿鍖虹殑棣栧湴鍧 +* lpReturnedString涓虹┖鎴栦紶鍏ョ殑鐩爣缂撳啿鐨勯暱搴﹀皬浜1锛岄偅涔堝嚱鏁颁笉浼氬皢浠讳綍瀛楃涓叉嫹璐濆埌 +* 鐩爣缂撳啿锛屼絾鏄粛浼氬皢鍙栧嚭鐨勯」鐩肩殑闀垮害(鍖呮嫭'\0'瀛楃)鍐欏叆鍦板潃鎸囬拡pdwSize涓 * -* \param lpAppName --[in] 段名。 -* \param lpDefault --[in] 当获取指定的项目值失败时,将该缓冲区的字符串写入lpReturnedString目标缓冲。 -* \param lpReturnedString --[out] 目标缓冲区,用来存放取出的项目值。 -* \param pdwSize --[in][out] 指向缓冲区的长度的指针,同时在调用结束后,将取出的项目字符串的长度(包括'\0'字符)写入该地址。 -* \param hProfile --[in] 配置文件缓冲句柄。 +* \param lpAppName --[in] 娈靛悕銆 +* \param lpDefault --[in] 褰撹幏鍙栨寚瀹氱殑椤圭洰鍊煎け璐ユ椂锛屽皢璇ョ紦鍐插尯鐨勫瓧绗︿覆鍐欏叆lpReturnedString鐩爣缂撳啿銆 +* \param lpReturnedString --[out] 鐩爣缂撳啿鍖猴紝鐢ㄦ潵瀛樻斁鍙栧嚭鐨勯」鐩笺 +* \param pdwSize --[in][out] 鎸囧悜缂撳啿鍖虹殑闀垮害鐨勬寚閽堬紝鍚屾椂鍦ㄨ皟鐢ㄧ粨鏉熷悗锛屽皢鍙栧嚭鐨勯」鐩瓧绗︿覆鐨勯暱搴(鍖呮嫭'\0'瀛楃)鍐欏叆璇ュ湴鍧銆 +* \param hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 * -* \retval SUCCESS -- 成功,如果指定的段及项目名存在,函数将取出的项目值拷贝到以lpReturnedString为首地址的 -* 目标缓冲中,如果取出的项目值的长度小于或等于目标缓冲区的长度,那么整个项目值将被完全拷贝到目标缓冲中,此时函数返回SUCCESS。 -* \retval ERROR_CONF_REVBUFFER -- 如果指定的段及项目名存在,但是取出的项目值的长度大于目标缓冲区的长度, -* 那么取出的项目值将被截断为和目标缓冲区一样的大小,然后再拷贝到目标缓区,此时函数返回ERROR_CONF_REVBUFFER。 -* \retval SUCCESS_CONF_DEFCOPY -- 如果指定的段及项目名不存在,并且lpDefault指针不为空,则函数将lpDefault所指向的字符串拷贝到目标缓冲区lpReturnedString, -* 如果lpDefault指向的字符串的长度大于目标缓冲区的长度,那么只从lpDefault开始拷贝 [目标缓冲区的长度 - 1]个字符到缓冲中。 -* \retval ERROR_CONF_INVALIDHANDLE -- 输入了非法的配置文件缓冲句柄。 -* \retval ERROR_FAIL -- 函数执行失败,即未拷贝任何字符到目标缓冲区。 +* \retval SUCCESS -- 鎴愬姛锛屽鏋滄寚瀹氱殑娈靛強椤圭洰鍚嶅瓨鍦紝鍑芥暟灏嗗彇鍑虹殑椤圭洰鍊兼嫹璐濆埌浠pReturnedString涓洪鍦板潃鐨 +* 鐩爣缂撳啿涓紝濡傛灉鍙栧嚭鐨勯」鐩肩殑闀垮害灏忎簬鎴栫瓑浜庣洰鏍囩紦鍐插尯鐨勯暱搴︼紝閭d箞鏁翠釜椤圭洰鍊煎皢琚畬鍏ㄦ嫹璐濆埌鐩爣缂撳啿涓紝姝ゆ椂鍑芥暟杩斿洖SUCCESS銆 +* \retval ERROR_CONF_REVBUFFER -- 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪,浣嗘槸鍙栧嚭鐨勯」鐩肩殑闀垮害澶т簬鐩爣缂撳啿鍖虹殑闀垮害, +* 閭d箞鍙栧嚭鐨勯」鐩煎皢琚埅鏂负鍜岀洰鏍囩紦鍐插尯涓鏍风殑澶у皬锛岀劧鍚庡啀鎷疯礉鍒扮洰鏍囩紦鍖猴紝姝ゆ椂鍑芥暟杩斿洖ERROR_CONF_REVBUFFER銆 +* \retval SUCCESS_CONF_DEFCOPY -- 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕涓嶅瓨鍦紝骞朵笖lpDefault鎸囬拡涓嶄负绌猴紝鍒欏嚱鏁板皢lpDefault鎵鎸囧悜鐨勫瓧绗︿覆鎷疯礉鍒扮洰鏍囩紦鍐插尯lpReturnedString锛 +* 濡傛灉lpDefault鎸囧悜鐨勫瓧绗︿覆鐨勯暱搴﹀ぇ浜庣洰鏍囩紦鍐插尯鐨勯暱搴︼紝閭d箞鍙粠lpDefault寮濮嬫嫹璐 [鐩爣缂撳啿鍖虹殑闀垮害 锛 1]涓瓧绗﹀埌缂撳啿涓 +* \retval ERROR_CONF_INVALIDHANDLE -- 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺銆 +* \retval ERROR_FAIL -- 鍑芥暟鎵ц澶辫触锛屽嵆鏈嫹璐濅换浣曞瓧绗﹀埌鐩爣缂撳啿鍖恒 */ int get_pgcprofile_string( const pgcchar * lpAppName, // points to section name @@ -405,26 +405,26 @@ int get_pgcprofile_string( ); /*! -* \brief 根据段名,项目名写项目值。 +* \brief 鏍规嵁娈靛悕锛岄」鐩悕鍐欓」鐩笺 * -* 函数逻辑: 调用者通过参数lpAppName, lpKeyName传入要写入的项目值所在的段名和项目名, -* 如果指定的段及项目名存在,函数将把lpString所指向的以空字符结尾的字符串拷贝到 -* 以该段名,项目名对应的项目值缓冲中,然后再把整个配置文件缓冲的内容写入到文件中, -* 并返回SUCCESS;如果指定的段及项目名不存在,函数会根据参数bInsertItem的值决定是否将输入的段名以及 -* 项目名添加到配置文件中,如果bInsertItem为真,则添加该段名和项目名,然后写入项目值, -* 并返回SUCCESS; 如果bInsertItem为假,函数返回ERROR_FAIL。 +* 鍑芥暟閫昏緫: 璋冪敤鑰呴氳繃鍙傛暟lpAppName锛 lpKeyName浼犲叆瑕佸啓鍏ョ殑椤圭洰鍊兼墍鍦ㄧ殑娈靛悕鍜岄」鐩悕锛 +* 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鎶妉pString鎵鎸囧悜鐨勪互绌哄瓧绗︾粨灏剧殑瀛楃涓叉嫹璐濆埌 +* 浠ヨ娈靛悕锛岄」鐩悕瀵瑰簲鐨勯」鐩肩紦鍐蹭腑锛岀劧鍚庡啀鎶婃暣涓厤缃枃浠剁紦鍐茬殑鍐呭鍐欏叆鍒版枃浠朵腑, +* 骞惰繑鍥濻UCCESS;濡傛灉鎸囧畾鐨勬鍙婇」鐩悕涓嶅瓨鍦紝鍑芥暟浼氭牴鎹弬鏁癰InsertItem鐨勫煎喅瀹氭槸鍚﹀皢杈撳叆鐨勬鍚嶄互鍙 +* 椤圭洰鍚嶆坊鍔犲埌閰嶇疆鏂囦欢涓紝濡傛灉bInsertItem涓虹湡锛屽垯娣诲姞璇ユ鍚嶅拰椤圭洰鍚嶏紝鐒跺悗鍐欏叆椤圭洰鍊硷紝 +* 骞惰繑鍥濻UCCESS; 濡傛灉bInsertItem涓哄亣锛屽嚱鏁拌繑鍥濫RROR_FAIL銆 * -* \param lpAppName --[in] 段名 -* \param lpKeyName --[in] 项目名 -* \param lpString --[in] 要写入的字符串 -* \param hProfile --[in] 配置文件缓冲句柄 -* \param bInsertItem --[in] 当指定的段名或项目名不存在时,是否添加该段或项目;PGCTRUE-添加;PGCFALSE-不添加(缺省) +* \param lpAppName --[in] 娈靛悕 +* \param lpKeyName --[in] 椤圭洰鍚 +* \param lpString --[in] 瑕佸啓鍏ョ殑瀛楃涓 +* \param hProfile --[in] 閰嶇疆鏂囦欢缂撳啿鍙ユ焺 +* \param bInsertItem --[in] 褰撴寚瀹氱殑娈靛悕鎴栭」鐩悕涓嶅瓨鍦ㄦ椂锛屾槸鍚︽坊鍔犺娈垫垨椤圭洰锛汸GCTRUE-娣诲姞锛汸GCFALSE-涓嶆坊鍔狅紙缂虹渷锛 * -* \retval SUCCESS(0) -- 如果指定的段及项目名存在,函数将把lpString所指向的以空字符结尾的字符串拷贝到 -* 以该段名,项目名对应的项目值缓冲中,然后再把整个配置文件缓冲的内容写入到文件中,并返回SUCCESS -* \retval ERROR_FWRITE -- 写文件错误 -* \retval ERROR_CONF_INVALIDHANDLE -- 输入了非法的配置文件缓冲句柄 -* \retval ERROR_FAIL -- 函数执行失败,即未将任何字符写到配置文件缓冲区以及文件 +* \retval SUCCESS(0) -- 濡傛灉鎸囧畾鐨勬鍙婇」鐩悕瀛樺湪锛屽嚱鏁板皢鎶妉pString鎵鎸囧悜鐨勪互绌哄瓧绗︾粨灏剧殑瀛楃涓叉嫹璐濆埌 +* 浠ヨ娈靛悕锛岄」鐩悕瀵瑰簲鐨勯」鐩肩紦鍐蹭腑锛岀劧鍚庡啀鎶婃暣涓厤缃枃浠剁紦鍐茬殑鍐呭鍐欏叆鍒版枃浠朵腑,骞惰繑鍥濻UCCESS +* \retval ERROR_FWRITE -- 鍐欐枃浠堕敊璇 +* \retval ERROR_CONF_INVALIDHANDLE -- 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺 +* \retval ERROR_FAIL -- 鍑芥暟鎵ц澶辫触锛屽嵆鏈皢浠讳綍瀛楃鍐欏埌閰嶇疆鏂囦欢缂撳啿鍖轰互鍙婃枃浠 */ int write_pgcprofile_string( const pgcchar * lpAppName, // point to section name @@ -435,19 +435,19 @@ int write_pgcprofile_string( ); /*! -* \brief 获取配置文件的所有段名。 +* \brief 鑾峰彇閰嶇疆鏂囦欢鐨勬墍鏈夋鍚嶃 * -* 函数逻辑:将从配置文件中获取的段名按在文件中出现的先后次序写到pdwSize所指向的地址空间, -* 每个段名以一个空字符作为结束标志,在最后一个段名的结尾处再多加一个空字符 -* 作为所有全部段名的结束标志,即内存格式为 :段名1\0段名2\0......最后一个段名\0\0 +* 鍑芥暟閫昏緫锛氬皢浠庨厤缃枃浠朵腑鑾峰彇鐨勬鍚嶆寜鍦ㄦ枃浠朵腑鍑虹幇鐨勫厛鍚庢搴忓啓鍒皃dwSize鎵鎸囧悜鐨勫湴鍧绌洪棿锛 +* 姣忎釜娈靛悕浠ヤ竴涓┖瀛楃浣滀负缁撴潫鏍囧織锛屽湪鏈鍚庝竴涓鍚嶇殑缁撳熬澶勫啀澶氬姞涓涓┖瀛楃 +* 浣滀负鎵鏈夊叏閮ㄦ鍚嶇殑缁撴潫鏍囧織锛屽嵆鍐呭瓨鏍煎紡涓 锛氭鍚1\0娈靛悕2\0......鏈鍚庝竴涓鍚峔0\0 * -* \param lpszReturnBuffer --[out] 写入缓冲区。 -* \param pdwSize --[in][out] 写入缓冲区的按字节长度。 -* \param nSecNum --[out] 将获取的段总数写入该地址。 +* \param lpszReturnBuffer --[out] 鍐欏叆缂撳啿鍖恒 +* \param pdwSize --[in][out] 鍐欏叆缂撳啿鍖虹殑鎸夊瓧鑺傞暱搴︺ +* \param nSecNum --[out] 灏嗚幏鍙栫殑娈垫绘暟鍐欏叆璇ュ湴鍧銆 * \param hProfile --[in] handle to Profile Cache * -* \retval SUCCESS -- 成功 -* \retval 其它 -- 失败则返回具体的执行失败的代码 +* \retval SUCCESS -- 鎴愬姛 +* \retval 鍏跺畠 -- 澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 */ int get_pgcprofile_secnames( pgcchar * lpszReturnBuffer, // address of return buffer @@ -457,16 +457,16 @@ int get_pgcprofile_secnames( ); /*! -* \brief 删除指定的项目。 +* \brief 鍒犻櫎鎸囧畾鐨勯」鐩 * -* 函数逻辑:在缓冲中删除指定的项目,以及该项目上方的注释,然后以覆盖方式重写文件。 +* 鍑芥暟閫昏緫锛氬湪缂撳啿涓垹闄ゆ寚瀹氱殑椤圭洰锛屼互鍙婅椤圭洰涓婃柟鐨勬敞閲婏紝鐒跺悗浠ヨ鐩栨柟寮忛噸鍐欐枃浠躲 * -* \param lpAppName --[in] 段名 -* \param lpKeyName --[in] 项目名 -* \param hProfile --[in] 配置文件的缓冲句柄 +* \param lpAppName --[in] 娈靛悕 +* \param lpKeyName --[in] 椤圭洰鍚 +* \param hProfile --[in] 閰嶇疆鏂囦欢鐨勭紦鍐插彞鏌 * -* \retval SUCCESS -- 成功 -* \retval 其它 -- 失败则返回具体的执行失败的代码 +* \retval SUCCESS -- 鎴愬姛 +* \retval 鍏跺畠 -- 澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 */ int del_pgcprofile_key( const pgcchar * lpAppName, // point to section name const pgcchar * lpKeyName, // point to key name @@ -474,31 +474,31 @@ int del_pgcprofile_key( const pgcchar * lpAppName, // point to section name ); /*! -* \brief 删除指定的段。 +* \brief 鍒犻櫎鎸囧畾鐨勬銆 * -* 函数逻辑:在缓冲中删除指定的段,以及该段上方的注释,然后以覆盖方式重写文件; -* 在删除一个段的同时,该段下属的所有项目(包括项目上方的注释)将被删除。 +* 鍑芥暟閫昏緫锛氬湪缂撳啿涓垹闄ゆ寚瀹氱殑娈碉紝浠ュ強璇ユ涓婃柟鐨勬敞閲婏紝鐒跺悗浠ヨ鐩栨柟寮忛噸鍐欐枃浠讹紱 +* 鍦ㄥ垹闄や竴涓鐨勫悓鏃讹紝璇ユ涓嬪睘鐨勬墍鏈夐」鐩紙鍖呮嫭椤圭洰涓婃柟鐨勬敞閲婏級灏嗚鍒犻櫎銆 * -* \param lpAppName --[in] 段名 -* \param hProfile --[in] 配置文件的缓冲句柄 +* \param lpAppName --[in] 娈靛悕 +* \param hProfile --[in] 閰嶇疆鏂囦欢鐨勭紦鍐插彞鏌 * -* \retval SUCCESS -- 成功 -* \retval 其它 -- 失败则返回具体的执行失败的代码 +* \retval SUCCESS -- 鎴愬姛 +* \retval 鍏跺畠 -- 澶辫触鍒欒繑鍥炲叿浣撶殑鎵ц澶辫触鐨勪唬鐮 */ int del_pgcprofile_sec( const pgcchar * lpAppName, HPROFILE hProfile ); /*! - * \brief 时间比较, 并返回其差值的绝对值 + * \brief 鏃堕棿姣旇緝, 骞惰繑鍥炲叾宸肩殑缁濆鍊 * - * \param ptv1 --[in] 时间1 - * \param ptv2 --[in] 时间2 - * \param ptv_abs_delta --[out] 返回差值的绝对值, 如果该参数不为0. + * \param ptv1 --[in] 鏃堕棿1 + * \param ptv2 --[in] 鏃堕棿2 + * \param ptv_abs_delta --[out] 杩斿洖宸肩殑缁濆鍊, 濡傛灉璇ュ弬鏁颁笉涓0. * - * \retval 小于0 -- ptv1 小于(早于) ptv2 - * \retval 等于0 -- ptv1 等于(等于) ptv2 - * \retval 大于0 -- ptv1 大于(晚于) ptv2 + * \retval 灏忎簬0 -- ptv1 灏忎簬(鏃╀簬) ptv2 + * \retval 绛変簬0 -- ptv1 绛変簬(绛変簬) ptv2 + * \retval 澶т簬0 -- ptv1 澶т簬(鏅氫簬) ptv2 */ int timeval_compare ( const timeval * ptv1, diff --git a/baohua.h b/baohua.h index 2e2e26c..23ed58a 100644 --- a/baohua.h +++ b/baohua.h @@ -3,7 +3,7 @@ #include "common.h" -// 设备信息定义 +// 璁惧淇℃伅瀹氫箟 #define DEVIVE_NAME "CAC-SERVER" #define VERSION "V1.00" #define VERSION_DATE "2023-11-10" @@ -33,7 +33,7 @@ extern DAY_TIME DayTime; void ByPassRecvData( int commid, u_char *buf, int len ); void WatchPortRecvData( void ); -// 从 config.ini 或 portconfig.ini 读信息 +// 浠 config.ini 鎴 portconfig.ini 璇讳俊鎭 u_long GetPrivateProString( char * section, char * entry, char * deflautstr, char * reslut,int len, char *inifile ); u_long atoul( u_char *buf ); @@ -51,7 +51,7 @@ void PortMemeryMalloc( int port, int type ); void YkYtCommandProcess( int port, u_char *buf, int len ); -// 读设备信息,检查芯片状态和读芯片类型和频率 +// 璇昏澶囦俊鎭紝妫鏌ヨ姱鐗囩姸鎬佸拰璇昏姱鐗囩被鍨嬪拰棰戠巼 void ReadPortConfigInfo( u_short netport ); #ifdef OS_WINDOWS diff --git a/basefunc.cpp b/basefunc.cpp index 1a14ae1..4651521 100644 --- a/basefunc.cpp +++ b/basefunc.cpp @@ -338,9 +338,9 @@ double SequenceHostToRtudouble(double dbValue) } //******************************************************************** -//* 获取系统时间函数 * -//*参数: DAY_TIME : 系统时间缓冲区 * -//*返回值:BOOL retval : 是否成功 * +//* 鑾峰彇绯荤粺鏃堕棿鍑芥暟 * +//*鍙傛暟锛 DAY_TIME : 绯荤粺鏃堕棿缂撳啿鍖 * +//*杩斿洖鍊硷細BOOL retval : 鏄惁鎴愬姛 * //******************************************************************** BOOL GetLocalTimeEx(DAY_TIME *ptrDateTime) { @@ -360,9 +360,9 @@ BOOL GetLocalTimeEx(DAY_TIME *ptrDateTime) #endif tm_t = time(NULL); - // 格林威治时间 + // 鏍兼灄濞佹不鏃堕棿 //tmptr = gmtime(&tm_t); - // 本地时间 + // 鏈湴鏃堕棿 tmptr = localtime(&tm_t); if(!tmptr) @@ -384,9 +384,9 @@ BOOL GetLocalTimeEx(DAY_TIME *ptrDateTime) } //******************************************************************** -//* 设置系统时间函数 * -//*参数: DAY_TIME : 时间缓冲区 * -//*返回值:BOOL retval : 是否成功 * +//* 璁剧疆绯荤粺鏃堕棿鍑芥暟 * +//*鍙傛暟锛 DAY_TIME : 鏃堕棿缂撳啿鍖 * +//*杩斿洖鍊硷細BOOL retval : 鏄惁鎴愬姛 * //******************************************************************** //BOOL SetLocalTimeEx(DAY_TIME *ptrDateTime) void SetLocalTimeEx(DAY_TIME *ptrDateTime) @@ -426,7 +426,7 @@ void SetLocalTimeEx(DAY_TIME *ptrDateTime) //pid = vfork(); //if(pid == 0) //{ - // ret = system (szCmdLine); //执行date命令设置时间 + // ret = system (szCmdLine); //鎵цdate鍛戒护璁剧疆鏃堕棿 // exit(0); // //return exit(0); @@ -632,7 +632,7 @@ WORD CalCheckout(u_char *buf, int len) } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// wen 2005.10.19 增加基本函数 +// wen 2005.10.19 澧炲姞鍩烘湰鍑芥暟 int IsHexChar(u_char c) { if((c >= '0') && (c <= '9')) @@ -705,9 +705,9 @@ u_long atoul(char *buf) } /* ! - \brief 删除字符串中的空格、制表符以及注释符 - \param str[in/out] -- 要删除的字符串指针 - \返回值 retval-- 处理后的字符串长度 + \brief 鍒犻櫎瀛楃涓蹭腑鐨勭┖鏍笺佸埗琛ㄧ浠ュ強娉ㄩ噴绗 + \param str[in/out] -- 瑕佸垹闄ょ殑瀛楃涓叉寚閽 + \杩斿洖鍊 retval-- 澶勭悊鍚庣殑瀛楃涓查暱搴 */ int StringCutSpace(char *str) { @@ -725,7 +725,7 @@ int StringCutSpace(char *str) flag = 0; for(i = 0; i < len; i++) { - // 在双引号" "中的字符串不进行去空格和制表符的处理 + // 鍦ㄥ弻寮曞彿" "涓殑瀛楃涓蹭笉杩涜鍘荤┖鏍煎拰鍒惰〃绗︾殑澶勭悊 if(str[i] == '\"') { flag = flag ? 0 : 1; @@ -819,19 +819,19 @@ void PrintFormatMessage(int iMsgClass, char *ptrMsg) } switch(iMsgClass) { - // !输出信息级别为警告信息 + // !杈撳嚭淇℃伅绾у埆涓鸿鍛婁俊鎭 case MSG_CLASS_WARN: sprintf(szMsg, "WARN(%04d): %s\n", getpid(), ptrMsg); break; - /* !输出信息级别为错误信息 + /* !杈撳嚭淇℃伅绾у埆涓洪敊璇俊鎭 case MSG_CLASS_ERROR: sprintf(szMsg, "ERR_(%04d): %s\n", getpid(), ptrMsg); break; - /* !输出信息级别为提示信息 + /* !杈撳嚭淇℃伅绾у埆涓烘彁绀轰俊鎭 case MSG_CLASS_TIP: default: @@ -847,7 +847,7 @@ void PrintFormatMessage(int iMsgClass, char *ptrMsg) } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 超时判断 +// 瓒呮椂鍒ゆ柇 BOOL JudgeTimeOut(DAY_TIME *pStartTime, int iTimeOutSeconds) { int iDays, iVal1, iVal2; @@ -878,7 +878,7 @@ BOOL JudgeTimeOut(DAY_TIME *pStartTime, int iTimeOutSeconds) return TRUE; } -// CRC校验表计算函数 +// CRC鏍¢獙琛ㄨ绠楀嚱鏁 void CalcCRCTableEx(WORD *pwCrcTable, WORD wDivisor) { int i, j, k; @@ -913,7 +913,7 @@ void CalcCRCTableEx(WORD *pwCrcTable, WORD wDivisor) } } -// 计算校验和 +// 璁$畻鏍¢獙鍜 BYTE CalcAllDataLpc(BYTE *pData, int iLen) { int i; diff --git a/basefunc.h b/basefunc.h index db82c3b..eb7bf0e 100644 --- a/basefunc.h +++ b/basefunc.h @@ -7,22 +7,22 @@ DSLIB_API void DebugPrint(char *szDebug); -// 字符串操作 +// 瀛楃涓叉搷浣 DSLIB_API int CmpString(const u_char *str1, const u_char *str2); DSLIB_API int CmpString2(const char *str1, const char *str2); BOOL IsRemarkLine(const char *str); -// 字节转换 -/*! RTU字节顺序为低字节在前,高字节在后 - NET字节顺序为高字节在前,低字节在后 +// 瀛楄妭杞崲 +/*! RTU瀛楄妭椤哄簭涓轰綆瀛楄妭鍦ㄥ墠锛岄珮瀛楄妭鍦ㄥ悗 + NET瀛楄妭椤哄簭涓洪珮瀛楄妭鍦ㄥ墠锛屼綆瀛楄妭鍦ㄥ悗 */ DSLIB_API BOOL IsNetSequence(); DSLIB_API BOOL SequenceHostToRtu(char *pData, int ilen); DSLIB_API BOOL SequenceRtuToHost(char *pData, int ilen); DSLIB_API BOOL SequenceHostToNet(char *pData, int ilen); DSLIB_API BOOL SequenceNetToHost(char *pData, int ilen); -// 超时判断 +// 瓒呮椂鍒ゆ柇 BOOL JudgeTimeOut(DAY_TIME *pStartTime, int iTimeOutSeconds); BOOL GetLocalTimeEx(DAY_TIME *ptrDateTime); void SetLocalTimeEx(DAY_TIME *ptrDateTime); diff --git a/basetype.h b/basetype.h index dc9cb83..f4c42d6 100644 --- a/basetype.h +++ b/basetype.h @@ -31,8 +31,8 @@ typedef int BOOL; typedef struct tagCMDDEF { - u_32 CmdTimerCnt; //命令时间计数 - u_32 CmdTimerConst; //命令时间间隔 + u_32 CmdTimerCnt; //鍛戒护鏃堕棿璁℃暟 + u_32 CmdTimerConst; //鍛戒护鏃堕棿闂撮殧 } CMDDEF, *pCMDDEF; #ifndef _WIN32 diff --git a/buban101.cpp b/buban101.cpp index 7aa2145..4dae9c7 100644 --- a/buban101.cpp +++ b/buban101.cpp @@ -26,43 +26,43 @@ extern char IniFilePath[256]; const char *gpStrBuban101Cmd[BUBAN101_TIMER_CMD_NUM] = { - "总召唤电度数据", - "召唤初始化数据" + "鎬诲彫鍞ょ數搴︽暟鎹", + "鍙敜鍒濆鍖栨暟鎹" }; /*! - 组织结构:链路(间隔)+装置 + 缁勭粐缁撴瀯:閾捐矾(闂撮殧)+瑁呯疆 */ char *gpStrBuban101ConfigInfo[] = { - " ; ***** 部颁101规约参数定义 *****", + " ; ***** 閮ㄩ101瑙勭害鍙傛暟瀹氫箟 *****", " ", - " ; 所有命令召唤周期均以秒为单位。", - " 站地址 = 1 ; 缺省= 0 。", - " 平衡式通讯 = 0 ; 缺省= 0 。", - " 总召唤电度数据 = 120", - " 召唤初始化数据 = 300", - " 超时时间 = 20.0", - " 遥控方式=0", - " ; =0:双点遥控(缺省),=1:单点遥控。", + " ; 鎵鏈夊懡浠ゅ彫鍞ゅ懆鏈熷潎浠ョ涓哄崟浣嶃", + " 绔欏湴鍧 = 1 ; 缂虹渷= 0 銆", + " 骞宠 寮忛氳 = 0 ; 缂虹渷= 0 銆", + " 鎬诲彫鍞ょ數搴︽暟鎹 = 120", + " 鍙敜鍒濆鍖栨暟鎹 = 300", + " 瓒呮椂鏃堕棿 = 20.0", + " 閬ユ帶鏂瑰紡=0", + " ; =0锛氬弻鐐归仴鎺(缂虹渷)锛=1锛氬崟鐐归仴鎺с", " ", - "遥测信息体起始地址=0x701", - "遥信信息体起始地址=0x001", - "遥脉信息体起始地址=0xC01", - "遥控信息体起始地址=0xB01", - " ;以上信息体地址可以配置,缺省值为97版部颁101所规定值", + "閬ユ祴淇℃伅浣撹捣濮嬪湴鍧=0x701", + "閬ヤ俊淇℃伅浣撹捣濮嬪湴鍧=0x001", + "閬ヨ剦淇℃伅浣撹捣濮嬪湴鍧=0xC01", + "閬ユ帶淇℃伅浣撹捣濮嬪湴鍧=0xB01", + " ;浠ヤ笂淇℃伅浣撳湴鍧鍙互閰嶇疆,缂虹渷鍊间负97鐗堥儴棰101鎵瑙勫畾鍊", " ", - " 版本号 = 1", - " ;=0 是buban101(缺省值); =1 是IEC_870_5_101规约", - " ;注意:转发仅支持Buban101规约", + " 鐗堟湰鍙 = 1", + " ;=0 鏄痓uban101(缂虹渷鍊); =1 鏄疘EC_870_5_101瑙勭害", + " ;娉ㄦ剰:杞彂浠呮敮鎸丅uban101瑙勭害", " ", - "*******部颁101规约结束*******", - "", // 结束标志(中间不能含有该空字符串) + "*******閮ㄩ101瑙勭害缁撴潫*******", + "", // 缁撴潫鏍囧織(涓棿涓嶈兘鍚湁璇ョ┖瀛楃涓) }; //******************************************************************** -//* 读取配置函数 * -//*参数:int commid : 端口号 * +//* 璇诲彇閰嶇疆鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void Buban101ReadConfig(int commid) { @@ -92,34 +92,34 @@ void Buban101ReadConfig(int commid) pPortParam = (pBUBAN101PORTPARAM)SioParam[commid].ExtInfo; - /* 只有在SioParam[commid].m_psBaoHu非空时,才会运行到这里 */ + /* 鍙湁鍦⊿ioParam[commid].m_psBaoHu闈炵┖鏃讹紝鎵嶄細杩愯鍒拌繖閲 */ pPortParam->m_psBaoHu = SioParam[commid].m_psBaoHu; sprintf(szSection, "Port%d", commid+1); - if(GetPrivateProString(szSection, "站地址", "0", szbuf, 120, szPortConfig) > 0) + if(GetPrivateProString(szSection, "绔欏湴鍧", "0", szbuf, 120, szPortConfig) > 0) { pPortParam->LinkAddr = atoi(szbuf); } - if(GetPrivateProString(szSection, "平衡式通讯", "0", szbuf, 120, szPortConfig) > 0) + if(GetPrivateProString(szSection, "骞宠 寮忛氳", "0", szbuf, 120, szPortConfig) > 0) { pPortParam->BalanceOrNot = atoi(szbuf); } - if(GetPrivateProString(szSection, "遥控方式", "0", szbuf, 120, szPortConfig) > 0) + if(GetPrivateProString(szSection, "閬ユ帶鏂瑰紡", "0", szbuf, 120, szPortConfig) > 0) { pPortParam->YkMode = atoi(szbuf); } - if(GetPrivateProString(szSection, "超时时间", "20.0", szbuf, 120, szPortConfig) > 0) + if(GetPrivateProString(szSection, "瓒呮椂鏃堕棿", "20.0", szbuf, 120, szPortConfig) > 0) { pPortParam->lTimeOutConst = (long)(atof(szbuf)*1000/TIMER_CNT); } - pPortParam->RtuVersion = GetPrivateProInt(szSection, "版本号", 0, szPortConfig); - pPortParam->iAiBaseAddr = GetPrivateProInt(szSection, "遥测信息体起始地址", INFO_AI_BASEADDR, szPortConfig); - pPortParam->iDiBaseAddr = GetPrivateProInt(szSection, "遥信信息体起始地址", INFO_DI_BASEADDR, szPortConfig); - pPortParam->iPiBaseAddr = GetPrivateProInt(szSection, "遥脉信息体起始地址", INFO_PI_BASEADDR, szPortConfig); - pPortParam->iYkBaseAddr = GetPrivateProInt(szSection, "遥控信息体起始地址", INFO_YKYT_BASEADDR, szPortConfig); + pPortParam->RtuVersion = GetPrivateProInt(szSection, "鐗堟湰鍙", 0, szPortConfig); + pPortParam->iAiBaseAddr = GetPrivateProInt(szSection, "閬ユ祴淇℃伅浣撹捣濮嬪湴鍧", INFO_AI_BASEADDR, szPortConfig); + pPortParam->iDiBaseAddr = GetPrivateProInt(szSection, "閬ヤ俊淇℃伅浣撹捣濮嬪湴鍧", INFO_DI_BASEADDR, szPortConfig); + pPortParam->iPiBaseAddr = GetPrivateProInt(szSection, "閬ヨ剦淇℃伅浣撹捣濮嬪湴鍧", INFO_PI_BASEADDR, szPortConfig); + pPortParam->iYkBaseAddr = GetPrivateProInt(szSection, "閬ユ帶淇℃伅浣撹捣濮嬪湴鍧", INFO_YKYT_BASEADDR, szPortConfig); - // 轮询指令配置 + // 杞鎸囦护閰嶇疆 for(i=0; i 0) { pPortParam->LinkOkCnt = 0; @@ -201,7 +201,7 @@ void Buban101RecvData(int commid, u_char *buf, int len)// pPortParam->m_psBaoHu->m_iRevStatus++; pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; break; - case 3:// 长度计算 + case 3:// 闀垮害璁$畻 if(buf[i] == 0x68) { if(pPortParam->m_au8RecvBuf[1] != pPortParam->m_au8RecvBuf[2]) @@ -225,7 +225,7 @@ void Buban101RecvData(int commid, u_char *buf, int len)// pPortParam->m_psBaoHu->m_iRevStatus=5; } break; - case 4:// 正确接收数据 + case 4:// 姝g‘鎺ユ敹鏁版嵁 pPortParam->m_psBaoHu->m_iNeedRevLength--; pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; if(pPortParam->m_psBaoHu->m_iNeedRevLength > 0) @@ -258,13 +258,13 @@ void Buban101RecvData(int commid, u_char *buf, int len)// #endif //pPortParam->LinkOkCnt = 0; break; - case 5:// 错误接收数据 + case 5:// 閿欒鎺ユ敹鏁版嵁 default: //if(buf[i] == 0x16) if(buf[i] == 0x10) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, @@ -281,7 +281,7 @@ void Buban101RecvData(int commid, u_char *buf, int len)// else if(buf[i] == 0x68) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, @@ -298,7 +298,7 @@ void Buban101RecvData(int commid, u_char *buf, int len)// { pPortParam->m_au8RecvBuf[pPortParam->m_iRecvLen++] = buf[i]; #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, @@ -316,7 +316,7 @@ void Buban101RecvData(int commid, u_char *buf, int len)// if(pPortParam->m_iRecvLen > 200) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, @@ -342,8 +342,8 @@ void Buban101RecvData(int commid, u_char *buf, int len)// } //******************************************************************** -//* 定时器处理函数 * -//*参数:int commid : 端口号 * +//* 瀹氭椂鍣ㄥ鐞嗗嚱鏁 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void Buban101Timer(int commid) { @@ -356,7 +356,7 @@ void Buban101Timer(int commid) pPortParam = (pBUBAN101PORTPARAM)SioParam[commid].ExtInfo; - // 如果为转发端口,则不进行轮询指令的生成。 + // 濡傛灉涓鸿浆鍙戠鍙o紝鍒欎笉杩涜杞鎸囦护鐨勭敓鎴愩 if(PROTOCOL_SLAVE != pPortParam->m_psBaoHu->PortType) { if(pPortParam->LinkOk) @@ -375,30 +375,30 @@ void Buban101Timer(int commid) } //******************************************************************** -//* 遥控遥调数据处理函数 * -//*参数:int commid : 端口号 * -//* u_char buf : 数据源缓冲区指针 * -//* int len : 数据源长度 * +//* 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * +//* u_char buf : 鏁版嵁婧愮紦鍐插尯鎸囬拡 * +//* int len : 鏁版嵁婧愰暱搴 * //******************************************************************** -void Buban101YkYtProcess(int commid, u_char *buf, int len) // 遥控遥调处理 +void Buban101YkYtProcess(int commid, u_char *buf, int len) // 閬ユ帶閬ヨ皟澶勭悊 { int portno, ykytpnt; int iDirect; - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 if(IsExtInfoPtr(commid) == FALSE) { @@ -409,7 +409,7 @@ void Buban101YkYtProcess(int commid, u_char *buf, int len) // 遥 portno = buf[0]+buf[1]*256+buf[2]*65536+buf[3]*16777216; ykytpnt = buf[4]+buf[5]*256+buf[6]*65536+buf[7]*16777216; - // 返校信息(反馈信号) + // 杩旀牎淇℃伅(鍙嶉淇″彿) if(iDirect) { Buban101ProvMakeYkYtCommand(commid, buf, len); @@ -421,10 +421,10 @@ void Buban101YkYtProcess(int commid, u_char *buf, int len) // 遥 } //******************************************************************** -//* 系统下发对时函数 * -//*参数:int commid : 端口号 * +//* 绯荤粺涓嬪彂瀵规椂鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** -void Buban101SendSystemTime(int commid) // 系统对时 +void Buban101SendSystemTime(int commid) // 绯荤粺瀵规椂 { BUBAN101PORTPARAM *pPortParam; @@ -450,15 +450,15 @@ void Buban101SendSystemTime(int commid) // 系统 } //******************************************************************** -//* 系统退出时规约处理函数 * -//*参数:int commid : 端口号 * +//* 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void Buban101Exit(int commid) { - // 释放所有分配的内存 + // 閲婃斁鎵鏈夊垎閰嶇殑鍐呭瓨 } -// 该函数用来驱动由转发端口下发到实际装置的保护命令 +// 璇ュ嚱鏁扮敤鏉ラ┍鍔ㄧ敱杞彂绔彛涓嬪彂鍒板疄闄呰缃殑淇濇姢鍛戒护 void Buban101BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) { } @@ -467,10 +467,10 @@ int Buban101GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB) { return 0; } -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// -/////////////////////////buban101公共函数接口/////////////////////////// -// 校验数据帧是否正确 +/////////////////////////buban101鍏叡鍑芥暟鎺ュ彛/////////////////////////// +// 鏍¢獙鏁版嵁甯ф槸鍚︽纭 BOOL Buban101Check(u_char* msg, int len) { BOOL bRetval = FALSE; @@ -484,14 +484,14 @@ BOOL Buban101Check(u_char* msg, int len) { switch( msg[0] ) { - case 0x10: // 短帧 + case 0x10: // 鐭抚 if ( msg[4] != 0x16 ) break; if ( CalBuban101Lpc( &msg[1], 2 ) != msg[3] ) break; bRetval = TRUE; break; - case 0x68: // 长帧 + case 0x68: // 闀垮抚 if ( msg[0] != msg[3] ) break; if ( msg[len-1] != 0x16 ) @@ -510,7 +510,7 @@ BOOL Buban101Check(u_char* msg, int len) return bRetval; } -//计算 Buban101 累加和检验码 +//璁$畻 Buban101 绱姞鍜屾楠岀爜 u_char CalBuban101Lpc(u_char* msg, int len) { int i; @@ -521,7 +521,7 @@ u_char CalBuban101Lpc(u_char* msg, int len) return retval; } -//指令缓冲区初始化 +//鎸囦护缂撳啿鍖哄垵濮嬪寲 void InitBuban101CommandBuffer(int commid) { pBUBAN101PORTPARAM pPortParam; @@ -536,24 +536,24 @@ void InitBuban101CommandBuffer(int commid) ClearAllCmdFromPollCmdBuf(commid); } -/////////////////////////buban101公共函数接口结束/////////////////////// +/////////////////////////buban101鍏叡鍑芥暟鎺ュ彛缁撴潫/////////////////////// void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 int ykpoint; u_char commandbuf[MAX_POLLCMD_BUF_LEN]; @@ -580,7 +580,7 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) switch(buf[8]) { case 1: - case 4: // 选择 + case 4: // 閫夋嫨 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -589,14 +589,14 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) commandbuf[5] = pPortParam->LinkAddr; switch(pPortParam->YkMode) { - case CONTROL_SINGAL: // 单点控制 + case CONTROL_SINGAL: // 鍗曠偣鎺у埗 if(VER_IEC870_5_101 != pPortParam->RtuVersion) commandbuf[6] = 46; else commandbuf[6] = 45; break; - case CONTROL_DOUBLE: // 双点控制 - case CONTROL_DIRECT: // 直接控制 + case CONTROL_DOUBLE: // 鍙岀偣鎺у埗 + case CONTROL_DIRECT: // 鐩存帴鎺у埗 commandbuf[6] = 46;//(rtumsg->MsgData[3] == 1) ? 46 : 47; break; } @@ -611,7 +611,7 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) } commandbuf[9] = pPortParam->LinkAddr; - // wen 2002.11.18 字节顺序修改 + // wen 2002.11.18 瀛楄妭椤哄簭淇敼 commandbuf[10] = (char)(ykpoint & 0x00ff); commandbuf[11] = (char)((ykpoint & 0xff00)>>8); @@ -650,7 +650,7 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) break; case 2: - case 5: // 执行 + case 5: // 鎵ц commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -659,14 +659,14 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) commandbuf[5] = pPortParam->LinkAddr; switch(pPortParam->YkMode ) { - case CONTROL_SINGAL: // 单点控制 + case CONTROL_SINGAL: // 鍗曠偣鎺у埗 if(VER_IEC870_5_101 != pPortParam->RtuVersion) commandbuf[6] = 46; else commandbuf[6] = 45; break; - case CONTROL_DOUBLE: // 双点控制 - case CONTROL_DIRECT: // 直接控制 + case CONTROL_DOUBLE: // 鍙岀偣鎺у埗 + case CONTROL_DIRECT: // 鐩存帴鎺у埗 commandbuf[6] = 46;//(rtumsg->MsgData[3] == 1) ? 46 : 47; break; } @@ -681,7 +681,7 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) } commandbuf[9] = pPortParam->LinkAddr; - // wen 2002.11.18 字节顺序修改 + // wen 2002.11.18 瀛楄妭椤哄簭淇敼 //*(WORD*)&commandbuf[10] = ykpoint; commandbuf[10] = (char)(ykpoint & 0x00ff); commandbuf[11] = (char)((ykpoint & 0xff00)>>8); @@ -702,14 +702,14 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) commandbuf[5] = pPortParam->LinkAddr; switch(pPortParam->YkMode) { - case CONTROL_SINGAL: // 单点控制 + case CONTROL_SINGAL: // 鍗曠偣鎺у埗 if(VER_IEC870_5_101 != pPortParam->RtuVersion) commandbuf[6] = 46; else commandbuf[6] = 45; break; - case CONTROL_DOUBLE: // 双点控制 - case CONTROL_DIRECT: // 直接控制 + case CONTROL_DOUBLE: // 鍙岀偣鎺у埗 + case CONTROL_DIRECT: // 鐩存帴鎺у埗 commandbuf[6] = 46;//(rtumsg->MsgData[3] == 1) ? 46 : 47; break; } @@ -724,7 +724,7 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) } commandbuf[9] = pPortParam->LinkAddr; - // wen 2002.11.18 字节顺序修改 + // wen 2002.11.18 瀛楄妭椤哄簭淇敼 //*(WORD*)&commandbuf[10] = ykpoint; commandbuf[10] = (char)(ykpoint & 0x00ff); commandbuf[11] = (char)((ykpoint & 0xff00)>>8); @@ -743,11 +743,11 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len) } } -//===========================以下为指令生成函数======================= +//===========================浠ヤ笅涓烘寚浠ょ敓鎴愬嚱鏁======================= /*! - \brief 寻找并生成下一条命令 - \param u_32 portno : RTU端口号 - \param i_32 iBuIdx : 间隔装置索引 + \brief 瀵绘壘骞剁敓鎴愪笅涓鏉″懡浠 + \param u_32 portno : RTU绔彛鍙 + \param i_32 iBuIdx : 闂撮殧瑁呯疆绱㈠紩 */ void MakeBuban101Command(u_32 commid, u_char cmdidx) { @@ -761,7 +761,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) pPortParam = (pBUBAN101PORTPARAM)SioParam[commid].ExtInfo; switch ( cmdidx ) { - case ASK_LINK: // 请求链路 + case ASK_LINK: // 璇锋眰閾捐矾 commandbuf[0] = 0x10; commandbuf[1] = 0x49; commandbuf[2] = pPortParam->LinkAddr; @@ -769,7 +769,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, commandbuf, 5); break; - case RST_LINK: // 复位链路 + case RST_LINK: // 澶嶄綅閾捐矾 commandbuf[0] = 0x10; commandbuf[1] = 0x40; commandbuf[2] = pPortParam->LinkAddr; @@ -777,7 +777,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, commandbuf, 5); break; - case RTU_TIME: // 时间同步 + case RTU_TIME: // 鏃堕棿鍚屾 GetLocalTimeEx(&sCurTime); commandbuf[0] = 0x68; commandbuf[1] = 15; @@ -803,7 +803,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) PutPollCmdToBuf(commid, INSERT_POLL_CMD, 0, commandbuf, 21); break; - case ASK_DI_DATA: // 召唤2级数据YX + case ASK_DI_DATA: // 鍙敜2绾ф暟鎹甕X for ( i = 0; i < (pPortParam->m_psBaoHu->DiNum+MAX_GROUP_DINUM-1)/MAX_GROUP_DINUM; i++) { commandbuf[0] = 0x68; @@ -824,7 +824,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) } break; - case ASK_AI_DATA: // 召唤2级数据YC + case ASK_AI_DATA: // 鍙敜2绾ф暟鎹甕C for ( i = 0; i < (pPortParam->m_psBaoHu->AiNum+MAX_GROUP_AINUM-1)/MAX_GROUP_AINUM; i++) { commandbuf[0] = 0x68; @@ -845,7 +845,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) } break; - case ASK_PI_DATA: // 召唤2级数据YM + case ASK_PI_DATA: // 鍙敜2绾ф暟鎹甕M for ( i = 0; i < (pPortParam->m_psBaoHu->PiNum+MAX_GROUP_PINUM-1)/MAX_GROUP_PINUM; i++) { commandbuf[0] = 0x68; @@ -869,7 +869,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) } break; - case ASK_PI: //召唤电度量 + case ASK_PI: //鍙敜鐢靛害閲 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -891,7 +891,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) pPortParam->Initdata = FALSE; break; - case ASK_ALL_DATA:// 召唤初始化数据 + case ASK_ALL_DATA:// 鍙敜鍒濆鍖栨暟鎹 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -910,7 +910,7 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) pPortParam->Initdata = FALSE; break; - case ASK_SECOND_DATA:// 召唤2级数据 + case ASK_SECOND_DATA:// 鍙敜2绾ф暟鎹 commandbuf[0] = 0x10; commandbuf[1] = 0x5b; commandbuf[2] = pPortParam->LinkAddr; @@ -918,14 +918,14 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, commandbuf, 5); break; - case ASK_FIRST_DATA: // 召唤1级数据 + case ASK_FIRST_DATA: // 鍙敜1绾ф暟鎹 commandbuf[0] = 0x10; commandbuf[1] = 0x5a; commandbuf[2] = pPortParam->LinkAddr; commandbuf[4] = 0x16; PutPollCmdToBuf(commid, INSERT_POLL_CMD, 0, commandbuf, 5); break; - case ACK: //确认回答 + case ACK: //纭鍥炵瓟 commandbuf[0] = 0x10; commandbuf[1] = 0x00; commandbuf[2] = pPortParam->LinkAddr; @@ -942,23 +942,23 @@ void MakeBuban101Command(u_32 commid, u_char cmdidx) } } -//生成遥控遥调指令 +//鐢熸垚閬ユ帶閬ヨ皟鎸囦护 void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=成功, 0=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎴愬姛, 0=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 int ykpoint; u_char commandbuf[MAX_POLLCMD_BUF_LEN]; @@ -975,7 +975,7 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) switch(buf[8]) { case 1: - case 4: // 选择 + case 4: // 閫夋嫨 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -984,14 +984,14 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) commandbuf[5] = pPortParam->LinkAddr; switch(pPortParam->YkMode) { - case CONTROL_SINGAL: // 单点控制 + case CONTROL_SINGAL: // 鍗曠偣鎺у埗 if(VER_IEC870_5_101 != pPortParam->RtuVersion) commandbuf[6] = 46; else commandbuf[6] = 45; break; - case CONTROL_DOUBLE: // 双点控制 - case CONTROL_DIRECT: // 直接控制 + case CONTROL_DOUBLE: // 鍙岀偣鎺у埗 + case CONTROL_DIRECT: // 鐩存帴鎺у埗 commandbuf[6] = 46;//(rtumsg->MsgData[3] == 1) ? 46 : 47; break; } @@ -999,7 +999,7 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) commandbuf[8] = 6; commandbuf[9] = pPortParam->LinkAddr; - // wen 2002.11.18 字节顺序修改 + // wen 2002.11.18 瀛楄妭椤哄簭淇敼 commandbuf[10] = (char)(ykpoint & 0x00ff); commandbuf[11] = (char)((ykpoint & 0xff00)>>8); @@ -1035,7 +1035,7 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) break; case 2: - case 5: // 执行 + case 5: // 鎵ц commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -1044,14 +1044,14 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) commandbuf[5] = pPortParam->LinkAddr; switch(pPortParam->YkMode ) { - case CONTROL_SINGAL: // 单点控制 + case CONTROL_SINGAL: // 鍗曠偣鎺у埗 if(VER_IEC870_5_101 != pPortParam->RtuVersion) commandbuf[6] = 46; else commandbuf[6] = 45; break; - case CONTROL_DOUBLE: // 双点控制 - case CONTROL_DIRECT: // 直接控制 + case CONTROL_DOUBLE: // 鍙岀偣鎺у埗 + case CONTROL_DIRECT: // 鐩存帴鎺у埗 commandbuf[6] = 46;//(rtumsg->MsgData[3] == 1) ? 46 : 47; break; } @@ -1059,7 +1059,7 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) commandbuf[8] = 6; commandbuf[9] = pPortParam->LinkAddr; - // wen 2002.11.18 字节顺序修改 + // wen 2002.11.18 瀛楄妭椤哄簭淇敼 //*(WORD*)&commandbuf[10] = ykpoint; commandbuf[10] = (char)(ykpoint & 0x00ff); commandbuf[11] = (char)((ykpoint & 0xff00)>>8); @@ -1079,14 +1079,14 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) commandbuf[5] = pPortParam->LinkAddr; switch(pPortParam->YkMode) { - case CONTROL_SINGAL: // 单点控制 + case CONTROL_SINGAL: // 鍗曠偣鎺у埗 if(VER_IEC870_5_101 != pPortParam->RtuVersion) commandbuf[6] = 46; else commandbuf[6] = 45; break; - case CONTROL_DOUBLE: // 双点控制 - case CONTROL_DIRECT: // 直接控制 + case CONTROL_DOUBLE: // 鍙岀偣鎺у埗 + case CONTROL_DIRECT: // 鐩存帴鎺у埗 commandbuf[6] = 46;//(rtumsg->MsgData[3] == 1) ? 46 : 47; break; } @@ -1094,7 +1094,7 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) commandbuf[8] = 8; commandbuf[9] = pPortParam->LinkAddr; - // wen 2002.11.18 字节顺序修改 + // wen 2002.11.18 瀛楄妭椤哄簭淇敼 //*(WORD*)&commandbuf[10] = ykpoint; commandbuf[10] = (char)(ykpoint & 0x00ff); commandbuf[11] = (char)((ykpoint & 0xff00)>>8); @@ -1112,11 +1112,11 @@ void MakeBuBan101YkYtCommand( u_32 commid, u_char *buf, int len ) } } -//===================以下为POLLING规约常规函数接口====================== +//===================浠ヤ笅涓篜OLLING瑙勭害甯歌鍑芥暟鎺ュ彛====================== /*! - \brief 寻找并生成下一条命令 - \param u_32 portno : RTU端口号 - \param i_32 iBuIdx : 间隔装置索引 + \brief 瀵绘壘骞剁敓鎴愪笅涓鏉″懡浠 + \param u_32 portno : RTU绔彛鍙 + \param i_32 iBuIdx : 闂撮殧瑁呯疆绱㈠紩 */ void Buban101FindNextCmd(int commid) { @@ -1180,8 +1180,8 @@ void Buban101FindNextCmd(int commid) if (!pPortParam->Initdata ) { - // IEC-870-5-101中多帧数据轮询 - //张掖的东方电子IEC101要求总召唤期间不请求二级数据 + // IEC-870-5-101涓甯ф暟鎹疆璇 + //寮犳帠鐨勪笢鏂圭數瀛怚EC101瑕佹眰鎬诲彫鍞ゆ湡闂翠笉璇锋眰浜岀骇鏁版嵁 //if(VER_IEC870_5_101 == pPortParam->RtuVersion) // MakeBuban101Command( port, ASK_SECOND_DATA ); return; @@ -1270,8 +1270,8 @@ BOOL Buban101FindNextCmdEx(int commid) if (!pPortParam->Initdata ) { - // IEC-870-5-101中多帧数据轮询 - //张掖的东方电子IEC101要求总召唤期间不请求二级数据 + // IEC-870-5-101涓甯ф暟鎹疆璇 + //寮犳帠鐨勪笢鏂圭數瀛怚EC101瑕佹眰鎬诲彫鍞ゆ湡闂翠笉璇锋眰浜岀骇鏁版嵁 //if(VER_IEC870_5_101 == pPortParam->RtuVersion) // MakeBuban101Command( port, ASK_SECOND_DATA ); return bRetVal; @@ -1326,7 +1326,7 @@ void Buban101SendCmdFormPollCmdBuf(int commid) pPortParam->m_psBaoHu->ForceWaitCnt--; if(pPortParam->m_psBaoHu->ForceWaitCnt == 0) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); } @@ -1346,7 +1346,7 @@ void Buban101SendCmdFormPollCmdBuf(int commid) pPortParam->m_psBaoHu->RetryCnt++; if(pPortParam->m_psBaoHu->RetryCnt > pPortParam->m_psBaoHu->Retry) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); } @@ -1361,7 +1361,7 @@ void Buban101SendCmdFormPollCmdBuf(int commid) if(pPortParam->m_psBaoHu->SendCmdFlag && pPortParam->m_psBaoHu->RevCmdFlag) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); } @@ -1456,14 +1456,14 @@ void Buban101SendCmdFormPollCmdBuf(int commid) } else { - ClearCmdFormPollCmdBuf(commid); // 清除当前命令 - //ClearCmdAllFlag(commid); // 清除当前命令 + ClearCmdFormPollCmdBuf(commid); // 娓呴櫎褰撳墠鍛戒护 + //ClearCmdAllFlag(commid); // 娓呴櫎褰撳墠鍛戒护 } } } -//===========================指令生成函数结束========================= +//===========================鎸囦护鐢熸垚鍑芥暟缁撴潫========================= -//===========================以下为数据处理函数======================= +//===========================浠ヤ笅涓烘暟鎹鐞嗗嚱鏁======================= void Buban101ProcessData(u_32 commid, BUBAN101PORTPARAM *psPortParam, BOOL bProcess) { RTUMSG msg; @@ -1479,14 +1479,14 @@ void Buban101ProcessData(u_32 commid, BUBAN101PORTPARAM *psPortParam, BOOL bProc msg.MsgData[msg.MsgLen] = CHECK_WHOLE; msg.MsgData[msg.MsgLen+1] = 0; - // 子站数据处理 + // 瀛愮珯鏁版嵁澶勭悊 if(PROTOCOL_SLAVE == pPortParam->m_psBaoHu->PortType) { ProvBuban101dataProcess(commid, &msg); return; } - // 主站数据处理 + // 涓荤珯鏁版嵁澶勭悊 switch(msg.MsgData[0]) { case 0x68: @@ -1510,8 +1510,8 @@ void Buban101NoChanged(RTUMSG * rtumsg) } //*************************************************************** -//* 接收的数据为固定帧长时的处理程序 -//*参数 RTUMSG* rtumsg:接收到的数据信息 +//* 鎺ユ敹鐨勬暟鎹负鍥哄畾甯ч暱鏃剁殑澶勭悊绋嬪簭 +//*鍙傛暟 RTUMSG* rtumsg:鎺ユ敹鍒扮殑鏁版嵁淇℃伅 //*************************************************************** void Buban101shortprocess(RTUMSG *rtumsg) { @@ -1526,13 +1526,13 @@ void Buban101shortprocess(RTUMSG *rtumsg) commid = rtumsg->PortIdx; pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - // wen 2003.08.11 判断是否发送全数据是在复位刚刚完成时 + // wen 2003.08.11 鍒ゆ柇鏄惁鍙戦佸叏鏁版嵁鏄湪澶嶄綅鍒氬垰瀹屾垚鏃 bMakeAllDataFlag = pPortParam->LinkOk & pPortParam->RstLinkOk; if((rtumsg->MsgData[1] & 0xc0) == 0xc0) { switch(rtumsg->MsgData[1] & 0x0f) { - case 0x0: //复位链路确认0000 + case 0x0: //澶嶄綅閾捐矾纭0000 if(!pPortParam->RstLinkOk) { MakeBuban101Command(commid, ASK_LINK); @@ -1553,7 +1553,7 @@ void Buban101shortprocess(RTUMSG *rtumsg) MakeBuban101Command(commid, ACK); pPortParam->RstLinkOk = TRUE; break; - case 0x09: //从站请求主站 + case 0x09: //浠庣珯璇锋眰涓荤珯 if(bMakeAllDataFlag) { InitBuban101CommandBuffer(commid); @@ -1566,17 +1566,17 @@ void Buban101shortprocess(RTUMSG *rtumsg) return; } - //子站数据区已满如何处理 + //瀛愮珯鏁版嵁鍖哄凡婊″浣曞鐞 if(rtumsg->MsgData[1] & 0x10) { ; } else { - // wen 2004.03.16 修改一级数据的问询条件,只要有一级数据就问询 + // wen 2004.03.16 淇敼涓绾ф暟鎹殑闂鏉′欢锛屽彧瑕佹湁涓绾ф暟鎹氨闂 //if( bMakeAllDataFlag ) //{ - // //请求一级数据 + // //璇锋眰涓绾ф暟鎹 // if ( (rtumsg->MsgData[1] & 0x20) && pPortParam->Initdata ) // MakeBuban101Command ( port, ASK_FIRST_DATA); //} @@ -1588,7 +1588,7 @@ void Buban101shortprocess(RTUMSG *rtumsg) switch(rtumsg->MsgData[1] & 0x0f) { - case 0x0: //复位链路确认0000 + case 0x0: //澶嶄綅閾捐矾纭0000 if(pPortParam->RstLinkOk) { pPortParam->LinkOk = TRUE; @@ -1612,7 +1612,7 @@ void Buban101shortprocess(RTUMSG *rtumsg) pPortParam->RstLinkOk = TRUE; pPortParam->CtlByte = 0xff; break; - case 0xb: //链路完好1011 + case 0xb: //閾捐矾瀹屽ソ1011 MakeBuban101Command(commid, RST_LINK); break; case 0x09: @@ -1624,8 +1624,8 @@ void Buban101shortprocess(RTUMSG *rtumsg) } //*************************************************************** -//* 接收的数据为可变帧长时的处理程序 -//*参数 RTUMSG* rtumsg:接收到的数据信息 +//* 鎺ユ敹鐨勬暟鎹负鍙彉甯ч暱鏃剁殑澶勭悊绋嬪簭 +//*鍙傛暟 RTUMSG* rtumsg:鎺ユ敹鍒扮殑鏁版嵁淇℃伅 //*************************************************************** void Buban101longprocess(RTUMSG *rtumsg) { @@ -1639,15 +1639,15 @@ void Buban101longprocess(RTUMSG *rtumsg) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; if ((rtumsg->MsgData[4] & 0xc0) != 0xc0) { - //子站数据区已满如何处理 + //瀛愮珯鏁版嵁鍖哄凡婊″浣曞鐞 if( rtumsg->MsgData[4] & 0x10) { ; } else { - // wen 2004.03.16 修改一级数据的问询条件,只要有一级数据就问询 - ////请求一级数据 + // wen 2004.03.16 淇敼涓绾ф暟鎹殑闂鏉′欢锛屽彧瑕佹湁涓绾ф暟鎹氨闂 + ////璇锋眰涓绾ф暟鎹 //if( rtumsg->MsgData[4] & 0x20 && pPortParam->Initdata) // MakeBuban101Command (rtumsg->PortNumber, ASK_FIRST_DATA); if(rtumsg->MsgData[4] & 0x20) @@ -1659,116 +1659,116 @@ void Buban101longprocess(RTUMSG *rtumsg) switch (rtumsg->MsgData[6]) { - case 1: // 单点遥信处理 + case 1: // 鍗曠偣閬ヤ俊澶勭悊 Buban101DiDataProcess( rtumsg, 0 ); break; - case 2: // 单点遥信SOE处理 + case 2: // 鍗曠偣閬ヤ俊SOE澶勭悊 Buban101SoeDataProcess( rtumsg, 0 ); break; - case 3: // 双点遥信处理 + case 3: // 鍙岀偣閬ヤ俊澶勭悊 Buban101DiDataProcess( rtumsg, 1 ); break; - case 4: // 双点遥信SOE处理 + case 4: // 鍙岀偣閬ヤ俊SOE澶勭悊 Buban101SoeDataProcess( rtumsg, 1 ); break; - case 5: // 变压器分接头位置 + case 5: // 鍙樺帇鍣ㄥ垎鎺ュご浣嶇疆 break; - case 6: // 变压器分接头位置带时标 + case 6: // 鍙樺帇鍣ㄥ垎鎺ュご浣嶇疆甯︽椂鏍 break; - case 7: // 子站远动终端状态 + case 7: // 瀛愮珯杩滃姩缁堢鐘舵 break; - case 9: // 带品质无时标遥测 + case 9: // 甯﹀搧璐ㄦ棤鏃舵爣閬ユ祴 Buban101AiWithPzDataProcess( rtumsg, 0 ); break; - case 10: // 带品质带时标遥测 + case 10: // 甯﹀搧璐ㄥ甫鏃舵爣閬ユ祴 Buban101AiWithPzDataProcess( rtumsg, 1 ); break; - case 20: // 子站传送遥信变位帧 + case 20: // 瀛愮珯浼犻侀仴淇″彉浣嶅抚 Buban101AutoSendDiProcess( rtumsg ); break; - case 21: // 全遥测数据处理 或变化数据 + case 21: // 鍏ㄩ仴娴嬫暟鎹鐞 鎴栧彉鍖栨暟鎹 Buban101AllAiDataProcess( rtumsg ); break; - case 15: // 不带时标电度 + case 15: // 涓嶅甫鏃舵爣鐢靛害 Buban101PiDataProcess( rtumsg ); break; - case 16: // 带时标电度 + case 16: // 甯︽椂鏍囩數搴 Buban101PiWithTimeDataProcess( rtumsg ); break; - case 17: // 继电保护装置单个事件顺序记录帧 - case 18: // 继电保护装置成组记录启动事件顺序 - case 19: // 继电保护装置成组输出电路的事件顺序记录 + case 17: // 缁х數淇濇姢瑁呯疆鍗曚釜浜嬩欢椤哄簭璁板綍甯 + case 18: // 缁х數淇濇姢瑁呯疆鎴愮粍璁板綍鍚姩浜嬩欢椤哄簭 + case 19: // 缁х數淇濇姢瑁呯疆鎴愮粍杈撳嚭鐢佃矾鐨勪簨浠堕『搴忚褰 Buban101BaoHuDataProcess( rtumsg ); break; - // wen 2004.05.27 华东101规约修改点(???) - case 30: // 带CP56Time2a时标的单点信息 M_SP_TB_1 + // wen 2004.05.27 鍗庝笢101瑙勭害淇敼鐐(???) + case 30: // 甯P56Time2a鏃舵爣鐨勫崟鐐逛俊鎭 M_SP_TB_1 Buban101SoeDataProcessWithCP56Time2a( rtumsg, 0 ); break; - case 31: // 带CP56Time2a时标的双点信息 M_DP_TB_1 + case 31: // 甯P56Time2a鏃舵爣鐨勫弻鐐逛俊鎭 M_DP_TB_1 Buban101SoeDataProcessWithCP56Time2a( rtumsg, 1 ); break; - case 32: // 带CP56Time2a时标的步位置信息 M_ST_TB_1 + case 32: // 甯P56Time2a鏃舵爣鐨勬浣嶇疆淇℃伅 M_ST_TB_1 break; - case 33: // 带CP56Time2a时标的32比特串 M_BO_TB_1 + case 33: // 甯P56Time2a鏃舵爣鐨32姣旂壒涓 M_BO_TB_1 break; - case 34: // 带CP56Time2a时标的测量值, 规一化值 M_ME_TD_1 + case 34: // 甯P56Time2a鏃舵爣鐨勬祴閲忓, 瑙勪竴鍖栧 M_ME_TD_1 Buban101AiWithDataProcessWithM_ME_TD_1( rtumsg ); break; - case 35: // 带CP56Time2a时标的测量值, 标度化值 M_ME_TE_1 + case 35: // 甯P56Time2a鏃舵爣鐨勬祴閲忓, 鏍囧害鍖栧 M_ME_TE_1 Buban101AiWithDataProcessWithM_ME_TE_1( rtumsg ); break; - case 36: // 带CP56Time2a时标的测量值, 短浮点数 M_ME_TF_1 + case 36: // 甯P56Time2a鏃舵爣鐨勬祴閲忓, 鐭诞鐐规暟 M_ME_TF_1 Buban101AiWithDataProcessWithM_ME_TF_1( rtumsg ); break; - case 37: // 带CP56Time2a时标的累计量 M_IT_TB_1 + case 37: // 甯P56Time2a鏃舵爣鐨勭疮璁¢噺 M_IT_TB_1 Buban101PiWithTimeDataProcessWithM_IT_TB_1( rtumsg ); break; - case 38: // 带CP56Time2a时标的继电保护装置事件 M_EP_TD_1 + case 38: // 甯P56Time2a鏃舵爣鐨勭户鐢典繚鎶よ缃簨浠 M_EP_TD_1 break; - case 39: // 带CP56Time2a时标的继电保护装置成组启动事件 M_EP_TE_1 + case 39: // 甯P56Time2a鏃舵爣鐨勭户鐢典繚鎶よ缃垚缁勫惎鍔ㄤ簨浠 M_EP_TE_1 break; - case 40: // 带CP56Time2a时标的继电保拌装置成组输出电路信息M_EP_TF_1 + case 40: // 甯P56Time2a鏃舵爣鐨勭户鐢典繚鎷岃缃垚缁勮緭鍑虹數璺俊鎭疢_EP_TF_1 break; case 45: - case 46: // 遥控返校 - case 47: // 遥调返校 + case 46: // 閬ユ帶杩旀牎 + case 47: // 閬ヨ皟杩旀牎 Buban101YkYtAck( rtumsg ); break; - case 48: // 设定确认 + case 48: // 璁惧畾纭 Buban101SetAck( rtumsg ); break; - case 100: // 总召唤确认 + case 100: // 鎬诲彫鍞ょ‘璁 Buban101InitdataProecss( rtumsg ); break; - case 101: // 电度结束帧 + case 101: // 鐢靛害缁撴潫甯 Buban101PidataEnd( rtumsg ); break; - case 103: // 时间同步确认帧 + case 103: // 鏃堕棿鍚屾纭甯 Buban101SynTime( rtumsg ); break; default: #ifdef _DEBUG_MSG_ - DebugPrint("接收到不认识的命令,请检查程序.\n"); + DebugPrint("鎺ユ敹鍒颁笉璁よ瘑鐨勫懡浠わ紝璇锋鏌ョ▼搴.\n"); #endif break; } } -/* Buban101 初始化数据处理 */ +/* Buban101 鍒濆鍖栨暟鎹鐞 */ void Buban101InitdataProecss(RTUMSG * rtumsg) { int commid; @@ -1780,16 +1780,16 @@ void Buban101InitdataProecss(RTUMSG * rtumsg) switch(rtumsg->MsgData[8]) { case 7: - case 9://总召唤确认 + case 9://鎬诲彫鍞ょ‘璁 break; - case 10://总召唤结束 + case 10://鎬诲彫鍞ょ粨鏉 pPortParam->Initdata = TRUE; break; } } -/* 电度结束帧 */ +/* 鐢靛害缁撴潫甯 */ void Buban101PidataEnd(RTUMSG * rtumsg) { int commid; @@ -1806,22 +1806,22 @@ void Buban101PidataEnd(RTUMSG * rtumsg) switch(rtumsg->MsgData[8]) { - case 7://总召唤确认 + case 7://鎬诲彫鍞ょ‘璁 break; - case 10://电度召唤结束 + case 10://鐢靛害鍙敜缁撴潫 pPortParam->Initdata = TRUE; break; } } -//设定确认 +//璁惧畾纭 void Buban101SetAck( RTUMSG *rtumsg) { } -//Buban101 遥控遥调返校程序 +//Buban101 閬ユ帶閬ヨ皟杩旀牎绋嬪簭 void Buban101YkYtAck(RTUMSG * rtumsg) { int commid; @@ -1836,11 +1836,11 @@ void Buban101YkYtAck(RTUMSG * rtumsg) YkYtParam.m_iYkYtPnt %= 256; - if(rtumsg->MsgData[12] & 0x80) //选择返校 + if(rtumsg->MsgData[12] & 0x80) //閫夋嫨杩旀牎 { YkYtParam.m_iYkYtStep = STEP_YKYT_SELECT; - //此位为肯定或否定确认位 + //姝や綅涓鸿偗瀹氭垨鍚﹀畾纭浣 if(rtumsg->MsgData[8] & 0x40) { YkYtParam.m_iYkYtOperate = 3; @@ -1851,7 +1851,7 @@ void Buban101YkYtAck(RTUMSG * rtumsg) { switch(rtumsg->MsgData[12] & 0x03) { - case 1://控分 + case 1://鎺у垎 if(pPortParam->m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate == 2) { YkYtParam.m_iYkYtOperate = pPortParam->m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate; @@ -1861,7 +1861,7 @@ void Buban101YkYtAck(RTUMSG * rtumsg) YkYtParam.m_iYkYtOperate = 3; } break; - case 2://控合 + case 2://鎺у悎 if(pPortParam->m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate == 1) { YkYtParam.m_iYkYtOperate = pPortParam->m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate; @@ -1878,7 +1878,7 @@ void Buban101YkYtAck(RTUMSG * rtumsg) } else { - // 控合 + // 鎺у悎 if( rtumsg->MsgData[12] & 0x01 ) { if(pPortParam->m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate == 1) @@ -1890,7 +1890,7 @@ void Buban101YkYtAck(RTUMSG * rtumsg) YkYtParam.m_iYkYtOperate = 3; } } - // 控分 + // 鎺у垎 else { if(pPortParam->m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate == 2) @@ -1908,16 +1908,16 @@ void Buban101YkYtAck(RTUMSG * rtumsg) YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP; SendYkYtCommand2(commid, &YkYtParam); } - else //执行并完成 + else //鎵ц骞跺畬鎴 { - //此位为肯定或否定确认位 + //姝や綅涓鸿偗瀹氭垨鍚﹀畾纭浣 if( ( rtumsg->MsgData[8] & 0x40 ) == 0 ) { switch( rtumsg->MsgData[8] ) { - case 0x07://执行确认 + case 0x07://鎵ц纭 break; - case 0x0a://执行完成 + case 0x0a://鎵ц瀹屾垚 break; default: break; @@ -1926,7 +1926,7 @@ void Buban101YkYtAck(RTUMSG * rtumsg) } } -/* Buban101 对时程序 */ +/* Buban101 瀵规椂绋嬪簭 */ void Buban101SynTime(RTUMSG * rtumsg) { int commid; @@ -1955,7 +1955,7 @@ void Buban101SynTime(RTUMSG * rtumsg) SetLocalTimeEx(&stime); } -/* 子站主动传送遥信变位帧 */ +/* 瀛愮珯涓诲姩浼犻侀仴淇″彉浣嶅抚 */ void Buban101AutoSendDiProcess(RTUMSG *rtumsg) { int i, j, dipnt, len; @@ -1970,10 +1970,10 @@ void Buban101AutoSendDiProcess(RTUMSG *rtumsg) len = (int)rtumsg->MsgData[1]; - //从站主动上发 变化遥信 - //if( ( rtumsg->MsgData[8] & 0x0f ) == 0x03 ) //东方电子继保所使用该报文(表示号20,传送原因20)应答总召唤,因此将此判断取消jessie in 2003.04.15 + //浠庣珯涓诲姩涓婂彂 鍙樺寲閬ヤ俊 + //if( ( rtumsg->MsgData[8] & 0x0f ) == 0x03 ) //涓滄柟鐢靛瓙缁т繚鎵浣跨敤璇ユ姤鏂(琛ㄧず鍙20锛屼紶閫佸師鍥20)搴旂瓟鎬诲彫鍞わ紝鍥犳灏嗘鍒ゆ柇鍙栨秷jessie in 2003.04.15 //{ - // wen 2002.09.06 遥测遥信数据处理过长 + // wen 2002.09.06 閬ユ祴閬ヤ俊鏁版嵁澶勭悊杩囬暱 //len -= 6; //for ( i = 10; i < 10 + len; i += 7 ) for ( i = 10; i < 4 + len; i += 7 ) @@ -1988,7 +1988,7 @@ void Buban101AutoSendDiProcess(RTUMSG *rtumsg) for( j = 0; j < 16; j++ ) { - //张掖的变化检出状态为0,故取消此判断 jessie in 2004.19 + //寮犳帠鐨勫彉鍖栨鍑虹姸鎬佷负0锛屾晠鍙栨秷姝ゅ垽鏂 jessie in 2004.19 //if( wStatusBit & (0x0001 << j) ) //{ if( wStatus & (0x0001 << j) ) @@ -2000,7 +2000,7 @@ void Buban101AutoSendDiProcess(RTUMSG *rtumsg) } } - // wen 2005.09.28 修改对主动上送数据的确认应答 + // wen 2005.09.28 淇敼瀵逛富鍔ㄤ笂閫佹暟鎹殑纭搴旂瓟 // MakeBuban101Command(commid, ACK); if(pPortParam->BalanceOrNot) { @@ -2012,7 +2012,7 @@ void Buban101AutoSendDiProcess(RTUMSG *rtumsg) //} } -// Buban101 带品质描述的遥测数据处理 +// Buban101 甯﹀搧璐ㄦ弿杩扮殑閬ユ祴鏁版嵁澶勭悊 void Buban101AiWithPzDataProcess(RTUMSG * rtumsg, int flag) { int i, aipnt, len; @@ -2025,7 +2025,7 @@ void Buban101AiWithPzDataProcess(RTUMSG * rtumsg, int flag) len = (int)rtumsg->MsgData[1]; - //处理变化遥测 + //澶勭悊鍙樺寲閬ユ祴 if((rtumsg->MsgData[7] & 0x80)==0) { for ( i = 10; i < 4 + len; i += 5 ) @@ -2035,19 +2035,19 @@ void Buban101AiWithPzDataProcess(RTUMSG * rtumsg, int flag) pntmsg.RawValue = rtumsg->MsgData[i+3]; pntmsg.RawValue = (pntmsg.RawValue<<8) + rtumsg->MsgData[i+2]; - // 品质描述 + // 鍝佽川鎻忚堪 // rtumsg->MsgData[i+4]; SetPntMsg(commid, aipnt, (void *)&pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); - // 时标 + // 鏃舵爣 if(flag) { i += 3; } } } - else// 处理遥测全数据 + else// 澶勭悊閬ユ祴鍏ㄦ暟鎹 { aipnt = rtumsg->MsgData[11]; @@ -2063,10 +2063,10 @@ void Buban101AiWithPzDataProcess(RTUMSG * rtumsg, int flag) SetPntMsg(commid, aipnt, (void *)&pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); aipnt++; - // 品质描述 + // 鍝佽川鎻忚堪 // rtumsg->MsgData[i+2]; - // 时标 + // 鏃舵爣 if ( flag ) i += 3; } @@ -2086,7 +2086,7 @@ void Buban101AllAiDataProcess(RTUMSG *rtumsg) len = (int)rtumsg->MsgData[1]; aipnt = 0; - //处理变化遥测 + //澶勭悊鍙樺寲閬ユ祴 if((rtumsg->MsgData[7] & 0x80)==0) { for ( i = 10; i < len + 4; i+= 4 ) @@ -2103,7 +2103,7 @@ void Buban101AllAiDataProcess(RTUMSG *rtumsg) return; } - //处理全遥测 + //澶勭悊鍏ㄩ仴娴 aipnt = rtumsg->MsgData[11]; aipnt = (aipnt<<8) + rtumsg->MsgData[10] - pPortParam->iAiBaseAddr; @@ -2133,7 +2133,7 @@ void Buban101DiDataProcess(RTUMSG *rtumsg, int flag) len = (int)rtumsg->MsgData[1]; - //从站主动上发 变化遥信 + //浠庣珯涓诲姩涓婂彂 鍙樺寲閬ヤ俊 if( ( rtumsg->MsgData[8] & 0x0f ) == 0x03 ) { for ( i = 10; i < 4 + len; i += 3 ) @@ -2164,7 +2164,7 @@ void Buban101DiDataProcess(RTUMSG *rtumsg, int flag) } } - // wen 2005.09.28 修改对主动上送数据的确认应答 + // wen 2005.09.28 淇敼瀵逛富鍔ㄤ笂閫佹暟鎹殑纭搴旂瓟 if(pPortParam->BalanceOrNot) { if((rtumsg->MsgData[4] & 0xc0) == 0xc0) @@ -2282,14 +2282,14 @@ void Buban101SoeDataProcess(RTUMSG *rtumsg, int flag) sec = rtumsg->MsgData[i+3] + ( rtumsg->MsgData[i+4] << 8 ); pntmsg.SoeTime.mSec = sec % 1000; pntmsg.SoeTime.Sec = sec / 1000; - pntmsg.SoeTime.Min = (rtumsg->MsgData[i+5] & 0x3f); // 分 + pntmsg.SoeTime.Min = (rtumsg->MsgData[i+5] & 0x3f); // 鍒 GetLocalTimeEx(&sm); if(abs(pntmsg.SoeTime.Min-sm.Min) > 50) { i64Millseconds = SystemTimeToMillseconds(&sm, 0); if(i64Millseconds > 0) { - // 减去一小时 + // 鍑忓幓涓灏忔椂 iTime = (long)(i64Millseconds/1000) - 3600; testtm = localtime(&iTime); sm.Year = testtm->tm_year + 1900; @@ -2360,17 +2360,17 @@ void Buban101PiWithTimeDataProcess( RTUMSG *rtumsg ) void Buban101BaoHuDataProcess( RTUMSG *rtumsg ) { - // 该功能不做处理 + // 璇ュ姛鑳戒笉鍋氬鐞 } void Buban101DefaultBaoHuDataProcess( RTUMSG *rtumsg ) { - // 该功能不做处理 + // 璇ュ姛鑳戒笉鍋氬鐞 } -// 新增函数,含有 7 BYTE 的时标 +// 鏂板鍑芥暟锛屽惈鏈 7 BYTE 鐨勬椂鏍 //*************************************************************** -//* Buban101 SOE 数据处理(7 bytes 时间) * +//* Buban101 SOE 鏁版嵁澶勭悊(7 bytes 鏃堕棿) * //*************************************************************** void Buban101SoeDataProcessWithCP56Time2a( RTUMSG *rtumsg, int flag ) { @@ -2431,7 +2431,7 @@ void Buban101SoeDataProcessWithCP56Time2a( RTUMSG *rtumsg, int flag ) i64Millseconds = SystemTimeToMillseconds(&sm, 0); if(i64Millseconds > 0) { - // 减去一小时 + // 鍑忓幓涓灏忔椂 iTime = (long)(i64Millseconds/1000) - 3600; testtm = localtime(&iTime); sm.Year = testtm->tm_year + 1900; @@ -2462,7 +2462,7 @@ void Buban101AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; len = (int)rtumsg->MsgData[1]; - //处理变化遥测 + //澶勭悊鍙樺寲閬ユ祴 for(i = 10; i < 4 + len; i += 12) { if( ( i + 12 ) > (4 + len)) @@ -2481,7 +2481,7 @@ void Buban101AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg) SetPntMsg(commid, aipnt, (void *)&pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); - // 7字节时标 + // 7瀛楄妭鏃舵爣 } } @@ -2504,7 +2504,7 @@ void Buban101AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg) len = (int)rtumsg->MsgData[1]; - //处理变化遥测 + //澶勭悊鍙樺寲閬ユ祴 for ( i = 10; i < 4 + len; i += 14 ) { if( ( i + 14 ) > (4 + len)) @@ -2521,18 +2521,18 @@ void Buban101AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg) fValue = *((float *)&rtumsg->MsgData[i+2]); SequenceRtuToHost((char *)&fValue, sizeof(float)); - // 品质描述 + // 鍝佽川鎻忚堪 // rtumsg->MsgData[i+6]; - // 保留2位小数 + // 淇濈暀2浣嶅皬鏁 pntmsg.RawValue = (int)(fValue * 100); SetPntMsg(commid, aipnt, (void *)&pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); - // 7字节时标 + // 7瀛楄妭鏃舵爣 } } -//Buban101 电度数据处理with time +//Buban101 鐢靛害鏁版嵁澶勭悊with time void Buban101PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg) { int i, point, len; @@ -2563,15 +2563,15 @@ void Buban101PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg) SetPntMsg(commid, point, (void *)&pntmsg, PI_PNT_TYPE, PNT_RAWVALUE); - // 1 BYTE (IV CA CY 顺序号) - // 7 BYTE 时标 + // 1 BYTE (IV CA CY 椤哄簭鍙) + // 7 BYTE 鏃舵爣 } } -//=========================以下为Buban101转发数据功能=======================// +//=========================浠ヤ笅涓築uban101杞彂鏁版嵁鍔熻兘=======================// void ProvBuban101dataProcess(int commid, RTUMSG *rtumsg) { - // 数据校验错误( 附加字节的第二个字节) + // 鏁版嵁鏍¢獙閿欒( 闄勫姞瀛楄妭鐨勭浜屼釜瀛楄妭) if(rtumsg->MsgData[rtumsg->MsgLen+1] > 0) { return; @@ -2599,20 +2599,20 @@ void ProvBuban101shortprocess(int commid, RTUMSG * rtumsg) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - //主站被动发送 + //涓荤珯琚姩鍙戦 if((rtumsg->MsgData[1] & 0xc0) == 0x00) { switch(rtumsg->MsgData[1] & 0x0f) { - case 0x0b://回答链路状态(链路完好) + case 0x0b://鍥炵瓟閾捐矾鐘舵(閾捐矾瀹屽ソ) ProvMakeBuban101Command(commid, RST_LINK); break; - case 0x00://链路确认 + case 0x00://閾捐矾纭 if(pPortParam->RstLinkOk) { pPortParam->LinkOk = TRUE; } - // wen 2005.09.13 链路的确认帧不需要有应答 + // wen 2005.09.13 閾捐矾鐨勭‘璁ゅ抚涓嶉渶瑕佹湁搴旂瓟 //ProvMakeBuban101Command(commid, ACK); break; default: @@ -2623,10 +2623,10 @@ void ProvBuban101shortprocess(int commid, RTUMSG * rtumsg) switch(rtumsg->MsgData[1] & 0x0f) { - case 0x09://链路状态请求 + case 0x09://閾捐矾鐘舵佽姹 ProvMakeBuban101Command(commid, ANS_LINK); break; - case 0x00://复位链路 + case 0x00://澶嶄綅閾捐矾 if(pPortParam->BalanceOrNot==0) { pPortParam->LinkOk = TRUE; @@ -2642,13 +2642,13 @@ void ProvBuban101shortprocess(int commid, RTUMSG * rtumsg) ProvMakeBuban101Command(commid, ASK_LINK); } break; - case 0x0a://召唤一级数据 + case 0x0a://鍙敜涓绾ф暟鎹 if(pPortParam->LinkOk) { ProvMakeBuban101Command(commid, ASK_FIRST_DATA); } break; - case 0x0b://召唤二级数据 + case 0x0b://鍙敜浜岀骇鏁版嵁 if(pPortParam->LinkOk) { ProvMakeBuban101Command(commid, ASK_SECOND_DATA); @@ -2668,65 +2668,65 @@ void ProvBuban101longprocess(int commid, RTUMSG * rtumsg) switch(rtumsg->MsgData[6]) { - case 1: // 单点遥信处理 + case 1: // 鍗曠偣閬ヤ俊澶勭悊 break; - case 2: // 单点遥信SOE处理 + case 2: // 鍗曠偣閬ヤ俊SOE澶勭悊 break; - case 3: // 双点遥信处理 + case 3: // 鍙岀偣閬ヤ俊澶勭悊 break; - case 4: // 单点遥信SOE处理 + case 4: // 鍗曠偣閬ヤ俊SOE澶勭悊 break; - case 5: // 变压器分接头位置 + case 5: // 鍙樺帇鍣ㄥ垎鎺ュご浣嶇疆 break; - case 6: // 变压器分接头位置带时标 + case 6: // 鍙樺帇鍣ㄥ垎鎺ュご浣嶇疆甯︽椂鏍 break; - case 7: // 子站远动终端状态 + case 7: // 瀛愮珯杩滃姩缁堢鐘舵 break; - case 9: // 带品质无时标遥测 + case 9: // 甯﹀搧璐ㄦ棤鏃舵爣閬ユ祴 break; - case 10: // 带品质带时标遥测 + case 10: // 甯﹀搧璐ㄥ甫鏃舵爣閬ユ祴 break; - case 21: // 全遥测数据处理 或变化数据 + case 21: // 鍏ㄩ仴娴嬫暟鎹鐞 鎴栧彉鍖栨暟鎹 break; - case 15: // 不带时标电度 + case 15: // 涓嶅甫鏃舵爣鐢靛害 break; - case 16: // 带时标电度 + case 16: // 甯︽椂鏍囩數搴 break; case 17: case 18: - case 19: // 保护数据 + case 19: // 淇濇姢鏁版嵁 break; - case 46: // 遥控返校 - case 47: // 遥调返校 + case 46: // 閬ユ帶杩旀牎 + case 47: // 閬ヨ皟杩旀牎 ProvBuban101YkYtData(commid, rtumsg); break; - case 100: // 召唤数据 + case 100: // 鍙敜鏁版嵁 ProvBuban101SendAllData(commid, rtumsg); break; - case 101: // 召唤电度 + case 101: // 鍙敜鐢靛害 ProvBuban101SendPIData(commid, rtumsg); break; - case 103: // 时间同步确认帧 + case 103: // 鏃堕棿鍚屾纭甯 ProvBuban101ProcessTime(commid, rtumsg); break; } } -//响应分组召唤和总召唤 -//总召唤确认(传送原因[8]=0x07,0x09确认; =0x0a 总召唤结束) +//鍝嶅簲鍒嗙粍鍙敜鍜屾诲彫鍞 +//鎬诲彫鍞ょ‘璁(浼犻佸師鍥燵8]=0x07,0x09纭; =0x0a 鎬诲彫鍞ょ粨鏉) void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg) { u_char commandbuf[MAX_POLLCMD_BUF_LEN]; @@ -2735,11 +2735,11 @@ void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - //分组召唤 + //鍒嗙粍鍙敜 if(rtumsg->MsgData[12] != 20) { iGroup = rtumsg->MsgData[12] - 20; - //无效组号 + //鏃犳晥缁勫彿 if( ( iGroup <= 0 ) || ( iGroup > 12 ) ) { ProvMakeBuban101Command(commid, ASK_DATA_NO); @@ -2755,7 +2755,7 @@ void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg) return; } - //总召唤 + //鎬诲彫鍞 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -2766,10 +2766,10 @@ void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg) commandbuf[7] = 0; switch(rtumsg->MsgData[8]) { - case 0x06://激活 + case 0x06://婵娲 commandbuf[8] = 7; break; - case 0x08://停止激活 + case 0x08://鍋滄婵娲 default: commandbuf[8] = 9; break; @@ -2788,7 +2788,7 @@ void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg) ProvBuban101SendAI(commid, rtumsg, 0); ProvBuban101SendDI(commid, rtumsg, 0); - //总召唤结束 + //鎬诲彫鍞ょ粨鏉 ProvMakeBuban101Command(commid, ASK_ALLDATA_END); pPortParam->m_psBaoHu->DiChange = FALSE; } @@ -2803,20 +2803,20 @@ void ProvBuban101SendPIData(int commid, RTUMSG * rtumsg) /*switch((rtumsg->MsgData[12]&0xc0)>>6) { - case 0x00://无效指令格式 + case 0x00://鏃犳晥鎸囦护鏍煎紡 break; - case 0x01://冻结不复位 + case 0x01://鍐荤粨涓嶅浣 break; - case 0x02://冻结复位 + case 0x02://鍐荤粨澶嶄綅 break; - case 0x03://电能计数器复位 + case 0x03://鐢佃兘璁℃暟鍣ㄥ浣 break; }*/ - //分组召唤 + //鍒嗙粍鍙敜 if( iGroup != 1 ) { - //无效或者扩展组号 + //鏃犳晥鎴栬呮墿灞曠粍鍙 if(( iGroup <= 0 ) || ( iGroup > 5 )) { ProvMakeBuban101Command(commid, ASK_DATA_NO); @@ -2827,7 +2827,7 @@ void ProvBuban101SendPIData(int commid, RTUMSG * rtumsg) return; } - //总召唤确认 + //鎬诲彫鍞ょ‘璁 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -2847,7 +2847,7 @@ void ProvBuban101SendPIData(int commid, RTUMSG * rtumsg) ProvBuban101SendPI(commid, rtumsg, 0); - //总召唤结束 + //鎬诲彫鍞ょ粨鏉 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -2874,10 +2874,10 @@ void ProvBuban101ProcessTime(int commid, RTUMSG *rtumsg) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - //传送原因 + //浼犻佸師鍥 switch(rtumsg->MsgData[8]) { - case 0x06://激活(对时) + case 0x06://婵娲(瀵规椂) commandbuf[0] = 0x68; commandbuf[1] = 15; commandbuf[2] = 15; @@ -2895,7 +2895,7 @@ void ProvBuban101ProcessTime(int commid, RTUMSG *rtumsg) commandbuf[20] = 0x16; PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 21); - // wen 2006.03.29 增加对时 + // wen 2006.03.29 澧炲姞瀵规椂 if(1 == pPortParam->m_psBaoHu->CheckTime) { sCurTime.mSec = rtumsg->MsgData[12] + (rtumsg->MsgData[13] << 8); @@ -2910,7 +2910,7 @@ void ProvBuban101ProcessTime(int commid, RTUMSG *rtumsg) SetLocalTimeEx(&sCurTime); } break; - case 0x07://激活确认 + case 0x07://婵娲荤‘璁 break; } } @@ -2928,14 +2928,14 @@ void ProvBuban101SendPI(int commid, RTUMSG *rtumsg, int iGroupNo) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - if(iGroupNo == 0)//总召唤 + if(iGroupNo == 0)//鎬诲彫鍞 { wStartAddr = MAX_GROUP_PINUM*iGroupNo + pPortParam->iPiBaseAddr; iAllDataCount = pPortParam->m_psBaoHu->PiNum; iSendCount = (iAllDataCount+MAX_PINUM-1)/MAX_PINUM; } - else//分组召唤 + else//鍒嗙粍鍙敜 { wStartAddr = MAX_GROUP_PINUM*(iGroupNo-1); iAllDataCount = pPortParam->m_psBaoHu->PiNum - wStartAddr; @@ -2960,7 +2960,7 @@ void ProvBuban101SendPI(int commid, RTUMSG *rtumsg, int iGroupNo) commandbuf[6] = 15; commandbuf[8] = 37+iGroupNo; commandbuf[9] = pPortParam->LinkAddr; - //遥测值 + //閬ユ祴鍊 if(iAllDataCount>MAX_PINUM) { iAllDataCount -= MAX_PINUM; @@ -3019,14 +3019,14 @@ void ProvBuban101SendAI(int commid, RTUMSG *rtumsg, int iGroupNo) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - if( iGroupNo == 0 )//总召唤 + if( iGroupNo == 0 )//鎬诲彫鍞 { wStartAddr = MAX_GROUP_AINUM*iGroupNo + pPortParam->iAiBaseAddr; iAllDataCount = pPortParam->m_psBaoHu->AiNum; iSendCount = (iAllDataCount+MAX_AINUM-1)/MAX_AINUM; } - else//分组召唤 + else//鍒嗙粍鍙敜 { wStartAddr = MAX_GROUP_AINUM*(iGroupNo-1); iAllDataCount = pPortParam->m_psBaoHu->AiNum - wStartAddr; @@ -3055,7 +3055,7 @@ void ProvBuban101SendAI(int commid, RTUMSG *rtumsg, int iGroupNo) commandbuf[10] = (char)(wStartAddr); commandbuf[11] = (char)((wStartAddr&0xff00)>>8); - //遥测值 + //閬ユ祴鍊 if(iAllDataCount > MAX_AINUM) { iAllDataCount -= MAX_AINUM; @@ -3107,14 +3107,14 @@ void ProvBuban101SendDI(int commid, RTUMSG *rtumsg, int iGroupNo) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - if(iGroupNo == 0)//总召唤 + if(iGroupNo == 0)//鎬诲彫鍞 { wStartAddr = MAX_GROUP_DINUM*iGroupNo + pPortParam->iDiBaseAddr; iAllDataCount = pPortParam->m_psBaoHu->DiNum; iSendCount = (iAllDataCount+MAX_DINUM-1)/MAX_DINUM; } - else//分组召唤 + else//鍒嗙粍鍙敜 { wStartAddr = MAX_GROUP_DINUM*(iGroupNo-1); iAllDataCount = pPortParam->m_psBaoHu->DiNum - wStartAddr; @@ -3134,7 +3134,7 @@ void ProvBuban101SendDI(int commid, RTUMSG *rtumsg, int iGroupNo) commandbuf[3] = 0x68; commandbuf[4] = 0x08; commandbuf[5] = pPortParam->LinkAddr; - commandbuf[6] = 1;//=3,为双点 + commandbuf[6] = 1;//=3,涓哄弻鐐 commandbuf[8] = rtumsg->MsgData[12]; commandbuf[9] = pPortParam->LinkAddr; commandbuf[10] = (char)(wStartAddr); @@ -3194,7 +3194,7 @@ void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg) } else { - if(rtumsg->MsgData[12] & 0x80) //选择返校 + if(rtumsg->MsgData[12] & 0x80) //閫夋嫨杩旀牎 { step = STEP_YKYT_SELECT; } @@ -3219,7 +3219,7 @@ void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg) //ykytop = ((rtumsg->MsgData[12] & 0x03) == 1) ? 2 : 1; if(rtumsg->MsgData[6] == 45) { - // ykytop == 1 控合, == 2 控分 + // ykytop == 1 鎺у悎, == 2 鎺у垎 ykytop = ((rtumsg->MsgData[12] & 0x03) == 1) ? 1 : 2; } else if(rtumsg->MsgData[6] == 46) @@ -3234,7 +3234,7 @@ void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg) } provpnt = FindProvPntFromYkYtPnt(commid, ykytpnt, pPortParam->m_psBaoHu); - if(provpnt < 0) // 控点号错 + if(provpnt < 0) // 鎺х偣鍙烽敊 { MakeProvBuban101YkYtAckMsg(commid, ykytpnt, 3, step); } @@ -3256,7 +3256,7 @@ void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg) diptr = (DI_DEF *)SioParam[ykytcommid].m_psBaoHu->DiPtr; - // 如果对应点没有控点或者控点不相等 + // 濡傛灉瀵瑰簲鐐规病鏈夋帶鐐规垨鑰呮帶鐐逛笉鐩哥瓑 if(!diptr[diprovptr[provpnt].PntNo].CtrlEnable) { MakeProvBuban101YkYtAckMsg(commid, ykytpnt, 3, step); @@ -3281,18 +3281,18 @@ void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg) SioParam[ykytcommid].m_psBaoHu->ProvYkYtMsg.m_iYkYtPointIdx = diptr[diprovptr[provpnt].PntNo].ControlNo; SioParam[ykytcommid].m_psBaoHu->ProvYkYtMsg.m_iYkYtOperate = ykytop; - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=成功, 0=失败) + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎴愬姛, 0=澶辫触) //buf[0] = ykytcommid & 0xFF; //buf[1] = (ykytcommid & 0xFF00) >> 8; //buf[2] = (ykytcommid & 0xFF0000) >> 16; @@ -3303,7 +3303,7 @@ void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg) //buf[7] = (diptr[diprovptr[provpnt].PntNo].ControlNo & 0xFF000000) >> 24; //buf[8] = STEP_YKYT_SELECT; //buf[9] = ykytop; - //SendYkYtCommand(ykytcommid, (char *)buf, 10); // 发送遥控遥调命令 + //SendYkYtCommand(ykytcommid, (char *)buf, 10); // 鍙戦侀仴鎺ч仴璋冨懡浠 YkYtParam.m_iYkYtOperate = ykytop; YkYtParam.m_iYkYtPnt = diptr[diprovptr[provpnt].PntNo].ControlNo; @@ -3340,19 +3340,19 @@ void MakeProvBuban101YkYtAckMsg(int commid, int pnt, int op, int step) // DCS/RCS switch(op) { - case 1: // 选择合 + case 1: // 閫夋嫨鍚 commandbuf[12] = 2; break; - case 2: // 选择分 + case 2: // 閫夋嫨鍒 commandbuf[12] = 1; break; - case 3: // 选择失败 + case 3: // 閫夋嫨澶辫触 default: commandbuf[8] = 0x40; commandbuf[12] = 0; break; } - // 传送原因 + // 浼犻佸師鍥 if(STEP_YKYT_SELECT == step) { commandbuf[8] |= 7; @@ -3369,7 +3369,7 @@ void MakeProvBuban101YkYtAckMsg(int commid, int pnt, int op, int step) // DCS/RCS commandbuf[12] |= 0x80; } - else// 结束帧 + else// 缁撴潫甯 { commandbuf[8] = 10; } @@ -3399,16 +3399,16 @@ void ProvBuban101SendClass1(int commid) pPortParam = (BUBAN101PORTPARAM *)SioParam[commid].ExtInfo; - // wen 2005.01.15 修改数据信息体起始地址 + // wen 2005.01.15 淇敼鏁版嵁淇℃伅浣撹捣濮嬪湴鍧 wStartAddr = pPortParam->iDiBaseAddr; commandbuf[0] = 0x68; commandbuf[3] = 0x68; //commandbuf[4] = 0x08; commandbuf[5] = pPortParam->LinkAddr; - commandbuf[6] = 1;//=3,为双点 + commandbuf[6] = 1;//=3,涓哄弻鐐 //commandbuf[8] = 3; - commandbuf[8] = 5;// 应该为被请求数据,而不是突发数据 + commandbuf[8] = 5;// 搴旇涓鸿璇锋眰鏁版嵁锛岃屼笉鏄獊鍙戞暟鎹 commandbuf[9] = pPortParam->LinkAddr; diprovptr = (PROV_DI_PNT *)pPortParam->m_psBaoHu->DiPtr; @@ -3484,18 +3484,18 @@ void ProvBuban101SendClass2(int commid) commandbuf[8] = 5; commandbuf[9] = pPortParam->LinkAddr; - //SOE 数据 + //SOE 鏁版嵁 if(ProvHaveSoeData(commid) > 0) { - // 单点 + // 鍗曠偣 commandbuf[6] = 2; bHaveData = TRUE; iLenth = 10; - // wen 2005.01.15 修改数据信息体起始地址 + // wen 2005.01.15 淇敼鏁版嵁淇℃伅浣撹捣濮嬪湴鍧 wStartAddr = pPortParam->iDiBaseAddr; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.07.12 修改soe为单个时,数据丢失的问题. + // wen 2006.07.12 淇敼soe涓哄崟涓椂锛屾暟鎹涪澶辩殑闂. /* while(ProvAndDelGetSoeData(commid, &soemsg) > 0) { @@ -3534,10 +3534,10 @@ void ProvBuban101SendClass2(int commid) } else { - // wen 2005.01.15 修改数据信息体起始地址 + // wen 2005.01.15 淇敼鏁版嵁淇℃伅浣撹捣濮嬪湴鍧 wStartAddr = pPortParam->iAiBaseAddr; commandbuf[6] = 21; - //遥测值 + //閬ユ祴鍊 aiprovptr = (PROV_AI_PNT *)pPortParam->m_psBaoHu->AiPtr; for(j = 0, iDataNum = 0, iLenth = 10; j < pPortParam->m_psBaoHu->AiNum; j++) { @@ -3600,7 +3600,7 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) switch(cmdidx) { - case ASK_LINK: // 请求链路 + case ASK_LINK: // 璇锋眰閾捐矾 commandbuf[0] = 0x10; commandbuf[1] = 0xc9; commandbuf[2] = pPortParam->LinkAddr; @@ -3609,7 +3609,7 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 5); break; - case RST_LINK: // 复位链路 + case RST_LINK: // 澶嶄綅閾捐矾 commandbuf[0] = 0x10; commandbuf[1] = 0xc0; commandbuf[2] = pPortParam->LinkAddr; @@ -3618,15 +3618,15 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 5); break; - case ASK_SECOND_DATA: // 召唤2级数据 + case ASK_SECOND_DATA: // 鍙敜2绾ф暟鎹 ProvBuban101SendClass2(commid); break; - case ASK_FIRST_DATA: // 召唤1级数据 + case ASK_FIRST_DATA: // 鍙敜1绾ф暟鎹 ProvBuban101SendClass1(commid); break; - case ACK: // 确认回答 + case ACK: // 纭鍥炵瓟 commandbuf[0] = 0x10; commandbuf[1] = 0x00; commandbuf[2] = pPortParam->LinkAddr; @@ -3635,7 +3635,7 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 5); break; - case ANS_LINK: // 回答链路状态 + case ANS_LINK: // 鍥炵瓟閾捐矾鐘舵 commandbuf[0] = 0x10; commandbuf[1] = 0x0b; commandbuf[2] = pPortParam->LinkAddr; @@ -3644,7 +3644,7 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 5); break; - case ASK_DATA_NO: // 无所请求的数据 + case ASK_DATA_NO: // 鏃犳墍璇锋眰鐨勬暟鎹 commandbuf[0] = 0x10; commandbuf[1] = 0x09; commandbuf[2] = pPortParam->LinkAddr; @@ -3653,7 +3653,7 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 5); break; - case ASK_ALLDATA_END: // 总召唤结束帧 + case ASK_ALLDATA_END: // 鎬诲彫鍞ょ粨鏉熷抚 commandbuf[0] = 0x68; commandbuf[1] = 9; commandbuf[2] = 9; @@ -3672,25 +3672,25 @@ void ProvMakeBuban101Command(int commid, u_char cmdidx) PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char *)commandbuf, 15); break; - case RTU_TIME: // 时间同步 + case RTU_TIME: // 鏃堕棿鍚屾 break; - case ASK_DI_DATA: // 召唤2级数据YX + case ASK_DI_DATA: // 鍙敜2绾ф暟鎹甕X break; - case ASK_AI_DATA: // 召唤2级数据YC + case ASK_AI_DATA: // 鍙敜2绾ф暟鎹甕C break; - case ASK_PI_DATA: // 召唤2级数据YM + case ASK_PI_DATA: // 鍙敜2绾ф暟鎹甕M break; - case ASK_PI: //召唤电度量 + case ASK_PI: //鍙敜鐢靛害閲 break; - case ASK_ALL_DATA: // 召唤初始化数据 + case ASK_ALL_DATA: // 鍙敜鍒濆鍖栨暟鎹 break; } } -//===========================转发数据处理结束===============================// +//===========================杞彂鏁版嵁澶勭悊缁撴潫===============================// -//===========================数据处理函数结束===============================// \ No newline at end of file +//===========================鏁版嵁澶勭悊鍑芥暟缁撴潫===============================// \ No newline at end of file diff --git a/buban101.h b/buban101.h index 6622dda..3af28e2 100644 --- a/buban101.h +++ b/buban101.h @@ -3,19 +3,19 @@ * Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd. * All rights reserved. * - * 文件名称:buban101.h - * 文件标识:部颁101规约 - * 摘 要:101规约的处理的结构、宏还有函数定义 + * 鏂囦欢鍚嶇О锛歜uban101.h + * 鏂囦欢鏍囪瘑锛氶儴棰101瑙勭害 + * 鎽 瑕侊細101瑙勭害鐨勫鐞嗙殑缁撴瀯銆佸畯杩樻湁鍑芥暟瀹氫箟 * - * 当前版本:1.0 - * 作 者:aaawen - * 完成日期:2005/09/08 + * 褰撳墠鐗堟湰锛1.0 + * 浣 鑰咃細aaawen + * 瀹屾垚鏃ユ湡锛2005/09/08 * - * 取代版本:1.0 - * 原作者 : - * 完成日期: + * 鍙栦唬鐗堟湰锛1.0 + * 鍘熶綔鑰 锛 + * 瀹屾垚鏃ユ湡锛 * - * 说 明:数据定义规则 + * 璇 鏄庯細鏁版嵁瀹氫箟瑙勫垯 * u8 --- BYTE(usigned char) * ch --- char * w --- WORD(u_short, usigned short) @@ -31,14 +31,14 @@ * c --- class * s --- struct * sta --- static - * g --- 全局变量 - * Array --- 数组 - * a --- 数组 - * m_ --- 数据成员 - * p --- 指针 - * str --- 字符串 - * 全部大写 --- 常量 - * 首字节必须大写--- 类名称,结构,函数 + * g --- 鍏ㄥ眬鍙橀噺 + * Array --- 鏁扮粍 + * a --- 鏁扮粍 + * m_ --- 鏁版嵁鎴愬憳 + * p --- 鎸囬拡 + * str --- 瀛楃涓 + * 鍏ㄩ儴澶у啓 --- 甯搁噺 + * 棣栧瓧鑺傚繀椤诲ぇ鍐--- 绫诲悕绉帮紝缁撴瀯锛屽嚱鏁 **************************************************************************************/ // buban101.h: interface for the buban101 class. // @@ -52,71 +52,71 @@ #endif ////////////////////////////////////////////////////////////////////////// -// 宏定义 // +// 瀹忓畾涔 // // WEN 2005.09.08 // ////////////////////////////////////////////////////////////////////////// -//信息体地址 -#define INFO_DI_BASEADDR 0x001 // 单,双点遥信量 -#define INFO_PROTECT_BASEADDR 0x401 // 保护单个事件信息 -#define INFO_PROTECT_STARTBASEADDR 0x501 // 保护启动事件 -#define INFO_PROTECT_GROUPBASEADDR 0x601 // 保护成组输出电路信息 -#define INFO_AI_BASEADDR 0x701 // 遥测量 -#define INFO_PARA_BASEADDR 0x901 // 参数地址,和遥测量一一对应 -#define INFO_YKYT_BASEADDR 0xB01 // 遥控、遥调 -#define INFO_SET_BASEADDR 0xB81 // 设定地址范围 -#define INFO_PI_BASEADDR 0xC01 // 电度量 -#define INFO_STEP_BASEADDR 0xC81 // 步长量(如:变压器分接头) -#define INFO_BIN_BASEADDR 0xCA1 // 二进制状态信息 -#define INFO_BCD_BASEADDR 0xCC1 // BCD码(水位,频率) -#define INFO_STATUS_BASEADDR 0xCE9 // 子站远东终端状态 -#define INFO_FILE_BASEADDR 0xCEA // 文件传输 - -//一组中的个类型数据最大个数 +//淇℃伅浣撳湴鍧 +#define INFO_DI_BASEADDR 0x001 // 鍗,鍙岀偣閬ヤ俊閲 +#define INFO_PROTECT_BASEADDR 0x401 // 淇濇姢鍗曚釜浜嬩欢淇℃伅 +#define INFO_PROTECT_STARTBASEADDR 0x501 // 淇濇姢鍚姩浜嬩欢 +#define INFO_PROTECT_GROUPBASEADDR 0x601 // 淇濇姢鎴愮粍杈撳嚭鐢佃矾淇℃伅 +#define INFO_AI_BASEADDR 0x701 // 閬ユ祴閲 +#define INFO_PARA_BASEADDR 0x901 // 鍙傛暟鍦板潃,鍜岄仴娴嬮噺涓涓瀵瑰簲 +#define INFO_YKYT_BASEADDR 0xB01 // 閬ユ帶銆侀仴璋 +#define INFO_SET_BASEADDR 0xB81 // 璁惧畾鍦板潃鑼冨洿 +#define INFO_PI_BASEADDR 0xC01 // 鐢靛害閲 +#define INFO_STEP_BASEADDR 0xC81 // 姝ラ暱閲(濡:鍙樺帇鍣ㄥ垎鎺ュご) +#define INFO_BIN_BASEADDR 0xCA1 // 浜岃繘鍒剁姸鎬佷俊鎭 +#define INFO_BCD_BASEADDR 0xCC1 // BCD鐮(姘翠綅,棰戠巼) +#define INFO_STATUS_BASEADDR 0xCE9 // 瀛愮珯杩滀笢缁堢鐘舵 +#define INFO_FILE_BASEADDR 0xCEA // 鏂囦欢浼犺緭 + +//涓缁勪腑鐨勪釜绫诲瀷鏁版嵁鏈澶т釜鏁 #define MAX_GROUP_AINUM 128 //#define MAX_GROUP_FLOATAINUM 128 #define MAX_GROUP_DINUM 128 #define MAX_GROUP_PINUM 32 -//转发各种类型的数据的最大数量 +//杞彂鍚勭绫诲瀷鐨勬暟鎹殑鏈澶ф暟閲 #define MAX_AINUM 120 #define MAX_FLOATAINUM 9 #define MAX_DINUM 127 #define MAX_PINUM 35 -#define MAX_POLL_CMD_BUF_NUM 32 // 最大命令缓冲区数目 - -// 命令类型定义 -#define ASK_LINK 0 // 请求链路 -#define RST_LINK 1 // 复位链路 -#define RTU_TIME 2 // 对时时间 -#define ASK_DI_DATA 3 // 召唤2 级数据YX -#define ASK_AI_DATA 4 // 召唤2 级数据YC -#define ASK_PI_DATA 5 // 召唤2 级数据YM -#define ASK_ALL_DATA 6 // 初始化总召唤 - -#define ASK_FIRST_DATA 7 // 召唤1 级数据 -#define ASK_SECOND_DATA 8 // 召唤2 级数据 -#define ACK 9 // 确认回答 -#define ANS_LINK 10 // 链路回答 -#define ASK_PI 11 // 召唤数据YM - -#define ASK_DATA_NO 12 // 无所请求的数据 -#define ASK_ALLDATA_END 13 // 召唤数据结束(用于总召唤和电度召唤) -//#define ASK_ALLDATA_ACK 14 // 召唤数据确认(用于总召唤和电度召唤) - -// 定时召唤命令及命令名称 -#define BUBAN101_TIMER_CMD_NUM 2 // 最大命令数目 -#define MAX_POLLCMD_BUF_LEN 320 // 最大命令缓冲区数目 - -// 控制模式 -#define CONTROL_DOUBLE 0 // 双点控制 -#define CONTROL_SINGAL 1 // 单点控制 -#define CONTROL_DIRECT 2 // 直接控制 - -// 规约版本号 -#define VER_BUBAN_101 0 // 部颁101 +#define MAX_POLL_CMD_BUF_NUM 32 // 鏈澶у懡浠ょ紦鍐插尯鏁扮洰 + +// 鍛戒护绫诲瀷瀹氫箟 +#define ASK_LINK 0 // 璇锋眰閾捐矾 +#define RST_LINK 1 // 澶嶄綅閾捐矾 +#define RTU_TIME 2 // 瀵规椂鏃堕棿 +#define ASK_DI_DATA 3 // 鍙敜2 绾ф暟鎹甕X +#define ASK_AI_DATA 4 // 鍙敜2 绾ф暟鎹甕C +#define ASK_PI_DATA 5 // 鍙敜2 绾ф暟鎹甕M +#define ASK_ALL_DATA 6 // 鍒濆鍖栨诲彫鍞 + +#define ASK_FIRST_DATA 7 // 鍙敜1 绾ф暟鎹 +#define ASK_SECOND_DATA 8 // 鍙敜2 绾ф暟鎹 +#define ACK 9 // 纭鍥炵瓟 +#define ANS_LINK 10 // 閾捐矾鍥炵瓟 +#define ASK_PI 11 // 鍙敜鏁版嵁YM + +#define ASK_DATA_NO 12 // 鏃犳墍璇锋眰鐨勬暟鎹 +#define ASK_ALLDATA_END 13 // 鍙敜鏁版嵁缁撴潫(鐢ㄤ簬鎬诲彫鍞ゅ拰鐢靛害鍙敜) +//#define ASK_ALLDATA_ACK 14 // 鍙敜鏁版嵁纭(鐢ㄤ簬鎬诲彫鍞ゅ拰鐢靛害鍙敜) + +// 瀹氭椂鍙敜鍛戒护鍙婂懡浠ゅ悕绉 +#define BUBAN101_TIMER_CMD_NUM 2 // 鏈澶у懡浠ゆ暟鐩 +#define MAX_POLLCMD_BUF_LEN 320 // 鏈澶у懡浠ょ紦鍐插尯鏁扮洰 + +// 鎺у埗妯″紡 +#define CONTROL_DOUBLE 0 // 鍙岀偣鎺у埗 +#define CONTROL_SINGAL 1 // 鍗曠偣鎺у埗 +#define CONTROL_DIRECT 2 // 鐩存帴鎺у埗 + +// 瑙勭害鐗堟湰鍙 +#define VER_BUBAN_101 0 // 閮ㄩ101 #define VER_IEC870_5_101 1 // IEC101 -/////////////////////////////结构定义///////////////////////////////// +/////////////////////////////缁撴瀯瀹氫箟///////////////////////////////// typedef struct { long CmdTimerCnt; @@ -125,149 +125,149 @@ typedef struct typedef struct tagBUBAN101PORTPARAM { - BOOL RstLinkOk; // 初始化时:FALSE - BOOL LinkOk; // 主站初始化标志 1:ok; 0:no 初始化时:FALSE - BOOL Initdata; // 初始化总召唤标志 TRUE:收到总召唤结束帧 - // FALSE:未收到总召唤结束帧 - // 召唤电度标志 TRUE:收到召唤结束帧 - // FALSE:未收到召唤结束帧 - BYTE LinkAddr; // 地址域 - BYTE CtlByte; // 控制信息 + BOOL RstLinkOk; // 鍒濆鍖栨椂锛欶ALSE + BOOL LinkOk; // 涓荤珯鍒濆鍖栨爣蹇 1:ok; 0:no 鍒濆鍖栨椂锛欶ALSE + BOOL Initdata; // 鍒濆鍖栨诲彫鍞ゆ爣蹇 TRUE锛氭敹鍒版诲彫鍞ょ粨鏉熷抚 + // FALSE锛氭湭鏀跺埌鎬诲彫鍞ょ粨鏉熷抚 + // 鍙敜鐢靛害鏍囧織 TRUE锛氭敹鍒板彫鍞ょ粨鏉熷抚 + // FALSE锛氭湭鏀跺埌鍙敜缁撴潫甯 + BYTE LinkAddr; // 鍦板潃鍩 + BYTE CtlByte; // 鎺у埗淇℃伅 long LinkOkCnt; - long lTimeOutConst; // 超时时间间隔 + long lTimeOutConst; // 瓒呮椂鏃堕棿闂撮殧 - short RtuVersion; // 版本号 + short RtuVersion; // 鐗堟湰鍙 - short BalanceOrNot; //是否平衡式 =1:ok; =0:no + short BalanceOrNot; //鏄惁骞宠 寮 =1:ok; =0:no short CurCmdIdx; - short YkMode; // 遥控方式(=0:双点遥控,=1:单点遥控,=2:直控方式) + short YkMode; // 閬ユ帶鏂瑰紡(=0锛氬弻鐐归仴鎺э紝=1锛氬崟鐐归仴鎺э紝=2锛氱洿鎺ф柟寮) - // wen 2005.01.15 修改数据信息体起始地址 - int iAiBaseAddr; //遥测起始地址 - int iDiBaseAddr; //遥信起始地址 - int iPiBaseAddr; //遥脉起始地址 - int iYkBaseAddr; //遥控起始地址 + // wen 2005.01.15 淇敼鏁版嵁淇℃伅浣撹捣濮嬪湴鍧 + int iAiBaseAddr; //閬ユ祴璧峰鍦板潃 + int iDiBaseAddr; //閬ヤ俊璧峰鍦板潃 + int iPiBaseAddr; //閬ヨ剦璧峰鍦板潃 + int iYkBaseAddr; //閬ユ帶璧峰鍦板潃 BYTE m_au8RecvBuf[300]; int m_iRecvLen; BUBAN101CMDDEF CmdTime[BUBAN101_TIMER_CMD_NUM]; - SIO_PARAM_BAOHU_DEF *m_psBaoHu; // 该规约的端口数据指针 + SIO_PARAM_BAOHU_DEF *m_psBaoHu; // 璇ヨ绾︾殑绔彛鏁版嵁鎸囬拡 } BUBAN101PORTPARAM, *pBUBAN101PORTPARAM; -/////////////////////////以下为通用函数接口/////////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鎺ュ彛/////////////////////////// /*! - \brief 读取配置函数 - \param commid -- 端口号 + \brief 璇诲彇閰嶇疆鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban101ReadConfig(int commid); // 初始化处理 +void Buban101ReadConfig(int commid); // 鍒濆鍖栧鐞 /*! - \brief 读取端口数据函数 - \param commid -- 端口号 + \brief 璇诲彇绔彛鏁版嵁鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void Buban101RecvData(int commid, u_char *buf, int len);// 规约读数据处理 +void Buban101RecvData(int commid, u_char *buf, int len);// 瑙勭害璇绘暟鎹鐞 /*! - \brief 规约数据处理定时器函数 - \param commid -- 端口号 + \brief 瑙勭害鏁版嵁澶勭悊瀹氭椂鍣ㄥ嚱鏁 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban101Timer(int commid); // 定时器处理 +void Buban101Timer(int commid); // 瀹氭椂鍣ㄥ鐞 /*! - \brief 遥控遥调数据处理函数 - \param commid -- 端口号 + \brief 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void Buban101YkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理 +void Buban101YkYtProcess(int commid, u_char *buf, int len); // 閬ユ帶閬ヨ皟澶勭悊 /*! - \brief 系统下发对时函数 - \param commid -- 端口号 + \brief 绯荤粺涓嬪彂瀵规椂鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban101SendSystemTime(int commid); // 系统对时 +void Buban101SendSystemTime(int commid); // 绯荤粺瀵规椂 /*! - \brief 系统退出时规约处理函数 - \param commid -- 端口号 + \brief 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban101Exit(int commid); // 规约退出 +void Buban101Exit(int commid); // 瑙勭害閫鍑 /*! - \brief 保护命令处理函数 - \param commid -- 端口号 - \param rtumsg -- 下发的保护命令指针 + \brief 淇濇姢鍛戒护澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 + \param rtumsg -- 涓嬪彂鐨勪繚鎶ゅ懡浠ゆ寚閽 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban101BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData); /*! - \brief 取保护数据库指针函数 - \param commid -- 端口号 - \param iProvAddr -- 统一编排的保护转发地址 - \param ppBaoHuDB -- 存放保护数据指针的指针 - \retval -- 返回该装置保护数据组数 + \brief 鍙栦繚鎶ゆ暟鎹簱鎸囬拡鍑芥暟 + \param commid -- 绔彛鍙 + \param iProvAddr -- 缁熶竴缂栨帓鐨勪繚鎶よ浆鍙戝湴鍧 + \param ppBaoHuDB -- 瀛樻斁淇濇姢鏁版嵁鎸囬拡鐨勬寚閽 + \retval -- 杩斿洖璇ヨ缃繚鎶ゆ暟鎹粍鏁 */ int Buban101GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB); -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// -/////////////////////////buban101公共函数接口/////////////////////////// -// 校验数据帧是否正确 +/////////////////////////buban101鍏叡鍑芥暟鎺ュ彛/////////////////////////// +// 鏍¢獙鏁版嵁甯ф槸鍚︽纭 BOOL Buban101Check(u_char* msg, int len); -//计算 Buban101 累加和检验码 +//璁$畻 Buban101 绱姞鍜屾楠岀爜 u_char CalBuban101Lpc(u_char* msg, int len); -//指令缓冲区初始化 +//鎸囦护缂撳啿鍖哄垵濮嬪寲 void InitBuban101CommandBuffer(int commid); -/////////////////////////buban101公共函数接口结束/////////////////////// +/////////////////////////buban101鍏叡鍑芥暟鎺ュ彛缁撴潫/////////////////////// -/////////////////////////以下为通用函数支持接口///////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鏀寔鎺ュ彛///////////////////////// void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len); -/////////////////////////通用函数支持接口结束/////////////////////////// +/////////////////////////閫氱敤鍑芥暟鏀寔鎺ュ彛缁撴潫/////////////////////////// -///////////////////////////以下为指令生成函数/////////////////////////// -//生成 Buban101 命令? +///////////////////////////浠ヤ笅涓烘寚浠ょ敓鎴愬嚱鏁/////////////////////////// +//鐢熸垚 Buban101 鍛戒护? void MakeBuban101Command(u_32 commid, u_char cmdidx); -//生成遥控遥调指令 +//鐢熸垚閬ユ帶閬ヨ皟鎸囦护 void MakeBuBan101YkYtCommand(u_32 commid, u_char *buf, int len); -///////////////////////////指令生成函数结束///////////////////////////// +///////////////////////////鎸囦护鐢熸垚鍑芥暟缁撴潫///////////////////////////// -/////////////////////以下为POLLING规约常规函数接口////////////////////// +/////////////////////浠ヤ笅涓篜OLLING瑙勭害甯歌鍑芥暟鎺ュ彛////////////////////// void Buban101FindNextCmd(int commid); BOOL Buban101FindNextCmdEx(int commid); void Buban101SendCmdFormPollCmdBuf(int commid); -//////////////////////POLLING规约常规函数接口结束/////////////////////// +//////////////////////POLLING瑙勭害甯歌鍑芥暟鎺ュ彛缁撴潫/////////////////////// -///////////////////////以下为规约处理函数接口/////////////////////////// -//======================以下为主站数据处理============================ +///////////////////////浠ヤ笅涓鸿绾﹀鐞嗗嚱鏁版帴鍙/////////////////////////// +//======================浠ヤ笅涓轰富绔欐暟鎹鐞============================ void Buban101ProcessData(u_32 commid, BUBAN101PORTPARAM *psPortParam, BOOL bProcess); void Buban101shortprocess(RTUMSG *rtumsg); void Buban101longprocess(RTUMSG *rtumsg); void Buban101NoChanged(RTUMSG * rtumsg); -//Buban101 初始化数据处理 +//Buban101 鍒濆鍖栨暟鎹鐞 void Buban101InitdataProecss(RTUMSG * rtumsg); -//电度结束帧 +//鐢靛害缁撴潫甯 void Buban101PidataEnd(RTUMSG * rtumsg); -//设定确认 +//璁惧畾纭 void Buban101SetAck(RTUMSG *rtumsg); -//Buban101 遥控遥调返校程序 +//Buban101 閬ユ帶閬ヨ皟杩旀牎绋嬪簭 void Buban101YkYtAck(RTUMSG * rtumsg); -//Buban101 对时程序 +//Buban101 瀵规椂绋嬪簭 void Buban101SynTime(RTUMSG * rtumsg); -// 子站主动传送遥信变位帧 +// 瀛愮珯涓诲姩浼犻侀仴淇″彉浣嶅抚 void Buban101AutoSendDiProcess(RTUMSG *rtumsg); void Buban101AiWithPzDataProcess(RTUMSG *, int); @@ -277,25 +277,25 @@ void Buban101SoeDataProcess(RTUMSG *rtumsg, int); void Buban101PiDataProcess(RTUMSG * rtumsg); void Buban101PiWithTimeDataProcess(RTUMSG *rtumsg); -//保护数据处理 +//淇濇姢鏁版嵁澶勭悊 void Buban101BaoHuDataProcess(RTUMSG *rtumsg); void Buban101DefaultBaoHuDataProcess(RTUMSG *rtumsg); -// 新增函数,含有 7 BYTE 的时标 +// 鏂板鍑芥暟锛屽惈鏈 7 BYTE 鐨勬椂鏍 void Buban101SoeDataProcessWithCP56Time2a(RTUMSG *rtumsg, int flag); void Buban101AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg); void Buban101AiWithDataProcessWithM_ME_TE_1(RTUMSG * rtumsg); void Buban101AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg); void Buban101PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg); -//======================以下为子站数据处理============================ +//======================浠ヤ笅涓哄瓙绔欐暟鎹鐞============================ void ProvBuban101dataProcess(int commid, RTUMSG *rtumsg); void ProvBuban101shortprocess(int commid, RTUMSG * rtumsg); void ProvBuban101longprocess(int commid, RTUMSG * rtumsg); void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg); void ProvBuban101SendPIData(int commid, RTUMSG * rtumsg); void ProvBuban101ProcessTime(int commid, RTUMSG *rtumsg); -//iGroupNo=0为响应总召唤 +//iGroupNo=0涓哄搷搴旀诲彫鍞 void ProvBuban101SendPI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban101SendAI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban101SendDI(int commid, RTUMSG *rtumsg, int iGroupNo); @@ -306,6 +306,6 @@ void MakeProvBuban101YkYtAckMsg(int commid, int pnt, int op, int step); void ProvBuban101SendClass1(int commid); void ProvBuban101SendClass2(int commid); void ProvMakeBuban101Command(int commid, u_char cmdidx); -/////////////////////////规约处理函数接口结束/////////////////////////// +/////////////////////////瑙勭害澶勭悊鍑芥暟鎺ュ彛缁撴潫/////////////////////////// #endif // !defined(_BUBAN101_H_200509081012__INCLUDED_) diff --git a/buban103.cpp b/buban103.cpp index 025182b..5b69f30 100644 --- a/buban103.cpp +++ b/buban103.cpp @@ -33,11 +33,11 @@ extern void *pvdataconf_handle; extern char pvDataFileName[256]; extern char IniFilePath[256]; /*! - \brief 最大链路数量 + \brief 鏈澶ч摼璺暟閲 */ const int MAX_LINK_NUM=30; /*! - \brief 每条链路最大装置数量 + \brief 姣忔潯閾捐矾鏈澶ц缃暟閲 */ const int MAX_DEV_NUM_EACH_LINK=12; @@ -58,45 +58,45 @@ enum Param_Type const char *gpStrBuban103Cmd[BUBAN103_TIMER_CMD_NUM] = { - "时间同步过程", - "总查询过程", - "电度量查询", - "通用分类数据模拟量查询", - "通用分类数据状态量查询" + "鏃堕棿鍚屾杩囩▼", + "鎬绘煡璇㈣繃绋", + "鐢靛害閲忔煡璇", + "閫氱敤鍒嗙被鏁版嵁妯℃嫙閲忔煡璇", + "閫氱敤鍒嗙被鏁版嵁鐘舵侀噺鏌ヨ" }; /*! - 组织结构:链路(间隔)+装置 + 缁勭粐缁撴瀯:閾捐矾(闂撮殧)+瑁呯疆 */ const char *gpStrBuban103ConfigInfo[] = { - "*******部颁103规约开始*******", + "*******閮ㄩ103瑙勭害寮濮*******", " ", - " ; 轮询指令配置,所有命令召唤周期均以秒为单位。", - " 时间同步过程 = 0", - " 总查询过程 = 0", - " 电度量查询 = 0", - " 通用分类数据模拟量查询 = 0", - " 通用分类数据状态量查询 = 0", + " ; 杞鎸囦护閰嶇疆锛屾墍鏈夊懡浠ゅ彫鍞ゅ懆鏈熷潎浠ョ涓哄崟浣嶃", + " 鏃堕棿鍚屾杩囩▼ = 0", + " 鎬绘煡璇㈣繃绋 = 0", + " 鐢靛害閲忔煡璇 = 0", + " 閫氱敤鍒嗙被鏁版嵁妯℃嫙閲忔煡璇 = 0", + " 閫氱敤鍒嗙被鏁版嵁鐘舵侀噺鏌ヨ = 0", " ", - " 链路数量=1", - " ; 缺省值=1,只支持一条链路,否则为实际的链路数量", + " 閾捐矾鏁伴噺=1", + " ; 缂虹渷鍊=1,鍙敮鎸佷竴鏉¢摼璺,鍚﹀垯涓哄疄闄呯殑閾捐矾鏁伴噺", " ", - " 链路1模板文件名称 = 103template.csv", + " 閾捐矾1妯℃澘鏂囦欢鍚嶇О = 103template.csv", " ... ...", - " 链路n模板文件名称 = 103template.csv", - " ; 其中,n=配置信息中的(链路数量)对应的值", + " 閾捐矾n妯℃澘鏂囦欢鍚嶇О = 103template.csv", + " ; 鍏朵腑锛宯=閰嶇疆淇℃伅涓殑(閾捐矾鏁伴噺)瀵瑰簲鐨勫", " ", - " 上送遥信变位=0", - " ;仅针对于转发,缺省情况下不上送", + " 涓婇侀仴淇″彉浣=0", + " ;浠呴拡瀵逛簬杞彂,缂虹渷鎯呭喌涓嬩笉涓婇", " ", - "*******部颁103规约结束*******", - "", // 结束标志(中间不能含有该空字符串) + "*******閮ㄩ103瑙勭害缁撴潫*******", + "", // 缁撴潫鏍囧織(涓棿涓嶈兘鍚湁璇ョ┖瀛楃涓) }; //******************************************************************** -//* 读取配置函数 * -//*参数:int commid : 端口号 * +//* 璇诲彇閰嶇疆鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void Buban103ReadConfig(int commid) { @@ -132,12 +132,12 @@ void Buban103ReadConfig(int commid) pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo; - // 只有在SioParam[commid].m_psBaoHu非空时,才会运行到这里 + // 鍙湁鍦⊿ioParam[commid].m_psBaoHu闈炵┖鏃讹紝鎵嶄細杩愯鍒拌繖閲 pPortParam->m_psBaoHu = SioParam[commid].m_psBaoHu; sprintf(szSection, "Port%d", commid+1); - if(GetPrivateProString(szSection, "上送遥信变位", "0", szbuf, 120, szPortConfig) > 0) + if(GetPrivateProString(szSection, "涓婇侀仴淇″彉浣", "0", szbuf, 120, szPortConfig) > 0) { if(atoi(szbuf) == 0) { @@ -149,8 +149,8 @@ void Buban103ReadConfig(int commid) } } - // wen 2004.07.26 增加保护装置的状态处理 - if(GetPrivateProString(szSection, "链路数量", "1", szbuf, 120, szPortConfig) > 0) + // wen 2004.07.26 澧炲姞淇濇姢瑁呯疆鐨勭姸鎬佸鐞 + if(GetPrivateProString(szSection, "閾捐矾鏁伴噺", "1", szbuf, 120, szPortConfig) > 0) { pPortParam->m_iLinkNum = atoi(szbuf); } @@ -171,11 +171,11 @@ void Buban103ReadConfig(int commid) memset((void *)pPortParam->m_psLink, 0, sizeof(BUBAN103LINKDEF)*pPortParam->m_iLinkNum); - // 假定所有链路的配置相同 + // 鍋囧畾鎵鏈夐摼璺殑閰嶇疆鐩稿悓 //for(i=0; im_iLinkNum; i++) i=0; { - // 轮询指令配置 + // 杞鎸囦护閰嶇疆 for(j=0; jm_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerConst - 5; } } - //GetPrivateProString(szSection, "超时时间", "20", szbuf, 120, szPortConfig); + //GetPrivateProString(szSection, "瓒呮椂鏃堕棿", "20", szbuf, 120, szPortConfig); //pPortParam->m_psLink[i].m_u32TimeOutConst = (int)(atof(szbuf)*1000/TIMER_CNT); pPortParam->m_psLink[i].m_u32TimeOutConst = pPortParam->m_psBaoHu->RetryTime; } @@ -205,7 +205,7 @@ void Buban103ReadConfig(int commid) } for(i=0; im_iLinkNum; i++) { - sprintf(entry, "链路%d模板文件名称", i+1); + sprintf(entry, "閾捐矾%d妯℃澘鏂囦欢鍚嶇О", i+1); GetPrivateProString(szSection, entry, "103template.csv", pPortParam->m_psLink[i].m_chArrayTempletFileName, sizeof(pPortParam->m_psLink[i].m_chArrayTempletFileName)-1, szPortConfig); #ifdef OS_LINUX @@ -213,12 +213,12 @@ void Buban103ReadConfig(int commid) #else sprintf(szTemplate, "%s/inf/%s", IniFilePath, pPortParam->m_psLink[i].m_chArrayTempletFileName); #endif - // 判断是主站还是子站 + // 鍒ゆ柇鏄富绔欒繕鏄瓙绔 //InitBuban103InfoFromTempletFile(commid, szTemplate, &pPortParam->m_psLink[i]); //InitBuban103InfoFromDat(commid, &pPortParam->m_psLink[i]); if(PROTOCOL_SLAVE == pPortParam->m_psBaoHu->PortType) { - // wen 2005.06.22 初始化错误退出,以前配置争取的仍然可以正确运行 + // wen 2005.06.22 鍒濆鍖栭敊璇鍑,浠ュ墠閰嶇疆浜夊彇鐨勪粛鐒跺彲浠ユ纭繍琛 //InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], FALSE); if(FALSE == InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], FALSE)) { @@ -228,7 +228,7 @@ void Buban103ReadConfig(int commid) } else { - // wen 2005.06.22 初始化错误退出,以前配置争取的仍然可以正确运行 + // wen 2005.06.22 鍒濆鍖栭敊璇鍑,浠ュ墠閰嶇疆浜夊彇鐨勪粛鐒跺彲浠ユ纭繍琛 //InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], TRUE); //InitBuban103InfoFromDat(commid, &pPortParam->m_psLink[i]); if(FALSE == InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], TRUE)) @@ -243,12 +243,12 @@ void Buban103ReadConfig(int commid) } } - // wen 2005.05.17 重新计算数据库点的位置 + // wen 2005.05.17 閲嶆柊璁$畻鏁版嵁搴撶偣鐨勪綅缃 ReCalcDevPntStart(commid, pPortParam); InitBuban103CmdBuf(commid, pPortParam); - // 初始化单向链表,链表最大数量为10个 + // 鍒濆鍖栧崟鍚戦摼琛紝閾捐〃鏈澶ф暟閲忎负10涓 for(i=0; im_iLinkNum; i++) { if(pPortParam->m_psLink[i].m_psProvDev == NULL) @@ -267,12 +267,12 @@ void Buban103ReadConfig(int commid) } //******************************************************************** -//* 读取端口数据函数 * -//*参数:int commid : 端口号 * -//* u_char buf : 数据源缓冲区指针 * -//* int len : 数据源长度 * +//* 璇诲彇绔彛鏁版嵁鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * +//* u_char buf : 鏁版嵁婧愮紦鍐插尯鎸囬拡 * +//* int len : 鏁版嵁婧愰暱搴 * //******************************************************************** -void Buban103RecvData(int commid, u_char *buf, int len)// 规约读数据处理 +void Buban103RecvData(int commid, u_char *buf, int len)// 瑙勭害璇绘暟鎹鐞 { int i; pBUBAN103PORTPARAM pPortParam; @@ -304,7 +304,7 @@ void Buban103RecvData(int commid, u_char *buf, int len)// } else { - // 错误数据增加 + // 閿欒鏁版嵁澧炲姞 SioParam[commid].ErrMsgNum++; } break; @@ -313,7 +313,7 @@ void Buban103RecvData(int commid, u_char *buf, int len)// pPortParam->m_psBaoHu->m_iRevStatus++; pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i]; break; - case 3:// 长度计算 + case 3:// 闀垮害璁$畻 if(buf[i] == 0x68) { if(pPortParam->m_achRecvBuf[1] != pPortParam->m_achRecvBuf[2]) @@ -337,7 +337,7 @@ void Buban103RecvData(int commid, u_char *buf, int len)// pPortParam->m_psBaoHu->m_iRevStatus=5; } break; - case 4:// 正确接收数据 + case 4:// 姝g‘鎺ユ敹鏁版嵁 pPortParam->m_psBaoHu->m_iNeedRevLength--; pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i]; if(pPortParam->m_psBaoHu->m_iNeedRevLength > 0) @@ -369,13 +369,13 @@ void Buban103RecvData(int commid, u_char *buf, int len)// } #endif break; - case 5:// 错误接收数据 + case 5:// 閿欒鎺ユ敹鏁版嵁 default: pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i]; if(buf[i] == 0x16) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { #if 0 @@ -394,7 +394,7 @@ void Buban103RecvData(int commid, u_char *buf, int len)// if(pPortParam->m_iRecvLen > 200) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { #if 0 @@ -421,8 +421,8 @@ void Buban103RecvData(int commid, u_char *buf, int len)// } //******************************************************************** -//* 定时器处理函数 * -//*参数:int commid : 端口号 * +//* 瀹氭椂鍣ㄥ鐞嗗嚱鏁 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void Buban103Timer(int commid) { @@ -436,13 +436,13 @@ void Buban103Timer(int commid) pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo; - // wen 2005.06.22 链路数据为0直接退出 + // wen 2005.06.22 閾捐矾鏁版嵁涓0鐩存帴閫鍑 if(pPortParam->m_iLinkNum <= 0) { return; } - // 如果为转发端口,则不进行轮询指令的生成。 + // 濡傛灉涓鸿浆鍙戠鍙o紝鍒欎笉杩涜杞鎸囦护鐨勭敓鎴愩 if(PROTOCOL_SLAVE != pPortParam->m_psBaoHu->PortType) { pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx]; @@ -474,12 +474,12 @@ void Buban103Timer(int commid) } //******************************************************************** -//* 遥控遥调数据处理函数 * -//*参数:int commid : 端口号 * -//* u_char buf : 数据源缓冲区指针 * -//* int len : 数据源长度 * +//* 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * +//* u_char buf : 鏁版嵁婧愮紦鍐插尯鎸囬拡 * +//* int len : 鏁版嵁婧愰暱搴 * //******************************************************************** -void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥控遥调处理 +void Buban103YkYtProcess(int commid, u_char *buf, int len) // 閬ユ帶閬ヨ皟澶勭悊 { int iDirect,portno, ykytpnt; u_char asdu, dco; @@ -490,20 +490,20 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 BUBAN103PORTPARAM *pPortParam; char szbuf[128]; - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 if(IsExtInfoPtr(commid) == FALSE) { @@ -514,7 +514,7 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 portno = buf[0]+buf[1]*256+buf[2]*65536+buf[3]*16777216; ykytpnt = buf[4]+buf[5]*256+buf[6]*65536+buf[7]*16777216; //ykytpnt--; - // 返校信息(反馈信号) + // 杩旀牎淇℃伅(鍙嶉淇″彿) if(iDirect) { if((buf[8] == STEP_YKYT_SELECT) || (buf[8] == STEP_YKYT_SELECT+3)) @@ -525,9 +525,9 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 YkYtParam.m_iYkYtOperate = buf[9]; SendYkYtCommand2(commid, &YkYtParam); #ifdef _WIN32 - sprintf(szbuf, "WARN(%04d): 转发遥控预令反校成功.\n", _getpid()); + sprintf(szbuf, "WARN(%04d): 杞彂閬ユ帶棰勪护鍙嶆牎鎴愬姛.\n", _getpid()); #else - sprintf(szbuf, "WARN(%04d): 转发遥控预令反校成功.\n", getpid()); + sprintf(szbuf, "WARN(%04d): 杞彂閬ユ帶棰勪护鍙嶆牎鎴愬姛.\n", getpid()); #endif DebugPrint(szbuf); return; @@ -538,8 +538,8 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo; - // 返校失败 - // 条件: 端口链路状态为假或者未找到合适的控点 + // 杩旀牎澶辫触 + // 鏉′欢: 绔彛閾捐矾鐘舵佷负鍋囨垨鑰呮湭鎵惧埌鍚堥傜殑鎺х偣 if(FALSE == FindProtectDevFromYkYtPnt(pPortParam, &sAddrParam, ykytpnt)) { YkYtParam.m_iYkYtPnt = ykytpnt; @@ -561,13 +561,13 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx]; asdu = pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Asdu; - // 操作类型 + // 鎿嶄綔绫诲瀷 switch(buf[8]) { case STEP_YKYT_SELECT: - case STEP_YKYT_SELECT+3://选择 + case STEP_YKYT_SELECT+3://閫夋嫨 if((C_DC_NA_3 != asdu) && (C_RC_NA_3 != asdu)) - {// 直控方式 + {// 鐩存帶鏂瑰紡 YkYtParam.m_iYkYtPnt = ykytpnt; YkYtParam.m_iYkYtStep = buf[8]; YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP; @@ -577,21 +577,21 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 else { ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo; - bCAsdu20.nTYP = asdu; //类型标识 - bCAsdu20.nVSQ = 0x01; //可变结构限定词 - bCAsdu20.nCOT = 0x0c; //传送原因 - bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //应用服务数据单元公共地址 - bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//功能类型 - bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//信息序号 + bCAsdu20.nTYP = asdu; //绫诲瀷鏍囪瘑 + bCAsdu20.nVSQ = 0x01; //鍙彉缁撴瀯闄愬畾璇 + bCAsdu20.nCOT = 0x0c; //浼犻佸師鍥 + bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//鍔熻兘绫诲瀷 + bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//淇℃伅搴忓彿 if(buf[9] == 2) { - bCAsdu20.nDCO = 0x81; //控制断路器(控分) + bCAsdu20.nDCO = 0x81; //鎺у埗鏂矾鍣(鎺у垎) } else { - bCAsdu20.nDCO = 0x82; //控制断路器(控合) + bCAsdu20.nDCO = 0x82; //鎺у埗鏂矾鍣(鎺у悎) } - bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//返回信息标识符 + bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//杩斿洖淇℃伅鏍囪瘑绗 if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255) { @@ -612,36 +612,36 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 } break; case STEP_YKYT_EXEC: - case STEP_YKYT_EXEC+3://执行 + case STEP_YKYT_EXEC+3://鎵ц //pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx]; ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo; - // 遥控遥调不仅仅只用asdu20,还有asdu64/65等 yizhonghu 20060803 - //bCAsdu20.nTYP = 20; //类型标识 - bCAsdu20.nTYP = asdu; //类型标识 - bCAsdu20.nVSQ = 0x81; //可变结构限定词 + // 閬ユ帶閬ヨ皟涓嶄粎浠呭彧鐢╝sdu20,杩樻湁asdu64/65绛 yizhonghu 20060803 + //bCAsdu20.nTYP = 20; //绫诲瀷鏍囪瘑 + bCAsdu20.nTYP = asdu; //绫诲瀷鏍囪瘑 + bCAsdu20.nVSQ = 0x81; //鍙彉缁撴瀯闄愬畾璇 if(asdu == 20) { - bCAsdu20.nCOT = 0x14; //传送原因 - bCAsdu20.nVSQ = 0x81; //可变结构限定词 + bCAsdu20.nCOT = 0x14; //浼犻佸師鍥 + bCAsdu20.nVSQ = 0x81; //鍙彉缁撴瀯闄愬畾璇 } else { - bCAsdu20.nCOT = 0x0c; //传送原因 - bCAsdu20.nVSQ = 0x01; //可变结构限定词 + bCAsdu20.nCOT = 0x0c; //浼犻佸師鍥 + bCAsdu20.nVSQ = 0x01; //鍙彉缁撴瀯闄愬畾璇 } - bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //应用服务数据单元公共地址 - bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//功能类型 - bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//信息序号 + bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//鍔熻兘绫诲瀷 + bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//淇℃伅搴忓彿 dco = 0; if(buf[9] == 2) { - bCAsdu20.nDCO = (1 | dco); //控制断路器(控分) + bCAsdu20.nDCO = (1 | dco); //鎺у埗鏂矾鍣(鎺у垎) } else { - bCAsdu20.nDCO = (2 | dco); //控制断路器(控合) + bCAsdu20.nDCO = (2 | dco); //鎺у埗鏂矾鍣(鎺у悎) } - bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//返回信息标识符 + bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//杩斿洖淇℃伅鏍囪瘑绗 if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255) { @@ -656,25 +656,25 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 } break; case STEP_YKYT_CANCEL: - case STEP_YKYT_CANCEL+3://取消 + case STEP_YKYT_CANCEL+3://鍙栨秷 //pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx]; ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo; - bCAsdu20.nTYP = asdu; //类型标识 - bCAsdu20.nVSQ = 0x01; //可变结构限定词 - bCAsdu20.nCOT = 0x0c; //传送原因 - bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //应用服务数据单元公共地址 - bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//功能类型 - bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//信息序号 + bCAsdu20.nTYP = asdu; //绫诲瀷鏍囪瘑 + bCAsdu20.nVSQ = 0x01; //鍙彉缁撴瀯闄愬畾璇 + bCAsdu20.nCOT = 0x0c; //浼犻佸師鍥 + bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//鍔熻兘绫诲瀷 + bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//淇℃伅搴忓彿 dco = 0xc0; if(buf[9] == 2) { - bCAsdu20.nDCO = (1 | dco); //控制断路器(控分) + bCAsdu20.nDCO = (1 | dco); //鎺у埗鏂矾鍣(鎺у垎) } else { - bCAsdu20.nDCO = (2 | dco); //控制断路器(控合) + bCAsdu20.nDCO = (2 | dco); //鎺у埗鏂矾鍣(鎺у悎) } - bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//返回信息标识符 + bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//杩斿洖淇℃伅鏍囪瘑绗 if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255) { @@ -688,20 +688,20 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD); } break; - case STEP_YKYT_DIRECT:// 直控 + case STEP_YKYT_DIRECT:// 鐩存帶 break; - case STEP_YKYT_STOP:// 急停 + case STEP_YKYT_STOP:// 鎬ュ仠 //pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx]; ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo; - bCAsdu20.nTYP = asdu; //类型标识 - bCAsdu20.nVSQ = 0x01; //可变结构限定词 - bCAsdu20.nCOT = 0x0c; //传送原因 - bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //应用服务数据单元公共地址 - bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//功能类型 - bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//信息序号 + bCAsdu20.nTYP = asdu; //绫诲瀷鏍囪瘑 + bCAsdu20.nVSQ = 0x01; //鍙彉缁撴瀯闄愬畾璇 + bCAsdu20.nCOT = 0x0c; //浼犻佸師鍥 + bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//鍔熻兘绫诲瀷 + bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//淇℃伅搴忓彿 dco = 0x00; - bCAsdu20.nDCO = (3 | dco); //遥调急停 - bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//返回信息标识符 + bCAsdu20.nDCO = (3 | dco); //閬ヨ皟鎬ュ仠 + bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//杩斿洖淇℃伅鏍囪瘑绗 if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255) { @@ -721,10 +721,10 @@ void Buban103YkYtProcess(int commid, u_char *buf, int len) // 遥 } //******************************************************************** -//* 系统下发对时函数 * -//*参数:int commid : 端口号 * +//* 绯荤粺涓嬪彂瀵规椂鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** -void Buban103SendSystemTime(int commid) // 系统对时 +void Buban103SendSystemTime(int commid) // 绯荤粺瀵规椂 { int i, j; CMDPARAM sCmdParam; @@ -748,7 +748,7 @@ void Buban103SendSystemTime(int commid) // 系统 DebugPrint(szbuf); - // 针对所有的装置发送对时命令 + // 閽堝鎵鏈夌殑瑁呯疆鍙戦佸鏃跺懡浠 for(i=0; im_iLinkNum; i++) { pLinkParam = &pPortParam->m_psLink[i]; @@ -766,8 +766,8 @@ void Buban103SendSystemTime(int commid) // 系统 } //******************************************************************** -//* 系统退出时规约处理函数 * -//*参数:int commid : 端口号 * +//* 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void Buban103Exit(int commid) { @@ -910,7 +910,7 @@ void Buban103Exit(int commid) pPortParam->m_psLink = NULL; } -// 该函数用来驱动由转发端口下发到实际装置的保护命令 +// 璇ュ嚱鏁扮敤鏉ラ┍鍔ㄧ敱杞彂绔彛涓嬪彂鍒板疄闄呰缃殑淇濇姢鍛戒护 void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) { int iProvAddr; @@ -922,7 +922,7 @@ void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) if((MSGTYPE_BAOHU_SCADACMD == rtumsg->MsgType) || (MSGTYPE_BAOHU_SCADADATA == rtumsg->MsgType)) { - sprintf(szbuf, "commid%d 收到定值指令", commid); + sprintf(szbuf, "commid%d 鏀跺埌瀹氬兼寚浠", commid); DebugPrint(szbuf); Buban103ScadaProtocolExchange(commid, rtumsg); @@ -936,10 +936,10 @@ void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) switch(rtumsg->MsgData[0]) { - case 0x68:// 长帧 + case 0x68:// 闀垮抚 iProvAddr = rtumsg->MsgData[9]; break; - case 0x10:// 短帧 + case 0x10:// 鐭抚 default: iProvAddr = -1; break; @@ -955,24 +955,24 @@ void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) return; } - // 上行数据 + // 涓婅鏁版嵁 //if(MSGTYPE_BAOHU_103DATA == rtumsg->MsgType) if(bUpData == TRUE) { - // ??? 在这里存储保护数据(应该只有asdu10的数据类型) + // ??? 鍦ㄨ繖閲屽瓨鍌ㄤ繚鎶ゆ暟鎹(搴旇鍙湁asdu10鐨勬暟鎹被鍨) pProvDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psProvDev[sAddrParam.m_iDevIdx]; SingleListAddData(&pProvDevParam->m_sBaoHuData, rtumsg->MsgData, rtumsg->MsgLen); return; } - // 要进行转发数据的判断,需要在这里增加数据格式的存储,来确定转发数据的来源 + // 瑕佽繘琛岃浆鍙戞暟鎹殑鍒ゆ柇锛岄渶瑕佸湪杩欓噷澧炲姞鏁版嵁鏍煎紡鐨勫瓨鍌紝鏉ョ‘瀹氳浆鍙戞暟鎹殑鏉ユ簮 pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuCommid = rtumsg->PortIdx; memcpy((void *)&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sRealAddrParam, (void *)&sAddrParam, sizeof(DEVADDRPARAM)); GetLocalTimeEx(&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sBaoHuCmdStartTime); pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuMsgType = MSGTYPE_BAOHU_103CMD; - // 修改要下发的指令的地址 + // 淇敼瑕佷笅鍙戠殑鎸囦护鐨勫湴鍧 if(sAddrParam.m_uchLinkAddr != 0xFF) { rtumsg->MsgData[5] = sAddrParam.m_uchLinkAddr; @@ -1007,24 +1007,24 @@ int Buban103GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB) return pDevParam->m_sDevParam.m_iCfgGroupNum; } -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// void Buban103ProvMakeYkYtCommand(int commid, u_char *buf, int len) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分, 0=失败) - // (最高位为1时,为返校命令) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒, 0=澶辫触) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 int ykytpnt; u_char asdu; @@ -1057,31 +1057,31 @@ void Buban103ProvMakeYkYtCommand(int commid, u_char *buf, int len) pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx]; ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo; asdu = pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Asdu; - // 遥控的类型标识不仅仅有20还有64/65 yizhonghu 20060803 - //bCAsdu20.nTYP = 20; //类型标识 - bCAsdu20.nTYP = asdu; //类型标识 + // 閬ユ帶鐨勭被鍨嬫爣璇嗕笉浠呬粎鏈20杩樻湁64/65 yizhonghu 20060803 + //bCAsdu20.nTYP = 20; //绫诲瀷鏍囪瘑 + bCAsdu20.nTYP = asdu; //绫诲瀷鏍囪瘑 if(asdu != 20) { - bCAsdu20.nVSQ = 0x01; //可变结构限定词 - bCAsdu20.nCOT = 0x0c; //传送原因 + bCAsdu20.nVSQ = 0x01; //鍙彉缁撴瀯闄愬畾璇 + bCAsdu20.nCOT = 0x0c; //浼犻佸師鍥 } else { - bCAsdu20.nVSQ = 0x81; //可变结构限定词 - bCAsdu20.nCOT = 0x14; //传送原因 + bCAsdu20.nVSQ = 0x81; //鍙彉缁撴瀯闄愬畾璇 + bCAsdu20.nCOT = 0x14; //浼犻佸師鍥 } - bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //应用服务数据单元公共地址 - bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//功能类型 - bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//信息序号 + bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//鍔熻兘绫诲瀷 + bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//淇℃伅搴忓彿 if(buf[9] == 2) { - bCAsdu20.nDCO = 1; //控制断路器(控分) + bCAsdu20.nDCO = 1; //鎺у埗鏂矾鍣(鎺у垎) } else { - bCAsdu20.nDCO = 2; //控制断路器(控合) + bCAsdu20.nDCO = 2; //鎺у埗鏂矾鍣(鎺у悎) } - bCAsdu20.nRII = pDevParam->m_u8RII;//返回信息标识符 + bCAsdu20.nRII = pDevParam->m_u8RII;//杩斿洖淇℃伅鏍囪瘑绗 if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255) { @@ -1097,8 +1097,8 @@ void Buban103ProvMakeYkYtCommand(int commid, u_char *buf, int len) } //******************************************************************** -//* 初始化装置参数函数 * -//*参数:DEVPARAMDEF *psDevParam : 装置参数指针 * +//* 鍒濆鍖栬缃弬鏁板嚱鏁 * +//*鍙傛暟锛欴EVPARAMDEF *psDevParam : 瑁呯疆鍙傛暟鎸囬拡 * //******************************************************************** void SetProtectDevStatus(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bStatus) { @@ -1127,10 +1127,10 @@ void SetProtectDevStatus(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bStatus) (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS); } } -//===========================以下为装置初始化函数===================== +//===========================浠ヤ笅涓鸿缃垵濮嬪寲鍑芥暟===================== //******************************************************************** -//* 初始化装置参数函数 * -//*参数:DEVPARAMDEF *psDevParam : 装置参数指针 * +//* 鍒濆鍖栬缃弬鏁板嚱鏁 * +//*鍙傛暟锛欴EVPARAMDEF *psDevParam : 瑁呯疆鍙傛暟鎸囬拡 * //******************************************************************** void InitDevParam(DEVPARAMDEF *psDevParam) { @@ -1141,10 +1141,10 @@ void InitDevParam(DEVPARAMDEF *psDevParam) } //******************************************************************** -//* 读取模板文件信息函数 * -//*参数:int commid : 端口号 * -//* char *ptrTemplate : 模板文件名称 * -//* BUBAN103LINKDEF *psLink : 要配置端口的参数指针 * +//* 璇诲彇妯℃澘鏂囦欢淇℃伅鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * +//* char *ptrTemplate : 妯℃澘鏂囦欢鍚嶇О * +//* BUBAN103LINKDEF *psLink : 瑕侀厤缃鍙g殑鍙傛暟鎸囬拡 * //******************************************************************** BOOL InitBuban103InfoFromTempletFile(int commid, char *ptrTemplate, @@ -1182,12 +1182,12 @@ BOOL InitBuban103InfoFromTempletFile(int commid, // test //DebugPrint(szBuf); - if(strstr(ptr, "链路描述") != NULL) + if(strstr(ptr, "閾捐矾鎻忚堪") != NULL) { - //处理链路参数 + //澶勭悊閾捐矾鍙傛暟 ParamType = PARAM_LINK; } - else if(strstr(ptr, "设备描述") != NULL) + else if(strstr(ptr, "璁惧鎻忚堪") != NULL) { ParamType = PARAM_DEV; } @@ -1304,12 +1304,12 @@ BOOL InitBuban103InfoFromTempletFileEx(int commid, // test //DebugPrint(szBuf); - if(strstr(ptr, "链路描述") != NULL) + if(strstr(ptr, "閾捐矾鎻忚堪") != NULL) { - //处理链路参数 + //澶勭悊閾捐矾鍙傛暟 ParamType = PARAM_LINK; } - else if(strstr(ptr, "设备描述") != NULL) + else if(strstr(ptr, "璁惧鎻忚堪") != NULL) { ParamType = PARAM_DEV; } @@ -1451,7 +1451,7 @@ BOOL GetLinkParamFromTemplateFile(int commid, HDSFILE hFile,\ switch(i) { - case 0:// 链路描述 + case 0:// 閾捐矾鎻忚堪 if(ilen > 0) { if(ilen >= sizeof(psLink->m_szLinkName)) @@ -1462,9 +1462,9 @@ BOOL GetLinkParamFromTemplateFile(int commid, HDSFILE hFile,\ psLink->m_szLinkName[ilen] = 0; } break; - case 1:// 链路标识 + case 1:// 閾捐矾鏍囪瘑 break; - case 2:// 链路地址 + case 2:// 閾捐矾鍦板潃 if(ilen > 0) { psLink->m_uchLinkAddr = (BYTE)atoi(ptrSour); @@ -1474,55 +1474,55 @@ BOOL GetLinkParamFromTemplateFile(int commid, HDSFILE hFile,\ psLink->m_uchLinkAddr = 255; } break; - case 3:// 装置数量 + case 3:// 瑁呯疆鏁伴噺 if(ilen > 0) { psLink->m_iDevNum = (BYTE)atoi(ptrSour); } break; - case 4:// 备用 + case 4:// 澶囩敤 break; - case 5:// 备用 + case 5:// 澶囩敤 break; - case 6:// 地址偏移 + case 6:// 鍦板潃鍋忕Щ if(ilen > 0) { psLink->m_iProvAddrOffset = atoi(ptrSour); } break; - case 7:// 数据类型 + case 7:// 鏁版嵁绫诲瀷 break; - case 8:// 写入数据库站号 + case 8:// 鍐欏叆鏁版嵁搴撶珯鍙 if(ilen > 0) { psLink->m_iInputStationOfDevStatus = atoi(ptrSour); } break; - case 9:// 写入数据库起始点号 + case 9:// 鍐欏叆鏁版嵁搴撹捣濮嬬偣鍙 if(ilen > 0) { psLink->m_iInputStartPntOfDevStatus = atoi(ptrSour); } break; - case 10:// 是否判断ASDU号 + case 10:// 鏄惁鍒ゆ柇ASDU鍙 if(ilen > 0) { psLink->m_iJudgeAsduNo = atoi(ptrSour); } break; - case 11:// 是否处理扰动数据 + case 11:// 鏄惁澶勭悊鎵板姩鏁版嵁 if(ilen > 0) { psLink->m_iDisTransDataProcess = atoi(ptrSour); } break; - case 12:// 是否屏蔽未配置事件 + case 12:// 鏄惁灞忚斀鏈厤缃簨浠 if(ilen > 0) { psLink->m_iMaskNoMatchString = atoi(ptrSour); } break; - case 13:// 一类数据问询次数(该项不可达,在循环外处理) + case 13:// 涓绫绘暟鎹棶璇㈡鏁(璇ラ」涓嶅彲杈撅紝鍦ㄥ惊鐜澶勭悊) if(ilen > 0) { psLink->m_iQueryNum_CLASS1_Const = atoi(ptrSour); @@ -1535,10 +1535,10 @@ BOOL GetLinkParamFromTemplateFile(int commid, HDSFILE hFile,\ } ptrSour = ptrDest+1; } - // 最后一项 + // 鏈鍚庝竴椤 if(bRetVal == TRUE) { - // 一类数据问询次数 + // 涓绫绘暟鎹棶璇㈡鏁 if(strlen(ptrSour) > 0) { psLink->m_iQueryNum_CLASS1_Const = atoi(ptrSour); @@ -1581,7 +1581,7 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ // test //DebugPrint(szBuf); - if(strstr(ptr, "设备描述") != NULL) + if(strstr(ptr, "璁惧鎻忚堪") != NULL) { i++; iAiNum = 0; @@ -1589,7 +1589,7 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ continue; } - if(strstr(ptr, "链路描述") != NULL) + if(strstr(ptr, "閾捐矾鎻忚堪") != NULL) { break; } @@ -1607,7 +1607,7 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ switch(j) { - case 0:// 设备描述 + case 0:// 璁惧鎻忚堪 if(ParamType != PARAM_NO) { break; @@ -1623,7 +1623,7 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ psLink->m_psDev[i].m_sDevParam.m_szDevName[ilen] = 0; } break; - case 1:// 设备型号 + case 1:// 璁惧鍨嬪彿 if(ParamType != PARAM_NO) { break; @@ -1643,7 +1643,7 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ strcpy(psLink->m_psDev[i].m_sDevParam.m_szType, "dat103"); } break; - case 2:// 设备地址 + case 2:// 璁惧鍦板潃 if(ParamType != PARAM_NO) { break; @@ -1653,7 +1653,7 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ psLink->m_psDev[i].m_sDevParam.m_u8DevAddr = (BYTE)atoi(ptrSour); } break; - case 3:// 转发地址 + case 3:// 杞彂鍦板潃 if(PARAM_NO != ParamType) { break; @@ -1663,17 +1663,17 @@ BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\ psLink->m_psDev[i].m_sDevParam.m_iProvAddr = atoi(ptrSour); } break; - case 4:// 备用 + case 4:// 澶囩敤 break; - case 5:// 备用 + case 5:// 澶囩敤 break; - case 6:// 数量 + case 6:// 鏁伴噺 if(ilen > 0) { iNum = atoi(ptrSour); } break; - case 7:// 数据类型 + case 7:// 鏁版嵁绫诲瀷 if(iNum <= 0) { break; @@ -1869,7 +1869,7 @@ BOOL GetProvDevParamFromTemplateFile(int commid,HDSFILE hFile,\ // test //DebugPrint(szBuf); - if(strstr(ptr, "设备描述") != NULL) + if(strstr(ptr, "璁惧鎻忚堪") != NULL) { i++; iAiNum = 0; @@ -1877,7 +1877,7 @@ BOOL GetProvDevParamFromTemplateFile(int commid,HDSFILE hFile,\ continue; } - if(strstr(ptr, "链路描述") != NULL) + if(strstr(ptr, "閾捐矾鎻忚堪") != NULL) { break; } @@ -1895,13 +1895,13 @@ BOOL GetProvDevParamFromTemplateFile(int commid,HDSFILE hFile,\ switch(j) { - case 0:// 设备描述 + case 0:// 璁惧鎻忚堪 break; - case 1:// 设备型号 + case 1:// 璁惧鍨嬪彿 break; - case 2:// 设备地址 + case 2:// 璁惧鍦板潃 break; - case 3:// 转发地址 + case 3:// 杞彂鍦板潃 if(PARAM_NO != ParamType) { break; @@ -1911,7 +1911,7 @@ BOOL GetProvDevParamFromTemplateFile(int commid,HDSFILE hFile,\ psLink->m_psProvDev[i].m_iProvAddr = atoi(ptrSour); } break; - case 4:// 端口号&状态站号&状态点号 + case 4:// 绔彛鍙&鐘舵佺珯鍙&鐘舵佺偣鍙 if(PARAM_NO != ParamType) { break; @@ -1943,15 +1943,15 @@ BOOL GetProvDevParamFromTemplateFile(int commid,HDSFILE hFile,\ } } break; - case 5:// 备用 + case 5:// 澶囩敤 break; - case 6:// 数量 + case 6:// 鏁伴噺 if(ilen > 0) { iNum = atoi(ptrSour); } break; - case 7:// 数据类型 + case 7:// 鏁版嵁绫诲瀷 if(iNum <= 0) { break; @@ -2077,7 +2077,7 @@ BOOL GetInfoData(char *pInfo, int iPntNo, DBORIENTATION *psDB) *ptr2 = 0; switch(i) { - case 0:// 描述 + case 0:// 鎻忚堪 break; case 1:// ASDU if(strlen(ptr1) > 0) @@ -2119,7 +2119,7 @@ BOOL GetInfoData(char *pInfo, int iPntNo, DBORIENTATION *psDB) = (u_char)psDB->m_psDataInfo[iPntNo].m_u8Inf; } break; - case 6://是否总召唤数据 + case 6://鏄惁鎬诲彫鍞ゆ暟鎹 if(strlen(ptr1) > 0) { psDB->m_psDataInfo[iPntNo].m_u8LoopData = atoi(ptr1); @@ -2159,7 +2159,7 @@ BOOL GetInfoData(char *pInfo, int iPntNo, DBORIENTATION *psDB) psDB->m_psDataInfo[iPntNo].m_u8ProvInf = atoi(ptr1); psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0; break; - case 6://是否总召唤数据 + case 6://鏄惁鎬诲彫鍞ゆ暟鎹 psDB->m_psDataInfo[iPntNo].m_u8LoopData = atoi(ptr1); break; default: @@ -2180,7 +2180,7 @@ BOOL GetInfoData(char *pInfo, int iPntNo, DBORIENTATION *psDB) case 5:// PROV_INF psDB->m_psDataInfo[iPntNo].m_u8ProvInf\ = (u_char)psDB->m_psDataInfo[iPntNo].m_u8Inf; - case 6://是否总召唤数据 + case 6://鏄惁鎬诲彫鍞ゆ暟鎹 psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0; break; default: @@ -2224,7 +2224,7 @@ BOOL GetSyncTimeInfoData(char *pInfo, DBINFO *psSyncInfo) *ptr2 = 0; switch(i) { - case 0:// 描述 + case 0:// 鎻忚堪 break; case 1:// ASDU if(strlen(ptr1) > 0) @@ -2340,7 +2340,7 @@ BOOL InitBuban103InfoFromDat(int commid, BUBAN103LINKDEF *psLink) //psGroupParam->m_iPntNum = 0; psGroupParam->m_u32CurPntNo = 1; psGroupParam->m_bInit = FALSE; - // (缺省为5,即第一个条目大于5的数据包为中间数据包) + // (缂虹渷涓5锛屽嵆绗竴涓潯鐩ぇ浜5鐨勬暟鎹寘涓轰腑闂存暟鎹寘) psGroupParam->m_iStartItemNo = 5; if(PROTECT_EVENT_PNT_TYPE == psGroupParam->m_iDataType) @@ -2354,11 +2354,11 @@ BOOL InitBuban103InfoFromDat(int commid, BUBAN103LINKDEF *psLink) { //psGroupParam->m_psEventInfo = NULL; //psGroupParam->m_psDataInfo = NULL; - sprintf(szSection, "组号%d", psGroupParam->m_iGroupNo); + sprintf(szSection, "缁勫彿%d", psGroupParam->m_iGroupNo); szbuf[0] = 0; - GetPrivateProString(szSection, "数量", "0", szbuf, sizeof(szbuf), szDatFile); + GetPrivateProString(szSection, "鏁伴噺", "0", szbuf, sizeof(szbuf), szDatFile); - //sprintf(szDbg, "[%s]:[数量] = %s\n", szSection, szbuf); + //sprintf(szDbg, "[%s]:[鏁伴噺] = %s\n", szSection, szbuf); //DebugPrint(szDbg); psGroupParam->m_iPntNum = atoi(szbuf); @@ -2385,10 +2385,10 @@ BOOL InitBuban103InfoFromDat(int commid, BUBAN103LINKDEF *psLink) } } - GetPrivateProString(szSection, "首条目号", "-1", szbuf, sizeof(szbuf), szDatFile); + GetPrivateProString(szSection, "棣栨潯鐩彿", "-1", szbuf, sizeof(szbuf), szDatFile); - //sprintf(szDbg, "[%s]:[首条目号] = %s\n", szSection, szbuf); + //sprintf(szDbg, "[%s]:[棣栨潯鐩彿] = %s\n", szSection, szbuf); //DebugPrint(szDbg); if(atoi(szbuf) > 0) @@ -2410,17 +2410,17 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) BOOL bValue; bValue = FALSE; - sprintf(szSection, "组号%d", psGroupParam->m_iGroupNo); + sprintf(szSection, "缁勫彿%d", psGroupParam->m_iGroupNo); for(i=0; im_iPntNum; i++) { ptrFirst = (char *)szbuf; sprintf(szItem, "%d", i+1); - if(GetPrivateProString(szSection, szItem, "未知名称", szbuf, sizeof(szbuf), szDatFileName) < 0) + if(GetPrivateProString(szSection, szItem, "鏈煡鍚嶇О", szbuf, sizeof(szbuf), szDatFileName) < 0) { - strcpy(szbuf, "未知名称"); + strcpy(szbuf, "鏈煡鍚嶇О"); } - // 名称 + // 鍚嶇О ptrFind = strstr(ptrFirst, ","); if(ptrFind) { @@ -2457,13 +2457,13 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) psGroupParam->m_psDataInfo[i].m_fValue = (float)(i+1); } - // 其他信息 + // 鍏朵粬淇℃伅 if(PROTECT_DI_PNT_TYPE == psGroupParam->m_iDataType) continue; if(PROTECT_AI_PNT_TYPE == psGroupParam->m_iDataType) { - // 序号 + // 搴忓彿 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2471,7 +2471,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) else continue; - // 占有位 + // 鍗犳湁浣 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2479,7 +2479,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) else continue; - // 系数 + // 绯绘暟 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2487,7 +2487,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) else continue; - // 单位 + // 鍗曚綅 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2512,7 +2512,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) if(PROTECT_FIX_PNT_TYPE == psGroupParam->m_iDataType) { - // 类型(AI=1, DI=2) + // 绫诲瀷(AI=1, DI=2) ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2522,7 +2522,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) iFixDataType = atoi(ptrFirst); psGroupParam->m_psDataInfo[i].iFixDataType = (u_char)iFixDataType; - // 序号 + // 搴忓彿 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2530,7 +2530,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) else continue; - // 占有位 + // 鍗犳湁浣 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2538,15 +2538,15 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) else continue; - // 开关量 + // 寮鍏抽噺 if(iFixDataType == 2) { - // 可能存在有动作描述 + // 鍙兘瀛樺湪鏈夊姩浣滄弿杩 continue; } - // 以下为模拟量初始化 - // 系数(充当步长) + // 浠ヤ笅涓烘ā鎷熼噺鍒濆鍖 + // 绯绘暟(鍏呭綋姝ラ暱) ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); psGroupParam->m_psDataInfo[i].m_fStepValue = (float)atof(ptrFirst); @@ -2555,7 +2555,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) else continue; - // 单位 + // 鍗曚綅 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); if(ptrFind) @@ -2577,7 +2577,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) if(NULL == ptrFind) continue; - // 最小值 + // 鏈灏忓 ptrFirst = ptrFind + 1; ptrFind = strstr(ptrFirst, ","); psGroupParam->m_psDataInfo[i].m_fMinValue = (float)atof(ptrFirst); @@ -2590,7 +2590,7 @@ void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName) continue; } - // 最大值 + // 鏈澶у ptrFirst = ptrFind + 1; psGroupParam->m_psDataInfo[i].m_fMaxValue = (float)atof(ptrFirst); } @@ -2635,7 +2635,7 @@ void InitBuban103LinkCmdBuf(BUBAN103LINKDEF *psLinkParam) } } - // 初始化指令队列 + // 鍒濆鍖栨寚浠ら槦鍒 for(i=0; im_sArrayCmdTime[i].m_iCmdTimerConst > 20) @@ -2681,7 +2681,7 @@ void InitBuban103DevCmdBuf(BUBAN103LINKDEF *psLinkParam, int iDevNo) psProvDevParam = NULL; } - // 链路地址为255,则每个装置都是链路装置 + // 閾捐矾鍦板潃涓255锛屽垯姣忎釜瑁呯疆閮芥槸閾捐矾瑁呯疆 if(psLinkParam->m_uchLinkAddr == 0xFF) { psLinkParam->m_pbLinkOk[iDevNo] = FALSE; @@ -2720,13 +2720,13 @@ void InitBuban103DevCmdBuf(BUBAN103LINKDEF *psLinkParam, int iDevNo) psProvDevParam->m_sProvSoe.m_shRear = 0; psProvDevParam->m_sProvSoe.m_shSoeNum = 0; - // 转发 + // 杞彂 psProvDevParam->m_bProvQuery = FALSE; psProvDevParam->m_iProvAsdu5Cause = 0; psProvDevParam->m_iProvQueryStepWithASDU = 0; - // wen 2005.06.22 不可以在这里初始化链表 - // 初始化单向链表,链表最大数量为10个 + // wen 2005.06.22 涓嶅彲浠ュ湪杩欓噷鍒濆鍖栭摼琛 + // 鍒濆鍖栧崟鍚戦摼琛紝閾捐〃鏈澶ф暟閲忎负10涓 //SingleListInit(&psProvDevParam->m_sBaoHuData, 10); } } @@ -2827,18 +2827,18 @@ void ReCalcDevPntStart(int commid, BUBAN103PORTPARAM *psPortParam) } } } -//===========================装置初始化函数结束======================= +//===========================瑁呯疆鍒濆鍖栧嚱鏁扮粨鏉======================= -//===========================以下为指令生成函数======================= +//===========================浠ヤ笅涓烘寚浠ょ敓鎴愬嚱鏁======================= //************************************************************************** -//* 生成 Buban103协议链路层命令 * -//*参数:u_32 commid:RTU端口号 * -//* BYTE bLinkAddr:链路地址 * -//* u_char link_cmd_idx:链路层命令索引 * -//* u_char *msg:应用层命令信息,即应用服务数据单元,如果使用固定 * -//* 长度的帧格式,则用NULL调用 * -//* u_32 len:应用层命令信息的长度,如果使用固定长度的帧格式,则用0调用* -//* u_32 cmdtype: 指令缓冲区类型 * +//* 鐢熸垚 Buban103鍗忚閾捐矾灞傚懡浠 * +//*鍙傛暟锛歶_32 commid:RTU绔彛鍙 * +//* BYTE bLinkAddr:閾捐矾鍦板潃 * +//* u_char link_cmd_idx:閾捐矾灞傚懡浠ょ储寮 * +//* u_char *msg:搴旂敤灞傚懡浠や俊鎭紝鍗冲簲鐢ㄦ湇鍔℃暟鎹崟鍏冿紝濡傛灉浣跨敤鍥哄畾 * +//* 闀垮害鐨勫抚鏍煎紡锛屽垯鐢∟ULL璋冪敤 * +//* u_32 len:搴旂敤灞傚懡浠や俊鎭殑闀垮害锛屽鏋滀娇鐢ㄥ浐瀹氶暱搴︾殑甯ф牸寮忥紝鍒欑敤0璋冪敤* +//* u_32 cmdtype: 鎸囦护缂撳啿鍖虹被鍨 * //************************************************************************** void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, u_char* msg, u_32 len, u_32 cmdtype) @@ -2853,7 +2853,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, switch(link_cmd_idx) { - case C_RLK_NA_3: // 请求链路状态 + case C_RLK_NA_3: // 璇锋眰閾捐矾鐘舵 bClpdu_fix.nSTART = 0x10; bClpdu_fix.nCONTROL = C_RLK_NA_3 | 0x40; bClpdu_fix.nADDR = bLinkAddr; @@ -2862,7 +2862,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5); break; - case C_RFB_NA_3: // 复位帧计数位 + case C_RFB_NA_3: // 澶嶄綅甯ц鏁颁綅 bClpdu_fix.nSTART = 0x10; bClpdu_fix.nCONTROL = C_RFB_NA_3 | 0x40; bClpdu_fix.nADDR = bLinkAddr; @@ -2871,7 +2871,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5); break; - case C_RCU_NA_3: // 复位通讯单元 + case C_RCU_NA_3: // 澶嶄綅閫氳鍗曞厓 bClpdu_fix.nSTART = 0x10; bClpdu_fix.nCONTROL = C_RCU_NA_3 | 0x40; bClpdu_fix.nADDR = bLinkAddr; @@ -2880,7 +2880,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5); break; - case C_PL1_NA_3: // 召唤1级用户数据 + case C_PL1_NA_3: // 鍙敜1绾х敤鎴锋暟鎹 bClpdu_fix.nSTART = 0x10; bClpdu_fix.nCONTROL = C_PL1_NA_3 | 0x50; bClpdu_fix.nADDR = bLinkAddr; @@ -2889,7 +2889,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, PutPollCmdToBuf(commid, INSERT_POLL_CMD, 0, (char*)&bClpdu_fix, 5); break; - case C_PL2_NA_3: // 召唤2级用户数据 + case C_PL2_NA_3: // 鍙敜2绾х敤鎴锋暟鎹 bClpdu_fix.nSTART = 0x10; bClpdu_fix.nCONTROL = C_PL2_NA_3 | 0x50; bClpdu_fix.nADDR = bLinkAddr; @@ -2898,7 +2898,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5); break; - case C_SD1_NA_3: // 传送数据(发送/确认帧) + case C_SD1_NA_3: // 浼犻佹暟鎹紙鍙戦/纭甯э級 bClpdu_varr.nSTART1 = 0x68; bClpdu_varr.nSTART2 = 0x68; if(len != 0) @@ -2916,7 +2916,7 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, tmp[len+7] = nEnd; PutPollCmdToBuf(commid, cmdtype, 0, (char*)tmp, len+8); break; - case C_SD2_NA_3: // 传送数据(发送/无回答帧) + case C_SD2_NA_3: // 浼犻佹暟鎹紙鍙戦/鏃犲洖绛斿抚锛 bClpdu_varr.nSTART1 = 0x68; bClpdu_varr.nSTART2 = 0x68; if(len != 0) @@ -2940,9 +2940,9 @@ void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, } //************************************************************* -//* 生成时间同步命令 * -//*参数:u_32 commid:RTU端口号 * -//* u_char addr:间隔设备地址 +//* 鐢熸垚鏃堕棿鍚屾鍛戒护 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//* u_char addr:闂撮殧璁惧鍦板潃 //************************************************************* void MakeTimeSyn_CAsdu6(u_32 commid, CMDPARAM *psCmdParam) { @@ -2968,7 +2968,7 @@ void MakeTimeSyn_CAsdu6(u_32 commid, CMDPARAM *psCmdParam) bCAsdu6.nTIME[4] = (u_char)(sCurTime.Day&0x1F); bCAsdu6.nTIME[5] = (u_char)sCurTime.Month; bCAsdu6.nTIME[6] = (u_char)(sCurTime.Year%100); - sprintf(szbuf, "对时时间为:%d年%d月%d日%d点%d分%d秒%d毫秒",sCurTime.Year,sCurTime.Month,bCAsdu6.nTIME[4],sCurTime.Hour,sCurTime.Min,sCurTime.Sec,sCurTime.mSec-sCurTime.Sec*1000); + sprintf(szbuf, "瀵规椂鏃堕棿涓:%d骞%d鏈%d鏃%d鐐%d鍒%d绉%d姣",sCurTime.Year,sCurTime.Month,bCAsdu6.nTIME[4],sCurTime.Hour,sCurTime.Min,sCurTime.Sec,sCurTime.mSec-sCurTime.Sec*1000); DebugPrint(szbuf); if(psCmdParam->m_sDevAddr.m_uchLinkAddr == 255) @@ -2984,9 +2984,9 @@ void MakeTimeSyn_CAsdu6(u_32 commid, CMDPARAM *psCmdParam) } //************************************************************* -//* 生成总查询启动命令 * -//*参数:u_32 commid:RTU端口号 * -//*参数:u_char addr:间隔设备地址 +//* 鐢熸垚鎬绘煡璇㈠惎鍔ㄥ懡浠 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//*鍙傛暟锛歶_char addr:闂撮殧璁惧鍦板潃 //************************************************************* void MakeAllQuery_CAsdu7(u_32 commid, CMDPARAM *psCmdParam) { @@ -3007,7 +3007,7 @@ void MakeAllQuery_CAsdu7(u_32 commid, CMDPARAM *psCmdParam) bCAsdu7.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr; bCAsdu7.nFUN = 255; bCAsdu7.nINF = 0; - //扫描值需核实 + //鎵弿鍊奸渶鏍稿疄 u8SCN = pPortParam->m_psLink[psCmdParam->m_sDevAddr.m_iLinkIdx].m_psDev[psCmdParam->m_sDevAddr.m_iDevIdx].m_sDevParam.m_u8SCN; bCAsdu7.nSCN = u8SCN; MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr,\ @@ -3018,16 +3018,16 @@ void MakeAllQuery_CAsdu7(u_32 commid, CMDPARAM *psCmdParam) } //******************************************************************* -//* 生成通用分类数据命令 * -//*参数:u_32 commid:RTU端口号 * -//*参数:u_char addr:间隔设备地址 -//* u_char inf:信息序号,取值范围只能是248-251,其中: * -//* 248:写条目 * -//* 249:带确认的写条目 * -//* 250:带执行的写条目 * -//* 251:写条目终止 * -//* unsigned char* dataset:通用分类数据集信息 * -//* u_char ngd:通用分类数据集数目(数目、计数器位、后续状态位) * +//* 鐢熸垚閫氱敤鍒嗙被鏁版嵁鍛戒护 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//*鍙傛暟锛歶_char addr:闂撮殧璁惧鍦板潃 +//* u_char inf:淇℃伅搴忓彿锛屽彇鍊艰寖鍥村彧鑳芥槸248-251,鍏朵腑锛 * +//* 248锛氬啓鏉$洰 * +//* 249锛氬甫纭鐨勫啓鏉$洰 * +//* 250锛氬甫鎵ц鐨勫啓鏉$洰 * +//* 251锛氬啓鏉$洰缁堟 * +//* unsigned char* dataset:閫氱敤鍒嗙被鏁版嵁闆嗕俊鎭 * +//* u_char ngd:閫氱敤鍒嗙被鏁版嵁闆嗘暟鐩紙鏁扮洰銆佽鏁板櫒浣嶃佸悗缁姸鎬佷綅锛 * //******************************************************************* void MakeGenIdentData_CAsdu10(u_32 commid, CMDPARAM *psCmdParam, u_char *dataset, u_char ngd) @@ -3050,12 +3050,12 @@ void MakeGenIdentData_CAsdu10(u_32 commid, CMDPARAM *psCmdParam, } bCAsdu10.nRII = psCmdParam->m_uchRII; bCAsdu10.nNGD = ngd; - //计算数据集的长度 + //璁$畻鏁版嵁闆嗙殑闀垮害 start = 0; len = 0; for(i=0; im_uchRII; bCAsdu10.nNGD = ngd; - //计算数据集的长度 + //璁$畻鏁版嵁闆嗙殑闀垮害 start = 0; len = 0; for(i=0; im_sDevAddr.m_uchCommAddr; - bCAsdu20.nFUN = 128;//需要验证确认 + bCAsdu20.nFUN = 128;//闇瑕侀獙璇佺‘璁 bCAsdu20.nINF = psCmdParam->m_uchInf; bCAsdu20.nRII = psCmdParam->m_uchRII; if(cmd) @@ -3195,18 +3195,18 @@ void MakeGenCommand_CAsdu20(u_32 commid, CMDPARAM *psCmdParam, bool cmd) } //****************************************************************** -//* 生成通用分类命令 * -//*参数:u_32 commid:RTU端口号 * -//*参数:u_char addr:间隔设备地址 -//* u_char inf:信息序号,取值范围只能是240-245,其中: * -//* 240:读全部被定义的组的标题 * -//* 241:读一个组的全部条目的值或属性 * -//* 242:未用 * -//* 243:读单个条目的目录 * -//* 244:读单个条目的值或属性 * -//* 245:对通用分类数据的总查询(总召唤) * -//* GEN_DATAGROUP* datagroup:通用分类数据组信息 * -//* u_char nog:通用分类标示数目 * +//* 鐢熸垚閫氱敤鍒嗙被鍛戒护 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//*鍙傛暟锛歶_char addr:闂撮殧璁惧鍦板潃 +//* u_char inf:淇℃伅搴忓彿锛屽彇鍊艰寖鍥村彧鑳芥槸240-245,鍏朵腑锛 * +//* 240锛氳鍏ㄩ儴琚畾涔夌殑缁勭殑鏍囬 * +//* 241锛氳涓涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 * +//* 242锛氭湭鐢 * +//* 243锛氳鍗曚釜鏉$洰鐨勭洰褰 * +//* 244锛氳鍗曚釜鏉$洰鐨勫兼垨灞炴 * +//* 245锛氬閫氱敤鍒嗙被鏁版嵁鐨勬绘煡璇紙鎬诲彫鍞わ級 * +//* GEN_DATAGROUP* datagroup:閫氱敤鍒嗙被鏁版嵁缁勪俊鎭 * +//* u_char nog:閫氱敤鍒嗙被鏍囩ず鏁扮洰 * //****************************************************************** void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam, GEN_DATAGROUP* datagroup ,u_char nog) @@ -3227,7 +3227,7 @@ void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam, { bCAsdu21.nCOT = C_CAUSE_QUERY; } - else // 通用分类读命令 + else // 閫氱敤鍒嗙被璇诲懡浠 { bCAsdu21.nCOT = C_CAUSE_READWITHVALIDDATA; } @@ -3242,7 +3242,7 @@ void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam, else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d生成通用分类命令时,INF=%d不在指定的范围内!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d鐢熸垚閫氱敤鍒嗙被鍛戒护鏃讹紝INF=%d涓嶅湪鎸囧畾鐨勮寖鍥村唴!!!", commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, psCmdParam->m_sDevAddr.m_uchCommAddr, psCmdParam->m_uchInf); DebugPrint(szbuf); #endif @@ -3267,42 +3267,42 @@ void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam, } //************************************************************* -//* 生成扰动数据传输命令 * -//*参数:u_32 commid:RTU端口号 * -//*参数:u_char addr:间隔设备地址 -//* u_char too:命令类型,数值范围为1--255,包括: -//* 1=故障的选择 -//* 2=请求扰动数据 -//* 3=中止扰动数据 -//* 4--7 = 备用 -//* 8=通道的请求 -//* 9=通道的中止 -//* 10--15 = 备用 -//* 16=请求带标志的状态变位 -//* 17=中止带标志的状态变位 -//* 18--23 = 备用 -//* 24=请求被记录扰动表 -//* 25--31 =备用 -//* 32=不带中止的扰动数据传输的结束 -//* 33=由控制系统所中止的扰动数据传输的结束 -//* 34=由继电保护设备(或间隔单元)所中止的扰动数据传输的结束 -//* 35=不带中止的通道传输的结束 -//* 36=由控制系统所中止的通道传输的结束 -//* 37=由继电保护设备(或间隔单元)所中止饿通道传输的结束 -//* 38=不带中止的带标志的状态变位的传输结束 -//* 39=由控制系统所中止的带标志的状态变位的传输的结束 -//* 40=由继电保护设备(或间隔单元)所中止的带标志的状态变位传输的结束 -//* 41--63=备用 -//* 64=成功地扰动数据传输(肯定) -//* 65=不成功地扰动数据传输(否定) -//* 66=成功地通道传输(肯定) -//* 67=不成功地通道传输(否定) -//* 68=成功地带标志的状态变位传输(肯定) -//* 69=不成功地带标志的状态变位传输(否定) -//* 70--255=备用 -//* u_char tov:扰动值的类型 -//* u_short fan:故障序号 -//* u_char acc:实际通道序号 +//* 鐢熸垚鎵板姩鏁版嵁浼犺緭鍛戒护 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//*鍙傛暟锛歶_char addr:闂撮殧璁惧鍦板潃 +//* u_char too:鍛戒护绫诲瀷锛屾暟鍊艰寖鍥翠负1--255锛屽寘鎷細 +//* 1=鏁呴殰鐨勯夋嫨 +//* 2=璇锋眰鎵板姩鏁版嵁 +//* 3=涓鎵板姩鏁版嵁 +//* 4--7 = 澶囩敤 +//* 8=閫氶亾鐨勮姹 +//* 9=閫氶亾鐨勪腑姝 +//* 10--15 = 澶囩敤 +//* 16=璇锋眰甯︽爣蹇楃殑鐘舵佸彉浣 +//* 17=涓甯︽爣蹇楃殑鐘舵佸彉浣 +//* 18--23 = 澶囩敤 +//* 24=璇锋眰琚褰曟壈鍔ㄨ〃 +//* 25--31 =澶囩敤 +//* 32=涓嶅甫涓鐨勬壈鍔ㄦ暟鎹紶杈撶殑缁撴潫 +//* 33=鐢辨帶鍒剁郴缁熸墍涓鐨勬壈鍔ㄦ暟鎹紶杈撶殑缁撴潫 +//* 34=鐢辩户鐢典繚鎶よ澶囷紙鎴栭棿闅斿崟鍏冿級鎵涓鐨勬壈鍔ㄦ暟鎹紶杈撶殑缁撴潫 +//* 35=涓嶅甫涓鐨勯氶亾浼犺緭鐨勭粨鏉 +//* 36=鐢辨帶鍒剁郴缁熸墍涓鐨勯氶亾浼犺緭鐨勭粨鏉 +//* 37=鐢辩户鐢典繚鎶よ澶囷紙鎴栭棿闅斿崟鍏冿級鎵涓楗块氶亾浼犺緭鐨勭粨鏉 +//* 38=涓嶅甫涓鐨勫甫鏍囧織鐨勭姸鎬佸彉浣嶇殑浼犺緭缁撴潫 +//* 39=鐢辨帶鍒剁郴缁熸墍涓鐨勫甫鏍囧織鐨勭姸鎬佸彉浣嶇殑浼犺緭鐨勭粨鏉 +//* 40=鐢辩户鐢典繚鎶よ澶囷紙鎴栭棿闅斿崟鍏冿級鎵涓鐨勫甫鏍囧織鐨勭姸鎬佸彉浣嶄紶杈撶殑缁撴潫 +//* 41--63=澶囩敤 +//* 64=鎴愬姛鍦版壈鍔ㄦ暟鎹紶杈擄紙鑲畾锛 +//* 65=涓嶆垚鍔熷湴鎵板姩鏁版嵁浼犺緭锛堝惁瀹氾級 +//* 66=鎴愬姛鍦伴氶亾浼犺緭锛堣偗瀹氾級 +//* 67=涓嶆垚鍔熷湴閫氶亾浼犺緭锛堝惁瀹氾級 +//* 68=鎴愬姛鍦板甫鏍囧織鐨勭姸鎬佸彉浣嶄紶杈擄紙鑲畾锛 +//* 69=涓嶆垚鍔熷湴甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈擄紙鍚﹀畾锛 +//* 70--255=澶囩敤 +//* u_char tov:鎵板姩鍊肩殑绫诲瀷 +//* u_short fan:鏁呴殰搴忓彿 +//* u_char acc:瀹為檯閫氶亾搴忓彿 //************************************************************* void MakeDisTrans_CAsdu24(u_32 commid, CMDPARAM *psCmdParam, u_char too, u_char tov, u_short fan, u_char acc) @@ -3324,42 +3324,42 @@ void MakeDisTrans_CAsdu24(u_32 commid, CMDPARAM *psCmdParam, } //************************************************************* -//* 生成扰动数据传输的认可命令 * -//*参数:u_32 commid:RTU端口号 * -//*参数:u_char addr:间隔设备地址 -//* u_char too:命令类型,数值范围为1--255,包括: -//* 1=故障的选择 -//* 2=请求扰动数据 -//* 3=中止扰动数据 -//* 4--7 = 备用 -//* 8=通道的请求 -//* 9=通道的中止 -//* 10--15 = 备用 -//* 16=请求带标志的状态变位 -//* 17=中止带标志的状态变位 -//* 18--23 = 备用 -//* 24=请求被记录扰动表 -//* 25--31 =备用 -//* 32=不带中止的扰动数据传输的结束 -//* 33=由控制系统所中止的扰动数据传输的结束 -//* 34=由继电保护设备(或间隔单元)所中止的扰动数据传输的结束 -//* 35=不带中止的通道传输的结束 -//* 36=由控制系统所中止的通道传输的结束 -//* 37=由继电保护设备(或间隔单元)所中止饿通道传输的结束 -//* 38=不带中止的带标志的状态变位的传输结束 -//* 39=由控制系统所中止的带标志的状态变位的传输的结束 -//* 40=由继电保护设备(或间隔单元)所中止的带标志的状态变位传输的结束 -//* 41--63=备用 -//* 64=成功地扰动数据传输(肯定) -//* 65=不成功地扰动数据传输(否定) -//* 66=成功地通道传输(肯定) -//* 67=不成功地通道传输(否定) -//* 68=成功地带标志的状态变位传输(肯定) -//* 69=不成功地带标志的状态变位传输(否定) -//* 70--255=备用 -//* u_char tov:扰动值的类型 -//* u_short fan:故障序号 -//* u_char acc:实际通道序号 +//* 鐢熸垚鎵板姩鏁版嵁浼犺緭鐨勮鍙懡浠 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//*鍙傛暟锛歶_char addr:闂撮殧璁惧鍦板潃 +//* u_char too:鍛戒护绫诲瀷锛屾暟鍊艰寖鍥翠负1--255锛屽寘鎷細 +//* 1=鏁呴殰鐨勯夋嫨 +//* 2=璇锋眰鎵板姩鏁版嵁 +//* 3=涓鎵板姩鏁版嵁 +//* 4--7 = 澶囩敤 +//* 8=閫氶亾鐨勮姹 +//* 9=閫氶亾鐨勪腑姝 +//* 10--15 = 澶囩敤 +//* 16=璇锋眰甯︽爣蹇楃殑鐘舵佸彉浣 +//* 17=涓甯︽爣蹇楃殑鐘舵佸彉浣 +//* 18--23 = 澶囩敤 +//* 24=璇锋眰琚褰曟壈鍔ㄨ〃 +//* 25--31 =澶囩敤 +//* 32=涓嶅甫涓鐨勬壈鍔ㄦ暟鎹紶杈撶殑缁撴潫 +//* 33=鐢辨帶鍒剁郴缁熸墍涓鐨勬壈鍔ㄦ暟鎹紶杈撶殑缁撴潫 +//* 34=鐢辩户鐢典繚鎶よ澶囷紙鎴栭棿闅斿崟鍏冿級鎵涓鐨勬壈鍔ㄦ暟鎹紶杈撶殑缁撴潫 +//* 35=涓嶅甫涓鐨勯氶亾浼犺緭鐨勭粨鏉 +//* 36=鐢辨帶鍒剁郴缁熸墍涓鐨勯氶亾浼犺緭鐨勭粨鏉 +//* 37=鐢辩户鐢典繚鎶よ澶囷紙鎴栭棿闅斿崟鍏冿級鎵涓楗块氶亾浼犺緭鐨勭粨鏉 +//* 38=涓嶅甫涓鐨勫甫鏍囧織鐨勭姸鎬佸彉浣嶇殑浼犺緭缁撴潫 +//* 39=鐢辨帶鍒剁郴缁熸墍涓鐨勫甫鏍囧織鐨勭姸鎬佸彉浣嶇殑浼犺緭鐨勭粨鏉 +//* 40=鐢辩户鐢典繚鎶よ澶囷紙鎴栭棿闅斿崟鍏冿級鎵涓鐨勫甫鏍囧織鐨勭姸鎬佸彉浣嶄紶杈撶殑缁撴潫 +//* 41--63=澶囩敤 +//* 64=鎴愬姛鍦版壈鍔ㄦ暟鎹紶杈擄紙鑲畾锛 +//* 65=涓嶆垚鍔熷湴鎵板姩鏁版嵁浼犺緭锛堝惁瀹氾級 +//* 66=鎴愬姛鍦伴氶亾浼犺緭锛堣偗瀹氾級 +//* 67=涓嶆垚鍔熷湴閫氶亾浼犺緭锛堝惁瀹氾級 +//* 68=鎴愬姛鍦板甫鏍囧織鐨勭姸鎬佸彉浣嶄紶杈擄紙鑲畾锛 +//* 69=涓嶆垚鍔熷湴甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈擄紙鍚﹀畾锛 +//* 70--255=澶囩敤 +//* u_char tov:鎵板姩鍊肩殑绫诲瀷 +//* u_short fan:鏁呴殰搴忓彿 +//* u_char acc:瀹為檯閫氶亾搴忓彿 //************************************************************* void MakeDisTrans_CAsdu25(u_32 commid, CMDPARAM *psCmdParam, u_char too, u_char tov, u_short fan, u_char acc) @@ -3381,9 +3381,9 @@ void MakeDisTrans_CAsdu25(u_32 commid, CMDPARAM *psCmdParam, } //************************************************************* -//* 生成脉冲电度的查询命令 * -//*参数:u_32 commid:RTU端口号 * -//*参数:u_char addr:间隔设备地址 +//* 鐢熸垚鑴夊啿鐢靛害鐨勬煡璇㈠懡浠 * +//*鍙傛暟:u_32 commid:RTU绔彛鍙 * +//*鍙傛暟锛歶_char addr:闂撮殧璁惧鍦板潃 //************************************************************* void MakeQCC_CAsdu88(u_32 commid, CMDPARAM *psCmdParam) { @@ -3397,7 +3397,7 @@ void MakeQCC_CAsdu88(u_32 commid, CMDPARAM *psCmdParam) // ??? wen 2003.11.03 bu(1)---bu(6) bCAsdu88.nFUN = 1;// BU(1) bCAsdu88.nINF = 0; - // 使用冻结不复位命令yizhonghu 20060803 + // 浣跨敤鍐荤粨涓嶅浣嶅懡浠izhonghu 20060803 //bCAsdu88.nQCC = 5; bCAsdu88.nQCC = 45; bCAsdu88.nRII = psCmdParam->m_uchRII; @@ -3419,7 +3419,7 @@ void MakeBuban103_PL1_NA_3_Cmd(int commid, DEVADDRPARAM *psAddrParam) pLinkParam = (BUBAN103LINKDEF *)&pPortParam->m_psLink[psAddrParam->m_iLinkIdx]; - // 多个保护设备装置 + // 澶氫釜淇濇姢璁惧瑁呯疆 if(pLinkParam->m_iDevNum > 1) { if(pLinkParam->m_iQueryedAddr_CLASS1 != (psAddrParam->m_iDevIdx+1)) @@ -3429,7 +3429,7 @@ void MakeBuban103_PL1_NA_3_Cmd(int commid, DEVADDRPARAM *psAddrParam) MakeBuban103LinkCommand(commid, psAddrParam->m_uchLinkAddr,\ C_PL1_NA_3, NULL, 0, INSERT_POLL_CMD); } - // 如果一条链路含有多个装置的情况 + // 濡傛灉涓鏉¢摼璺惈鏈夊涓缃殑鎯呭喌 else if(pLinkParam->m_uchLinkAddr != 0xFF) { pLinkParam->m_iQueryNum_CLASS1_Count = 0; @@ -3537,9 +3537,9 @@ BOOL IsLinkTimeOut(BUBAN103LINKDEF *psLinkParam, int iDevNo) } //*************************************************************** -//* 指令发送 * -//*参数:u_32 commid : RTU端口号 * -//* i_32 iBuIdx : 间隔装置索引 * +//* 鎸囦护鍙戦 * +//*鍙傛暟:u_32 commid : RTU绔彛鍙 * +//* i_32 iBuIdx : 闂撮殧瑁呯疆绱㈠紩 * //*************************************************************** void Buban103SendCmdFormPollCmdBuf(int commid) { @@ -3568,7 +3568,7 @@ void Buban103SendCmdFormPollCmdBuf(int commid) pPortParam->m_psBaoHu->ForceWaitCnt--; if(pPortParam->m_psBaoHu->ForceWaitCnt == 0) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); } @@ -3619,7 +3619,7 @@ void Buban103SendCmdFormPollCmdBuf(int commid) pPortParam->m_psBaoHu->RevCmdFlag = 1; } - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); } @@ -3634,7 +3634,7 @@ void Buban103SendCmdFormPollCmdBuf(int commid) if(pPortParam->m_psBaoHu->SendCmdFlag && pPortParam->m_psBaoHu->RevCmdFlag) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); } @@ -3673,7 +3673,7 @@ void Buban103SendCmdFormPollCmdBuf(int commid) DevAddrParam.m_uchLinkAddr = buf[4]; if(FindProtectDev(pPortParam, &DevAddrParam, TRUE) == FALSE) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); return; @@ -3708,7 +3708,7 @@ void Buban103SendCmdFormPollCmdBuf(int commid) { if(FindProtectDev(pPortParam, &DevAddrParam, FALSE) == FALSE) { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); return; @@ -3756,7 +3756,7 @@ void Buban103SendCmdFormPollCmdBuf(int commid) } else { - // 清除当前命令 + // 娓呴櫎褰撳墠鍛戒护 ClearCmdFormPollCmdBuf(commid); //ClearCmdAllFlag(commid); return; @@ -3784,16 +3784,16 @@ void Buban103SendCmdFormPollCmdBuf(int commid) } else { - ClearCmdFormPollCmdBuf(commid); // 清除当前命令 - //ClearCmdAllFlag(commid); // 清除当前命令 + ClearCmdFormPollCmdBuf(commid); // 娓呴櫎褰撳墠鍛戒护 + //ClearCmdAllFlag(commid); // 娓呴櫎褰撳墠鍛戒护 } } } /*! - \brief 寻找并生成下一条命令 - \param u_32 portno : RTU端口号 - \param i_32 iBuIdx : 间隔装置索引 + \brief 瀵绘壘骞剁敓鎴愪笅涓鏉″懡浠 + \param u_32 portno : RTU绔彛鍙 + \param i_32 iBuIdx : 闂撮殧瑁呯疆绱㈠紩 */ void Buban103FindNextCmd(int commid) { @@ -3815,7 +3815,7 @@ void Buban103FindNextCmd(int commid) pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo; - //所有的命令定时计数器+1 + //鎵鏈夌殑鍛戒护瀹氭椂璁℃暟鍣+1 for(i=0; im_iLinkNum; i++) { pLinkParam = &pPortParam->m_psLink[i]; @@ -3828,14 +3828,14 @@ void Buban103FindNextCmd(int commid) } } - //如果命令缓冲区仍有命令,则退出本函数 + //濡傛灉鍛戒护缂撳啿鍖轰粛鏈夊懡浠わ紝鍒欓鍑烘湰鍑芥暟 if(CheckPollCmdBufEmpty(commid) <= 0) { return; } pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx]; - //每个地址下发一次命令,循环进行 + //姣忎釜鍦板潃涓嬪彂涓娆″懡浠わ紝寰幆杩涜 if(pLinkParam->m_iDevIdx >= pLinkParam->m_iDevNum-1) { pLinkParam->m_iDevIdx = 0; @@ -3848,12 +3848,12 @@ void Buban103FindNextCmd(int commid) pLinkParam->m_iDevIdx++; } - //判断链路的状态,如果链路服务未工作或链路服务未实现,则发送请求链路状态命令继续查询链路状态,并退出本函数 - // 如果链路工作正常,则继续本函数的后续工作 + //鍒ゆ柇閾捐矾鐨勭姸鎬侊紝濡傛灉閾捐矾鏈嶅姟鏈伐浣滄垨閾捐矾鏈嶅姟鏈疄鐜帮紝鍒欏彂閫佽姹傞摼璺姸鎬佸懡浠ょ户缁煡璇㈤摼璺姸鎬侊紝骞堕鍑烘湰鍑芥暟 + // 濡傛灉閾捐矾宸ヤ綔姝e父锛屽垯缁х画鏈嚱鏁扮殑鍚庣画宸ヤ綔 pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx]; if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == FALSE) { - // 一条链路一次循环只进行一次链路复位 + // 涓鏉¢摼璺竴娆″惊鐜彧杩涜涓娆¢摼璺浣 if((pLinkParam->m_uchLinkAddr != 0xFF) && (pLinkParam->m_iDevIdx != 0)) { @@ -3868,7 +3868,7 @@ void Buban103FindNextCmd(int commid) return; } - //如果发送了保护程序传送过来的命令,且仍未收到结束帧,则继续召唤二级用户数据 + //濡傛灉鍙戦佷簡淇濇姢绋嬪簭浼犻佽繃鏉ョ殑鍛戒护锛屼笖浠嶆湭鏀跺埌缁撴潫甯э紝鍒欑户缁彫鍞や簩绾х敤鎴锋暟鎹 if(pDevParam->m_bInitdata == TRUE) { pDevParam->m_u32CallCnt++; @@ -3889,10 +3889,10 @@ void Buban103FindNextCmd(int commid) } } - //判断有否保护程序传来的命令 + //鍒ゆ柇鏈夊惁淇濇姢绋嬪簭浼犳潵鐨勫懡浠 if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE) { - // wen 2004.02.11 修改保护数据下发(暂时没有下发) + // wen 2004.02.11 淇敼淇濇姢鏁版嵁涓嬪彂(鏆傛椂娌℃湁涓嬪彂) //seladdr = (u_char)(*(WORD*)&gBuban103_RtuMsg.MsgData[0]); //if((gBuban103_RtuMsg.MsgLen > 0) && (gBuban103_RtuMsg.PortNumber == commid)) //{ @@ -3943,7 +3943,7 @@ void Buban103FindNextCmd(int commid) } } - //空闲时间不停地召唤二级数据 + //绌洪棽鏃堕棿涓嶅仠鍦板彫鍞や簩绾ф暟鎹 if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE) { if(CheckPollCmdBufEmpty(commid) <= 0) @@ -3996,7 +3996,7 @@ BOOL Buban103FindNextCmdEx(int commid) } */ - //所有的命令定时计数器+1 + //鎵鏈夌殑鍛戒护瀹氭椂璁℃暟鍣+1 for(i=0; im_iLinkNum; i++) { pLinkParam = &pPortParam->m_psLink[i]; @@ -4015,7 +4015,7 @@ BOOL Buban103FindNextCmdEx(int commid) } } - //如果命令缓冲区仍有命令,则退出本函数 + //濡傛灉鍛戒护缂撳啿鍖轰粛鏈夊懡浠わ紝鍒欓鍑烘湰鍑芥暟 if(CheckPollCmdBufEmpty(commid) <= 0) { return FALSE; @@ -4025,7 +4025,7 @@ BOOL Buban103FindNextCmdEx(int commid) pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx]; if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == FALSE) { - // 一条链路一次循环只进行一次链路复位 + // 涓鏉¢摼璺竴娆″惊鐜彧杩涜涓娆¢摼璺浣 if((pLinkParam->m_uchLinkAddr != 0xFF)\ && (pLinkParam->m_iDevIdx != 0)) { @@ -4040,7 +4040,7 @@ BOOL Buban103FindNextCmdEx(int commid) return TRUE; } - //如果发送了保护程序传送过来的命令,且仍未收到结束帧,则继续召唤二级用户数据 + //濡傛灉鍙戦佷簡淇濇姢绋嬪簭浼犻佽繃鏉ョ殑鍛戒护锛屼笖浠嶆湭鏀跺埌缁撴潫甯э紝鍒欑户缁彫鍞や簩绾х敤鎴锋暟鎹 if(pDevParam->m_bInitdata == TRUE) { pDevParam->m_u32CallCnt++; @@ -4061,10 +4061,10 @@ BOOL Buban103FindNextCmdEx(int commid) } } - //判断有否保护程序传来的命令 + //鍒ゆ柇鏈夊惁淇濇姢绋嬪簭浼犳潵鐨勫懡浠 if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE) { - // wen 2004.02.11 修改保护数据下发(暂时没有下发) + // wen 2004.02.11 淇敼淇濇姢鏁版嵁涓嬪彂(鏆傛椂娌℃湁涓嬪彂) //seladdr = (u_char)(*(WORD*)&gBuban103_RtuMsg.MsgData[0]); //if((gBuban103_RtuMsg.MsgLen > 0) && (gBuban103_RtuMsg.PortNumber == commid)) //{ @@ -4108,7 +4108,7 @@ BOOL Buban103FindNextCmdEx(int commid) iCurCmdIdx++; } - // 如果是一条新的轮询指令,则从第一个装置开始生成指令 + // 濡傛灉鏄竴鏉℃柊鐨勮疆璇㈡寚浠わ紝鍒欎粠绗竴涓缃紑濮嬬敓鎴愭寚浠 if(pLinkParam->m_shCurCmdIdx != iCurCmdIdx) { pLinkParam->m_iDevIdx = 0; @@ -4119,7 +4119,7 @@ BOOL Buban103FindNextCmdEx(int commid) { //if(iCurCmdIdx == 0) //{ - // sprintf(szbuf, "%d端口时间同步过程=%d,计数=%d",commid+1,pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst,\ + // sprintf(szbuf, "%d绔彛鏃堕棿鍚屾杩囩▼=%d,璁℃暟=%d",commid+1,pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst,\ // pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerCnt); // DebugPrint(szbuf); // } @@ -4132,7 +4132,7 @@ BOOL Buban103FindNextCmdEx(int commid) } } - //空闲时间不停地召唤二级数据 + //绌洪棽鏃堕棿涓嶅仠鍦板彫鍞や簩绾ф暟鎹 //if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE) //{ //if(CheckPollCmdBufEmpty(commid) <= 0) @@ -4180,7 +4180,7 @@ void Buban103CalcNextDev(int commid, BOOL bFlag) } else { - // 常规的下一个装置计算 + // 甯歌鐨勪笅涓涓缃绠 pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx]; if(FALSE == bFlag) { @@ -4193,10 +4193,10 @@ void Buban103CalcNextDev(int commid, BOOL bFlag) pLinkParam->m_bGotoNext = TRUE; return; } - // else if(增加其他的多帧传输不进行装置切换的判断) + // else if(澧炲姞鍏朵粬鐨勫甯т紶杈撲笉杩涜瑁呯疆鍒囨崲鐨勫垽鏂) } } - // 在一个装置总召唤完成以后的计算 + // 鍦ㄤ竴涓缃诲彫鍞ゅ畬鎴愪互鍚庣殑璁$畻 else { pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx]; @@ -4208,7 +4208,7 @@ void Buban103CalcNextDev(int commid, BOOL bFlag) { return; } - // else if(增加其他的多帧传输不进行装置切换的判断) + // else if(澧炲姞鍏朵粬鐨勫甯т紶杈撲笉杩涜瑁呯疆鍒囨崲鐨勫垽鏂) } pLinkParam->m_bGotoNext = FALSE; @@ -4224,11 +4224,11 @@ void Buban103CalcNextDev(int commid, BOOL bFlag) } //***************************************************************************/ -//* 定时轮询标准103指令生成函数 */ -//*参数:u_32 commid : 厂站端口号 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//* i_32 CmdIdx : 指令生成码索引号 */ -//*返回值:BOOL retval : 指令生成成功标识 */ +//* 瀹氭椂杞鏍囧噯103鎸囦护鐢熸垚鍑芥暟 */ +//*鍙傛暟:u_32 commid : 鍘傜珯绔彛鍙 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//* i_32 CmdIdx : 鎸囦护鐢熸垚鐮佺储寮曞彿 */ +//*杩斿洖鍊:BOOL retval : 鎸囦护鐢熸垚鎴愬姛鏍囪瘑 */ //***************************************************************************/ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdIdx) { @@ -4243,9 +4243,9 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId pDevParam = &psLinkParam->m_psDev[psLinkParam->m_iDevIdx]; switch(CmdIdx) { - case 0:// 时间同步 - // 广播对时仅执行一次 - sprintf(szbuf, "port=%d,广播对时命令下发",commid+1); + case 0:// 鏃堕棿鍚屾 + // 骞挎挱瀵规椂浠呮墽琛屼竴娆 + sprintf(szbuf, "port=%d,骞挎挱瀵规椂鍛戒护涓嬪彂",commid+1); DebugPrint(szbuf); psLinkParam->m_sArrayCmdTime[CmdIdx].m_iCmdTimerCnt = 0; CmdParam.m_sDevAddr.m_uchLinkAddr = 0xFF; @@ -4254,11 +4254,11 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId CmdParam.m_uchInf = (u_char)pDevParam->m_sDevParam.m_sSyncTimeInfo.m_u8Inf; CmdParam.m_uchRII = pDevParam->m_u8RII; MakeTimeSyn_CAsdu6(commid, &CmdParam); - // 清除当前指令,指向下一个链路 + // 娓呴櫎褰撳墠鎸囦护锛屾寚鍚戜笅涓涓摼璺 psLinkParam->m_iDevIdx = psLinkParam->m_iDevNum - 1; break; - case 1:// 总查询 + case 1:// 鎬绘煡璇 CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr; CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr; if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE)) @@ -4268,7 +4268,7 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId MakeAllQuery_CAsdu7(commid, &CmdParam); break; - case 2:// 电度量查询 + case 2:// 鐢靛害閲忔煡璇 CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr; CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr; if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE)) @@ -4279,7 +4279,7 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId MakeQCC_CAsdu88(commid, &CmdParam); break; - case 3:// 模拟量轮询(通用分类数据) + case 3:// 妯℃嫙閲忚疆璇(閫氱敤鍒嗙被鏁版嵁) CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr; CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr; if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE)) @@ -4296,9 +4296,9 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId if(i == pDevParam->m_sDevParam.m_iCfgGroupNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 不存在通用分类数据模拟量,不能生成轮询指令!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 涓嶅瓨鍦ㄩ氱敤鍒嗙被鏁版嵁妯℃嫙閲忥紝涓嶈兘鐢熸垚杞鎸囦护!!!\n", commid, CmdParam.m_sDevAddr.m_uchLinkAddr, CmdParam.m_sDevAddr.m_uchCommAddr); - //前置机站号=1 + //鍓嶇疆鏈虹珯鍙=1 DebugPrint(szbuf); #endif break; @@ -4311,7 +4311,7 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId MakeGenIdentCommand_CAsdu21(commid, &CmdParam, &sGenDataGroup, 1); break; - case 4:// 状态量轮询(通用分类数据) + case 4:// 鐘舵侀噺杞(閫氱敤鍒嗙被鏁版嵁) CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr; CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr; if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE)) @@ -4328,7 +4328,7 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId if(i == pDevParam->m_sDevParam.m_iCfgGroupNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 不存在通用分类数据开关量,不能生成轮询指令!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 涓嶅瓨鍦ㄩ氱敤鍒嗙被鏁版嵁寮鍏抽噺锛屼笉鑳界敓鎴愯疆璇㈡寚浠!!!\n", commid, CmdParam.m_sDevAddr.m_uchLinkAddr, CmdParam.m_sDevAddr.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -4347,13 +4347,13 @@ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdId } } -//===========================指令生成函数结束========================= +//===========================鎸囦护鐢熸垚鍑芥暟缁撴潫========================= -//===========================以下为数据处理函数======================= +//===========================浠ヤ笅涓烘暟鎹鐞嗗嚱鏁======================= //*************************************************************** -//* 计算 Buban103 累加和检验码 * -//* 参数:BYTE* msg:准备计算的数据帧信息 * -//* u_32 len:准备计算的数据帧长度 * +//* 璁$畻 Buban103 绱姞鍜屾楠岀爜 * +//* 鍙傛暟锛欱YTE* msg:鍑嗗璁$畻鐨勬暟鎹抚淇℃伅 * +//* u_32 len:鍑嗗璁$畻鐨勬暟鎹抚闀垮害 * //*************************************************************** BYTE CalBuban103Lpc(BYTE *msg, u_32 len) { @@ -4377,7 +4377,7 @@ BOOL Buban103Check(char *pData, int iDataLen) bRetval = FALSE; switch(pData[0]) { - case 0x10: // 短帧 + case 0x10: // 鐭抚 if(pData[4] != 0x16) { break; @@ -4388,7 +4388,7 @@ BOOL Buban103Check(char *pData, int iDataLen) } bRetval = TRUE; break; - case 0x68: // 长帧 + case 0x68: // 闀垮抚 if(pData[0] != pData[3]) { break; @@ -4437,14 +4437,14 @@ void Buban103ProcessData(int commid, BUBAN103PORTPARAM *psPortParam, BOOL bProce msg.MsgData[msg.MsgLen] = CHECK_WHOLE; msg.MsgData[msg.MsgLen+1] = 0; - // 子站数据处理 + // 瀛愮珯鏁版嵁澶勭悊 if(PROTOCOL_SLAVE == pPortParam->m_psBaoHu->PortType) { ProvRtuProtocolDataProcess(commid, &msg); return; } - // 主站数据处理 + // 涓荤珯鏁版嵁澶勭悊 switch(msg.MsgData[0]) { case 0x68: @@ -4458,7 +4458,7 @@ void Buban103ProcessData(int commid, BUBAN103PORTPARAM *psPortParam, BOOL bProce } } - // 总召唤完成后指向下一个地址 + // 鎬诲彫鍞ゅ畬鎴愬悗鎸囧悜涓嬩竴涓湴鍧 Buban103CalcNextDev(commid, TRUE); } @@ -4491,7 +4491,7 @@ BOOL FindProtectDev(BUBAN103PORTPARAM *psPortParam, \ } else { - // 装置地址就是链路地址 + // 瑁呯疆鍦板潃灏辨槸閾捐矾鍦板潃 uchAddr = psAddrParam->m_uchLinkAddr; if(psAddrParam->m_uchLinkAddr == 0xFF) { @@ -4817,7 +4817,7 @@ BOOL GetSpecialPtr(int commid, DEVADDRPARAM *psDevAddrParam,\ return FALSE; } - // wen 2005.06.22 修改指针判断为直接赋值 + // wen 2005.06.22 淇敼鎸囬拡鍒ゆ柇涓虹洿鎺ヨ祴鍊 /* if((*ppsPortParam) != NULL) { @@ -4861,7 +4861,7 @@ BOOL GetSpecialProvPtr(int commid, DEVADDRPARAM *psDevAddrParam,\ return FALSE; } - // wen 2005.06.22 修改指针判断为直接赋值 + // wen 2005.06.22 淇敼鎸囬拡鍒ゆ柇涓虹洿鎺ヨ祴鍊 /* if((*ppsPortParam) != NULL) { @@ -4901,7 +4901,7 @@ BOOL GetPortParamPtr(int commid, BUBAN103PORTPARAM **ppsPortParam) return FALSE; } - // wen 2005.06.22 修改指针判断为直接赋值 + // wen 2005.06.22 淇敼鎸囬拡鍒ゆ柇涓虹洿鎺ヨ祴鍊 /* if((*ppsPortParam) != NULL) { @@ -4939,7 +4939,7 @@ BOOL GetOneValueOfASDU10(BYTE *pu8SourData, VALUEDEF *psValue, BYTE u8DataType, bRetVal = TRUE; switch(u8DataType) { - case DATAID_OS8ASCII: // 8位ASCII + case DATAID_OS8ASCII: // 8浣岮SCII psValue->m_iDataType = DT_STRING; if(u8Len >= MAXSTRINGLEN) { @@ -4952,7 +4952,7 @@ BOOL GetOneValueOfASDU10(BYTE *pu8SourData, VALUEDEF *psValue, BYTE u8DataType, psValue->m_szValue[i] = 0; psValue->m_iDataNum = u8Len; break; - case DATAID_BSTRING: // 8位2进制数 + case DATAID_BSTRING: // 8浣2杩涘埗鏁 psValue->m_iDataType = DT_CONTROL; psValue->m_iDataNum = u8Len; u8Len = (u8DataLen+7) / 8; @@ -4966,14 +4966,14 @@ BOOL GetOneValueOfASDU10(BYTE *pu8SourData, VALUEDEF *psValue, BYTE u8DataType, psValue->m_unValue.m_dwValue += (pu8SourData[i] << (i*8)); } break; - case DATAID_UI: // 无符号整数 + case DATAID_UI: // 鏃犵鍙锋暣鏁 psValue->m_iDataType = DT_UINT; for(i=0; im_unValue.m_uValue += (pu8SourData[i] << (i*8)); } break; - case DATAID_INT: // 整数 + case DATAID_INT: // 鏁存暟 case DATAID_EXDATA_0X24: psValue->m_iDataType = DT_INT; for(i=0; im_unValue.m_iValue += (pu8SourData[i] << (i*8)); } break; - case DATAID_UFLOAT: // 无符号浮点数 + case DATAID_UFLOAT: // 鏃犵鍙锋诞鐐规暟 psValue->m_iDataType = DT_FLOAT; fValue = *(float *)(pu8SourData); SequenceRtuToHost((char *)(&fValue), sizeof(float)); psValue->m_unValue.m_fValue = fabs(fValue); break; - case DATAID_FLOAT: // 浮点数 + case DATAID_FLOAT: // 娴偣鏁 psValue->m_iDataType = DT_FLOAT; fValue = *(float *)(pu8SourData); SequenceRtuToHost((char *)(&fValue), sizeof(float)); psValue->m_unValue.m_fValue = fValue; break; - case DATAID_754SHORT: // R32.23 IEEE 标准754短实数 + case DATAID_754SHORT: // R32.23 IEEE 鏍囧噯754鐭疄鏁 psValue->m_iDataType = DT_FLOAT; fValue = *(float *)(pu8SourData); SequenceRtuToHost((char *)(&fValue), sizeof(float)); psValue->m_unValue.m_fValue = fValue; break; - case DATAID_754REAL: // R64.53 IEEE 标准754实数 + case DATAID_754REAL: // R64.53 IEEE 鏍囧噯754瀹炴暟 psValue->m_iDataType = DT_FLOAT; dfValue = *(double *)(pu8SourData); SequenceRtuToHost((char *)(&dfValue), sizeof(dfValue)); psValue->m_unValue.m_fValue = dfValue; break; - case DATAID_DOUBLE: // 双点信息 + case DATAID_DOUBLE: // 鍙岀偣淇℃伅 psValue->m_iDataType = DT_BINARY; psValue->m_iDataNum = 2; psValue->m_unValue.m_dwValue = pu8SourData[0] & 0x03; break; - case DATAID_SINGLE: // 单点信息 + case DATAID_SINGLE: // 鍗曠偣淇℃伅 psValue->m_iDataType = DT_BINARY; psValue->m_iDataNum = 1; psValue->m_unValue.m_dwValue = pu8SourData[0] & 0x01; break; - case DATAID_13BITS: // 带品质描述的被测值(13BITS) + case DATAID_13BITS: // 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) psValue->m_iDataType = DT_UINT; psValue->m_unValue.m_uValue = pu8SourData[0]; psValue->m_unValue.m_uValue = (pu8SourData[1] & 0x1f) * 256; break; - case DATAID_WITHTIME: // 带时标的报文 - case DATAID_WITHTIMESPACE:// 带相对时标的报文 - case DATAID_SORTIDNO: // 通用分类标识序号 - case DATAID_STRUCT: // 数据结构 + case DATAID_WITHTIME: // 甯︽椂鏍囩殑鎶ユ枃 + case DATAID_WITHTIMESPACE:// 甯︾浉瀵规椂鏍囩殑鎶ユ枃 + case DATAID_SORTIDNO: // 閫氱敤鍒嗙被鏍囪瘑搴忓彿 + case DATAID_STRUCT: // 鏁版嵁缁撴瀯 default: bRetVal = FALSE; break; @@ -5056,8 +5056,8 @@ int FindAiGroupIdx(DBORIENTATION *pAiDB, int iMaxNum, BYTE u8Asdu, BYTE u8Fun, B return idx; } //*************************************************************** -//* 接收的数据为固定帧长时的处理程序 -//*参数 RTUMSG* rtumsg:接收到的数据信息 +//* 鎺ユ敹鐨勬暟鎹负鍥哄畾甯ч暱鏃剁殑澶勭悊绋嬪簭 +//*鍙傛暟 RTUMSG* rtumsg:鎺ユ敹鍒扮殑鏁版嵁淇℃伅 //*************************************************************** void Buban103shortprocess(RTUMSG *rtumsg) { @@ -5078,7 +5078,7 @@ void Buban103shortprocess(RTUMSG *rtumsg) if(FindProtectDev(pPortParam, &sDevAddrParam, TRUE) == FALSE) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 不在端口配置保护范围内!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 涓嶅湪绔彛閰嶇疆淇濇姢鑼冨洿鍐!!!", commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -5090,7 +5090,7 @@ void Buban103shortprocess(RTUMSG *rtumsg) //return; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d linkidx=%d, iDevIdx=%d.", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d linkidx=%d, iDevIdx=%d.", commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr, sDevAddrParam.m_iLinkIdx, sDevAddrParam.m_iDevIdx); DebugPrint(szbuf); @@ -5126,44 +5126,44 @@ void Buban103shortprocess(RTUMSG *rtumsg) switch(rtumsg->MsgData[1] & 0x0f) { - case M_CON_NA_3://确认帧 + case M_CON_NA_3://纭甯 SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, TRUE); if(pLinkParam->m_bRstLinkOk == TRUE) { pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = TRUE; } break; - case M_BY_NA_3://忙帧(确认帧) + case M_BY_NA_3://蹇欏抚锛堢‘璁ゅ抚锛 pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = TRUE; break; - case M_NV_NA_3://无所要求的数据帧回答 + case M_NV_NA_3://鏃犳墍瑕佹眰鐨勬暟鎹抚鍥炵瓟 if(FALSE == bHaveClass1) { pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = TRUE; pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bAllQueryOk = TRUE; } break; - case M_LKR_NA_3_1://链路工作正常 + case M_LKR_NA_3_1://閾捐矾宸ヤ綔姝e父 SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, TRUE); break; - case M_LKR_NA_3_2://链路服务未工作 + case M_LKR_NA_3_2://閾捐矾鏈嶅姟鏈伐浣 SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, FALSE); break; - case M_LKR_NA_3_3://链路服务未实现 + case M_LKR_NA_3_3://閾捐矾鏈嶅姟鏈疄鐜 SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, FALSE); break; default: #ifdef _DEBUG_MSG_ - //OutputDebugString("接收到不认识的命令,请检查程序.\n"); - DebugPrint("接收到不认识的命令,请检查程序.\n"); + //OutputDebugString("鎺ユ敹鍒颁笉璁よ瘑鐨勫懡浠わ紝璇锋鏌ョ▼搴.\n"); + DebugPrint("鎺ユ敹鍒颁笉璁よ瘑鐨勫懡浠わ紝璇锋鏌ョ▼搴.\n"); #endif break; } } //*************************************************************** -//* 接收的数据为可变帧长时的处理程序 -//*参数 RTUMSG* rtumsg:接收到的数据信息 +//* 鎺ユ敹鐨勬暟鎹负鍙彉甯ч暱鏃剁殑澶勭悊绋嬪簭 +//*鍙傛暟 RTUMSG* rtumsg:鎺ユ敹鍒扮殑鏁版嵁淇℃伅 //*************************************************************** void Buban103longprocess(RTUMSG *rtumsg) { @@ -5182,7 +5182,7 @@ void Buban103longprocess(RTUMSG *rtumsg) if(FindProtectDev(pPortParam, &sDevAddrParam, FALSE) == FALSE) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 不在端口配置保护范围内!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 涓嶅湪绔彛閰嶇疆淇濇姢鑼冨洿鍐!!!", commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -5218,44 +5218,44 @@ void Buban103longprocess(RTUMSG *rtumsg) } } - switch(rtumsg->MsgData[6])//类型标识域 + switch(rtumsg->MsgData[6])//绫诲瀷鏍囪瘑鍩 { - case M_TM_TA_3: // 1带时标的报文 + case M_TM_TA_3: // 1甯︽椂鏍囩殑鎶ユ枃 Buban103TMprocess(rtumsg, &sDevAddrParam); break; - case M_TMR_TA_3: // 2带相对时间的时标报文 + case M_TMR_TA_3: // 2甯︾浉瀵规椂闂寸殑鏃舵爣鎶ユ枃 Buban103TMRprocess(rtumsg, &sDevAddrParam); break; - case M_MEI_NA_3: // 3被测值I报文 + case M_MEI_NA_3: // 3琚祴鍊糏鎶ユ枃 Buban103MEIprocess(rtumsg, &sDevAddrParam); break; - case M_TME_TA_3: // 4带相对时间的有时标的被测值报文 + case M_TME_TA_3: // 4甯︾浉瀵规椂闂寸殑鏈夋椂鏍囩殑琚祴鍊兼姤鏂 Buban103TMEprocess(rtumsg, &sDevAddrParam); break; - case M_IRC_NA_3: // 5标识报文 + case M_IRC_NA_3: // 5鏍囪瘑鎶ユ枃 Buban103IRCprocess(rtumsg, &sDevAddrParam); break; - case M_SYN_TA_3: // 6时间同步报文 + case M_SYN_TA_3: // 6鏃堕棿鍚屾鎶ユ枃 Buban103SynTime(rtumsg, &sDevAddrParam); break; - case M_TGI_NA_3: // 8总查询(总召唤)中止报文 + case M_TGI_NA_3: // 8鎬绘煡璇紙鎬诲彫鍞わ級涓鎶ユ枃 pLinkParam->m_bRstLinkOk = FALSE; pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = FALSE; pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bAllQueryOk = TRUE; break; - case M_MEII_NA_3: // 9被测值II报文 + case M_MEII_NA_3: // 9琚祴鍊糏I鎶ユ枃 Buban103MEIINAprocess(rtumsg, &sDevAddrParam); break; - case M_GD_NTA_3: // 10通用分类数据报文 - //如果NGD的COUNT位为零,则表示该批通用分类数据传输结束 + case M_GD_NTA_3: // 10閫氱敤鍒嗙被鏁版嵁鎶ユ枃 + //濡傛灉NGD鐨凜OUNT浣嶄负闆讹紝鍒欒〃绀鸿鎵归氱敤鍒嗙被鏁版嵁浼犺緭缁撴潫 if((rtumsg->MsgData[13] & 0x80) == 0) { pLinkParam->m_bRstLinkOk = FALSE; @@ -5264,134 +5264,134 @@ void Buban103longprocess(RTUMSG *rtumsg) Buban103GDprocess(rtumsg, &sDevAddrParam); break; - case M_GI_NTA_3: // 11通用分类标识报文 + case M_GI_NTA_3: // 11閫氱敤鍒嗙被鏍囪瘑鎶ユ枃 Buban103GIprocess(rtumsg, &sDevAddrParam); break; - // wen 2003.10.27 增加扰动数据的处理 - case M_LRD_TA_3: // 23被记录扰动表报文 + // wen 2003.10.27 澧炲姞鎵板姩鏁版嵁鐨勫鐞 + case M_LRD_TA_3: // 23琚褰曟壈鍔ㄨ〃鎶ユ枃 Buban103LRDprocess(rtumsg); break; - case M_RTD_TA_3: // 26扰动数据传输准备就绪报文 + case M_RTD_TA_3: // 26鎵板姩鏁版嵁浼犺緭鍑嗗灏辩华鎶ユ枃 Buban103RTDprocess(rtumsg); break; - case M_RTC_NA_3: // 27被记录的通道传输准备就绪报文 + case M_RTC_NA_3: // 27琚褰曠殑閫氶亾浼犺緭鍑嗗灏辩华鎶ユ枃 Buban103RTCprocess(rtumsg); break; - case M_RTT_NA_3: // 28带标志的状态变位的传输准备就绪报文 + case M_RTT_NA_3: // 28甯︽爣蹇楃殑鐘舵佸彉浣嶇殑浼犺緭鍑嗗灏辩华鎶ユ枃 Buban103RTTprocess(rtumsg); break; - case M_TOT_TA_3: // 29带标志的状态变位传输报文 + case M_TOT_TA_3: // 29甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈撴姤鏂 Buban103TOTprocess(rtumsg); break; - case M_TOV_NA_3: // 30传输扰动值报文 + case M_TOV_NA_3: // 30浼犺緭鎵板姩鍊兼姤鏂 Buban103TOVprocess(rtumsg); break; - case M_EOT_TA_3: // 31传输结束报文 + case M_EOT_TA_3: // 31浼犺緭缁撴潫鎶ユ枃 Buban103EOTprocess(rtumsg); pLinkParam->m_bRstLinkOk = FALSE; pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = FALSE; break; - case M_MEIII_TA_3: // 32带时标的被测值Ⅲ + case M_MEIII_TA_3: // 32甯︽椂鏍囩殑琚祴鍊尖參 Buban103MEIIITAprocess(rtumsg, &sDevAddrParam); break; - case M_MEIV_TA_3: // 33带时标的被测值Ⅳ + case M_MEIV_TA_3: // 33甯︽椂鏍囩殑琚祴鍊尖叄 Buban103MEIVTAprocess(rtumsg, &sDevAddrParam); break; - case M_MEV_TA_3: // 34带时标的被测值Ⅴ + case M_MEV_TA_3: // 34甯︽椂鏍囩殑琚祴鍊尖叅 Buban103MEVTAprocess(rtumsg, &sDevAddrParam); break; - case M_MEVI_TA_3: // 35带时标的被测值Ⅵ + case M_MEVI_TA_3: // 35甯︽椂鏍囩殑琚祴鍊尖叆 Buban103MEVITAprocess(rtumsg, &sDevAddrParam); break; - case M_IT_NA_3: // 36电能脉冲计数值 + case M_IT_NA_3: // 36鐢佃兘鑴夊啿璁℃暟鍊 Buban103ITNAprocess(rtumsg, &sDevAddrParam); break; - case M_IT_TA_3: // 37带时标的电能脉冲计数值 + case M_IT_TA_3: // 37甯︽椂鏍囩殑鐢佃兘鑴夊啿璁℃暟鍊 //Buban103MEITTAprocess(rtumsg, &sDevAddrParam); break; - case M_ST_NA_3: // 38步位置信息 + case M_ST_NA_3: // 38姝ヤ綅缃俊鎭 Buban103STNAprocess(rtumsg, &sDevAddrParam); break; - case M_ST_TA_3: // 39带时标的步位置信息 + case M_ST_TA_3: // 39甯︽椂鏍囩殑姝ヤ綅缃俊鎭 //Buban103STTAprocess(rtumsg, &sDevAddrParam); break; - case M_SP_NA_3: // 40单点状态信息 + case M_SP_NA_3: // 40鍗曠偣鐘舵佷俊鎭 Buban103SPNAprocess(rtumsg, &sDevAddrParam); break; - case M_SP_TA_3: // 41带时标的单点状态信息 + case M_SP_TA_3: // 41甯︽椂鏍囩殑鍗曠偣鐘舵佷俊鎭 Buban103SPTAprocess(rtumsg, &sDevAddrParam); break; - case M_DP_NA_3: // 42双点状态信息 + case M_DP_NA_3: // 42鍙岀偣鐘舵佷俊鎭 Buban103DPNAprocess(rtumsg, &sDevAddrParam); break; - case M_DP_TA_3: // 43带时标的双点状态信息 + case M_DP_TA_3: // 43甯︽椂鏍囩殑鍙岀偣鐘舵佷俊鎭 Buban103DPTAprocess(rtumsg, &sDevAddrParam); break; - case M_SS_NA_3: // 44单点状态和状态变位检出 + case M_SS_NA_3: // 44鍗曠偣鐘舵佸拰鐘舵佸彉浣嶆鍑 Buban103SSNAprocess(rtumsg, &sDevAddrParam); break; - case M_SS_TA_3: // 45带时标的单点状态和状态变位检出 + case M_SS_TA_3: // 45甯︽椂鏍囩殑鍗曠偣鐘舵佸拰鐘舵佸彉浣嶆鍑 Buban103SSTAprocess(rtumsg, &sDevAddrParam); break; - case M_DS_NA_3: // 46双点状态和状态变位检出 + case M_DS_NA_3: // 46鍙岀偣鐘舵佸拰鐘舵佸彉浣嶆鍑 Buban103DSNAprocess(rtumsg, &sDevAddrParam); break; - case M_DS_TA_3: // 47带时标的双点状态和状态变位检出 + case M_DS_TA_3: // 47甯︽椂鏍囩殑鍙岀偣鐘舵佸拰鐘舵佸彉浣嶆鍑 Buban103DSTAprocess(rtumsg, &sDevAddrParam); break; - case M_WL_TA_3: // 48水位 + case M_WL_TA_3: // 48姘翠綅 Buban103WLTAprocess(rtumsg, &sDevAddrParam); break; - case M_MEVII_NA_3: // 50被测值Ⅶ + case M_MEVII_NA_3: // 50琚祴鍊尖叇 Buban103MEVIINAprocess(rtumsg, &sDevAddrParam); break; - case C_DC_NA_3: // 64控制断路器命令 + case C_DC_NA_3: // 64鎺у埗鏂矾鍣ㄥ懡浠 Buban103YkAck(rtumsg, &sDevAddrParam); break; - case C_RC_NA_3: // 65升降命令 + case C_RC_NA_3: // 65鍗囬檷鍛戒护 Buban103YtAck(rtumsg, &sDevAddrParam); break; - case C_SE_NA_3: // 66设定命令 + case C_SE_NA_3: // 66璁惧畾鍛戒护 break; - case C_CC_NA_3: // 67控制命令 + case C_CC_NA_3: // 67鎺у埗鍛戒护 break; - case M_EX_PI_3: // 205西门子公司扩展电度数据 + case M_EX_PI_3: // 205瑗块棬瀛愬叕鍙告墿灞曠數搴︽暟鎹 Buban103EXPIprocess(rtumsg, &sDevAddrParam); break; default: #ifdef _DEBUG_MSG_ - DebugPrint("接收到不认识的命令,请检查程序.\n"); + DebugPrint("鎺ユ敹鍒颁笉璁よ瘑鐨勫懡浠わ紝璇锋鏌ョ▼搴.\n"); #endif break; } @@ -5399,27 +5399,27 @@ void Buban103longprocess(RTUMSG *rtumsg) void Buban103TMprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) - // 可变结构限定词(VSQ)=0x81 + // 绫诲瀷鏍囪瘑(TYP) + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; // DPI //rtumsg->MsgData[12]; - // 四个八位位组二进制时间 + // 鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 //rtumsg->MsgData[13]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[17]; Buban103TMprocessOfSoe(rtumsg, psDevAddrParam); - // wen 2004.01.12 上送给保护管理程序 + // wen 2004.01.12 涓婇佺粰淇濇姢绠$悊绋嬪簭 //Buban103TMprocessOfPEvent(rtumsg, psDevAddrParam); } @@ -5427,7 +5427,7 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { int i, dipnt, commid, iYkNo; BYTE buf[16], st; - // 事件发生时间毫秒数 + // 浜嬩欢鍙戠敓鏃堕棿姣鏁 time_t iTime; WORD wMillSeconds; struct tm *ptrtm; @@ -5443,23 +5443,23 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; // DPI //rtumsg->MsgData[12]; - // 四个八位位组二进制时间 + // 鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 //rtumsg->MsgData[13]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[17]; commid = rtumsg->PortIdx; @@ -5471,7 +5471,7 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU1信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU1淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -5480,7 +5480,7 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) for(i=0; im_iPntNum; i++) { - // wen 2004.04.11 增加asdu类型判断 + // wen 2004.04.11 澧炲姞asdu绫诲瀷鍒ゆ柇 if(pLinkParam->m_iJudgeAsduNo != 0) { if(M_TM_TA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu) @@ -5498,7 +5498,7 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(i >= pDataUnit->m_iPntNum) { - //遥控遥调返校 + //閬ユ帶閬ヨ皟杩旀牎 if(M_CAUSE_REMOTE != rtumsg->MsgData[8]) { return; @@ -5508,20 +5508,20 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(iYkNo >= 0) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 buf[0] = (BYTE)(commid & 0xFF); buf[1] = (BYTE)((commid & 0xFF00) << 8); buf[2] = (BYTE)((commid & 0xFF0000) << 16); @@ -5538,7 +5538,7 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(ShmGetDispYkYtFlag()) { #ifdef _DEBUG_MSG_ - //sprintf(szbuf, "端口%d 链路地址=%d 装置地址%d RII=0x%02x, 遥控点号=%d, op=0x%02x!!!\n", + //sprintf(szbuf, "绔彛%d 閾捐矾鍦板潃=%d 瑁呯疆鍦板潃%d RII=0x%02x, 閬ユ帶鐐瑰彿=%d, op=0x%02x!!!\n", // commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYkNo, rtumsg->MsgData[12]); //DebugPrint(szbuf); sprintf(szbuf, "TIP_(%04d): commid=%d linkaddr=%d devaddr=%d RII=0x%02x ykytpnt=%d, op=0x%02x.\n", @@ -5558,7 +5558,7 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if((st == 0) || (st == 3)) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d 链路地址=%d 装置地址%d RII=%d, 点号=%d, status=%d!!!\n", + sprintf(szbuf, "绔彛%d 閾捐矾鍦板潃=%d 瑁呯疆鍦板潃%d RII=%d, 鐐瑰彿=%d, status=%d!!!\n", commid, rtumsg->MsgData[5], rtumsg->MsgData[9], dipnt, rtumsg->MsgData[12]); DebugPrint(szbuf); #endif @@ -5568,11 +5568,11 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) st--; pntmsg.Status = st; - // 属于自发或者突发事件就是soe + // 灞炰簬鑷彂鎴栬呯獊鍙戜簨浠跺氨鏄痵oe //if(rtumsg->MsgData[8] == M_CAUSE_AUTOSEND) if(rtumsg->MsgData[8] != M_CAUSE_QUERY) { - // 事件发生时间毫秒数 + // 浜嬩欢鍙戠敓鏃堕棿姣鏁 time(&iTime); ptrtm = localtime(&iTime); if(ptrtm->tm_hour < (rtumsg->MsgData[16] & 0x1f)) @@ -5608,32 +5608,32 @@ void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103TMRprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; // DPI //rtumsg->MsgData[12]; - // 相对时间 + // 鐩稿鏃堕棿 //rtumsg->MsgData[13]; - // 故障序号 + // 鏁呴殰搴忓彿 //rtumsg->MsgData[15]; - // 四个八位位组二进制时间 + // 鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 //rtumsg->MsgData[17]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[21]; Buban103TMRprocessOfSoe(rtumsg, psDevAddrParam); - // wen 2004.01.12 上送给保护管理程序 + // wen 2004.01.12 涓婇佺粰淇濇姢绠$悊绋嬪簭 //Buban103TMRprocessOfPEvent(rtumsg, psDevAddrParam); } @@ -5641,7 +5641,7 @@ void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { int i, dipnt, commid; BYTE st; - // 事件发生时间毫秒数 + // 浜嬩欢鍙戠敓鏃堕棿姣鏁 time_t iTime; WORD wMillSeconds, wTime, wFault; struct tm *ptrtm; @@ -5655,27 +5655,27 @@ void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; // DPI //rtumsg->MsgData[12]; - // 相对时间 + // 鐩稿鏃堕棿 //rtumsg->MsgData[13]; - // 故障序号 + // 鏁呴殰搴忓彿 //rtumsg->MsgData[15]; - // 四个八位位组二进制时间 + // 鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 //rtumsg->MsgData[17]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[21]; commid = rtumsg->PortIdx; @@ -5687,7 +5687,7 @@ void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU2信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU2淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -5696,7 +5696,7 @@ void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) for(i=0; im_iPntNum; i++) { - // wen 2004.04.11 增加asdu类型判断 + // wen 2004.04.11 澧炲姞asdu绫诲瀷鍒ゆ柇 if(pLinkParam->m_iJudgeAsduNo != 0) { if(M_TMR_TA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu) @@ -5720,18 +5720,18 @@ void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) dipnt = pDataUnit->m_iStartPntNo + i; if(rtumsg->MsgData[8] == M_CAUSE_QUERY) { - // 相对时间和故障序号是无关的 + // 鐩稿鏃堕棿鍜屾晠闅滃簭鍙锋槸鏃犲叧鐨 } else { - // 相对时间和故障序号是相关的 + // 鐩稿鏃堕棿鍜屾晠闅滃簭鍙锋槸鐩稿叧鐨 } st = rtumsg->MsgData[12] & 0x03; if((st == 0) || (st == 3)) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d 链路地址=%d 装置地址%d 点号=%d, status=%d!!!\n", + sprintf(szbuf, "绔彛%d 閾捐矾鍦板潃=%d 瑁呯疆鍦板潃%d 鐐瑰彿=%d, status=%d!!!\n", commid, rtumsg->MsgData[5], rtumsg->MsgData[9], dipnt, rtumsg->MsgData[12]); DebugPrint(szbuf); #endif @@ -5744,11 +5744,11 @@ void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) st--; pntmsg.Status = st; - // 属于自发或者突发事件就是soe + // 灞炰簬鑷彂鎴栬呯獊鍙戜簨浠跺氨鏄痵oe //if(rtumsg->MsgData[8] == M_CAUSE_AUTOSEND) if(rtumsg->MsgData[8] != M_CAUSE_QUERY) { - // 事件发生时间毫秒数 + // 浜嬩欢鍙戠敓鏃堕棿姣鏁 time(&iTime); ptrtm = localtime(&iTime); if(ptrtm->tm_hour < (rtumsg->MsgData[20] & 0x1f)) @@ -5795,25 +5795,25 @@ void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) #ifdef _DEBUG_MSG_ char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; - // B相电流 + // B鐩哥數娴 //rtumsg->MsgData[12]; - // AB相线电流 + // AB鐩哥嚎鐢垫祦 //rtumsg->MsgData[14]; - // 有功功率 + // 鏈夊姛鍔熺巼 //rtumsg->MsgData[16]; - // 无功功率 + // 鏃犲姛鍔熺巼 //rtumsg->MsgData[18]; commid = rtumsg->PortIdx; @@ -5822,8 +5822,8 @@ void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // wen 2004.02.04 配置与测量值类型不固定关联 - // 总共7组被测值 + // wen 2004.02.04 閰嶇疆涓庢祴閲忓肩被鍨嬩笉鍥哄畾鍏宠仈 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -5844,7 +5844,7 @@ void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU3(%d,%d) 测量值Ⅰ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU3(%d,%d) 娴嬮噺鍊尖厾涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -5858,7 +5858,7 @@ void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU3(%d,%d) 测量值Ⅰ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU3(%d,%d) 娴嬮噺鍊尖厾涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -5881,7 +5881,7 @@ void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; for(i=0; iMsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256); pntmsg.RawValue /= 8; SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); @@ -5900,27 +5900,27 @@ void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; // DPI //rtumsg->MsgData[12]; - // 相对时间 + // 鐩稿鏃堕棿 //rtumsg->MsgData[13]; - // 故障序号 + // 鏁呴殰搴忓彿 //rtumsg->MsgData[15]; - // 四个八位位组二进制时间 + // 鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 //rtumsg->MsgData[17]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[21]; return; @@ -5931,8 +5931,8 @@ void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // wen 2004.02.04 配置与测量值类型不固定关联 - // 总共7组被测值 + // wen 2004.02.04 閰嶇疆涓庢祴閲忓肩被鍨嬩笉鍥哄畾鍏宠仈 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -5953,7 +5953,7 @@ void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU4(%d,%d) 不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU4(%d,%d) 涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -5967,7 +5967,7 @@ void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU4(%d,%d) 不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU4(%d,%d) 涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -5980,7 +5980,7 @@ void Buban103IRCprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) int commid; CMDPARAM sCmdParam; - // 传送原因 + // 浼犻佸師鍥 if(rtumsg->MsgData[8] == M_CAUSE_POWERON) { commid = rtumsg->PortIdx; @@ -5993,35 +5993,35 @@ void Buban103IRCprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) //rtumsg->MsgData[11]; - // A相电流 + // A鐩哥數娴 //rtumsg->MsgData[12]; - // B相电流 + // B鐩哥數娴 //rtumsg->MsgData[14]; - // C相电流 + // C鐩哥數娴 //rtumsg->MsgData[16]; - // A相电压 + // A鐩哥數鍘 //rtumsg->MsgData[18]; - // B相电压 + // B鐩哥數鍘 //rtumsg->MsgData[20]; - // C相电压 + // C鐩哥數鍘 //rtumsg->MsgData[22]; - // 有功功率 + // 鏈夊姛鍔熺巼 //rtumsg->MsgData[24]; - // 无功功率 + // 鏃犲姛鍔熺巼 //rtumsg->MsgData[26]; - // 频率 + // 棰戠巼 //rtumsg->MsgData[28]; int commid; @@ -6041,7 +6041,7 @@ void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 总共7组被测值 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -6062,7 +6062,7 @@ void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU9(%d,%d) 测量值Ⅱ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU9(%d,%d) 娴嬮噺鍊尖叀涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6076,7 +6076,7 @@ void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU9(%d,%d) 测量值Ⅱ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU9(%d,%d) 娴嬮噺鍊尖叀涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6098,13 +6098,13 @@ void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; for(i=0; iMsgData[12+2*i] & 0x01); - // 品质描述,数据无效 + // 鍝佽川鎻忚堪锛屾暟鎹棤鏁 //if(rtumsg->MsgData[12+2*i] & 0x02); - // 最低3位为品质描述 + // 鏈浣3浣嶄负鍝佽川鎻忚堪 pntmsg.RawValue = (short)((rtumsg->MsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256); pntmsg.RawValue /= 8; SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); @@ -6113,32 +6113,32 @@ void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) // = 144 --- 147 //rtumsg->MsgData[11]; - // L2电流 + // L2鐢垫祦 //rtumsg->MsgData[12]; - // L1-L2电流 + // L1-L2鐢垫祦 //rtumsg->MsgData[14]; - // 有功功率 + // 鏈夊姛鍔熺巼 //rtumsg->MsgData[16]; - // 无功功率 + // 鏃犲姛鍔熺巼 //rtumsg->MsgData[18]; - // 被测谐波值1(3 BYTES) + // 琚祴璋愭尝鍊1(3 BYTES) //rtumsg->MsgData[20]; // ... ... - // 被测谐波值N(3 BYTES) - // 四个八位位组的二进制时标 + // 琚祴璋愭尝鍊糔(3 BYTES) + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 int commid; int i, aipnt, iNum, idx; @@ -6157,7 +6157,7 @@ void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 总共7组被测值 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -6178,7 +6178,7 @@ void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU32(%d,%d) 测量值Ⅲ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU32(%d,%d) 娴嬮噺鍊尖參涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6192,7 +6192,7 @@ void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU32(%d,%d) 测量值Ⅲ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU32(%d,%d) 娴嬮噺鍊尖參涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6214,11 +6214,11 @@ void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; - // wen 2003.11.01 大于4以后的为谐波值和二进制时标 + // wen 2003.11.01 澶т簬4浠ュ悗鐨勪负璋愭尝鍊煎拰浜岃繘鍒舵椂鏍 iNum = 4; for(i=0; iMsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256); pntmsg.RawValue /= 8; SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); @@ -6227,41 +6227,41 @@ void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) = 148 + // 淇℃伅搴忓彿(INF) = 148 //rtumsg->MsgData[11]; - // L1电流 + // L1鐢垫祦 //rtumsg->MsgData[12]; - // L2电流 + // L2鐢垫祦 //rtumsg->MsgData[14]; - // L3电流 + // L3鐢垫祦 //rtumsg->MsgData[16]; - // Ul1电压 + // Ul1鐢靛帇 //rtumsg->MsgData[18]; - // Ul2电压 + // Ul2鐢靛帇 //rtumsg->MsgData[20]; - // Ul3电压 + // Ul3鐢靛帇 //rtumsg->MsgData[22]; - // 有功功率 + // 鏈夊姛鍔熺巼 //rtumsg->MsgData[24]; - // 无功功率 + // 鏃犲姛鍔熺巼 //rtumsg->MsgData[26]; - // 频率 + // 棰戠巼 //rtumsg->MsgData[28]; - // 被测谐波值1(3 BYTES) + // 琚祴璋愭尝鍊1(3 BYTES) //rtumsg->MsgData[30]; // ... ... - // 被测谐波值N(3 BYTES) - // 四个八位位组的二进制时标 + // 琚祴璋愭尝鍊糔(3 BYTES) + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 int commid; int i, aipnt, iNum, idx; @@ -6280,7 +6280,7 @@ void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 总共7组被测值 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -6301,7 +6301,7 @@ void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU33(%d,%d) 测量值Ⅳ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU33(%d,%d) 娴嬮噺鍊尖叄涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6315,7 +6315,7 @@ void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU33(%d,%d) 测量值Ⅳ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU33(%d,%d) 娴嬮噺鍊尖叄涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6337,47 +6337,47 @@ void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; - // wen 2003.11.01 大于9以后的为谐波值和二进制时标 + // wen 2003.11.01 澶т簬9浠ュ悗鐨勪负璋愭尝鍊煎拰浜岃繘鍒舵椂鏍 iNum = 9; for(i=0; iMsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256); pntmsg.RawValue /= 8; SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); } } -// 被测值V报文 +// 琚祴鍊糣鎶ユ枃 void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) + // 淇℃伅搴忓彿(INF) // = 144 --- 147 //rtumsg->MsgData[11]; - // 以下值为向量 - // L2电流 + // 浠ヤ笅鍊间负鍚戦噺 + // L2鐢垫祦 //rtumsg->MsgData[12]; - // L1-L2电流 + // L1-L2鐢垫祦 //rtumsg->MsgData[16]; - // 有功功率 + // 鏈夊姛鍔熺巼 //rtumsg->MsgData[20]; - // 无功功率 + // 鏃犲姛鍔熺巼 //rtumsg->MsgData[24]; - // 被测谐波值1(4 BYTES) + // 琚祴璋愭尝鍊1(4 BYTES) //rtumsg->MsgData[28]; // ... ... - // 被测谐波值N(4 BYTES) - // 四个八位位组的二进制时标 + // 琚祴璋愭尝鍊糔(4 BYTES) + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 int commid; int aipnt, iNum, idx; @@ -6395,7 +6395,7 @@ void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 总共7组被测值 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -6416,7 +6416,7 @@ void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU34(%d,%d) 测量值Ⅴ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU34(%d,%d) 娴嬮噺鍊尖叅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6430,7 +6430,7 @@ void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU34(%d,%d) 测量值Ⅴ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU34(%d,%d) 娴嬮噺鍊尖叅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6453,44 +6453,44 @@ void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; } -// 被测值VI报文 +// 琚祴鍊糣I鎶ユ枃 void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF) = 148 + // 淇℃伅搴忓彿(INF) = 148 //rtumsg->MsgData[11]; - // L1电流 + // L1鐢垫祦 //rtumsg->MsgData[12]; - // L2电流 + // L2鐢垫祦 //rtumsg->MsgData[16]; - // L3电流 + // L3鐢垫祦 //rtumsg->MsgData[20]; - // Ul1电压 + // Ul1鐢靛帇 //rtumsg->MsgData[24]; - // Ul2电压 + // Ul2鐢靛帇 //rtumsg->MsgData[28]; - // Ul3电压 + // Ul3鐢靛帇 //rtumsg->MsgData[32]; - // 视在功率 + // 瑙嗗湪鍔熺巼 //rtumsg->MsgData[36]; - // 频率 + // 棰戠巼 //rtumsg->MsgData[38]; - // 频率变化率 df/dt + // 棰戠巼鍙樺寲鐜 df/dt //rtumsg->MsgData[40]; - // 被测谐波值向量1(3 BYTES) + // 琚祴璋愭尝鍊煎悜閲1(3 BYTES) //rtumsg->MsgData[42]; // ... ... - // 被测谐波值向量N(3 BYTES) - // 四个八位位组的二进制时标 + // 琚祴璋愭尝鍊煎悜閲廚(3 BYTES) + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 int commid; int aipnt, iNum, idx; @@ -6508,7 +6508,7 @@ void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 总共7组被测值 + // 鎬诲叡7缁勮娴嬪 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*for(idx = 0; idx < DEV_AI_MAXNUM; idx++) { @@ -6529,7 +6529,7 @@ void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU35(%d,%d) 测量值Ⅵ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU35(%d,%d) 娴嬮噺鍊尖叆涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6543,7 +6543,7 @@ void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU35(%d,%d) 测量值Ⅵ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU35(%d,%d) 娴嬮噺鍊尖叆涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6566,27 +6566,27 @@ void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; } -// 被测值VII报文 +// 琚祴鍊糣II鎶ユ枃 void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(92 --- 148) + // 淇℃伅搴忓彿(INF)(92 --- 148) //rtumsg->MsgData[11]; - // 被测值1 + // 琚祴鍊1 //rtumsg->MsgData[12]; - // 被测值2 + // 琚祴鍊2 //rtumsg->MsgData[14]; // ... ... - // 被测值n + // 琚祴鍊糿 //rtumsg->MsgData[10+2*N]; int commid; @@ -6606,14 +6606,14 @@ void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 总共7组被测值 + // 鎬诲叡7缁勮娴嬪 idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEVII_NA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if(idx >= DEV_AI_MAXNUM) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU50(%d,%d) 测量值Ⅶ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU50(%d,%d) 娴嬮噺鍊尖叇涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6627,7 +6627,7 @@ void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU50(%d,%d) 测量值Ⅶ不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU50(%d,%d) 娴嬮噺鍊尖叇涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]); DebugPrint(szbuf); #endif @@ -6643,12 +6643,12 @@ void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) aipnt = pDataUnit->m_iStartPntNo; - // wen 2003.11.01 大于9以后的为谐波值和二进制时标 - // 南瑞103没有此要求 20060803 yizhonghu + // wen 2003.11.01 澶т簬9浠ュ悗鐨勪负璋愭尝鍊煎拰浜岃繘鍒舵椂鏍 + // 鍗楃憺103娌℃湁姝よ姹 20060803 yizhonghu // iNum = 9; for(i=0; iMsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256); pntmsg.RawValue /= 8; SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); @@ -6657,21 +6657,21 @@ void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103STNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=1 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=1 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(76 --- 79) + // 淇℃伅搴忓彿(INF)(76 --- 79) //rtumsg->MsgData[11]; - // 带瞬变状态指示的值(VTI) + // 甯︾灛鍙樼姸鎬佹寚绀虹殑鍊(VTI) //rtumsg->MsgData[12]; - // 品质描述(QDS) + // 鍝佽川鎻忚堪(QDS) //rtumsg->MsgData[13]; int commid; @@ -6696,7 +6696,7 @@ void Buban103STNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU38 步位置信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU38 姝ヤ綅缃俊鎭笉鍐欏叆鏁版嵁搴!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -6707,16 +6707,16 @@ void Buban103STNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(rtumsg->MsgData[12] & 0x80) { - // 设备在瞬变状态 + // 璁惧鍦ㄧ灛鍙樼姸鎬 } else { - // 设备未在瞬变状态 + // 璁惧鏈湪鐬彉鐘舵 } pntmsg.RawValue = rtumsg->MsgData[12]&0x7F; SetPntMsg(pDataUnit->m_iStnNo-1, aipnt, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE); - //品质描述(QDS) rtumsg->MsgData[13]; + //鍝佽川鎻忚堪(QDS) rtumsg->MsgData[13]; } void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) @@ -6732,21 +6732,21 @@ void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) #ifdef _DEBUG_MSG_ char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的单点信息1 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1 //rtumsg->MsgData[12]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[13]; commid = rtumsg->PortIdx; @@ -6758,7 +6758,7 @@ void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU1信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU1淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -6767,7 +6767,7 @@ void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) for(i=0; im_iPntNum; i++) { - // asdu类型判断 + // asdu绫诲瀷鍒ゆ柇 if(pLinkParam->m_iJudgeAsduNo != 0) { if(M_SP_NA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu) @@ -6805,7 +6805,7 @@ void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) int i, dipnt, commid; BYTE st; - // 事件发生时间毫秒数 + // 浜嬩欢鍙戠敓鏃堕棿姣鏁 time_t iTime; WORD wMillSeconds; struct tm *ptrtm; @@ -6820,32 +6820,32 @@ void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) #ifdef _DEBUG_MSG_ char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的单点信息1 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1 //rtumsg->MsgData[12]; - // 带品质描述的单点信息1变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[13]; - // 带品质描述的单点信息2 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2 //rtumsg->MsgData[17]; - // 带品质描述的单点信息2变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[18]; // ... ... - // 带品质描述的单点信息n + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n //rtumsg->MsgData[12+5*(n-1)]; - // 带品质描述的单点信息n变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[12+5*(n-1)+1]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[12+5*n]; commid = rtumsg->PortIdx; @@ -6857,7 +6857,7 @@ void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU1信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU1淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -6866,7 +6866,7 @@ void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) for(i=0; im_iPntNum; i++) { - // asdu类型判断 + // asdu绫诲瀷鍒ゆ柇 if(pLinkParam->m_iJudgeAsduNo != 0) { if(M_SP_TA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu) @@ -6891,10 +6891,10 @@ void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) st = rtumsg->MsgData[12] & 0x01; pntmsg.Status = st; - // 属于自发或者突发事件就是soe + // 灞炰簬鑷彂鎴栬呯獊鍙戜簨浠跺氨鏄痵oe if(rtumsg->MsgData[8] != M_CAUSE_QUERY) { - // 事件发生时间毫秒数 + // 浜嬩欢鍙戠敓鏃堕棿姣鏁 time(&iTime); ptrtm = localtime(&iTime); if(ptrtm->tm_hour < (rtumsg->MsgData[16] & 0x1f)) @@ -6930,57 +6930,57 @@ void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103DPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的双点信息1 + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅1 //rtumsg->MsgData[12]; - // 带品质描述的双点信息2 + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅2 //rtumsg->MsgData[13]; // ... ... - // 带品质描述的双点信息n + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅n //rtumsg->MsgData[12+n-1]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[12+n]; } void Buban103DPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的单点信息1 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1 //rtumsg->MsgData[12]; - // 带品质描述的单点信息1变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[13]; - // 带品质描述的单点信息2 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2 //rtumsg->MsgData[17]; - // 带品质描述的单点信息2变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[18]; // ... ... - // 带品质描述的单点信息n + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n //rtumsg->MsgData[12+5*(n-1)]; - // 带品质描述的单点信息n变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[12+5*(n-1)+1]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[12+5*n]; Buban103DPTAprocessOfSoe(rtumsg, psDevAddrParam); @@ -6988,32 +6988,32 @@ void Buban103DPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103DPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的单点信息1 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1 //rtumsg->MsgData[12]; - // 带品质描述的单点信息1变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[13]; - // 带品质描述的单点信息2 + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2 //rtumsg->MsgData[17]; - // 带品质描述的单点信息2变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[18]; // ... ... - // 带品质描述的单点信息n + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n //rtumsg->MsgData[12+5*(n-1)]; - // 带品质描述的单点信息n变化时间(4 bytes) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n鍙樺寲鏃堕棿(4 bytes) //rtumsg->MsgData[12+5*(n-1)+1]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[12+5*n]; @@ -7034,32 +7034,32 @@ void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) #ifdef _DEBUG_MSG_ char szbuf[256]; #endif - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的单点信息1状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[12]; // QDS //rtumsg->MsgData[16]; - // 带品质描述的单点信息2状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[17]; // QDS //rtumsg->MsgData[21]; // ... ... - // 带品质描述的单点信息n状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[12+5*(n-1)]; // QDS //rtumsg->MsgData[12+5*(n-1)+4]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[12+5*n]; commid = rtumsg->PortIdx; @@ -7071,7 +7071,7 @@ void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU1信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU1淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7080,7 +7080,7 @@ void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) for(i=0; im_iPntNum; i++) { - // asdu类型判断 + // asdu绫诲瀷鍒ゆ柇 if(pLinkParam->m_iJudgeAsduNo != 0) { if(M_SS_NA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu) @@ -7127,116 +7127,116 @@ void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103SSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ) & 0x7f = 测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ) & 0x7f = 娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的单点信息1状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅1鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[12]; // QDS //rtumsg->MsgData[16]; - // 四个八位位组的二进制时标 + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 //rtumsg->MsgData[17]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[21]; - // 带品质描述的单点信息2状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅2鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[22]; // QDS //rtumsg->MsgData[26]; - // 四个八位位组的二进制时标 + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 //rtumsg->MsgData[27]; // ... ... - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11+10*(n-1)]; - // 带品质描述的单点信息n状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍗曠偣淇℃伅n鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[11+10*(n-1)+1]; // QDS //rtumsg->MsgData[11+10*(n-1)+5]; - // 四个八位位组的二进制时标 + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 //rtumsg->MsgData[11+10*(n-1)+6]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[11+10*n]; } void Buban103DSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的双点信息1状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅1鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[12]; // QDS //rtumsg->MsgData[16]; - // 带品质描述的双点信息2状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅2鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[17]; // QDS //rtumsg->MsgData[21]; // ... ... - // 带品质描述的双点信息n状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅n鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[12+5*(n-1)]; // QDS //rtumsg->MsgData[12+5*(n-1)+4]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[12+5*n]; } void Buban103DSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ) & 0x7f = 测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ) & 0x7f = 娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11]; - // 带品质描述的双点信息1状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅1鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[12]; // QDS //rtumsg->MsgData[16]; - // 四个八位位组的二进制时标 + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 //rtumsg->MsgData[17]; - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[21]; - // 带品质描述的双点信息2状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅2鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[22]; // QDS //rtumsg->MsgData[26]; - // 四个八位位组的二进制时标 + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 //rtumsg->MsgData[27]; // ... ... - // 信息序号(INF)(149 --- 238) + // 淇℃伅搴忓彿(INF)(149 --- 238) //rtumsg->MsgData[11+10*(n-1)]; - // 带品质描述的双点信息n状态和状态变化检出=SCD(4 BYTE) + // 甯﹀搧璐ㄦ弿杩扮殑鍙岀偣淇℃伅n鐘舵佸拰鐘舵佸彉鍖栨鍑=SCD(4 BYTE) //rtumsg->MsgData[11+10*(n-1)+1]; // QDS //rtumsg->MsgData[11+10*(n-1)+5]; - // 四个八位位组的二进制时标 + // 鍥涗釜鍏綅浣嶇粍鐨勪簩杩涘埗鏃舵爣 //rtumsg->MsgData[11+10*(n-1)+6]; - // 附加信息 + // 闄勫姞淇℃伅 //rtumsg->MsgData[11+10*n]; } @@ -7258,7 +7258,7 @@ void Buban103WLTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU48 水位信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU48 姘翠綅淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7266,26 +7266,26 @@ void Buban103WLTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103ITNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP) + // 绫诲瀷鏍囪瘑(TYP) //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ)=测量量数目 + // 鍙彉缁撴瀯闄愬畾璇(VSQ)=娴嬮噺閲忔暟鐩 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN) + // 鍔熻兘绫诲瀷(FUN) //rtumsg->MsgData[10]; - // 信息序号(INF)(6 --- 31) + // 淇℃伅搴忓彿(INF)(6 --- 31) //rtumsg->MsgData[11]; - // 二进制计数器读数CR1(5 BYTES) + // 浜岃繘鍒惰鏁板櫒璇绘暟CR1(5 BYTES) //rtumsg->MsgData[12]; - // 二进制计数器读数CR2 + // 浜岃繘鍒惰鏁板櫒璇绘暟CR2 //rtumsg->MsgData[17]; // ... ... - // 二进制计数器读数CRn + // 浜岃繘鍒惰鏁板櫒璇绘暟CRn //rtumsg->MsgData[12+5*(N-1)]; - // 返回信息标识符(RII) + // 杩斿洖淇℃伅鏍囪瘑绗(RII) //rtumsg->MsgData[12+5*N]; int commid; @@ -7310,7 +7310,7 @@ void Buban103ITNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU36 电度量信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU36 鐢靛害閲忎俊鎭笉鍐欏叆鏁版嵁搴!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7322,110 +7322,110 @@ void Buban103ITNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) for(i=0; iMsgData[12+5*i+4] & 0x80) { continue; } - // 最低3位为品质描述 + // 鏈浣3浣嶄负鍝佽川鎻忚堪 pntmsg.RawValue = rtumsg->MsgData[12+5*i] + (rtumsg->MsgData[13+5*i] << 8) + (rtumsg->MsgData[13+5*i] << 16) + (rtumsg->MsgData[13+5*i] << 24); SetPntMsg(pDataUnit->m_iStnNo-1, pipnt+i, (void *)&pntmsg, PI_PNT_TYPE, PNT_RAWVALUE); } } -// 通用分类数据报文(包括所有的定值、模拟量、开关量(压板、开入开出等)) +// 閫氱敤鍒嗙被鏁版嵁鎶ユ枃(鍖呮嫭鎵鏈夌殑瀹氬笺佹ā鎷熼噺銆佸紑鍏抽噺(鍘嬫澘銆佸紑鍏ュ紑鍑虹瓑)) void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP):10 + // 绫诲瀷鏍囪瘑(TYP):10 //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ):0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ):0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN): 254(0xfe) + // 鍔熻兘绫诲瀷(FUN): 254(0xfe) //rtumsg->MsgData[10]; - // 信息序号(INF): - // 读组标题 : 240 - // 读一个组的全部条目的值或属性 : 241 - // 读单个条目的目录 : 243 - // 读单个条目的值或属性 : 244 - // 对通用分类数据总查询中止 : 245 + // 淇℃伅搴忓彿(INF): + // 璇荤粍鏍囬 : 240 + // 璇讳竴涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 : 241 + // 璇诲崟涓潯鐩殑鐩綍 : 243 + // 璇诲崟涓潯鐩殑鍊兼垨灞炴 : 244 + // 瀵归氱敤鍒嗙被鏁版嵁鎬绘煡璇腑姝 : 245 //rtumsg->MsgData[11]; - // 返回信息标识符(RII) + // 杩斿洖淇℃伅鏍囪瘑绗(RII) //rtumsg->MsgData[12]; - // 通用分类数据集数目 + // 閫氱敤鍒嗙被鏁版嵁闆嗘暟鐩 //rtumsg->MsgData[13]; - // 以下为多个通用分类数据 - // 通用分类标识序号(GIN):条目号和组号 + // 浠ヤ笅涓哄涓氱敤鍒嗙被鏁版嵁 + // 閫氱敤鍒嗙被鏍囪瘑搴忓彿(GIN):鏉$洰鍙峰拰缁勫彿 //rtumsg->MsgData[14]; - // 描述类别(KOD) - // 无所指定的描述类别 : KOD_NOSPECIFIED(0) - // 实际值 : KOD_ACTUALVALUE(1) - // 缺省值 : KOD_DEFAULTVALUE(2) - // 量程(最大值、最小值、步长) : KOD_RANGE(3) - // 备用 : KOD_BACKUP1(4) - // 精度(n,m) : KOD_PRECISION(5) - // 因子 : KOD_FACTOR(6) - // 参比 : KOD_REFERENCE(7) - // 列表 : KOD_ENUMERATION(8) - // 量纲 : KOD_DIMENSION(9) - // 描述 : KOD_DESCRIPTION(10) - // 备用 : KOD_BACKUP2(11) - // 口令条目 : KOD_PASSWORD(12) - // 只读 : KOD_READONLY(13) - // 只写 : KOD_WRITEONLY(14) - // 备用 : KOD_BACKUP3(15) - // 备用 : KOD_BACKUP4(16) - // 备用 : KOD_BACKUP5(17) - // 备用 : KOD_BACKUP6(18) - // 相应的功能类型和信息序号 : KOD_CORFUNCANDINF(19) - // 相应的事件 : KOD_COREVENT(20) - // 列表的文本阵列 : KOD_ENUMTEXTARRAY(21) - // 列表的值阵列 : KOD_ENUMVALUEARRAY(22) - // 相关联的条目 : KOD_RELATEDENTRIES(23) + // 鎻忚堪绫诲埆(KOD) + // 鏃犳墍鎸囧畾鐨勬弿杩扮被鍒 : KOD_NOSPECIFIED(0) + // 瀹為檯鍊 : KOD_ACTUALVALUE(1) + // 缂虹渷鍊 : KOD_DEFAULTVALUE(2) + // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) : KOD_RANGE(3) + // 澶囩敤 : KOD_BACKUP1(4) + // 绮惧害(n,m) : KOD_PRECISION(5) + // 鍥犲瓙 : KOD_FACTOR(6) + // 鍙傛瘮 : KOD_REFERENCE(7) + // 鍒楄〃 : KOD_ENUMERATION(8) + // 閲忕翰 : KOD_DIMENSION(9) + // 鎻忚堪 : KOD_DESCRIPTION(10) + // 澶囩敤 : KOD_BACKUP2(11) + // 鍙d护鏉$洰 : KOD_PASSWORD(12) + // 鍙 : KOD_READONLY(13) + // 鍙啓 : KOD_WRITEONLY(14) + // 澶囩敤 : KOD_BACKUP3(15) + // 澶囩敤 : KOD_BACKUP4(16) + // 澶囩敤 : KOD_BACKUP5(17) + // 澶囩敤 : KOD_BACKUP6(18) + // 鐩稿簲鐨勫姛鑳界被鍨嬪拰淇℃伅搴忓彿 : KOD_CORFUNCANDINF(19) + // 鐩稿簲鐨勪簨浠 : KOD_COREVENT(20) + // 鍒楄〃鐨勬枃鏈樀鍒 : KOD_ENUMTEXTARRAY(21) + // 鍒楄〃鐨勫奸樀鍒 : KOD_ENUMVALUEARRAY(22) + // 鐩稿叧鑱旂殑鏉$洰 : KOD_RELATEDENTRIES(23) //rtumsg->MsgData[16]; - // 数据类型描述 + // 鏁版嵁绫诲瀷鎻忚堪 //rtumsg->MsgData[17]; - //DATAID_NO : 无数据 - //DATAID_OS8ASCII : 8位ASCII - //DATAID_BSTRING : 8位2进制数 - //DATAID_UIX : 无符号整数 - //DATAID_INT : 整数 - //DATAID_UFLOAT : 无符号浮点数 - //DATAID_FLOAT : 浮点数 - //DATAID_754SHORT : R32.23 IEEE 标准754短实数 - //DATAID_754REAL : R64.53 IEEE 标准754实数 - //DATAID_DOUBLE : 双点信息 - //DATAID_SINGLE : 单点信息 - //DATAID_13BITS : 带品质描述的被测值(13BITS) - //DATAID_SORTIDNO : 通用分类标识序号 - //DATAID_WITHTIME : 带时标的报文 - //DATAID_WITHTIMESPACE : 带相对时标的报文 - //DATAID_STRUCT : 数据结构 - - // 数据尺寸 + //DATAID_NO : 鏃犳暟鎹 + //DATAID_OS8ASCII : 8浣岮SCII + //DATAID_BSTRING : 8浣2杩涘埗鏁 + //DATAID_UIX : 鏃犵鍙锋暣鏁 + //DATAID_INT : 鏁存暟 + //DATAID_UFLOAT : 鏃犵鍙锋诞鐐规暟 + //DATAID_FLOAT : 娴偣鏁 + //DATAID_754SHORT : R32.23 IEEE 鏍囧噯754鐭疄鏁 + //DATAID_754REAL : R64.53 IEEE 鏍囧噯754瀹炴暟 + //DATAID_DOUBLE : 鍙岀偣淇℃伅 + //DATAID_SINGLE : 鍗曠偣淇℃伅 + //DATAID_13BITS : 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) + //DATAID_SORTIDNO : 閫氱敤鍒嗙被鏍囪瘑搴忓彿 + //DATAID_WITHTIME : 甯︽椂鏍囩殑鎶ユ枃 + //DATAID_WITHTIMESPACE : 甯︾浉瀵规椂鏍囩殑鎶ユ枃 + //DATAID_STRUCT : 鏁版嵁缁撴瀯 + + // 鏁版嵁灏哄 //rtumsg->MsgData[18] - // 数量 + // 鏁伴噺 //rtumsg->MsgData[19] - // 数据值(长度根据以上描述) + // 鏁版嵁鍊(闀垮害鏍规嵁浠ヤ笂鎻忚堪) - // 2 ... n 个通用分类数据 + // 2 ... n 涓氱敤鍒嗙被鏁版嵁 int commid; int i, iGroupNo, iCfgGroupIdx; @@ -7442,7 +7442,7 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // 数据转发在这里处理 + // 鏁版嵁杞彂鍦ㄨ繖閲屽鐞 if(rtumsg->MsgData[12] == RII_PROV_ID) { if(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid >= 0) @@ -7450,12 +7450,12 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(psDevAddrParam->m_uchCommAddr ==\ pLinkParam->m_sBaoHuCmdParam.m_sRealAddrParam.m_uchCommAddr) { - // 判断超时时间为5分钟 + // 鍒ゆ柇瓒呮椂鏃堕棿涓5鍒嗛挓 if(JudgeTimeOut(&pLinkParam->m_sBaoHuCmdParam.m_sBaoHuCmdStartTime, 5*60) == FALSE) { if(MSGTYPE_BAOHU_103CMD == pLinkParam->m_sBaoHuCmdParam.m_iBaoHuMsgType) { - // 转储数据到转发端口 + // 杞偍鏁版嵁鍒拌浆鍙戠鍙 rtumsg->MsgData[9] = (BYTE)pDevParam->m_sDevParam.m_iProvAddr; rtumsg->PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid; rtumsg->MsgType = MSGTYPE_BAOHU_103DATA; @@ -7466,11 +7466,11 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) //rtumsg->MsgData[9] = (BYTE)pDevParam->m_sDevParam.m_iProvAddr; //rtumsg->PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid; rtumsg->MsgType = MSGTYPE_BAOHU_SCADADATA; - // 按内部保护格式转换 + // 鎸夊唴閮ㄤ繚鎶ゆ牸寮忚浆鎹 Buban103ScadaProtocolExchange(commid, rtumsg); } - // 没有后续数据 + // 娌℃湁鍚庣画鏁版嵁 if((rtumsg->MsgData[13] & 0x80) == 0) { pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid = -1; @@ -7486,7 +7486,7 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } } - //组 号 + //缁 鍙 iGroupNo = rtumsg->MsgData[14]; for(i=0; im_sDevParam.m_iCfgGroupNum; i++) { @@ -7500,7 +7500,7 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(i >= pDevParam->m_sDevParam.m_iCfgGroupNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10 通用分类数据处理时,Group=%d不在处理范围内!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10 閫氱敤鍒嗙被鏁版嵁澶勭悊鏃讹紝Group=%d涓嶅湪澶勭悊鑼冨洿鍐!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, iGroupNo); DebugPrint(szbuf); #endif @@ -7509,44 +7509,44 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) switch(pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType) { - // 处理模拟量 + // 澶勭悊妯℃嫙閲 case AI_PNT_TYPE: Buban103GDprocessWithAI(rtumsg, psDevAddrParam, iCfgGroupIdx); break; - // 处理开关量 + // 澶勭悊寮鍏抽噺 case DI_PNT_TYPE: Buban103GDprocessWithDI(rtumsg, psDevAddrParam, iCfgGroupIdx); break; - // 处理电度量 + // 澶勭悊鐢靛害閲 case PI_PNT_TYPE: Buban103GDprocessWithPI(rtumsg, psDevAddrParam, iCfgGroupIdx); break; - // 处理保护模拟量 + // 澶勭悊淇濇姢妯℃嫙閲 case PROTECT_AI_PNT_TYPE: Buban103GDprocessWithPAI(rtumsg, psDevAddrParam, iCfgGroupIdx); break; - // 处理保护开关量 + // 澶勭悊淇濇姢寮鍏抽噺 case PROTECT_DI_PNT_TYPE: Buban103GDprocessWithPDI(rtumsg, psDevAddrParam, iCfgGroupIdx); break; - // 处理保护定值 + // 澶勭悊淇濇姢瀹氬 case PROTECT_FIX_PNT_TYPE: Buban103GDprocessWithPFIX(rtumsg, psDevAddrParam, iCfgGroupIdx); break; - // 处理保护事件 + // 澶勭悊淇濇姢浜嬩欢 case PROTECT_EVENT_PNT_TYPE: Buban103GDprocessWithPEVENT(rtumsg, psDevAddrParam, iCfgGroupIdx); break; default: #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10处理时, Group=%d数据类型(=%d)不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10澶勭悊鏃, Group=%d鏁版嵁绫诲瀷(=%d)涓嶅尮閰!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iGroupNo, pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType); @@ -7558,29 +7558,29 @@ void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP):64 + // 绫诲瀷鏍囪瘑(TYP):64 //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ):0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ):0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - //M_CAUSE_REMOTE : // 远方操作 + //M_CAUSE_REMOTE : // 杩滄柟鎿嶄綔 - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN): 1 + // 鍔熻兘绫诲瀷(FUN): 1 //rtumsg->MsgData[10]; - // 信息序号(INF): 48 --- 75 + // 淇℃伅搴忓彿(INF): 48 --- 75 //rtumsg->MsgData[11]; - // 信息序号(DCC) + // 淇℃伅搴忓彿(DCC) //rtumsg->MsgData[12]; - // 返回信息标识符(RII) + // 杩斿洖淇℃伅鏍囪瘑绗(RII) //rtumsg->MsgData[13]; int commid; @@ -7602,7 +7602,7 @@ void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU64 未配置遥控点!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU64 鏈厤缃仴鎺х偣!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7612,20 +7612,20 @@ void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) iYkNo = rtumsg->MsgData[11] - 48 + pDevParam->m_sDevParam.m_iYkStartPnt; if(iYkNo >= 0) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 buf[0] = (BYTE)(commid & 0xFF); buf[1] = (BYTE)((commid & 0xFF00) << 8); buf[2] = (BYTE)((commid & 0xFF0000) << 16); @@ -7665,7 +7665,7 @@ void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(ShmGetDispYkYtFlag()) { #ifdef _DEBUG_MSG_ - //sprintf(szbuf, "端口%d 链路地址=%d 装置地址%d RII=0x%02x, 遥控点号=%d, op=0x%02x!!!\n", + //sprintf(szbuf, "绔彛%d 閾捐矾鍦板潃=%d 瑁呯疆鍦板潃%d RII=0x%02x, 閬ユ帶鐐瑰彿=%d, op=0x%02x!!!\n", // commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYkNo, rtumsg->MsgData[12]); //DebugPrint(szbuf); sprintf(szbuf, "TIP_(%04d): commid=%d linkaddr=%d devaddr=%d RII=0x%02x ykpnt=%d, op=0x%02x.\n", @@ -7680,29 +7680,29 @@ void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP):65 + // 绫诲瀷鏍囪瘑(TYP):65 //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ):0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ):0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - //M_CAUSE_REMOTE : // 远方操作 + //M_CAUSE_REMOTE : // 杩滄柟鎿嶄綔 - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN): 1 + // 鍔熻兘绫诲瀷(FUN): 1 //rtumsg->MsgData[10]; - // 信息序号(INF): 48 --- 75 + // 淇℃伅搴忓彿(INF): 48 --- 75 //rtumsg->MsgData[11]; - // 信息序号(RCC) + // 淇℃伅搴忓彿(RCC) //rtumsg->MsgData[12]; - // 返回信息标识符(RII) + // 杩斿洖淇℃伅鏍囪瘑绗(RII) //rtumsg->MsgData[13]; int commid; @@ -7724,7 +7724,7 @@ void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10 未配置遥控点!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10 鏈厤缃仴鎺х偣!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7734,20 +7734,20 @@ void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) iYtNo = rtumsg->MsgData[11] - 48 + pDevParam->m_sDevParam.m_iYtStartPnt; if(iYtNo >= 0) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 buf[0] = (BYTE)(commid & 0xFF); buf[1] = (BYTE)((commid & 0xFF00) << 8); buf[2] = (BYTE)((commid & 0xFF0000) << 16); @@ -7787,7 +7787,7 @@ void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(ShmGetDispYkYtFlag()) { #ifdef _DEBUG_MSG_ - //sprintf(szbuf, "端口%d 链路地址=%d 装置地址%d RII=0x%02x, 遥调点号=%d, op=0x%02x!!!\n", + //sprintf(szbuf, "绔彛%d 閾捐矾鍦板潃=%d 瑁呯疆鍦板潃%d RII=0x%02x, 閬ヨ皟鐐瑰彿=%d, op=0x%02x!!!\n", // commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYtNo, rtumsg->MsgData[12]); //DebugPrint(szbuf); sprintf(szbuf, "TIP_(%04d): commid=%d linkaddr=%d devaddr=%d RII=0x%02x ytpnt=%d, op=0x%02x.\n", @@ -7825,7 +7825,7 @@ void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(iOffset >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(AI)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(AI)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7836,7 +7836,7 @@ void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(stn <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(AI)_Group=%d 信息不写入数据库!!!",\ + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(AI)_Group=%d 淇℃伅涓嶅啓鍏ユ暟鎹簱!!!",\ commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,\ pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iGroupNo); DebugPrint(szbuf); @@ -7852,26 +7852,26 @@ void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(AI)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(AI)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(AI)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(AI)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif break; } - // 组号和条目号 + // 缁勫彿鍜屾潯鐩彿 aipnt = aistart + rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -7879,7 +7879,7 @@ void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(KOD_ACTUALVALUE != u8KOD) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(AI)处理时,KOD=%d不在处理范围内,只处理实际值数据!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(AI)澶勭悊鏃讹紝KOD=%d涓嶅湪澶勭悊鑼冨洿鍐咃紝鍙鐞嗗疄闄呭兼暟鎹!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8KOD); DebugPrint(szbuf); #endif @@ -7891,7 +7891,7 @@ void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iOffset += 2; for(j=0; j= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(DI)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(DI)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -7968,7 +7968,7 @@ void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(stn <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(DI)_Group=%d 信息不写入数据库!!!",\ + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(DI)_Group=%d 淇℃伅涓嶅啓鍏ユ暟鎹簱!!!",\ commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,\ pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iGroupNo); DebugPrint(szbuf); @@ -7984,26 +7984,26 @@ void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(DI)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(DI)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(DI)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(DI)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif break; } - // 组号和条目号 + // 缁勫彿鍜屾潯鐩彿 dipnt = distart + rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -8011,7 +8011,7 @@ void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(KOD_ACTUALVALUE != u8KOD) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(DI)处理时,KOD=%d不在处理范围内,只处理实际值数据!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(DI)澶勭悊鏃讹紝KOD=%d涓嶅湪澶勭悊鑼冨洿鍐咃紝鍙鐞嗗疄闄呭兼暟鎹!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8KOD); DebugPrint(szbuf); #endif @@ -8023,7 +8023,7 @@ void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iOffset += 2; for(j=0; j= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(PI)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(PI)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -8126,7 +8126,7 @@ void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(stn <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(PI)_Group=%d 信息不写入数据库!!!",\ + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(PI)_Group=%d 淇℃伅涓嶅啓鍏ユ暟鎹簱!!!",\ commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,\ pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iGroupNo); DebugPrint(szbuf); @@ -8142,26 +8142,26 @@ void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(PI)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(PI)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(PI)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(PI)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif break; } - // 组号和条目号 + // 缁勫彿鍜屾潯鐩彿 pipnt = pistart + rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -8169,7 +8169,7 @@ void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(KOD_ACTUALVALUE != u8KOD) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(PI)处理时,KOD=%d不在处理范围内,只处理实际值数据!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(PI)澶勭悊鏃讹紝KOD=%d涓嶅湪澶勭悊鑼冨洿鍐咃紝鍙鐞嗗疄闄呭兼暟鎹!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8KOD); DebugPrint(szbuf); #endif @@ -8181,7 +8181,7 @@ void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iOffset += 2; for(j=0; j= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -8264,14 +8264,14 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(pGroupParam->m_iPntNum <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据空间为零!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁绌洪棿涓洪浂!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif return; } - // 只处理实际值 + // 鍙鐞嗗疄闄呭 if(KOD_ACTUALVALUE != u8KOD) { return; @@ -8283,28 +8283,28 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 组 号 - // 条目号 + // 缁 鍙 + // 鏉$洰鍙 u8ItemNo = rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -8333,7 +8333,7 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(j >= pGroupParam->m_iPntNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,不匹配的GIN=%d!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屼笉鍖归厤鐨凣IN=%d!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -8347,7 +8347,7 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 if(u8KOD != rtumsg->MsgData[iOffset]) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,数据KOD=%d与要求的KOD=%d不符!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屾暟鎹甂OD=%d涓庤姹傜殑KOD=%d涓嶇!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD); DebugPrint(szbuf); #endif @@ -8384,7 +8384,7 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 switch(sValue.m_iDataType) { - case DT_UINT:// 无符号整型数 + case DT_UINT:// 鏃犵鍙锋暣鍨嬫暟 fValue = sValue.m_unValue.m_uValue; break; case DT_INT: @@ -8402,7 +8402,7 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 case DT_BINARY: fValue = sValue.m_unValue.m_dwValue; break; - case DT_NO:// 无数据 + case DT_NO:// 鏃犳暟鎹 default: fValue = -1; break; @@ -8437,7 +8437,7 @@ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 } else { - // 描述或者量纲 + // 鎻忚堪鎴栬呴噺绾 if(KOD_DESCRIPTION == u8KOD) { iStrLen = sizeof(pGroupParam->m_psDataInfo->m_szName)-1; @@ -8514,7 +8514,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 if((iOffset+3) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -8546,14 +8546,14 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据空间为零!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁绌洪棿涓洪浂!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif return; } - // 只处理实际值 + // 鍙鐞嗗疄闄呭 if(KOD_ACTUALVALUE != u8KOD) { return; @@ -8565,28 +8565,28 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 组 号 - // 条目号 + // 缁 鍙 + // 鏉$洰鍙 u8ItemNo = rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -8615,7 +8615,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 if(j >= pGroupParam->m_iPntNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,不匹配的GIN=%d!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屼笉鍖归厤鐨凣IN=%d!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -8629,7 +8629,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 if(u8KOD != rtumsg->MsgData[iOffset]) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,数据KOD=%d与要求的KOD=%d不符!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屾暟鎹甂OD=%d涓庤姹傜殑KOD=%d涓嶇!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD); DebugPrint(szbuf); #endif @@ -8666,7 +8666,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 switch(sValue.m_iDataType) { - case DT_UINT:// 无符号整型数 + case DT_UINT:// 鏃犵鍙锋暣鍨嬫暟 fValue = sValue.m_unValue.m_uValue; break; case DT_INT: @@ -8684,7 +8684,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 case DT_BINARY: fValue = sValue.m_unValue.m_dwValue; break; - case DT_NO:// 无数据 + case DT_NO:// 鏃犳暟鎹 default: fValue = -1; break; @@ -8719,7 +8719,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 } else { - // 描述或者量纲 + // 鎻忚堪鎴栬呴噺绾 if(KOD_DESCRIPTION == u8KOD) { iStrLen = sizeof(pGroupParam->m_psDataInfo->m_szName)-1; @@ -8760,7 +8760,7 @@ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_3 } } - // wen 2004.01.06 写定值确认 + // wen 2004.01.06 鍐欏畾鍊肩‘璁 if((M_CAUSE_WRITEACK == rtumsg->MsgData[8]) || (M_CAUSE_WRITECONFIRM == rtumsg->MsgData[8])) { @@ -8811,7 +8811,7 @@ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i if((iOffset+3) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -8822,7 +8822,7 @@ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i u8KOD = rtumsg->MsgData[16]; pGroupParam->m_u8NGD = rtumsg->MsgData[13]; - // 只处理实际值 + // 鍙鐞嗗疄闄呭 if(KOD_ACTUALVALUE != u8KOD) { return; @@ -8834,35 +8834,35 @@ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 组 号 - // 条目号 + // 缁 鍙 + // 鏉$洰鍙 u8ItemNo = rtumsg->MsgData[iOffset+1]; iOffset += 2; if(u8KOD != rtumsg->MsgData[iOffset]) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,数据KOD=%d与要求的KOD=%d不符!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屾暟鎹甂OD=%d涓庤姹傜殑KOD=%d涓嶇!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD); DebugPrint(szbuf); #endif @@ -8902,7 +8902,7 @@ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i switch(u8DataType) { - case DATAID_WITHTIME: // 带时标的报文 + case DATAID_WITHTIME: // 甯︽椂鏍囩殑鎶ユ枃 switch(rtumsg->MsgData[iOffset] & 0x03) { case 1: @@ -8945,7 +8945,7 @@ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i SetPntMsg(pDataUnit->m_iStnNo-1, pDataUnit->m_iStartPntNo+k, (void *)&sSoeData, DI_PNT_TYPE, PNT_SOE_TIME_EX); break; - case DATAID_WITHTIMESPACE:// 带相对时标的报文 + case DATAID_WITHTIMESPACE:// 甯︾浉瀵规椂鏍囩殑鎶ユ枃 switch(rtumsg->MsgData[iOffset] & 0x03) { case 1: @@ -9000,93 +9000,93 @@ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i void Buban103GIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { - // 类型标识(TYP):11 + // 绫诲瀷鏍囪瘑(TYP):11 //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ):0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ):0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - //M_CAUSE_READWITHVALIDDATA : 对通用分类读命令有效数据响应 - //M_CAUSE_READWITHINVALIDDATA : 对通用分类读命令无效数据响应 + //M_CAUSE_READWITHVALIDDATA : 瀵归氱敤鍒嗙被璇诲懡浠ゆ湁鏁堟暟鎹搷搴 + //M_CAUSE_READWITHINVALIDDATA : 瀵归氱敤鍒嗙被璇诲懡浠ゆ棤鏁堟暟鎹搷搴 - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN): 254(0xfe) + // 鍔熻兘绫诲瀷(FUN): 254(0xfe) //rtumsg->MsgData[10]; - // 信息序号(INF): - // 读单个条目的目录 : 243 + // 淇℃伅搴忓彿(INF): + // 璇诲崟涓潯鐩殑鐩綍 : 243 //rtumsg->MsgData[11]; - // 返回信息标识符(RII) + // 杩斿洖淇℃伅鏍囪瘑绗(RII) //rtumsg->MsgData[12]; - // 通用分类标识序号(GIN):条目号和组号 + // 閫氱敤鍒嗙被鏍囪瘑搴忓彿(GIN):鏉$洰鍙峰拰缁勫彿 //rtumsg->MsgData[13]; - // 描述元素的数目(NDE) + // 鎻忚堪鍏冪礌鐨勬暟鐩(NDE) //rtumsg->MsgData[15]; - // 以下为多个通用分类数据 - // 描述类别(KOD) - // 无所指定的描述类别 : KOD_NOSPECIFIED(0) - // 实际值 : KOD_ACTUALVALUE(1) - // 缺省值 : KOD_DEFAULTVALUE(2) - // 量程(最大值、最小值、步长) : KOD_RANGE(3) - // 备用 : KOD_BACKUP1(4) - // 精度(n,m) : KOD_PRECISION(5) - // 因子 : KOD_FACTOR(6) - // 参比 : KOD_REFERENCE(7) - // 列表 : KOD_ENUMERATION(8) - // 量纲 : KOD_DIMENSION(9) - // 描述 : KOD_DESCRIPTION(10) - // 备用 : KOD_BACKUP2(11) - // 口令条目 : KOD_PASSWORD(12) - // 只读 : KOD_READONLY(13) - // 只写 : KOD_WRITEONLY(14) - // 备用 : KOD_BACKUP3(15) - // 备用 : KOD_BACKUP4(16) - // 备用 : KOD_BACKUP5(17) - // 备用 : KOD_BACKUP6(18) - // 相应的功能类型和信息序号 : KOD_CORFUNCANDINF(19) - // 相应的事件 : KOD_COREVENT(20) - // 列表的文本阵列 : KOD_ENUMTEXTARRAY(21) - // 列表的值阵列 : KOD_ENUMVALUEARRAY(22) - // 相关联的条目 : KOD_RELATEDENTRIES(23) + // 浠ヤ笅涓哄涓氱敤鍒嗙被鏁版嵁 + // 鎻忚堪绫诲埆(KOD) + // 鏃犳墍鎸囧畾鐨勬弿杩扮被鍒 : KOD_NOSPECIFIED(0) + // 瀹為檯鍊 : KOD_ACTUALVALUE(1) + // 缂虹渷鍊 : KOD_DEFAULTVALUE(2) + // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) : KOD_RANGE(3) + // 澶囩敤 : KOD_BACKUP1(4) + // 绮惧害(n,m) : KOD_PRECISION(5) + // 鍥犲瓙 : KOD_FACTOR(6) + // 鍙傛瘮 : KOD_REFERENCE(7) + // 鍒楄〃 : KOD_ENUMERATION(8) + // 閲忕翰 : KOD_DIMENSION(9) + // 鎻忚堪 : KOD_DESCRIPTION(10) + // 澶囩敤 : KOD_BACKUP2(11) + // 鍙d护鏉$洰 : KOD_PASSWORD(12) + // 鍙 : KOD_READONLY(13) + // 鍙啓 : KOD_WRITEONLY(14) + // 澶囩敤 : KOD_BACKUP3(15) + // 澶囩敤 : KOD_BACKUP4(16) + // 澶囩敤 : KOD_BACKUP5(17) + // 澶囩敤 : KOD_BACKUP6(18) + // 鐩稿簲鐨勫姛鑳界被鍨嬪拰淇℃伅搴忓彿 : KOD_CORFUNCANDINF(19) + // 鐩稿簲鐨勪簨浠 : KOD_COREVENT(20) + // 鍒楄〃鐨勬枃鏈樀鍒 : KOD_ENUMTEXTARRAY(21) + // 鍒楄〃鐨勫奸樀鍒 : KOD_ENUMVALUEARRAY(22) + // 鐩稿叧鑱旂殑鏉$洰 : KOD_RELATEDENTRIES(23) //rtumsg->MsgData[16]; - // 数据类型描述 + // 鏁版嵁绫诲瀷鎻忚堪 //rtumsg->MsgData[17]; - //DATAID_NO : 无数据 - //DATAID_OS8ASCII : 8位ASCII - //DATAID_BSTRING : 字符串 - //DATAID_UIX : 无符号整数 - //DATAID_INT : 整数 - //DATAID_UFLOAT : 无符号浮点数 - //DATAID_FLOAT : 浮点数 - //DATAID_754SHORT : R32.23 IEEE 标准754短实数 - //DATAID_754REAL : R64.53 IEEE 标准754实数 - //DATAID_DOUBLE : 双点信息 - //DATAID_SINGLE : 单点信息 - //DATAID_13BITS : 带品质描述的被测值(13BITS) - //DATAID_SORTIDNO : 通用分类标识序号 - //DATAID_WITHTIME : 带时标的报文 - //DATAID_WITHTIMESPACE : 带相对时标的报文 - //DATAID_STRUCT : 数据结构 - - // 数据尺寸 + //DATAID_NO : 鏃犳暟鎹 + //DATAID_OS8ASCII : 8浣岮SCII + //DATAID_BSTRING : 瀛楃涓 + //DATAID_UIX : 鏃犵鍙锋暣鏁 + //DATAID_INT : 鏁存暟 + //DATAID_UFLOAT : 鏃犵鍙锋诞鐐规暟 + //DATAID_FLOAT : 娴偣鏁 + //DATAID_754SHORT : R32.23 IEEE 鏍囧噯754鐭疄鏁 + //DATAID_754REAL : R64.53 IEEE 鏍囧噯754瀹炴暟 + //DATAID_DOUBLE : 鍙岀偣淇℃伅 + //DATAID_SINGLE : 鍗曠偣淇℃伅 + //DATAID_13BITS : 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) + //DATAID_SORTIDNO : 閫氱敤鍒嗙被鏍囪瘑搴忓彿 + //DATAID_WITHTIME : 甯︽椂鏍囩殑鎶ユ枃 + //DATAID_WITHTIMESPACE : 甯︾浉瀵规椂鏍囩殑鎶ユ枃 + //DATAID_STRUCT : 鏁版嵁缁撴瀯 + + // 鏁版嵁灏哄 //rtumsg->MsgData[18] - // 数量 + // 鏁伴噺 //rtumsg->MsgData[19] - // 通用分类标识数据(GID) - // 长度根据以上描述 + // 閫氱敤鍒嗙被鏍囪瘑鏁版嵁(GID) + // 闀垮害鏍规嵁浠ヤ笂鎻忚堪 - // 2 ... n 个通用分类数据 + // 2 ... n 涓氱敤鍒嗙被鏁版嵁 } void Buban103SynTime(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) @@ -9106,14 +9106,14 @@ void Buban103SynTime(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //DebugPrint("sync time hello1."); - // 如果非时间同步原因,则不进行对时 + // 濡傛灉闈炴椂闂村悓姝ュ師鍥狅紝鍒欎笉杩涜瀵规椂 if(M_CAUSE_CHECKTIME != rtumsg->MsgData[8]) { return; } //DebugPrint("sync time hello2."); - // 上对时 + // 涓婂鏃 if(1 != pPortParam->m_psBaoHu->CheckTime) { return; @@ -9160,7 +9160,7 @@ void Buban103EXPIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) if(pDataUnit->m_iStnNo < 1) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d SIEMENS扩展电度信息不写入数据库!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d SIEMENS鎵╁睍鐢靛害淇℃伅涓嶅啓鍏ユ暟鎹簱!!!", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr); DebugPrint(szbuf); #endif @@ -9185,7 +9185,7 @@ void Buban103EXPIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) pntmsg.RawValue = rtumsg->MsgData[12] + rtumsg->MsgData[13]*256\ +rtumsg->MsgData[14]*256*256 + (rtumsg->MsgData[15]&0x0f)*256*256*256; - // 符号位 + // 绗﹀彿浣 if(rtumsg->MsgData[15] & 0x10) { pntmsg.RawValue |= 0xF0000000; @@ -9194,74 +9194,74 @@ void Buban103EXPIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) SetPntMsg(pDataUnit->m_iStnNo-1, pipnt, (void *)&pntmsg, PI_PNT_TYPE, PNT_RAWVALUE); } -// 扰动数据处理开始 -// 扰动数据表处理 +// 鎵板姩鏁版嵁澶勭悊寮濮 +// 鎵板姩鏁版嵁琛ㄥ鐞 void Buban103LRDprocess(RTUMSG *rtumsg) {} -// 扰动数据传输准备就绪 +// 鎵板姩鏁版嵁浼犺緭鍑嗗灏辩华 void Buban103RTDprocess(RTUMSG *rtumsg) {} -// 带标志的状态变位传输准备就绪 +// 甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈撳噯澶囧氨缁 void Buban103RTTprocess(RTUMSG *rtumsg) {} -// 带标志的状态变位传输 +// 甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈 void Buban103TOTprocess(RTUMSG *rtumsg) {} -// 被记录的通道传输准备就绪 +// 琚褰曠殑閫氶亾浼犺緭鍑嗗灏辩华 void Buban103RTCprocess(RTUMSG *rtumsg) {} -// 传送扰动值 +// 浼犻佹壈鍔ㄥ void Buban103TOVprocess(RTUMSG *rtumsg) {} -// 带标志的状态变位、通道、扰动数据传输结束 +// 甯︽爣蹇楃殑鐘舵佸彉浣嶃侀氶亾銆佹壈鍔ㄦ暟鎹紶杈撶粨鏉 void Buban103EOTprocess(RTUMSG *rtumsg) {} -// 扰动数据处理结束 +// 鎵板姩鏁版嵁澶勭悊缁撴潫 -// 写通道扰动数据到文件中 +// 鍐欓氶亾鎵板姩鏁版嵁鍒版枃浠朵腑 BOOL Buban103WriteACCDatatoFile(RTUMSG *rtumsg) { return FALSE; } -// 读录波数据文件头 +// 璇诲綍娉㈡暟鎹枃浠跺ご void Buban103GetFileHead(char *ptrDataHead, size_t *piNOF, size_t *piNOC, size_t *piNOE, size_t *piINT) {} -// 读录波数据记录时间 +// 璇诲綍娉㈡暟鎹褰曟椂闂 //void Buban103GetTime(char *ptrDataHead, SYSTEMTIME *ptrtm) //{} -// 读录波数据模拟量头 +// 璇诲綍娉㈡暟鎹ā鎷熼噺澶 void Buban103ProcessAiHead(char *ptrDataHead, DISTURBANCEAIDATA *pAiData) {} -// 转换临时文件为可用文件 +// 杞崲涓存椂鏂囦欢涓哄彲鐢ㄦ枃浠 void Buban103tmpFileChangetodatFile(char *sztmpFileName) {} -// 生成CFG文件 +// 鐢熸垚CFG鏂囦欢 //void Buban103MakeCFGFile(int iStationNo, pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp, char *szInfFile, SYSTEMTIME *tm) //{} -// 生成DAT文件 +// 鐢熸垚DAT鏂囦欢 void Buban103MakeDATFile(pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp) {} -//=========================以下为Buban103转发数据功能=======================// +//=========================浠ヤ笅涓築uban103杞彂鏁版嵁鍔熻兘=======================// //***************************************************************************/ -//* 插入SOE数据函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_32 selidx : 端口索引号 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//* PROV_SOE *pSoeMsg : 转发SOE数据 */ -//*返回值:BOOL retval : 插入SOE数据时是否覆盖(缓冲区是否已满) */ +//* 鎻掑叆SOE鏁版嵁鍑芥暟 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_32 selidx : 绔彛绱㈠紩鍙 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//* PROV_SOE *pSoeMsg : 杞彂SOE鏁版嵁 */ +//*杩斿洖鍊:BOOL retval : 鎻掑叆SOE鏁版嵁鏃舵槸鍚﹁鐩(缂撳啿鍖烘槸鍚﹀凡婊) */ //***************************************************************************/ BOOL ProvInsertSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg) { @@ -9280,7 +9280,7 @@ BOOL ProvInsertSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg) rear = pProvDevParam->m_sProvSoe.m_shRear; if(pProvDevParam->m_sProvSoe.m_shSoeNum >= PROV_SOE_MAX) { - // 缓冲区已满 + // 缂撳啿鍖哄凡婊 memcpy((void *)&pProvDevParam->m_sProvSoe.m_sSoeData[rear], (void *)pSoeMsg, sizeof(SOE_DEF)); pProvDevParam->m_sProvSoe.m_shFront = (front + 1) % PROV_SOE_MAX; @@ -9300,12 +9300,12 @@ BOOL ProvInsertSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg) } //***************************************************************************/ -//* 从缓冲区取并且删除SOE数据函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_32 selidx : 端口索引号 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//* PROV_SOE *pSoeMsg : SOE数据指针 */ -//*返回值:BOOL retval : 获取SOE数据是否成功 */ +//* 浠庣紦鍐插尯鍙栧苟涓斿垹闄OE鏁版嵁鍑芥暟 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_32 selidx : 绔彛绱㈠紩鍙 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//* PROV_SOE *pSoeMsg : SOE鏁版嵁鎸囬拡 */ +//*杩斿洖鍊:BOOL retval : 鑾峰彇SOE鏁版嵁鏄惁鎴愬姛 */ //***************************************************************************/ BOOL ProvGetAndDelSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg) { @@ -9368,10 +9368,10 @@ BOOL ProvGetNoXSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, int iNo, SOE_DEF * } //***************************************************************************/ -//* 转发一类数据是否存在函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂涓绫绘暟鎹槸鍚﹀瓨鍦ㄥ嚱鏁 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiChange) { @@ -9399,7 +9399,7 @@ BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiCh bQueryAllDev = FALSE; } - // 是否转发遥信变位,一般将其屏蔽 + // 鏄惁杞彂閬ヤ俊鍙樹綅,涓鑸皢鍏跺睆钄 if(TRUE == bCheckDiChange) { if(pPortParam->m_psBaoHu != NULL) @@ -9425,7 +9425,7 @@ BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiCh break; } - // 该项判断应该不需要存在 + // 璇ラ」鍒ゆ柇搴旇涓嶉渶瑕佸瓨鍦 //if(psDevAddrParam->m_iDevIdx >= pLinkParam->m_iDevNum) //{ // break; @@ -9433,7 +9433,7 @@ BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiCh } pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx]; - // 如果在总查询过程中 + // 濡傛灉鍦ㄦ绘煡璇㈣繃绋嬩腑 //if((pProvDevParam->m_bProvQuery == TRUE) || (pProvDevParam->m_sProvGroupParam.m_bFinished == FALSE)) if(pProvDevParam->m_bProvQuery == TRUE) { @@ -9454,12 +9454,12 @@ BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiCh } //***************************************************************************/ -//* 转发链路指令的生成函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_char addr : 间隔设备地址 */ -//* u_char cmdidx : 指令生成索引号 */ -//* BOOL bACD : 一类数据存在标识 */ -//*返回值:无 */ +//* 杞彂閾捐矾鎸囦护鐨勭敓鎴愬嚱鏁 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_char addr : 闂撮殧璁惧鍦板潃 */ +//* u_char cmdidx : 鎸囦护鐢熸垚绱㈠紩鍙 */ +//* BOOL bACD : 涓绫绘暟鎹瓨鍦ㄦ爣璇 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD) { @@ -9468,7 +9468,7 @@ void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD) memset(&bClpdu_fix, 0, sizeof(CLPDU_FIX)); switch(cmdidx) { - case M_CON_NA_3: // 确认帧 + case M_CON_NA_3: // 纭甯 bClpdu_fix.nSTART = 0x10; if(bACD) bClpdu_fix.nCONTROL = cmdidx | 0x20; @@ -9479,11 +9479,11 @@ void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD) bClpdu_fix.nEnd = 0x16; PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)&bClpdu_fix, 5); break; - case M_BY_NA_3: // 忙帧(确认帧) - case M_NV_NA_3: // 无所要求的数据帧回答 - case M_LKR_NA_3_1: // 链路状态响应帧--链路工作正常 - case M_LKR_NA_3_2: // 链路状态响应帧--链路服务未工作 - case M_LKR_NA_3_3: // 链路状态响应帧--链路服务未实现 + case M_BY_NA_3: // 蹇欏抚锛堢‘璁ゅ抚锛 + case M_NV_NA_3: // 鏃犳墍瑕佹眰鐨勬暟鎹抚鍥炵瓟 + case M_LKR_NA_3_1: // 閾捐矾鐘舵佸搷搴斿抚--閾捐矾宸ヤ綔姝e父 + case M_LKR_NA_3_2: // 閾捐矾鐘舵佸搷搴斿抚--閾捐矾鏈嶅姟鏈伐浣 + case M_LKR_NA_3_3: // 閾捐矾鐘舵佸搷搴斿抚--閾捐矾鏈嶅姟鏈疄鐜 bClpdu_fix.nSTART = 0x10; if(bACD) bClpdu_fix.nCONTROL = cmdidx | 0x20; @@ -9500,13 +9500,13 @@ void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD) } //***************************************************************************/ -//* 转发链路指令的生成函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_char addr : 间隔设备地址 */ -//* u_char cmdidx : 指令生成索引号 */ -//* BOOL bACD : 一类数据存在标识 */ -//* BOOL bClearRecvBuf : 是否清除接收缓冲区 */ -//*返回值:无 */ +//* 杞彂閾捐矾鎸囦护鐨勭敓鎴愬嚱鏁 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_char addr : 闂撮殧璁惧鍦板潃 */ +//* u_char cmdidx : 鎸囦护鐢熸垚绱㈠紩鍙 */ +//* BOOL bACD : 涓绫绘暟鎹瓨鍦ㄦ爣璇 */ +//* BOOL bClearRecvBuf : 鏄惁娓呴櫎鎺ユ敹缂撳啿鍖 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvMakeLinkCommandEx(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD, BOOL bClearRecvBuf, u_32 cmdtype) { @@ -9515,12 +9515,12 @@ void ProvMakeLinkCommandEx(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD, B memset(&bClpdu_fix, 0, sizeof(CLPDU_FIX)); switch(cmdidx) { - case M_CON_NA_3: // 确认帧 - case M_BY_NA_3: // 忙帧(确认帧) - case M_NV_NA_3: // 无所要求的数据帧回答 - case M_LKR_NA_3_1: // 链路状态响应帧--链路工作正常 - case M_LKR_NA_3_2: // 链路状态响应帧--链路服务未工作 - case M_LKR_NA_3_3: // 链路状态响应帧--链路服务未实现 + case M_CON_NA_3: // 纭甯 + case M_BY_NA_3: // 蹇欏抚锛堢‘璁ゅ抚锛 + case M_NV_NA_3: // 鏃犳墍瑕佹眰鐨勬暟鎹抚鍥炵瓟 + case M_LKR_NA_3_1: // 閾捐矾鐘舵佸搷搴斿抚--閾捐矾宸ヤ綔姝e父 + case M_LKR_NA_3_2: // 閾捐矾鐘舵佸搷搴斿抚--閾捐矾鏈嶅姟鏈伐浣 + case M_LKR_NA_3_3: // 閾捐矾鐘舵佸搷搴斿抚--閾捐矾鏈嶅姟鏈疄鐜 bClpdu_fix.nSTART = 0x10; if(bACD) bClpdu_fix.nCONTROL = cmdidx | 0x20; @@ -9537,14 +9537,14 @@ void ProvMakeLinkCommandEx(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD, B } //***************************************************************************/ -//* 转发链路指令的生成函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_char addr : 间隔设备地址 */ -//* u_char cmdidx : 指令生成索引号 */ -//* BOOL bACD : 一类数据存在标识 */ -//* BYTE bCause : 传送原因 */ -//* u_32 cmdtype : 指令缓冲区类型 */ -//*返回值:无 */ +//* 杞彂閾捐矾鎸囦护鐨勭敓鎴愬嚱鏁 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_char addr : 闂撮殧璁惧鍦板潃 */ +//* u_char cmdidx : 鎸囦护鐢熸垚绱㈠紩鍙 */ +//* BOOL bACD : 涓绫绘暟鎹瓨鍦ㄦ爣璇 */ +//* BYTE bCause : 浼犻佸師鍥 */ +//* u_32 cmdtype : 鎸囦护缂撳啿鍖虹被鍨 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, \ u_char cmdidx, BOOL bACD, BYTE bCause, u_32 cmdtype) @@ -9565,15 +9565,15 @@ void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, \ len = 0; switch(cmdidx) { - case M_TM_TA_3://带时标的报文 + case M_TM_TA_3://甯︽椂鏍囩殑鎶ユ枃 break; - case M_TMR_TA_3://具有相对时间的带时标的报文 + case M_TMR_TA_3://鍏锋湁鐩稿鏃堕棿鐨勫甫鏃舵爣鐨勬姤鏂 break; - case M_MEI_NA_3://被测值I + case M_MEI_NA_3://琚祴鍊糏 break; - case M_TME_TA_3://具有相对时间的带时标的被测值 + case M_TME_TA_3://鍏锋湁鐩稿鏃堕棿鐨勫甫鏃舵爣鐨勮娴嬪 break; - case M_IRC_NA_3://标识 + case M_IRC_NA_3://鏍囪瘑 len = sizeof(CLPDU_VARR); tmp[len++] = cmdidx; tmp[len++] = 0x81; @@ -9587,9 +9587,9 @@ void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, \ tmp[len++] = 0x01; len += 3; break; - case M_SYN_TA_3://时间同步 + case M_SYN_TA_3://鏃堕棿鍚屾 break; - case M_TGI_NA_3://总查询(总召唤)终止 + case M_TGI_NA_3://鎬绘煡璇紙鎬诲彫鍞わ級缁堟 len = sizeof(CLPDU_VARR); tmp[len++] = cmdidx; tmp[len++] = 0x81; @@ -9599,69 +9599,69 @@ void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, \ tmp[len++] = 0; tmp[len++] = 0; break; - case M_MEII_NA_3://被测值II + case M_MEII_NA_3://琚祴鍊糏I break; - case M_GD_NTA_3://通用分类数据 + case M_GD_NTA_3://閫氱敤鍒嗙被鏁版嵁 break; - case M_GI_NTA_3://通用分类标识 + case M_GI_NTA_3://閫氱敤鍒嗙被鏍囪瘑 break; - case M_LRD_TA_3://被记录的扰动表 + case M_LRD_TA_3://琚褰曠殑鎵板姩琛 break; - case M_RTD_TA_3://扰动数据传输准备就绪 + case M_RTD_TA_3://鎵板姩鏁版嵁浼犺緭鍑嗗灏辩华 break; - case M_RTC_NA_3://被记录的通道传输准备就绪 + case M_RTC_NA_3://琚褰曠殑閫氶亾浼犺緭鍑嗗灏辩华 break; - case M_RTT_NA_3://带标志的状态变位传输准备就绪 + case M_RTT_NA_3://甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈撳噯澶囧氨缁 break; - case M_TOT_TA_3://传送带标志的状态变位 + case M_TOT_TA_3://浼犻佸甫鏍囧織鐨勭姸鎬佸彉浣 break; - case M_TOV_NA_3://传送扰动值 + case M_TOV_NA_3://浼犻佹壈鍔ㄥ break; - case M_EOT_TA_3://传送结束 + case M_EOT_TA_3://浼犻佺粨鏉 break; - case M_MEIII_TA_3://带时标的被测值Ⅲ + case M_MEIII_TA_3://甯︽椂鏍囩殑琚祴鍊尖參 break; - case M_MEIV_TA_3://带时标的被测值Ⅳ + case M_MEIV_TA_3://甯︽椂鏍囩殑琚祴鍊尖叄 break; - case M_MEV_TA_3://带时标的被测值Ⅴ + case M_MEV_TA_3://甯︽椂鏍囩殑琚祴鍊尖叅 break; - case M_MEVI_TA_3://带时标的被测值Ⅵ + case M_MEVI_TA_3://甯︽椂鏍囩殑琚祴鍊尖叆 break; - case M_MEVII_NA_3://被测值Ⅶ + case M_MEVII_NA_3://琚祴鍊尖叇 break; - case M_IT_NA_3://电能脉冲计数值 + case M_IT_NA_3://鐢佃兘鑴夊啿璁℃暟鍊 break; - case M_IT_TA_3://带时标的电能脉冲计数值 + case M_IT_TA_3://甯︽椂鏍囩殑鐢佃兘鑴夊啿璁℃暟鍊 break; - case M_ST_NA_3://步位置信息 + case M_ST_NA_3://姝ヤ綅缃俊鎭 break; - case M_ST_TA_3://带时标的步位置信息 + case M_ST_TA_3://甯︽椂鏍囩殑姝ヤ綅缃俊鎭 break; - case M_SP_NA_3://单点状态信息 + case M_SP_NA_3://鍗曠偣鐘舵佷俊鎭 break; - case M_SP_TA_3://带时标的单点状态信息 + case M_SP_TA_3://甯︽椂鏍囩殑鍗曠偣鐘舵佷俊鎭 break; - case M_DP_NA_3://双点状态信息 + case M_DP_NA_3://鍙岀偣鐘舵佷俊鎭 break; - case M_DP_TA_3://带时标的双点状态信息 + case M_DP_TA_3://甯︽椂鏍囩殑鍙岀偣鐘舵佷俊鎭 break; - case M_SS_NA_3://单点状态和状态变位检出 + case M_SS_NA_3://鍗曠偣鐘舵佸拰鐘舵佸彉浣嶆鍑 break; - case M_SS_TA_3://带时标的单点状态和状态变位检出 + case M_SS_TA_3://甯︽椂鏍囩殑鍗曠偣鐘舵佸拰鐘舵佸彉浣嶆鍑 break; - case M_DS_NA_3://双点状态和状态变位检出 + case M_DS_NA_3://鍙岀偣鐘舵佸拰鐘舵佸彉浣嶆鍑 break; - case M_DS_TA_3://带时标的双点状态和状态变位检出 + case M_DS_TA_3://甯︽椂鏍囩殑鍙岀偣鐘舵佸拰鐘舵佸彉浣嶆鍑 break; - case M_WL_TA_3://水位 + case M_WL_TA_3://姘翠綅 break; - case M_DC_NA_3://控制断路器命令 + case M_DC_NA_3://鎺у埗鏂矾鍣ㄥ懡浠 break; - case M_RC_NA_3://升降命令 + case M_RC_NA_3://鍗囬檷鍛戒护 break; - case M_SE_NA_3://设定命令 + case M_SE_NA_3://璁惧畾鍛戒护 break; - case M_CC_NA_3://控制命令 + case M_CC_NA_3://鎺у埗鍛戒护 break; } @@ -9676,21 +9676,21 @@ void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, \ } //***************************************************************************/ -//* 转发命令处理 */ -//*参数: u_32 portidx : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//*返回值:无 */ +//* 杞彂鍛戒护澶勭悊 */ +//*鍙傛暟: u_32 portidx : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvRtuProtocolDataProcess(int commid, RTUMSG *rtumsg) { if(rtumsg->MsgLen == 0) return; - // 数据校验错误(附加字节的第二个字节) + // 鏁版嵁鏍¢獙閿欒(闄勫姞瀛楄妭鐨勭浜屼釜瀛楄妭) if(rtumsg->MsgData[rtumsg->MsgLen+1] > 0) return; - // wen 增加限制,以使得指令缓冲区不会生成多条指令 + // wen 澧炲姞闄愬埗锛屼互浣垮緱鎸囦护缂撳啿鍖轰笉浼氱敓鎴愬鏉℃寚浠 //if(CheckPollCmdBuf(commid)) return; switch(rtumsg->MsgData[0]) @@ -9709,11 +9709,11 @@ void ProvRtuProtocolDataProcess(int commid, RTUMSG *rtumsg) } //***************************************************************************/ -//* 保护命令数据处理函数 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 淇濇姢鍛戒护鏁版嵁澶勭悊鍑芥暟 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvSendCmdToPort(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -9735,7 +9735,7 @@ void ProvSendCmdToPort(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam return; } - // ??? 在这里将保护数据发送到指定的装置下发端口 + // ??? 鍦ㄨ繖閲屽皢淇濇姢鏁版嵁鍙戦佸埌鎸囧畾鐨勮缃笅鍙戠鍙 if(pProvDevParam->m_iRealCommid > 0) { destport = pProvDevParam->m_iRealCommid-1; @@ -9752,10 +9752,10 @@ void ProvSendCmdToPort(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam } //***************************************************************************/ -//* 数据转发短帧处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//*返回值:无 */ +//* 鏁版嵁杞彂鐭抚澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) { @@ -9770,7 +9770,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) if((rtumsg->MsgData[1] & 0xc0) == 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d(CtrlByte=%02x)接收到的短帧数据不是主站命令!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d(CtrlByte=%02x)鎺ユ敹鍒扮殑鐭抚鏁版嵁涓嶆槸涓荤珯鍛戒护!!!\n", commid, rtumsg->MsgData[2], rtumsg->MsgData[1]); DebugPrint(szbuf); #endif @@ -9787,7 +9787,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) if(FindProtectDev(pPortParam, &DevAddrParam, TRUE) == FALSE) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d 不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d 涓嶅尮閰!!!\n", commid, rtumsg->MsgData[2]); DebugPrint(szbuf); #endif @@ -9819,7 +9819,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) switch(rtumsg->MsgData[1] & 0x0f) { - case C_RCU_NA_3://复位通信单元 + case C_RCU_NA_3://澶嶄綅閫氫俊鍗曞厓 if(TRUE == bFind) { InitBuban103LinkCmdBuf(pLinkParam); @@ -9832,7 +9832,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, FALSE); } break; - case C_RFB_NA_3://复位帧计数位 + case C_RFB_NA_3://澶嶄綅甯ц鏁颁綅 if(TRUE == bFind) { pLinkParam->m_pu8CtlByte[DevAddrParam.m_iDevIdx] = 0; @@ -9844,7 +9844,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, FALSE); } break; - case C_RLK_NA_3://链路状态请求 + case C_RLK_NA_3://閾捐矾鐘舵佽姹 if(TRUE == bFind) { ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_LKR_NA_3_1, FALSE); @@ -9854,7 +9854,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_LKR_NA_3_2, FALSE); } break; - case C_PL1_NA_3://召唤一级数据 + case C_PL1_NA_3://鍙敜涓绾ф暟鎹 if(FALSE == bFind) { break; @@ -9862,7 +9862,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) if(TRUE == IsDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx)) { - // 查找链路中所有的装置 + // 鏌ユ壘閾捐矾涓墍鏈夌殑瑁呯疆 //if(pLinkParam->m_uchLinkAddr != 0xFF) //{ // DevAddrParam.m_iDevIdx = -1; @@ -9870,7 +9870,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) ProvPL1process(commid, &DevAddrParam); } break; - case C_PL2_NA_3://召唤二级数据 + case C_PL2_NA_3://鍙敜浜岀骇鏁版嵁 if(FALSE == bFind) { break; @@ -9878,7 +9878,7 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) if(TRUE == IsDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx)) { - // 查找链路中所有的装置 + // 鏌ユ壘閾捐矾涓墍鏈夌殑瑁呯疆 //if(pLinkParam->m_uchLinkAddr != 0xFF) //{ // DevAddrParam.m_iDevIdx = -1; @@ -9892,11 +9892,11 @@ void Provshortprocess(u_32 commid, RTUMSG *rtumsg) } //***************************************************************************/ -//* 转发一类数据处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_char addr : 间隔设备地址 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂涓绫绘暟鎹鐞 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_char addr : 闂撮殧璁惧鍦板潃 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) { @@ -9932,7 +9932,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) return; } - // 首先发送突发事件(由于所有装置的信息都在一个缓冲区,所以只能有一个公共链路) + // 棣栧厛鍙戦佺獊鍙戜簨浠(鐢变簬鎵鏈夎缃殑淇℃伅閮藉湪涓涓紦鍐插尯锛屾墍浠ュ彧鑳芥湁涓涓叕鍏遍摼璺) while(ProvHaveSoeData(commid) > 0) { ProvAndDelGetSoeData(commid, &sSoeData); @@ -9953,9 +9953,9 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) ptrClpdu_varr = (CLPDU_VARR *)rtumsg.MsgData; ptrClpdu_varr->nSTART1 = 0x68; ptrClpdu_varr->nSTART2 = 0x68; - // 重新赋值链路的转发地址 + // 閲嶆柊璧嬪奸摼璺殑杞彂鍦板潃 ptrClpdu_varr->nADDR = sDevAddrParam.m_uchLinkAddr; - // 如果在总查询过程中 + // 濡傛灉鍦ㄦ绘煡璇㈣繃绋嬩腑 /* if(pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx].m_bProvQuery) { @@ -9963,7 +9963,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) } else { - // 是否还有一类数据 + // 鏄惁杩樻湁涓绫绘暟鎹 if(TRUE == bACD) { ptrClpdu_varr->nCONTROL |= 0x20; @@ -9973,7 +9973,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) ptrClpdu_varr->nCONTROL &= 0xDF; } }*/ - // 是否还有一类数据 + // 鏄惁杩樻湁涓绫绘暟鎹 //if(TRUE == bACD) //{ // ptrClpdu_varr->nCONTROL |= 0x20; @@ -9990,7 +9990,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x01; len = 14; - // 四个八位二进制组 + // 鍥涗釜鍏綅浜岃繘鍒剁粍 rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(wValue); rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(wValue); rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = sSoeData.SoeTime.Min & 0x3F; @@ -10002,7 +10002,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) { rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x02; len = 18; - // 四个八位二进制组 + // 鍥涗釜鍏綅浜岃繘鍒剁粍 rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(sSoeData.wRelativeTime); rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(sSoeData.wRelativeTime); rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = LOBYTE(sSoeData.wFaultNo); @@ -10019,7 +10019,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) rtumsg.MsgData[sizeof(CLPDU_VARR)+1] = 0x81; //COT rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_AUTOSEND; - // 重新赋值 ASDU 公共地址 + // 閲嶆柊璧嬪 ASDU 鍏叡鍦板潃 rtumsg.MsgData[sizeof(CLPDU_VARR)+3] = sDevAddrParam.m_uchCommAddr; // FUN //rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = sSoeData.u8ProvFun; @@ -10034,7 +10034,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) len = ptrClpdu_varr->nLEN1 + 4; - // 发送时会重新计算 + // 鍙戦佹椂浼氶噸鏂拌绠 //rtumsg.MsgData[len++] = CalBuban103Lpc(rtumsg.MsgData+4, ptrClpdu_varr->nLEN1); rtumsg.MsgData[len++] = 0; rtumsg.MsgData[len++] = 0x16; @@ -10045,7 +10045,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) bACD = ProvHaveClassOne(commid, psDevAddrParam, pPortParam->m_bSendChangeDi); if(bACD == TRUE) { - // ??? 需要修改为实际信息 + // ??? 闇瑕佷慨鏀逛负瀹為檯淇℃伅 //bACD = FALSE; pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx]; if(SingleListHaveData(&pProvDevParam->m_sBaoHuData) > 0) @@ -10066,7 +10066,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) return; } - // 是否转发遥信变位,一般将其屏蔽 + // 鏄惁杞彂閬ヤ俊鍙樹綅,涓鑸皢鍏跺睆钄 if(pPortParam->m_bSendChangeDi == TRUE) { if(pPortParam->m_psBaoHu->DiChange == TRUE) @@ -10078,13 +10078,13 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) } } - // 如果在总查询过程中 + // 濡傛灉鍦ㄦ绘煡璇㈣繃绋嬩腑 if(pProvDevParam->m_bProvQuery == TRUE) { pDBUnit = &pProvDevParam->m_sYxInfo; for(i=pProvDevParam->m_iQueryPntNo; im_iPntNum; i++) { - // 如果是总召唤数据 + // 濡傛灉鏄诲彫鍞ゆ暟鎹 if(pDBUnit->m_psDataInfo[i].m_u8LoopData) { break; @@ -10108,9 +10108,9 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) ptrClpdu_varr = (CLPDU_VARR *)rtumsg.MsgData; ptrClpdu_varr->nSTART1 = 0x68; ptrClpdu_varr->nSTART2 = 0x68; - // 重新赋值链路的转发地址 + // 閲嶆柊璧嬪奸摼璺殑杞彂鍦板潃 ptrClpdu_varr->nADDR = pLinkParam->m_uchLinkAddr; - // 如果在总查询过程中 + // 濡傛灉鍦ㄦ绘煡璇㈣繃绋嬩腑 ptrClpdu_varr->nCONTROL |= 0x20; rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x01; @@ -10120,7 +10120,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) //COT //rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_AUTOSEND; rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_QUERY; - // 重新赋值 ASDU 公共地址 + // 閲嶆柊璧嬪 ASDU 鍏叡鍦板潃 rtumsg.MsgData[sizeof(CLPDU_VARR)+3] = (BYTE)pProvDevParam->m_iProvAddr; // FUN rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = pDBUnit->m_psDataInfo[i].m_u8ProvFun; @@ -10136,7 +10136,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) GetLocalTimeEx(&sCurTime); wValue = sCurTime.Sec*1000+sCurTime.mSec; - // 四个八位二进制组 + // 鍥涗釜鍏綅浜岃繘鍒剁粍 rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(wValue); rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(wValue); rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = sCurTime.Min & 0x3F; @@ -10147,7 +10147,7 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) ptrClpdu_varr->nLEN2 = (BYTE)len; len = ptrClpdu_varr->nLEN1 + 4; - // 发送时会重新计算 + // 鍙戦佹椂浼氶噸鏂拌绠 //rtumsg.MsgData[len++] = CalBuban103Lpc(rtumsg.MsgData+4, ptrClpdu_varr->nLEN1); rtumsg.MsgData[len++] = 0; rtumsg.MsgData[len++] = 0x16; @@ -10173,11 +10173,11 @@ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam) //***************************************************************************/ -//* 转发二类数据处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* u_char addr : 间隔设备地址 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂浜岀被鏁版嵁澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* u_char addr : 闂撮殧璁惧鍦板潃 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvPL2process(u_32 commid, DEVADDRPARAM *psDevAddrParam) { @@ -10192,7 +10192,7 @@ void ProvPL2process(u_32 commid, DEVADDRPARAM *psDevAddrParam) //psDevAddrParam->m_iDevIdx = pLinkParam->m_iDevIdx; /* - // 首先发送突发事件 + // 棣栧厛鍙戦佺獊鍙戜簨浠 if(ProvHaveSoeData(commid) > 0) { bACD = TRUE; @@ -10213,10 +10213,10 @@ void ProvPL2process(u_32 commid, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 数据转发长帧处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//*返回值:无 */ +//* 鏁版嵁杞彂闀垮抚澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void Provlongprocess(u_32 commid, RTUMSG *rtumsg) { @@ -10231,7 +10231,7 @@ void Provlongprocess(u_32 commid, RTUMSG *rtumsg) if((rtumsg->MsgData[4] & 0xc0) == 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d(CtrlByte=%02x)接收到的短帧数据不是主站命令!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d(CtrlByte=%02x)鎺ユ敹鍒扮殑鐭抚鏁版嵁涓嶆槸涓荤珯鍛戒护!!!\n", commid, rtumsg->MsgData[5], rtumsg->MsgData[4]); DebugPrint(szbuf); #endif @@ -10251,7 +10251,7 @@ void Provlongprocess(u_32 commid, RTUMSG *rtumsg) if(FindProtectDev(pPortParam, &DevAddrParam, FALSE) == FALSE) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 涓嶅尮閰!!!\n", commid, rtumsg->MsgData[5], rtumsg->MsgData[9]); DebugPrint(szbuf); #endif @@ -10280,56 +10280,56 @@ void Provlongprocess(u_32 commid, RTUMSG *rtumsg) } } - // 长帧数据的功能类型 + // 闀垮抚鏁版嵁鐨勫姛鑳界被鍨 switch(rtumsg->MsgData[6]) { - case C_SYN_TA_3: //时间同步 + case C_SYN_TA_3: //鏃堕棿鍚屾 ProvSYNprocess(commid, rtumsg); break; - case C_TGI_NA_3: //总查询(总召唤) + case C_TGI_NA_3: //鎬绘煡璇紙鎬诲彫鍞わ級 ProvTGIprocess(commid, rtumsg, &DevAddrParam); break; - case C_GD_NA_3: //通用分类数据 + case C_GD_NA_3: //閫氱敤鍒嗙被鏁版嵁 ProvGDprocess(commid, rtumsg, &DevAddrParam); //ProvSendCmdToPort(commid, rtumsg, &DevAddrParam); break; - case C_GRC_NA_3: //一般命令 + case C_GRC_NA_3: //涓鑸懡浠 ProvGRCprocess(commid, rtumsg, &DevAddrParam); break; - case C_GC_NA_3: //通用分类命令 + case C_GC_NA_3: //閫氱敤鍒嗙被鍛戒护 ProvGCprocess(commid, rtumsg, &DevAddrParam); //ProvSendCmdToPort(commid, rtumsg, &DevAddrParam); break; - case C_ODT_NA_3: //扰动数据传输的命令 + case C_ODT_NA_3: //鎵板姩鏁版嵁浼犺緭鐨勫懡浠 ProvODTprocess(commid, rtumsg, &DevAddrParam); break; - case C_ADT_NA_3: //扰动数据传输的认可 + case C_ADT_NA_3: //鎵板姩鏁版嵁浼犺緭鐨勮鍙 ProvADTprocess(commid, rtumsg, &DevAddrParam); break; - case C_DC_NA_3: //控制断路器命令 + case C_DC_NA_3: //鎺у埗鏂矾鍣ㄥ懡浠 ProvDCprocess(commid, rtumsg, &DevAddrParam); break; - case C_RC_NA_3: //升降命令 + case C_RC_NA_3: //鍗囬檷鍛戒护 ProvRCprocess(commid, rtumsg, &DevAddrParam); break; - case C_SE_NA_3: //设定命令 + case C_SE_NA_3: //璁惧畾鍛戒护 ProvSEprocess(commid, rtumsg, &DevAddrParam); break; - case C_CC_NA_3: //控制命令 + case C_CC_NA_3: //鎺у埗鍛戒护 ProvCCprocess(commid, rtumsg, &DevAddrParam); break; - case C_CI_NA_3: //电能脉冲计数召唤命令 + case C_CI_NA_3: //鐢佃兘鑴夊啿璁℃暟鍙敜鍛戒护 ProvCIprocess(commid, rtumsg, &DevAddrParam); break; @@ -10339,8 +10339,8 @@ void Provlongprocess(u_32 commid, RTUMSG *rtumsg) switch(rtumsg->MsgData[4] & 0x0f) { - case C_SD1_NA_3://传送数据(发送/确认帧) - // 非总查询命令 + case C_SD1_NA_3://浼犻佹暟鎹紙鍙戦/纭甯э級 + // 闈炴绘煡璇㈠懡浠 /* if(C_TGI_NA_3 == rtumsg->MsgData[6]) { @@ -10370,16 +10370,16 @@ void Provlongprocess(u_32 commid, RTUMSG *rtumsg) ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, FALSE); break; - case C_SD2_NA_3://传送数据(发送/无回答帧) + case C_SD2_NA_3://浼犻佹暟鎹紙鍙戦/鏃犲洖绛斿抚锛 break; } } //***************************************************************************/ -//* 转发时间同步处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//*返回值:无 */ +//* 杞彂鏃堕棿鍚屾澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvSYNprocess(u_32 commid, RTUMSG *rtumsg) { @@ -10410,14 +10410,14 @@ void ProvSYNprocess(u_32 commid, RTUMSG *rtumsg) // sTime.Min, sTime.Sec, sTime.mSec); //DebugPrint(szDbg); - // 如果时间同步原因,则进行对时 + // 濡傛灉鏃堕棿鍚屾鍘熷洜锛屽垯杩涜瀵规椂 if((pPortParam->m_psBaoHu->CheckTime == 1) && (rtumsg->MsgData[8] == M_CAUSE_CHECKTIME)) { SetLocalTimeEx(&sTime); } - // 广播地址 + // 骞挎挱鍦板潃 if(rtumsg->MsgData[5] == 0xff) { return; @@ -10453,11 +10453,11 @@ void ProvSYNprocess(u_32 commid, RTUMSG *rtumsg) } //***************************************************************************/ -//* 转发总查询(总召唤)处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鎬绘煡璇紙鎬诲彫鍞わ級澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvTGIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10475,21 +10475,21 @@ void ProvTGIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) pLinkParam->m_iDevIdx = psDevAddrParam->m_iDevIdx; pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx]; - // 总查询开始 + // 鎬绘煡璇㈠紑濮 pProvDevParam->m_bProvQuery = TRUE; pProvDevParam->m_iProvQueryStepWithASDU = M_MEVII_NA_3; - // 存在一类数据,请查询 + // 瀛樺湪涓绫绘暟鎹紝璇锋煡璇 //ProvMakeLinkCommand(commid, rtumsg->MsgData[9], M_CON_NA_3, TRUE); //ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, TRUE); } //***************************************************************************/ -//* 转发通用分类数据处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂閫氱敤鍒嗙被鏁版嵁澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvGDprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10510,11 +10510,11 @@ void ProvGDprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发一般命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂涓鑸懡浠ゅ鐞 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvGRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10526,11 +10526,11 @@ void ProvGRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发通用分类命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂閫氱敤鍒嗙被鍛戒护澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10540,7 +10540,7 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) BUBAN103LINKDEF *pLinkParam; BUBAN103PORTPARAM *pPortParam; - /*wen 2005.06.01 实际情况需要安这样来处理数据,直接转发到装置去 + /*wen 2005.06.01 瀹為檯鎯呭喌闇瑕佸畨杩欐牱鏉ュ鐞嗘暟鎹,鐩存帴杞彂鍒拌缃幓 if(rtumsg->MsgData[12] != RII_PROV_ID) { ProvSendCmdToPort(commid, rtumsg, psDevAddrParam); @@ -10562,13 +10562,13 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) pBaoHuDB = NULL; iGrpNum = GetBaohuDB(pProvDevParam->m_iRealCommid-1, pProvDevParam->m_iProvAddr, &pBaoHuDB); - // 传送原因(通用分类读数据) + // 浼犻佸師鍥(閫氱敤鍒嗙被璇绘暟鎹) if(rtumsg->MsgData[8] == C_CAUSE_READWITHVALIDDATA) { // INF switch(rtumsg->MsgData[11]) { - case C_INF_READGROUPTITLE: // 读组标题 + case C_INF_READGROUPTITLE: // 璇荤粍鏍囬 if((pBaoHuDB != NULL) && (iGrpNum > 0)) { ProvMakeTitleOfGroups(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum); @@ -10578,7 +10578,7 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) ProvSendCmdToPort(commid, rtumsg, psDevAddrParam); } break; - case C_INF_READGROUPALLITEMS: // 读一个组的全部条目的值或属性 + case C_INF_READGROUPALLITEMS: // 璇讳竴涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 if((pBaoHuDB != NULL) && (iGrpNum > 0)) { ProvMakeAttrOfAllItemInGroup(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum); @@ -10588,7 +10588,7 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) ProvSendCmdToPort(commid, rtumsg, psDevAddrParam); } break; - case C_INF_READDIROFSINGLEITEM: // 读单个条目的目录 + case C_INF_READDIROFSINGLEITEM: // 璇诲崟涓潯鐩殑鐩綍 if((pBaoHuDB != NULL) && (iGrpNum > 0)) { ProvMakeDirOfItem(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum); @@ -10598,7 +10598,7 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) ProvSendCmdToPort(commid, rtumsg, psDevAddrParam); } break; - case C_INF_READATTROFISNGLEITEM:// 读单个条目的值或属性 + case C_INF_READATTROFISNGLEITEM:// 璇诲崟涓潯鐩殑鍊兼垨灞炴 if((pBaoHuDB != NULL) && (iGrpNum > 0)) { ProvMakeAttrOfItem(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum); @@ -10608,7 +10608,7 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) ProvSendCmdToPort(commid, rtumsg, psDevAddrParam); } break; - case C_INF_QUERYGENERAL: // 对通用分类数据总查询 + case C_INF_QUERYGENERAL: // 瀵归氱敤鍒嗙被鏁版嵁鎬绘煡璇 ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_NV_NA_3, FALSE); break; default: @@ -10623,7 +10623,7 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) return; } - // wen test 可以添加保护数据返回做测试用 + // wen test 鍙互娣诲姞淇濇姢鏁版嵁杩斿洖鍋氭祴璇曠敤 if(RII_PROV_ID == rtumsg->MsgData[12]) { // test @@ -10664,11 +10664,11 @@ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发扰动数据传输的命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鎵板姩鏁版嵁浼犺緭鐨勫懡浠ゅ鐞 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvODTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10676,11 +10676,11 @@ void ProvODTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发扰动数据传输的认可处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鎵板姩鏁版嵁浼犺緭鐨勮鍙鐞 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvADTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10688,11 +10688,11 @@ void ProvADTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发控制断路器命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鎺у埗鏂矾鍣ㄥ懡浠ゅ鐞 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvDCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10700,11 +10700,11 @@ void ProvDCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发升降命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鍗囬檷鍛戒护澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10712,11 +10712,11 @@ void ProvRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发设定命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂璁惧畾鍛戒护澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvSEprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10724,11 +10724,11 @@ void ProvSEprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发控制命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鎺у埗鍛戒护澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvCCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10736,11 +10736,11 @@ void ProvCCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发电能脉冲计数召唤命令处理 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鐢佃兘鑴夊啿璁℃暟鍙敜鍛戒护澶勭悊 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ void ProvCIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) { @@ -10820,13 +10820,13 @@ void ProvCIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) tmp[len++] = (BYTE)((pntmsg.RawValue & 0xFF00) >> 8); tmp[len++] = (BYTE)((pntmsg.RawValue & 0xFF0000) >> 16); tmp[len++] = (BYTE)((pntmsg.RawValue & 0xFF000000) >> 24); - // IV/CA/CY/顺序号 + // IV/CA/CY/椤哄簭鍙 len++; } tmp[sizeof(CLPDU_VARR)+1] = (BYTE)(iPiNum); - // 返回码RII + // 杩斿洖鐮丷II tmp[len++] = rtumsg->MsgData[13]; ptrClpdu_varr->nLEN1 = len - 4; ptrClpdu_varr->nLEN2 = len - 4; @@ -10837,11 +10837,11 @@ void ProvCIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam) } //***************************************************************************/ -//* 转发全部组标题 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂鍏ㄩ儴缁勬爣棰 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ BOOL ProvMakeTitleOfGroups(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum) { @@ -10866,60 +10866,60 @@ BOOL ProvMakeTitleOfGroups(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevPara msg.MsgData[len++] = (BYTE)iNum; for(i=0; iMsgData[14]) @@ -10992,14 +10992,14 @@ BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\ bRetVal = TRUE; switch(rtumsg->MsgData[16]) { - case KOD_ACTUALVALUE: // 实际值 + case KOD_ACTUALVALUE: // 瀹為檯鍊 for(i=0; iMsgData[14];// 组 号 - msg.MsgData[msg.MsgLen++] = i+1; // 条目号 - msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // 实际值 - msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 浮点数 + // 缁撴瀯闀垮害 = 10 + msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// 缁 鍙 + msg.MsgData[msg.MsgLen++] = i+1; // 鏉$洰鍙 + msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // 瀹為檯鍊 + msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 娴偣鏁 msg.MsgData[msg.MsgLen++] = sizeof(float); msg.MsgData[msg.MsgLen++] = 1; pfValue = (float*)(&msg.MsgData[msg.MsgLen]); @@ -11029,14 +11029,14 @@ BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\ SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen); } break; - case KOD_RANGE: // 量程(最大值、最小值、步长) + case KOD_RANGE: // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) for(i=0; iMsgData[14];// 组 号 - msg.MsgData[msg.MsgLen++] = i+1; // 条目号 - msg.MsgData[msg.MsgLen++] = KOD_RANGE; // 量程(最大值、最小值、步长) - msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 浮点数 + // 缁撴瀯闀垮害 = 17 + msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// 缁 鍙 + msg.MsgData[msg.MsgLen++] = i+1; // 鏉$洰鍙 + msg.MsgData[msg.MsgLen++] = KOD_RANGE; // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) + msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 娴偣鏁 msg.MsgData[msg.MsgLen++] = sizeof(float); msg.MsgData[msg.MsgLen++] = 3; @@ -11079,13 +11079,13 @@ BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\ SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen); } break; - case KOD_DIMENSION: // 量 纲 + case KOD_DIMENSION: // 閲 绾 for(i=0; iMsgData[14];// 组 号 - msg.MsgData[msg.MsgLen++] = i+1; // 条目号 - msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 量 纲 + // 缁撴瀯闀垮害 = 6 + 閲忕翰闀垮害 + msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// 缁 鍙 + msg.MsgData[msg.MsgLen++] = i+1; // 鏉$洰鍙 + msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 閲 绾 msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII; iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[i].m_szUnit); msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen; @@ -11115,13 +11115,13 @@ BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\ SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen); } break; - case KOD_DESCRIPTION: // 描 述 + case KOD_DESCRIPTION: // 鎻 杩 for(i=0; iMsgData[14];// 组 号 - msg.MsgData[msg.MsgLen++] = i+1; // 条目号 - msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 量 纲 + // 缁撴瀯闀垮害 = 6 + 閲忕翰闀垮害 + msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// 缁 鍙 + msg.MsgData[msg.MsgLen++] = i+1; // 鏉$洰鍙 + msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 閲 绾 msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII; iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[i].m_szName); msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen; @@ -11160,11 +11160,11 @@ BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\ } //***************************************************************************/ -//* 转发一个条目的目录 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂涓涓潯鐩殑鐩綍 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum) { @@ -11173,7 +11173,7 @@ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, G i_32 iNameLen, iGroupNo, iItemNo; float *pfValue, fValue; - // 条目号 + // 鏉$洰鍙 iItemNo = rtumsg->MsgData[15]; for(iGroupNo=0; iGroupNoMsgData[15]; msg.MsgData[msg.MsgLen++] = 4; - msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // 实际值 - msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 浮点数 + msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // 瀹為檯鍊 + msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 娴偣鏁 msg.MsgData[msg.MsgLen++] = sizeof(float); msg.MsgData[msg.MsgLen++] = 1; pfValue = (float*)(&msg.MsgData[msg.MsgLen]); @@ -11229,8 +11229,8 @@ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, G *pfValue = fValue; msg.MsgLen += sizeof(float); - msg.MsgData[msg.MsgLen++] = KOD_RANGE; // 量程(最大值、最小值、步长) - msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 浮点数 + msg.MsgData[msg.MsgLen++] = KOD_RANGE; // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) + msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 娴偣鏁 msg.MsgData[msg.MsgLen++] = sizeof(float); msg.MsgData[msg.MsgLen++] = 3; @@ -11251,7 +11251,7 @@ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, G msg.MsgLen += 3*sizeof(float); - msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 量 纲 + msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 閲 绾 msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII; iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit); msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen; @@ -11259,7 +11259,7 @@ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, G memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit, iNameLen); msg.MsgLen += (WORD)iNameLen; - msg.MsgData[msg.MsgLen++] = KOD_DESCRIPTION; // 描 述 + msg.MsgData[msg.MsgLen++] = KOD_DESCRIPTION; // 鎻 杩 msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII; iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szName); msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen; @@ -11276,11 +11276,11 @@ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, G } //***************************************************************************/ -//* 转发一个条目的值或属性 */ -//*参数: u_32 commid : 厂站端口号 */ -//* RTUMSG *rtumsg : 接收到的数据信息 */ -//* i_32 iBuIdx : 保护装置(间隔)索引 */ -//*返回值:无 */ +//* 杞彂涓涓潯鐩殑鍊兼垨灞炴 */ +//*鍙傛暟: u_32 commid : 鍘傜珯绔彛鍙 */ +//* RTUMSG *rtumsg : 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 */ +//* i_32 iBuIdx : 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 */ +//*杩斿洖鍊:鏃 */ //***************************************************************************/ BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum) { @@ -11289,7 +11289,7 @@ BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, i_32 iNameLen, iGroupNo, iItemNo; float *pfValue, fValue; - // 条目号 + // 鏉$洰鍙 iItemNo = rtumsg->MsgData[15]; for(iGroupNo=0; iGroupNoMsgData[16]) { - case KOD_ACTUALVALUE: // 实际值 - msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // 实际值 - msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 浮点数 + case KOD_ACTUALVALUE: // 瀹為檯鍊 + msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // 瀹為檯鍊 + msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 娴偣鏁 msg.MsgData[msg.MsgLen++] = sizeof(float); msg.MsgData[msg.MsgLen++] = 1; pfValue = (float*)(&msg.MsgData[msg.MsgLen]); @@ -11347,9 +11347,9 @@ BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, msg.MsgLen += sizeof(float); break; - case KOD_RANGE: // 量程(最大值、最小值、步长) - msg.MsgData[msg.MsgLen++] = KOD_RANGE; // 量程(最大值、最小值、步长) - msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 浮点数 + case KOD_RANGE: // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) + msg.MsgData[msg.MsgLen++] = KOD_RANGE; // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) + msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // 娴偣鏁 msg.MsgData[msg.MsgLen++] = sizeof(float); msg.MsgData[msg.MsgLen++] = 3; @@ -11371,8 +11371,8 @@ BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, msg.MsgLen += 3*sizeof(float); break; - case KOD_DIMENSION: // 量 纲 - msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 量 纲 + case KOD_DIMENSION: // 閲 绾 + msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 閲 绾 msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII; iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit); msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen; @@ -11381,8 +11381,8 @@ BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, msg.MsgLen += (WORD)iNameLen; break; - case KOD_DESCRIPTION: // 描 述 - msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 量 纲 + case KOD_DESCRIPTION: // 鎻 杩 + msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // 閲 绾 msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII; iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szName); msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen; @@ -11467,16 +11467,16 @@ BOOL ProvSendChangedDi(u_32 commid, DEVADDRPARAM *psDevAddrParam) ptrClpdu_varr = (CLPDU_VARR *)rtumsg.MsgData; ptrClpdu_varr->nSTART1 = 0x68; ptrClpdu_varr->nSTART2 = 0x68; - // 重新赋值链路的转发地址 + // 閲嶆柊璧嬪奸摼璺殑杞彂鍦板潃 ptrClpdu_varr->nADDR = psDevAddrParam->m_uchLinkAddr; ptrClpdu_varr->nCONTROL &= 0xDF; - // wen 2005.06.10 遥信变位只精确到秒 + // wen 2005.06.10 閬ヤ俊鍙樹綅鍙簿纭埌绉 //wValue = sCurTime.Sec*1000 + sCurTime.mSec; wValue = sCurTime.Sec*1000; rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x01; - // 四个八位二进制组 + // 鍥涗釜鍏綅浜岃繘鍒剁粍 rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(wValue); rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(wValue); rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = sCurTime.Min & 0x3F; @@ -11490,7 +11490,7 @@ BOOL ProvSendChangedDi(u_32 commid, DEVADDRPARAM *psDevAddrParam) rtumsg.MsgData[sizeof(CLPDU_VARR)+1] = 0x81; //COT rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_AUTOSEND; - // 重新赋值 ASDU 公共地址 + // 閲嶆柊璧嬪 ASDU 鍏叡鍦板潃 rtumsg.MsgData[sizeof(CLPDU_VARR)+3] = (BYTE)pProvDevParam->m_iProvAddr; // FUN rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = pProvDevParam->m_sYxInfo.m_psDataInfo[j].m_u8ProvFun; @@ -11500,7 +11500,7 @@ BOOL ProvSendChangedDi(u_32 commid, DEVADDRPARAM *psDevAddrParam) rtumsg.MsgData[sizeof(CLPDU_VARR)+6] = pntmsg.Status+1; len = ptrClpdu_varr->nLEN1 + 4; - // 发送时会重新计算 + // 鍙戦佹椂浼氶噸鏂拌绠 //rtumsg.MsgData[len++] = CalBuban103Lpc(rtumsg.MsgData+4, ptrClpdu_varr->nLEN1); rtumsg.MsgData[len++] = 0; rtumsg.MsgData[len++] = 0x16; @@ -11525,19 +11525,19 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, iCount = 0; - // 数据类型 + // 鏁版嵁绫诲瀷 switch(bDataFormat) { - case 0:// 模拟量 - // pbSourData[0] // 数据源长度 + case 0:// 妯℃嫙閲 + // pbSourData[0] // 鏁版嵁婧愰暱搴 fValue = *(float*)(pbSourData+1); - // 数据长度 + // 鏁版嵁闀垮害 pbDestBuf[iCount++] = (BYTE)uDataLen; pbDestBuf[iCount++] = 1; - // 数据长度(103中无用) + // 鏁版嵁闀垮害(103涓棤鐢) //rtumsg->MsgData[uOffset++]; //ptrfValueSour = (float *)&rtumsg->MsgData[uOffset]; - if(uDataType == DATAID_UI)// 无符号整数 + if(uDataType == DATAID_UI)// 鏃犵鍙锋暣鏁 { if(uDataLen == 1) { @@ -11556,7 +11556,7 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, SequenceHostToRtu((char *)ptriValue, sizeof(i_32)); } } - // wen 2005.04.05 北京四方扩展数据类型 + // wen 2005.04.05 鍖椾含鍥涙柟鎵╁睍鏁版嵁绫诲瀷 //else if(uDataType == DATAID_INT) else if((DATAID_INT == uDataType) || ( DATAID_EXDATA_0X24 == uDataType)) { @@ -11577,38 +11577,38 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, SequenceHostToRtu((char *)ptriValue, sizeof(i_32)); } } - else if(uDataType == DATAID_UFLOAT)// 无符号浮点数 + else if(uDataType == DATAID_UFLOAT)// 鏃犵鍙锋诞鐐规暟 { ptrfValue = (float *)&pbDestBuf[iCount]; *ptrfValue = (float)fabs(fValue); SequenceHostToRtu((char *)ptrfValue, sizeof(float)); } - else if(uDataType == DATAID_FLOAT)// 浮点数 + else if(uDataType == DATAID_FLOAT)// 娴偣鏁 { ptrfValue = (float *)&pbDestBuf[iCount]; *ptrfValue = fValue; SequenceHostToRtu((char *)ptrfValue, sizeof(float)); } - else if(uDataType == DATAID_754SHORT)// R32.23 IEEE 标准754短实数 + else if(uDataType == DATAID_754SHORT)// R32.23 IEEE 鏍囧噯754鐭疄鏁 { ptrfValue = (float *)&pbDestBuf[iCount]; *ptrfValue = fValue; SequenceHostToRtu((char *)ptrfValue, sizeof(float)); } - else if(uDataType == DATAID_754REAL)// R64.53 IEEE 标准754实数 + else if(uDataType == DATAID_754REAL)// R64.53 IEEE 鏍囧噯754瀹炴暟 { ptrdbValue = (double *)&pbDestBuf[iCount]; *ptrdbValue = fValue; SequenceHostToRtu((char *)ptrdbValue, sizeof(double)); } - else if(uDataType == DATAID_13BITS) // 带品质描述的被测值(13BITS) + else if(uDataType == DATAID_13BITS) // 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) { ptri16Value = (short *)&pbDestBuf[iCount]; *ptri16Value = ((short)(fValue)) & 0x1fff; SequenceHostToRtu((char *)ptri16Value, sizeof(short)); } - // wen 2004.07.26 修改该类型数据的处理 - else if(uDataType == DATAID_BSTRING) // 8位2进制码 + // wen 2004.07.26 淇敼璇ョ被鍨嬫暟鎹殑澶勭悊 + else if(uDataType == DATAID_BSTRING) // 8浣2杩涘埗鐮 { uDataLen = (uDataLen + 7) / 8; for(k=0; k<(int)uDataLen; k++); @@ -11620,13 +11620,13 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, iCount += uDataLen; break; - case 1:// 开关量 - // pbSourData[0] // 数据源长度 + case 1:// 寮鍏抽噺 + // pbSourData[0] // 鏁版嵁婧愰暱搴 fValue = *(float*)(pbSourData+1); - // 数据长度 + // 鏁版嵁闀垮害 pbDestBuf[iCount++] = (BYTE)uDataLen; pbDestBuf[iCount++] = 1; - if(uDataType == DATAID_UI)// 无符号整数 + if(uDataType == DATAID_UI)// 鏃犵鍙锋暣鏁 { if(uDataLen == 1) { @@ -11664,38 +11664,38 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, SequenceHostToRtu((char *)ptriValue, sizeof(i_32)); } } - else if(uDataType == DATAID_UFLOAT)// 无符号浮点数 + else if(uDataType == DATAID_UFLOAT)// 鏃犵鍙锋诞鐐规暟 { ptrfValue = (float *)&pbDestBuf[iCount]; *ptrfValue = (float)fabs(fValue); SequenceHostToRtu((char *)ptrfValue, sizeof(float)); } - else if(uDataType == DATAID_FLOAT)// 浮点数 + else if(uDataType == DATAID_FLOAT)// 娴偣鏁 { ptrfValue = (float *)&pbDestBuf[iCount]; *ptrfValue = fValue; SequenceHostToRtu((char *)ptrfValue, sizeof(float)); } - else if(uDataType == DATAID_754SHORT)// R32.23 IEEE 标准754短实数 + else if(uDataType == DATAID_754SHORT)// R32.23 IEEE 鏍囧噯754鐭疄鏁 { ptrfValue = (float *)&pbDestBuf[iCount]; *ptrfValue = fValue; SequenceHostToRtu((char *)ptrfValue, sizeof(float)); } - else if(uDataType == DATAID_754REAL)// R64.53 IEEE 标准754实数 + else if(uDataType == DATAID_754REAL)// R64.53 IEEE 鏍囧噯754瀹炴暟 { ptrdbValue = (double *)&pbDestBuf[iCount]; *ptrdbValue = fValue; SequenceHostToRtu((char *)ptrdbValue, sizeof(double)); } - else if(uDataType == DATAID_13BITS) // 带品质描述的被测值(13BITS) + else if(uDataType == DATAID_13BITS) // 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) { ptri16Value = (short *)&pbDestBuf[iCount]; *ptri16Value = ((short)(fValue)) &0x1fff; SequenceHostToRtu((char *)ptri16Value, sizeof(short)); } - // wen 2004.07.26 修改该类型数据的处理 - else if(uDataType == DATAID_BSTRING) // 8位2进制码 + // wen 2004.07.26 淇敼璇ョ被鍨嬫暟鎹殑澶勭悊 + else if(uDataType == DATAID_BSTRING) // 8浣2杩涘埗鐮 { uDataLen = (uDataLen + 7) / 8; for(k=0; k<(int)uDataLen; k++); @@ -11704,21 +11704,21 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, fValue /= 256; } } - else if(uDataType == DATAID_DOUBLE)// 双点信息 + else if(uDataType == DATAID_DOUBLE)// 鍙岀偣淇℃伅 { pbDestBuf[iCount] = (BYTE)((u_32)(fabs(fValue)+1)); } - else if(uDataType == DATAID_SINGLE)// 单点信息 + else if(uDataType == DATAID_SINGLE)// 鍗曠偣淇℃伅 { pbDestBuf[iCount] = (BYTE)((u_32)fabs(fValue)); } iCount += uDataLen; break; - case 3:// 字符串 + case 3:// 瀛楃涓 pbDestBuf[iCount++] = pbSourData[0]; pbDestBuf[iCount++] = 1; - if(uDataType == DATAID_OS8ASCII)// 8位ASCII + if(uDataType == DATAID_OS8ASCII)// 8浣岮SCII { memcpy((void *)(pbDestBuf+iCount), (void *)(pbSourData+1), pbSourData[0]); iCount += pbSourData[0]; @@ -11729,7 +11729,7 @@ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, return iCount; } -// 部颁103和斯凯达内部规约间的格式转换 +// 閮ㄩ103鍜屾柉鍑揪鍐呴儴瑙勭害闂寸殑鏍煎紡杞崲 void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { u_32 uInterAction, uOffset, uDataLen, uDataType; @@ -11757,17 +11757,17 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) return; } iProvAddr = ptrProHead->uAddr; - sprintf(szbuf, "地址=%d ", ptrProHead->uAddr); + sprintf(szbuf, "鍦板潃=%d ", ptrProHead->uAddr); DebugPrint(szbuf); if(FALSE == FindProtectDevFromProvAddr(pPortParam, &sAddrParam, iProvAddr)) { - sprintf(szbuf, "地址错误 "); + sprintf(szbuf, "鍦板潃閿欒 "); DebugPrint(szbuf); return; } - // wen 2005.06.06 增加数据返回时的上下文存储 + // wen 2005.06.06 澧炲姞鏁版嵁杩斿洖鏃剁殑涓婁笅鏂囧瓨鍌 pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuCommid = rtumsg->PortIdx; memcpy((void *)&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sRealAddrParam, (void *)&sAddrParam, sizeof(DEVADDRPARAM)); @@ -11779,7 +11779,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) pLinkParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx]; pDevParam = &pLinkParam->m_psDev[sAddrParam.m_iDevIdx]; - // CPU号与分组号一一对应 + // CPU鍙蜂笌鍒嗙粍鍙蜂竴涓瀵瑰簲 if((ptrProHead->cCPUNo != (char)0xFF) && (ptrProHead->cCPUNo != 0)) { pDevParam->m_sDevParam.m_u8CPUNo = ptrProHead->cCPUNo; @@ -11791,7 +11791,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) iCPUNo = 1; - // 保护指令记忆 + // 淇濇姢鎸囦护璁板繂 if(ptrProHead->uAddr != 0xff) { pDevParam->m_sDevParam.m_u32FuncCode = ptrProHead->uFuncCode; @@ -11800,13 +11800,13 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) memcpy((void *)&sCmdParam.m_sDevAddr, (void *)&sAddrParam, sizeof(DEVADDRPARAM)); switch(ptrProHead->uFuncCode) { - case hREADFIX:// 读取定值(只存在一个保护定值组的情况) + case hREADFIX:// 璇诲彇瀹氬(鍙瓨鍦ㄤ竴涓繚鎶ゅ畾鍊肩粍鐨勬儏鍐) uInterAction = hREADINGDATA; for(i=0; im_sDevParam.m_iCfgGroupNum; i++) { if(PROTECT_FIX_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType) { - sprintf(szbuf, "第%d组CPU号= %d!!!\n", i+1, + sprintf(szbuf, "绗%d缁凜PU鍙= %d!!!\n", i+1, pDevParam->m_sDevParam.m_u8CPUNo); DebugPrint(szbuf); if(pDevParam->m_sDevParam.m_u8CPUNo == iCPUNo) @@ -11824,7 +11824,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { bIsValidCmd = FALSE; - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d不存在保护定值!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d涓嶅瓨鍦ㄤ繚鎶ゅ畾鍊!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr); DebugPrint(szbuf); break; @@ -11838,11 +11838,11 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) sCmdParam.m_uchRII = RII_PROV_ID; MakeGenIdentCommand_CAsdu21(commid, &sCmdParam, &sGenDataGroup, 1); break; - case hREADFIXNO:// 读取定值区号 + case hREADFIXNO:// 璇诲彇瀹氬煎尯鍙 uInterAction = hREADINGDATA; bIsValidCmd = FALSE; break; - case hREADPAI:// 读取保护模拟量 + case hREADPAI:// 璇诲彇淇濇姢妯℃嫙閲 uInterAction = hREADINGDATA; for(i=0; im_sDevParam.m_iCfgGroupNum; i++) { @@ -11855,7 +11855,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { bIsValidCmd = FALSE; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d不存在保护模拟量!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d涓嶅瓨鍦ㄤ繚鎶ゆā鎷熼噺!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -11870,7 +11870,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) sCmdParam.m_uchRII = RII_PROV_ID; MakeGenIdentCommand_CAsdu21(commid, &sCmdParam, &sGenDataGroup, 1); break; - case hREADPDI:// 读取保护开关量 + case hREADPDI:// 璇诲彇淇濇姢寮鍏抽噺 uInterAction = hREADINGDATA; for(i=0; im_sDevParam.m_iCfgGroupNum; i++) { @@ -11883,7 +11883,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { bIsValidCmd = FALSE; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d不存在保护开关量!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d涓嶅瓨鍦ㄤ繚鎶ゅ紑鍏抽噺!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -11898,18 +11898,18 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) sCmdParam.m_uchRII = RII_PROV_ID; MakeGenIdentCommand_CAsdu21(commid, &sCmdParam, &sGenDataGroup, 1); break; - case hREADPWAVE:// 读取保护波形数据 - case hQUERYFAULT:// 读取指定故障报告 + case hREADPWAVE:// 璇诲彇淇濇姢娉㈠舰鏁版嵁 + case hQUERYFAULT:// 璇诲彇鎸囧畾鏁呴殰鎶ュ憡 bFaultNo = rtumsg->MsgData[sizeof(PROTECTCONTENTHEAD)]; uInterAction = hREADINGDATA; bIsValidCmd = FALSE; break; - case hQUERYSELFCHECK:// 读取指定的自检报告 + case hQUERYSELFCHECK:// 璇诲彇鎸囧畾鐨勮嚜妫鎶ュ憡 bFaultNo = rtumsg->MsgData[sizeof(PROTECTCONTENTHEAD)]; uInterAction = hREADINGDATA; bIsValidCmd = FALSE; break; - case hWRITEALLFIX:// 修改保护定值 + case hWRITEALLFIX:// 淇敼淇濇姢瀹氬 uInterAction = hREADINGDATA; //uOffset += 12; pDevParam->m_u32CallCnt = pLinkParam->m_u32TimeOutConst; @@ -11932,7 +11932,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { bIsValidCmd = FALSE; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d不存在保护定值!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d涓嶅瓨鍦ㄤ繚鎶ゅ畾鍊!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -11940,7 +11940,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) } iGroupNo = pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo; iStartNo = *((int *)&PrtMsg.MsgData[uOffset]); - sprintf(szbuf, "修改定值组帧开始 组号=%d, 起始点号=%d, uoffset=%d 接收数据:\n",iGroupNo, iStartNo, uOffset); + sprintf(szbuf, "淇敼瀹氬肩粍甯у紑濮 缁勫彿=%d, 璧峰鐐瑰彿=%d, uoffset=%d 鎺ユ敹鏁版嵁:\n",iGroupNo, iStartNo, uOffset); DebugPrint(szbuf); for(k=0; kMsgLen; k+=6) { @@ -11948,14 +11948,14 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) DebugPrint(szbuf); } - // wen 2004.02.02 当前数据处理时的起始点号 + // wen 2004.02.02 褰撳墠鏁版嵁澶勭悊鏃剁殑璧峰鐐瑰彿 pDevParam->m_sDevParam.m_saGroupDef[i].m_u32CurPntNo = 1; if(pDevParam->m_sDevParam.m_saGroupDef[i].m_bInit == FALSE) { bIsValidCmd = FALSE; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 组号%d 未先读取定值!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 缁勫彿%d 鏈厛璇诲彇瀹氬!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr, iGroupNo); DebugPrint(szbuf); #endif @@ -11967,7 +11967,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) for(j=0, iFixDataNGD=0; (uOffsetMsgLen) && (jm_sDevParam.m_saGroupDef[i].m_iPntNum); j++, iFixDataNGD++) { - // wen 2004.02.02 如果一帧数据无法全部完成写定值工作,则分成多帧来完成 + // wen 2004.02.02 濡傛灉涓甯ф暟鎹棤娉曞叏閮ㄥ畬鎴愬啓瀹氬煎伐浣滐紝鍒欏垎鎴愬甯ф潵瀹屾垚 if(offset >= 200) { sCmdParam.m_uchInf = C_INF_WRITEITEMWITHACK; @@ -11977,10 +11977,10 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) iFixDataNGD = 0; } - // wen 2004.01.07 每一个数据都有索引 + // wen 2004.01.07 姣忎竴涓暟鎹兘鏈夌储寮 bSourData[offset++] = (BYTE)iGroupNo; - // wen 2004.02.02 用存储的条目号 + // wen 2004.02.02 鐢ㄥ瓨鍌ㄧ殑鏉$洰鍙 //bSourData[offset++] = (BYTE)(iStartNo-1+j); bSourData[offset++] = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8GIN[iStartNo-1+j]; bSourData[offset++] = 1; @@ -11988,10 +11988,10 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) uDataType = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataType[iStartNo-1+j]; uDataLen = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataLen[iStartNo-1+j]; bSourData[offset++] = (BYTE)uDataType; - // 不能处理字符串 + // 涓嶈兘澶勭悊瀛楃涓 offset += PackOneValueIntoPackage(bSourData+offset, sizeof(bSourData)-offset, PrtMsg.MsgData[uOffset], uDataType, uDataLen, &PrtMsg.MsgData[uOffset+1]); - sprintf(szbuf, "第%d点定值的组号=%d,条目号=%d,数据类型=%d,数据宽度=%d,值=%d; %02X %02X %02X %02X",iStartNo-1+j,\ + sprintf(szbuf, "绗%d鐐瑰畾鍊肩殑缁勫彿=%d,鏉$洰鍙=%d,鏁版嵁绫诲瀷=%d,鏁版嵁瀹藉害=%d,鍊=%d; %02X %02X %02X %02X",iStartNo-1+j,\ iGroupNo,pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8GIN[iStartNo-1+j],\ uDataType, uDataLen, *(float*)(&PrtMsg.MsgData[uOffset+1+1]), PrtMsg.MsgData[uOffset+2], PrtMsg.MsgData[uOffset+3], PrtMsg.MsgData[uOffset+4], PrtMsg.MsgData[uOffset+5]); DebugPrint(szbuf); @@ -12005,12 +12005,12 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) MakeGenIdentData_CAsdu10(commid, &sCmdParam, bSourData, (BYTE)iFixDataNGD); } break; - case hWRITEFIXNO:// 修改保护定值区 + case hWRITEFIXNO:// 淇敼淇濇姢瀹氬煎尯 uInterAction = hREADINGDATA; pDevParam->m_u32CallCnt = pLinkParam->m_u32TimeOutConst; bIsValidCmd = FALSE; break; - case hRESETPROTECT:// 保护信号复归 + case hRESETPROTECT:// 淇濇姢淇″彿澶嶅綊 //Param.bCmdIdx = APPLY_REVERT; uInterAction = hREADDATAEND; if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0) @@ -12038,25 +12038,25 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) bSourData[9] = 1; Buban103YkYtProcess(commid, bSourData, 10); break; - case hCHECKTIME:// 单个装置对时 + case hCHECKTIME:// 鍗曚釜瑁呯疆瀵规椂 //Param.bCmdIdx = CHECK_TIME; uInterAction = hREADINGDATA; MakeTimeSyn_CAsdu6(commid, &sCmdParam); break; - case hBROADCASTCHECKTIME:// 保护装置广播对时 + case hBROADCASTCHECKTIME:// 淇濇姢瑁呯疆骞挎挱瀵规椂 uInterAction = hREADDATAEND; sCmdParam.m_sDevAddr.m_uchLinkAddr = 0xFF; MakeTimeSyn_CAsdu6(commid, &sCmdParam); break; - case hWRITEFIXACK: // 修改保护定值确认 + case hWRITEFIXACK: // 淇敼淇濇姢瀹氬肩‘璁 sCmdParam.m_uchInf = C_INF_WRITEITEMWITHEXEC; sCmdParam.m_uchRII = RII_PROV_ID; MakeGenIdentData_CAsdu10(commid, &sCmdParam, NULL, 0); uInterAction = hREADDATAEND; break; - case hWRITEFIXNAK: // 修改保护定值不确认 + case hWRITEFIXNAK: // 淇敼淇濇姢瀹氬间笉纭 sCmdParam.m_uchInf = C_INF_STOPWRITEITEM; sCmdParam.m_uchRII = RII_PROV_ID; MakeGenIdentData_CAsdu10(commid, &sCmdParam, NULL, 0); @@ -12064,7 +12064,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) break; // wen 2004.09.29 - case hWRITESPECIALFIX:// 修改指定的保护定值 + case hWRITESPECIALFIX:// 淇敼鎸囧畾鐨勪繚鎶ゅ畾鍊 uInterAction = hREADINGDATA; pDevParam->m_u32CallCnt = pLinkParam->m_u32TimeOutConst; @@ -12086,7 +12086,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { bIsValidCmd = FALSE; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d不存在保护定值!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d涓嶅瓨鍦ㄤ繚鎶ゅ畾鍊!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -12101,7 +12101,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) { bIsValidCmd = FALSE; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 组号%d 未先读取定值!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 缁勫彿%d 鏈厛璇诲彇瀹氬!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr, iGroupNo); DebugPrint(szbuf); #endif @@ -12111,10 +12111,10 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) uOffset += 4; offset = 0; - // wen 2004.01.07 每一个数据都有索引 + // wen 2004.01.07 姣忎竴涓暟鎹兘鏈夌储寮 bSourData[offset++] = (BYTE)iGroupNo; - // wen 2004.02.02 用存储的条目号 + // wen 2004.02.02 鐢ㄥ瓨鍌ㄧ殑鏉$洰鍙 bSourData[offset++] = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8GIN[iStartNo-1]; bSourData[offset++] = 1; @@ -12122,7 +12122,7 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) uDataLen = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataLen[iStartNo-1]; bSourData[offset++] = (BYTE)uDataType; - // 不能处理字符串 + // 涓嶈兘澶勭悊瀛楃涓 offset += PackOneValueIntoPackage(bSourData+offset, sizeof(bSourData)-offset, PrtMsg.MsgData[uOffset], uDataType, uDataLen, &PrtMsg.MsgData[uOffset+1]); @@ -12137,11 +12137,11 @@ void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg) break; } - // 保护地址不合法或者指令不合法时或者查询指令错误, 直接退出 + // 淇濇姢鍦板潃涓嶅悎娉曟垨鑰呮寚浠や笉鍚堟硶鏃舵垨鑰呮煡璇㈡寚浠ら敊璇, 鐩存帴閫鍑 if( !bIsValidCmd ) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d指令不可识别!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d鎸囦护涓嶅彲璇嗗埆!!!\n", commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -12190,7 +12190,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if(pGroupParam->m_iPntNum <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据空间为零!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁绌洪棿涓洪浂!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12200,7 +12200,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if((iOffset+3) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12214,24 +12214,24 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara memset((void *)&msg, 0, sizeof(PROTECTMSG)); msg.MsgType = fPFV_PROTECT_BYPASS_ACK; msg.PortNumber = commid; - // 操作用户 + // 鎿嶄綔鐢ㄦ埛 ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData; ptrProHead->ummid = 0xFFFFFFFF; ptrProHead->uAddr = pDevParam->m_sDevParam.m_iProvAddr; - // 定值区号(不需要时,填写0xFF) + // 瀹氬煎尯鍙(涓嶉渶瑕佹椂锛屽~鍐0xFF) ptrProHead->cFixNo = (char)pDevParam->m_sDevParam.m_u8FixNo; - // C P U 号(不需要时,填写0xFF) + // C P U 鍙(涓嶉渶瑕佹椂锛屽~鍐0xFF) ptrProHead->cCPUNo = (char)pDevParam->m_sDevParam.m_u8CPUNo; - // 操作类型 + // 鎿嶄綔绫诲瀷 ptrProHead->uFuncCode = hPAIDATA; - // 扩展保留 + // 鎵╁睍淇濈暀 offset = sizeof(PROTECTCONTENTHEAD); - // 实际条目类型 + // 瀹為檯鏉$洰绫诲瀷 msg.MsgData[offset++] = u8KOD; - // 起始序号 + // 璧峰搴忓彿 puStartNo = (u_32*)&msg.MsgData[offset]; offset += sizeof(u_32); @@ -12242,28 +12242,28 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 组 号 - // 条目号 + // 缁 鍙 + // 鏉$洰鍙 u8ItemNo = rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -12292,7 +12292,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if(j >= pGroupParam->m_iPntNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,不匹配的GIN=%d!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屼笉鍖归厤鐨凣IN=%d!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12308,7 +12308,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if(u8KOD != rtumsg->MsgData[iOffset]) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,数据KOD=%d与要求的KOD=%d不符!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屾暟鎹甂OD=%d涓庤姹傜殑KOD=%d涓嶇!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD); DebugPrint(szbuf); #endif @@ -12324,7 +12324,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara iOffset += 2; for(j=0; j<(int)u8DataNum; j++) { - // wen 2004.02.01 如果条目号为0,则该条目为该组条目数量,不上送 + // wen 2004.02.01 濡傛灉鏉$洰鍙蜂负0锛屽垯璇ユ潯鐩负璇ョ粍鏉$洰鏁伴噺锛屼笉涓婇 if((u8ItemNo == 0) && (j == 0)) { iOffset += u8DataLen; @@ -12352,7 +12352,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara switch(sValue.m_iDataType) { - case DT_UINT:// 无符号整型数 + case DT_UINT:// 鏃犵鍙锋暣鍨嬫暟 fValue = sValue.m_unValue.m_uValue; break; case DT_INT: @@ -12370,7 +12370,7 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara case DT_BINARY: fValue = sValue.m_unValue.m_dwValue; break; - case DT_NO:// 无数据 + case DT_NO:// 鏃犳暟鎹 default: fValue = -1; break; @@ -12477,7 +12477,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if(pGroupParam->m_iPntNum <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据空间为零!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁绌洪棿涓洪浂!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12487,7 +12487,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if((iOffset+3) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12501,24 +12501,24 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara memset((void *)&msg, 0, sizeof(PROTECTMSG)); msg.MsgType = fPFV_PROTECT_BYPASS_ACK; msg.PortNumber = commid; - // 操作用户 + // 鎿嶄綔鐢ㄦ埛 ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData; ptrProHead->ummid = 0xFFFFFFFF; ptrProHead->uAddr = pDevParam->m_sDevParam.m_iProvAddr; - // 定值区号(不需要时,填写0xFF) + // 瀹氬煎尯鍙(涓嶉渶瑕佹椂锛屽~鍐0xFF) ptrProHead->cFixNo = (char)pDevParam->m_sDevParam.m_u8FixNo; - // C P U 号(不需要时,填写0xFF) + // C P U 鍙(涓嶉渶瑕佹椂锛屽~鍐0xFF) ptrProHead->cCPUNo = (char)pDevParam->m_sDevParam.m_u8CPUNo; - // 操作类型 + // 鎿嶄綔绫诲瀷 ptrProHead->uFuncCode = hPDIDATA; - // 扩展保留 + // 鎵╁睍淇濈暀 offset = sizeof(PROTECTCONTENTHEAD); - // 实际条目类型 + // 瀹為檯鏉$洰绫诲瀷 msg.MsgData[offset++] = u8KOD; - // 起始序号 + // 璧峰搴忓彿 puStartNo = (u_32*)&msg.MsgData[offset]; offset += sizeof(u_32); @@ -12529,28 +12529,28 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 组 号 - // 条目号 + // 缁 鍙 + // 鏉$洰鍙 u8ItemNo = rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -12579,7 +12579,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if(j >= pGroupParam->m_iPntNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,不匹配的GIN=%d!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屼笉鍖归厤鐨凣IN=%d!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12595,7 +12595,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara if(u8KOD != rtumsg->MsgData[iOffset]) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,数据KOD=%d与要求的KOD=%d不符!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屾暟鎹甂OD=%d涓庤姹傜殑KOD=%d涓嶇!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD); DebugPrint(szbuf); #endif @@ -12611,7 +12611,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara iOffset += 2; for(j=0; j<(int)u8DataNum; j++) { - // wen 2004.02.01 如果条目号为0,则该条目为该组条目数量,不上送 + // wen 2004.02.01 濡傛灉鏉$洰鍙蜂负0锛屽垯璇ユ潯鐩负璇ョ粍鏉$洰鏁伴噺锛屼笉涓婇 if((u8ItemNo == 0) && (j == 0)) { iOffset += u8DataLen; @@ -12639,7 +12639,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara switch(sValue.m_iDataType) { - case DT_UINT:// 无符号整型数 + case DT_UINT:// 鏃犵鍙锋暣鍨嬫暟 fValue = sValue.m_unValue.m_uValue; break; case DT_INT: @@ -12657,7 +12657,7 @@ void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara case DT_BINARY: fValue = sValue.m_unValue.m_dwValue; break; - case DT_NO:// 无数据 + case DT_NO:// 鏃犳暟鎹 default: fValue = -1; break; @@ -12787,7 +12787,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar if(pGroupParam->m_iPntNum <= 0) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据空间为零!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁绌洪棿涓洪浂!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12797,7 +12797,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar if((iOffset+3) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时, 数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃, 鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12810,51 +12810,51 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar if((0xf9 == u8INF) && (rtumsg->MsgData[8] == 0x29)) { - sprintf(szbuf, "Buban103GDprocessWithPFIXToScada写定值确认失败"); + sprintf(szbuf, "Buban103GDprocessWithPFIXToScada鍐欏畾鍊肩‘璁ゅけ璐"); DebugPrint(szbuf); } if((0xf9 == u8INF) && (rtumsg->MsgData[8] == 0x2c)) { - sprintf(szbuf, "Buban103GDprocessWithPFIXToScada写定值确认成功"); + sprintf(szbuf, "Buban103GDprocessWithPFIXToScada鍐欏畾鍊肩‘璁ゆ垚鍔"); DebugPrint(szbuf); } if((0xfa == u8INF) && (rtumsg->MsgData[8] == 0x28)) { - sprintf(szbuf, "Buban103GDprocessWithPFIXToScada写定值执行成功"); + sprintf(szbuf, "Buban103GDprocessWithPFIXToScada鍐欏畾鍊兼墽琛屾垚鍔"); DebugPrint(szbuf); } if((0xfa == u8INF) && (rtumsg->MsgData[8] == 0x29)) { - sprintf(szbuf, "Buban103GDprocessWithPFIXToScada写定值执行失败"); + sprintf(szbuf, "Buban103GDprocessWithPFIXToScada鍐欏畾鍊兼墽琛屽け璐"); DebugPrint(szbuf); } if((0xfb == u8INF) && (rtumsg->MsgData[8] == 0x28)) { - sprintf(szbuf, "Buban103GDprocessWithPFIXToScada写定值终止执行成功"); + sprintf(szbuf, "Buban103GDprocessWithPFIXToScada鍐欏畾鍊肩粓姝㈡墽琛屾垚鍔"); DebugPrint(szbuf); } memset((void *)&msg, 0, sizeof(PROTECTMSG)); msg.MsgType = fPFV_PROTECT_BYPASS_ACK; msg.PortNumber = commid; - // 操作用户 + // 鎿嶄綔鐢ㄦ埛 ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData; ptrProHead->ummid = 0xFFFFFFFF; ptrProHead->uAddr = pDevParam->m_sDevParam.m_iProvAddr; - // 定值区号(不需要时,填写0xFF) + // 瀹氬煎尯鍙(涓嶉渶瑕佹椂锛屽~鍐0xFF) ptrProHead->cFixNo = (char)pDevParam->m_sDevParam.m_u8FixNo; - // C P U 号(不需要时,填写0xFF) + // C P U 鍙(涓嶉渶瑕佹椂锛屽~鍐0xFF) ptrProHead->cCPUNo = (char)pDevParam->m_sDevParam.m_u8CPUNo; - // 操作类型 + // 鎿嶄綔绫诲瀷 ptrProHead->uFuncCode = hFIXDATA; - // 扩展保留 + // 鎵╁睍淇濈暀 offset = sizeof(PROTECTCONTENTHEAD); - // 实际条目类型 + // 瀹為檯鏉$洰绫诲瀷 msg.MsgData[offset++] = u8KOD; - // 起始序号 + // 璧峰搴忓彿 puStartNo = (u_32*)&msg.MsgData[offset]; offset += sizeof(u_32); @@ -12865,28 +12865,28 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar if((iOffset+6) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 数据长度(单个数据长*数量) + // 鏁版嵁闀垮害(鍗曚釜鏁版嵁闀*鏁伴噺) u8DataNum = rtumsg->MsgData[iOffset+5]; u8DataLen = rtumsg->MsgData[iOffset+4]; if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)处理时,数据帧长度不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)澶勭悊鏃讹紝鏁版嵁甯ч暱搴︿笉鍖归厤!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif break; } - // 组 号 - // 条目号 + // 缁 鍙 + // 鏉$洰鍙 u8ItemNo = rtumsg->MsgData[iOffset+1]; iOffset += 2; @@ -12915,7 +12915,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar if(j >= pGroupParam->m_iPntNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,不匹配的GIN=%d!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屼笉鍖归厤鐨凣IN=%d!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo); DebugPrint(szbuf); #endif @@ -12931,7 +12931,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar if(u8KOD != rtumsg->MsgData[iOffset]) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10(Group=%d)写确认处理时,数据KOD=%d与要求的KOD=%d不符!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10(Group=%d)鍐欑‘璁ゅ鐞嗘椂锛屾暟鎹甂OD=%d涓庤姹傜殑KOD=%d涓嶇!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD); DebugPrint(szbuf); #endif @@ -12947,7 +12947,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar iOffset += 2; for(j=0; j<(int)u8DataNum; j++) { - // wen 2004.02.01 如果条目号为0,则该条目为该组条目数量,不上送 + // wen 2004.02.01 濡傛灉鏉$洰鍙蜂负0锛屽垯璇ユ潯鐩负璇ョ粍鏉$洰鏁伴噺锛屼笉涓婇 if((u8ItemNo == 0) && (j == 0)) { iOffset += u8DataLen; @@ -12975,7 +12975,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar switch(sValue.m_iDataType) { - case DT_UINT:// 无符号整型数 + case DT_UINT:// 鏃犵鍙锋暣鍨嬫暟 fValue = sValue.m_unValue.m_uValue; break; case DT_INT: @@ -12993,7 +12993,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar case DT_BINARY: fValue = sValue.m_unValue.m_dwValue; break; - case DT_NO:// 无数据 + case DT_NO:// 鏃犳暟鎹 default: fValue = -1; break; @@ -13022,7 +13022,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar msg.MsgData[offset++] = DATATYPE_DI; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - //遥信量也是以float的形式上送的 + //閬ヤ俊閲忎篃鏄互float鐨勫舰寮忎笂閫佺殑 //if(fValue > 0) //{ // msg.MsgData[offset++] = TRUE; @@ -13048,7 +13048,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar } else { - // 南瑞装置的开关量以无符号整数送上来 + // 鍗楃憺瑁呯疆鐨勫紑鍏抽噺浠ユ棤绗﹀彿鏁存暟閫佷笂鏉 //msg.MsgData[offset++] = DATATYPE_AI; if(pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].iFixDataType == 2) msg.MsgData[offset++] = DATATYPE_DI; @@ -13073,7 +13073,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar { if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum) { - sprintf(szbuf, "当前处理点号m_u32CurPntNo=%d, 定值总数m_iPntNum= %d", pGroupParam->m_u32CurPntNo, pGroupParam->m_iPntNum); + sprintf(szbuf, "褰撳墠澶勭悊鐐瑰彿m_u32CurPntNo=%d, 瀹氬兼绘暟m_iPntNum= %d", pGroupParam->m_u32CurPntNo, pGroupParam->m_iPntNum); DebugPrint(szbuf); pGroupParam->m_bInit = TRUE; pGroupParam->m_u32CurPntNo = 1; @@ -13098,7 +13098,7 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar } ptrProHead = (pPROTECTCONTENTHEAD)&sendmsg.MsgData[sizeof(PROTECTMSGHEAD)]; - // wen 2004.01.06 写定值确认 + // wen 2004.01.06 鍐欏畾鍊肩‘璁 if((M_CAUSE_WRITEACK == rtumsg->MsgData[8]) || ( M_CAUSE_WRITECONFIRM == rtumsg->MsgData[8])) { @@ -13114,94 +13114,94 @@ void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPar void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg) { - // 类型标识(TYP):10 + // 绫诲瀷鏍囪瘑(TYP):10 //rtumsg->MsgData[6]; - // 可变结构限定词(VSQ):0x81 + // 鍙彉缁撴瀯闄愬畾璇(VSQ):0x81 //rtumsg->MsgData[7]; - // 传送原因(COT) + // 浼犻佸師鍥(COT) //rtumsg->MsgData[8]; - // 应用服务数据单元公共地址 + // 搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 //rtumsg->MsgData[9]; - // 功能类型(FUN): 254(0xfe) + // 鍔熻兘绫诲瀷(FUN): 254(0xfe) //rtumsg->MsgData[10]; - // 信息序号(INF): - // 读组标题 : 240 - // 读一个组的全部条目的值或属性 : 241 - // 读单个条目的目录 : 243 - // 读单个条目的值或属性 : 244 - // 对通用分类数据总查询中止 : 245 + // 淇℃伅搴忓彿(INF): + // 璇荤粍鏍囬 : 240 + // 璇讳竴涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 : 241 + // 璇诲崟涓潯鐩殑鐩綍 : 243 + // 璇诲崟涓潯鐩殑鍊兼垨灞炴 : 244 + // 瀵归氱敤鍒嗙被鏁版嵁鎬绘煡璇腑姝 : 245 //rtumsg->MsgData[11]; - // 返回信息标识符(RII) + // 杩斿洖淇℃伅鏍囪瘑绗(RII) //rtumsg->MsgData[12]; - // 通用分类数据集数目 + // 閫氱敤鍒嗙被鏁版嵁闆嗘暟鐩 //rtumsg->MsgData[13]; - // 以下为多个通用分类数据 - // 通用分类标识序号(GIN):条目号和组号 + // 浠ヤ笅涓哄涓氱敤鍒嗙被鏁版嵁 + // 閫氱敤鍒嗙被鏍囪瘑搴忓彿(GIN):鏉$洰鍙峰拰缁勫彿 //rtumsg->MsgData[14]; - // 描述类别(KOD) - // 无所指定的描述类别 : KOD_NOSPECIFIED(0) - // 实际值 : KOD_ACTUALVALUE(1) - // 缺省值 : KOD_DEFAULTVALUE(2) - // 量程(最大值、最小值、步长) : KOD_RANGE(3) - // 备用 : KOD_BACKUP1(4) - // 精度(n,m) : KOD_PRECISION(5) - // 因子 : KOD_FACTOR(6) - // 参比 : KOD_REFERENCE(7) - // 列表 : KOD_ENUMERATION(8) - // 量纲 : KOD_DIMENSION(9) - // 描述 : KOD_DESCRIPTION(10) - // 备用 : KOD_BACKUP2(11) - // 口令条目 : KOD_PASSWORD(12) - // 只读 : KOD_READONLY(13) - // 只写 : KOD_WRITEONLY(14) - // 备用 : KOD_BACKUP3(15) - // 备用 : KOD_BACKUP4(16) - // 备用 : KOD_BACKUP5(17) - // 备用 : KOD_BACKUP6(18) - // 相应的功能类型和信息序号 : KOD_CORFUNCANDINF(19) - // 相应的事件 : KOD_COREVENT(20) - // 列表的文本阵列 : KOD_ENUMTEXTARRAY(21) - // 列表的值阵列 : KOD_ENUMVALUEARRAY(22) - // 相关联的条目 : KOD_RELATEDENTRIES(23) + // 鎻忚堪绫诲埆(KOD) + // 鏃犳墍鎸囧畾鐨勬弿杩扮被鍒 : KOD_NOSPECIFIED(0) + // 瀹為檯鍊 : KOD_ACTUALVALUE(1) + // 缂虹渷鍊 : KOD_DEFAULTVALUE(2) + // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) : KOD_RANGE(3) + // 澶囩敤 : KOD_BACKUP1(4) + // 绮惧害(n,m) : KOD_PRECISION(5) + // 鍥犲瓙 : KOD_FACTOR(6) + // 鍙傛瘮 : KOD_REFERENCE(7) + // 鍒楄〃 : KOD_ENUMERATION(8) + // 閲忕翰 : KOD_DIMENSION(9) + // 鎻忚堪 : KOD_DESCRIPTION(10) + // 澶囩敤 : KOD_BACKUP2(11) + // 鍙d护鏉$洰 : KOD_PASSWORD(12) + // 鍙 : KOD_READONLY(13) + // 鍙啓 : KOD_WRITEONLY(14) + // 澶囩敤 : KOD_BACKUP3(15) + // 澶囩敤 : KOD_BACKUP4(16) + // 澶囩敤 : KOD_BACKUP5(17) + // 澶囩敤 : KOD_BACKUP6(18) + // 鐩稿簲鐨勫姛鑳界被鍨嬪拰淇℃伅搴忓彿 : KOD_CORFUNCANDINF(19) + // 鐩稿簲鐨勪簨浠 : KOD_COREVENT(20) + // 鍒楄〃鐨勬枃鏈樀鍒 : KOD_ENUMTEXTARRAY(21) + // 鍒楄〃鐨勫奸樀鍒 : KOD_ENUMVALUEARRAY(22) + // 鐩稿叧鑱旂殑鏉$洰 : KOD_RELATEDENTRIES(23) //rtumsg->MsgData[16]; - // 数据类型描述 + // 鏁版嵁绫诲瀷鎻忚堪 //rtumsg->MsgData[17]; - //DATAID_NO : 无数据 - //DATAID_OS8ASCII : 8位ASCII - //DATAID_BSTRING : 8位2进制数 - //DATAID_UIX : 无符号整数 - //DATAID_INT : 整数 - //DATAID_UFLOAT : 无符号浮点数 - //DATAID_FLOAT : 浮点数 - //DATAID_754SHORT : R32.23 IEEE 标准754短实数 - //DATAID_754REAL : R64.53 IEEE 标准754实数 - //DATAID_DOUBLE : 双点信息 - //DATAID_SINGLE : 单点信息 - //DATAID_13BITS : 带品质描述的被测值(13BITS) - //DATAID_SORTIDNO : 通用分类标识序号 - //DATAID_WITHTIME : 带时标的报文 - //DATAID_WITHTIMESPACE : 带相对时标的报文 - //DATAID_STRUCT : 数据结构 - - // 数据尺寸 + //DATAID_NO : 鏃犳暟鎹 + //DATAID_OS8ASCII : 8浣岮SCII + //DATAID_BSTRING : 8浣2杩涘埗鏁 + //DATAID_UIX : 鏃犵鍙锋暣鏁 + //DATAID_INT : 鏁存暟 + //DATAID_UFLOAT : 鏃犵鍙锋诞鐐规暟 + //DATAID_FLOAT : 娴偣鏁 + //DATAID_754SHORT : R32.23 IEEE 鏍囧噯754鐭疄鏁 + //DATAID_754REAL : R64.53 IEEE 鏍囧噯754瀹炴暟 + //DATAID_DOUBLE : 鍙岀偣淇℃伅 + //DATAID_SINGLE : 鍗曠偣淇℃伅 + //DATAID_13BITS : 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) + //DATAID_SORTIDNO : 閫氱敤鍒嗙被鏍囪瘑搴忓彿 + //DATAID_WITHTIME : 甯︽椂鏍囩殑鎶ユ枃 + //DATAID_WITHTIMESPACE : 甯︾浉瀵规椂鏍囩殑鎶ユ枃 + //DATAID_STRUCT : 鏁版嵁缁撴瀯 + + // 鏁版嵁灏哄 //rtumsg->MsgData[18] - // 数量 + // 鏁伴噺 //rtumsg->MsgData[19] - // 数据值(长度根据以上描述) + // 鏁版嵁鍊(闀垮害鏍规嵁浠ヤ笂鎻忚堪) - // 2 ... n 个通用分类数据 + // 2 ... n 涓氱敤鍒嗙被鏁版嵁 int i, iGroupNo, iCfgGroupIdx; DEVDEF *pDevParam; @@ -13218,7 +13218,7 @@ void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg) if(FindProtectDev(pPortParam, &sDevAddrParam, FALSE) == FALSE) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d 不在端口配置保护范围内!!!", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d 涓嶅湪绔彛閰嶇疆淇濇姢鑼冨洿鍐!!!", commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr); DebugPrint(szbuf); #endif @@ -13230,7 +13230,7 @@ void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg) return; } - //组 号 + //缁 鍙 iGroupNo = rtumsg->MsgData[14]; for(i=0; im_sDevParam.m_iCfgGroupNum; i++) { @@ -13244,7 +13244,7 @@ void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg) if(i >= pDevParam->m_sDevParam.m_iCfgGroupNum) { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10 通用分类数据处理时,Group=%d不在处理范围内!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10 閫氱敤鍒嗙被鏁版嵁澶勭悊鏃讹紝Group=%d涓嶅湪澶勭悊鑼冨洿鍐!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, iGroupNo); DebugPrint(szbuf); #endif @@ -13253,24 +13253,24 @@ void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg) switch(pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType) { - // 处理保护模拟量 + // 澶勭悊淇濇姢妯℃嫙閲 case PROTECT_AI_PNT_TYPE: Buban103GDprocessWithPAIToScada(rtumsg, &sDevAddrParam, iCfgGroupIdx); break; - // 处理保护开关量 + // 澶勭悊淇濇姢寮鍏抽噺 case PROTECT_DI_PNT_TYPE: Buban103GDprocessWithPDIToScada(rtumsg, &sDevAddrParam, iCfgGroupIdx); break; - // 处理保护定值 + // 澶勭悊淇濇姢瀹氬 case PROTECT_FIX_PNT_TYPE: Buban103GDprocessWithPFIXToScada(rtumsg, &sDevAddrParam, iCfgGroupIdx); break; default: #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d linkaddr=%d devaddr=%d ASDU10处理时, Group=%d数据类型(=%d)不匹配!!!\n", + sprintf(szbuf, "绔彛%d linkaddr=%d devaddr=%d ASDU10澶勭悊鏃, Group=%d鏁版嵁绫诲瀷(=%d)涓嶅尮閰!!!\n", commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iGroupNo, pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType); @@ -13284,13 +13284,13 @@ void Buban103ScadaProtocolExchange(int commid, RTUMSG *rtumsg) { if(MSGTYPE_BAOHU_SCADACMD == rtumsg->MsgType) { - // 下行命令 + // 涓嬭鍛戒护 Buban103ScadaCmdchange(commid, rtumsg); } if(MSGTYPE_BAOHU_SCADADATA == rtumsg->MsgType) { - // 上行数据 + // 涓婅鏁版嵁 Buban103ScadaDatachange(commid, rtumsg); } } @@ -13350,6 +13350,6 @@ void Buban103DispMalloc(int commid, int iSize) sprintf(szbuf, "disp: commid=%d, malloc(%d)", commid, iSize); DebugPrint(szbuf); } -//===========================转发数据处理结束========================= +//===========================杞彂鏁版嵁澶勭悊缁撴潫========================= -//===========================数据处理函数结束========================= \ No newline at end of file +//===========================鏁版嵁澶勭悊鍑芥暟缁撴潫========================= \ No newline at end of file diff --git a/buban103.h b/buban103.h index 79d57d9..bc3ba41 100644 --- a/buban103.h +++ b/buban103.h @@ -3,19 +3,19 @@ * Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd. * All rights reserved. * - * 文件名称:buban103.h - * 文件标识:部颁103规约 - * 摘 要:103规约的处理的结构、宏还有函数定义 + * 鏂囦欢鍚嶇О锛歜uban103.h + * 鏂囦欢鏍囪瘑锛氶儴棰103瑙勭害 + * 鎽 瑕侊細103瑙勭害鐨勫鐞嗙殑缁撴瀯銆佸畯杩樻湁鍑芥暟瀹氫箟 * - * 当前版本:1.0 - * 作 者:aaawen - * 完成日期:2005/04/22 + * 褰撳墠鐗堟湰锛1.0 + * 浣 鑰咃細aaawen + * 瀹屾垚鏃ユ湡锛2005/04/22 * - * 取代版本:1.0 - * 原作者 : - * 完成日期: + * 鍙栦唬鐗堟湰锛1.0 + * 鍘熶綔鑰 锛 + * 瀹屾垚鏃ユ湡锛 * - * 说 明:数据定义规则 + * 璇 鏄庯細鏁版嵁瀹氫箟瑙勫垯 * u8 --- BYTE(usigned char) * ch --- char * w --- WORD(u_short, usigned short) @@ -31,14 +31,14 @@ * c --- class * s --- struct * sta --- static - * g --- 全局变量 - * Array --- 数组 - * a --- 数组 - * m_ --- 数据成员 - * p --- 指针 - * str --- 字符串 - * 全部大写 --- 常量 - * 首字节必须大写--- 类名称,结构,函数 + * g --- 鍏ㄥ眬鍙橀噺 + * Array --- 鏁扮粍 + * a --- 鏁扮粍 + * m_ --- 鏁版嵁鎴愬憳 + * p --- 鎸囬拡 + * str --- 瀛楃涓 + * 鍏ㄩ儴澶у啓 --- 甯搁噺 + * 棣栧瓧鑺傚繀椤诲ぇ鍐--- 绫诲悕绉帮紝缁撴瀯锛屽嚱鏁 **************************************************************************************/ // buban103.h: interface for the buban103 class. // @@ -52,1099 +52,1099 @@ #endif ////////////////////////////////////////////////////////////////////////// -// 宏定义 // +// 瀹忓畾涔 // // WEN 2001.03.09 // ////////////////////////////////////////////////////////////////////////// /*! - \brief 保护信息转发返回码 + \brief 淇濇姢淇℃伅杞彂杩斿洖鐮 */ #define RII_PROV_ID 0xFF /*! - \brief 遥测量起始点号 + \brief 閬ユ祴閲忚捣濮嬬偣鍙 */ #define INF_AI_START 92 /*! - \brief 遥测量数量 + \brief 閬ユ祴閲忔暟閲 */ #define INF_AI_NUM 57 /*! - \brief 遥信量起始点号 + \brief 閬ヤ俊閲忚捣濮嬬偣鍙 */ #define INF_DI_START 149 /*! - \brief 遥信量数量 + \brief 閬ヤ俊閲忔暟閲 */ #define INF_DI_NUM 89 /*! - \brief 电度量起始点号 + \brief 鐢靛害閲忚捣濮嬬偣鍙 */ #define INF_PI_START 6 /*! - \brief 电度量数量 + \brief 鐢靛害閲忔暟閲 */ #define INF_PI_NUM 26 /*! - \brief 遥控点起始点号 + \brief 閬ユ帶鐐硅捣濮嬬偣鍙 */ #define INF_YK_START 48 /*! - \brief 遥控点数量 + \brief 閬ユ帶鐐规暟閲 */ #define INF_YK_NUM 28 /*! - \brief 遥调点起始点号 + \brief 閬ヨ皟鐐硅捣濮嬬偣鍙 */ #define INF_YT_START 48 /*! - \brief 遥调点数量 + \brief 閬ヨ皟鐐规暟閲 */ #define INF_YT_NUM 28 /*! - \brief 每个装置配置的最大组号 + \brief 姣忎釜瑁呯疆閰嶇疆鐨勬渶澶х粍鍙 */ #define GROUPNUM 16 /*! - \brief 文件名称长度 + \brief 鏂囦欢鍚嶇О闀垮害 */ #define FILENAME_LEN 256 /*! - \brief 装置模拟量最大组数 + \brief 瑁呯疆妯℃嫙閲忔渶澶х粍鏁 */ #define DEV_AI_MAXNUM 7 /*! - \brief 字符串最大长度 + \brief 瀛楃涓叉渶澶ч暱搴 */ #define MAXSTRINGLEN 64 /*! - \brief 定时召唤命令最大数目 + \brief 瀹氭椂鍙敜鍛戒护鏈澶ф暟鐩 */ #define BUBAN103_TIMER_CMD_NUM 5 -// 应用服务数据单元ASDU的常量定义 -// 监视方向的类型标识 -#define M_TM_TA_3 1 //带时标的报文 -#define M_TMR_TA_3 2 //具有相对时间的带时标的报文 -#define M_MEI_NA_3 3 //被测值I -#define M_TME_TA_3 4 //具有相对时间的带时标的被测值 -#define M_IRC_NA_3 5 //标识 -#define M_SYN_TA_3 6 //时间同步 -#define M_TGI_NA_3 8 //总查询(总召唤)终止 -#define M_MEII_NA_3 9 //被测值II -#define M_GD_NTA_3 10 //通用分类数据 -#define M_GI_NTA_3 11 //通用分类标识 -#define M_LRD_TA_3 23 //被记录的扰动表 -#define M_RTD_TA_3 26 //扰动数据传输准备就绪 -#define M_RTC_NA_3 27 //被记录的通道传输准备就绪 -#define M_RTT_NA_3 28 //带标志的状态变位传输准备就绪 -#define M_TOT_TA_3 29 //传送带标志的状态变位 -#define M_TOV_NA_3 30 //传送扰动值 -#define M_EOT_TA_3 31 //传送结束 -#define M_MEIII_TA_3 32 //带时标的被测值Ⅲ -#define M_MEIV_TA_3 33 //带时标的被测值Ⅳ -#define M_MEV_TA_3 34 //带时标的被测值Ⅴ -#define M_MEVI_TA_3 35 //带时标的被测值Ⅵ -#define M_MEVII_NA_3 50 //被测值Ⅶ -#define M_IT_NA_3 36 //电能脉冲计数值 -#define M_IT_TA_3 37 //带时标的电能脉冲计数值 -#define M_ST_NA_3 38 //步位置信息 -#define M_ST_TA_3 39 //带时标的步位置信息 -#define M_SP_NA_3 40 //单点状态信息 -#define M_SP_TA_3 41 //带时标的单点状态信息 -#define M_DP_NA_3 42 //双点状态信息 -#define M_DP_TA_3 43 //带时标的双点状态信息 -#define M_SS_NA_3 44 //单点状态和状态变位检出 -#define M_SS_TA_3 45 //带时标的单点状态和状态变位检出 -#define M_DS_NA_3 46 //双点状态和状态变位检出 -#define M_DS_TA_3 47 //带时标的双点状态和状态变位检出 -#define M_WL_TA_3 48 //水位 -#define M_DC_NA_3 64 //控制断路器命令 -#define M_RC_NA_3 65 //升降命令 -#define M_SE_NA_3 66 //设定命令 -#define M_CC_NA_3 67 //控制命令 -#define M_EX_PI_3 205 //电度命令(SIEMENS公司) - -// 控制方向的类型标识 -#define C_SYN_TA_3 6 //时间同步 -#define C_TGI_NA_3 7 //总查询(总召唤) -#define C_GD_NA_3 10 //通用分类数据 -#define C_GRC_NA_3 20 //一般命令 -#define C_GC_NA_3 21 //通用分类命令 -#define C_ODT_NA_3 24 //扰动数据传输的命令 -#define C_ADT_NA_3 25 //扰动数据传输的认可 -#define C_DC_NA_3 64 //控制断路器命令 -#define C_RC_NA_3 65 //升降命令 -#define C_SE_NA_3 66 //设定命令 -#define C_CC_NA_3 67 //控制命令 -#define C_CI_NA_3 88 //电能脉冲计数召唤命令 - -// 链路规约数据单元LDPU的常量定义 -// 监视方向的控制域功能码 -#define M_CON_NA_3 0 //确认帧 -#define M_BY_NA_3 1 //忙帧(确认帧) -#define M_DATA_NA_3 8 //以数据响应请求帧 -#define M_NV_NA_3 9 //无所要求的数据帧回答 -#define M_LKR_NA_3_1 11 //链路状态响应帧--链路工作正常 -#define M_LKR_NA_3_2 14 //链路状态响应帧--链路服务未工作 -#define M_LKR_NA_3_3 15 //链路状态响应帧--链路服务未实现 - -// 控制方向的控制功能码 -#define C_RFB_NA_3 7 //复位帧计数 -#define C_RCU_NA_3 0 //复位通讯单元 -#define C_PL1_NA_3 10 //召唤一级用户数据 -#define C_PL2_NA_3 11 //召唤二级用户数据 -#define C_RLK_NA_3 9 //请求链路状态 -#define C_SD1_NA_3 3 //传送数据(发送/确认帧) -#define C_SD2_NA_3 4 //传送数据(发送/无回答帧) - -// 功能类型 -#define FUNC_DISTANCEPROTECT 128 // 距离保护 -#define FUNC_OVERCURRENTPROTECT 160 // 过流保护 -#define FUNC_TRANSFORMERPROTECT 176 // 变压器差动保护 -#define FUNC_LINEPROTECT 192 // 线路差动保护 -#define FUNC_GENERALSORT 254 // 通用分类功能 -#define FUNC_GLOBAL 255 // 全局功能类型 - -// 命令类型 -#define ORDER_FAULTSELECT 1 // 故障的选择 -#define ORDER_REQUESTDATA 2 // 请求扰动数据 -#define ORDER_STOPDATA 3 // 终止扰动数据 -#define ORDER_REQUESTSTATUSWITHFLAG 16 // 请求带标志的状态变位 -#define ORDER_STOPSTATUSWITHFLAG 17 // 终止带标志的状态变位 -#define ORDER_REQUESTRECORDTABLE 24 // 请求被记录的扰动表 - -// 在监视方向的通用分类功能的信息序号 -#define M_INF_READGROUPTITLE 240 // 读组标题 -#define M_INF_READGROUPALLITEMS 241 // 读一个组的全部条目的值或属性 -#define M_INF_READDIROFSINGLEITEM 243 // 读单个条目的目录 -#define M_INF_READATTROFISNGLEITEM 244 // 读单个条目的值或属性 -#define M_INF_STOPQUERYGENERAL 245 // 对通用分类数据总查询中止 -#define M_INF_WRITEITEMWITHACK 249 // 带确认的写条目 -#define M_INF_WRITEITEMWITHEXEC 250 // 带执行的写条目 -#define M_INF_WRITEITEMWITHSTOP 251 // 带终止的写条目 - -// 在控制方向的通用分类功能的信息序号 -#define C_INF_READGROUPTITLE 240 // 读组标题 -#define C_INF_READGROUPALLITEMS 241 // 读一个组的全部条目的值或属性 -#define C_INF_READDIROFSINGLEITEM 243 // 读单个条目的目录 -#define C_INF_READATTROFISNGLEITEM 244 // 读单个条目的值或属性 -#define C_INF_QUERYGENERAL 245 // 对通用分类数据总查询 -#define C_INF_WRITEITEM 248 // 写条目 -#define C_INF_WRITEITEMWITHACK 249 // 带确认的写条目 -#define C_INF_WRITEITEMWITHEXEC 250 // 带执行的写条目 -#define C_INF_STOPWRITEITEM 251 // 写条目终止 - -// 信息组号 -#define GROUP_SYSTEM0 0x00 // 系统类(所有保护及自动装置的系统参数及功能、定值区切换) -#define GROUP_SYSTEM1 0x01 // 系统类 -#define GROUP_FIXVALUE0 0x02 // 定值类 -#define GROUP_FIXVALUE1 0x03 // 定值类 -#define GROUP_EVENT0 0x04 // 事件类(动作及状态事件) -#define GROUP_EVENT1 0x05 // 事件类(如告警事件) -#define GROUP_AIVALUE0 0x06 // 遥测类(保护测量值) -#define GROUP_AIVALUE1 0x07 // 遥测类(如电流、电压、功率、频率、水位、温度等) -#define GROUP_DISOE 0x08 // 遥信类(如刀闸、开关、信号、状态等) 遥信SOE -#define GROUP_DIVALUE0 0x09 // 遥信类 -#define GROUP_PIVALUE 0x0a // 电量类 -#define GROUP_YKSWITCH 0x0b // 遥控开关类(跳/合) -#define GROUP_YKDANGWEI 0x0c // 遥控分头类(升/降) -#define GROUP_YTDAOUT 0x0d // 遥调类(DA输出) -#define GROUP_YKYABAN 0x0e // 遥控压板类(保护功能投/退) -#define GROUP_DEBUGANDOPERATE 0x0f // 调试及操作信息类(用于装置的调试及操作记录) -#define GROUP_DIVALUE1 0x18 // 遥信类(如刀闸、开关、信号、状态等) 遥信状态 - -// 传送原因 -// 监视方向 -#define M_CAUSE_AUTOSEND 1 // 自发(突发) -#define M_CAUSE_CYCLE 2 // 循环 -#define M_CAUSE_RESET_FCB 3 // 复位帧计数位(FCB) -#define M_CAUSE_RESET_CU 4 // 复位通信单元(CU) -#define M_CAUSE_START 5 // 启动/重新启动 -#define M_CAUSE_POWERON 6 // 电源合上 -#define M_CAUSE_TEST 7 // 测试模式 -#define M_CAUSE_CHECKTIME 8 // 时间同步 -#define M_CAUSE_QUERY 9 // 总查询 -#define M_CAUSE_STOPQUERY 10 // 总查询停止 -#define M_CAUSE_LOCAL 11 // 当地操作 -#define M_CAUSE_REMOTE 12 // 远方操作 -#define M_CAUSE_ACK 20 // 命令的肯定认可 -#define M_CAUSE_NAK 21 // 命令的否定认可 -#define M_CAUSE_DSITURBANCEDATA 31 // 扰动数据的传送 -#define M_CAUSE_WRITEACK 40 // 通用分类写命令的肯定认可 -#define M_CAUSE_WRITENAK 41 // 通用分类写命令的否定认可 -#define M_CAUSE_READWITHVALIDDATA 42 // 对通用分类读命令有效数据响应 -#define M_CAUSE_READWITHINVALIDDATA 43 // 对通用分类读命令无效数据响应 -#define M_CAUSE_WRITECONFIRM 44 // 通用分类写确认 - -// 控制方向 -#define C_CAUSE_CYCLE 2 // 循环 -#define C_CAUSE_CHECKTIME 8 // 时间同步 -#define C_CAUSE_QUERY 9 // 总查询 -#define C_CAUSE_COMMAND 20 // 一般命令 -#define C_CAUSE_DSITURBANCEDATA 31 // 扰动数据的传送 -#define C_CAUSE_WRITEWITHVALIDDATA 40 // 通用分类写命令 -#define C_CAUSE_READWITHVALIDDATA 42 // 通用分类读命令 - -// 数据ID -#define DATAID_NO 0 // 无数据 -#define DATAID_OS8ASCII 1 // 8位ASCII -#define DATAID_BSTRING 2 // 字符串 -#define DATAID_UI 3 // 无符号整数 -#define DATAID_INT 4 // 整数 -#define DATAID_UFLOAT 5 // 无符号浮点数 -#define DATAID_FLOAT 6 // 浮点数 -#define DATAID_754SHORT 7 // R32.23 IEEE 标准754短实数 -#define DATAID_754REAL 8 // R64.53 IEEE 标准754实数 -#define DATAID_DOUBLE 9 // 双点信息 -#define DATAID_SINGLE 10 // 单点信息 -#define DATAID_13BITS 12 // 带品质描述的被测值(13BITS) -#define DATAID_SORTIDNO 15 // 通用分类标识序号 -#define DATAID_WITHTIME 18 // 带时标的报文 -#define DATAID_WITHTIMESPACE 19 // 带相对时标的报文 -#define DATAID_STRUCT 23 // 数据结构 -#define DATAID_EXDATA_0X24 0x24 // 北京四方扩展数据类型 - -// 描述类别 -#define KOD_NOSPECIFIED 0 // 无所指定的描述类别 -#define KOD_ACTUALVALUE 1 // 实际值 -#define KOD_DEFAULTVALUE 2 // 缺省值 -#define KOD_RANGE 3 // 量程(最大值、最小值、步长) -#define KOD_BACKUP1 4 // 备用 -#define KOD_PRECISION 5 // 精度(n,m) -#define KOD_FACTOR 6 // 因子 -#define KOD_REFERENCE 7 // 参比 -#define KOD_ENUMERATION 8 // 列表 -#define KOD_DIMENSION 9 // 量纲 -#define KOD_DESCRIPTION 10 // 描述 -#define KOD_BACKUP2 11 // 备用 -#define KOD_PASSWORD 12 // 口令条目 -#define KOD_READONLY 13 // 只读 -#define KOD_WRITEONLY 14 // 只写 -#define KOD_BACKUP3 15 // 备用 -#define KOD_BACKUP4 16 // 备用 -#define KOD_BACKUP5 17 // 备用 -#define KOD_BACKUP6 18 // 备用 -#define KOD_CORFUNCANDINF 19 // 相应的功能类型和信息序号 -#define KOD_COREVENT 20 // 相应的事件 -#define KOD_ENUMTEXTARRAY 21 // 列表的文本阵列 -#define KOD_ENUMVALUEARRAY 22 // 列表的值阵列 -#define KOD_RELATEDENTRIES 23 // 相关联的条目 - -/////////////////////////////结构定义///////////////////////////////// +// 搴旂敤鏈嶅姟鏁版嵁鍗曞厓ASDU鐨勫父閲忓畾涔 +// 鐩戣鏂瑰悜鐨勭被鍨嬫爣璇 +#define M_TM_TA_3 1 //甯︽椂鏍囩殑鎶ユ枃 +#define M_TMR_TA_3 2 //鍏锋湁鐩稿鏃堕棿鐨勫甫鏃舵爣鐨勬姤鏂 +#define M_MEI_NA_3 3 //琚祴鍊糏 +#define M_TME_TA_3 4 //鍏锋湁鐩稿鏃堕棿鐨勫甫鏃舵爣鐨勮娴嬪 +#define M_IRC_NA_3 5 //鏍囪瘑 +#define M_SYN_TA_3 6 //鏃堕棿鍚屾 +#define M_TGI_NA_3 8 //鎬绘煡璇紙鎬诲彫鍞わ級缁堟 +#define M_MEII_NA_3 9 //琚祴鍊糏I +#define M_GD_NTA_3 10 //閫氱敤鍒嗙被鏁版嵁 +#define M_GI_NTA_3 11 //閫氱敤鍒嗙被鏍囪瘑 +#define M_LRD_TA_3 23 //琚褰曠殑鎵板姩琛 +#define M_RTD_TA_3 26 //鎵板姩鏁版嵁浼犺緭鍑嗗灏辩华 +#define M_RTC_NA_3 27 //琚褰曠殑閫氶亾浼犺緭鍑嗗灏辩华 +#define M_RTT_NA_3 28 //甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈撳噯澶囧氨缁 +#define M_TOT_TA_3 29 //浼犻佸甫鏍囧織鐨勭姸鎬佸彉浣 +#define M_TOV_NA_3 30 //浼犻佹壈鍔ㄥ +#define M_EOT_TA_3 31 //浼犻佺粨鏉 +#define M_MEIII_TA_3 32 //甯︽椂鏍囩殑琚祴鍊尖參 +#define M_MEIV_TA_3 33 //甯︽椂鏍囩殑琚祴鍊尖叄 +#define M_MEV_TA_3 34 //甯︽椂鏍囩殑琚祴鍊尖叅 +#define M_MEVI_TA_3 35 //甯︽椂鏍囩殑琚祴鍊尖叆 +#define M_MEVII_NA_3 50 //琚祴鍊尖叇 +#define M_IT_NA_3 36 //鐢佃兘鑴夊啿璁℃暟鍊 +#define M_IT_TA_3 37 //甯︽椂鏍囩殑鐢佃兘鑴夊啿璁℃暟鍊 +#define M_ST_NA_3 38 //姝ヤ綅缃俊鎭 +#define M_ST_TA_3 39 //甯︽椂鏍囩殑姝ヤ綅缃俊鎭 +#define M_SP_NA_3 40 //鍗曠偣鐘舵佷俊鎭 +#define M_SP_TA_3 41 //甯︽椂鏍囩殑鍗曠偣鐘舵佷俊鎭 +#define M_DP_NA_3 42 //鍙岀偣鐘舵佷俊鎭 +#define M_DP_TA_3 43 //甯︽椂鏍囩殑鍙岀偣鐘舵佷俊鎭 +#define M_SS_NA_3 44 //鍗曠偣鐘舵佸拰鐘舵佸彉浣嶆鍑 +#define M_SS_TA_3 45 //甯︽椂鏍囩殑鍗曠偣鐘舵佸拰鐘舵佸彉浣嶆鍑 +#define M_DS_NA_3 46 //鍙岀偣鐘舵佸拰鐘舵佸彉浣嶆鍑 +#define M_DS_TA_3 47 //甯︽椂鏍囩殑鍙岀偣鐘舵佸拰鐘舵佸彉浣嶆鍑 +#define M_WL_TA_3 48 //姘翠綅 +#define M_DC_NA_3 64 //鎺у埗鏂矾鍣ㄥ懡浠 +#define M_RC_NA_3 65 //鍗囬檷鍛戒护 +#define M_SE_NA_3 66 //璁惧畾鍛戒护 +#define M_CC_NA_3 67 //鎺у埗鍛戒护 +#define M_EX_PI_3 205 //鐢靛害鍛戒护(SIEMENS鍏徃) + +// 鎺у埗鏂瑰悜鐨勭被鍨嬫爣璇 +#define C_SYN_TA_3 6 //鏃堕棿鍚屾 +#define C_TGI_NA_3 7 //鎬绘煡璇紙鎬诲彫鍞わ級 +#define C_GD_NA_3 10 //閫氱敤鍒嗙被鏁版嵁 +#define C_GRC_NA_3 20 //涓鑸懡浠 +#define C_GC_NA_3 21 //閫氱敤鍒嗙被鍛戒护 +#define C_ODT_NA_3 24 //鎵板姩鏁版嵁浼犺緭鐨勫懡浠 +#define C_ADT_NA_3 25 //鎵板姩鏁版嵁浼犺緭鐨勮鍙 +#define C_DC_NA_3 64 //鎺у埗鏂矾鍣ㄥ懡浠 +#define C_RC_NA_3 65 //鍗囬檷鍛戒护 +#define C_SE_NA_3 66 //璁惧畾鍛戒护 +#define C_CC_NA_3 67 //鎺у埗鍛戒护 +#define C_CI_NA_3 88 //鐢佃兘鑴夊啿璁℃暟鍙敜鍛戒护 + +// 閾捐矾瑙勭害鏁版嵁鍗曞厓LDPU鐨勫父閲忓畾涔 +// 鐩戣鏂瑰悜鐨勬帶鍒跺煙鍔熻兘鐮 +#define M_CON_NA_3 0 //纭甯 +#define M_BY_NA_3 1 //蹇欏抚锛堢‘璁ゅ抚锛 +#define M_DATA_NA_3 8 //浠ユ暟鎹搷搴旇姹傚抚 +#define M_NV_NA_3 9 //鏃犳墍瑕佹眰鐨勬暟鎹抚鍥炵瓟 +#define M_LKR_NA_3_1 11 //閾捐矾鐘舵佸搷搴斿抚--閾捐矾宸ヤ綔姝e父 +#define M_LKR_NA_3_2 14 //閾捐矾鐘舵佸搷搴斿抚--閾捐矾鏈嶅姟鏈伐浣 +#define M_LKR_NA_3_3 15 //閾捐矾鐘舵佸搷搴斿抚--閾捐矾鏈嶅姟鏈疄鐜 + +// 鎺у埗鏂瑰悜鐨勬帶鍒跺姛鑳界爜 +#define C_RFB_NA_3 7 //澶嶄綅甯ц鏁 +#define C_RCU_NA_3 0 //澶嶄綅閫氳鍗曞厓 +#define C_PL1_NA_3 10 //鍙敜涓绾х敤鎴锋暟鎹 +#define C_PL2_NA_3 11 //鍙敜浜岀骇鐢ㄦ埛鏁版嵁 +#define C_RLK_NA_3 9 //璇锋眰閾捐矾鐘舵 +#define C_SD1_NA_3 3 //浼犻佹暟鎹紙鍙戦/纭甯э級 +#define C_SD2_NA_3 4 //浼犻佹暟鎹紙鍙戦/鏃犲洖绛斿抚锛 + +// 鍔熻兘绫诲瀷 +#define FUNC_DISTANCEPROTECT 128 // 璺濈淇濇姢 +#define FUNC_OVERCURRENTPROTECT 160 // 杩囨祦淇濇姢 +#define FUNC_TRANSFORMERPROTECT 176 // 鍙樺帇鍣ㄥ樊鍔ㄤ繚鎶 +#define FUNC_LINEPROTECT 192 // 绾胯矾宸姩淇濇姢 +#define FUNC_GENERALSORT 254 // 閫氱敤鍒嗙被鍔熻兘 +#define FUNC_GLOBAL 255 // 鍏ㄥ眬鍔熻兘绫诲瀷 + +// 鍛戒护绫诲瀷 +#define ORDER_FAULTSELECT 1 // 鏁呴殰鐨勯夋嫨 +#define ORDER_REQUESTDATA 2 // 璇锋眰鎵板姩鏁版嵁 +#define ORDER_STOPDATA 3 // 缁堟鎵板姩鏁版嵁 +#define ORDER_REQUESTSTATUSWITHFLAG 16 // 璇锋眰甯︽爣蹇楃殑鐘舵佸彉浣 +#define ORDER_STOPSTATUSWITHFLAG 17 // 缁堟甯︽爣蹇楃殑鐘舵佸彉浣 +#define ORDER_REQUESTRECORDTABLE 24 // 璇锋眰琚褰曠殑鎵板姩琛 + +// 鍦ㄧ洃瑙嗘柟鍚戠殑閫氱敤鍒嗙被鍔熻兘鐨勪俊鎭簭鍙 +#define M_INF_READGROUPTITLE 240 // 璇荤粍鏍囬 +#define M_INF_READGROUPALLITEMS 241 // 璇讳竴涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 +#define M_INF_READDIROFSINGLEITEM 243 // 璇诲崟涓潯鐩殑鐩綍 +#define M_INF_READATTROFISNGLEITEM 244 // 璇诲崟涓潯鐩殑鍊兼垨灞炴 +#define M_INF_STOPQUERYGENERAL 245 // 瀵归氱敤鍒嗙被鏁版嵁鎬绘煡璇腑姝 +#define M_INF_WRITEITEMWITHACK 249 // 甯︾‘璁ょ殑鍐欐潯鐩 +#define M_INF_WRITEITEMWITHEXEC 250 // 甯︽墽琛岀殑鍐欐潯鐩 +#define M_INF_WRITEITEMWITHSTOP 251 // 甯︾粓姝㈢殑鍐欐潯鐩 + +// 鍦ㄦ帶鍒舵柟鍚戠殑閫氱敤鍒嗙被鍔熻兘鐨勪俊鎭簭鍙 +#define C_INF_READGROUPTITLE 240 // 璇荤粍鏍囬 +#define C_INF_READGROUPALLITEMS 241 // 璇讳竴涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 +#define C_INF_READDIROFSINGLEITEM 243 // 璇诲崟涓潯鐩殑鐩綍 +#define C_INF_READATTROFISNGLEITEM 244 // 璇诲崟涓潯鐩殑鍊兼垨灞炴 +#define C_INF_QUERYGENERAL 245 // 瀵归氱敤鍒嗙被鏁版嵁鎬绘煡璇 +#define C_INF_WRITEITEM 248 // 鍐欐潯鐩 +#define C_INF_WRITEITEMWITHACK 249 // 甯︾‘璁ょ殑鍐欐潯鐩 +#define C_INF_WRITEITEMWITHEXEC 250 // 甯︽墽琛岀殑鍐欐潯鐩 +#define C_INF_STOPWRITEITEM 251 // 鍐欐潯鐩粓姝 + +// 淇℃伅缁勫彿 +#define GROUP_SYSTEM0 0x00 // 绯荤粺绫(鎵鏈変繚鎶ゅ強鑷姩瑁呯疆鐨勭郴缁熷弬鏁板強鍔熻兘銆佸畾鍊煎尯鍒囨崲) +#define GROUP_SYSTEM1 0x01 // 绯荤粺绫 +#define GROUP_FIXVALUE0 0x02 // 瀹氬肩被 +#define GROUP_FIXVALUE1 0x03 // 瀹氬肩被 +#define GROUP_EVENT0 0x04 // 浜嬩欢绫(鍔ㄤ綔鍙婄姸鎬佷簨浠) +#define GROUP_EVENT1 0x05 // 浜嬩欢绫(濡傚憡璀︿簨浠) +#define GROUP_AIVALUE0 0x06 // 閬ユ祴绫(淇濇姢娴嬮噺鍊) +#define GROUP_AIVALUE1 0x07 // 閬ユ祴绫(濡傜數娴併佺數鍘嬨佸姛鐜囥侀鐜囥佹按浣嶃佹俯搴︾瓑) +#define GROUP_DISOE 0x08 // 閬ヤ俊绫(濡傚垁闂搞佸紑鍏炽佷俊鍙枫佺姸鎬佺瓑) 閬ヤ俊SOE +#define GROUP_DIVALUE0 0x09 // 閬ヤ俊绫 +#define GROUP_PIVALUE 0x0a // 鐢甸噺绫 +#define GROUP_YKSWITCH 0x0b // 閬ユ帶寮鍏崇被(璺/鍚) +#define GROUP_YKDANGWEI 0x0c // 閬ユ帶鍒嗗ご绫(鍗/闄) +#define GROUP_YTDAOUT 0x0d // 閬ヨ皟绫(DA杈撳嚭) +#define GROUP_YKYABAN 0x0e // 閬ユ帶鍘嬫澘绫(淇濇姢鍔熻兘鎶/閫) +#define GROUP_DEBUGANDOPERATE 0x0f // 璋冭瘯鍙婃搷浣滀俊鎭被(鐢ㄤ簬瑁呯疆鐨勮皟璇曞強鎿嶄綔璁板綍) +#define GROUP_DIVALUE1 0x18 // 閬ヤ俊绫(濡傚垁闂搞佸紑鍏炽佷俊鍙枫佺姸鎬佺瓑) 閬ヤ俊鐘舵 + +// 浼犻佸師鍥 +// 鐩戣鏂瑰悜 +#define M_CAUSE_AUTOSEND 1 // 鑷彂(绐佸彂) +#define M_CAUSE_CYCLE 2 // 寰幆 +#define M_CAUSE_RESET_FCB 3 // 澶嶄綅甯ц鏁颁綅(FCB) +#define M_CAUSE_RESET_CU 4 // 澶嶄綅閫氫俊鍗曞厓(CU) +#define M_CAUSE_START 5 // 鍚姩/閲嶆柊鍚姩 +#define M_CAUSE_POWERON 6 // 鐢垫簮鍚堜笂 +#define M_CAUSE_TEST 7 // 娴嬭瘯妯″紡 +#define M_CAUSE_CHECKTIME 8 // 鏃堕棿鍚屾 +#define M_CAUSE_QUERY 9 // 鎬绘煡璇 +#define M_CAUSE_STOPQUERY 10 // 鎬绘煡璇㈠仠姝 +#define M_CAUSE_LOCAL 11 // 褰撳湴鎿嶄綔 +#define M_CAUSE_REMOTE 12 // 杩滄柟鎿嶄綔 +#define M_CAUSE_ACK 20 // 鍛戒护鐨勮偗瀹氳鍙 +#define M_CAUSE_NAK 21 // 鍛戒护鐨勫惁瀹氳鍙 +#define M_CAUSE_DSITURBANCEDATA 31 // 鎵板姩鏁版嵁鐨勪紶閫 +#define M_CAUSE_WRITEACK 40 // 閫氱敤鍒嗙被鍐欏懡浠ょ殑鑲畾璁ゅ彲 +#define M_CAUSE_WRITENAK 41 // 閫氱敤鍒嗙被鍐欏懡浠ょ殑鍚﹀畾璁ゅ彲 +#define M_CAUSE_READWITHVALIDDATA 42 // 瀵归氱敤鍒嗙被璇诲懡浠ゆ湁鏁堟暟鎹搷搴 +#define M_CAUSE_READWITHINVALIDDATA 43 // 瀵归氱敤鍒嗙被璇诲懡浠ゆ棤鏁堟暟鎹搷搴 +#define M_CAUSE_WRITECONFIRM 44 // 閫氱敤鍒嗙被鍐欑‘璁 + +// 鎺у埗鏂瑰悜 +#define C_CAUSE_CYCLE 2 // 寰幆 +#define C_CAUSE_CHECKTIME 8 // 鏃堕棿鍚屾 +#define C_CAUSE_QUERY 9 // 鎬绘煡璇 +#define C_CAUSE_COMMAND 20 // 涓鑸懡浠 +#define C_CAUSE_DSITURBANCEDATA 31 // 鎵板姩鏁版嵁鐨勪紶閫 +#define C_CAUSE_WRITEWITHVALIDDATA 40 // 閫氱敤鍒嗙被鍐欏懡浠 +#define C_CAUSE_READWITHVALIDDATA 42 // 閫氱敤鍒嗙被璇诲懡浠 + +// 鏁版嵁ID +#define DATAID_NO 0 // 鏃犳暟鎹 +#define DATAID_OS8ASCII 1 // 8浣岮SCII +#define DATAID_BSTRING 2 // 瀛楃涓 +#define DATAID_UI 3 // 鏃犵鍙锋暣鏁 +#define DATAID_INT 4 // 鏁存暟 +#define DATAID_UFLOAT 5 // 鏃犵鍙锋诞鐐规暟 +#define DATAID_FLOAT 6 // 娴偣鏁 +#define DATAID_754SHORT 7 // R32.23 IEEE 鏍囧噯754鐭疄鏁 +#define DATAID_754REAL 8 // R64.53 IEEE 鏍囧噯754瀹炴暟 +#define DATAID_DOUBLE 9 // 鍙岀偣淇℃伅 +#define DATAID_SINGLE 10 // 鍗曠偣淇℃伅 +#define DATAID_13BITS 12 // 甯﹀搧璐ㄦ弿杩扮殑琚祴鍊(13BITS) +#define DATAID_SORTIDNO 15 // 閫氱敤鍒嗙被鏍囪瘑搴忓彿 +#define DATAID_WITHTIME 18 // 甯︽椂鏍囩殑鎶ユ枃 +#define DATAID_WITHTIMESPACE 19 // 甯︾浉瀵规椂鏍囩殑鎶ユ枃 +#define DATAID_STRUCT 23 // 鏁版嵁缁撴瀯 +#define DATAID_EXDATA_0X24 0x24 // 鍖椾含鍥涙柟鎵╁睍鏁版嵁绫诲瀷 + +// 鎻忚堪绫诲埆 +#define KOD_NOSPECIFIED 0 // 鏃犳墍鎸囧畾鐨勬弿杩扮被鍒 +#define KOD_ACTUALVALUE 1 // 瀹為檯鍊 +#define KOD_DEFAULTVALUE 2 // 缂虹渷鍊 +#define KOD_RANGE 3 // 閲忕▼(鏈澶у笺佹渶灏忓笺佹闀) +#define KOD_BACKUP1 4 // 澶囩敤 +#define KOD_PRECISION 5 // 绮惧害(n,m) +#define KOD_FACTOR 6 // 鍥犲瓙 +#define KOD_REFERENCE 7 // 鍙傛瘮 +#define KOD_ENUMERATION 8 // 鍒楄〃 +#define KOD_DIMENSION 9 // 閲忕翰 +#define KOD_DESCRIPTION 10 // 鎻忚堪 +#define KOD_BACKUP2 11 // 澶囩敤 +#define KOD_PASSWORD 12 // 鍙d护鏉$洰 +#define KOD_READONLY 13 // 鍙 +#define KOD_WRITEONLY 14 // 鍙啓 +#define KOD_BACKUP3 15 // 澶囩敤 +#define KOD_BACKUP4 16 // 澶囩敤 +#define KOD_BACKUP5 17 // 澶囩敤 +#define KOD_BACKUP6 18 // 澶囩敤 +#define KOD_CORFUNCANDINF 19 // 鐩稿簲鐨勫姛鑳界被鍨嬪拰淇℃伅搴忓彿 +#define KOD_COREVENT 20 // 鐩稿簲鐨勪簨浠 +#define KOD_ENUMTEXTARRAY 21 // 鍒楄〃鐨勬枃鏈樀鍒 +#define KOD_ENUMVALUEARRAY 22 // 鍒楄〃鐨勫奸樀鍒 +#define KOD_RELATEDENTRIES 23 // 鐩稿叧鑱旂殑鏉$洰 + +/////////////////////////////缁撴瀯瀹氫箟///////////////////////////////// /*! \struct PROV_ALLITEMOFGROUPPARAM - \brief 转发条目参数定义 + \brief 杞彂鏉$洰鍙傛暟瀹氫箟 - \par 快速参考 + \par 蹇熷弬鑰 buban103.h */ typedef struct{ /*! \var PROV_ALLITEMOFGROUPPARAM::m_u8RII - \brief 主站信息返回值 + \brief 涓荤珯淇℃伅杩斿洖鍊 \note - 取值范围:[0---255]\n + 鍙栧艰寖鍥达細[0---255]\n */ unsigned char m_u8RII; /*! \var PROV_ALLITEMOFGROUPPARAM::m_u8Group - \brief 信息组号 + \brief 淇℃伅缁勫彿 \note - 取值范围:[0---255]\n + 鍙栧艰寖鍥达細[0---255]\n */ unsigned char m_u8Group; /*! \var PROV_ALLITEMOFGROUPPARAM::m_u8ItemNo - \brief 信息条目号 + \brief 淇℃伅鏉$洰鍙 \note - 取值范围:[0---255]\n + 鍙栧艰寖鍥达細[0---255]\n */ unsigned char m_u8ItemNo; /*! \var PROV_ALLITEMOFGROUPPARAM::m_u8ItemAttr - \brief 条目属性 + \brief 鏉$洰灞炴 \note - (实际值、缺省值、量程... ...) + (瀹為檯鍊笺佺己鐪佸笺侀噺绋... ...) \note - 取值范围:[1、3、9、10]\n + 鍙栧艰寖鍥达細[1銆3銆9銆10]\n */ unsigned char m_u8ItemAttr; /*! \var PROV_ALLITEMOFGROUPPARAM::m_bFinished - \brief 数据读取完成标识 + \brief 鏁版嵁璇诲彇瀹屾垚鏍囪瘑 \note - 取值范围:[TRUE/FALSE]\n + 鍙栧艰寖鍥达細[TRUE/FALSE]\n */ BOOL m_bFinished; }PROV_ALLITEMOFGROUPPARAM; /*! \struct DEVPARAMDEF - \brief 设备结构 + \brief 璁惧缁撴瀯 - \par 快速参考 + \par 蹇熷弬鑰 buban103.h */ typedef struct{ /*! \var DEVPARAMDEF::m_szDevName - \brief 装置名称 + \brief 瑁呯疆鍚嶇О \note - 取值范围:[有效的ASCII码字符串,最大长度为64]\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负64]\n */ char m_szDevName[66]; /*! \var DEVPARAMDEF::m_u8DevAddr - \brief 保护装置地址 + \brief 淇濇姢瑁呯疆鍦板潃 \note - 取值范围:[1-254,255为广播地址]\n + 鍙栧艰寖鍥达細[1-254锛255涓哄箍鎾湴鍧]\n */ u_char m_u8DevAddr; /*! \var DEVPARAMDEF::m_iCfgGroupNum - \brief 保护装置组配置数量 + \brief 淇濇姢瑁呯疆缁勯厤缃暟閲 \note - 取值范围: [0--GROUPNUM]\n + 鍙栧艰寖鍥达細 [0--GROUPNUM]\n */ i_32 m_iCfgGroupNum; /*! \var DEVPARAMDEF::m_saGroupDef[] - \brief 保护装置类型 + \brief 淇濇姢瑁呯疆绫诲瀷 - \par 快速参考 - GROUPDEF结构 + \par 蹇熷弬鑰 + GROUPDEF缁撴瀯 \note - 取值范围: 无\n + 鍙栧艰寖鍥达細 鏃燶n */ GROUPDEF m_saGroupDef[GROUPNUM]; /*! \var DEVPARAMDEF::m_szType[] - \brief 间隔(保护装置)类型 + \brief 闂撮殧(淇濇姢瑁呯疆)绫诲瀷 \note - 取值范围:[有效的ASCII码字符串,最大长度为64]\n - "LFP984B", "RCS921A", "RCS931A", "LFP965B"等\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负64]\n + "LFP984B", "RCS921A", "RCS931A", "LFP965B"绛塡n */ char m_szType[64]; /*! \var DEVPARAMDEF::m_szDatFileName[] - \brief 间隔(保护装置)数据信息配置文件名称 + \brief 闂撮殧(淇濇姢瑁呯疆)鏁版嵁淇℃伅閰嶇疆鏂囦欢鍚嶇О \note - 取值范围:[有效的ASCII码字符串,最大长度为256]\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负256]\n */ //char m_szDatFileName[FILENAME_LEN]; /*! \var DEVPARAMDEF::m_sAiDBOrientation - \brief 基本模拟测量量在数据库中定位 + \brief 鍩烘湰妯℃嫙娴嬮噺閲忓湪鏁版嵁搴撲腑瀹氫綅 \note - 数据包括七组测量值 + 鏁版嵁鍖呮嫭涓冪粍娴嬮噺鍊 */ DBORIENTATION m_sAiDBOrientation[DEV_AI_MAXNUM]; /*! \var DEVPARAMDEF::m_sDiDBOrientation - \brief 基本模拟测量量在数据库中定位 + \brief 鍩烘湰妯℃嫙娴嬮噺閲忓湪鏁版嵁搴撲腑瀹氫綅 \note - 数据包括单点和双点遥信量 + 鏁版嵁鍖呮嫭鍗曠偣鍜屽弻鐐归仴淇¢噺 */ DBORIENTATION m_sDiDBOrientation; /*! \var DEVPARAMDEF::m_sPiDBOrientation - \brief 基本模拟测量量在数据库中定位 + \brief 鍩烘湰妯℃嫙娴嬮噺閲忓湪鏁版嵁搴撲腑瀹氫綅 */ DBORIENTATION m_sPiDBOrientation; /*! \var DEVPARAMDEF::m_sStepDBOrientation - \brief 步位置信息测量量在数据库中定位 + \brief 姝ヤ綅缃俊鎭祴閲忛噺鍦ㄦ暟鎹簱涓畾浣 \note - 数据写入模拟量数据库 + 鏁版嵁鍐欏叆妯℃嫙閲忔暟鎹簱 */ DBORIENTATION m_sStepDBOrientation; /*! \var DEVPARAMDEF::m_sYkDBOrientation - \brief 遥控信息量在数据库中定位 + \brief 閬ユ帶淇℃伅閲忓湪鏁版嵁搴撲腑瀹氫綅 \note - 数据不写入数据库 + 鏁版嵁涓嶅啓鍏ユ暟鎹簱 */ DBORIENTATION m_sYkDBOrientation; /*! \var DEVPARAMDEF::m_sSyncTimeInfo - \brief 时间同步信息 + \brief 鏃堕棿鍚屾淇℃伅 */ DBINFO m_sSyncTimeInfo; /*! \var DEVPARAMDEF::m_iProvAddr - \brief 转发保护地址 + \brief 杞彂淇濇姢鍦板潃 \note - 用于端口与单个装置的通讯 + 鐢ㄤ簬绔彛涓庡崟涓缃殑閫氳 \note - 取值范围:[-1, 非负整数]\n + 鍙栧艰寖鍥达細[-1, 闈炶礋鏁存暟]\n */ i_32 m_iProvAddr; /*! \var DEVPARAMDEF::m_u32FuncCode - \brief 保护命令功能码生成记忆 + \brief 淇濇姢鍛戒护鍔熻兘鐮佺敓鎴愯蹇 \note - 用于数据返回时,生成交互指令 + 鐢ㄤ簬鏁版嵁杩斿洖鏃讹紝鐢熸垚浜や簰鎸囦护 \note - 取值范围:hREADFIX : 读取定值\n - hREADFIXNO : 读取定值区号\n - hREADPAI : 读取保护模拟量\n - hREADPDI : 读取保护开关量\n - hREADPWAVE : 读取保护波形数据\n - hQUERYFAULT : 读取指定故障报告\n - hQUERYSELFCHECK : 读取指定的自检报告\n - hWRITEALLFIX : 修改保护定值\n - hWRITESPECIALFIX : 修改指定的保护定值\n - hWRITEFIXNO : 修改保护定值区\n - hRESETPROTECT : 保护信号复归\n - hCHECKTIME : 单个装置对时\n - hBROADCASTCHECKTIME : 保护装置广播对时\n - hCANCEL : 保护操作取消\n + 鍙栧艰寖鍥达細hREADFIX : 璇诲彇瀹氬糪n + hREADFIXNO : 璇诲彇瀹氬煎尯鍙穃n + hREADPAI : 璇诲彇淇濇姢妯℃嫙閲廫n + hREADPDI : 璇诲彇淇濇姢寮鍏抽噺\n + hREADPWAVE : 璇诲彇淇濇姢娉㈠舰鏁版嵁\n + hQUERYFAULT : 璇诲彇鎸囧畾鏁呴殰鎶ュ憡\n + hQUERYSELFCHECK : 璇诲彇鎸囧畾鐨勮嚜妫鎶ュ憡\n + hWRITEALLFIX : 淇敼淇濇姢瀹氬糪n + hWRITESPECIALFIX : 淇敼鎸囧畾鐨勪繚鎶ゅ畾鍊糪n + hWRITEFIXNO : 淇敼淇濇姢瀹氬煎尯\n + hRESETPROTECT : 淇濇姢淇″彿澶嶅綊\n + hCHECKTIME : 鍗曚釜瑁呯疆瀵规椂\n + hBROADCASTCHECKTIME : 淇濇姢瑁呯疆骞挎挱瀵规椂\n + hCANCEL : 淇濇姢鎿嶄綔鍙栨秷\n */ u_32 m_u32FuncCode; /*! \var DEVPARAMDEF::m_iYkStartPnt - \brief 遥控起始点号 + \brief 閬ユ帶璧峰鐐瑰彿 \note - 用于端口与单个装置的通讯 + 鐢ㄤ簬绔彛涓庡崟涓缃殑閫氳 \note - 取值范围:[-1, 非负整数]\n + 鍙栧艰寖鍥达細[-1, 闈炶礋鏁存暟]\n */ i_32 m_iYkStartPnt; /*! \var DEVPARAMDEF::m_iYtStartPnt - \brief 遥调起始点号 + \brief 閬ヨ皟璧峰鐐瑰彿 \note - 用于端口与单个装置的通讯 + 鐢ㄤ簬绔彛涓庡崟涓缃殑閫氳 \note - 取值范围:[-1, 非负整数]\n + 鍙栧艰寖鍥达細[-1, 闈炶礋鏁存暟]\n */ i_32 m_iYtStartPnt; BYTE m_u8SCN; /*! \var DEVPARAMDEF::m_u8CPUNo - \brief 当前CPU号 + \brief 褰撳墠CPU鍙 \note - 用于端口与单个装置的通讯 + 鐢ㄤ簬绔彛涓庡崟涓缃殑閫氳 \note - 取值范围:[1, ... ,255]\n + 鍙栧艰寖鍥达細[1, ... ,255]\n \note - 其中255为当前CPU号,对于多组定值来说,cpu号和组号一一对应\n + 鍏朵腑255涓哄綋鍓岰PU鍙,瀵逛簬澶氱粍瀹氬兼潵璇,cpu鍙峰拰缁勫彿涓涓瀵瑰簲\n */ BYTE m_u8CPUNo; /*! \var DEVPARAMDEF::m_u8FixNo - \brief 定值区号 + \brief 瀹氬煎尯鍙 \note - 用于端口与单个装置的通讯 + 鐢ㄤ簬绔彛涓庡崟涓缃殑閫氳 \note - 取值范围:[1, ... ,255]\n + 鍙栧艰寖鍥达細[1, ... ,255]\n \note - 其中255为当前定值区号 + 鍏朵腑255涓哄綋鍓嶅畾鍊煎尯鍙 */ BYTE m_u8FixNo; /*! \var DEVPARAMDEF::m_iFaultNo - \brief 故障序号 + \brief 鏁呴殰搴忓彿 \note - 仅用于扰动数据上送时 + 浠呯敤浜庢壈鍔ㄦ暟鎹笂閫佹椂 */ i_32 m_iFaultNo; }DEVPARAMDEF; /*! \struct PROVDEVPARAMDEF - \brief 设备结构 + \brief 璁惧缁撴瀯 - \par 快速参考 + \par 蹇熷弬鑰 buban103.h */ typedef struct { /*! \var DEVPARAMDEF::m_sProvGroupParam - \brief 转发组数据参数 + \brief 杞彂缁勬暟鎹弬鏁 \note - 仅用于转发组所有数据时,一帧无法完成的情况 + 浠呯敤浜庤浆鍙戠粍鎵鏈夋暟鎹椂锛屼竴甯ф棤娉曞畬鎴愮殑鎯呭喌 */ PROV_ALLITEMOFGROUPPARAM m_sProvGroupParam; /*! \var PROVDEVPARAMDEF::m_sProvSoe - \brief 转发SOE数据参数 + \brief 杞彂SOE鏁版嵁鍙傛暟 \note - 用于历史记录的转发事件 + 鐢ㄤ簬鍘嗗彶璁板綍鐨勮浆鍙戜簨浠 */ DEVPROVSOE m_sProvSoe; }PROVDEVPARAMDEF; typedef struct { - i_32 m_iCmdTimerCnt; //命令时间计数 - i_32 m_iCmdTimerConst; //命令时间常量 + i_32 m_iCmdTimerCnt; //鍛戒护鏃堕棿璁℃暟 + i_32 m_iCmdTimerConst; //鍛戒护鏃堕棿甯搁噺 } BUBAN103CMDDEF; -// wen 2003.10.27 保存扰动数据故障序号等参数 +// wen 2003.10.27 淇濆瓨鎵板姩鏁版嵁鏁呴殰搴忓彿绛夊弬鏁 typedef struct { - BYTE m_u8FUN; //功能类型(FUN) - BYTE m_u8Res1; //未用 - BYTE m_u8Res2; //未用 - BYTE m_u8TOV; //扰动值类型(TOV) - WORD m_wFAN; //故障序号(FAN) - WORD m_wNOF; //电网故障序号(NOF) - BYTE m_u8NOC; //通道数目 - WORD m_wNOE; //一个通道信息元素的数目 - WORD m_wINT; //信息元素间的间隔 - WORD m_wHour; //时 - WORD m_wMinute; //分 - WORD m_wSecond; //秒 - WORD m_wMilliseconds; //毫秒 - WORD m_wYear; //年 - WORD m_wMonth; //月 - WORD m_wDay; //日 - - BOOL m_bRecvRight; //接收是否正确 - - BYTE m_u8ACC; //通道号 - int m_iNum; //缓冲区psValue 数量 - int m_iDataNum; //缓冲区psValue 扰动值的数量 - short *m_pshValue; //扰动值 + BYTE m_u8FUN; //鍔熻兘绫诲瀷(FUN) + BYTE m_u8Res1; //鏈敤 + BYTE m_u8Res2; //鏈敤 + BYTE m_u8TOV; //鎵板姩鍊肩被鍨(TOV) + WORD m_wFAN; //鏁呴殰搴忓彿(FAN) + WORD m_wNOF; //鐢电綉鏁呴殰搴忓彿(NOF) + BYTE m_u8NOC; //閫氶亾鏁扮洰 + WORD m_wNOE; //涓涓氶亾淇℃伅鍏冪礌鐨勬暟鐩 + WORD m_wINT; //淇℃伅鍏冪礌闂寸殑闂撮殧 + WORD m_wHour; //鏃 + WORD m_wMinute; //鍒 + WORD m_wSecond; //绉 + WORD m_wMilliseconds; //姣 + WORD m_wYear; //骞 + WORD m_wMonth; //鏈 + WORD m_wDay; //鏃 + + BOOL m_bRecvRight; //鎺ユ敹鏄惁姝g‘ + + BYTE m_u8ACC; //閫氶亾鍙 + int m_iNum; //缂撳啿鍖簆sValue 鏁伴噺 + int m_iDataNum; //缂撳啿鍖簆sValue 鎵板姩鍊肩殑鏁伴噺 + short *m_pshValue; //鎵板姩鍊 } BUBAN103DISTURBANCEDEF; typedef struct tagDISTURBANCEDIDATA { - int m_iNo; // 序号 - int m_iNum; // 数量 + int m_iNo; // 搴忓彿 + int m_iNum; // 鏁伴噺 - int m_iTap; // 偏移 - BYTE m_u8Fun; // 功能类型 - BYTE m_u8Inf; // 信息序号 - short m_shValue; // 数值 + int m_iTap; // 鍋忕Щ + BYTE m_u8Fun; // 鍔熻兘绫诲瀷 + BYTE m_u8Inf; // 淇℃伅搴忓彿 + short m_shValue; // 鏁板 - struct tagDISTURBANCEDIDATA *m_psCurUse; // 正在使用的指针 - struct tagDISTURBANCEDIDATA *m_psRight; // 右指针 - struct tagDISTURBANCEDIDATA *m_psBottom; // 下指针 + struct tagDISTURBANCEDIDATA *m_psCurUse; // 姝e湪浣跨敤鐨勬寚閽 + struct tagDISTURBANCEDIDATA *m_psRight; // 鍙虫寚閽 + struct tagDISTURBANCEDIDATA *m_psBottom; // 涓嬫寚閽 }DISTURBANCEDIDATA, *pDISTURBANCEDIDATA; typedef struct tagDISTURBANCEAIDATA { - int m_iACCNo; // 通道号 - int m_iTOV; // 扰动值类型 - double m_dbRPV; // 额定一次值 - double m_dbRSV; // 额定二次值 - double m_dbfRFA; // 参比因子 - int m_iNOE; // 采样值数量 - int m_iNOC; // 模拟量数量 + int m_iACCNo; // 閫氶亾鍙 + int m_iTOV; // 鎵板姩鍊肩被鍨 + double m_dbRPV; // 棰濆畾涓娆″ + double m_dbRSV; // 棰濆畾浜屾鍊 + double m_dbfRFA; // 鍙傛瘮鍥犲瓙 + int m_iNOE; // 閲囨牱鍊兼暟閲 + int m_iNOC; // 妯℃嫙閲忔暟閲 - short *m_pshValue; // 模拟量值 + short *m_pshValue; // 妯℃嫙閲忓 }DISTURBANCEAIDATA, *pDISTURBANCEAIDATA; -/*应用服务数据单元的报文结构定义*/ +/*搴旂敤鏈嶅姟鏁版嵁鍗曞厓鐨勬姤鏂囩粨鏋勫畾涔*/ typedef struct { - //WORD m_wGIN; //通用分类标识序号 - BYTE m_u8Grp; //组号 - BYTE m_u8Itm; //条目号 - BYTE m_u8KOD; //类型描述 -}GEN_DATAGROUP; //通用分类数据组 + //WORD m_wGIN; //閫氱敤鍒嗙被鏍囪瘑搴忓彿 + BYTE m_u8Grp; //缁勫彿 + BYTE m_u8Itm; //鏉$洰鍙 + BYTE m_u8KOD; //绫诲瀷鎻忚堪 +}GEN_DATAGROUP; //閫氱敤鍒嗙被鏁版嵁缁 -//监视方向的应用服务数据单元结构 +//鐩戣鏂瑰悜鐨勫簲鐢ㄦ湇鍔℃暟鎹崟鍏冪粨鏋 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nDPI; //双点信息 - unsigned char nTIME[4]; //四个八位位组二进制时间 - unsigned char nSIN; //附加信息 -}MASDU1;//带时标的报文,nTYP=M_TM_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nDPI; //鍙岀偣淇℃伅 + unsigned char nTIME[4]; //鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 + unsigned char nSIN; //闄勫姞淇℃伅 +}MASDU1;//甯︽椂鏍囩殑鎶ユ枃锛宯TYP=M_TM_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nDPI; //双点信息 - unsigned short nRET; //相对时间 - unsigned short nFAN; //故障序号 - unsigned char nTIME[4]; //四个八位位组二进制时间 - unsigned char nSIN; //附加信息 -}MASDU2;//带相对时间的时标报文,nTYP=M_TMR_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nDPI; //鍙岀偣淇℃伅 + unsigned short nRET; //鐩稿鏃堕棿 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nTIME[4]; //鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 + unsigned char nSIN; //闄勫姞淇℃伅 +}MASDU2;//甯︾浉瀵规椂闂寸殑鏃舵爣鎶ユ枃锛宯TYP=M_TMR_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned short nMEA1; //B相电流 - unsigned short nMEA2; //AB相电压 - unsigned short nMEA3; //有功功率 - unsigned short nMEA4; //无功功率 -}MASDU3;//被测值I报文,nTYP=M_MEI_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned short nMEA1; //B鐩哥數娴 + unsigned short nMEA2; //AB鐩哥數鍘 + unsigned short nMEA3; //鏈夊姛鍔熺巼 + unsigned short nMEA4; //鏃犲姛鍔熺巼 +}MASDU3;//琚祴鍊糏鎶ユ枃锛宯TYP=M_MEI_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - u_32 nSCL; //短路位置 - unsigned short nRET; //相对时间 - unsigned short nFAN; //故障序号 - unsigned char nTIME[4]; //四个八位位组二进制时间 -}MASDU4;//带相对时间的有时标被测值报文,nTYP=M_TME_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + u_32 nSCL; //鐭矾浣嶇疆 + unsigned short nRET; //鐩稿鏃堕棿 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nTIME[4]; //鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 +}MASDU4;//甯︾浉瀵规椂闂寸殑鏈夋椂鏍囪娴嬪兼姤鏂囷紝nTYP=M_TME_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nCOL; //兼容级别 - unsigned char nASC[8]; //ASCII字符 - unsigned char nREV; //制造厂内部软件标识符,自由赋值 -}MASDU5;//标识报文,nTYP=M_IRC_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nCOL; //鍏煎绾у埆 + unsigned char nASC[8]; //ASCII瀛楃 + unsigned char nREV; //鍒堕犲巶鍐呴儴杞欢鏍囪瘑绗︼紝鑷敱璧嬪 +}MASDU5;//鏍囪瘑鎶ユ枃锛宯TYP=M_IRC_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned short nFAN; //故障序号 - unsigned char nTIME[7]; //七个八位位组二进制时间 -}MASDU6;//时间同步报文,nTYP=M_SYN_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nTIME[7]; //涓冧釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 +}MASDU6;//鏃堕棿鍚屾鎶ユ枃锛宯TYP=M_SYN_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nSCN; //扫描序号 -}MASDU8;//总查询(总召唤)终止报文,nTYP=M_TGI_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nSCN; //鎵弿搴忓彿 +}MASDU8;//鎬绘煡璇紙鎬诲彫鍞わ級缁堟鎶ユ枃锛宯TYP=M_TGI_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned short nMEA1; //A相电流Il1 - unsigned short nMEA2; //B相电流Il2 - unsigned short nMEA3; //C相电流Il3 - unsigned short nMEA4; //A相电压Ul1e - unsigned short nMEA5; //B相电压Ul2e - unsigned short nMEA6; //C相电压Ul3e - unsigned short nMEA7; //有功功率P - unsigned short nMEA8; //无功功率Q - unsigned short nMEA9; //频率f -}MASDU9;//被测值II报文,nTYP=M_MEII_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned short nMEA1; //A鐩哥數娴両l1 + unsigned short nMEA2; //B鐩哥數娴両l2 + unsigned short nMEA3; //C鐩哥數娴両l3 + unsigned short nMEA4; //A鐩哥數鍘婾l1e + unsigned short nMEA5; //B鐩哥數鍘婾l2e + unsigned short nMEA6; //C鐩哥數鍘婾l3e + unsigned short nMEA7; //鏈夊姛鍔熺巼P + unsigned short nMEA8; //鏃犲姛鍔熺巼Q + unsigned short nMEA9; //棰戠巼f +}MASDU9;//琚祴鍊糏I鎶ユ枃锛宯TYP=M_MEII_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nRII; //返回标识符 - unsigned char nNGD; //通用分类数据集数目 - unsigned char* nDATASET;//数据集 - //GEN_DATASET nDATASET[]; 数据集 -}MASDU10;//通用分类数据报文,nTYP=M_GD_N(T)A_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nRII; //杩斿洖鏍囪瘑绗 + unsigned char nNGD; //閫氱敤鍒嗙被鏁版嵁闆嗘暟鐩 + unsigned char* nDATASET;//鏁版嵁闆 + //GEN_DATASET nDATASET[]; 鏁版嵁闆 +}MASDU10;//閫氱敤鍒嗙被鏁版嵁鎶ユ枃锛宯TYP=M_GD_N(T)A_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nRII; //返回标识符 - unsigned char nGIN; //通用分类标识序号 - unsigned short nNDE; //描述元素的数目 - unsigned char* nDEL; //描述元素 - //GEN_DEL nDEL; //描述元素 -}MASDU11;//通用分类标识报文,nTYP=M_GI_N(T)A_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nRII; //杩斿洖鏍囪瘑绗 + unsigned char nGIN; //閫氱敤鍒嗙被鏍囪瘑搴忓彿 + unsigned short nNDE; //鎻忚堪鍏冪礌鐨勬暟鐩 + unsigned char* nDEL; //鎻忚堪鍏冪礌 + //GEN_DEL nDEL; //鎻忚堪鍏冪礌 +}MASDU11;//閫氱敤鍒嗙被鏍囪瘑鎶ユ枃锛宯TYP=M_GI_N(T)A_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用其值应为0 - unsigned char* nDATASET;//数据集 - //DIS_DATASET nDATASET[]; //数据集 -}MASDU23;//被记录扰动表报文,nTYP=M_LRD_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢ㄥ叾鍊煎簲涓0 + unsigned char* nDATASET;//鏁版嵁闆 + //DIS_DATASET nDATASET[]; //鏁版嵁闆 +}MASDU23;//琚褰曟壈鍔ㄨ〃鎶ユ枃锛宯TYP=M_LRD_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nRES; //保留值,未用 - unsigned char nTOV; //扰动值的类型 - unsigned short nFAN; //故障序号 - unsigned short nNOF; //电网故障序号 - unsigned char nNOC; //通道数目 - unsigned short nNOE; //一个通道信息元素的数目 - unsigned short nINT; //信息元素间的间隔 - unsigned char nTIME[4]; //四个八位位组二进制时间 -}MASDU26;//扰动数据传输准备就绪报文,nTYP=M_RTD_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned char nRES; //淇濈暀鍊硷紝鏈敤 + unsigned char nTOV; //鎵板姩鍊肩殑绫诲瀷 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned short nNOF; //鐢电綉鏁呴殰搴忓彿 + unsigned char nNOC; //閫氶亾鏁扮洰 + unsigned short nNOE; //涓涓氶亾淇℃伅鍏冪礌鐨勬暟鐩 + unsigned short nINT; //淇℃伅鍏冪礌闂寸殑闂撮殧 + unsigned char nTIME[4]; //鍥涗釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 +}MASDU26;//鎵板姩鏁版嵁浼犺緭鍑嗗灏辩华鎶ユ枃锛宯TYP=M_RTD_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nRES; //保留值,未用 - unsigned char nTOV; //扰动值类型 - unsigned short nFAN; //故障序号 - unsigned char nACC; //实际通道号 - u_32 nRPV; //一次额定值 - u_32 nRSV; //二次额定值 - u_32 nRFA; //参比因子 -}MASDU27;//被记录的通道传输就序报文,nTYP=M_RTC_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned char nRES; //淇濈暀鍊硷紝鏈敤 + unsigned char nTOV; //鎵板姩鍊肩被鍨 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nACC; //瀹為檯閫氶亾鍙 + u_32 nRPV; //涓娆¢瀹氬 + u_32 nRSV; //浜屾棰濆畾鍊 + u_32 nRFA; //鍙傛瘮鍥犲瓙 +}MASDU27;//琚褰曠殑閫氶亾浼犺緭灏卞簭鎶ユ枃锛宯TYP=M_RTC_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nRES1; //保留值1,未用 - unsigned char nRES2; //保留值2,未用 - unsigned char nRES3; //保留值3,未用 - unsigned short nFAN; //故障序号 -}MASDU28;//带标志的状态变位的传输准备就绪报文,nTYP=M_RTT_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿,鏈敤 + unsigned char nRES1; //淇濈暀鍊1锛屾湭鐢 + unsigned char nRES2; //淇濈暀鍊2锛屾湭鐢 + unsigned char nRES3; //淇濈暀鍊3锛屾湭鐢 + unsigned short nFAN; //鏁呴殰搴忓彿 +}MASDU28;//甯︽爣蹇楃殑鐘舵佸彉浣嶇殑浼犺緭鍑嗗灏辩华鎶ユ枃锛宯TYP=M_RTT_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned short nFAN; //故障序号 - unsigned char nNOT; //带标志的状态位的数目 - unsigned short nTAP; //标志的位置 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nNOT; //甯︽爣蹇楃殑鐘舵佷綅鐨勬暟鐩 + unsigned short nTAP; //鏍囧織鐨勪綅缃 struct{ - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nDPI; //双点信息 - } nSTATUS; //状态变位 -}MASDU29;//带标志的状态变位传输报文,nTYP=M_TOT_TA_3 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nDPI; //鍙岀偣淇℃伅 + } nSTATUS; //鐘舵佸彉浣 +}MASDU29;//甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈撴姤鏂囷紝nTYP=M_TOT_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nRES; //保留值,未用 - unsigned char nTOV; //扰动值类型 - unsigned short nFAN; //故障序号 - unsigned char nACC; //实际通道序号 - unsigned short nNDV; //每个应用服务数据单元有关扰动值的数目 - unsigned short nNFE; //每个应用服务数据单元的第一个信息元素的序号 - unsigned short* nSDV; //单个扰动值 -}MASDU30;//传输扰动值报文,nTYP=M_TOV_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned char nRES; //淇濈暀鍊硷紝鏈敤 + unsigned char nTOV; //鎵板姩鍊肩被鍨 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nACC; //瀹為檯閫氶亾搴忓彿 + unsigned short nNDV; //姣忎釜搴旂敤鏈嶅姟鏁版嵁鍗曞厓鏈夊叧鎵板姩鍊肩殑鏁扮洰 + unsigned short nNFE; //姣忎釜搴旂敤鏈嶅姟鏁版嵁鍗曞厓鐨勭涓涓俊鎭厓绱犵殑搴忓彿 + unsigned short* nSDV; //鍗曚釜鎵板姩鍊 +}MASDU30;//浼犺緭鎵板姩鍊兼姤鏂囷紝nTYP=M_TOV_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nTOO; //命令类型 - unsigned char nTOV; //扰动值类型 - unsigned short nFAN; //故障序号 - unsigned char nACC; //实际通道 -}MASDU31;//传输结束报文,nTYP=M_EOT_TA_3 - -//控制方向上的应用服务数据单元结构 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned char nTOO; //鍛戒护绫诲瀷 + unsigned char nTOV; //鎵板姩鍊肩被鍨 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nACC; //瀹為檯閫氶亾 +}MASDU31;//浼犺緭缁撴潫鎶ユ枃锛宯TYP=M_EOT_TA_3 + +//鎺у埗鏂瑰悜涓婄殑搴旂敤鏈嶅姟鏁版嵁鍗曞厓缁撴瀯 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nTIME[7]; //七个八位位组二进制时间 -}CASDU6;//时间同步报文,nTYP=C_SYN_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nTIME[7]; //涓冧釜鍏綅浣嶇粍浜岃繘鍒舵椂闂 +}CASDU6;//鏃堕棿鍚屾鎶ユ枃锛宯TYP=C_SYN_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nSCN; //扫描序号 -}CASDU7;//总查询(总召唤)启动报文,nTYP=C_IGI_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nSCN; //鎵弿搴忓彿 +}CASDU7;//鎬绘煡璇紙鎬诲彫鍞わ級鍚姩鎶ユ枃锛宯TYP=C_IGI_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nRII; //返回信息标识符 - unsigned char nNGD; //通用分类数据数目 - unsigned char* nDATASET; //通用分类数据集 - //GEN_DATASET nDATASET[]; //通用分类数据集 -}CASDU10;//通用分类数据报文,nTYP=C_GD_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 + unsigned char nNGD; //閫氱敤鍒嗙被鏁版嵁鏁扮洰 + unsigned char* nDATASET; //閫氱敤鍒嗙被鏁版嵁闆 + //GEN_DATASET nDATASET[]; //閫氱敤鍒嗙被鏁版嵁闆 +}CASDU10;//閫氱敤鍒嗙被鏁版嵁鎶ユ枃锛宯TYP=C_GD_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nDCO; //双命令 - unsigned char nRII; //返回信息标识符 -}CASDU20;//一般命令报文,nTYP=C_GRC_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nDCO; //鍙屽懡浠 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 +}CASDU20;//涓鑸懡浠ゆ姤鏂囷紝nTYP=C_GRC_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nRII; //返回信息标识符 - unsigned char nNOG; //通用分类标识数目 - GEN_DATAGROUP* nDATAGROUP; //数据集 -}CASDU21;//通用分类命令报文,nTYP=C_GC_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 + unsigned char nNOG; //閫氱敤鍒嗙被鏍囪瘑鏁扮洰 + GEN_DATAGROUP* nDATAGROUP; //鏁版嵁闆 +}CASDU21;//閫氱敤鍒嗙被鍛戒护鎶ユ枃锛宯TYP=C_GC_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nTOO; //命令类型 - unsigned char nTOV; //扰动值的类型 - unsigned short nFAN; //故障序号 - unsigned char nACC; //实际通道序号 -}CASDU24;//扰动数据传输的命令报文,nTYP=C_SYN_TA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned char nTOO; //鍛戒护绫诲瀷 + unsigned char nTOV; //鎵板姩鍊肩殑绫诲瀷 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nACC; //瀹為檯閫氶亾搴忓彿 +}CASDU24;//鎵板姩鏁版嵁浼犺緭鐨勫懡浠ゆ姤鏂囷紝nTYP=C_SYN_TA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号,未用 - unsigned char nTOO; //命令类型 - unsigned char nTOV; //扰动值的类型 - unsigned short nFAN; //故障序号 - unsigned char nACC; //实际通道号 -}CASDU25;//扰动数据传输的认可报文,nTYP=C_ADT_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿锛屾湭鐢 + unsigned char nTOO; //鍛戒护绫诲瀷 + unsigned char nTOV; //鎵板姩鍊肩殑绫诲瀷 + unsigned short nFAN; //鏁呴殰搴忓彿 + unsigned char nACC; //瀹為檯閫氶亾鍙 +}CASDU25;//鎵板姩鏁版嵁浼犺緭鐨勮鍙姤鏂囷紝nTYP=C_ADT_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nQCC; //电能脉冲计数量召唤命令的限定词 - unsigned char nRII; //返回信息标识符 -}CASDU88;//电能脉冲计数量的召唤命令,nTYP=C_CI_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nQCC; //鐢佃兘鑴夊啿璁℃暟閲忓彫鍞ゅ懡浠ょ殑闄愬畾璇 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 +}CASDU88;//鐢佃兘鑴夊啿璁℃暟閲忕殑鍙敜鍛戒护锛宯TYP=C_CI_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nDCC; //控制断路器 - unsigned char nRII; //返回信息标识符 -}CASDU64;//控制断路器命令,nTYP=C_DC_NA_3 / C_EXDC_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nDCC; //鎺у埗鏂矾鍣 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 +}CASDU64;//鎺у埗鏂矾鍣ㄥ懡浠わ紝nTYP=C_DC_NA_3 / C_EXDC_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nRCC; //升降命令 - unsigned char nRII; //返回信息标识符 -}CASDU65;//控制断路器命令,nTYP=C_RC_NA_3 / C_EXRC_NA_3 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nRCC; //鍗囬檷鍛戒护 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 +}CASDU65;//鎺у埗鏂矾鍣ㄥ懡浠わ紝nTYP=C_RC_NA_3 / C_EXRC_NA_3 typedef struct { - unsigned char nTYP; //类型标识 - unsigned char nVSQ; //可变结构限定词 - unsigned char nCOT; //传送原因 - unsigned char nADDR; //应用服务数据单元公共地址 - unsigned char nFUN; //功能类型 - unsigned char nINF; //信息序号 - unsigned char nCCC; //控制命令 - unsigned char nRII; //返回信息标识符 -}CASDU67;//控制断路器命令,nTYP=C_DC_NA_3 / C_EXDC_NA_3 - -/*链路层传输帧格式结构*/ -//控制方向 + unsigned char nTYP; //绫诲瀷鏍囪瘑 + unsigned char nVSQ; //鍙彉缁撴瀯闄愬畾璇 + unsigned char nCOT; //浼犻佸師鍥 + unsigned char nADDR; //搴旂敤鏈嶅姟鏁版嵁鍗曞厓鍏叡鍦板潃 + unsigned char nFUN; //鍔熻兘绫诲瀷 + unsigned char nINF; //淇℃伅搴忓彿 + unsigned char nCCC; //鎺у埗鍛戒护 + unsigned char nRII; //杩斿洖淇℃伅鏍囪瘑绗 +}CASDU67;//鎺у埗鏂矾鍣ㄥ懡浠わ紝nTYP=C_DC_NA_3 / C_EXDC_NA_3 + +/*閾捐矾灞備紶杈撳抚鏍煎紡缁撴瀯*/ +//鎺у埗鏂瑰悜 typedef struct { - unsigned char nSTART1;//启动字符=68H - unsigned char nLEN1;//帧长=控制域+地址域+用户数据区 - unsigned char nLEN2;//帧长=控制域+地址域+用户数据区 - unsigned char nSTART2;//启动字符=68H - unsigned char nCONTROL;//控制域 - unsigned char nADDR;//地址域 -}CLPDU_VARR;//控制方向上的链路规约数据单元结构,可变帧长 + unsigned char nSTART1;//鍚姩瀛楃=68H + unsigned char nLEN1;//甯ч暱=鎺у埗鍩+鍦板潃鍩+鐢ㄦ埛鏁版嵁鍖 + unsigned char nLEN2;//甯ч暱=鎺у埗鍩+鍦板潃鍩+鐢ㄦ埛鏁版嵁鍖 + unsigned char nSTART2;//鍚姩瀛楃=68H + unsigned char nCONTROL;//鎺у埗鍩 + unsigned char nADDR;//鍦板潃鍩 +}CLPDU_VARR;//鎺у埗鏂瑰悜涓婄殑閾捐矾瑙勭害鏁版嵁鍗曞厓缁撴瀯锛屽彲鍙樺抚闀 typedef struct{ - unsigned char nSTART;//启动字符=10H - unsigned char nCONTROL;//控制域 - unsigned char nADDR;//地址域 - unsigned char nCS;//帧效验和 - unsigned char nEnd;//结束字符=16H -}CLPDU_FIX;//控制方向上的链路规约数据单元结构,固定帧长 + unsigned char nSTART;//鍚姩瀛楃=10H + unsigned char nCONTROL;//鎺у埗鍩 + unsigned char nADDR;//鍦板潃鍩 + unsigned char nCS;//甯ф晥楠屽拰 + unsigned char nEnd;//缁撴潫瀛楃=16H +}CLPDU_FIX;//鎺у埗鏂瑰悜涓婄殑閾捐矾瑙勭害鏁版嵁鍗曞厓缁撴瀯锛屽浐瀹氬抚闀 typedef struct { /*! - \brief 初始化标志 + \brief 鍒濆鍖栨爣蹇 \note - =TRUE 收到结束帧 - =FALSE 未收到结束帧 - 第一次总查询结束后置位,以后保持不变 + =TRUE 鏀跺埌缁撴潫甯 + =FALSE 鏈敹鍒扮粨鏉熷抚 + 绗竴娆℃绘煡璇㈢粨鏉熷悗缃綅,浠ュ悗淇濇寔涓嶅彉 */ BOOL m_bInitdata; /*! - \brief 总召唤数据标识 + \brief 鎬诲彫鍞ゆ暟鎹爣璇 \note - =TRUE 总召唤数据结束,收到总召唤结束帧或者超时 - =FALSE 总召唤数据未结束 + =TRUE 鎬诲彫鍞ゆ暟鎹粨鏉,鏀跺埌鎬诲彫鍞ょ粨鏉熷抚鎴栬呰秴鏃 + =FALSE 鎬诲彫鍞ゆ暟鎹湭缁撴潫 */ BOOL m_bAllQueryOk; /*! - \brief 召唤计数,用于控制召唤不到期望的值时跳出死循环 + \brief 鍙敜璁℃暟锛岀敤浜庢帶鍒跺彫鍞や笉鍒版湡鏈涚殑鍊兼椂璺冲嚭姝诲惊鐜 */ u_32 m_u32CallCnt; /*! - \brief 返回码 + \brief 杩斿洖鐮 */ u_char m_u8RII; /*! - \brief 保存扰动数据故障序号等参数 + \brief 淇濆瓨鎵板姩鏁版嵁鏁呴殰搴忓彿绛夊弬鏁 */ BUBAN103DISTURBANCEDEF m_sDisturbanceParam; /*! - \brief 中间信息存储的临时文件名称 + \brief 涓棿淇℃伅瀛樺偍鐨勪复鏃舵枃浠跺悕绉 */ char m_chArrayTmpFileName[FILENAME_LEN]; /*! - \brief 设备定义,包括名称和地址 + \brief 璁惧瀹氫箟锛屽寘鎷悕绉板拰鍦板潃 */ DEVPARAMDEF m_sDevParam; }DEVDEF; @@ -1152,44 +1152,44 @@ typedef struct typedef struct tagPROVDEVDEF { /*! - \brief 设备定义,包括名称和地址 + \brief 璁惧瀹氫箟锛屽寘鎷悕绉板拰鍦板潃 */ //PROVDEVPARAMDEF m_sDevParam; /*! - \brief 总查询进行中(=TRUE) + \brief 鎬绘煡璇㈣繘琛屼腑(=TRUE) */ BOOL m_bProvQuery; i_32 m_iQueryPntNo; /*! - \brief 总查询进行步骤中 + \brief 鎬绘煡璇㈣繘琛屾楠や腑 */ i_32 m_iProvQueryStepWithASDU; /*! - \brief 产生Asdu5的原因 + \brief 浜х敓Asdu5鐨勫師鍥 */ i_32 m_iProvAsdu5Cause; /*! - \brief 装置的实际端口号 + \brief 瑁呯疆鐨勫疄闄呯鍙e彿 */ i_32 m_iRealCommid; /*! - \brief 装置的转发地址(唯一确定一个装置) + \brief 瑁呯疆鐨勮浆鍙戝湴鍧(鍞竴纭畾涓涓缃) */ i_32 m_iProvAddr; /*! - \brief 转发SOE数据参数 + \brief 杞彂SOE鏁版嵁鍙傛暟 \note - 用于历史记录的转发事件(应该是没有作用,已经遗弃) + 鐢ㄤ簬鍘嗗彶璁板綍鐨勮浆鍙戜簨浠(搴旇鏄病鏈変綔鐢紝宸茬粡閬楀純) */ DEVPROVSOE m_sProvSoe; /*! \var PROVDEVDEF::m_sProvGroupParam - \brief 转发组数据参数 + \brief 杞彂缁勬暟鎹弬鏁 \note - 仅用于转发组所有数据时,一帧无法完成的情况 + 浠呯敤浜庤浆鍙戠粍鎵鏈夋暟鎹椂锛屼竴甯ф棤娉曞畬鎴愮殑鎯呭喌 */ PROV_ALLITEMOFGROUPPARAM m_sProvGroupParam; @@ -1204,210 +1204,210 @@ typedef struct tagPROVDEVDEF SINGLELIST m_sBaoHuData; }PROVDEVDEF; -#define MAX_PROV_DEVICE_NUM 64 // 转发保护装置最大数量 +#define MAX_PROV_DEVICE_NUM 64 // 杞彂淇濇姢瑁呯疆鏈澶ф暟閲 -// wen 2005.10.08 修改控制字结构 +// wen 2005.10.08 淇敼鎺у埗瀛楃粨鏋 typedef struct tagBUBAN103LINKCTRL { /*! - \brief 从站初始化标志 + \brief 浠庣珯鍒濆鍖栨爣蹇 \note =1 ok =0 no */ BOOL m_bLinkOk; /*! - \brief 链接正常计数 + \brief 閾炬帴姝e父璁℃暟 */ u_32 m_u32LinkOkCnt; /*! - \brief 控制信息 + \brief 鎺у埗淇℃伅 */ u_char m_u8CtlByte; }BUBAN103LINKCTRL, *pBUBAN103LINKCTRL; -// wen 2003.10.27 增加全局参数定义 +// wen 2003.10.27 澧炲姞鍏ㄥ眬鍙傛暟瀹氫箟 typedef struct tagBUBAN103LINKDEF { /*! \var BUBAN103LINKDEF::m_szLinkName - \brief 链路名称 + \brief 閾捐矾鍚嶇О \note - 取值范围:[有效的ASCII码字符串,最大长度为64]\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负64]\n */ char m_szLinkName[66]; /*! - \brief 主站发送总召唤、通用分类总召唤标志 + \brief 涓荤珯鍙戦佹诲彫鍞ゃ侀氱敤鍒嗙被鎬诲彫鍞ゆ爣蹇 \note - 初始化时=FALSE,已发送命令后OK + 鍒濆鍖栨椂=FALSE锛屽凡鍙戦佸懡浠ゅ悗OK */ BOOL m_bRstLinkOk; /*! - \brief 是否转换到下一个装置 + \brief 鏄惁杞崲鍒颁笅涓涓缃 \note - 在装置总召唤完成后,是否指向下一个装置 + 鍦ㄨ缃诲彫鍞ゅ畬鎴愬悗锛屾槸鍚︽寚鍚戜笅涓涓缃 */ BOOL m_bGotoNext; /*! - \brief 从站初始化标志 + \brief 浠庣珯鍒濆鍖栨爣蹇 \note =1 ok =0 no */ BOOL *m_pbLinkOk; /*! - \brief 链接正常计数 + \brief 閾炬帴姝e父璁℃暟 */ u_32 *m_pu32LinkOkCnt; /*! - \brief 控制信息 + \brief 鎺у埗淇℃伅 */ u_char *m_pu8CtlByte; - // wen 2005.10.08 将以上3个动态分配成员指针修改为结构统一分配 + // wen 2005.10.08 灏嗕互涓3涓姩鎬佸垎閰嶆垚鍛樻寚閽堜慨鏀逛负缁撴瀯缁熶竴鍒嗛厤 //BUBAN103LINKCTRL *m_pLinkCtrl; /*! - \brief 超时时间间隔 + \brief 瓒呮椂鏃堕棿闂撮殧 */ u_32 m_u32TimeOutConst; /*! - \brief 当前指令索引 + \brief 褰撳墠鎸囦护绱㈠紩 */ short m_shCurCmdIdx; /*! - \brief 轮询指令生成时间 + \brief 杞鎸囦护鐢熸垚鏃堕棿 */ BUBAN103CMDDEF m_sArrayCmdTime[BUBAN103_TIMER_CMD_NUM]; /*! - 链路间隔装置数量 + 閾捐矾闂撮殧瑁呯疆鏁伴噺 */ i_32 m_iDevNum; /*! - 设备地址索引 + 璁惧鍦板潃绱㈠紩 */ i_32 m_iDevIdx; /*! - 一类数据的问询次数计算 + 涓绫绘暟鎹殑闂娆℃暟璁$畻 */ i_32 m_iQueryNum_CLASS1_Const; i_32 m_iQueryNum_CLASS1_Count; /*! - 一类数据已经查询地址,分时给别的装置查询数据 + 涓绫绘暟鎹凡缁忔煡璇㈠湴鍧锛屽垎鏃剁粰鍒殑瑁呯疆鏌ヨ鏁版嵁 */ i_32 m_iQueryedAddr_CLASS1; /*! \var BUBAN103LINKDEF::m_iProvAddrOffset - \brief 转发保护地址 + \brief 杞彂淇濇姢鍦板潃 \note - 用于端口与多个装置的通讯,总线方式 + 鐢ㄤ簬绔彛涓庡涓缃殑閫氳,鎬荤嚎鏂瑰紡 \note - 取值范围:[非负整数]\n + 鍙栧艰寖鍥达細[闈炶礋鏁存暟]\n */ i_32 m_iProvAddrOffset; /*! \var BUBAN103LINKDEF::m_iInputPort - \brief 输入厂站端口号 + \brief 杈撳叆鍘傜珯绔彛鍙 \note - 用于确定该厂站的通讯厂站端口 + 鐢ㄤ簬纭畾璇ュ巶绔欑殑閫氳鍘傜珯绔彛 \note - 取值范围:[非负整数]\n + 鍙栧艰寖鍥达細[闈炶礋鏁存暟]\n \note - 0为本厂站端口,其它数值为通讯厂站端口 + 0涓烘湰鍘傜珯绔彛锛屽叾瀹冩暟鍊间负閫氳鍘傜珯绔彛 */ i_32 m_iInputPort; /*! \var BUBAN103LINKDEF::m_chArrayTempletFileName[] - \brief 模板文件名称 + \brief 妯℃澘鏂囦欢鍚嶇О \note - 取值范围:[有效的ASCII码字符串,最大长度为256]\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负256]\n */ char m_chArrayTempletFileName[FILENAME_LEN]; - // wen 2004.01.15 增加链路地址以适用于ASDU与链路地址不同的情况 + // wen 2004.01.15 澧炲姞閾捐矾鍦板潃浠ラ傜敤浜嶢SDU涓庨摼璺湴鍧涓嶅悓鐨勬儏鍐 /*! \var BUBAN103LINKDEF::m_uchLinkAddr - \brief 链路地址 + \brief 閾捐矾鍦板潃 \note - 用于银山科技103子站 + 鐢ㄤ簬閾跺北绉戞妧103瀛愮珯 \note - 取值范围:[非负整数]\n + 鍙栧艰寖鍥达細[闈炶礋鏁存暟]\n */ BYTE m_uchLinkAddr; /*! \var BUBAN103LINKDEF::m_iMaskNoMatchString - \brief 屏蔽未配置事件点信息 + \brief 灞忚斀鏈厤缃簨浠剁偣淇℃伅 \note - 取值范围:[0---255]\n + 鍙栧艰寖鍥达細[0---255]\n */ i_32 m_iMaskNoMatchString; - // wen 2004.07.26 增加保护装置的状态处理 + // wen 2004.07.26 澧炲姞淇濇姢瑁呯疆鐨勭姸鎬佸鐞 /*! \var BUBAN103LINKDEF::m_iInputStationOfDevStatus - \brief 保护装置状态输入厂站端口号 + \brief 淇濇姢瑁呯疆鐘舵佽緭鍏ュ巶绔欑鍙e彿 \note - 取值范围:[ >= 0 ]\n + 鍙栧艰寖鍥达細[ >= 0 ]\n */ i_32 m_iInputStationOfDevStatus; /*! \var BUBAN103LINKDEF::m_iInputStartPntOfDevStatus - \brief 保护装置状态输入厂站起始点号 + \brief 淇濇姢瑁呯疆鐘舵佽緭鍏ュ巶绔欒捣濮嬬偣鍙 \note - 取值范围:[ >= 0 ]\n + 鍙栧艰寖鍥达細[ >= 0 ]\n */ i_32 m_iInputStartPntOfDevStatus; /*! \var BUBAN103LINKDEF::m_iJudgeAsduNo - \brief 是否判断asdu号 + \brief 鏄惁鍒ゆ柇asdu鍙 \note - 取值范围:[0---255]\n + 鍙栧艰寖鍥达細[0---255]\n */ i_32 m_iJudgeAsduNo; /*! \var BUBAN103LINKDEF::m_iDisTransDataProcess - \brief 是否处理扰动数据 + \brief 鏄惁澶勭悊鎵板姩鏁版嵁 \note - 取值范围:[0---255]\n + 鍙栧艰寖鍥达細[0---255]\n */ i_32 m_iDisTransDataProcess; /*! \var BUBAN103LINKDEF::m_psDev - \brief 该链路支持的装置指针 - \note 该成员动态分配,数量=m_iDevNum + \brief 璇ラ摼璺敮鎸佺殑瑁呯疆鎸囬拡 + \note 璇ユ垚鍛樺姩鎬佸垎閰嶏紝鏁伴噺=m_iDevNum */ DEVDEF *m_psDev; - // 以下为转发时用参数 + // 浠ヤ笅涓鸿浆鍙戞椂鐢ㄥ弬鏁 /*! \var BUBAN103LINKDEF::m_psProvDev - \brief 该链路支持的转发装置指针 - \note 该成员动态分配,数量=m_iDevNum + \brief 璇ラ摼璺敮鎸佺殑杞彂瑁呯疆鎸囬拡 + \note 璇ユ垚鍛樺姩鎬佸垎閰嶏紝鏁伴噺=m_iDevNum */ PROVDEVDEF *m_psProvDev; /*! \var BUBAN103LINKDEF::m_sBaoHuCmdParam - \brief 调度命令参数 - \note 用作数据的回馈时的处理 + \brief 璋冨害鍛戒护鍙傛暟 + \note 鐢ㄤ綔鏁版嵁鐨勫洖棣堟椂鐨勫鐞 */ BAOHUPROVPARAM m_sBaoHuCmdParam; } BUBAN103LINKDEF, *pBUBAN103LINKDEF; @@ -1416,51 +1416,51 @@ typedef struct tagBUBAN103PORTPARAM { /*! \var BUBAN103PORTDEF::m_iLinkNum - \brief 链路数量 + \brief 閾捐矾鏁伴噺 */ i_32 m_iLinkNum; /*! \var BUBAN103PORTDEF::m_achRecvBuf - \brief 接收数据缓冲区 + \brief 鎺ユ敹鏁版嵁缂撳啿鍖 \note - 缓冲区最大不超过 300 bytes\n + 缂撳啿鍖烘渶澶т笉瓒呰繃 300 bytes\n */ char m_achRecvBuf[300]; /*! \var BUBAN103PORTDEF::m_iRecvLen - \brief 接收数据长度 + \brief 鎺ユ敹鏁版嵁闀垮害 */ int m_iRecvLen; /*! \var BUBAN103PORTDEF::m_iLinkIdx - \brief 链路索引 + \brief 閾捐矾绱㈠紩 */ int m_iLinkIdx; /*! \var BUBAN103PORTDEF::m_iPortOk - \brief 端口ok + \brief 绔彛ok */ int m_iPortOk; /*! \var BUBAN103PORTDEF::m_bSendChangeDi - \brief 是否上送变化遥信 + \brief 鏄惁涓婇佸彉鍖栭仴淇 */ BOOL m_bSendChangeDi; /*! \var BUBAN103PORTDEF::m_psLink - \brief 端口支持的链路指针 - \note 该成员动态分配,数量=m_iLinkNum + \brief 绔彛鏀寔鐨勯摼璺寚閽 + \note 璇ユ垚鍛樺姩鎬佸垎閰嶏紝鏁伴噺=m_iLinkNum */ BUBAN103LINKDEF *m_psLink; /*! - \brief 该规约的端口数据指针 + \brief 璇ヨ绾︾殑绔彛鏁版嵁鎸囬拡 */ SIO_PARAM_BAOHU_DEF *m_psBaoHu; }BUBAN103PORTPARAM, *pBUBAN103PORTPARAM; @@ -1471,22 +1471,22 @@ typedef struct tagVALUEDEF { /*! \var VALUE::m_uValue - \brief 无符号长整型 + \brief 鏃犵鍙烽暱鏁村瀷 */ u_32 m_uValue; /*! \var VALUE::m_iValue - \brief 整型 + \brief 鏁村瀷 */ i_32 m_iValue; /*! \var VALUE::m_fValue - \brief 浮点数 + \brief 娴偣鏁 */ double m_fValue; /*! \var VALUE::m_dwValue - \brief 双字 + \brief 鍙屽瓧 */ DWORD m_dwValue; @@ -1494,100 +1494,100 @@ typedef struct tagVALUEDEF /*! \var VALUEDEF::m_szValue - \brief 字符串 + \brief 瀛楃涓 */ char m_szValue[MAXSTRINGLEN]; /*! \var VALUEDEF::m_iDataType - \brief 数据类型 - \note 取值范围如下\ - =0, 全无效\ - =1, 无符号整型\ - =2, 整型数\ - =3, 浮点数\ - =4, 字符串\ - =5, 数字量\ - =6, 控制字 + \brief 鏁版嵁绫诲瀷 + \note 鍙栧艰寖鍥村涓媆 + =0, 鍏ㄦ棤鏁圽 + =1, 鏃犵鍙锋暣鍨媆 + =2, 鏁村瀷鏁癨 + =3, 娴偣鏁癨 + =4, 瀛楃涓瞈 + =5, 鏁板瓧閲廫 + =6, 鎺у埗瀛 */ i_32 m_iDataType; /*! \var VALUEDEF::m_iDataNum - \brief 数字量占用位数 - \note 仅对数字量和控制字和字符串有效 + \brief 鏁板瓧閲忓崰鐢ㄤ綅鏁 + \note 浠呭鏁板瓧閲忓拰鎺у埗瀛楀拰瀛楃涓叉湁鏁 */ i_32 m_iDataNum; }VALUEDEF, *pVALUEDEF; -/////////////////////////以下为通用函数接口/////////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鎺ュ彛/////////////////////////// /*! - \brief 读取配置函数 - \param commid -- 端口号 + \brief 璇诲彇閰嶇疆鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban103ReadConfig(int commid); // 初始化处理 +void Buban103ReadConfig(int commid); // 鍒濆鍖栧鐞 /*! - \brief 读取端口数据函数 - \param commid -- 端口号 + \brief 璇诲彇绔彛鏁版嵁鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void Buban103RecvData(int commid, u_char *buf, int len);// 规约读数据处理 +void Buban103RecvData(int commid, u_char *buf, int len);// 瑙勭害璇绘暟鎹鐞 /*! - \brief 规约数据处理定时器函数 - \param commid -- 端口号 + \brief 瑙勭害鏁版嵁澶勭悊瀹氭椂鍣ㄥ嚱鏁 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban103Timer(int commid); // 定时器处理 +void Buban103Timer(int commid); // 瀹氭椂鍣ㄥ鐞 /*! - \brief 遥控遥调数据处理函数 - \param commid -- 端口号 + \brief 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void Buban103YkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理 +void Buban103YkYtProcess(int commid, u_char *buf, int len); // 閬ユ帶閬ヨ皟澶勭悊 /*! - \brief 系统下发对时函数 - \param commid -- 端口号 + \brief 绯荤粺涓嬪彂瀵规椂鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban103SendSystemTime(int commid); // 系统对时 +void Buban103SendSystemTime(int commid); // 绯荤粺瀵规椂 /*! - \brief 系统退出时规约处理函数 - \param commid -- 端口号 + \brief 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban103Exit(int commid); // 规约退出 +void Buban103Exit(int commid); // 瑙勭害閫鍑 /*! - \brief 保护命令处理函数 - \param commid -- 端口号 - \param rtumsg -- 下发的保护命令指针 + \brief 淇濇姢鍛戒护澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 + \param rtumsg -- 涓嬪彂鐨勪繚鎶ゅ懡浠ゆ寚閽 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData); /*! - \brief 取保护数据库指针函数 - \param commid -- 端口号 - \param iProvAddr -- 统一编排的保护转发地址 - \param ppBaoHuDB -- 存放保护数据指针的指针 - \retval -- 返回该装置保护数据组数 + \brief 鍙栦繚鎶ゆ暟鎹簱鎸囬拡鍑芥暟 + \param commid -- 绔彛鍙 + \param iProvAddr -- 缁熶竴缂栨帓鐨勪繚鎶よ浆鍙戝湴鍧 + \param ppBaoHuDB -- 瀛樻斁淇濇姢鏁版嵁鎸囬拡鐨勬寚閽 + \retval -- 杩斿洖璇ヨ缃繚鎶ゆ暟鎹粍鏁 */ int Buban103GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB); -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// -/////////////////////////以下为通用函数支持接口///////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鏀寔鎺ュ彛///////////////////////// void Buban103ProvMakeYkYtCommand(int commid, u_char *buf, int len); -/////////////////////////通用函数支持接口结束/////////////////////////// +/////////////////////////閫氱敤鍑芥暟鏀寔鎺ュ彛缁撴潫/////////////////////////// -///////////////////////////以下为配置函数接口/////////////////////////// +///////////////////////////浠ヤ笅涓洪厤缃嚱鏁版帴鍙/////////////////////////// BOOL InitBuban103InfoFromTempletFile(int commid,\ char *ptrTemplate,\ BUBAN103LINKDEF *psLink); @@ -1618,17 +1618,17 @@ void InitBuban103LinkCmdBuf(BUBAN103LINKDEF *psLinkParam); void InitBuban103DevCmdBuf(BUBAN103LINKDEF *psLinkParam, int iDevNo); void ReCalcDevPntStart(int commid, BUBAN103PORTPARAM *psPortParam); -/////////////////////////////配置函数接口结束/////////////////////////// +/////////////////////////////閰嶇疆鍑芥暟鎺ュ彛缁撴潫/////////////////////////// -/////////////////////以下为POLLING规约常规函数接口////////////////////// +/////////////////////浠ヤ笅涓篜OLLING瑙勭害甯歌鍑芥暟鎺ュ彛////////////////////// void Buban103FindNextCmd(int commid); BOOL Buban103FindNextCmdEx(int commid); void Buban103CalcNextDev(int commid, BOOL bFlag); void Buban103SendCmdFormPollCmdBuf(int commid); -//////////////////////POLLING规约常规函数接口结束/////////////////////// +//////////////////////POLLING瑙勭害甯歌鍑芥暟鎺ュ彛缁撴潫/////////////////////// -/////////////////////////buban103公共函数接口/////////////////////////// +/////////////////////////buban103鍏叡鍑芥暟鎺ュ彛/////////////////////////// BOOL IsDevLinkOk(BUBAN103LINKDEF *psLinkParam, int iDevNo); void ClearLinkCnt(BUBAN103LINKDEF *psLinkParam, int iDevNo); void SetDevLinkOk(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bFlagOk); @@ -1654,591 +1654,591 @@ BOOL GetPortParamPtr(int commid, BUBAN103PORTPARAM **ppsPortParam); BOOL GetOneValueOfASDU10(BYTE *pu8SourData, VALUEDEF *psValue, BYTE u8DataType, BYTE u8DataLen); int FindAiGroupIdx(DBORIENTATION *pAiDB, int iMaxNum, BYTE u8Asdu, BYTE u8Fun, BYTE u8Inf); -/////////////////////////buban103公共函数接口结束/////////////////////// +/////////////////////////buban103鍏叡鍑芥暟鎺ュ彛缁撴潫/////////////////////// -//===========================以下为指令生成函数======================= -//生成 Buban103 命令? +//===========================浠ヤ笅涓烘寚浠ょ敓鎴愬嚱鏁======================= +//鐢熸垚 Buban103 鍛戒护? void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, u_char* msg, u_32 len, u_32 cmdtype); -//生成时间同步命令 +//鐢熸垚鏃堕棿鍚屾鍛戒护 void MakeTimeSyn_CAsdu6(u_32 commid, CMDPARAM *psCmdParam); -//生成总查询启动命令 +//鐢熸垚鎬绘煡璇㈠惎鍔ㄥ懡浠 void MakeAllQuery_CAsdu7(u_32 commid, CMDPARAM *psCmdParam); -//生成通用分类数据命令 +//鐢熸垚閫氱敤鍒嗙被鏁版嵁鍛戒护 void MakeGenIdentData_CAsdu10(u_32 commid, CMDPARAM *psCmdParam, u_char *dataset, u_char ngd); void MakeGenIdentData_CAsdu10Ex(u_32 commid, CMDPARAM *psCmdParam, u_char *dataset, u_char ngd, u_32 cmdtype); -//生成一般命令 +//鐢熸垚涓鑸懡浠 void MakeGenCommand_CAsdu20(u_32 commid, CMDPARAM *psCmdParam, bool cmd); -//生成通用分类命令 +//鐢熸垚閫氱敤鍒嗙被鍛戒护 void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam, GEN_DATAGROUP* datagroup, u_char nog); -//生成扰动数据传输命令 +//鐢熸垚鎵板姩鏁版嵁浼犺緭鍛戒护 void MakeDisTrans_CAsdu24(u_32 commid, CMDPARAM *psCmdParam, u_char too, u_char tov, u_short fan, u_char acc); -//生成扰动数据传输的认可命令 +//鐢熸垚鎵板姩鏁版嵁浼犺緭鐨勮鍙懡浠 void MakeDisTrans_CAsdu25(u_32 commid, CMDPARAM *psCmdParam, u_char too, u_char tov, u_short fan, u_char acc); -//生成脉冲电度的查询命令 +//鐢熸垚鑴夊啿鐢靛害鐨勬煡璇㈠懡浠 void MakeQCC_CAsdu88(u_32 commid, CMDPARAM *psCmdParam); -//Buban103 生成一类数据问询指令 +//Buban103 鐢熸垚涓绫绘暟鎹棶璇㈡寚浠 void MakeBuban103_PL1_NA_3_Cmd(int commid, DEVADDRPARAM *psAddrParam); /*! - \brief 生成标准的103定时轮询指令 - \param commid -- 厂站端口号 - \param iBuIdx -- 保护装置(间隔)索引 - \param CmdIdx -- 指令索引号 + \brief 鐢熸垚鏍囧噯鐨103瀹氭椂杞鎸囦护 + \param commid -- 鍘傜珯绔彛鍙 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \param CmdIdx -- 鎸囦护绱㈠紩鍙 \sa - \ref 0 时间同步过程 - \ref 1 模拟量查询 - \ref 2 状态量查询 + \ref 0 鏃堕棿鍚屾杩囩▼ + \ref 1 妯℃嫙閲忔煡璇 + \ref 2 鐘舵侀噺鏌ヨ - \retval 指令生成成功标识 + \retval 鎸囦护鐢熸垚鎴愬姛鏍囪瘑 \note - 无\n + 鏃燶n */ void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdIdx); -//===========================指令生成函数结束========================= +//===========================鎸囦护鐢熸垚鍑芥暟缁撴潫========================= -///////////////////////以下为规约处理函数接口/////////////////////////// +///////////////////////浠ヤ笅涓鸿绾﹀鐞嗗嚱鏁版帴鍙/////////////////////////// void Buban103ProcessData(int commid, BUBAN103PORTPARAM *psPortParam, BOOL bProcess); void Buban103shortprocess(RTUMSG *rtumsg); void Buban103longprocess(RTUMSG *rtumsg); -// wen 2003.10.27 增加函数 -// 其他报文数据处理开始 -// 带时标的报文 +// wen 2003.10.27 澧炲姞鍑芥暟 +// 鍏朵粬鎶ユ枃鏁版嵁澶勭悊寮濮 +// 甯︽椂鏍囩殑鎶ユ枃 void Buban103TMprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标的报文 +// 甯︽椂鏍囩殑鎶ユ枃 void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标的报文 +// 甯︽椂鏍囩殑鎶ユ枃 //void Buban103TMprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带相对时间的时标报文 +// 甯︾浉瀵规椂闂寸殑鏃舵爣鎶ユ枃 void Buban103TMRprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带相对时间的时标报文 +// 甯︾浉瀵规椂闂寸殑鏃舵爣鎶ユ枃 void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带相对时间的时标报文 +// 甯︾浉瀵规椂闂寸殑鏃舵爣鎶ユ枃 //void Buban103TMRprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值I报文 +// 琚祴鍊糏鎶ユ枃 void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带相对时间的有时标的被测值报文 +// 甯︾浉瀵规椂闂寸殑鏈夋椂鏍囩殑琚祴鍊兼姤鏂 void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 标识报文 +// 鏍囪瘑鎶ユ枃 void Buban103IRCprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值II报文 +// 琚祴鍊糏I鎶ユ枃 void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值III报文 +// 琚祴鍊糏II鎶ユ枃 void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值IV报文 +// 琚祴鍊糏V鎶ユ枃 void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值V报文 +// 琚祴鍊糣鎶ユ枃 void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值VI报文 +// 琚祴鍊糣I鎶ユ枃 void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 被测值VII报文 +// 琚祴鍊糣II鎶ユ枃 void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 步位置信息报文 +// 姝ヤ綅缃俊鎭姤鏂 void Buban103STNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 单点信息状态帧 +// 鍗曠偣淇℃伅鐘舵佸抚 void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标单点信息状态帧 +// 甯︽椂鏍囧崟鐐逛俊鎭姸鎬佸抚 void Buban103SPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标单点信息状态帧 +// 甯︽椂鏍囧崟鐐逛俊鎭姸鎬佸抚 void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标单点信息状态帧 +// 甯︽椂鏍囧崟鐐逛俊鎭姸鎬佸抚 //void Buban103SPTAprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 双点信息状态帧 +// 鍙岀偣淇℃伅鐘舵佸抚 void Buban103DPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标双点信息状态帧 +// 甯︽椂鏍囧弻鐐逛俊鎭姸鎬佸抚 void Buban103DPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标双点信息状态帧 +// 甯︽椂鏍囧弻鐐逛俊鎭姸鎬佸抚 void Buban103DPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标双点信息状态帧 +// 甯︽椂鏍囧弻鐐逛俊鎭姸鎬佸抚 //void Buban103DPTAprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 单点状态和状态变化信息状态帧 +// 鍗曠偣鐘舵佸拰鐘舵佸彉鍖栦俊鎭姸鎬佸抚 void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标单点状态和状态变化信息状态帧 +// 甯︽椂鏍囧崟鐐圭姸鎬佸拰鐘舵佸彉鍖栦俊鎭姸鎬佸抚 void Buban103SSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 双点状态和状态变化信息状态帧 +// 鍙岀偣鐘舵佸拰鐘舵佸彉鍖栦俊鎭姸鎬佸抚 void Buban103DSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 带时标双点状态和状态变化信息状态帧 +// 甯︽椂鏍囧弻鐐圭姸鎬佸拰鐘舵佸彉鍖栦俊鎭姸鎬佸抚 void Buban103DSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 水位 +// 姘翠綅 void Buban103WLTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 电能脉冲计数值 +// 鐢佃兘鑴夊啿璁℃暟鍊 void Buban103ITNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 通用分类数据报文 +// 閫氱敤鍒嗙被鏁版嵁鎶ユ枃 void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 遥控命令应答 +// 閬ユ帶鍛戒护搴旂瓟 void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 遥调命令应答 +// 閬ヨ皟鍛戒护搴旂瓟 void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 通用分类数据报文模拟量处理 - \param rtumsg -- 数据源缓冲区 - \param psDevAddrParam -- 保护装置地址参数指针 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃妯℃嫙閲忓鐞 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param psDevAddrParam -- 淇濇姢瑁呯疆鍦板潃鍙傛暟鎸囬拡 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); /*! - \brief 通用分类数据报文开关量处理 - \param rtumsg -- 数据源缓冲区 - \param iBuIdx -- 保护装置(间隔)索引 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃寮鍏抽噺澶勭悊 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); /*! - \brief 通用分类数据报文电度量处理 - \param rtumsg -- 数据源缓冲区 - \param iBuIdx -- 保护装置(间隔)索引 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃鐢靛害閲忓鐞 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); /*! - \brief 通用分类数据报文保护模拟量处理 - \param rtumsg -- 数据源缓冲区 - \param iBuIdx -- 保护装置(间隔)索引 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃淇濇姢妯℃嫙閲忓鐞 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); /*! - \brief 通用分类数据报文保护开关量处理 - \param rtumsg -- 数据源缓冲区 - \param iBuIdx -- 保护装置(间隔)索引 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃淇濇姢寮鍏抽噺澶勭悊 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithPDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); /*! - \brief 通用分类数据报文保护定值处理 - \param rtumsg -- 数据源缓冲区 - \param iBuIdx -- 保护装置(间隔)索引 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃淇濇姢瀹氬煎鐞 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); //void Buban103GDprocessWithPFIXNew(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); //void Buban103GDprocessWithPFIXNewEx(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); /*! - \brief 通用分类数据报文保护事件处理 - \param rtumsg -- 数据源缓冲区 - \param iBuIdx -- 保护装置(间隔)索引 + \brief 閫氱敤鍒嗙被鏁版嵁鎶ユ枃淇濇姢浜嬩欢澶勭悊 + \param rtumsg -- 鏁版嵁婧愮紦鍐插尯 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 \note - 取值范围:0 -- MAX_POLL_ADDRESS_NUM-1\n - \param iGroupIdx -- 通用分类数据组索引 + 鍙栧艰寖鍥达細0 -- MAX_POLL_ADDRESS_NUM-1\n + \param iGroupIdx -- 閫氱敤鍒嗙被鏁版嵁缁勭储寮 \note - 取值范围:0 -- GROUPNUM-1\n + 鍙栧艰寖鍥达細0 -- GROUPNUM-1\n */ void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); -// 通用分类标识报文 +// 閫氱敤鍒嗙被鏍囪瘑鎶ユ枃 void Buban103GIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 对时程序 +// 瀵规椂绋嬪簭 void Buban103SynTime(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 电度数据处理(SIEMENS 公司保护专用) +// 鐢靛害鏁版嵁澶勭悊(SIEMENS 鍏徃淇濇姢涓撶敤) void Buban103EXPIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); -// 其他报文数据处理结束 +// 鍏朵粬鎶ユ枃鏁版嵁澶勭悊缁撴潫 -// 扰动数据处理开始 -// 扰动数据表处理 +// 鎵板姩鏁版嵁澶勭悊寮濮 +// 鎵板姩鏁版嵁琛ㄥ鐞 void Buban103LRDprocess(RTUMSG *rtumsg); -// 扰动数据传输准备就绪 +// 鎵板姩鏁版嵁浼犺緭鍑嗗灏辩华 void Buban103RTDprocess(RTUMSG *rtumsg); -// 带标志的状态变位传输准备就绪 +// 甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈撳噯澶囧氨缁 void Buban103RTTprocess(RTUMSG *rtumsg); -// 带标志的状态变位传输 +// 甯︽爣蹇楃殑鐘舵佸彉浣嶄紶杈 void Buban103TOTprocess(RTUMSG *rtumsg); -// 被记录的通道传输准备就绪 +// 琚褰曠殑閫氶亾浼犺緭鍑嗗灏辩华 void Buban103RTCprocess(RTUMSG *rtumsg); -// 传送扰动值 +// 浼犻佹壈鍔ㄥ void Buban103TOVprocess(RTUMSG *rtumsg); -// 带标志的状态变位、通道、扰动数据传输结束 +// 甯︽爣蹇楃殑鐘舵佸彉浣嶃侀氶亾銆佹壈鍔ㄦ暟鎹紶杈撶粨鏉 void Buban103EOTprocess(RTUMSG *rtumsg); -// 扰动数据处理结束 +// 鎵板姩鏁版嵁澶勭悊缁撴潫 -// 写通道扰动数据到文件中 +// 鍐欓氶亾鎵板姩鏁版嵁鍒版枃浠朵腑 BOOL Buban103WriteACCDatatoFile(RTUMSG *rtumsg); -// 读录波数据文件头 +// 璇诲綍娉㈡暟鎹枃浠跺ご void Buban103GetFileHead(char *ptrDataHead, size_t *piNOF, size_t *piNOC, size_t *piNOE, size_t *piINT); -// 读录波数据记录时间 +// 璇诲綍娉㈡暟鎹褰曟椂闂 //void Buban103GetTime(char *ptrDataHead, SYSTEMTIME *ptrtm); -// 读录波数据模拟量头 +// 璇诲綍娉㈡暟鎹ā鎷熼噺澶 void Buban103ProcessAiHead(char *ptrDataHead, DISTURBANCEAIDATA *pAiData); -// 转换临时文件为可用文件 +// 杞崲涓存椂鏂囦欢涓哄彲鐢ㄦ枃浠 void Buban103tmpFileChangetodatFile(char *sztmpFileName); -// 生成CFG文件 +// 鐢熸垚CFG鏂囦欢 //void Buban103MakeCFGFile(int iStationNo, pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp, char *szInfFile, SYSTEMTIME *tm); -// 生成DAT文件 +// 鐢熸垚DAT鏂囦欢 void Buban103MakeDATFile(pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp); -// 转发函数处理 +// 杞彂鍑芥暟澶勭悊 /*! - \brief 插入SOE数据 - \param commid -- 厂站端口号 - \param selidx -- 端口索引号 - \param iBuIdx -- 保护装置(间隔)索引 - \param pSoeMsg -- SOE数据指针 - \retval 插入SOE数据时是否覆盖(缓冲区是否已满) + \brief 鎻掑叆SOE鏁版嵁 + \param commid -- 鍘傜珯绔彛鍙 + \param selidx -- 绔彛绱㈠紩鍙 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \param pSoeMsg -- SOE鏁版嵁鎸囬拡 + \retval 鎻掑叆SOE鏁版嵁鏃舵槸鍚﹁鐩(缂撳啿鍖烘槸鍚﹀凡婊) \note - 无\n + 鏃燶n */ BOOL ProvInsertSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg); /*! - \brief 从缓冲区取并且删除SOE数据 - \param commid -- 厂站端口号 - \param selidx -- 端口索引号 - \param iBuIdx -- 保护装置(间隔)索引 - \param pSoeMsg -- SOE数据指针 - \retval 获取SOE数据是否成功 + \brief 浠庣紦鍐插尯鍙栧苟涓斿垹闄OE鏁版嵁 + \param commid -- 鍘傜珯绔彛鍙 + \param selidx -- 绔彛绱㈠紩鍙 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \param pSoeMsg -- SOE鏁版嵁鎸囬拡 + \retval 鑾峰彇SOE鏁版嵁鏄惁鎴愬姛 \note - 无\n + 鏃燶n */ BOOL ProvGetAndDelSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg); /*! - \brief 从缓冲区取第X项SOE数据 - \param commid -- 厂站端口号 - \param psDevAddrParam -- 端口索引号 - \param iNo -- 第i个soe记录 + \brief 浠庣紦鍐插尯鍙栫X椤筍OE鏁版嵁 + \param commid -- 鍘傜珯绔彛鍙 + \param psDevAddrParam -- 绔彛绱㈠紩鍙 + \param iNo -- 绗琲涓猻oe璁板綍 \note - iNo=0为最新的事件记录,1为次之,以此类推 - \param pSoeMsg -- SOE数据指针 - \retval 获取SOE数据是否成功 + iNo=0涓烘渶鏂扮殑浜嬩欢璁板綍锛1涓烘涔嬶紝浠ユ绫绘帹 + \param pSoeMsg -- SOE鏁版嵁鎸囬拡 + \retval 鑾峰彇SOE鏁版嵁鏄惁鎴愬姛 \note - 无\n + 鏃燶n */ BOOL ProvGetNoXSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, int iNo, SOE_DEF *pSoeMsg); /*! - \brief 是否有一类数据存在 - \param commid -- 厂站端口号 - \param iBuIdx -- 保护装置(间隔)索引 - \param bCheckDiChange -- 检测遥信变位标识 - \retval 一类数据存在标识 + \brief 鏄惁鏈変竴绫绘暟鎹瓨鍦 + \param commid -- 鍘傜珯绔彛鍙 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \param bCheckDiChange -- 妫娴嬮仴淇″彉浣嶆爣璇 + \retval 涓绫绘暟鎹瓨鍦ㄦ爣璇 \note - 无\n + 鏃燶n */ BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiChange); /*! - \brief 转发初始化 - \param commid -- 厂站端口号 - \retval 无 + \brief 杞彂鍒濆鍖 + \param commid -- 鍘傜珯绔彛鍙 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvInit(u_32 commid); /*! - \brief 转发链路指令的生成 - \param commid -- 厂站端口号 - \param addr -- 间隔设备地址 - \param cmdidx -- 指令索引号 - \param bACD -- 一类数据存在标识 - \retval 无 + \brief 杞彂閾捐矾鎸囦护鐨勭敓鎴 + \param commid -- 鍘傜珯绔彛鍙 + \param addr -- 闂撮殧璁惧鍦板潃 + \param cmdidx -- 鎸囦护绱㈠紩鍙 + \param bACD -- 涓绫绘暟鎹瓨鍦ㄦ爣璇 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD); /*! - \brief 转发链路指令的生成 - \param commid -- 厂站端口号 - \param addr -- 间隔设备地址 - \param cmdidx -- 指令索引号 - \param bACD -- 一类数据存在标识 - \param bClearRecvBuf -- 是否清除接收缓冲区 - \param cmdtype-- 指令缓冲区类型 - \retval 无 + \brief 杞彂閾捐矾鎸囦护鐨勭敓鎴 + \param commid -- 鍘傜珯绔彛鍙 + \param addr -- 闂撮殧璁惧鍦板潃 + \param cmdidx -- 鎸囦护绱㈠紩鍙 + \param bACD -- 涓绫绘暟鎹瓨鍦ㄦ爣璇 + \param bClearRecvBuf -- 鏄惁娓呴櫎鎺ユ敹缂撳啿鍖 + \param cmdtype-- 鎸囦护缂撳啿鍖虹被鍨 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvMakeLinkCommandEx(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD, BOOL bClearRecvBuf, u_32 cmdtype); /*! - \brief 转发数据指令的生成 - \param commid -- 厂站端口号 - \param addr -- 间隔设备地址 - \param cmdidx -- 指令索引号 - \param bACD -- 一类数据存在标识 - \param bCause -- 传送原因 - \param cmdtype-- 指令缓冲区类型 - \retval 无 + \brief 杞彂鏁版嵁鎸囦护鐨勭敓鎴 + \param commid -- 鍘傜珯绔彛鍙 + \param addr -- 闂撮殧璁惧鍦板潃 + \param cmdidx -- 鎸囦护绱㈠紩鍙 + \param bACD -- 涓绫绘暟鎹瓨鍦ㄦ爣璇 + \param bCause -- 浼犻佸師鍥 + \param cmdtype-- 鎸囦护缂撳啿鍖虹被鍨 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, u_char cmdidx, BOOL bACD, BYTE bCause, u_32 cmdtype); /*! - \brief 转发命令处理 - \param portidx -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \retval 无 + \brief 杞彂鍛戒护澶勭悊 + \param portidx -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvRtuProtocolDataProcess(int commid, RTUMSG *rtumsg); /*! - \brief 保护命令数据处理函数 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 淇濇姢鍛戒护鏁版嵁澶勭悊鍑芥暟 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvSendCmdToPort(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 短帧数据转发处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \retval 无 + \brief 鐭抚鏁版嵁杞彂澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \retval 鏃 \note - 无\n + 鏃燶n */ void Provshortprocess(u_32 commid, RTUMSG *rtumsg); /*! - \brief 转发一类数据处理 - \param commid -- 厂站端口号 - \param addr -- 间隔设备地址 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂涓绫绘暟鎹鐞 + \param commid -- 鍘傜珯绔彛鍙 + \param addr -- 闂撮殧璁惧鍦板潃 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发二类数据处理 - \param commid -- 厂站端口号 - \param addr -- 间隔设备地址 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂浜岀被鏁版嵁澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param addr -- 闂撮殧璁惧鍦板潃 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvPL2process(u_32 commid, DEVADDRPARAM *psDevAddrParam); /*! - \brief 长帧数据转发处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \retval 无 + \brief 闀垮抚鏁版嵁杞彂澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \retval 鏃 \note - 无\n + 鏃燶n */ void Provlongprocess(u_32 commid, RTUMSG *rtumsg); /*! - \brief 转发时间同步处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \retval 无 + \brief 杞彂鏃堕棿鍚屾澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvSYNprocess(u_32 commid, RTUMSG *rtumsg); /*! - \brief 转发总查询(总召唤)处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鎬绘煡璇紙鎬诲彫鍞わ級澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvTGIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发通用分类数据处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂閫氱敤鍒嗙被鏁版嵁澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvGDprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发一般命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂涓鑸懡浠ゅ鐞 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvGRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发通用分类命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂閫氱敤鍒嗙被鍛戒护澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发扰动数据传输的命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鎵板姩鏁版嵁浼犺緭鐨勫懡浠ゅ鐞 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvODTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发扰动数据传输的认可处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鎵板姩鏁版嵁浼犺緭鐨勮鍙鐞 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvADTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发控制断路器命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鎺у埗鏂矾鍣ㄥ懡浠ゅ鐞 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvDCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发升降命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鍗囬檷鍛戒护澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发设定命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂璁惧畾鍛戒护澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvSEprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发控制命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鎺у埗鍛戒护澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvCCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发电能脉冲计数召唤命令处理 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鐢佃兘鑴夊啿璁℃暟鍙敜鍛戒护澶勭悊 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ void ProvCIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam); /*! - \brief 转发全部组标题 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂鍏ㄩ儴缁勬爣棰 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ BOOL ProvMakeTitleOfGroups(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum); /*! - \brief 转发一个组的全部条目的值或属性 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \param bContinue- 未传送的保护数据继续 - \retval 无 + \brief 杞彂涓涓粍鐨勫叏閮ㄦ潯鐩殑鍊兼垨灞炴 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \param bContinue- 鏈紶閫佺殑淇濇姢鏁版嵁缁х画 + \retval 鏃 \note - 无\n + 鏃燶n */ BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\ PROVDEVDEF *pProvDevParam,\ GROUPDEF *pBaoHuDB, int iNum); /*! - \brief 转发一个条目的目录 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂涓涓潯鐩殑鐩綍 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum); /*! - \brief 转发一个条目的值或属性 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂涓涓潯鐩殑鍊兼垨灞炴 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum); /*! - \brief 转发遥信变位 - \param commid -- 厂站端口号 - \param rtumsg -- 接收到的数据信息 - \param iBuIdx -- 保护装置(间隔)索引 - \retval 无 + \brief 杞彂閬ヤ俊鍙樹綅 + \param commid -- 鍘傜珯绔彛鍙 + \param rtumsg -- 鎺ユ敹鍒扮殑鏁版嵁淇℃伅 + \param iBuIdx -- 淇濇姢瑁呯疆(闂撮殧)绱㈠紩 + \retval 鏃 \note - 无\n + 鏃燶n */ BOOL ProvSendChangedDi(u_32 commid, DEVADDRPARAM *psDevAddrParam); /*! - \brief 单个定值的打包 - \param pbDestBuf -- 目的缓冲区指针 - \param uMaxBufLen -- 目的缓冲区最大长度 - \param bDataFormat -- 数据格式 - \param uDataType -- 数据类型 - \param uDataLen -- 源数据长度 - \param pbSourData -- 源数据缓冲区指针 - \retval 无 + \brief 鍗曚釜瀹氬肩殑鎵撳寘 + \param pbDestBuf -- 鐩殑缂撳啿鍖烘寚閽 + \param uMaxBufLen -- 鐩殑缂撳啿鍖烘渶澶ч暱搴 + \param bDataFormat -- 鏁版嵁鏍煎紡 + \param uDataType -- 鏁版嵁绫诲瀷 + \param uDataLen -- 婧愭暟鎹暱搴 + \param pbSourData -- 婧愭暟鎹紦鍐插尯鎸囬拡 + \retval 鏃 \note - 无\n + 鏃燶n */ i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat, u_32 uDataType, u_32 uDataLen, BYTE *pbSourData); -// 部颁103和斯凯达内部规约间的格式转换 +// 閮ㄩ103鍜屾柉鍑揪鍐呴儴瑙勭害闂寸殑鏍煎紡杞崲 void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg); void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg); void Buban103ScadaProtocolExchange(int commid, RTUMSG *rtumsg); @@ -2247,9 +2247,9 @@ void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrPara void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx); -// 调试信息显示 +// 璋冭瘯淇℃伅鏄剧ず void Buban103DispConfig(int commid, BUBAN103PORTPARAM *psPortParam); void Buban103DispMalloc(int commid, int iSize); -/////////////////////////规约处理函数接口结束/////////////////////////// +/////////////////////////瑙勭害澶勭悊鍑芥暟鎺ュ彛缁撴潫/////////////////////////// #endif // !defined(_BUBAN103_H_200504221547__INCLUDED_) diff --git a/buban104.cpp b/buban104.cpp index 52d35d3..d145681 100644 --- a/buban104.cpp +++ b/buban104.cpp @@ -22,6 +22,8 @@ #include "buban104.h" #include "scadaprotect.h" +#include "MySQLAdo.h" + extern SIO_PARAM_DEF SioParam[]; extern FUNCTION_CALL *FunCallPtr; extern void *pvconf_handle; @@ -30,11 +32,11 @@ extern void *pvdataconf_handle; extern char pvDataFileName[256]; extern char IniFilePath[256]; -const char *gpStrBuban104Cmd[BUBAN104_TIMER_CMD_NUM] = +const char *gpStrBuban104Cmd[BUBAN104_TIMER_CMD_NUM] = { - "鎬诲彫鍞ょ數搴︽暟鎹", - "鍙敜鍒濆鍖栨暟鎹", - "甯у簭搴旂瓟" + "鎬诲彫鍞ょ數搴︽暟鎹", + "鍙敜鍒濆鍖栨暟鎹", + "甯у簭搴旂瓟" }; /*! @@ -4671,9 +4673,11 @@ void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo) for( j = 0; j < iSendNum; j++ ) { pfValue = (float *)&commandbuf[iLenth+14]; - flag = GetAIPntMsg(j+iNo, &igno, &iItemNo, &sCurTime, pfValue, &iaddr1); + flag = GetAIPntMsg(j+iNo, (unsigned int*)&igno, (unsigned int*)&iItemNo, &sCurTime, pfValue, (unsigned int*)&iaddr1); if (0 == flag) break; + if (-1 == flag) + continue; if (iaddr1 == iaddr0) ; else @@ -4953,4 +4957,4 @@ void ProvBuban104SendClass2withFloat(int commid) } //===========================杞彂鏁版嵁澶勭悊缁撴潫===============================// -//===========================鏁版嵁澶勭悊鍑芥暟缁撴潫===============================// \ No newline at end of file +//===========================鏁版嵁澶勭悊鍑芥暟缁撴潫===============================// diff --git a/buban104.h b/buban104.h index 316291c..1b0fbc0 100644 --- a/buban104.h +++ b/buban104.h @@ -3,19 +3,19 @@ * Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd. * All rights reserved. * - * 文件名称:buban104.h - * 文件标识:部颁104规约 - * 摘 要:104规约的处理的结构、宏还有函数定义 + * 鏂囦欢鍚嶇О锛歜uban104.h + * 鏂囦欢鏍囪瘑锛氶儴棰104瑙勭害 + * 鎽 瑕侊細104瑙勭害鐨勫鐞嗙殑缁撴瀯銆佸畯杩樻湁鍑芥暟瀹氫箟 * - * 当前版本:1.0 - * 作 者:aaawen - * 完成日期:2005/09/14 + * 褰撳墠鐗堟湰锛1.0 + * 浣 鑰咃細aaawen + * 瀹屾垚鏃ユ湡锛2005/09/14 * - * 取代版本:1.0 - * 原作者 : - * 完成日期: + * 鍙栦唬鐗堟湰锛1.0 + * 鍘熶綔鑰 锛 + * 瀹屾垚鏃ユ湡锛 * - * 说 明:数据定义规则 + * 璇 鏄庯細鏁版嵁瀹氫箟瑙勫垯 * u8 --- BYTE(usigned char) * ch --- char * w --- WORD(u_short, usigned short) @@ -31,14 +31,14 @@ * c --- class * s --- struct * sta --- static - * g --- 全局变量 - * Array --- 数组 - * a --- 数组 - * m_ --- 数据成员 - * p --- 指针 - * str --- 字符串 - * 全部大写 --- 常量 - * 首字节必须大写--- 类名称,结构,函数 + * g --- 鍏ㄥ眬鍙橀噺 + * Array --- 鏁扮粍 + * a --- 鏁扮粍 + * m_ --- 鏁版嵁鎴愬憳 + * p --- 鎸囬拡 + * str --- 瀛楃涓 + * 鍏ㄩ儴澶у啓 --- 甯搁噺 + * 棣栧瓧鑺傚繀椤诲ぇ鍐--- 绫诲悕绉帮紝缁撴瀯锛屽嚱鏁 **************************************************************************************/ // buban104.h: interface for the buban104 class. // @@ -52,30 +52,30 @@ #endif ////////////////////////////////////////////////////////////////////////// -// 宏定义 // +// 瀹忓畾涔 // // WEN 2005.09.08 // ////////////////////////////////////////////////////////////////////////// #define MAX_104_PINUM 30 -#define FORMAT_I 14 // I-格式 -#define FORMAT_S 15 // S-格式 -#define FORMAT_U_START_ACT 16 // U-格式启动 -#define FORMAT_U_START_CON 17 // U-格式启动应答 -#define FORMAT_U_STOP_ACT 18 // U-格式停止 -#define FORMAT_U_STOP_CON 19 // U-格式停止应答 -#define FORMAT_U_TEST_ACT 20 // U-格式测试 -#define FORMAT_U_TEST_CON 21 // U-格式测试应答 +#define FORMAT_I 14 // I-鏍煎紡 +#define FORMAT_S 15 // S-鏍煎紡 +#define FORMAT_U_START_ACT 16 // U-鏍煎紡鍚姩 +#define FORMAT_U_START_CON 17 // U-鏍煎紡鍚姩搴旂瓟 +#define FORMAT_U_STOP_ACT 18 // U-鏍煎紡鍋滄 +#define FORMAT_U_STOP_CON 19 // U-鏍煎紡鍋滄搴旂瓟 +#define FORMAT_U_TEST_ACT 20 // U-鏍煎紡娴嬭瘯 +#define FORMAT_U_TEST_CON 21 // U-鏍煎紡娴嬭瘯搴旂瓟 -// 定时召唤命令及命令名称 -#define BUBAN104_TIMER_CMD_NUM 3 // 最大命令数目 -#define MAX_SEQUENCE 0x7fff // 最大帧计数 +// 瀹氭椂鍙敜鍛戒护鍙婂懡浠ゅ悕绉 +#define BUBAN104_TIMER_CMD_NUM 3 // 鏈澶у懡浠ゆ暟鐩 +#define MAX_SEQUENCE 0x7fff // 鏈澶у抚璁℃暟 -#define MAX_FRAMEMATCHING_SIZE 2 // 帧序匹配最大尺寸 +#define MAX_FRAMEMATCHING_SIZE 2 // 甯у簭鍖归厤鏈澶у昂瀵 -// 规约版本号 -#define VER_BUBAN_104 0 // 部颁104 +// 瑙勭害鐗堟湰鍙 +#define VER_BUBAN_104 0 // 閮ㄩ104 #define VER_IEC870_5_104 1 // IEC104 -/////////////////////////////结构定义///////////////////////////////// +/////////////////////////////缁撴瀯瀹氫箟///////////////////////////////// typedef struct { long CmdTimerCnt; @@ -84,166 +84,166 @@ typedef struct typedef struct tagBUBAN104PORTPARAM { - BOOL LinkOk; // 主站初始化标志 1:ok; 0:no 初始化时:FALSE - BOOL Initdata; // 初始化总召唤标志 TRUE:收到总召唤结束帧 - // FALSE:未收到总召唤结束帧 - // 召唤电度标志 TRUE:收到召唤结束帧 - // FALSE:未收到召唤结束帧 - WORD wLinkAddr; // 地址域 + BOOL LinkOk; // 涓荤珯鍒濆鍖栨爣蹇 1:ok; 0:no 鍒濆鍖栨椂锛欶ALSE + BOOL Initdata; // 鍒濆鍖栨诲彫鍞ゆ爣蹇 TRUE锛氭敹鍒版诲彫鍞ょ粨鏉熷抚 + // FALSE锛氭湭鏀跺埌鎬诲彫鍞ょ粨鏉熷抚 + // 鍙敜鐢靛害鏍囧織 TRUE锛氭敹鍒板彫鍞ょ粨鏉熷抚 + // FALSE锛氭湭鏀跺埌鍙敜缁撴潫甯 + WORD wLinkAddr; // 鍦板潃鍩 - WORD wSendSequence; // 发送帧计数 - WORD wRecvSequence; // 接收帧计数 - WORD wAckSequence; // 应答帧计数 - BOOL bAckRight; // 应答帧是否同步 (子站端有效) - BOOL bStopComm; // 通讯停止 + WORD wSendSequence; // 鍙戦佸抚璁℃暟 + WORD wRecvSequence; // 鎺ユ敹甯ц鏁 + WORD wAckSequence; // 搴旂瓟甯ц鏁 + BOOL bAckRight; // 搴旂瓟甯ф槸鍚﹀悓姝 (瀛愮珯绔湁鏁) + BOOL bStopComm; // 閫氳鍋滄 BOOL bSendFormatI; - BYTE ProvAckOrNot; // 转发是否要求应答 + BYTE ProvAckOrNot; // 杞彂鏄惁瑕佹眰搴旂瓟 - long lTimeOutSendTest;// 超时发送测试帧 - long lTimeOutConst; // 超时时间间隔 - long lTimeOutCnt; // 超时时间计数 - long lYkYtAckTimeConst;// 返校超时时间间隔 - long lYkYtAckTime; // 返校超时时间计数 - BOOL bCloseSocket; // 关闭socket端口 - char YkCmdBuf[32]; // 遥控延迟发送返校缓冲区 - long lYkCmdBuflen; // 遥控延迟发送返校缓冲区数据长 + long lTimeOutSendTest;// 瓒呮椂鍙戦佹祴璇曞抚 + long lTimeOutConst; // 瓒呮椂鏃堕棿闂撮殧 + long lTimeOutCnt; // 瓒呮椂鏃堕棿璁℃暟 + long lYkYtAckTimeConst;// 杩旀牎瓒呮椂鏃堕棿闂撮殧 + long lYkYtAckTime; // 杩旀牎瓒呮椂鏃堕棿璁℃暟 + BOOL bCloseSocket; // 鍏抽棴socket绔彛 + char YkCmdBuf[32]; // 閬ユ帶寤惰繜鍙戦佽繑鏍$紦鍐插尯 + long lYkCmdBuflen; // 閬ユ帶寤惰繜鍙戦佽繑鏍$紦鍐插尯鏁版嵁闀 - long m_lNoDataCnt; // 无数据时间,超过超时时间发送测试帧 + long m_lNoDataCnt; // 鏃犳暟鎹椂闂达紝瓒呰繃瓒呮椂鏃堕棿鍙戦佹祴璇曞抚 - short RtuVersion; // 版本号 - int m_iPublishYear; // 发布时间(缺省为2000版) + short RtuVersion; // 鐗堟湰鍙 + int m_iPublishYear; // 鍙戝竷鏃堕棿(缂虹渷涓2000鐗) short CurCmdIdx; - short YkMode; // 遥控方式(=0:双点遥控,=1:单点遥控,=2:直控方式) + short YkMode; // 閬ユ帶鏂瑰紡(=0锛氬弻鐐归仴鎺э紝=1锛氬崟鐐归仴鎺э紝=2锛氱洿鎺ф柟寮) - // wen 2005.01.15 修改数据信息体起始地址 - int iAiBaseAddr; // 遥测起始地址 - int iDiBaseAddr; // 遥信起始地址 - int iPiBaseAddr; // 遥脉起始地址 - int iYkBaseAddr; // 遥控起始地址 + // wen 2005.01.15 淇敼鏁版嵁淇℃伅浣撹捣濮嬪湴鍧 + int iAiBaseAddr; // 閬ユ祴璧峰鍦板潃 + int iDiBaseAddr; // 閬ヤ俊璧峰鍦板潃 + int iPiBaseAddr; // 閬ヨ剦璧峰鍦板潃 + int iYkBaseAddr; // 閬ユ帶璧峰鍦板潃 BYTE m_au8RecvBuf[300]; int m_iRecvLen; - int m_iFrameSize; // 帧序应答尺寸 + int m_iFrameSize; // 甯у簭搴旂瓟灏哄 - BYTE m_bProvAiType; // 转发遥测类型标识 + BYTE m_bProvAiType; // 杞彂閬ユ祴绫诲瀷鏍囪瘑 BUBAN104CMDDEF CmdTime[BUBAN104_TIMER_CMD_NUM]; - SIO_PARAM_BAOHU_DEF *m_psBaoHu; // 该规约的端口数据指针 + SIO_PARAM_BAOHU_DEF *m_psBaoHu; // 璇ヨ绾︾殑绔彛鏁版嵁鎸囬拡 } BUBAN104PORTPARAM, *pBUBAN104PORTPARAM; -/////////////////////////以下为通用函数接口/////////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鎺ュ彛/////////////////////////// /*! - \brief 读取配置函数 - \param commid -- 端口号 + \brief 璇诲彇閰嶇疆鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban104ReadConfig(int commid); // 初始化处理 +void Buban104ReadConfig(int commid); // 鍒濆鍖栧鐞 /*! - \brief 读取端口数据函数 - \param commid -- 端口号 + \brief 璇诲彇绔彛鏁版嵁鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void Buban104RecvData(int commid, u_char *buf, int len);// 规约读数据处理 +void Buban104RecvData(int commid, u_char *buf, int len);// 瑙勭害璇绘暟鎹鐞 /*! - \brief 规约数据处理定时器函数 - \param commid -- 端口号 + \brief 瑙勭害鏁版嵁澶勭悊瀹氭椂鍣ㄥ嚱鏁 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban104Timer(int commid); // 定时器处理 +void Buban104Timer(int commid); // 瀹氭椂鍣ㄥ鐞 /*! - \brief 遥控遥调数据处理函数 - \param commid -- 端口号 + \brief 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void Buban104YkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理 +void Buban104YkYtProcess(int commid, u_char *buf, int len); // 閬ユ帶閬ヨ皟澶勭悊 /*! - \brief 系统下发对时函数 - \param commid -- 端口号 + \brief 绯荤粺涓嬪彂瀵规椂鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban104SendSystemTime(int commid); // 系统对时 +void Buban104SendSystemTime(int commid); // 绯荤粺瀵规椂 /*! - \brief 系统退出时规约处理函数 - \param commid -- 端口号 + \brief 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void Buban104Exit(int commid); // 规约退出 +void Buban104Exit(int commid); // 瑙勭害閫鍑 /*! - \brief 保护命令处理函数 - \param commid -- 端口号 - \param rtumsg -- 下发的保护命令指针 + \brief 淇濇姢鍛戒护澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 + \param rtumsg -- 涓嬪彂鐨勪繚鎶ゅ懡浠ゆ寚閽 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban104BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData); /*! - \brief 取保护数据库指针函数 - \param commid -- 端口号 - \param iProvAddr -- 统一编排的保护转发地址 - \param ppBaoHuDB -- 存放保护数据指针的指针 - \retval -- 返回该装置保护数据组数 + \brief 鍙栦繚鎶ゆ暟鎹簱鎸囬拡鍑芥暟 + \param commid -- 绔彛鍙 + \param iProvAddr -- 缁熶竴缂栨帓鐨勪繚鎶よ浆鍙戝湴鍧 + \param ppBaoHuDB -- 瀛樻斁淇濇姢鏁版嵁鎸囬拡鐨勬寚閽 + \retval -- 杩斿洖璇ヨ缃繚鎶ゆ暟鎹粍鏁 */ int Buban104GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB); -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// -/////////////////////////buban104公共函数接口/////////////////////////// -//指令缓冲区初始化 +/////////////////////////buban104鍏叡鍑芥暟鎺ュ彛/////////////////////////// +//鎸囦护缂撳啿鍖哄垵濮嬪寲 void InitBuban104CommandBuffer(int commid); -//关闭socket通讯 +//鍏抽棴socket閫氳 void Buban104CloseSocket(u_32 commid); -/////////////////////////buban104公共函数接口结束/////////////////////// +/////////////////////////buban104鍏叡鍑芥暟鎺ュ彛缁撴潫/////////////////////// -/////////////////////////以下为通用函数支持接口///////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鏀寔鎺ュ彛///////////////////////// void Buban104ProvMakeYkYtCommand(int commid, u_char *buf, int len); -/////////////////////////通用函数支持接口结束/////////////////////////// +/////////////////////////閫氱敤鍑芥暟鏀寔鎺ュ彛缁撴潫/////////////////////////// -///////////////////////////以下为指令生成函数/////////////////////////// -//生成 Buban104 命令? +///////////////////////////浠ヤ笅涓烘寚浠ょ敓鎴愬嚱鏁/////////////////////////// +//鐢熸垚 Buban104 鍛戒护? void MakeBuban104Command(u_32 commid, u_char cmdidx); -//生成遥控遥调指令 +//鐢熸垚閬ユ帶閬ヨ皟鎸囦护 void MakeBuBan104YkYtCommand(u_32 commid, u_char *buf, int len); -///////////////////////////指令生成函数结束///////////////////////////// +///////////////////////////鎸囦护鐢熸垚鍑芥暟缁撴潫///////////////////////////// -/////////////////////以下为POLLING规约常规函数接口////////////////////// +/////////////////////浠ヤ笅涓篜OLLING瑙勭害甯歌鍑芥暟鎺ュ彛////////////////////// void Buban104FindNextCmd(int commid); void Buban104FindNextProvCmd(int commid); void Buban104SendCmdFormPollCmdBuf(int commid); -//////////////////////POLLING规约常规函数接口结束/////////////////////// +//////////////////////POLLING瑙勭害甯歌鍑芥暟鎺ュ彛缁撴潫/////////////////////// -///////////////////////以下为规约处理函数接口/////////////////////////// -//======================以下为主站数据处理============================ +///////////////////////浠ヤ笅涓鸿绾﹀鐞嗗嚱鏁版帴鍙/////////////////////////// +//======================浠ヤ笅涓轰富绔欐暟鎹鐞============================ void Buban104ProcessData(u_32 commid, BUBAN104PORTPARAM *psPortParam, BOOL bProcess); -//处理数据格式I +//澶勭悊鏁版嵁鏍煎紡I void Buban104FormatI(RTUMSG *rtumsg); -//处理数据格式U +//澶勭悊鏁版嵁鏍煎紡U void Buban104FormatU(RTUMSG *rtumsg); -//Buban104 初始化数据处理 +//Buban104 鍒濆鍖栨暟鎹鐞 void Buban104InitdataProecss(RTUMSG * rtumsg); -//电度结束帧 +//鐢靛害缁撴潫甯 void Buban104PidataEnd(RTUMSG * rtumsg); -//设定确认 +//璁惧畾纭 void Buban104SetAck(RTUMSG *rtumsg); -//Buban104 遥控遥调返校程序 +//Buban104 閬ユ帶閬ヨ皟杩旀牎绋嬪簭 void Buban104YkYtAck(RTUMSG * rtumsg); -//Buban104 对时程序 +//Buban104 瀵规椂绋嬪簭 void Buban104SynTime(RTUMSG * rtumsg); -// 子站主动传送遥信变位帧 +// 瀛愮珯涓诲姩浼犻侀仴淇″彉浣嶅抚 void Buban104AutoSendDiProcess(RTUMSG *rtumsg); void Buban104AiWithPzDataProcess(RTUMSG *, int); @@ -254,18 +254,18 @@ void Buban104SoeDataProcess(RTUMSG *rtumsg, int); void Buban104PiDataProcess(RTUMSG * rtumsg); void Buban104PiWithTimeDataProcess(RTUMSG *rtumsg); -//保护数据处理 +//淇濇姢鏁版嵁澶勭悊 void Buban104BaoHuDataProcess(RTUMSG *rtumsg); void Buban104DefaultBaoHuDataProcess(RTUMSG *rtumsg); -// 新增函数,含有 7 BYTE 的时标 +// 鏂板鍑芥暟锛屽惈鏈 7 BYTE 鐨勬椂鏍 void Buban104SoeDataProcessWithCP56Time2a(RTUMSG *rtumsg, int flag); void Buban104AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg); void Buban104AiWithDataProcessWithM_ME_TE_1(RTUMSG * rtumsg); void Buban104AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg); void Buban104PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg); -//======================以下为子站数据处理============================ +//======================浠ヤ笅涓哄瓙绔欐暟鎹鐞============================ void ProvBuban104dataProcess(int commid, RTUMSG *rtumsg); void ProvBuban104FormatI(int commid, RTUMSG *rtumsg); void ProvBuban104FormatU(int commid, RTUMSG *rtumsg); @@ -273,7 +273,7 @@ void ProvBuban104FormatS(int commid, RTUMSG *rtumsg); void ProvBuban104SendAllData(int commid, RTUMSG *rtumsg); void ProvBuban104SendPIData(int commid, RTUMSG *rtumsg); void ProvBuban104ProcessTime(int commid, RTUMSG *rtumsg); -//iGroupNo=0为响应总召唤 +//iGroupNo=0涓哄搷搴旀诲彫鍞 void ProvBuban104SendPI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban104SendAI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban104SendDI(int commid, RTUMSG *rtumsg, int iGroupNo); @@ -287,5 +287,5 @@ void ProvMakeBuban104Command(int commid, u_char cmdidx); void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban104SendClass2withFloat(int commid); -/////////////////////////规约处理函数接口结束/////////////////////////// +/////////////////////////瑙勭害澶勭悊鍑芥暟鎺ュ彛缁撴潫/////////////////////////// #endif // !defined(_BUBAN104_H_200509141152__INCLUDED_) diff --git a/chainlist.h b/chainlist.h index 5959435..404df70 100644 --- a/chainlist.h +++ b/chainlist.h @@ -4,17 +4,17 @@ #include "basetype.h" -// 单向链表 +// 鍗曞悜閾捐〃 typedef struct tagSINGLELISTUNIT { - int iLen; // 数据长度 - BYTE *pBuf; // 存储内容 - struct tagSINGLELISTUNIT *pNext; // 单项链表的下一个 + int iLen; // 鏁版嵁闀垮害 + BYTE *pBuf; // 瀛樺偍鍐呭 + struct tagSINGLELISTUNIT *pNext; // 鍗曢」閾捐〃鐨勪笅涓涓 }SINGLELISTUNIT; typedef struct tagSINGLELIST { - int iDevId; // 端口号(高2个字节为端口号, 低2个字节为装置号) + int iDevId; // 绔彛鍙(楂2涓瓧鑺備负绔彛鍙, 浣2涓瓧鑺備负瑁呯疆鍙) int iNum; int iMaxNum; SINGLELISTUNIT *pHead; @@ -23,10 +23,10 @@ typedef struct tagSINGLELIST typedef struct tagDOUBLELISTUNIT { - int iDataLen; // 数据长度 - BYTE *pDataBuf; // 存储内容 - struct tagDOUBLELISTUNIT *pNext; // 双向链表的下一个 - struct tagDOUBLELISTUNIT *pFore; // 双向链表的前一个 + int iDataLen; // 鏁版嵁闀垮害 + BYTE *pDataBuf; // 瀛樺偍鍐呭 + struct tagDOUBLELISTUNIT *pNext; // 鍙屽悜閾捐〃鐨勪笅涓涓 + struct tagDOUBLELISTUNIT *pFore; // 鍙屽悜閾捐〃鐨勫墠涓涓 }DOUBLELISTUNIT; typedef struct tagDOUBLELIST diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake new file mode 100644 index 0000000..4dfe368 --- /dev/null +++ b/cmake/FindMySQL.cmake @@ -0,0 +1,934 @@ +# -*- indent-tabs-mode:nil; -*- +# vim: set expandtab: +# +# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License, version 2.0, as +# published by the Free Software Foundation. +# +# This program is also distributed with certain software (including +# but not limited to OpenSSL) that is licensed under separate terms, +# as designated in a particular file or component or in included license +# documentation. The authors of MySQL hereby grant you an +# additional permission to link the program and your derivative works +# with the separately licensed software that they have included with +# MySQL. +# +# Without limiting anything contained in the foregoing, this file, +# which is part of MySQL Connector/ODBC, is also subject to the +# Universal FOSS Exception, version 1.0, a copy of which can be found at +# http://oss.oracle.com/licenses/universal-foss-exception. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License, version 2.0, for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +########################################################################## + +########################################################################## +# +# Configuration variables, all optional, are +# +# MYSQL_DIR - Set in environment or as parameter to "cmake", +# this is the top directory of the MySQL Server or +# Connector/C install +# MYSQL_INCLUDE_DIR - Set in environment or as parameter to "cmake", +# this is the include directory where to find +# the client library +# MYSQL_LIB_DIR - Set in environment or as parameter to "cmake", +# this is the library directory where to find +# the client library +# MYSQLCLIENT_STATIC_LINKING +# - Specify that you want static linking, dynamic +# linking is the default +# MYSQLCLIENT_NO_THREADS +# - Specify to link against the single threaded +# library, "libmysqlclient". Note that in 5.5 +# and up "libmysqlclient" is multithreaded and +# "libmysqlclient_r" just a soft link to it +# MYSQL_CONFIG_EXECUTABLE +# - "mysql_config" executable to use +# MYSQL_CXX_LINKAGE - Specify that client library needs C++ linking +# MYSQL_EXTRA_LIBRARIES +# - Libraries to add to the linkage +# MYSQL_CFLAGS - C compiler flags +# MYSQL_CXXFLAGS - C++ compiler flags +# MYSQL_LINK_FLAGS - User defined extra linkage flags +# FINDMYSQL_DEBUG - Set if want debug output from this script +# +# Note that most variables above, if not set by the user they will be +# set by this include file. +# +# In addition, the below CMake variables are set by this include file +# +# MYSQL_VERSION - Three position numeric version, like 5.6.41 +# MYSQL_VERSION_ID - Numeric padded version, 5.13.4 => 51304 +# MYSQL_NUM_VERSION - Same as MYSQL_VERSION_ID, for compatibility +# MYSQL_LIB - Path to the client library +# MYSQL_LIBRARIES - Library name, might be "-lmysqlclient" while +# MYSQL_LIB is the path to the library +# MYSQL_CLIENT_LIBS - Same as MYSQL_LIBRARIES, for compatibility +# +# (1) If MYSQL_INCLUDE_DIR or MYSQL_LIB_DIR are given, these are +# used and an error is reported if can't be used +# (2) If MYSQL_CONFIG_EXECUTABLE is given, it is used to get +# headers and libraries +# (3) If MYSQL_DIR is given and "${MYSQL_DIR}/bin/mysql_config" is +# found, then same as (2) +# (4) If MYSQL_DIR is given and no "${MYSQL_DIR}/bin/mysql_config", +# search MYSQL_DIR +# +# FIXME if we get a "mysql_config" on Windows, things needs to change +# FIXME rename the VERSION variables above +# FIXME let MYSQL_VERSION include "-beta" etc? +# FIXME can mysql_config --version be C/C verson? +# FIXME if no mysql_config, find version from include/mysql_version.h? +# #define MYSQL_SERVER_VERSION "5.7.5-m15" +# #define MYSQL_VERSION_ID 50705 +# #define LIBMYSQL_VERSION "6.1.5" +# #define LIBMYSQL_VERSION_ID 60105 +# FIXME can MYSQL_LIB_DIR be a list of paths? +# FIXME is MYSQLCLIENT_LIBS a better name? +# FIXME cache variables, makes them command line args? +# FIXME really do include_directories() and link_directories()? Likely +# FIXME add check that if not static, not picked up .a or mysqlclient.lib +# FIXME MYSQL_VERSION_ID need to take into account Cluster versions +# and Connector/C versions +# FIXME handle MYSQL_VERSION_ID, LIBMYSQL_VERSION and LIBMYSQL_VERSION_ID? +# +########################################################################## + + +########################################################################## +# +# Check the input data +# +########################################################################## + +# If using both MYSQL_DIR as a cmake argument and set in environment, +# and not empty strings, they better be the same. Else stop and complain + +set(ENV_OR_OPT_VARS + MYSQL_DIR + MYSQL_INCLUDE_DIR + MYSQL_LIB_DIR + MYSQL_LIB_DIR_LIST + MYSQL_PLUGIN_DIR + MYSQL_CFLAGS + MYSQL_CXXFLAGS + MYSQL_CONFIG_EXECUTABLE + MYSQLCLIENT_STATIC_LINKING + MYSQLCLIENT_NO_THREADS + MYSQL_CXX_LINKAGE + MYSQL_EXTRA_LIBRARIES + MYSQL_LINK_FLAGS +) + +# Mark the variable names that have values that are paths +set(ENV_OR_OPT_PATH_VARS + MYSQL_DIR + MYSQL_INCLUDE_DIR + MYSQL_LIB_DIR + MYSQL_PLUGIN_DIR +) + + +foreach(_xvar ${ENV_OR_OPT_VARS}) + + if((DEFINED ${_xvar}) AND + (DEFINED ENV{${_xvar}}) AND + (NOT "${${_xvar}}" STREQUAL "") AND + (NOT "$ENV{${_xvar}}" STREQUAL "") AND + (NOT "$ENV{${_xvar}}" STREQUAL "${${_xvar}}")) + message(FATAL_ERROR "Please pass -D${_xvar}=... as an argument or " + "set ${_xvar} in the environment, but not both") + endif() + + # Now we know both are not set, set the CMake variable if needed + if((DEFINED ENV{${_xvar}}) AND (NOT "$ENV{${_xvar}}" STREQUAL "")) + set(${_xvar} $ENV{${_xvar}}) + endif() + + # Notmalize the path if the variable is set and is a path + if(${_xvar}) + list(FIND ENV_OR_OPT_PATH_VARS ${_xvar} _index) + if (${_index} GREATER -1) + file(TO_CMAKE_PATH "${${_xvar}}" ${_xvar}) + get_filename_component(${_xvar} ${${_xvar}} ABSOLUTE) + endif() + endif() + +endforeach() + + +# Bail out if both MYSQL_DIR/MYSQL_CONFIG_EXECUTABLE and MYSQL_INCLUDE/LIB_DIR +# were given + +if(MYSQL_DIR AND (MYSQL_INCLUDE_DIR OR MYSQL_LIB_DIR OR MYSQL_PLUGIN_DIR)) + message(FATAL_ERROR + "Both MYSQL_DIR and MYSQL_INCLUDE_DIR/MYSQL_LIB_DIR/MYSQL_PLUGIN_DIR were specified," + " use either one or the other way of pointing at MySQL location." + ) +endif() + + +if (MYSQL_CONFIG_EXECUTABLE AND (MYSQL_INCLUDE_DIR OR MYSQL_LIB_DIR OR MYSQL_PLUGIN_DIR)) + message(FATAL_ERROR + "Both MYSQL_CONFIG_EXECUTABLE and MYSQL_INCLUDE_DIR/MYSQL_LIB_DIR/MYSQL_PLUGIN_DIR were specified," + " mixing settings detected with mysql_config and manually set by variables" + " is not supported and would confuse our build logic." + ) +endif() + + +if(MYSQL_CONFIG_EXECUTABLE) + set(_mysql_config_set_by_user 1) +else() + # If MYSQL_DIR is set, set MYSQL_CONFIG_EXECUTABLE + if((NOT WIN32) AND + (DEFINED MYSQL_DIR) AND + (EXISTS "${MYSQL_DIR}/bin/mysql_config")) + set(MYSQL_CONFIG_EXECUTABLE "${MYSQL_DIR}/bin/mysql_config") + set(_mysql_config_in_mysql_dir 1) + endif() +endif() + + + +########################################################################## +# +# Data and basic settings +# +########################################################################## + +# Set sub directory to search in +# dist = for mysql binary distributions +# build = for custom built tree + +if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(_lib_suffix_dist debug) + set(_lib_suffix_build Debug) +else() + set(_lib_suffix_dist opt) + set(_lib_suffix_build Release) + add_definitions(-DNDEBUG) # FIXME what?! +endif() + +set(_exe_fallback_path + /usr/bin + /usr/local/bin + /opt/mysql/mysql/bin + /usr/local/mysql/bin +) + +set(_include_fallback_path + /usr/include/mysql + /usr/local/include/mysql + /opt/mysql/mysql/include + /opt/mysql/mysql/include/mysql + /usr/local/mysql/include + /usr/local/mysql/include/mysql + $ENV{ProgramFiles}/MySQL/*/include + $ENV{SystemDrive}/MySQL/*/include +) + +set(_lib_fallback_path + /usr/lib/mysql + /usr/local/lib/mysql + /usr/local/mysql/lib + /usr/local/mysql/lib/mysql + /opt/mysql/mysql/lib + /opt/mysql/mysql/lib/mysql + $ENV{ProgramFiles}/MySQL/*/lib/${_lib_suffix_dist} + $ENV{ProgramFiles}/MySQL/*/lib + $ENV{SystemDrive}/MySQL/*/lib/${_lib_suffix_dist} + $ENV{SystemDrive}/MySQL/*/lib +) + +set(_lib_subdirs + # Paths in build tree, really being too nice + libmysql/${_lib_suffix_build} + client/${_lib_suffix_build} + libmysql_r/.libs + libmysql/.libs + libmysql + # Install sub directories + lib/mysql + lib/${_lib_suffix_dist} # Need to be before "lib" + lib +) + +set(_static_subdirs + mysql + ${_lib_suffix_dist} +) + +if(MSVC90) + set(_vs_subdir vs9) +elseif(MSVC10) + set(_vs_subdir vs10) +elseif(MSVC11) + set(_vs_subdir vs11) +elseif(MSVC12) + set(_vs_subdir vs12) +elseif(MSVC13) + set(_vs_subdir vs13) +elseif(MSVC14) + set(_vs_subdir vs14) +elseif(MSVC15) + set(_vs_subdir vs15) +endif() + +if(_vs_subdir) + if("${_lib_suffix_dist}" STREQUAL "debug") + set(_vs_subdir "${_vs_subdir}/debug") + endif() + list(INSERT _lib_subdirs 0 "lib/${_vs_subdir}") +endif() + +# For Windows, the client library name differs, so easy to +# make sure find_library() picks the right one. For Unix, it +# is the file extension that differs. In the static library +# case we know it is ".a", so we add it to the library name +# we search for to make sure it is picked in the static case. +if(WIN32) + set(_dynamic_libs "libmysql") + set(_static_libs "mysqlclient") + set(_static_lib_ext ".lib") # Careful, can be import library for DLL +elseif(MYSQLCLIENT_NO_THREADS) + # In 5.1 and below there is a single threaded library + set(_dynamic_libs "mysqlclient") + set(_static_libs "libmysqlclient.a") + set(_static_lib_ext ".a") +else() + # We try the multithreaded "libmysqlclient_r" first and if not + # there, pick "libmysqlclient" that in 5.5 and up is multithreaded + # anyway (soft link "libmysqlclient_r" is not installed MySQL Server + # 5.6 and Debian/Ubuntu and might go in 5.7 for all installs) + set(_dynamic_libs "mysqlclient_r" "mysqlclient") + set(_static_libs "libmysqlclient_r.a" "libmysqlclient.a") + set(_static_lib_ext ".a") +endif() + +if(MYSQLCLIENT_STATIC_LINKING) + set(_link_type "static") + set(_search_libs ${_static_libs}) +else() + set(_link_type "dynamic") + set(_search_libs ${_dynamic_libs}) +endif() + +# Just to pretty print in error messages +string(REPLACE ";" " " _pp_search_libs "${_search_libs}") +string(REPLACE ";" " " _pp_lib_subdirs "${_lib_subdirs}") +string(REPLACE ";" " " _pp_lib_fallback_path "${_lib_fallback_path}") +string(REPLACE ";" " " _pp_include_fallback_path "${_include_fallback_path}") + +message(STATUS "You will link ${_link_type}ally to the MySQL client" + " library (set with -DMYSQLCLIENT_STATIC_LINKING=)") +message(STATUS "Searching for ${_link_type} libraries with the base name(s) \"${_pp_search_libs}\"") + +########################################################################## +# +# Macros +# +########################################################################## + +# ---------------------------------------------------------------------- +# +# Macro that runs "mysql_config ${_opt}" and return the line after +# trimming away ending space/newline. +# +# _mysql_conf( +# _var - output variable name, will contain a ';' separated list +# _opt - the flag to give to mysql_config +# +# ---------------------------------------------------------------------- + +macro(_mysql_conf _var _opt) + execute_process( + COMMAND ${MYSQL_CONFIG_EXECUTABLE} ${_opt} + OUTPUT_VARIABLE ${_var} + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endmacro() + +# ---------------------------------------------------------------------- +# +# Macro that runs "mysql_config ${_opt}", selects output args using a +# regex, and clean it up a bit removing space/tab/newline before +# setting it to a variable. +# +# _mysql_config( +# _var - output variable name, will contain a ';' separated list +# _regex - regular expression matching the prefix of args to select +# _opt - the flag to give to mysql_config +# +# ---------------------------------------------------------------------- + +macro(_mysql_config _var _regex _opt) + _mysql_conf(_mysql_config_output ${_opt}) + string(REGEX MATCHALL "${_regex}([^ ]+)" _mysql_config_output "${_mysql_config_output}") + string(REGEX REPLACE "^[ \t]+" "" _mysql_config_output "${_mysql_config_output}") + IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") + string(REGEX REPLACE " -latomic" "" _mysql_config_output "${_mysql_config_output}") + ENDIF() + string(REGEX REPLACE "${_regex}" "" _mysql_config_output "${_mysql_config_output}") + separate_arguments(_mysql_config_output) + set(${_var} ${_mysql_config_output}) +endmacro() + +# ---------------------------------------------------------------------- +# +# Macro that runs "mysql_config ${_opt}" and selects output using a +# prefix regex. Cleans it up a bit removing space/tab/newline. Then +# removes the prefix on all in the list, and finally replace what +# matches another regular expression with a replacement string. +# +# _mysql_config_replace( +# _var - output variable name, will contain a ';' separated list +# _regex1 - regular expression to match out arguments +# _replace - what to replace match _regex1 with +# _regex2 - regular expression matching the prefix of args to select +# _opt - the flag to give to mysql_config +# +# ---------------------------------------------------------------------- + +macro(_mysql_config_replace _var _regex1 _replace _regex2 _opt) + _mysql_conf(_mysql_config_output ${_opt}) + string(REGEX MATCHALL "${_regex2}([^ ]+)" _mysql_config_output "${_mysql_config_output}") + string(REGEX REPLACE "^[ \t]+" "" _mysql_config_output "${_mysql_config_output}") + IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") + string(REGEX REPLACE " -latomic" "" _mysql_config_output "${_mysql_config_output}") + ENDIF() + string(REGEX REPLACE "${_regex2}" "" _mysql_config_output "${_mysql_config_output}") + string(REGEX REPLACE "${_regex1}" "${_replace}" _mysql_config_output "${_mysql_config_output}") + separate_arguments(_mysql_config_output) + set(${_var} ${_mysql_config_output}) +endmacro() + +# ---------------------------------------------------------------------- +# +# Macro to check that we found a library and that we got the right type +# +# ---------------------------------------------------------------------- + +macro(_check_lib_search_error _lib_dir_var _lib_var _exta_err_string) + + set(_lib "${${_lib_var}}") + set(_lib_dir "${${_lib_dir_var}}") + + if(FINDMYSQL_DEBUG) + message("_lib \"${_lib}\"") + message("_lib_dir \"${_lib_dir}\"") + message("_lib_var \"${_lib_var}\"") + message("_lib_dir_var \"${_lib_dir_var}\"") + endif() + + set(_err_string "Could not find ${_link_type} " + "\"${_pp_search_libs}\" in ${_lib_dir_var} " + "\"${_lib_dir}\" ${_exta_err_string}") + + if(NOT ${_lib_var}) + message(FATAL_ERROR ${_err_string}) + endif() + + # find_library() try find a shared library first, then a static + # one. For Windows the library has a different name, but for + # Unix only the extension differs. So we check here that we + # got the library kind we expected. + if(NOT WIN32) + if(NOT MYSQLCLIENT_STATIC_LINKING) + get_filename_component(_ext ${_lib} EXT) + if(${_ext} STREQUAL ${_static_lib_ext}) + message(FATAL_ERROR ${_err_string}) + endif() + endif() + endif() +endmacro() + + +########################################################################## +# +# Try find MYSQL_CONFIG_EXECUTABLE if not set, and find version +# +########################################################################## + +if(NOT WIN32) + + if(NOT MYSQL_CONFIG_EXECUTABLE) + find_program(MYSQL_CONFIG_EXECUTABLE + NAMES + mysql_config + DOC + "full path of mysql_config" + PATHS + ${_exe_fallback_path} + ) + endif() + + if(MYSQL_CONFIG_EXECUTABLE) + message(STATUS "mysql_config was found ${MYSQL_CONFIG_EXECUTABLE}") + + _mysql_conf(MYSQL_VERSION "--version") + endif() + +endif() + +########################################################################## +# +# Find MYSQL_INCLUDE_DIR +# +########################################################################## + +if(FINDMYSQL_DEBUG AND MYSQL_INCLUDE_DIR) + message("DBG: User gave MYSQL_INCLUDE_DIR = \"${MYSQL_INCLUDE_DIR}\"") +endif() + +if(FINDMYSQL_DEBUG AND MYSQL_DIR) + message("DBG: User gave MYSQL_DIR = \"${MYSQL_DIR}\"") +endif() + +if(MYSQL_INCLUDE_DIR) + + if(FINDMYSQL_DEBUG) + message("DBG: Using MYSQL_INCLUDE_DIR to find \"mysql.h\"") + endif() + + if(NOT EXISTS "${MYSQL_INCLUDE_DIR}/mysql.h") + message(FATAL_ERROR "MYSQL_INCLUDE_DIR given, but no \"mysql.h\" " + "in \"${MYSQL_INCLUDE_DIR}\"") + endif() + +elseif(MYSQL_DIR AND + (NOT _mysql_config_in_mysql_dir) AND + (NOT _mysql_config_set_by_user)) + + if(FINDMYSQL_DEBUG) + message("DBG: Using MYSQL_DIR without \"mysql_config\" to find \"mysql.h\"") + endif() + + set(MYSQL_INCLUDE_DIR "${MYSQL_DIR}/include") + if(NOT EXISTS "${MYSQL_INCLUDE_DIR}/mysql.h") + message(FATAL_ERROR "MYSQL_DIR given, but no \"mysql.h\" " + "in \"${MYSQL_INCLUDE_DIR}\"") + endif() + +elseif(MYSQL_CONFIG_EXECUTABLE) + + if(FINDMYSQL_DEBUG) + message("DBG: Using \"mysql_config\" to find \"mysql.h\"") + endif() + + # This code assumes there is just one "-I...." and that + # no space between "-I" and the path + _mysql_config(MYSQL_INCLUDE_DIR "(^| )-I" "--include") + if(NOT MYSQL_INCLUDE_DIR) + message(FATAL_ERROR "Could not find the include dir from running " + "\"${MYSQL_CONFIG_EXECUTABLE}\"") + endif() + + if(NOT EXISTS "${MYSQL_INCLUDE_DIR}/mysql.h") + message(FATAL_ERROR "Could not find \"mysql.h\" in \"${MYSQL_INCLUDE_DIR}\" " + "found from running \"${MYSQL_CONFIG_EXECUTABLE}\"") + endif() + +else() + + if(FINDMYSQL_DEBUG) + message("DBG: Using find_path() searching " + "\"${_pp_include_fallback_path}\" to find \"mysql.h\"") + endif() + + # No specific paths, try some common install paths + find_path(MYSQL_INCLUDE_DIR mysql.h ${_include_fallback_path}) + + if(NOT MYSQL_INCLUDE_DIR) + message(FATAL_ERROR "Could not find \"mysql.h\" from searching " + "\"${_pp_include_fallback_path}\"") + endif() + +endif() + +if(FINDMYSQL_DEBUG) + message("DBG: MYSQL_INCLUDE_DIR = \"${MYSQL_INCLUDE_DIR}\"") +endif() + +########################################################################## +# +# Find MYSQL_LIB_DIR, MYSQL_LIB, MYSQL_PLUGIN_DIR and MYSQL_LIBRARIES +# +########################################################################## + +if(FINDMYSQL_DEBUG AND MYSQL_LIB_DIR) + message("DBG: User gave MYSQL_LIB_DIR = \"${MYSQL_LIB_DIR}\"") +endif() + +if(MYSQL_LIB_DIR) + + if(FINDMYSQL_DEBUG) + message("DBG: Using find_library() searching MYSQL_LIB_DIR") + endif() + + find_library(MYSQL_LIB + NAMES + ${_search_libs} + PATHS + "${MYSQL_LIB_DIR}" + NO_DEFAULT_PATH + ) + _check_lib_search_error(MYSQL_LIB_DIR MYSQL_LIB "") + set(MYSQL_LIBRARIES ${MYSQL_LIB}) + + if(NOT DEFINED MYSQL_PLUGIN_DIR) + set(MYSQL_PLUGIN_DIR "${MYSQL_LIB_DIR}/plugin") + endif() + +elseif(MYSQL_DIR AND + (NOT _mysql_config_in_mysql_dir) AND + (NOT _mysql_config_set_by_user)) + + if(FINDMYSQL_DEBUG) + message("DBG: Using find_library() searching " + "MYSQL_DIR and \"${_pp_lib_subdirs}\"") + endif() + + find_library(MYSQL_LIB + NAMES + ${_search_libs} + PATHS + "${MYSQL_DIR}" + PATH_SUFFIXES + ${_lib_subdirs} + NO_DEFAULT_PATH + ) + _check_lib_search_error(MYSQL_DIR MYSQL_LIB "in \"${_pp_lib_subdirs}\"") + get_filename_component(MYSQL_LIB_DIR "${MYSQL_LIB}" PATH) + set(MYSQL_LIBRARIES "${MYSQL_LIB}") + + if(((NOT DEFINED MYSQL_PLUGIN_DIR) OR (NOT ${MYSQL_PLUGIN_DIR})) AND MYSQL_LIB_DIR) + if(EXISTS "${MYSQL_LIB_DIR}/plugin") + set(MYSQL_PLUGIN_DIR "${MYSQL_LIB_DIR}/plugin") + else() + #If directory does not exist it must be a debug dir layout + if(EXISTS "${MYSQL_LIB_DIR}/../plugin/") + set(MYSQL_PLUGIN_DIR "${MYSQL_LIB_DIR}/../plugin") + endif() + endif() + endif() + +elseif(MYSQL_CONFIG_EXECUTABLE) + + if(FINDMYSQL_DEBUG) + message("DBG: Using \"mysql_config\" to find the libraries") + endif() + + # This code assumes there is just one "-L...." and that + # no space between "-L" and the path + _mysql_config(MYSQL_LIB_DIR "(^| )-L" "--libs") + _mysql_conf(MYSQL_PLUGIN_DIR "--variable=plugindir") + + IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") + # This is needed to make Solaris binaries using the default runtime lib path + _mysql_config(DEV_STUDIO_RUNTIME_DIR "(^| )-R" "--libs") + ENDIF() + + + LIST(LENGTH MYSQL_LIB_DIR dir_cnt) + MESSAGE(STATUS "Libraries paths found: ${n}") + IF(${dir_cnt} GREATER 1) + SET(MYSQL_LIB_DIR_LIST ${MYSQL_LIB_DIR}) + MESSAGE(STATUS "MYSQL_LIB_DIR_LIST = ${MYSQL_LIB_DIR_LIST}") + + FOREACH(_path_to_check IN LISTS MYSQL_LIB_DIR) + FIND_LIBRARY(_mysql_client_lib_var + NAMES ${_search_libs} + PATHS ${_path_to_check} + NO_DEFAULT_PATH + ) + IF(_mysql_client_lib_var) + MESSAGE(STATUS "CLIENT LIB VAR: ${_mysql_client_lib_var}") + unset(_mysql_client_lib_var CACHE) + set(MYSQL_LIB_DIR ${_path_to_check}) + ENDIF() + ENDFOREACH(_path_to_check) + ENDIF() + + if(NOT MYSQL_LIB_DIR) + message(FATAL_ERROR "Could not find the library dir from running " + "\"${MYSQL_CONFIG_EXECUTABLE}\"") + endif() + + if(NOT EXISTS "${MYSQL_LIB_DIR}") + message(FATAL_ERROR "Could not find the directory \"${MYSQL_LIB_DIR}\" " + "found from running \"${MYSQL_CONFIG_EXECUTABLE}\"") + endif() + + # We have the assumed MYSQL_LIB_DIR. The output from "mysql_config" + # might not be correct for static libraries, so we might need to + # adjust MYSQL_LIB_DIR later on. + + if(MYSQLCLIENT_STATIC_LINKING) + + # Find the static library, might be one level down + find_library(MYSQL_LIB + NAMES + ${_search_libs} + PATHS + ${MYSQL_LIB_DIR} + PATH_SUFFIXES + ${_static_subdirs} + NO_DEFAULT_PATH + ) + _check_lib_search_error(MYSQL_LIB_DIR MYSQL_LIB "in \"${_static_subdirs}\"") + + # Adjust MYSQL_LIB_DIR in case it changes + get_filename_component(MYSQL_LIB_DIR "${MYSQL_LIB}" PATH) + + # Replace the current library references with the full path + # to the library, i.e. the -L will be ignored + _mysql_config_replace(MYSQL_LIBRARIES + "(mysqlclient|mysqlclient_r)" "${MYSQL_LIB}" "(^| )-l" "--libs") + + else() + + _mysql_config(MYSQL_LIBRARIES "(^| )-l" "--libs") + FOREACH(__lib IN LISTS MYSQL_LIBRARIES) + string(REGEX MATCH "mysqlclient([^ ]*)" _matched_lib __lib) + IF(_matched_lib) + set(_search_libs ${matched_lib}) + ENDIF() + ENDFOREACH() + # First library is assumed to be the client library + # list(GET MYSQL_LIBRARIES 0 _search_libs) + find_library(MYSQL_LIB + NAMES + ${_search_libs} + PATHS + ${MYSQL_LIB_DIR} + NO_DEFAULT_PATH + ) + _check_lib_search_error(MYSQL_LIB_DIR MYSQL_LIB "") + + endif() + +else() + + if(FINDMYSQL_DEBUG) + message("DBG: Using find_library() searching " + "\"${_pp_lib_fallback_path}\" to find the client library") + endif() + + # Search standard places + find_library(MYSQL_LIB + NAMES + ${_search_libs} + PATHS + ${_lib_fallback_path} + ) + if(NOT MYSQL_LIB) + message(FATAL_ERROR "Could not find \"${_pp_search_libs}\" from searching " + "\"${_pp_lib_fallback_path}\"") + endif() + + get_filename_component(MYSQL_LIB_DIR "${MYSQL_LIB}" PATH) + +endif() + +########################################################################## +# +# Add more libraries to MYSQL_LIBRARIES +# +########################################################################## + +# FIXME needed?! +if(MYSQLCLIENT_STATIC_LINKING AND + NOT WIN32 AND + NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + list(APPEND MYSQL_LIBRARIES "rt") +endif() + +# For dynamic linking use the built-in sys and strings +if(NOT MYSQLCLIENT_STATIC_LINKING) + list(APPEND SYS_LIBRARIES "mysql_sys") + list(APPEND SYS_LIBRARIES "mysql_strings") + list(APPEND SYS_LIBRARIES ${MYSQL_LIBRARIES}) + SET(MYSQL_LIBRARIES ${SYS_LIBRARIES}) + +#if(NOT MYSQLCLIENT_STATIC_LINKING AND ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +# list(REVERSE MYSQL_LIBRARIES) +#endif() + +endif() + +if(MYSQL_EXTRA_LIBRARIES) + separate_arguments(MYSQL_EXTRA_LIBRARIES) + list(APPEND MYSQL_LIBRARIES ${MYSQL_EXTRA_LIBRARIES}) +endif() + +list(LENGTH MYSQL_LIBRARIES len) +if (MYSQL_STATIC_LINKING AND (len LESS 2)) + message(WARNING + "Statically linking MySQL client library normally requires linking" + " additional libraries that the client library depends on. It seems" + " no extra libraries have been specified. Provide the list of required" + " dependencies through MYSQL_EXTRA_LIBRARIES." + ) +endif() + +# For compatibility +SET(MYSQL_CLIENT_LIBS ${MYSQL_LIBRARIES}) + +########################################################################## +# +# If not found MySQL Serverv version, compile a small client app +# and let it write a small cmake file with the settings +# +########################################################################## + +if(MYSQL_INCLUDE_DIR AND NOT MYSQL_VERSION) + + # Write the C source file that will include the MySQL headers + set(GETMYSQLVERSION_SOURCEFILE "${CMAKE_CURRENT_BINARY_DIR}/getmysqlversion.c") + file(WRITE "${GETMYSQLVERSION_SOURCEFILE}" + "#include \n" + "#include \n" + "int main() {\n" + " printf(\"%s\", MYSQL_SERVER_VERSION);\n" + "}\n" + ) + + # Compile and run the created executable, store output in MYSQL_VERSION + try_run(_run_result _compile_result + "${CMAKE_BINARY_DIR}" + "${GETMYSQLVERSION_SOURCEFILE}" + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${MYSQL_INCLUDE_DIR}" + RUN_OUTPUT_VARIABLE MYSQL_VERSION + ) + + if(FINDMYSQL_DEBUG) + if(NOT _compile_result) + message("DBG: Could not compile \"getmysqlversion.c\"") + endif() + if(_run_result) + message("DBG: Running \"getmysqlversion\" returned ${_run_result}") + endif() + endif() + +endif() + +########################################################################## +# +# Clean up MYSQL_VERSION and create MYSQL_VERSION_ID/MYSQL_NUM_VERSION +# +########################################################################## + +if(NOT MYSQL_VERSION) + message(FATAL_ERROR "Could not determine the MySQL Server version") +endif() + +# Clean up so only numeric, in case of "-alpha" or similar +string(REGEX MATCHALL "([0-9]+.[0-9]+.[0-9]+)" MYSQL_VERSION "${MYSQL_VERSION}") +# To create a fully numeric version, first normalize so N.NN.NN +string(REGEX REPLACE "[.]([0-9])[.]" ".0\\1." MYSQL_VERSION_ID "${MYSQL_VERSION}") +string(REGEX REPLACE "[.]([0-9])$" ".0\\1" MYSQL_VERSION_ID "${MYSQL_VERSION_ID}") +# Finally remove the dot +string(REGEX REPLACE "[.]" "" MYSQL_VERSION_ID "${MYSQL_VERSION_ID}") +set(MYSQL_NUM_VERSION ${MYSQL_VERSION_ID}) + +########################################################################## +# +# Try determine if to use C++ linkage, and also find C++ flags +# +########################################################################## + +if(NOT WIN32) + + if(MYSQL_CONFIG_EXECUTABLE) + + if(NOT MYSQL_CFLAGS) + _mysql_conf(MYSQL_CFLAGS "--cflags") + endif() + + if(NOT MYSQL_CXXFLAGS) + if(MYSQL_CXX_LINKAGE OR MYSQL_VERSION_ID GREATER 50603) + _mysql_conf(MYSQL_CXXFLAGS "--cxxflags") + set(MYSQL_CXX_LINKAGE 1) + else() + set(MYSQL_CXXFLAGS "${MYSQL_CFLAGS}") + endif() + endif() + +# FIXME this should not be needed, caller of this module should set +# it's own flags and just use the library on it's on terms +# (change the infe message if enabling this code) +# if(NOT MYSQL_LINK_FLAGS) +# # Find -mcpu -march -mt -m32 -m64 and other flags starting with "-m" +# string(REGEX MATCHALL "(^| )-m([^\r\n ]+)" MYSQL_LINK_FLAGS "${MYSQL_CXXFLAGS}") +# string(REGEX REPLACE "^ " "" MYSQL_LINK_FLAGS "${MYSQL_LINK_FLAGS}") +# string(REGEX REPLACE "; " ";" MYSQL_LINK_FLAGS "${MYSQL_LINK_FLAGS}") +# endif() + + endif() + +endif() + +########################################################################## +# +# Inform CMake where to look for headers and libraries +# +########################################################################## + +# string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT) +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MYSQL_CXXFLAGS}") +# set(CMAKE_CXX_FLAGS_${CMAKEBT} "${CMAKE_CXX_FLAGS_${CMAKEBT}} ${MYSQL_CXXFLAGS}") + +include_directories("${MYSQL_INCLUDE_DIR}") + +link_directories("${MYSQL_LIB_DIR}") + +MESSAGE(STATUS "MYSQL_LIB_DIR_LIST = ${MYSQL_LIB_DIR_LIST}") +IF(MYSQL_LIB_DIR_LIST) + FOREACH(__libpath IN LISTS MYSQL_LIB_DIR_LIST) + link_directories("${__libpath}") + ENDFOREACH() +ENDIF() + + + +########################################################################## +# +# Report +# +########################################################################## + +message(STATUS "MySQL client environment/cmake variables set that the user can override") + +message(STATUS " MYSQL_DIR : ${MYSQL_DIR}") +message(STATUS " MYSQL_INCLUDE_DIR : ${MYSQL_INCLUDE_DIR}") +message(STATUS " MYSQL_LIB_DIR : ${MYSQL_LIB_DIR}") +message(STATUS " MYSQL_PLUGIN_DIR : ${MYSQL_PLUGIN_DIR}") +message(STATUS " MYSQL_CONFIG_EXECUTABLE : ${MYSQL_CONFIG_EXECUTABLE}") +message(STATUS " MYSQL_CXX_LINKAGE : ${MYSQL_CXX_LINKAGE}") +message(STATUS " MYSQL_CFLAGS : ${MYSQL_CFLAGS}") +message(STATUS " MYSQL_CXXFLAGS : ${MYSQL_CXXFLAGS}") +message(STATUS " MYSQLCLIENT_STATIC_LINKING : ${MYSQLCLIENT_STATIC_LINKING}") +message(STATUS " MYSQLCLIENT_NO_THREADS : ${MYSQLCLIENT_NO_THREADS}") + +message(STATUS "MySQL client optional environment/cmake variables set by the user") + +message(STATUS " MYSQL_EXTRA_LIBRARIES : ${MYSQL_EXTRA_LIBRARIES}") +message(STATUS " MYSQL_LINK_FLAGS : ${MYSQL_LINK_FLAGS}") + +message(STATUS "MySQL client settings that the user can't override") + +message(STATUS " MYSQL_VERSION : ${MYSQL_VERSION}") +message(STATUS " MYSQL_VERSION_ID : ${MYSQL_VERSION_ID}") +message(STATUS " MYSQL_LIB : ${MYSQL_LIB}") +message(STATUS " MYSQL_LIBRARIES : ${MYSQL_LIBRARIES}") diff --git a/common.h b/common.h index 315dfd4..e50ad0a 100644 --- a/common.h +++ b/common.h @@ -40,7 +40,7 @@ //#include "menu.h" -// 基本函数库 +// 鍩烘湰鍑芥暟搴 #include "basefunc.h" #include "DSFileSystem.h" #include "chainlist.h" @@ -51,37 +51,37 @@ #define OPEN 0 #define CLOSE 1 -// wen 2005.04.12 定义输出信息格式 -/* !输出信息级别为提示信息 +// wen 2005.04.12 瀹氫箟杈撳嚭淇℃伅鏍煎紡 +/* !杈撳嚭淇℃伅绾у埆涓烘彁绀轰俊鎭 */ #define MSG_CLASS_TIP 1 -/* !输出信息级别为警告信息 +/* !杈撳嚭淇℃伅绾у埆涓鸿鍛婁俊鎭 */ #define MSG_CLASS_WARN 2 -/* !输出信息级别为错误信息 +/* !杈撳嚭淇℃伅绾у埆涓洪敊璇俊鎭 */ #define MSG_CLASS_ERROR 3 /*! - * 端口读标识 + * 绔彛璇绘爣璇 */ #define FLAG_READ 0x0001 /*! - * 端口写标识 + * 绔彛鍐欐爣璇 */ #define FLAG_WRITE 0x0002 /*! - * 端口读标识 + * 绔彛璇绘爣璇 */ #define FLAG_OPEN (FLAG_READ | FLAG_WRITE) -#define OPEN_PORT 3 // 端口处于完全打开状态 -#define CLOSE_PORT 0 // 端口处于关闭状态 -// 网络端口创建标识FAIL_GREATE、SUCCEED_GREATE、SOCKET_BEING -#define FAIL_GREATE 0 // 创建socket失败 -#define SUCCEED_GREATE 1 // 创建socket成功 -#define SOCKET_BEING 2 // socket已经存在,无需重新创建 +#define OPEN_PORT 3 // 绔彛澶勪簬瀹屽叏鎵撳紑鐘舵 +#define CLOSE_PORT 0 // 绔彛澶勪簬鍏抽棴鐘舵 +// 缃戠粶绔彛鍒涘缓鏍囪瘑FAIL_GREATE銆丼UCCEED_GREATE銆丼OCKET_BEING +#define FAIL_GREATE 0 // 鍒涘缓socket澶辫触 +#define SUCCEED_GREATE 1 // 鍒涘缓socket鎴愬姛 +#define SOCKET_BEING 2 // socket宸茬粡瀛樺湪锛屾棤闇閲嶆柊鍒涘缓 #define AI_DATA_DISP 4 @@ -136,10 +136,10 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; } while ( 0 ) -//基本宏定义 +//鍩烘湰瀹忓畾涔 #define DEFAULT_UDP_COMM_PORT 0xff00 -//定义用于读写EEPROM的PB6、PB7地址 +//瀹氫箟鐢ㄤ簬璇诲啓EEPROM鐨凱B6銆丳B7鍦板潃 #define SUCC 1 #define FAIL 0 @@ -160,7 +160,7 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define DEFAULT_BAUD 9600 -//1、设备配置初始化类 +//1銆佽澶囬厤缃垵濮嬪寲绫 #define SDS_GET_IP_ADDR 0x101 #define SDS_N_GET_IP_ADDR 0x102 #define SDS_SET_IP_ADDR 0x103 @@ -174,24 +174,24 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define SDS_SIO_SET_WATCH_PORT 0x161 #define SDS_SIO_CLR_WATCH_PORT 0x162 -//7、保护机信息类 -#define SDS_SIO_GET_PROTOCOL_NAME 0x201 // 读所有协议名称 -#define SDS_SIO_GET_PORT_CONFIG_INFO 0x203 // 读端口公共配置信息 -#define SDS_SIO_GET_PROTOCOL_CONFIG_INFO 0x204 // 根据协议号读协议配置信息 +//7銆佷繚鎶ゆ満淇℃伅绫 +#define SDS_SIO_GET_PROTOCOL_NAME 0x201 // 璇绘墍鏈夊崗璁悕绉 +#define SDS_SIO_GET_PORT_CONFIG_INFO 0x203 // 璇荤鍙e叕鍏遍厤缃俊鎭 +#define SDS_SIO_GET_PROTOCOL_CONFIG_INFO 0x204 // 鏍规嵁鍗忚鍙疯鍗忚閰嶇疆淇℃伅 -// 与接收数据有关项目 -#define SDS_SIO_GET_STAT_INFO 0x211 // 读所有端口统计信息 -#define SDS_SIO_CLR_STAT_INFO 0x212 // 端口统计信息清零 -#define SDS_SIO_GET_AI_DATA_INFO 0x213 // 读端口遥测 -#define SDS_SIO_GET_DI_DATA_INFO 0x214 // 读端口遥信 -#define SDS_SIO_GET_PI_DATA_INFO 0x215 // 读端口电度 +// 涓庢帴鏀舵暟鎹湁鍏抽」鐩 +#define SDS_SIO_GET_STAT_INFO 0x211 // 璇绘墍鏈夌鍙g粺璁′俊鎭 +#define SDS_SIO_CLR_STAT_INFO 0x212 // 绔彛缁熻淇℃伅娓呴浂 +#define SDS_SIO_GET_AI_DATA_INFO 0x213 // 璇荤鍙i仴娴 +#define SDS_SIO_GET_DI_DATA_INFO 0x214 // 璇荤鍙i仴淇 +#define SDS_SIO_GET_PI_DATA_INFO 0x215 // 璇荤鍙g數搴 -#define SDS_SIO_GET_CONFIG_FILE 0x221 // 读portconfig.ini 文件 -#define SDS_SIO_SET_CONFIG_FILE 0x222 // 写portconfig.ini 文件 +#define SDS_SIO_GET_CONFIG_FILE 0x221 // 璇籶ortconfig.ini 鏂囦欢 +#define SDS_SIO_SET_CONFIG_FILE 0x222 // 鍐檖ortconfig.ini 鏂囦欢 -#define SDS_SIO_SET_SYSTEM_TIME 0x231 // 系统对时 +#define SDS_SIO_SET_SYSTEM_TIME 0x231 // 绯荤粺瀵规椂 -#define SDS_SIO_RESET 0x255 // 读端口电度 +#define SDS_SIO_RESET 0x255 // 璇荤鍙g數搴 #define MAX_MAP_REG_NUM 8 @@ -221,21 +221,21 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define INSERAT_CMD_TYPE 1 #define FAST_CMD_TYPE 2 -//设定maskbit意义在于(&~maskbit)|bit确定位值 -// 数据位数 +//璁惧畾maskbit鎰忎箟鍦ㄤ簬(&~maskbit)|bit纭畾浣嶅 +// 鏁版嵁浣嶆暟 #define BITMASK 0x03 #define BIT5 0x00 #define BIT6 0x01 #define BIT7 0x02 #define BIT8 0x03 -// 停止位 +// 鍋滄浣 #define STOPMASK 0x0c #define STOP1 0x04 #define STOP2 0x08 #define STOP15 0x0c -// 校验位 +// 鏍¢獙浣 #define PARITYMASK 0xf0 #define PARITYNONE 0x00 #define PARITYODD 0x10 @@ -243,21 +243,21 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define PARITYMRK 0x30 #define PARITYSPC 0x40 -// 流控制 +// 娴佹帶鍒 #define RTSMASK 0x01 #define DTRMASK 0x02 #define CTSMASK 0x04 -#define PNT_ENABLE 0 // 点使能 -#define PNT_STATE 1 // 点状态 -#define PNT_RAWVALUE 3 // 点原值(遥测,电度) -#define PNT_POLAR 5 // 遥测点极性 -#define PNT_STATUS 6 // 遥信点状态 -#define PNT_CTRL_NO 7 // 遥信控点号 -#define PNT_PROV_MSG 10 // 转发信息 -#define PNT_SOE_TIME 20 // 遥信 SOE 时间 -#define PNT_ALL_MSG 21 // 读取点的所有信息 -#define PNT_SOE_TIME_EX 22 // 含有扩展信息的遥信SOE时间 +#define PNT_ENABLE 0 // 鐐逛娇鑳 +#define PNT_STATE 1 // 鐐圭姸鎬 +#define PNT_RAWVALUE 3 // 鐐瑰師鍊(閬ユ祴,鐢靛害) +#define PNT_POLAR 5 // 閬ユ祴鐐规瀬鎬 +#define PNT_STATUS 6 // 閬ヤ俊鐐圭姸鎬 +#define PNT_CTRL_NO 7 // 閬ヤ俊鎺х偣鍙 +#define PNT_PROV_MSG 10 // 杞彂淇℃伅 +#define PNT_SOE_TIME 20 // 閬ヤ俊 SOE 鏃堕棿 +#define PNT_ALL_MSG 21 // 璇诲彇鐐圭殑鎵鏈変俊鎭 +#define PNT_SOE_TIME_EX 22 // 鍚湁鎵╁睍淇℃伅鐨勯仴淇OE鏃堕棿 #define AI_PNT_TYPE 0 @@ -271,91 +271,91 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define DO_PNT_TYPE 21 /*! - \brief 保护模拟量类型 + \brief 淇濇姢妯℃嫙閲忕被鍨 */ #define PROTECT_AI_PNT_TYPE 128 /*! - \brief 保护开关量类型 + \brief 淇濇姢寮鍏抽噺绫诲瀷 */ #define PROTECT_DI_PNT_TYPE 129 /*! - \brief 保护定值类型 + \brief 淇濇姢瀹氬肩被鍨 */ #define PROTECT_FIX_PNT_TYPE 130 /*! - \brief 保护事件类型 + \brief 淇濇姢浜嬩欢绫诲瀷 */ #define PROTECT_EVENT_PNT_TYPE 131 #define POLL_CMD_TYPE_CMD 3 -#define NORMAL_POLL_CMD 0 // 普通命令队列 -#define INSERT_POLL_CMD 1 // 插入命令队列 -#define FAST_POLL_CMD 2 // 快速命令队列 - -// TIMER_CNT, CREATE_CNT, LED_CNT必须能整除1000 -//#define TIMER_CNT 20 // Poll命令定时器时间 20 ms -#define TIMER_CNT 200 // Poll命令定时器时间 200 ms -#define DATA_PRO_CNT 10 // 定时器基本时间 10 ms +#define NORMAL_POLL_CMD 0 // 鏅氬懡浠ら槦鍒 +#define INSERT_POLL_CMD 1 // 鎻掑叆鍛戒护闃熷垪 +#define FAST_POLL_CMD 2 // 蹇熷懡浠ら槦鍒 + +// TIMER_CNT, CREATE_CNT, LED_CNT蹇呴』鑳芥暣闄1000 +//#define TIMER_CNT 20 // Poll鍛戒护瀹氭椂鍣ㄦ椂闂 20 ms +#define TIMER_CNT 200 // Poll鍛戒护瀹氭椂鍣ㄦ椂闂 200 ms +#define DATA_PRO_CNT 10 // 瀹氭椂鍣ㄥ熀鏈椂闂 10 ms #define CREATE_CNT 100 // 100 ms #define LED_CNT 250 // 250 ms #define BLK_SIZE 256 -#define SYSTEM_TIME 300 // RTU 对时, 300秒一次 +#define SYSTEM_TIME 300 // RTU 瀵规椂, 300绉掍竴娆 #define MAX_DISP_LINE 2048 #define MAX_PROV_SOE 128 -#define STEP_YKYT_NOEXEC 0 // 无 操 作 -#define STEP_YKYT_SELECT 1 // 遥控选择 -#define STEP_YKYT_EXEC 2 // 遥控执行 -#define STEP_YKYT_CANCEL 3 // 遥控撤销 -#define STEP_YT_SELECT 4 // 遥调选择 -#define STEP_YT_EXEC 5 // 遥调执行 -#define STEP_YT_CANCEL 6 // 遥调撤销 -#define STEP_YKYT_DIRECT 7 // 直 控 -#define STEP_YKYT_STOP 8 // 遥调急停 - -// 数据类型 +#define STEP_YKYT_NOEXEC 0 // 鏃 鎿 浣 +#define STEP_YKYT_SELECT 1 // 閬ユ帶閫夋嫨 +#define STEP_YKYT_EXEC 2 // 閬ユ帶鎵ц +#define STEP_YKYT_CANCEL 3 // 閬ユ帶鎾ら攢 +#define STEP_YT_SELECT 4 // 閬ヨ皟閫夋嫨 +#define STEP_YT_EXEC 5 // 閬ヨ皟鎵ц +#define STEP_YT_CANCEL 6 // 閬ヨ皟鎾ら攢 +#define STEP_YKYT_DIRECT 7 // 鐩 鎺 +#define STEP_YKYT_STOP 8 // 閬ヨ皟鎬ュ仠 + +// 鏁版嵁绫诲瀷 /*! - 无效数据类型 + 鏃犳晥鏁版嵁绫诲瀷 */ #define DT_NO 0 /*! - 无符号整型数 + 鏃犵鍙锋暣鍨嬫暟 */ #define DT_UINT 1 /*! - 整型数 + 鏁村瀷鏁 */ #define DT_INT 2 /*! - 浮点数 + 娴偣鏁 */ #define DT_FLOAT 3 /*! - 字符串 + 瀛楃涓 */ #define DT_STRING 4 /*! - 二进制数据 + 浜岃繘鍒舵暟鎹 */ #define DT_BINARY 5 /*! - 控制字 + 鎺у埗瀛 */ #define DT_CONTROL 6 -// 信息扩展数据至少扩展2个字节,其中第一字节指示数据类型, -// 第二字节根据不同数据类型有所不同。 -#define CHECK_NO 1 // 无校验,第二扩展字节无效,置0 -#define CHECK_WHOLE 2 // 总校验,第二扩展字节为校验错误数 -#define CHECK_GROUP 3 // 分组校验,第二扩展校验错误总数 +// 淇℃伅鎵╁睍鏁版嵁鑷冲皯鎵╁睍2涓瓧鑺傦紝鍏朵腑绗竴瀛楄妭鎸囩ず鏁版嵁绫诲瀷, +// 绗簩瀛楄妭鏍规嵁涓嶅悓鏁版嵁绫诲瀷鏈夋墍涓嶅悓銆 +#define CHECK_NO 1 // 鏃犳牎楠岋紝绗簩鎵╁睍瀛楄妭鏃犳晥锛岀疆0 +#define CHECK_WHOLE 2 // 鎬绘牎楠岋紝绗簩鎵╁睍瀛楄妭涓烘牎楠岄敊璇暟 +#define CHECK_GROUP 3 // 鍒嗙粍鏍¢獙锛岀浜屾墿灞曟牎楠岄敊璇绘暟 #define DATATYPE_NO -1 #define DATATYPE_AI 0 @@ -364,13 +364,13 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define DATATYPE_STRING 3 #define DATATYPE_PI 4 -// wen 2005.10.08 解决malloc分配内存不能释放的问题 -#define MIN_MALLOC_SIZE 200 // malloc分配内存的最小尺寸 -#define MAX_NO_WRITE_NUM 600000 // 网络最大不可写尺寸 -#define MAX_BUFUNIT_NUM 1000 // 缓冲区单元最大数量 +// wen 2005.10.08 瑙e喅malloc鍒嗛厤鍐呭瓨涓嶈兘閲婃斁鐨勯棶棰 +#define MIN_MALLOC_SIZE 200 // malloc鍒嗛厤鍐呭瓨鐨勬渶灏忓昂瀵 +#define MAX_NO_WRITE_NUM 600000 // 缃戠粶鏈澶т笉鍙啓灏哄 +#define MAX_BUFUNIT_NUM 1000 // 缂撳啿鍖哄崟鍏冩渶澶ф暟閲 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 增加fend功能的宏定义 +// 澧炲姞fend鍔熻兘鐨勫畯瀹氫箟 #define MAX_HOST 2 #define MAX_FEND 2 #define MAX_ADDR 2 @@ -380,13 +380,13 @@ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define FEND_TYPE 1 #define HOST_TYPE 2 -#define TCPIP_ADDR_LEN 32 // TCP/IP 通讯地址最大长度 -#define MAX_MACHINE_NAME_LEN 48 // 计算机名最大长度 +#define TCPIP_ADDR_LEN 32 // TCP/IP 閫氳鍦板潃鏈澶ч暱搴 +#define MAX_MACHINE_NAME_LEN 48 // 璁$畻鏈哄悕鏈澶ч暱搴 -#define MAX_RTU_MSG_SIZE 8192 // RTU 信息包最大长度 +#define MAX_RTU_MSG_SIZE 8192 // RTU 淇℃伅鍖呮渶澶ч暱搴 #ifdef OS_LINUX -// 在linux下定义属性单字节对齐 +// 鍦╨inux涓嬪畾涔夊睘鎬у崟瀛楄妭瀵归綈 typedef int SOCKET; #define INVALID_SOCKET (SOCKET)(~0) #endif @@ -394,7 +394,7 @@ typedef int SOCKET; #define __attribute__(x) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -#define MAX_POLL_CMD_BUF_LEN 256 // 轮询指令缓冲区最大长度 +#define MAX_POLL_CMD_BUF_LEN 256 // 杞鎸囦护缂撳啿鍖烘渶澶ч暱搴 enum Param_Type { @@ -415,24 +415,24 @@ enum Param_Type #pragma pack(1) #endif //OS_UNIX -//SDS 包类型头 +//SDS 鍖呯被鍨嬪ご typedef struct { - BYTE PortIdx; // 信息类型 - WORD MsgType; // 信息类型 - WORD MsgLen; // 信息长度 + BYTE PortIdx; // 淇℃伅绫诲瀷 + WORD MsgType; // 淇℃伅绫诲瀷 + WORD MsgLen; // 淇℃伅闀垮害 } RTUMSGHEAD; -//SDS包类型结构 +//SDS鍖呯被鍨嬬粨鏋 typedef struct { - BYTE PortIdx; // 信息类型 - WORD MsgType; // 信息类型 - WORD MsgLen; // 信息长度 + BYTE PortIdx; // 淇℃伅绫诲瀷 + WORD MsgType; // 淇℃伅绫诲瀷 + WORD MsgLen; // 淇℃伅闀垮害 u_char MsgData[MAX_MSG_BUF_SIZE]; } RTUMSG; -//网络发包临时数据绶冲结构 +//缃戠粶鍙戝寘涓存椂鏁版嵁缁跺啿缁撴瀯 typedef struct { int BufSize; @@ -459,8 +459,8 @@ typedef struct u_char ChangeFlag; float fFactor; - // 模拟盘专用参数 - WORD wType; // 转发点类型 + // 妯℃嫙鐩樹笓鐢ㄥ弬鏁 + WORD wType; // 杞彂鐐圭被鍨 } PROV_AI_PNT; typedef struct @@ -473,8 +473,8 @@ typedef struct u_char CtrlEnable; short ControlNo; - // 模拟盘专用参数 - WORD wType; // 转发点类型 + // 妯℃嫙鐩樹笓鐢ㄥ弬鏁 + WORD wType; // 杞彂鐐圭被鍨 } PROV_DI_PNT; typedef PROV_AI_PNT PROV_PI_PNT; @@ -489,84 +489,84 @@ typedef struct typedef struct { BYTE Enable; - BYTE State; // 遥测状态 + BYTE State; // 閬ユ祴鐘舵 - //WORD RawValue; // 遥测原值 - DWORD RawValue; // 遥测原值 - BYTE Polar; // 处理极性 - PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志 + //WORD RawValue; // 閬ユ祴鍘熷 + DWORD RawValue; // 閬ユ祴鍘熷 + BYTE Polar; // 澶勭悊鏋佹 + PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 杞彂鏍囧織 } AI_DEF; typedef struct { BYTE Enable; - BYTE State; // 遥信状态 + BYTE State; // 閬ヤ俊鐘舵 - BYTE Status; // 遥信状态 + BYTE Status; // 閬ヤ俊鐘舵 u_char CtrlEnable; WORD ControlNo; DAY_TIME SoeTime; - PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志 + PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 杞彂鏍囧織 } DI_DEF; typedef struct { BYTE Enable; - BYTE State; // 电度状态 + BYTE State; // 鐢靛害鐘舵 - u_long RawValue; // 电度原值 + u_long RawValue; // 鐢靛害鍘熷 - PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志 + PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 杞彂鏍囧織 } PI_DEF; typedef struct { - int iPntNo; // SOE点号 - BYTE bStatus; // 状态值 + int iPntNo; // SOE鐐瑰彿 + BYTE bStatus; // 鐘舵佸 - // wen 2005.05.18 增加扩展字节处理(针对于103有效) - BYTE u8Type; // 103中表现为asdu号 - BYTE u8ProvFun; // 103转发中的FUN - BYTE u8ProvInf; // 103转发中的INF - WORD wRelativeTime; // 相对时间 - WORD wFaultNo; // 故障序号 + // wen 2005.05.18 澧炲姞鎵╁睍瀛楄妭澶勭悊(閽堝浜103鏈夋晥) + BYTE u8Type; // 103涓〃鐜颁负asdu鍙 + BYTE u8ProvFun; // 103杞彂涓殑FUN + BYTE u8ProvInf; // 103杞彂涓殑INF + WORD wRelativeTime; // 鐩稿鏃堕棿 + WORD wFaultNo; // 鏁呴殰搴忓彿 - DAY_TIME SoeTime; // SOE时间 + DAY_TIME SoeTime; // SOE鏃堕棿 - // wen 2005.10.25 增加扩充字符串,用来解析保护事件中的故障参数 - char szMsgEx[64]; // 扩充字节数不得大于64字节 + // wen 2005.10.25 澧炲姞鎵╁厖瀛楃涓诧紝鐢ㄦ潵瑙f瀽淇濇姢浜嬩欢涓殑鏁呴殰鍙傛暟 + char szMsgEx[64]; // 鎵╁厖瀛楄妭鏁颁笉寰楀ぇ浜64瀛楄妭 } SOE_DEF; typedef struct { - int iSoeNum; // soe数量 - int iFront; // 队列首指针 - int iRear; // 队列尾指针 - SOE_DEF *ptrProvSoe; // 端口soe数据缓冲区(最大=MAX_PROV_SOE)队列 + int iSoeNum; // soe鏁伴噺 + int iFront; // 闃熷垪棣栨寚閽 + int iRear; // 闃熷垪灏炬寚閽 + SOE_DEF *ptrProvSoe; // 绔彛soe鏁版嵁缂撳啿鍖(鏈澶э紳MAX_PROV_SOE)闃熷垪 } PROV_SOE_DEF; -#define YKYT_CMD_FROM_NO 0 // 没有数据来源 -#define YKYT_CMD_FROM_SCADA 1 // 来源于scada系统 -#define YKYT_CMD_FROM_PROVPORT 2 // 来源于转发端口 -// wen 2003.08.22 增加遥控遥调转发处理 +#define YKYT_CMD_FROM_NO 0 // 娌℃湁鏁版嵁鏉ユ簮 +#define YKYT_CMD_FROM_SCADA 1 // 鏉ユ簮浜巗cada绯荤粺 +#define YKYT_CMD_FROM_PROVPORT 2 // 鏉ユ簮浜庤浆鍙戠鍙 +// wen 2003.08.22 澧炲姞閬ユ帶閬ヨ皟杞彂澶勭悊 typedef struct { - int m_iProvPortIdx; // 转发厂站端口号 - int m_iProvPntIdx; // 转发厂站遥信点号 - int m_iProvYkYtPointIdx;// 转发厂站遥控遥调点号 - int m_iYkYtPointIdx; // 实际厂站遥控遥调点号 + int m_iProvPortIdx; // 杞彂鍘傜珯绔彛鍙 + int m_iProvPntIdx; // 杞彂鍘傜珯閬ヤ俊鐐瑰彿 + int m_iProvYkYtPointIdx;// 杞彂鍘傜珯閬ユ帶閬ヨ皟鐐瑰彿 + int m_iYkYtPointIdx; // 瀹為檯鍘傜珯閬ユ帶閬ヨ皟鐐瑰彿 - int m_iYkYtStep; // 遥控遥调转发步骤(无操作(=0)/选择(=1)/执行(=2)) - // 该结构成员是用来保存操作类型的(不仅仅针对转发遥控) - int m_iYkYtOperate; // 遥控遥调操作(控分、控合、失败) - int m_iYkYtMode; // 遥控遥调模式(仅对104有效) - - DAY_TIME m_sDayTime; // 遥控命令下发的时间 - int m_iTimeOut; // 转发遥控超时时间 - int m_iCmdFrom; // 指令来源(=0 无来源; =1 来源scada; =2 来源转发端口) + int m_iYkYtStep; // 閬ユ帶閬ヨ皟杞彂姝ラ(鏃犳搷浣(=0)/閫夋嫨(=1)/鎵ц(=2)) + // 璇ョ粨鏋勬垚鍛樻槸鐢ㄦ潵淇濆瓨鎿嶄綔绫诲瀷鐨(涓嶄粎浠呴拡瀵硅浆鍙戦仴鎺) + int m_iYkYtOperate; // 閬ユ帶閬ヨ皟鎿嶄綔锛堟帶鍒嗐佹帶鍚堛佸け璐ワ級 + int m_iYkYtMode; // 閬ユ帶閬ヨ皟妯″紡(浠呭104鏈夋晥) + + DAY_TIME m_sDayTime; // 閬ユ帶鍛戒护涓嬪彂鐨勬椂闂 + int m_iTimeOut; // 杞彂閬ユ帶瓒呮椂鏃堕棿 + int m_iCmdFrom; // 鎸囦护鏉ユ簮(=0 鏃犳潵婧; =1 鏉ユ簮scada; =2 鏉ユ簮杞彂绔彛) } PROV_YKYT_DEF; #define YKYT_SEND_UP 1 // @@ -574,123 +574,123 @@ typedef struct typedef struct { - int m_iYkYtStep; // 遥控遥调执行步骤 - int m_iYkYtPnt; // 遥控遥调点 - int m_iYkYtOperate; // 遥控遥调操作状态(控分、控合、失败) - int m_iYkYtUpDown; // 上行命令还是下行命令(1=up, 0=down) + int m_iYkYtStep; // 閬ユ帶閬ヨ皟鎵ц姝ラ + int m_iYkYtPnt; // 閬ユ帶閬ヨ皟鐐 + int m_iYkYtOperate; // 閬ユ帶閬ヨ皟鎿嶄綔鐘舵侊紙鎺у垎銆佹帶鍚堛佸け璐ワ級 + int m_iYkYtUpDown; // 涓婅鍛戒护杩樻槸涓嬭鍛戒护(1=up, 0=down) } YKYT_PARAM; typedef struct { - //******************** 串行端口信息 ************************ - DWORD Baud; // 波特率(cdt计算时间间隔) + //******************** 涓茶绔彛淇℃伅 ************************ + DWORD Baud; // 娉㈢壒鐜(cdt璁$畻鏃堕棿闂撮殧) - //**************** 数据收发缓冲区接收状态******************* - int m_iRevStatus; // 接收数据缓冲区状态 - int m_iNeedRevLength; // 还需要接收的数据长度 + //**************** 鏁版嵁鏀跺彂缂撳啿鍖烘帴鏀剁姸鎬******************* + int m_iRevStatus; // 鎺ユ敹鏁版嵁缂撳啿鍖虹姸鎬 + int m_iNeedRevLength; // 杩橀渶瑕佹帴鏀剁殑鏁版嵁闀垮害 //******************** Poll Cmd **************************** - u_long Retry; // 重试命令次数 - u_long RetryCnt; // 重试命令计数 - u_long RetryTime; // 重试命令时间 - u_long RetryTimeCnt; // 重试命令时间计数 - u_long WaitTime; // 命令间隔时间 - u_long WaitTimeCnt; // 命令间隔时间计数 + u_long Retry; // 閲嶈瘯鍛戒护娆℃暟 + u_long RetryCnt; // 閲嶈瘯鍛戒护璁℃暟 + u_long RetryTime; // 閲嶈瘯鍛戒护鏃堕棿 + u_long RetryTimeCnt; // 閲嶈瘯鍛戒护鏃堕棿璁℃暟 + u_long WaitTime; // 鍛戒护闂撮殧鏃堕棿 + u_long WaitTimeCnt; // 鍛戒护闂撮殧鏃堕棿璁℃暟 - u_char ForceWaitFlag; // 强制等待标志 - u_short ForceWaitCnt; // 强制等待计数 + u_char ForceWaitFlag; // 寮哄埗绛夊緟鏍囧織 + u_short ForceWaitCnt; // 寮哄埗绛夊緟璁℃暟 - u_char ReSendCmdFlag; // 重发命令标志 - u_char SendCmdFlag; // 命令发送标志 - u_char RevCmdFlag; // 命令正常接收标志 + u_char ReSendCmdFlag; // 閲嶅彂鍛戒护鏍囧織 + u_char SendCmdFlag; // 鍛戒护鍙戦佹爣蹇 + u_char RevCmdFlag; // 鍛戒护姝e父鎺ユ敹鏍囧織 - u_char LastGetCmdBuf; // 当前使用缓冲区 + u_char LastGetCmdBuf; // 褰撳墠浣跨敤缂撳啿鍖 DATA_BUF PollCmd[POLL_CMD_TYPE_NUM]; - //******************* 端口数据库 *************************** + //******************* 绔彛鏁版嵁搴 *************************** u_char PortType; // MAIN_PORT or SLAVE_PORT - u_char CheckTime; // 时间校正(=0, 不对时; =1, 上对时(接收); =2, 下对时(发送)) + u_char CheckTime; // 鏃堕棿鏍℃(=0, 涓嶅鏃; =1, 涓婂鏃(鎺ユ敹); =2, 涓嬪鏃(鍙戦)) - WORD AiNum; // 端口遥测数量 - WORD DiNum; // 端口遥信数量 - WORD PiNum; // 端口电度数量 + WORD AiNum; // 绔彛閬ユ祴鏁伴噺 + WORD DiNum; // 绔彛閬ヤ俊鏁伴噺 + WORD PiNum; // 绔彛鐢靛害鏁伴噺 - void *AiPtr; // 遥测数据内存指针 - void *DiPtr; // 遥信数据内存指针 - void *PiPtr; // 电度数据内存指针 - - // wen 2004.11.16 数据转发时用 - u_char DiChange; // 遥信数据是否变化 - u_char AiChange; // 遥测数据是否变化 - // wen 2004.11.16 增加soe数据的转发存储 - PROV_SOE_DEF ProvSoeBuf; // 转发soe数据缓冲区 - PROV_YKYT_DEF ProvYkYtMsg; // 转发遥控信息缓冲区 + void *AiPtr; // 閬ユ祴鏁版嵁鍐呭瓨鎸囬拡 + void *DiPtr; // 閬ヤ俊鏁版嵁鍐呭瓨鎸囬拡 + void *PiPtr; // 鐢靛害鏁版嵁鍐呭瓨鎸囬拡 + + // wen 2004.11.16 鏁版嵁杞彂鏃剁敤 + u_char DiChange; // 閬ヤ俊鏁版嵁鏄惁鍙樺寲 + u_char AiChange; // 閬ユ祴鏁版嵁鏄惁鍙樺寲 + // wen 2004.11.16 澧炲姞soe鏁版嵁鐨勮浆鍙戝瓨鍌 + PROV_SOE_DEF ProvSoeBuf; // 杞彂soe鏁版嵁缂撳啿鍖 + PROV_YKYT_DEF ProvYkYtMsg; // 杞彂閬ユ帶淇℃伅缂撳啿鍖 } SIO_PARAM_BAOHU_DEF; typedef struct { - //***************** 串行端口信息 ************************ - DWORD Baud; // 波特率 - u_char CommMode; // 数据位、校验和停止位 - u_char WorkMode; // 方式,RS323、422、485 - - int Rs485WaitCnt; // 485 切换等待计数 - - u_char ChipCheckOk; // 芯片检验标志 - u_char ChSelect; // 芯片型号 - u_char FreqSelect; // 芯片工作频率 - u_char WrRegMap[MAX_MAP_REG_NUM]; // 芯片寄存器映射 - - u_char HandshakeMode; // 通讯握手方式 - u_char XonChar1; // 软件握手ON字符1 - u_char XonChar2; // 软件握手ON字符2 - u_char XoffChar1; // 软件握手OFF字符1 - u_char XoffChar2; // 软件握手OFF字符2 + //***************** 涓茶绔彛淇℃伅 ************************ + DWORD Baud; // 娉㈢壒鐜 + u_char CommMode; // 鏁版嵁浣嶃佹牎楠屽拰鍋滄浣 + u_char WorkMode; // 鏂瑰紡锛孯S323銆422銆485 + + int Rs485WaitCnt; // 485 鍒囨崲绛夊緟璁℃暟 + + u_char ChipCheckOk; // 鑺墖妫楠屾爣蹇 + u_char ChSelect; // 鑺墖鍨嬪彿 + u_char FreqSelect; // 鑺墖宸ヤ綔棰戠巼 + u_char WrRegMap[MAX_MAP_REG_NUM]; // 鑺墖瀵勫瓨鍣ㄦ槧灏 + + u_char HandshakeMode; // 閫氳鎻℃墜鏂瑰紡 + u_char XonChar1; // 杞欢鎻℃墜ON瀛楃1 + u_char XonChar2; // 杞欢鎻℃墜ON瀛楃2 + u_char XoffChar1; // 杞欢鎻℃墜OFF瀛楃1 + u_char XoffChar2; // 杞欢鎻℃墜OFF瀛楃2 //********************************************************** } SIO_PARAM_SERIAL_DEF; -//串口相关所有参数集中定义 +//涓插彛鐩稿叧鎵鏈夊弬鏁伴泦涓畾涔 typedef struct { - //******************** 端口基本信息 ************************ - u_char ProtocolIdx; // 规约索引,大于 0 - u_char ByPassFlag; // 旁路标志 - u_char OpenFlag; // 打开标志(该标识弃用,改在共享内存中) - u_char Status; // 端口状态,用来判断端口是否通讯正常 - // 在端口正常的1分钟后发送全数据, 避免数据未全部刷新导致的乱报警 - int iDelaySendAllData;// 全数据延迟传送 - int iForceSendFlag; // 强制下发标志 + //******************** 绔彛鍩烘湰淇℃伅 ************************ + u_char ProtocolIdx; // 瑙勭害绱㈠紩锛屽ぇ浜 0 + u_char ByPassFlag; // 鏃佽矾鏍囧織 + u_char OpenFlag; // 鎵撳紑鏍囧織(璇ユ爣璇嗗純鐢紝鏀瑰湪鍏变韩鍐呭瓨涓) + u_char Status; // 绔彛鐘舵侊紝鐢ㄦ潵鍒ゆ柇绔彛鏄惁閫氳姝e父 + // 鍦ㄧ鍙f甯哥殑1鍒嗛挓鍚庡彂閫佸叏鏁版嵁, 閬垮厤鏁版嵁鏈叏閮ㄥ埛鏂板鑷寸殑涔辨姤璀 + int iDelaySendAllData;// 鍏ㄦ暟鎹欢杩熶紶閫 + int iForceSendFlag; // 寮哄埗涓嬪彂鏍囧織 - //******************** 网络端口信息 ************************ - u_char NetType; // UDP_COMM、TCP_S_COMM、TCO_C_COMM - DWORD NetPort; // 网络通讯端口 - u_long NetCommIpAddr; // 网络通讯地址 - int LiSock; // 侦听socket - int CommSock; // 通讯socket + //******************** 缃戠粶绔彛淇℃伅 ************************ + u_char NetType; // UDP_COMM銆乀CP_S_COMM銆乀CO_C_COMM + DWORD NetPort; // 缃戠粶閫氳绔彛 + u_long NetCommIpAddr; // 缃戠粶閫氳鍦板潃 + int LiSock; // 渚﹀惉socket + int CommSock; // 閫氳socket //********************************************************** - //******************** 数据收发缓冲区*********************** - DATA_BUF RecvBuf; // 接收数据缓冲区 - struct WR_DATA *WriteData; // 下行数据缓冲区 + //******************** 鏁版嵁鏀跺彂缂撳啿鍖*********************** + DATA_BUF RecvBuf; // 鎺ユ敹鏁版嵁缂撳啿鍖 + struct WR_DATA *WriteData; // 涓嬭鏁版嵁缂撳啿鍖 - int iWriteDataNo; // 下行数据缓冲区序号 - //******************** 统计信息 **************************** - u_long MsgNum; // 端口信息计数 - u_long LostSyncCnt; // 端口失步次数 - u_long ErrMsgNum; // 端口错误信息计数 - u_long RecvCharNum; // 端口在线时间统计 - u_long SendCharNum; // 端口离线时间统计 - u_long LineCommCnt; // 端口是否在线计数 + int iWriteDataNo; // 涓嬭鏁版嵁缂撳啿鍖哄簭鍙 + //******************** 缁熻淇℃伅 **************************** + u_long MsgNum; // 绔彛淇℃伅璁℃暟 + u_long LostSyncCnt; // 绔彛澶辨娆℃暟 + u_long ErrMsgNum; // 绔彛閿欒淇℃伅璁℃暟 + u_long RecvCharNum; // 绔彛鍦ㄧ嚎鏃堕棿缁熻 + u_long SendCharNum; // 绔彛绂荤嚎鏃堕棿缁熻 + u_long LineCommCnt; // 绔彛鏄惁鍦ㄧ嚎璁℃暟 - //****************** 串行端口信息 ************************** + //****************** 涓茶绔彛淇℃伅 ************************** SIO_PARAM_SERIAL_DEF *m_psSerial; //********************************************************** - //******************* 保护信息 ***************************** + //******************* 淇濇姢淇℃伅 ***************************** SIO_PARAM_BAOHU_DEF *m_psBaoHu; //********************************************************** - //******************** 用户扩展结构 ************************ + //******************** 鐢ㄦ埛鎵╁睍缁撴瀯 ************************ void *ExtInfo; //********************************************************** } SIO_PARAM_DEF; @@ -737,85 +737,85 @@ typedef struct DISP_LINE_BUF WatchDispLine; } DEV_DEF; -// wen 2005.05.27 保护数据(保护模拟量、保护开关量、保护定值的存储结构) +// wen 2005.05.27 淇濇姢鏁版嵁(淇濇姢妯℃嫙閲忋佷繚鎶ゅ紑鍏抽噺銆佷繚鎶ゅ畾鍊肩殑瀛樺偍缁撴瀯) /*! \struct GROUPDATADEF - \brief 通用分类数据定义 + \brief 閫氱敤鍒嗙被鏁版嵁瀹氫箟 - \par 快速参考 + \par 蹇熷弬鑰 common.h */ typedef struct { /*! \var GROUPDATADEF::m_szName - \brief 信息点名称描述 + \brief 淇℃伅鐐瑰悕绉版弿杩 \note - 取值范围:[有效的ASCII码字符串,最大长度为64]\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负64]\n */ char m_szName[66]; /*! \var GROUPDATADEF::m_u32DataID - \brief 数据类型 + \brief 鏁版嵁绫诲瀷 \note - 取值范围:[DATAID_NO(0)---DATAID_SINGLE(10)]\n - 如果为DATAID_NO,则数据返回浮点数 + 鍙栧艰寖鍥达細[DATAID_NO(0)---DATAID_SINGLE(10)]\n + 濡傛灉涓篋ATAID_NO锛屽垯鏁版嵁杩斿洖娴偣鏁 */ u_32 m_u32DataID; /*! \var GROUPDATADEF::m_fValue - \brief 信息点值 + \brief 淇℃伅鐐瑰 \note - 取值范围:浮点数取值范围\n + 鍙栧艰寖鍥达細娴偣鏁板彇鍊艰寖鍥碶n */ float m_fValue; /*! \var GROUPDATADEF::m_fMaxValue - \brief 信息点最大值 + \brief 淇℃伅鐐规渶澶у \note - 取值范围:浮点数取值范围\n + 鍙栧艰寖鍥达細娴偣鏁板彇鍊艰寖鍥碶n */ float m_fMaxValue; /*! \var GROUPDATADEF::m_fMinValue - \brief 信息点最小值 + \brief 淇℃伅鐐规渶灏忓 \note - 取值范围:浮点数取值范围\n + 鍙栧艰寖鍥达細娴偣鏁板彇鍊艰寖鍥碶n */ float m_fMinValue; /*! \var GROUPDATADEF::m_fStepValue - \brief 信息点步长值 + \brief 淇℃伅鐐规闀垮 \note - 取值范围:浮点数取值范围\n + 鍙栧艰寖鍥达細娴偣鏁板彇鍊艰寖鍥碶n */ float m_fStepValue; /*! \var GROUPDATADEF::m_szUnit - \brief 信息点量纲 + \brief 淇℃伅鐐归噺绾 \note - 取值范围:[有效的ASCII码字符串,最大长度为16]\n + 鍙栧艰寖鍥达細[鏈夋晥鐨凙SCII鐮佸瓧绗︿覆锛屾渶澶ч暱搴︿负16]\n */ char m_szUnit[18]; /*! \var GROUPDATADEF::iFixDataType - \brief 信息点上送到protect的显示类型 + \brief 淇℃伅鐐逛笂閫佸埌protect鐨勬樉绀虹被鍨 \note - 取值范围:[0-255](类型(AI=1, DI=2))\n + 鍙栧艰寖鍥达細[0-255](绫诲瀷(AI=1, DI=2))\n */ u_char iFixDataType; @@ -823,289 +823,289 @@ typedef struct /*! \struct GROUPEVENTDEF - \brief 保护事件定义 + \brief 淇濇姢浜嬩欢瀹氫箟 - \par 快速参考 + \par 蹇熷弬鑰 common.h */ typedef struct{ /*! \var GROUPEVENTDEF::m_iNewEventNo - \brief 最新事件序号 + \brief 鏈鏂颁簨浠跺簭鍙 \note - 取值范围:[0--(BUF_EVENT_NUM-1)=15]\n + 鍙栧艰寖鍥达細[0--(BUF_EVENT_NUM-1)=15]\n */ i_32 m_iNewEventNo; /*! \var GROUPEVENTDEF::m_iNewEvents - \brief 最新事件数量 + \brief 鏈鏂颁簨浠舵暟閲 \note - 取值范围:[0--16]\n + 鍙栧艰寖鍥达細[0--16]\n */ i_32 m_iNewEvents; /*! \var GROUPEVENTDEF::m_iAllEvents - \brief 缓冲事件数量 + \brief 缂撳啿浜嬩欢鏁伴噺 \note - 取值范围:[0--16]\n + 鍙栧艰寖鍥达細[0--16]\n */ i_32 m_iAllEvents; /*! \var GROUPEVENTDEF::m_sTm[] - \brief 事件发生时间 + \brief 浜嬩欢鍙戠敓鏃堕棿 */ //SYSTEMTIME m_sTm[BUF_EVENT_NUM]; /*! \var GROUPEVENTDEF::m_u8INF[] - \brief 事件信息序号 + \brief 浜嬩欢淇℃伅搴忓彿 */ // BYTE m_u8INF[BUF_EVENT_NUM]; }GROUPEVENTDEF; /*! \struct GROUPDEF - \brief 通用分类数据组定义 + \brief 閫氱敤鍒嗙被鏁版嵁缁勫畾涔 \note - 保护模拟量、保护开关量、保护定值通用存储结构 + 淇濇姢妯℃嫙閲忋佷繚鎶ゅ紑鍏抽噺銆佷繚鎶ゅ畾鍊奸氱敤瀛樺偍缁撴瀯 - \par 快速参考 + \par 蹇熷弬鑰 common.h */ typedef struct{ /*! \var GROUPDEF::m_iGroupNo - \brief 通用分类数据组号 + \brief 閫氱敤鍒嗙被鏁版嵁缁勫彿 \note - 取值范围:[0--255]\n + 鍙栧艰寖鍥达細[0--255]\n */ i_32 m_iGroupNo; /*! \var GROUPDEF::m_iStartItemNo - \brief 通用分类数据起始条目号 + \brief 閫氱敤鍒嗙被鏁版嵁璧峰鏉$洰鍙 \note - 取值范围:[0--255]\n + 鍙栧艰寖鍥达細[0--255]\n */ i_32 m_iStartItemNo; /*! \var GROUPDEF::m_iDataType - \brief 该组号数据对应的数据类型 + \brief 璇ョ粍鍙锋暟鎹搴旂殑鏁版嵁绫诲瀷 \note - 取值范围:AI_PNT_TYPE(模拟量)\n - DI_PNT_TYPE(开关量)\n - PI_PNT_TYPE(电度量)\n - PROTECT_AI_PNT_TYPE(保护模拟量)\n - PROTECT_DI_PNT_TYPE(保护开关量)\n - PROTECT_FIX_PNT_TYPE(保护定 值)\n - PROTECT_EVENT_PNT_TYPE(保护事 件)\n + 鍙栧艰寖鍥达細AI_PNT_TYPE(妯℃嫙閲)\n + DI_PNT_TYPE(寮鍏抽噺)\n + PI_PNT_TYPE(鐢靛害閲)\n + PROTECT_AI_PNT_TYPE(淇濇姢妯℃嫙閲)\n + PROTECT_DI_PNT_TYPE(淇濇姢寮鍏抽噺)\n + PROTECT_FIX_PNT_TYPE(淇濇姢瀹 鍊)\n + PROTECT_EVENT_PNT_TYPE(淇濇姢浜 浠)\n */ i_32 m_iDataType; /*! \var GROUPDEF::m_iStationNo - \brief 写入数据库中的厂站号 + \brief 鍐欏叆鏁版嵁搴撲腑鐨勫巶绔欏彿 \note - 取值范围:[0--MAX_PORT_NUM,0为无效(缺省值)]\n + 鍙栧艰寖鍥达細[0--MAX_PORT_NUM锛0涓烘棤鏁(缂虹渷鍊)]\n */ i_32 m_iStationNo; /*! \var GROUPDEF::m_iStartPntNo - \brief 写入数据库中的起始点号 + \brief 鍐欏叆鏁版嵁搴撲腑鐨勮捣濮嬬偣鍙 \note - 取值范围:[0--(该类型点的最大点号-1)]\n + 鍙栧艰寖鍥达細[0--(璇ョ被鍨嬬偣鐨勬渶澶х偣鍙-1)]\n */ i_32 m_iStartPntNo; /*! \var GROUPDEF::m_u8NGD - \brief 组数据的NGD + \brief 缁勬暟鎹殑NGD \note - 取值范围:[0--(该类型点的最大点号-1)]\n + 鍙栧艰寖鍥达細[0--(璇ョ被鍨嬬偣鐨勬渶澶х偣鍙-1)]\n */ BYTE m_u8NGD; /*! \var GROUPDEF::m_pu8DataType - \brief 保护定值数据类型指针 + \brief 淇濇姢瀹氬兼暟鎹被鍨嬫寚閽 \note - 取值范围:无\n + 鍙栧艰寖鍥达細鏃燶n */ BYTE *m_pu8DataType; /*! \var GROUPDEF::m_pu8DataLen - \brief 保护定值数据长度指针 + \brief 淇濇姢瀹氬兼暟鎹暱搴︽寚閽 \note - 取值范围:无\n + 鍙栧艰寖鍥达細鏃燶n */ BYTE *m_pu8DataLen; /*! \var GROUPDEF::m_pu8GIN - \brief 保护定值数据条目号 + \brief 淇濇姢瀹氬兼暟鎹潯鐩彿 \note - 取值范围:无\n + 鍙栧艰寖鍥达細鏃燶n */ BYTE *m_pu8GIN; /*! \var GROUPDEF::m_u32CurPntNo - \brief 当前数据点号 + \brief 褰撳墠鏁版嵁鐐瑰彿 \note - 取值范围:[1--255]\n + 鍙栧艰寖鍥达細[1--255]\n \note - 用于处理多帧通用分类数据时,确定该帧的数据起始点号 + 鐢ㄤ簬澶勭悊澶氬抚閫氱敤鍒嗙被鏁版嵁鏃讹紝纭畾璇ュ抚鐨勬暟鎹捣濮嬬偣鍙 */ u_32 m_u32CurPntNo; /*! \var GROUPDEF::m_iPntNum - \brief 数量 + \brief 鏁伴噺 \note - 取值范围:无\n + 鍙栧艰寖鍥达細鏃燶n \note - 用于遥控点和保护定值数据 + 鐢ㄤ簬閬ユ帶鐐瑰拰淇濇姢瀹氬兼暟鎹 */ i_32 m_iPntNum; /*! \var GROUPDEF::m_bInit - \brief 保护定值数据长度 + \brief 淇濇姢瀹氬兼暟鎹暱搴 \note - 取值范围:无\n + 鍙栧艰寖鍥达細鏃燶n */ BOOL m_bInit; /*! \var GROUPDEF::m_psDataInfo - \brief 组数据信息指针 + \brief 缁勬暟鎹俊鎭寚閽 \note - 取值范围:无\n + 鍙栧艰寖鍥达細鏃燶n */ GROUPDATADEF *m_psDataInfo; /*! \var GROUPDEF::m_psEventInfo - \brief 组事件信息缓冲区指针 + \brief 缁勪簨浠朵俊鎭紦鍐插尯鎸囬拡 \note - 取值范围:非事件记录组,该指针为NULL\n + 鍙栧艰寖鍥达細闈炰簨浠惰褰曠粍锛岃鎸囬拡涓篘ULL\n */ GROUPEVENTDEF *m_psEventInfo; }GROUPDEF; /*! \struct DBINFO - \brief 测量值数据信息定义 + \brief 娴嬮噺鍊兼暟鎹俊鎭畾涔 - \par 快速参考 + \par 蹇熷弬鑰 common.h */ typedef struct{ /*! \var DBINFO::m_u8Asdu - \brief 基本测量值的数据类型 + \brief 鍩烘湰娴嬮噺鍊肩殑鏁版嵁绫诲瀷 \note - 取值范围:[0--255)]\n + 鍙栧艰寖鍥达細[0--255)]\n */ - u_char m_u8Asdu; // 数据类型 + u_char m_u8Asdu; // 鏁版嵁绫诲瀷 - // wen 2006.05.20 修改为16位 + // wen 2006.05.20 淇敼涓16浣 /*! \var DBINFO::m_u8Fun - \brief 基本测量值的功能类型 + \brief 鍩烘湰娴嬮噺鍊肩殑鍔熻兘绫诲瀷 \note - 取值范围:[0--255)]\n + 鍙栧艰寖鍥达細[0--255)]\n */ - WORD m_u8Fun; // 功能类型 + WORD m_u8Fun; // 鍔熻兘绫诲瀷 /*! \var DBINFO::m_u8Inf - \brief 基本测量值的信息序号 + \brief 鍩烘湰娴嬮噺鍊肩殑淇℃伅搴忓彿 \note - 取值范围:[0--255]\n + 鍙栧艰寖鍥达細[0--255]\n */ - WORD m_u8Inf; // 信息序号 + WORD m_u8Inf; // 淇℃伅搴忓彿 - // 以下参数用作转发 + // 浠ヤ笅鍙傛暟鐢ㄤ綔杞彂 /*! \var DBINFO::m_u8ProvFun - \brief 基本测量值的功能类型 + \brief 鍩烘湰娴嬮噺鍊肩殑鍔熻兘绫诲瀷 \note - 取值范围:[0--255)]\n + 鍙栧艰寖鍥达細[0--255)]\n */ BYTE m_u8ProvFun; /*! \var DBINFO::m_u8ProvInf - \brief 基本测量值的信息序号 + \brief 鍩烘湰娴嬮噺鍊肩殑淇℃伅搴忓彿 \note - 取值范围:[0--255]\n + 鍙栧艰寖鍥达細[0--255]\n */ BYTE m_u8ProvInf; /*! \var DBINFO::m_u8LoopData - \brief 是否总召唤数据 + \brief 鏄惁鎬诲彫鍞ゆ暟鎹 \note - 取值范围:[0--1]\n + 鍙栧艰寖鍥达細[0--1]\n */ BYTE m_u8LoopData; }DBINFO, *pDBINFO; /*! \struct DBORIENTATION - \brief 测量值数据库定位结构 + \brief 娴嬮噺鍊兼暟鎹簱瀹氫綅缁撴瀯 - \par 快速参考 + \par 蹇熷弬鑰 common.h */ typedef struct { /*! \var DBORIENTATION::m_iStnNo - \brief 基本测量值在数据库中写入站号 + \brief 鍩烘湰娴嬮噺鍊煎湪鏁版嵁搴撲腑鍐欏叆绔欏彿 \note - 取值范围:[1--最大厂站号)]\n + 鍙栧艰寖鍥达細[1--鏈澶у巶绔欏彿)]\n */ - i_32 m_iStnNo; // 写入数据库站号 + i_32 m_iStnNo; // 鍐欏叆鏁版嵁搴撶珯鍙 /*! \var DBORIENTATION::m_iStartPntNo - \brief 基本测量值在数据库中起始点号 + \brief 鍩烘湰娴嬮噺鍊煎湪鏁版嵁搴撲腑璧峰鐐瑰彿 \note - 数据类型为规约本身提供的测量值 + 鏁版嵁绫诲瀷涓鸿绾︽湰韬彁渚涚殑娴嬮噺鍊 \note - 取值范围:[0--(最大遥测点号-1)]\n + 鍙栧艰寖鍥达細[0--(鏈澶ч仴娴嬬偣鍙-1)]\n */ - i_32 m_iStartPntNo; // 写入数据库起始点号 + i_32 m_iStartPntNo; // 鍐欏叆鏁版嵁搴撹捣濮嬬偣鍙 /*! \var DBORIENTATION::m_iPntNum - \brief 基本测量值的数量 + \brief 鍩烘湰娴嬮噺鍊肩殑鏁伴噺 \note - 取值范围:[0--255]\n + 鍙栧艰寖鍥达細[0--255]\n */ - i_32 m_iPntNum; // 数量 + i_32 m_iPntNum; // 鏁伴噺 /*! \var DBORIENTATION::m_psDataInfo - \brief 测量值数据信息指针 + \brief 娴嬮噺鍊兼暟鎹俊鎭寚閽 */ pDBINFO m_psDataInfo; }DBORIENTATION; @@ -1114,22 +1114,22 @@ typedef struct tagDEVADDRPARAM { /*! \var DEVADDRPARAM::m_uchLinkAddr - \brief 链路地址 + \brief 閾捐矾鍦板潃 */ BYTE m_uchLinkAddr; /*! \var DEVADDRPARAM::m_uchCommAddr - \brief 公共地址 + \brief 鍏叡鍦板潃 */ BYTE m_uchCommAddr; /*! \var DEVADDRPARAM::m_iLinkIdx - \brief 链路索引号 + \brief 閾捐矾绱㈠紩鍙 */ int m_iLinkIdx; /*! \var DEVADDRPARAM::m_iDevIdx - \brief 装置索引号 + \brief 瑁呯疆绱㈠紩鍙 */ int m_iDevIdx; }DEVADDRPARAM, *pDEVADDRPARAM; @@ -1138,22 +1138,22 @@ typedef struct tagCMDPARAM { /*! \var CMDPARAM::m_uchFun - \brief 指令参数功能号 + \brief 鎸囦护鍙傛暟鍔熻兘鍙 */ BYTE m_uchFun; /*! \var CMDPARAM::m_uchInf - \brief 指令参数信息号 + \brief 鎸囦护鍙傛暟淇℃伅鍙 */ BYTE m_uchInf; /*! \var CMDPARAM::m_uchRII - \brief 返回值 + \brief 杩斿洖鍊 */ BYTE m_uchRII; /*! \var CMDPARAM::m_sDevAddr - \brief 指令参数地址信息 + \brief 鎸囦护鍙傛暟鍦板潃淇℃伅 */ DEVADDRPARAM m_sDevAddr; }CMDPARAM, *pCMDPARAM; @@ -1162,24 +1162,24 @@ typedef struct tagBAOHUPROVPARAM { /*! \var BAOHUPROVPARAM::m_sProvStartTime - \brief 调度转发指令下发时间 + \brief 璋冨害杞彂鎸囦护涓嬪彂鏃堕棿 */ DAY_TIME m_sBaoHuCmdStartTime; /*! \var BAOHUPROVPARAM::m_iBaoHuCommid - \brief 调度转发指令端口 - \note <0, 没有调度转发命令 + \brief 璋冨害杞彂鎸囦护绔彛 + \note <0, 娌℃湁璋冨害杞彂鍛戒护 */ int m_iBaoHuCommid; /*! \var BAOHUPROVPARAM::m_iBaoHuMsgType - \brief 调度指令类型 - \note <0, 没有调度转发命令 + \brief 璋冨害鎸囦护绫诲瀷 + \note <0, 娌℃湁璋冨害杞彂鍛戒护 */ int m_iBaoHuMsgType; /*! \var BAOHUPROVPARAM::m_sProvRealAddrParam - \brief 调度转发指令时,实际装置的参数 + \brief 璋冨害杞彂鎸囦护鏃讹紝瀹為檯瑁呯疆鐨勫弬鏁 */ DEVADDRPARAM m_sRealAddrParam; }BAOHUPROVPARAM, *pBAOHUPROVPARAM; @@ -1187,65 +1187,65 @@ typedef struct tagBAOHUPROVPARAM #define PROV_SOE_MAX 10 /*! \struct DEVPROVSOE - \brief 转发SOE数据结构 + \brief 杞彂SOE鏁版嵁缁撴瀯 - \par 快速参考 + \par 蹇熷弬鑰 common.h */ typedef struct { /*! \var DEVPROVSOE::m_sSoeData - \brief 转发SOE数据参数 + \brief 杞彂SOE鏁版嵁鍙傛暟 \note - 用于转发事件 + 鐢ㄤ簬杞彂浜嬩欢 */ SOE_DEF m_sSoeData[PROV_SOE_MAX]; /*! \var DEVPROVSOE::m_shSoeNum - \brief 转发SOE数据数目 + \brief 杞彂SOE鏁版嵁鏁扮洰 \note - 用于转发事件 + 鐢ㄤ簬杞彂浜嬩欢 */ short m_shSoeNum; /*! \var DEVPROVSOE::m_shFront - \brief 转发SOE数据头索引 + \brief 杞彂SOE鏁版嵁澶寸储寮 \note - 用于转发事件 + 鐢ㄤ簬杞彂浜嬩欢 */ short m_shFront; /*! \var DEVPROVSOE::m_shRear - \brief 转发SOE数据尾索引 + \brief 杞彂SOE鏁版嵁灏剧储寮 \note - 用于转发事件 + 鐢ㄤ簬杞彂浜嬩欢 */ short m_shRear; }DEVPROVSOE; -// 所有规约的通用函数接口指针 +// 鎵鏈夎绾︾殑閫氱敤鍑芥暟鎺ュ彛鎸囬拡 typedef const struct tagFUNCTION_CALL { - char *ProtocolName; // 规约名称 - char *Account; // 规约说明 - char **ProtocolInfo; // 规约信息指针 - void (*ReadConfig)( int ); // 初始化处理 - void (*RecvData)( int, u_char *, int ); // 规约读数据处理 - void (*Timer)( int ); // 定时器处理 - void (*YkYtProcess)( int, u_char *, int ); // 遥控遥调处理 - void (*SendSystemTime)( int ); // 系统对时 - void (*ProtocolExit)( int ); // 规约退出时处理 - // 以下函数指针仅仅针对保护规约有效 - void (*BaoHuCmdProcess)(int, RTUMSG *, BOOL); // 保护数据处理 - int (*GetBaohuDataBase)(int, int, GROUPDEF **); // 获取保护数据库 + char *ProtocolName; // 瑙勭害鍚嶇О + char *Account; // 瑙勭害璇存槑 + char **ProtocolInfo; // 瑙勭害淇℃伅鎸囬拡 + void (*ReadConfig)( int ); // 鍒濆鍖栧鐞 + void (*RecvData)( int, u_char *, int ); // 瑙勭害璇绘暟鎹鐞 + void (*Timer)( int ); // 瀹氭椂鍣ㄥ鐞 + void (*YkYtProcess)( int, u_char *, int ); // 閬ユ帶閬ヨ皟澶勭悊 + void (*SendSystemTime)( int ); // 绯荤粺瀵规椂 + void (*ProtocolExit)( int ); // 瑙勭害閫鍑烘椂澶勭悊 + // 浠ヤ笅鍑芥暟鎸囬拡浠呬粎閽堝淇濇姢瑙勭害鏈夋晥 + void (*BaoHuCmdProcess)(int, RTUMSG *, BOOL); // 淇濇姢鏁版嵁澶勭悊 + int (*GetBaohuDataBase)(int, int, GROUPDEF **); // 鑾峰彇淇濇姢鏁版嵁搴 }FUNCTION_CALL; #ifdef OS_WINDOWS diff --git a/commport.h b/commport.h index dc1a614..d3c0360 100644 --- a/commport.h +++ b/commport.h @@ -10,7 +10,7 @@ #define MSGTYPE_BAOHU_SCADACMD MSGTYPE_BAOHU_BASE+2 #define MSGTYPE_BAOHU_SCADADATA MSGTYPE_BAOHU_BASE+3 -// 从 config.ini 或 portconfig.ini 读信息 +// 浠 config.ini 鎴 portconfig.ini 璇讳俊鎭 u_long GetPrivateProString(const char *section, const char *entry, const char *defaultstr, char *result, int len, char *inifile); int GetPrivateProInt(const char *section, const char *entry, int idefault, char *inifile); u_long GetPrivateProString2(const char *section, const char *entry, const char *defaultstr, char *result, int len, HDSFILE hFile); @@ -19,7 +19,7 @@ int GetPrivateProInt2(const char *section, const char *entry, int idefault, HDSF int PutDataToBuf( DATA_BUF *buf, u_char *msg, int len ); int GetDataFormBuf( DATA_BUF *databuf, u_char *buf, int len, int clrflag ); -// 读设备信息,检查芯片状态和读芯片类型和频率 +// 璇昏澶囦俊鎭紝妫鏌ヨ姱鐗囩姸鎬佸拰璇昏姱鐗囩被鍨嬪拰棰戠巼 void ReadPortConfigInfo( u_short ); void ReadPortConfigInfoEx(u_short); @@ -38,9 +38,9 @@ int CheckPollCmdBufEmpty( int port ); int PutPollCmdToBuf( int port, int type, WORD wait, char *buf, int len ); void SendCmdFormPollCmdBuf( int port ); -// wen 2005.09.08 清空指令缓冲区中的所有指令 +// wen 2005.09.08 娓呯┖鎸囦护缂撳啿鍖轰腑鐨勬墍鏈夋寚浠 void ClearAllCmdFromPollCmdBuf(int port); -// wen 2004.10.25 公布函数接口 +// wen 2004.10.25 鍏竷鍑芥暟鎺ュ彛 void ClearCmdFormPollCmdBuf( int port ); void ClearCmdFormPollCmdBufEx( int port, char *file, int line ); void ClearCmdAllFlag( int port ); @@ -51,8 +51,8 @@ int GetMaxPort(); int GetPortProtocolIdx(char *name); char *GetPortProtocolName(int Idx); -// wen 2004.11.16 增加转发soe数据的处理 -// 返回缓冲区中的soe数据数量 +// wen 2004.11.16 澧炲姞杞彂soe鏁版嵁鐨勫鐞 +// 杩斿洖缂撳啿鍖轰腑鐨剆oe鏁版嵁鏁伴噺 int ProvWriteSoeData( int provport, SOE_DEF *ptrSoe ); int ProvAndDelGetSoeData( int provport, SOE_DEF *ptrSoe ); int ProvHaveSoeData( int provport ); @@ -69,7 +69,7 @@ BOOL IsProvYkYtAck(int commid, PROV_YKYT_DEF *pProvYkYt); BOOL ShmGetDispYkYtFlag(); BOOL ShmGetDispHostLinkFlag(); -// wen 2005.04.18 内存的分配与释放 +// wen 2005.04.18 鍐呭瓨鐨勫垎閰嶄笌閲婃斁 void PortMemoryMalloc( int commid, int type, SIO_PARAM_BAOHU_DEF *pBaohuParam ); void PortMemoryMallocEx( int commid, int type, SIO_PARAM_BAOHU_DEF *pBaohuParam ); BOOL PortDataPntInit(int commid, int type, SIO_PARAM_BAOHU_DEF *pBaohuParam); @@ -81,44 +81,44 @@ BOOL IsExtInfoPtr( int commid ); BOOL IsSerialPtr( int commid ); /*! - \brief 获取端口打开标识 - \param commid -- 端口号 - \param rwflag -- 读标识还是写标识 - \返回值 retval-- 返回端口读或者写状态 + \brief 鑾峰彇绔彛鎵撳紑鏍囪瘑 + \param commid -- 绔彛鍙 + \param rwflag -- 璇绘爣璇嗚繕鏄啓鏍囪瘑 + \杩斿洖鍊 retval-- 杩斿洖绔彛璇绘垨鑰呭啓鐘舵 */ int ShmGetPortFlag(int commid, int rwflag); -// 保护数据处理 +// 淇濇姢鏁版嵁澶勭悊 /*! - \brief 发送保护数据到实际的装置 - \param commid -- 端口号 - \param rtumsg -- 转发的保护指令 + \brief 鍙戦佷繚鎶ゆ暟鎹埌瀹為檯鐨勮缃 + \param commid -- 绔彛鍙 + \param rtumsg -- 杞彂鐨勪繚鎶ゆ寚浠 \note - 指令格式暂时用部颁103规约格式 + 鎸囦护鏍煎紡鏆傛椂鐢ㄩ儴棰103瑙勭害鏍煎紡 */ void SendProtectCmdToDev(int commid, RTUMSG *rtumsg); /*! - \brief 将实际装置数据保存到指令下发端口 - \param rtumsg -- 转发的保护指令 + \brief 灏嗗疄闄呰缃暟鎹繚瀛樺埌鎸囦护涓嬪彂绔彛 + \param rtumsg -- 杞彂鐨勪繚鎶ゆ寚浠 \note - 指令格式暂时用部颁103规约格式 + 鎸囦护鏍煎紡鏆傛椂鐢ㄩ儴棰103瑙勭害鏍煎紡 */ void PutBaohuDataToPort(RTUMSG *rtumsg); void PutBaohuDataToPortEx(int commid, RTUMSG *rtumsg); /*! - \brief 将数据发送到所有的scadaprotect规约端口 - \param rtumsg -- 转发的保护指令 + \brief 灏嗘暟鎹彂閫佸埌鎵鏈夌殑scadaprotect瑙勭害绔彛 + \param rtumsg -- 杞彂鐨勪繚鎶ゆ寚浠 */ void SendDataToAllScadaProtectPort(RTUMSG *rtumsg); /*! - \brief 获取指定装置的保护数据库 - \param commid -- 端口号 - \param iProvAddr -- 保护装置转发地址,端口统一编排的地址 - \param ppBaoHuDB -- 存储保护装置保护数据的指针(PAI,PDI,PFIX...) - \retval 返回该装置保护数据组数 + \brief 鑾峰彇鎸囧畾瑁呯疆鐨勪繚鎶ゆ暟鎹簱 + \param commid -- 绔彛鍙 + \param iProvAddr -- 淇濇姢瑁呯疆杞彂鍦板潃锛岀鍙g粺涓缂栨帓鐨勫湴鍧 + \param ppBaoHuDB -- 瀛樺偍淇濇姢瑁呯疆淇濇姢鏁版嵁鐨勬寚閽(PAI,PDI,PFIX...) + \retval 杩斿洖璇ヨ缃繚鎶ゆ暟鎹粍鏁 */ int GetBaohuDB(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB); @@ -128,7 +128,7 @@ int SetCurPort(int PortNo); int GetCurPortEx(); int SetDispFlag(int iFlag); -// 获取全局变量 +// 鑾峰彇鍏ㄥ眬鍙橀噺 SIO_PARAM_DEF *GetSioParamPtr(); #endif diff --git a/conf_close.cpp b/conf_close.cpp index dfd9c5e..c4cc840 100644 --- a/conf_close.cpp +++ b/conf_close.cpp @@ -12,17 +12,17 @@ #include "Profile_Hash.h" /* - * 关闭配置文件句柄 + * 鍏抽棴閰嶇疆鏂囦欢鍙ユ焺 * - * 参数 - * handle -- 配置文件句柄 + * 鍙傛暟 + * handle -- 閰嶇疆鏂囦欢鍙ユ焺 * - * 返回值 - * SUCCESS -- 成功的关闭了指定的配置文件句柄(包括资源释放等工作) - * 其它 -- 失败代码 + * 杩斿洖鍊 + * SUCCESS -- 鎴愬姛鐨勫叧闂簡鎸囧畾鐨勯厤缃枃浠跺彞鏌(鍖呮嫭璧勬簮閲婃斁绛夊伐浣) + * 鍏跺畠 -- 澶辫触浠g爜 * - * 备注 - * 如果输入的参数非配置文件(上下文)句柄, 则不作任何事. + * 澶囨敞 + * 濡傛灉杈撳叆鐨勫弬鏁伴潪閰嶇疆鏂囦欢(涓婁笅鏂)鍙ユ焺, 鍒欎笉浣滀换浣曚簨. * */ int conf_close ( void * handle ) diff --git a/conf_open.cpp b/conf_open.cpp index b509f4e..bf52c5e 100644 --- a/conf_open.cpp +++ b/conf_open.cpp @@ -11,15 +11,15 @@ /* - * 打开配置文件, 返回表示配置文件的句柄 + * 鎵撳紑閰嶇疆鏂囦欢, 杩斿洖琛ㄧず閰嶇疆鏂囦欢鐨勫彞鏌 * - * 参数 - * pszfname -- 配置文件的全路径名(默认为 char [MAX_PATH]类型) - * ppvhandle -- 在函数执行成功的情况下, 返回配置文件(的上下文环境)句柄 + * 鍙傛暟 + * pszfname -- 閰嶇疆鏂囦欢鐨勫叏璺緞鍚(榛樿涓 char [MAX_PATH]绫诲瀷) + * ppvhandle -- 鍦ㄥ嚱鏁版墽琛屾垚鍔熺殑鎯呭喌涓, 杩斿洖閰嶇疆鏂囦欢(鐨勪笂涓嬫枃鐜)鍙ユ焺 * - * 返回值 - * SUCCESS -- 成功的执行了该函数, 并打开了给定的配置文件 - * 其它 -- 失败代码 + * 杩斿洖鍊 + * SUCCESS -- 鎴愬姛鐨勬墽琛屼簡璇ュ嚱鏁, 骞舵墦寮浜嗙粰瀹氱殑閰嶇疆鏂囦欢 + * 鍏跺畠 -- 澶辫触浠g爜 * */ int conf_open ( const char * pszfname, void ** ppvhandle ) diff --git a/conf_read_key.cpp b/conf_read_key.cpp index b71683a..655de56 100644 --- a/conf_read_key.cpp +++ b/conf_read_key.cpp @@ -2,10 +2,10 @@ * * Copyright (C) 1999-2000 SCADA Technology Control Co., Ltd. All rights reserved. * - * 读配置文件的调用接口函数 之 - * 根据指定的 [段]及键的名称, 获取配置文件中的配置项 + * 璇婚厤缃枃浠剁殑璋冪敤鎺ュ彛鍑芥暟 涔 + * 鏍规嵁鎸囧畾鐨 [娈礭鍙婇敭鐨勫悕绉, 鑾峰彇閰嶇疆鏂囦欢涓殑閰嶇疆椤 * - * 创建日期: 2002/01/21 + * 鍒涘缓鏃ユ湡: 2002/01/21 * * * @@ -75,20 +75,20 @@ /* - * 根据指定的 [段]及键的名称, 获取配置文件中的配置项 + * 鏍规嵁鎸囧畾鐨 [娈礭鍙婇敭鐨勫悕绉, 鑾峰彇閰嶇疆鏂囦欢涓殑閰嶇疆椤 * - * 参数 - * handle -- 配置文件句柄 - * pszsec_name -- 段名 - * pszkey_name -- 键名称 - * pszdefault -- 键的默认值, 以null字符结尾的字符串, - * 如果配置文件中没有该键的配置, 同时, 该参数不为空, 则返回该值 - * pbuf -- 返回值的缓冲区 - * buffer_length -- 缓冲区长度 - * - * 返回值 - * SUCCESS -- 成功的执行了本函数 - * 其它 -- 失败代码 + * 鍙傛暟 + * handle -- 閰嶇疆鏂囦欢鍙ユ焺 + * pszsec_name -- 娈靛悕 + * pszkey_name -- 閿悕绉 + * pszdefault -- 閿殑榛樿鍊, 浠ull瀛楃缁撳熬鐨勫瓧绗︿覆, + * 濡傛灉閰嶇疆鏂囦欢涓病鏈夎閿殑閰嶇疆, 鍚屾椂, 璇ュ弬鏁颁笉涓虹┖, 鍒欒繑鍥炶鍊 + * pbuf -- 杩斿洖鍊肩殑缂撳啿鍖 + * buffer_length -- 缂撳啿鍖洪暱搴 + * + * 杩斿洖鍊 + * SUCCESS -- 鎴愬姛鐨勬墽琛屼簡鏈嚱鏁 + * 鍏跺畠 -- 澶辫触浠g爜 * */ int conf_read_key ( void * handle, diff --git a/conf_write_key.cpp b/conf_write_key.cpp index 9ef2ae3..c4da2c0 100644 --- a/conf_write_key.cpp +++ b/conf_write_key.cpp @@ -2,10 +2,10 @@ * * Copyright (C) 1999-2000 SCADA Technology Control Co., Ltd. All rights reserved. * - * 读配置文件的调用接口函数 之 - * 修改/添加一个新的配置项 + * 璇婚厤缃枃浠剁殑璋冪敤鎺ュ彛鍑芥暟 涔 + * 淇敼/娣诲姞涓涓柊鐨勯厤缃」 * - * 创建日期: 2002/01/21 + * 鍒涘缓鏃ユ湡: 2002/01/21 * * * @@ -67,19 +67,19 @@ /* - * 修改/添加一个新的配置项 + * 淇敼/娣诲姞涓涓柊鐨勯厤缃」 * - * 参数 - * handle -- 配置文件句柄 - * pszsec_name -- 段名 - * pszkey_name -- 键名 - * pszkey_value -- 键的值 - * force_insert -- 如果(段, 键)不存在, 是否需要插入该(段, 键)的配置值, - * 如果该参数等于0, 则不插入该配置项, 否则, 插入该配置项. + * 鍙傛暟 + * handle -- 閰嶇疆鏂囦欢鍙ユ焺 + * pszsec_name -- 娈靛悕 + * pszkey_name -- 閿悕 + * pszkey_value -- 閿殑鍊 + * force_insert -- 濡傛灉(娈, 閿)涓嶅瓨鍦, 鏄惁闇瑕佹彃鍏ヨ(娈, 閿)鐨勯厤缃, + * 濡傛灉璇ュ弬鏁扮瓑浜0, 鍒欎笉鎻掑叆璇ラ厤缃」, 鍚﹀垯, 鎻掑叆璇ラ厤缃」. * - * 返回值 - * SUCCESS -- 成功 - * 其它 -- 失败代码 + * 杩斿洖鍊 + * SUCCESS -- 鎴愬姛 + * 鍏跺畠 -- 澶辫触浠g爜 * */ int conf_write_key ( void * handle, diff --git a/confrw.h b/confrw.h index 0318d0a..af0bbaa 100644 --- a/confrw.h +++ b/confrw.h @@ -9,11 +9,11 @@ * \if developer_doc * \file * - * \brief 读配置文件的调用接口头文件,包括:系统限值常量, 外部接口函数声明头文件。 + * \brief 璇婚厤缃枃浠剁殑璋冪敤鎺ュ彛澶存枃浠,鍖呮嫭:绯荤粺闄愬煎父閲, 澶栭儴鎺ュ彛鍑芥暟澹版槑澶存枃浠躲 * * id: $Id: confrw.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * - * \author 杨小波 prcharold@sina.com.cn develop1@szscada.com + * \author 鏉ㄥ皬娉 prcharold@sina.com.cn develop1@szscada.com * \endif */ @@ -39,14 +39,14 @@ */ /*! - * \brief 打开配置文件, 返回表示配置文件的句柄 + * \brief 鎵撳紑閰嶇疆鏂囦欢, 杩斿洖琛ㄧず閰嶇疆鏂囦欢鐨勫彞鏌 * - * \param pszfname --[in] 配置文件的全路径名(默认为 char [MAX_PATH]类型) - * \param ppvhandle --[in] 在函数执行成功的情况下, 返回配置文件(的上下文环境)句柄 + * \param pszfname --[in] 閰嶇疆鏂囦欢鐨勫叏璺緞鍚(榛樿涓 char [MAX_PATH]绫诲瀷) + * \param ppvhandle --[in] 鍦ㄥ嚱鏁版墽琛屾垚鍔熺殑鎯呭喌涓, 杩斿洖閰嶇疆鏂囦欢(鐨勪笂涓嬫枃鐜)鍙ユ焺 * - * \retval 返回值 - * \retval SUCCESS -- 成功的执行了该函数, 并打开了给定的配置文件 - * \retval 其它 -- 失败代码 + * \retval 杩斿洖鍊 + * \retval SUCCESS -- 鎴愬姛鐨勬墽琛屼簡璇ュ嚱鏁, 骞舵墦寮浜嗙粰瀹氱殑閰嶇疆鏂囦欢 + * \retval 鍏跺畠 -- 澶辫触浠g爜 * */ CONFRWLIB_API int conf_open ( const char * pszfname, void ** ppvhandle ); @@ -57,16 +57,16 @@ CONFRWLIB_API int conf_open ( const char * pszfname, void ** ppvhandle ); /*! - * \brief 关闭配置文件句柄 + * \brief 鍏抽棴閰嶇疆鏂囦欢鍙ユ焺 * - * \param handle --[in] 配置文件句柄 + * \param handle --[in] 閰嶇疆鏂囦欢鍙ユ焺 * - * \retval SUCCESS -- 成功的关闭了指定的配置文件句柄(包括资源释放等工作) - * \retval ERROR_CONF_HANLDE -- 错误的配置文件读写句柄 - * \retval 其它 -- 失败代码 + * \retval SUCCESS -- 鎴愬姛鐨勫叧闂簡鎸囧畾鐨勯厤缃枃浠跺彞鏌(鍖呮嫭璧勬簮閲婃斁绛夊伐浣) + * \retval ERROR_CONF_HANLDE -- 閿欒鐨勯厤缃枃浠惰鍐欏彞鏌 + * \retval 鍏跺畠 -- 澶辫触浠g爜 * * \note - * 如果输入的参数非配置文件(上下文)句柄, 则不作任何事. + * 濡傛灉杈撳叆鐨勫弬鏁伴潪閰嶇疆鏂囦欢(涓婁笅鏂)鍙ユ焺, 鍒欎笉浣滀换浣曚簨. * */ CONFRWLIB_API int conf_close ( void * handle ); @@ -76,20 +76,20 @@ CONFRWLIB_API int conf_close ( void * handle ); /*! - * \brief 根据指定的 [段]及键的名称, 获取配置文件中的配置项 + * \brief 鏍规嵁鎸囧畾鐨 [娈礭鍙婇敭鐨勫悕绉, 鑾峰彇閰嶇疆鏂囦欢涓殑閰嶇疆椤 * - * \param handle --[in] 配置文件句柄 - * \param pszsec_name --[in] 段名, 以null字符结尾的字符串 - * \param pszkey_name --[in] 键名称, 以null字符结尾的字符串 - * \param pszdefault --[in] 键的默认值, 以null字符结尾的字符串,如果配置文件中没有该键的配置, 同时, 该参数不为空, 则返回该值 - * \param pbuf --[out] 返回值的缓冲区 - * \param buffer_length --[in] 缓冲区长度 + * \param handle --[in] 閰嶇疆鏂囦欢鍙ユ焺 + * \param pszsec_name --[in] 娈靛悕, 浠ull瀛楃缁撳熬鐨勫瓧绗︿覆 + * \param pszkey_name --[in] 閿悕绉, 浠ull瀛楃缁撳熬鐨勫瓧绗︿覆 + * \param pszdefault --[in] 閿殑榛樿鍊, 浠ull瀛楃缁撳熬鐨勫瓧绗︿覆,濡傛灉閰嶇疆鏂囦欢涓病鏈夎閿殑閰嶇疆, 鍚屾椂, 璇ュ弬鏁颁笉涓虹┖, 鍒欒繑鍥炶鍊 + * \param pbuf --[out] 杩斿洖鍊肩殑缂撳啿鍖 + * \param buffer_length --[in] 缂撳啿鍖洪暱搴 * - * \retval SUCCESS -- 配置的键值存在, 且成功地读出 - * \retval 如果给出默认值, 则在欲读取的键值/键不存在地情况下, 同样返回SUCCESS - * \retval ERROR_CONF_SECTION -- 欲读取的键所在的段不存在 - * \retval ERROR_CONF_KEY -- 欲读取的键不存在 - * \retval 其它 -- 失败代码 + * \retval SUCCESS -- 閰嶇疆鐨勯敭鍊煎瓨鍦, 涓旀垚鍔熷湴璇诲嚭 + * \retval 濡傛灉缁欏嚭榛樿鍊, 鍒欏湪娆茶鍙栫殑閿/閿笉瀛樺湪鍦版儏鍐典笅, 鍚屾牱杩斿洖SUCCESS + * \retval ERROR_CONF_SECTION -- 娆茶鍙栫殑閿墍鍦ㄧ殑娈典笉瀛樺湪 + * \retval ERROR_CONF_KEY -- 娆茶鍙栫殑閿笉瀛樺湪 + * \retval 鍏跺畠 -- 澶辫触浠g爜 */ CONFRWLIB_API int conf_read_key ( void * handle, const char * pszsec_name, @@ -104,21 +104,21 @@ CONFRWLIB_API int conf_read_key ( void * handle, /*! - * \brief 修改/添加一个新的配置项 + * \brief 淇敼/娣诲姞涓涓柊鐨勯厤缃」 * - * \param handle --[in] 配置文件句柄 - * \param pszsec_name --[in] 段名 - * \param pszkey_name --[in] 键名 - * \param pszkey_value --[in] 键的值 - * \param force_insert --[in] 如果(段, 键)不存在, 是否需要插入该(段, 键)的配置值, - * 如果该参数等于0, 则不插入该配置项, 否则, 插入该配置项. + * \param handle --[in] 閰嶇疆鏂囦欢鍙ユ焺 + * \param pszsec_name --[in] 娈靛悕 + * \param pszkey_name --[in] 閿悕 + * \param pszkey_value --[in] 閿殑鍊 + * \param force_insert --[in] 濡傛灉(娈, 閿)涓嶅瓨鍦, 鏄惁闇瑕佹彃鍏ヨ(娈, 閿)鐨勯厤缃, + * 濡傛灉璇ュ弬鏁扮瓑浜0, 鍒欎笉鎻掑叆璇ラ厤缃」, 鍚﹀垯, 鎻掑叆璇ラ厤缃」. * - * \retval SUCCESS -- 成功 - * \retval 其它 -- 失败代码 + * \retval SUCCESS -- 鎴愬姛 + * \retval 鍏跺畠 -- 澶辫触浠g爜 * * \note - * 如果 force_insert 为0, 则当配置文件中不存在指定段时, 返回 ERROR_CONF_SECTION; - * 如果不存在指定(段/键)组合时, 返回 ERROR_CONF_KEY. + * 濡傛灉 force_insert 涓0, 鍒欏綋閰嶇疆鏂囦欢涓笉瀛樺湪鎸囧畾娈垫椂, 杩斿洖 ERROR_CONF_SECTION; + * 濡傛灉涓嶅瓨鍦ㄦ寚瀹(娈/閿)缁勫悎鏃, 杩斿洖 ERROR_CONF_KEY. */ CONFRWLIB_API int conf_write_key ( void * handle, const char * pszsec_name, @@ -131,18 +131,18 @@ CONFRWLIB_API int conf_write_key ( void * handle, /*! - * \brief 从配置文件中删除一个指定的配置项(段, 键) + * \brief 浠庨厤缃枃浠朵腑鍒犻櫎涓涓寚瀹氱殑閰嶇疆椤(娈, 閿) * - * \param handle --[in] 配置文件句柄 - * \param pszsec_name --[in] 段名 - * \param pszkey_name --[in] 键名 + * \param handle --[in] 閰嶇疆鏂囦欢鍙ユ焺 + * \param pszsec_name --[in] 娈靛悕 + * \param pszkey_name --[in] 閿悕 * - * \retval SUCCESS -- 成功的删除了指定的配置项 - * \retval 其它 -- 失败代码 + * \retval SUCCESS -- 鎴愬姛鐨勫垹闄や簡鎸囧畾鐨勯厤缃」 + * \retval 鍏跺畠 -- 澶辫触浠g爜 * * \note - * 如果指定的段不存在, 则返回 ERROR_CONF_SECTION - * 如果指定(段, 键名称)组合不存在, 则返回 ERROR_CONF_KEY + * 濡傛灉鎸囧畾鐨勬涓嶅瓨鍦, 鍒欒繑鍥 ERROR_CONF_SECTION + * 濡傛灉鎸囧畾(娈, 閿悕绉)缁勫悎涓嶅瓨鍦, 鍒欒繑鍥 ERROR_CONF_KEY */ CONFRWLIB_API int conf_delete_key ( void * handle, const char * pszsec_name, @@ -153,16 +153,16 @@ CONFRWLIB_API int conf_delete_key ( void * handle, /*! - * \brief 删除配置文件中一个整段的配置 + * \brief 鍒犻櫎閰嶇疆鏂囦欢涓竴涓暣娈电殑閰嶇疆 * - * \param handle --[in] 配置文件句柄 - * \param pszsec_name --[in] 希望删除的段的名称, 以null字符结尾的字符串 + * \param handle --[in] 閰嶇疆鏂囦欢鍙ユ焺 + * \param pszsec_name --[in] 甯屾湜鍒犻櫎鐨勬鐨勫悕绉, 浠ull瀛楃缁撳熬鐨勫瓧绗︿覆 * - * \retval SUCCESS -- 成功的删除了配置文件中的指定的段 - * \retval 其它 -- 失败代码 + * \retval SUCCESS -- 鎴愬姛鐨勫垹闄や簡閰嶇疆鏂囦欢涓殑鎸囧畾鐨勬 + * \retval 鍏跺畠 -- 澶辫触浠g爜 * * \note - * 如果指定的段不存在, 则返回 ERROR_CONF_SECTION + * 濡傛灉鎸囧畾鐨勬涓嶅瓨鍦, 鍒欒繑鍥 ERROR_CONF_SECTION */ CONFRWLIB_API int conf_delete_section ( void * handle, const char * pszsec_name ); diff --git a/confrw_errno.h b/confrw_errno.h index 25915a9..23ddf79 100644 --- a/confrw_errno.h +++ b/confrw_errno.h @@ -5,11 +5,11 @@ * \if developer_doc * \file * - * \brief 读配置文件的调用接口函数库的错误代码定义头文件。 + * \brief 璇婚厤缃枃浠剁殑璋冪敤鎺ュ彛鍑芥暟搴撶殑閿欒浠g爜瀹氫箟澶存枃浠躲 * * id: $Id: confrw_errno.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * - * \author 杨小波 prcharold@sina.com.cn develop1@szscada.com + * \author 鏉ㄥ皬娉 prcharold@sina.com.cn develop1@szscada.com * \endif */ @@ -22,43 +22,43 @@ * \endif */ -//!< 不能为当前打开的配置文件缓冲分配一个句柄,原因是句柄已经全被占用 +//!< 涓嶈兘涓哄綋鍓嶆墦寮鐨勯厤缃枃浠剁紦鍐插垎閰嶄竴涓彞鏌勶紝鍘熷洜鏄彞鏌勫凡缁忓叏琚崰鐢 #define ERROR_CONF_NOHANDLE (ERROR_CONF_BASE + 1) -//!< 创建哈希表失败 +//!< 鍒涘缓鍝堝笇琛ㄥけ璐 #define ERROR_CONF_CREATEHASH (ERROR_CONF_BASE + 2) -//!< 输入了非法的配置文件缓冲句柄 +//!< 杈撳叆浜嗛潪娉曠殑閰嶇疆鏂囦欢缂撳啿鍙ユ焺 #define ERROR_CONF_INVALIDHANDLE (ERROR_CONF_BASE + 3) -//!< 在读配置文件时,用户开辟的接收缓冲区不够大 +//!< 鍦ㄨ閰嶇疆鏂囦欢鏃讹紝鐢ㄦ埛寮杈熺殑鎺ユ敹缂撳啿鍖轰笉澶熷ぇ #define ERROR_CONF_REVBUFFER (ERROR_CONF_BASE + 4) -//!< 在读配置文件时,因指定的段的项目名不存在,函数执行缺省拷贝,并返回此结果 +//!< 鍦ㄨ閰嶇疆鏂囦欢鏃讹紝鍥犳寚瀹氱殑娈电殑椤圭洰鍚嶄笉瀛樺湪锛屽嚱鏁版墽琛岀己鐪佹嫹璐濓紝骞惰繑鍥炴缁撴灉 #define SUCCESS_CONF_DEFCOPY (ERROR_CONF_BASE + 5) -//!< 不能输入一个空的句柄指针作参数 +//!< 涓嶈兘杈撳叆涓涓┖鐨勫彞鏌勬寚閽堜綔鍙傛暟 #define ERROR_CONF_NULL_HANDEPTR (ERROR_CONF_BASE + 6) -//!< 输入的段名,项目名,项目值的字符串长度超长 +//!< 杈撳叆鐨勬鍚嶏紝椤圭洰鍚嶏紝椤圭洰鍊肩殑瀛楃涓查暱搴﹁秴闀 #define ERROR_CONF_INPUTSTRING_TOOLARGE (ERROR_CONF_BASE + 7) -//!< 指定的段或项目并不存在 +//!< 鎸囧畾鐨勬鎴栭」鐩苟涓嶅瓨鍦 #define ERROR_CONF_NOTEXIST (ERROR_CONF_BASE + 8) /*! *\verbatim - 以下为confrw_ex中定义的错误代码 + 浠ヤ笅涓篶onfrw_ex涓畾涔夌殑閿欒浠g爜 *\endvervatim */ -//!< 无效的配置文件句柄 +//!< 鏃犳晥鐨勯厤缃枃浠跺彞鏌 #define ERROR_CONF_HANDLE (ERROR_CONF_BASE + 9) -//!< 指定的段不存在 +//!< 鎸囧畾鐨勬涓嶅瓨鍦 #define ERROR_CONF_SECTION (ERROR_CONF_BASE + 10) -//!< 指定的键值不存在 +//!< 鎸囧畾鐨勯敭鍊间笉瀛樺湪 #define ERROR_CONF_KEY (ERROR_CONF_BASE + 11) /*! diff --git a/display.cpp b/display.cpp index de316b0..b16dc73 100644 --- a/display.cpp +++ b/display.cpp @@ -18,12 +18,12 @@ int RealDataDispFlag; int CurPort; int DispType = 0; -int ListIndex = 0; // 显示序号索引起始 -int ItemNumOfPage; // 页显示项目数 +int ListIndex = 0; // 鏄剧ず搴忓彿绱㈠紩璧峰 +int ItemNumOfPage; // 椤垫樉绀洪」鐩暟 #ifdef _WIN32 -COLORREF dwColorVal[16] = // 显示颜色定义 +COLORREF dwColorVal[16] = // 鏄剧ず棰滆壊瀹氫箟 { RGB(255,255,255), RGB(128,128,128), RGB(255, 0, 0), RGB(255,255, 0), @@ -50,38 +50,38 @@ void RealAiDataDisp( HDC hdc ) itemofline = 2; - CaculateWH( hdc, &xWd, &yHg, (char*)"行距" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"琛岃窛" ); lineh = yHg + 5; rc.top = 10; SetTextColor( hdc, dwColorVal[BLUE] ); - // 显示标题 - sprintf( szbuf,"端口%02d 实时遥测数据信息", CurPort + 1 ); + // 鏄剧ず鏍囬 + sprintf( szbuf,"绔彛%02d 瀹炴椂閬ユ祴鏁版嵁淇℃伅", CurPort + 1 ); DrawText(hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); rc.top += (lineh + 5); SetTextColor( hdc, dwColorVal[BLACK] ); - // 计算显示位置 + // 璁$畻鏄剧ず浣嶇疆 pos[0] = 0; pos[3] = rc.right / 2; tmp = 0; - CaculateWH( hdc, &xWd, &yHg, (char*)"序号" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"搴忓彿" ); tmp += xWd; pos[1] = pos[0] + xWd; pos[4] = pos[3] + xWd; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点名称" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍚嶇О" ); tmp += xWd; pos[2] = pos[1] + xWd; pos[5] = pos[4] + xWd; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点原值" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍘熷" ); tmp += xWd; sp = ((float)rc.right - (float)tmp*itemofline) / (itemofline*4); pos[0] += (int)sp; @@ -91,16 +91,16 @@ void RealAiDataDisp( HDC hdc ) pos[4] += (int)(sp*2); pos[5] += (int)(sp*3); - // 显示项目名称 + // 鏄剧ず椤圭洰鍚嶇О for ( i = 0; i < itemofline; i++ ) { - sprintf( szbuf, (char*)"序号" ); + sprintf( szbuf, (char*)"搴忓彿" ); rc.left = pos[i*3]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); - sprintf( szbuf, (char*)"测点名称" ); + sprintf( szbuf, (char*)"娴嬬偣鍚嶇О" ); rc.left = pos[i*3+1]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); - sprintf( szbuf, (char*)"测点原值" ); + sprintf( szbuf, (char*)"娴嬬偣鍘熷" ); rc.left = pos[i*3+2]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); } @@ -111,10 +111,10 @@ void RealAiDataDisp( HDC hdc ) if( !IsBaoHuPtr(CurPort) ) return; - // 计算总行数 + // 璁$畻鎬昏鏁 total = (SioParam[CurPort].m_psBaoHu->AiNum + itemofline - 1) / itemofline; - // 调整显示的起始位置 + // 璋冩暣鏄剧ず鐨勮捣濮嬩綅缃 if ( total < ItemNumOfPage ) ListIndex = 0; if ( (ListIndex + ItemNumOfPage) > total ) @@ -122,7 +122,7 @@ void RealAiDataDisp( HDC hdc ) if ( ListIndex < 0 ) ListIndex = 0; - // 显示输出 + // 鏄剧ず杈撳嚭 idx = ListIndex * itemofline; aiptr = (AI_DEF*)SioParam[CurPort].m_psBaoHu->AiPtr; if( !aiptr ) @@ -137,19 +137,19 @@ void RealAiDataDisp( HDC hdc ) sprintf( szbuf, "%03d", idx + j + 1 ); rc.left = pos[j*3+0]; - CaculateWH( hdc, &xWd, &yHg, (char*)"序号" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"搴忓彿" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); - sprintf( szbuf, "遥测%03d", idx + j + 1 ); + sprintf( szbuf, "閬ユ祴%03d", idx + j + 1 ); rc.left = pos[j*3+1]; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点名称" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍚嶇О" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); sprintf( szbuf, "0x%04x", aiptr[idx+j].RawValue & 0xffff ); rc.left = pos[j*3+2]; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点原值" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍘熷" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); } @@ -172,7 +172,7 @@ void RealDiDataDisp( HDC hdc ) GetClientRect( hMainWnd, &rc ); - CaculateWH( hdc, &xWd, &yHg, (char*)"行距" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"琛岃窛" ); lineh = yHg + 5; itemofline = 2; @@ -181,31 +181,31 @@ void RealDiDataDisp( HDC hdc ) SetTextColor( hdc, dwColorVal[BLUE] ); - // 显示标题 - sprintf( szbuf,"端口%02d 实时遥信数据信息", CurPort + 1 ); + // 鏄剧ず鏍囬 + sprintf( szbuf,"绔彛%02d 瀹炴椂閬ヤ俊鏁版嵁淇℃伅", CurPort + 1 ); DrawText(hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); rc.top += (lineh + 5); SetTextColor( hdc, dwColorVal[BLACK] ); - // 计算显示位置 + // 璁$畻鏄剧ず浣嶇疆 pos[0] = 0; pos[3] = rc.right / 2; tmp = 0; - CaculateWH( hdc, &xWd, &yHg, (char*)"序号" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"搴忓彿" ); tmp += xWd; pos[1] = pos[0] + xWd; pos[4] = pos[3] + xWd; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点名称" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍚嶇О" ); tmp += xWd; pos[2] = pos[1] + xWd; pos[5] = pos[4] + xWd; - CaculateWH( hdc, &xWd, &yHg, (char*)"状态" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"鐘舵" ); tmp += xWd; sp = ((float)rc.right - (float)tmp*itemofline) / (itemofline*4); pos[0] += (int)sp; @@ -215,18 +215,18 @@ void RealDiDataDisp( HDC hdc ) pos[4] += (int)(sp*2); pos[5] += (int)(sp*3); - // 显示项目名称 + // 鏄剧ず椤圭洰鍚嶇О for ( i = 0; i < itemofline; i++ ) { - sprintf( szbuf, (char*)"序号" ); + sprintf( szbuf, (char*)"搴忓彿" ); rc.left = pos[i*3+0]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); - sprintf( szbuf, (char*)"测点名称" ); + sprintf( szbuf, (char*)"娴嬬偣鍚嶇О" ); rc.left = pos[i*3+1]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); - sprintf( szbuf, (char*)"状态" ); + sprintf( szbuf, (char*)"鐘舵" ); rc.left = pos[i*3+2]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); } @@ -237,10 +237,10 @@ void RealDiDataDisp( HDC hdc ) if( !IsBaoHuPtr(CurPort) ) return; - // 计算总行数 + // 璁$畻鎬昏鏁 total = (SioParam[CurPort].m_psBaoHu->DiNum + itemofline - 1) / itemofline; - // 调整显示的起始位置 + // 璋冩暣鏄剧ず鐨勮捣濮嬩綅缃 if ( total < ItemNumOfPage ) ListIndex = 0; if ( (ListIndex + ItemNumOfPage) > total ) @@ -248,7 +248,7 @@ void RealDiDataDisp( HDC hdc ) if ( ListIndex < 0 ) ListIndex = 0; - // 显示输出 + // 鏄剧ず杈撳嚭 idx = ListIndex * itemofline; diptr = (DI_DEF*)SioParam[CurPort].m_psBaoHu->DiPtr; if( !diptr ) @@ -263,19 +263,19 @@ void RealDiDataDisp( HDC hdc ) sprintf( szbuf, "%03d", idx + j + 1 ); rc.left = pos[j*3+0]; - CaculateWH( hdc, &xWd, &yHg, (char*)"序号" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"搴忓彿" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); - sprintf( szbuf, "遥信%03d", idx + j + 1 ); + sprintf( szbuf, "閬ヤ俊%03d", idx + j + 1 ); rc.left = pos[j*3+1]; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点名称" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍚嶇О" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); - sprintf( szbuf, "%s", diptr[idx+j].Status ? (char*)"合" : (char*)"分" ); + sprintf( szbuf, "%s", diptr[idx+j].Status ? (char*)"鍚" : (char*)"鍒" ); rc.left = pos[j*3+2]; - CaculateWH( hdc, &xWd, &yHg, (char*)"状态" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"鐘舵" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); } @@ -299,38 +299,38 @@ void RealPiDataDisp( HDC hdc ) GetClientRect( hMainWnd, &rc ); itemofline = 2; - CaculateWH( hdc, &xWd, &yHg, (char*)"行距" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"琛岃窛" ); lineh = yHg + 5; rc.top = 10; SetTextColor( hdc, dwColorVal[BLUE] ); - // 显示标题 - sprintf( szbuf,"端口%02d 实时电度数据信息", CurPort + 1 ); + // 鏄剧ず鏍囬 + sprintf( szbuf,"绔彛%02d 瀹炴椂鐢靛害鏁版嵁淇℃伅", CurPort + 1 ); DrawText(hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); rc.top += (lineh + 5); SetTextColor( hdc, dwColorVal[BLACK] ); - // 计算显示位置 + // 璁$畻鏄剧ず浣嶇疆 pos[0] = 0; pos[3] = rc.right / 2; tmp = 0; - CaculateWH( hdc, &xWd, &yHg, (char*)"序号" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"搴忓彿" ); tmp += xWd; pos[1] = pos[0] + xWd; pos[4] = pos[3] + xWd; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点名称" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍚嶇О" ); tmp += xWd; pos[2] = pos[1] + xWd; pos[5] = pos[4] + xWd; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点原值" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍘熷" ); tmp += xWd; sp = ((float)rc.right - (float)tmp*itemofline) / (itemofline*4); pos[0] += (int)sp; @@ -340,18 +340,18 @@ void RealPiDataDisp( HDC hdc ) pos[4] += (int)(sp*2); pos[5] += (int)(sp*3); - // 显示项目名称 + // 鏄剧ず椤圭洰鍚嶇О for ( i = 0; i < itemofline; i++ ) { - sprintf( szbuf, (char*)"序号" ); + sprintf( szbuf, (char*)"搴忓彿" ); rc.left = pos[i*3+0]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); - sprintf( szbuf, (char*)"测点名称" ); + sprintf( szbuf, (char*)"娴嬬偣鍚嶇О" ); rc.left = pos[i*3+1]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); - sprintf( szbuf, (char*)"测点原值" ); + sprintf( szbuf, (char*)"娴嬬偣鍘熷" ); rc.left = pos[i*3+2]; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); } @@ -362,10 +362,10 @@ void RealPiDataDisp( HDC hdc ) if( !IsBaoHuPtr(CurPort) ) return; - // 计算总行数 + // 璁$畻鎬昏鏁 total = (SioParam[CurPort].m_psBaoHu->PiNum + itemofline - 1) / itemofline; - // 调整显示的起始位置 + // 璋冩暣鏄剧ず鐨勮捣濮嬩綅缃 if ( total < ItemNumOfPage ) ListIndex = 0; if ( (ListIndex + ItemNumOfPage) > total ) @@ -373,7 +373,7 @@ void RealPiDataDisp( HDC hdc ) if ( ListIndex < 0 ) ListIndex = 0; - // 显示输出 + // 鏄剧ず杈撳嚭 idx = ListIndex * itemofline; piptr = (PI_DEF*)SioParam[CurPort].m_psBaoHu->PiPtr; if( !piptr ) @@ -388,20 +388,20 @@ void RealPiDataDisp( HDC hdc ) sprintf( szbuf, "%03d", idx + j + 1 ); rc.left = pos[j*3+0]; - CaculateWH( hdc, &xWd, &yHg, (char*)"序号" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"搴忓彿" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); - sprintf( szbuf, "电度%03d", idx + j + 1); + sprintf( szbuf, "鐢靛害%03d", idx + j + 1); rc.left = pos[j*3+1]; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点名称" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍚嶇О" ); rc.right = rc.left + xWd; DrawText( hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_CENTER ); sprintf( szbuf, "0x%08x", piptr[idx+j].RawValue ); rc.left = pos[j*3+2]; - CaculateWH( hdc, &xWd, &yHg, (char*)"测点原值" ); - // wen 2004.11.19 显示的长度是名称的1.5倍 + CaculateWH( hdc, &xWd, &yHg, (char*)"娴嬬偣鍘熷" ); + // wen 2004.11.19 鏄剧ず鐨勯暱搴︽槸鍚嶇О鐨1.5鍊 //rc.right = rc.left + xWd; //DrawText( hdc, szbuf, strlen(szbuf), &rc, DT_CENTER ); rc.right = rc.left + xWd/4*6; @@ -423,14 +423,14 @@ void WatchDataDisp( HDC hdc ) GetClientRect( hMainWnd, &rc ); - CaculateWH( hdc, &xWd, &yHg, (char*)"行距" ); + CaculateWH( hdc, &xWd, &yHg, (char*)"琛岃窛" ); lineh = yHg + 5; rc.top = 10; if ( DevParam[iCurDevIdx].WatchDispLine.LineCnt == 0 ) { - sprintf( szbuf, "当前没有数据....." ); + sprintf( szbuf, "褰撳墠娌℃湁鏁版嵁....." ); DrawText(hdc, (CONST WCHAR*)szbuf, strlen(szbuf), &rc, DT_LEFT ); return; } @@ -441,7 +441,7 @@ void WatchDataDisp( HDC hdc ) if ( RealDataDispFlag ) ListIndex = 100000; - // 调整显示的起始位置 + // 璋冩暣鏄剧ず鐨勮捣濮嬩綅缃 if ( total < ItemNumOfPage ) ListIndex = 0; if ( (ListIndex + ItemNumOfPage) > total ) @@ -449,12 +449,12 @@ void WatchDataDisp( HDC hdc ) if ( ListIndex < 0 ) ListIndex = 0; - // 寻找数据起始位置 + // 瀵绘壘鏁版嵁璧峰浣嶇疆 idx = DevParam[iCurDevIdx].WatchDispLine.Rear - total; if ( idx < 0 ) idx += MAX_DISP_LINE; - // 显示起始位置 + // 鏄剧ず璧峰浣嶇疆 idx += ListIndex; for ( i = 0; i < min(ItemNumOfPage, total); i++ ) @@ -462,7 +462,7 @@ void WatchDataDisp( HDC hdc ) j = (idx + i) % MAX_DISP_LINE; type = DevParam[iCurDevIdx].WatchDispLine.Line[j][0]; - if ( type == 'R' ) // 接收数据 + if ( type == 'R' ) // 鎺ユ敹鏁版嵁 SetTextColor( hdc, dwColorVal[BLUE] ); else SetTextColor( hdc, dwColorVal[MAGENTA] ); @@ -478,12 +478,12 @@ void WatchDataDisp( HDC hdc ) } //*************************************************************** -//* 新字体函数? * +//* 鏂板瓧浣撳嚱鏁? * //*************************************************************** HFONT NewFont( int nFSize ) { /* - WCHAR typeface[32] = (WCHAR *)"宋体"; + WCHAR typeface[32] = (WCHAR *)"瀹嬩綋"; LOGFONT LogFont = { 0, 0, 0, 0, 400, @@ -497,18 +497,18 @@ HFONT NewFont( int nFSize ) PROOF_QUALITY, DEFAULT_PITCH, typeface - //"新宋体" - //"黑体" - //"隶书" - //"幼圆" - //"仿宋_GB2312" + //"鏂板畫浣" + //"榛戜綋" + //"闅朵功" + //"骞煎渾" + //"浠垮畫_GB2312" }; LogFont.lfWidth = (LONG)((float)nFSize*.618); LogFont.lfHeight = (LONG)nFSize; - strcpy( LogFont.lfFaceName, "Lee宋体" ); + strcpy( LogFont.lfFaceName, "Lee瀹嬩綋" ); return( CreateFontIndirect( &LogFont ));*/ return NULL; } @@ -559,7 +559,7 @@ void DataDisp( HWND hWnd ) } //*************************************************************** -//* 计算字串显示宽度和高度 * +//* 璁$畻瀛椾覆鏄剧ず瀹藉害鍜岄珮搴 * //*************************************************************** void CaculateWH( HDC hdc, UINT *xWidth, UINT *yHeight, char *szStr ) { @@ -573,7 +573,7 @@ void CaculateWH( HDC hdc, UINT *xWidth, UINT *yHeight, char *szStr ) #endif //**************************************************************** -//* 显示数据上页? * +//* 鏄剧ず鏁版嵁涓婇〉? * //**************************************************************** void PageUp( void ) { @@ -583,7 +583,7 @@ void PageUp( void ) } //*************************************************************** -//* 显示数据下页? * +//* 鏄剧ず鏁版嵁涓嬮〉? * //*************************************************************** void PageDown( void ) { @@ -591,7 +591,7 @@ void PageDown( void ) } //*************************************************************** -//* 显示端口最后一页数据 * +//* 鏄剧ず绔彛鏈鍚庝竴椤垫暟鎹 * //*************************************************************** void PageEnd( void ) { @@ -599,7 +599,7 @@ void PageEnd( void ) } //*************************************************************** -//* 显示端口最前一页数据? * +//* 鏄剧ず绔彛鏈鍓嶄竴椤垫暟鎹? * //*************************************************************** void PageHome( void ) { @@ -615,7 +615,7 @@ void LineUp( void ) } //*************************************************************** -//* 显示下移一行? * +//* 鏄剧ず涓嬬Щ涓琛? * //*************************************************************** void LineDown( void ) { diff --git a/global_errno.h b/global_errno.h index 7d8cf24..86707fc 100644 --- a/global_errno.h +++ b/global_errno.h @@ -4,8 +4,8 @@ * * 2001/11/3 * - * 全局性的共同性的错误代码宏定义, 以"ERROR_"开头 - * 公共的错误代码从1开始到0xffff结束. + * 鍏ㄥ眬鎬х殑鍏卞悓鎬х殑閿欒浠g爜瀹忓畾涔, 浠"ERROR_"寮澶 + * 鍏叡鐨勯敊璇唬鐮佷粠1寮濮嬪埌0xffff缁撴潫. * * * @@ -23,13 +23,13 @@ * no message * * Revision 1.12 2003/09/17 15:00:37 scada - * 添加错误代码: ERROR_MKDIR/ERROR_OPEN/ERROR_EXIST + * 娣诲姞閿欒浠g爜: ERROR_MKDIR/ERROR_OPEN/ERROR_EXIST * * Revision 1.11 2003/08/01 06:38:01 scada - * 定义在Windows操作系统上没有定义的, 但是SYSV(unix)系统上定义了的操作代码的基值 + * 瀹氫箟鍦╓indows鎿嶄綔绯荤粺涓婃病鏈夊畾涔夌殑, 浣嗘槸SYSV(unix)绯荤粺涓婂畾涔変簡鐨勬搷浣滀唬鐮佺殑鍩哄 * * Revision 1.10 2003/06/05 03:56:15 jehu - * 将注释修改为符合doxgen工具提取开发文档 + * 灏嗘敞閲婁慨鏀逛负绗﹀悎doxgen宸ュ叿鎻愬彇寮鍙戞枃妗 * * Revision 1.9 2003/01/15 10:25:41 scada * update thread dead lock @@ -59,10 +59,10 @@ * temporarily import * * Revision 1.23 2002/07/26 13:07:55 scada - * 为写文件fputs调用失败添加一个全局错误代码=>ERROR_FPUTS + * 涓哄啓鏂囦欢fputs璋冪敤澶辫触娣诲姞涓涓叏灞閿欒浠g爜=>ERROR_FPUTS * * Revision 1.22 2002/07/23 06:59:04 scada - * 使所有模块的错误代码的低16bit不等于0, 以免和进程返回成功码(低8bit)冲突 + * 浣挎墍鏈夋ā鍧楃殑閿欒浠g爜鐨勪綆16bit涓嶇瓑浜0, 浠ュ厤鍜岃繘绋嬭繑鍥炴垚鍔熺爜(浣8bit)鍐茬獊 * * Revision 1.21 2002/07/12 10:01:47 harold * add module errno base: ERROR_MISRELAY_BASE @@ -137,15 +137,15 @@ * no message * * Revision 1.2 2002/01/18 10:01:39 harold - * 添加"读取配置文件函数库"错误代码基值定义 + * 娣诲姞"璇诲彇閰嶇疆鏂囦欢鍑芥暟搴"閿欒浠g爜鍩哄煎畾涔 * * Revision 1.1.1.1 2001/12/24 09:33:23 harold * no message * * Revision 1.2 2001/12/24 06:39:57 harold - * 为了适应不同的操作系统, 不同的CPU类型, 及不同的编译器, - * 对头文件做了相应的修改, 同时添加了一些宏定义, 如: - * HAVE__FUNCTION__, __OS__, __PLATFORM__,__TIMEZONE__等等. + * 涓轰簡閫傚簲涓嶅悓鐨勬搷浣滅郴缁, 涓嶅悓鐨凜PU绫诲瀷, 鍙婁笉鍚岀殑缂栬瘧鍣, + * 瀵瑰ご鏂囦欢鍋氫簡鐩稿簲鐨勪慨鏀, 鍚屾椂娣诲姞浜嗕竴浜涘畯瀹氫箟, 濡: + * HAVE__FUNCTION__, __OS__, __PLATFORM__,__TIMEZONE__绛夌瓑. * * *****************************************************************************/ @@ -157,16 +157,16 @@ * \if developer_doc * \file * - * \brief 全局性的共同性的错误代码宏定义, 以"ERROR_"开头,公共的错误代码从1开始到0xffff结束. + * \brief 鍏ㄥ眬鎬х殑鍏卞悓鎬х殑閿欒浠g爜瀹忓畾涔, 浠"ERROR_"寮澶,鍏叡鐨勯敊璇唬鐮佷粠1寮濮嬪埌0xffff缁撴潫. * * id: $Id: global_errno.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * - * \author 杨小波 prcharold@sina.com.cn develop1@szscada.com + * \author 鏉ㄥ皬娉 prcharold@sina.com.cn develop1@szscada.com * \endif */ /*! - * 函数执行成功 + * 鍑芥暟鎵ц鎴愬姛 */ #define SUCCESS 0 @@ -177,44 +177,44 @@ #endif // end of defined(__unix) /*! - * 非错误性质的函数调用返回, 比如寻找缓冲区未找到等 + * 闈為敊璇ц川鐨勫嚱鏁拌皟鐢ㄨ繑鍥, 姣斿瀵绘壘缂撳啿鍖烘湭鎵惧埌绛 */ #define ERROR_FAIL 1 /*! - * 致命错误, 应该重新启动进程 + * 鑷村懡閿欒, 搴旇閲嶆柊鍚姩杩涚▼ */ #define ERROR_FATAL 2 /*! - * 警告信息 + * 璀﹀憡淇℃伅 */ #define ERROR_WARNING 3 /*! - * 一些提示信息 + * 涓浜涙彁绀轰俊鎭 */ #define ERROR_TIPINFO 4 /*! - * 功能未实现 + * 鍔熻兘鏈疄鐜 */ #define ERROR_NOT_IMPLEMENT 5 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 下面定义了各种库或者可执行模块中的错误代码基值 +// 涓嬮潰瀹氫箟浜嗗悇绉嶅簱鎴栬呭彲鎵ц妯″潡涓殑閿欒浠g爜鍩哄 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*! - * 公共错误码的基础值 + * 鍏叡閿欒鐮佺殑鍩虹鍊 */ #define ERROR_BASE 10 /*! - * 定义在Windows操作系统上没有定义的, 但是SYSV(unix)系统上定义了的操作代码的基值 - * 要求常规的错误代码不能超过0xfff + * 瀹氫箟鍦╓indows鎿嶄綔绯荤粺涓婃病鏈夊畾涔夌殑, 浣嗘槸SYSV(unix)绯荤粺涓婂畾涔変簡鐨勬搷浣滀唬鐮佺殑鍩哄 + * 瑕佹眰甯歌鐨勯敊璇唬鐮佷笉鑳借秴杩0xfff */ //#ifndef __unix //# define ERROR_SYSV_BASE (ERROR_BASE + 0xfff) @@ -222,475 +222,475 @@ //#endif /*! - * 实时数据库模块中的错误代码的基础值 + * 瀹炴椂鏁版嵁搴撴ā鍧椾腑鐨勯敊璇唬鐮佺殑鍩虹鍊 */ #define ERROR_RTDB_BASE (0x10001) /*! - * 历史库模块中的错误代码基础值 + * 鍘嗗彶搴撴ā鍧椾腑鐨勯敊璇唬鐮佸熀纭鍊 */ #define ERROR_HDB_BASE (0x20001) /*! - * 调试记录模块中的错误代码基础值 + * 璋冭瘯璁板綍妯″潡涓殑閿欒浠g爜鍩虹鍊 */ #define ERROR_DBG_BASE (0x30001) /*! - * 与Windows及旧Windows工作站软件上的日期时间兼容的日期时间处理库 - * 中的错误代码基础值 + * 涓嶹indows鍙婃棫Windows宸ヤ綔绔欒蒋浠朵笂鐨勬棩鏈熸椂闂村吋瀹圭殑鏃ユ湡鏃堕棿澶勭悊搴 + * 涓殑閿欒浠g爜鍩虹鍊 */ #define ERROR_XTIME_BASE (0x40001) /*! - * 网络通信模块中的错误代码基础值 + * 缃戠粶閫氫俊妯″潡涓殑閿欒浠g爜鍩虹鍊 */ #define ERROR_NET_BASE (0x50001) /*! - * 网络写库函数模块错误代码基值 + * 缃戠粶鍐欏簱鍑芥暟妯″潡閿欒浠g爜鍩哄 */ #define ERROR_NET_WRITER_BASE (0x60001) /*! - * DATASERV服务进程模块中的错误代码基值 + * DATASERV鏈嶅姟杩涚▼妯″潡涓殑閿欒浠g爜鍩哄 */ #define ERROR_DATASERV_BASE (0x70001) /*! - * 配置文件读写库模块中的错误代码基值 + * 閰嶇疆鏂囦欢璇诲啓搴撴ā鍧椾腑鐨勯敊璇唬鐮佸熀鍊 */ #define ERROR_CONF_BASE (0x80001) /*! - * 事故追忆模块中的错误代码基值 + * 浜嬫晠杩藉繂妯″潡涓殑閿欒浠g爜鍩哄 */ #define ERROR_PDR_BASE (0x90001) /*! - * 软件跟踪模块中的错误代码基值 + * 杞欢璺熻釜妯″潡涓殑閿欒浠g爜鍩哄 */ #define ERROR_TRACE_BASE (0xA0001) /*! - * 时间服务模块错误代码基值 + * 鏃堕棿鏈嶅姟妯″潡閿欒浠g爜鍩哄 */ #define ERROR_TMSERV_BASE (0xB0001) /*! - * 报警库错误代码基值 + * 鎶ヨ搴撻敊璇唬鐮佸熀鍊 */ #define ERROR_ALM_BASE (0xC0001) /*! - * ICCP模块错误代码基值 + * ICCP妯″潡閿欒浠g爜鍩哄 */ #define ERROR_ICCP_BASE (0xD0001) /*! - * telectrl模块的错误代码基值 + * telectrl妯″潡鐨勯敊璇唬鐮佸熀鍊 */ #define ERROR_TELECTRL_BASE (0xE0001) /*! - * dbrw模块的错误代码基值 + * dbrw妯″潡鐨勯敊璇唬鐮佸熀鍊 */ #define ERROR_DBRW_BASE (0xF0001) /*! - * 计算模块(libcal, cal, librmtcalc, rmtcalc)中的错误代码基值 + * 璁$畻妯″潡(libcal, cal, librmtcalc, rmtcalc)涓殑閿欒浠g爜鍩哄 */ #define ERROR_CALC_BASE (0x100001) /*! - * Misserver中继服务模块中错误代码基值 + * Misserver涓户鏈嶅姟妯″潡涓敊璇唬鐮佸熀鍊 */ #define ERROR_MISRELAY_BASE (0x110001) /*! - * AUTHSERV服务进程模块中的错误代码基值 + * AUTHSERV鏈嶅姟杩涚▼妯″潡涓殑閿欒浠g爜鍩哄 */ #define ERROR_AUTHSERV_BASE (0x120001) /*! - * rtdbm之模块dbstudio/rtattr_s中的错误处理代码定义 + * rtdbm涔嬫ā鍧梔bstudio/rtattr_s涓殑閿欒澶勭悊浠g爜瀹氫箟 */ #define ERROR_RTDBM_BASE (0x130001) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 下面定义了最基本的错误代码, 则整个系统中公用 +// 涓嬮潰瀹氫箟浜嗘渶鍩烘湰鐨勯敊璇唬鐮, 鍒欐暣涓郴缁熶腑鍏敤 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*! - * 不可预料的错误 + * 涓嶅彲棰勬枡鐨勯敊璇 */ #define ERROR_UNEXPECTED (ERROR_BASE + 1) /*! - * 代码在执行过程中, 发生异常, 没有明确指明发生了何种异常 + * 浠g爜鍦ㄦ墽琛岃繃绋嬩腑, 鍙戠敓寮傚父, 娌℃湁鏄庣‘鎸囨槑鍙戠敓浜嗕綍绉嶅紓甯 */ #define ERROR_EXCEPTION (ERROR_BASE + 2) /*! - * 代码在执行过程中, 发生访问冲突异常 + * 浠g爜鍦ㄦ墽琛岃繃绋嬩腑, 鍙戠敓璁块棶鍐茬獊寮傚父 */ #define ERROR_EXCEPTION_ACCESS_VIOLATION (ERROR_BASE + 3) /*! - * 给函数传递的参数错误, 如缓冲区长度不合理(非期望的长度), - * 又如, 序号值没有在给定的范围内等等. + * 缁欏嚱鏁颁紶閫掔殑鍙傛暟閿欒, 濡傜紦鍐插尯闀垮害涓嶅悎鐞(闈炴湡鏈涚殑闀垮害), + * 鍙堝, 搴忓彿鍊兼病鏈夊湪缁欏畾鐨勮寖鍥村唴绛夌瓑. */ #define ERROR_PARAMETER (ERROR_BASE + 4) /*! - * 在期望正确的指针参数时, 发现真正的指针参数为NULL + * 鍦ㄦ湡鏈涙纭殑鎸囬拡鍙傛暟鏃, 鍙戠幇鐪熸鐨勬寚閽堝弬鏁颁负NULL */ #define ERROR_POINTER (ERROR_BASE + 5) /*! - * 内存分配不成功 + * 鍐呭瓨鍒嗛厤涓嶆垚鍔 */ #define ERROR_MEMORY_ALLOC (ERROR_BASE + 6) /*! - * 找不到指定的环境变量 + * 鎵句笉鍒版寚瀹氱殑鐜鍙橀噺 */ #define ERROR_ENVIRONMENT_VARIABLE (ERROR_BASE + 7) /*! - * 指定键值的IPC对象不存在, 即还未创建. + * 鎸囧畾閿肩殑IPC瀵硅薄涓嶅瓨鍦, 鍗宠繕鏈垱寤. */ #define ERROR_IPC_OBJECT_EXISTED (ERROR_BASE + 8) /*! - * 打开文件调用fopen失败 + * 鎵撳紑鏂囦欢璋冪敤fopen澶辫触 */ #define ERROR_FOPEN (ERROR_BASE + 9) /*! - * 对文件内容调用fread失败. + * 瀵规枃浠跺唴瀹硅皟鐢╢read澶辫触. */ #define ERROR_FREAD (ERROR_BASE + 10) /*! - * 映射共享内存到进程地址空间失败(shmat) + * 鏄犲皠鍏变韩鍐呭瓨鍒拌繘绋嬪湴鍧绌洪棿澶辫触(shmat) */ #define ERROR_SHMAT (ERROR_BASE + 11) /*! - * 取出进程空间中对共享内存的映射失败(shmdt) + * 鍙栧嚭杩涚▼绌洪棿涓鍏变韩鍐呭瓨鐨勬槧灏勫け璐(shmdt) */ #define ERROR_SHMDT (ERROR_BASE + 13) /*! - * 信号量操作失败(semctl) + * 淇″彿閲忔搷浣滃け璐(semctl) */ #define ERROR_SEMCTL (ERROR_BASE + 14) /*! - * 系统没有足够的内存. + * 绯荤粺娌℃湁瓒冲鐨勫唴瀛. */ #define ERROR_NO_MEMORY (ERROR_BASE + 15) /*! - * 原始字节流队列已满 + * 鍘熷瀛楄妭娴侀槦鍒楀凡婊 */ #define ERROR_RAW_STREAM_QUEUE_IS_FULL (ERROR_BASE + 16) /*! - * 原始字节流队列已删除 + * 鍘熷瀛楄妭娴侀槦鍒楀凡鍒犻櫎 */ #define ERROR_RAW_STREAM_QUEUE_IS_DELETE (ERROR_BASE + 17) /*! - * 原始字节流队列中没有足够的数据 + * 鍘熷瀛楄妭娴侀槦鍒椾腑娌℃湁瓒冲鐨勬暟鎹 */ #define ERROR_RAW_STREAM_QUEUE_NOT_ENOUGH_BYTE (ERROR_BASE + 18) /*! - * 动态连接库装载失败(dlopen) + * 鍔ㄦ佽繛鎺ュ簱瑁呰浇澶辫触(dlopen) */ #define ERROR_SHLIB_DLOPEN (ERROR_BASE + 19) /*! - * 调用msgctl删除消息队列失败 + * 璋冪敤msgctl鍒犻櫎娑堟伅闃熷垪澶辫触 */ #define ERROR_MSGCTL_RMID (ERROR_BASE + 20) /*! - * 调用msgget创建消息队列ipc对象失败 + * 璋冪敤msgget鍒涘缓娑堟伅闃熷垪ipc瀵硅薄澶辫触 */ #define ERROR_MSGGET_CREATE (ERROR_BASE + 21) /*! - * 无效的消息队列ipc对象的id + * 鏃犳晥鐨勬秷鎭槦鍒梚pc瀵硅薄鐨刬d */ #define ERROR_MSG_QUEUE_ID (ERROR_BASE + 22) /*! - * 从消息队列接收消息发生不可预料的错误 + * 浠庢秷鎭槦鍒楁帴鏀舵秷鎭彂鐢熶笉鍙鏂欑殑閿欒 */ #define ERROR_MSGRCV (ERROR_BASE + 23) /*! - * 消息队列中当前被接收的消息超过给定的缓冲区 + * 娑堟伅闃熷垪涓綋鍓嶈鎺ユ敹鐨勬秷鎭秴杩囩粰瀹氱殑缂撳啿鍖 */ #define ERROR_MSGRCV_TOO_BIG_ITEM (ERROR_BASE + 24) /*! - * 欲操作的消息队列已经被删除(不存在, 需要重新创建) + * 娆叉搷浣滅殑娑堟伅闃熷垪宸茬粡琚垹闄(涓嶅瓨鍦, 闇瑕侀噸鏂板垱寤) */ #define ERROR_MSG_QUEUE_REMOVED (ERROR_BASE + 25) /*! - * 消息队列中没有消息 + * 娑堟伅闃熷垪涓病鏈夋秷鎭 */ #define ERROR_MSGRCV_NO_MSG (ERROR_BASE + 26) /*! - * 调用msgget引用消息队列失败. + * 璋冪敤msgget寮曠敤娑堟伅闃熷垪澶辫触. */ #define ERROR_MSGGET_REFER (ERROR_BASE + 27) /*! - * 调用SHMCTL获取共享内存属性失败 + * 璋冪敤SHMCTL鑾峰彇鍏变韩鍐呭瓨灞炴уけ璐 */ #define ERROR_SHMCTL_STAT (ERROR_BASE + 28) /*! - * 用于共享内存的挂接进程数目不为零而不能删除它. + * 鐢ㄤ簬鍏变韩鍐呭瓨鐨勬寕鎺ヨ繘绋嬫暟鐩笉涓洪浂鑰屼笉鑳藉垹闄ゅ畠. */ #define ERROR_DELETE_ATTACHED_SHM (ERROR_BASE + 29) /*! - * 调用shmctl删除共享内存失败 + * 璋冪敤shmctl鍒犻櫎鍏变韩鍐呭瓨澶辫触 */ #define ERROR_SHMCTL_RMID (ERROR_BASE + 30) /*! - * 调用shmctl锁定共享内存失败 + * 璋冪敤shmctl閿佸畾鍏变韩鍐呭瓨澶辫触 */ #define ERROR_SHMCTL_LOCK (ERROR_BASE + 31) /*! - * 调用shmctl解除共享内存锁定失败 + * 璋冪敤shmctl瑙i櫎鍏变韩鍐呭瓨閿佸畾澶辫触 */ #define ERROR_SHMCTL_UNLOCK (ERROR_BASE + 32) /*! - * 调用semctl删除信号量组失败 + * 璋冪敤semctl鍒犻櫎淇″彿閲忕粍澶辫触 */ #define ERROR_SEMCTL_RMID (ERROR_BASE + 33) /*! - * 调用shmget引用给定键值的共享内存区域失败 + * 璋冪敤shmget寮曠敤缁欏畾閿肩殑鍏变韩鍐呭瓨鍖哄煙澶辫触 */ #define ERROR_SHMGET_REFER (ERROR_BASE + 34) /*! - * 调用shmget创建给定键值的共享内存区域失败 + * 璋冪敤shmget鍒涘缓缁欏畾閿肩殑鍏变韩鍐呭瓨鍖哄煙澶辫触 */ #define ERROR_SHMGET_CREATE (ERROR_BASE + 35) /*! - * 无效的进程内共享内存映射地址 + * 鏃犳晥鐨勮繘绋嬪唴鍏变韩鍐呭瓨鏄犲皠鍦板潃 */ #define ERROR_SHM_ADDR_INVALID (ERROR_BASE + 36) /*! - * 调用semop函数失败 + * 璋冪敤semop鍑芥暟澶辫触 */ #define ERROR_SEMOP (ERROR_BASE + 37) /*! - * 不存在指定的文件 + * 涓嶅瓨鍦ㄦ寚瀹氱殑鏂囦欢 */ #define ERROR_NO_FILE (ERROR_BASE + 38) /*! - * 调用stat取文件属性失败 + * 璋冪敤stat鍙栨枃浠跺睘鎬уけ璐 */ #define ERROR_STAT (ERROR_BASE + 39) /*! - * 调用shmget失败, 创建一个新的信号量组失败 + * 璋冪敤shmget澶辫触, 鍒涘缓涓涓柊鐨勪俊鍙烽噺缁勫け璐 */ #define ERROR_SEMGET_CREATE (ERROR_BASE + 40) /*! - * 调用shmget失败, 创建一个新的信号量组失败 + * 璋冪敤shmget澶辫触, 鍒涘缓涓涓柊鐨勪俊鍙烽噺缁勫け璐 */ #define ERROR_SEMGET_REFER (ERROR_BASE + 41) /*! - * 调用fwrite失败 + * 璋冪敤fwrite澶辫触 */ #define ERROR_FWRITE (ERROR_BASE + 42) /*! - * 参数中指定的缓冲区长度不够 + * 鍙傛暟涓寚瀹氱殑缂撳啿鍖洪暱搴︿笉澶 */ #define ERROR_BUFFER_LENGTH (ERROR_BASE + 43) /*! - * 无效的属性号 + * 鏃犳晥鐨勫睘鎬у彿 */ #define ERROR_ATTR_NO (ERROR_BASE + 44) /*! - * 错误的SCADA日期时间串(这里仅指示日期时间串的格式错误, 不表明 - * 其包含的日期时间值的正确与否 + * 閿欒鐨凷CADA鏃ユ湡鏃堕棿涓(杩欓噷浠呮寚绀烘棩鏈熸椂闂翠覆鐨勬牸寮忛敊璇, 涓嶈〃鏄 + * 鍏跺寘鍚殑鏃ユ湡鏃堕棿鍊肩殑姝g‘涓庡惁 */ #define ERROR_SCADA_DT_STRING (ERROR_BASE + 45) /*! - * 缓冲区中的参数不完整(非自洽) + * 缂撳啿鍖轰腑鐨勫弬鏁颁笉瀹屾暣(闈炶嚜娲) */ #define ERROR_BUFFER_INTEGRALITY (ERROR_BASE + 46) /*! - * 调用gethostname函数失败 + * 璋冪敤gethostname鍑芥暟澶辫触 */ #define ERROR_GETHOSTNAME (ERROR_BASE + 47) /*! - * 调用gethostbyname函数失败 + * 璋冪敤gethostbyname鍑芥暟澶辫触 */ #define ERROR_GETHOSTBYNAME (ERROR_BASE + 48) /*! - * 调用sendto非阻塞型失败 + * 璋冪敤sendto闈為樆濉炲瀷澶辫触 */ #define ERROR_SENDTO (ERROR_BASE + 49) /*! - * 接收到的消息的长度与与其预期的长度不等. + * 鎺ユ敹鍒扮殑娑堟伅鐨勯暱搴︿笌涓庡叾棰勬湡鐨勯暱搴︿笉绛. */ #define ERROR_MSG_UNEXPECTED_LENGTH (ERROR_BASE + 50) /*! - * 接收到的消息的类型与预期的不相同. + * 鎺ユ敹鍒扮殑娑堟伅鐨勭被鍨嬩笌棰勬湡鐨勪笉鐩稿悓. */ #define ERROR_MSG_UNEXPECTED_TYPE (ERROR_BASE + 51) /*! - * 调用socket创建套接字失败 + * 璋冪敤socket鍒涘缓濂楁帴瀛楀け璐 */ #define ERROR_SOCKET (ERROR_BASE + 52) /*! - * 调用bind绑定套接字失败 + * 璋冪敤bind缁戝畾濂楁帴瀛楀け璐 */ #define ERROR_BIND (ERROR_BASE + 53) /*! - * 调用fcntl失败 + * 璋冪敤fcntl澶辫触 */ #define ERROR_FCNTL (ERROR_BASE + 54) /*! - * 调用setsockopt失败 + * 璋冪敤setsockopt澶辫触 */ #define ERROR_SETSOCKOPT (ERROR_BASE + 55) /*! - * 调用getsockopt失败 + * 璋冪敤getsockopt澶辫触 */ #define ERROR_GETSOCKOPT (ERROR_BASE + 56) /*! - * 调用connect建立网络连接失败 + * 璋冪敤connect寤虹珛缃戠粶杩炴帴澶辫触 */ #define ERROR_CONNECT (ERROR_BASE + 57) /*! - * 调用read意外失败 + * 璋冪敤read鎰忓澶辫触 */ #define ERROR_READ (ERROR_BASE + 58) /*! - * 调用write意外失败 + * 璋冪敤write鎰忓澶辫触 */ #define ERROR_WRITE (ERROR_BASE + 59) /*! - * 调用select函数意外失败 + * 璋冪敤select鍑芥暟鎰忓澶辫触 */ #define ERROR_SELECT (ERROR_BASE + 60) /*! - * 调用listen函数失败 + * 璋冪敤listen鍑芥暟澶辫触 */ #define ERROR_LISTEN (ERROR_BASE + 61) /*! - * 执行fork调用失败 + * 鎵цfork璋冪敤澶辫触 */ #define ERROR_FORK (ERROR_BASE + 62) /*! - * 执行execve调用失败 + * 鎵цexecve璋冪敤澶辫触 */ #define ERROR_EXECVE (ERROR_BASE + 63) /*! - * 执行execv调用失败 + * 鎵цexecv璋冪敤澶辫触 */ #define ERROR_EXECV (ERROR_BASE + 64) /*! - * 创建线程失败pthread_create调用失败 + * 鍒涘缓绾跨▼澶辫触pthread_create璋冪敤澶辫触 */ #define ERROR_PTHREAD_CREATE (ERROR_BASE + 65) #define ERROR_CREATE_THREAD ERROR_PTHREAD_CREATE /*! - * 调用recv接收套接字上的数据失败 + * 璋冪敤recv鎺ユ敹濂楁帴瀛椾笂鐨勬暟鎹け璐 */ #define ERROR_RECV (ERROR_BASE + 66) /*! - * 因为超时而失败 + * 鍥犱负瓒呮椂鑰屽け璐 */ #if defined(OS_LINUX) #ifndef ERROR_TIMEOUT @@ -700,101 +700,101 @@ /*! - * 调用send失败 + * 璋冪敤send澶辫触 */ #define ERROR_SEND (ERROR_BASE + 68) /*! - * 调用select后, 发现异常fdset集合中异常事件. + * 璋冪敤select鍚, 鍙戠幇寮傚父fdset闆嗗悎涓紓甯镐簨浠. */ #define ERROR_SELECT_EXCEPTION (ERROR_BASE + 69) /*! - * 当select探测到读事件, 但是随后读操作中仅读到0个字节 + * 褰搒elect鎺㈡祴鍒拌浜嬩欢, 浣嗘槸闅忓悗璇绘搷浣滀腑浠呰鍒0涓瓧鑺 */ #define ERROR_READ_ZERO (ERROR_BASE + 70) /*! - * 当select探测到写事件, 但是随后写操作中仅写入0个字节 + * 褰搒elect鎺㈡祴鍒板啓浜嬩欢, 浣嗘槸闅忓悗鍐欐搷浣滀腑浠呭啓鍏0涓瓧鑺 */ #define ERROR_WRITE_ZERO (ERROR_BASE + 71) /*! - * 当select探测接收事件, 但是随后接收操作中仅接收到0个字节 + * 褰搒elect鎺㈡祴鎺ユ敹浜嬩欢, 浣嗘槸闅忓悗鎺ユ敹鎿嶄綔涓粎鎺ユ敹鍒0涓瓧鑺 */ #define ERROR_RECV_ZERO (ERROR_BASE + 72) /*! - * 当select探测可以发送事件, 但是随后发送操作中仅发送了0个字节 + * 褰搒elect鎺㈡祴鍙互鍙戦佷簨浠, 浣嗘槸闅忓悗鍙戦佹搷浣滀腑浠呭彂閫佷簡0涓瓧鑺 */ #define ERROR_SEND_ZERO (ERROR_BASE + 73) /*! - * 不存在指定的目标 + * 涓嶅瓨鍦ㄦ寚瀹氱殑鐩爣 */ #define ERROR_NOT_EXIST (ERROR_BASE + 74) /*! - * 事务操作提交失败 + * 浜嬪姟鎿嶄綔鎻愪氦澶辫触 */ #define ERROR_COMMIT (ERROR_BASE + 75) /*! - * 事务操作撤销/回滚失败 + * 浜嬪姟鎿嶄綔鎾ら攢/鍥炴粴澶辫触 */ #define ERROR_ROLLBACK (ERROR_BASE + 76) /*! - * 调用fputs写文件失败 + * 璋冪敤fputs鍐欐枃浠跺け璐 */ #define ERROR_FPUTS (ERROR_BASE + 77) /*! - * 调用mkdir失败 + * 璋冪敤mkdir澶辫触 */ #define ERROR_MKDIR (ERROR_BASE + 78) /*! - * 调用OPEN失败 + * 璋冪敤OPEN澶辫触 */ #define ERROR_OPEN (ERROR_BASE + 79) /*! - * 指定目标已经存在 + * 鎸囧畾鐩爣宸茬粡瀛樺湪 */ #define ERROR_EXIST (ERROR_BASE + 80) /*! - * 调用fseek失败 + * 璋冪敤fseek澶辫触 */ #define ERROR_FSEEK (ERROR_BASE + 81) /*! - * 调用rename/MoveFile/MoveFileEx失败 + * 璋冪敤rename/MoveFile/MoveFileEx澶辫触 */ #define ERROR_RENAME (ERROR_BASE + 82) /*! - * 无需运行cpfile.exe(当cpfile.exe在主服务器上时,返回本错误) + * 鏃犻渶杩愯cpfile.exe锛堝綋cpfile.exe鍦ㄤ富鏈嶅姟鍣ㄤ笂鏃讹紝杩斿洖鏈敊璇級 */ #define ERROR_RUN_CPFILE_TCP_C_ON_PRAMIRY_HOST (ERROR_BASE + 83) /*! - * 从消息队列中接收到无效的实时/历史数据请求数据帧类型 + * 浠庢秷鎭槦鍒椾腑鎺ユ敹鍒版棤鏁堢殑瀹炴椂/鍘嗗彶鏁版嵁璇锋眰鏁版嵁甯х被鍨 */ #define ERROR_AUTHSERV_UNKNOWN_NET_FRAME (ERROR_AUTHSERV_BASE + 1) diff --git a/harximoban.h b/harximoban.h index ae0d56c..7533372 100644 --- a/harximoban.h +++ b/harximoban.h @@ -1,12 +1,12 @@ /****************************************************************************************** * - * 作者: 杨小波 + * 浣滆: 鏉ㄥ皬娉 * - * 链地址哈希模板 + * 閾惧湴鍧鍝堝笇妯℃澘 * - * 目的: - * 提供一个模板, 为日常应用中需要按哈希方法组织数据提供一个模板类. - * 该哈希模板采用链地址法解决冲突. + * 鐩殑: + * 鎻愪緵涓涓ā鏉, 涓烘棩甯稿簲鐢ㄤ腑闇瑕佹寜鍝堝笇鏂规硶缁勭粐鏁版嵁鎻愪緵涓涓ā鏉跨被. + * 璇ュ搱甯屾ā鏉块噰鐢ㄩ摼鍦板潃娉曡В鍐冲啿绐. * * $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * @@ -15,16 +15,16 @@ * no message * * Revision 1.5 2003/06/05 03:56:21 jehu - * 将注释修改为符合doxgen工具提取开发文档 + * 灏嗘敞閲婁慨鏀逛负绗﹀悎doxgen宸ュ叿鎻愬彇寮鍙戞枃妗 * * Revision 1.4 2003/05/06 02:31:31 scada - * 添加替换标记: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, $Log: harximoban.h,v $ - * 添加替换标记: $Id: chain_hash.h,v 1.5 2003/06/05 03:56:21 jehu Exp $, Revision 1.2 2006/08/04 03:37:33 zhuzhenhua - * 添加替换标记: $Id: chain_hash.h,v 1.5 2003/06/05 03:56:21 jehu Exp $, no message - * 添加替换标记: $Id: chain_hash.h,v 1.5 2003/06/05 03:56:21 jehu Exp $, - * 添加替换标记: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, Revision 1.5 2003/06/05 03:56:21 jehu - * 添加替换标记: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, 将注释修改为符合doxgen工具提取开发文档 - * 添加替换标记: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, + * 娣诲姞鏇挎崲鏍囪: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, $Log: harximoban.h,v $ + * 娣诲姞鏇挎崲鏍囪: $Id: chain_hash.h,v 1.5 2003/06/05 03:56:21 jehu Exp $, Revision 1.2 2006/08/04 03:37:33 zhuzhenhua + * 娣诲姞鏇挎崲鏍囪: $Id: chain_hash.h,v 1.5 2003/06/05 03:56:21 jehu Exp $, no message + * 娣诲姞鏇挎崲鏍囪: $Id: chain_hash.h,v 1.5 2003/06/05 03:56:21 jehu Exp $, + * 娣诲姞鏇挎崲鏍囪: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, Revision 1.5 2003/06/05 03:56:21 jehu + * 娣诲姞鏇挎崲鏍囪: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, 灏嗘敞閲婁慨鏀逛负绗﹀悎doxgen宸ュ叿鎻愬彇寮鍙戞枃妗 + * 娣诲姞鏇挎崲鏍囪: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $, * * ******************************************************************************************/ @@ -35,38 +35,38 @@ * \if developer_doc * \file * - * \brief 链地址哈希模板,头文件。 + * \brief 閾惧湴鍧鍝堝笇妯℃澘锛屽ご鏂囦欢銆 * - * 提供一个模板, 为日常应用中需要按哈希方法组织数据提供一个模板类, - * 该哈希模板采用链地址法解决冲突.\n + * 鎻愪緵涓涓ā鏉, 涓烘棩甯稿簲鐢ㄤ腑闇瑕佹寜鍝堝笇鏂规硶缁勭粐鏁版嵁鎻愪緵涓涓ā鏉跨被, + * 璇ュ搱甯屾ā鏉块噰鐢ㄩ摼鍦板潃娉曡В鍐冲啿绐.\n * id: $Id: harximoban.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * - * \author 杨小波 prcharold@sina.com.cn develop1@szscada.com + * \author 鏉ㄥ皬娉 prcharold@sina.com.cn develop1@szscada.com * \endif */ /*! -* \brief 最小的默认哈希表尺寸 +* \brief 鏈灏忕殑榛樿鍝堝笇琛ㄥ昂瀵 */ #define CONST_CHAIN_HASH_DEFAULT_MIN_SIZE 0x10 /*! -* \brief 最大的默认哈希尺寸 +* \brief 鏈澶х殑榛樿鍝堝笇灏哄 */ #define CONST_CHAIN_HASH_DEFAULT_MAX_SIZE 0xffff /*! -* \brief 链地址哈希表模板 -* \param T ---- 在哈希表中存储的元素的类型 +* \brief 閾惧湴鍧鍝堝笇琛ㄦā鏉 +* \param T ---- 鍦ㄥ搱甯岃〃涓瓨鍌ㄧ殑鍏冪礌鐨勭被鍨 * -* \par 快速参考 +* \par 蹇熷弬鑰 * #include */ #pragma pack (1) -// 是pc机系统还是嵌入式系统 +// 鏄痯c鏈虹郴缁熻繕鏄祵鍏ュ紡绯荤粺 #ifdef PC_MACHINE @@ -85,35 +85,35 @@ template class TChainHash { public: - /*! 根据哈希表存储的元素的关键字以及哈希表的尺寸,求哈希序号的函数重定义 */ + /*! 鏍规嵁鍝堝笇琛ㄥ瓨鍌ㄧ殑鍏冪礌鐨勫叧閿瓧浠ュ強鍝堝笇琛ㄧ殑灏哄锛屾眰鍝堝笇搴忓彿鐨勫嚱鏁伴噸瀹氫箟 */ typedef u32 (* pfnindex_of_t)(const void * pKey, u32 hash_size); - /*! 根据哈希表存储的元素的关键字的函数重定义 */ + /*! 鏍规嵁鍝堝笇琛ㄥ瓨鍌ㄧ殑鍏冪礌鐨勫叧閿瓧鐨勫嚱鏁伴噸瀹氫箟 */ typedef void * (* pfnkey_of_t)(const T * pItem); - /*! 两个哈希表中存储的元素的关键字之间的比较,主要是比较是否相等 */ + /*! 涓や釜鍝堝笇琛ㄤ腑瀛樺偍鐨勫厓绱犵殑鍏抽敭瀛椾箣闂寸殑姣旇緝锛屼富瑕佹槸姣旇緝鏄惁鐩哥瓑 */ typedef int (* pfncompare_t)(const void * pKey1, const void * pKey2); - /*! 根据已经一个已经存在的哈希元素,赋值一个新的对象 */ + /*! 鏍规嵁宸茬粡涓涓凡缁忓瓨鍦ㄧ殑鍝堝笇鍏冪礌锛岃祴鍊间竴涓柊鐨勫璞 */ typedef T * (* pfncreate_item_t)(const T * pItem); - /*! 释放调用 *pfncreate_item_t 返回的对象 */ + /*! 閲婃斁璋冪敤 *pfncreate_item_t 杩斿洖鐨勫璞 */ typedef void (* pfnfree_item_t)(T * pItem); - /*! 哈希元素之间的拷贝 */ + /*! 鍝堝笇鍏冪礌涔嬮棿鐨勬嫹璐 */ typedef T * (* pfncopy_item_t)(T * pItemDest, const T * pItemSrc); - /*! 使用者提供的内存分配函数 */ + /*! 浣跨敤鑰呮彁渚涚殑鍐呭瓨鍒嗛厤鍑芥暟 */ typedef void * (* pfnalloc_t)(u32 size); - /*! 释放调用 *pfnalloc_t 分配的内存 */ + /*! 閲婃斁璋冪敤 *pfnalloc_t 鍒嗛厤鐨勫唴瀛 */ typedef void (* pfndealloc_t)(void *); /*! - * 哈希数组项保存的"数据" + * 鍝堝笇鏁扮粍椤逛繚瀛樼殑"鏁版嵁" */ typedef struct { /*! - * 哈希数组项保存的"数据" + * 鍝堝笇鏁扮粍椤逛繚瀛樼殑"鏁版嵁" */ T * pT; /*! - * 调用使用者提供的哈希键值函数返回的键值 + * 璋冪敤浣跨敤鑰呮彁渚涚殑鍝堝笇閿煎嚱鏁拌繑鍥炵殑閿 */ void * pvTKey; @@ -122,35 +122,35 @@ public: /*! - * 哈希表的一行, 这一行保存所有"同义"哈希项, \n - * 这一行实际上是产生冲突的所有的哈希项的数组.\n - * 在简单地使用线性数组的方式保存. + * 鍝堝笇琛ㄧ殑涓琛, 杩欎竴琛屼繚瀛樻墍鏈"鍚屼箟"鍝堝笇椤, \n + * 杩欎竴琛屽疄闄呬笂鏄骇鐢熷啿绐佺殑鎵鏈夌殑鍝堝笇椤圭殑鏁扮粍.\n + * 鍦ㄧ畝鍗曞湴浣跨敤绾挎ф暟缁勭殑鏂瑰紡淇濆瓨. */ typedef struct { /*! - * 数组中已有数据项的大小--冲突的个数 + * 鏁扮粍涓凡鏈夋暟鎹」鐨勫ぇ灏--鍐茬獊鐨勪釜鏁 */ u32 cntItems; /*! - * 在这一行内能够容纳的最大冲突元素个数. - * 实际上是分配给数组pItems的实际内存的大小 + * 鍦ㄨ繖涓琛屽唴鑳藉瀹圭撼鐨勬渶澶у啿绐佸厓绱犱釜鏁. + * 瀹為檯涓婃槸鍒嗛厤缁欐暟缁刾Items鐨勫疄闄呭唴瀛樼殑澶у皬 */ u32 cntAllocItems; /*! - * 数组本身 + * 鏁扮粍鏈韩 */ PITEM_t pItems; /*! - * 哈希项保存的"数据" + * 鍝堝笇椤逛繚瀛樼殑"鏁版嵁" */ T * pT; /*! - * 数据项的键值 + * 鏁版嵁椤圭殑閿 */ void * pvTKey; @@ -159,27 +159,27 @@ public: private: /*! - * 不容许使用缺省构造函数. + * 涓嶅璁镐娇鐢ㄧ己鐪佹瀯閫犲嚱鏁. */ TChainHash(){}; public: /*! - * \brief 构造函数 - * - * \param u32TableSize --[in] 哈希表的大小 - * \param pfnIndexOf --[in] 使用者提供的从键值到哈希值的转换函数 - * \param pfnKeyOf --[in] 使用者提供的返回一个哈希项保存的数据项的关键值. - * \param pfnCompare --[in] 比较两个数据项的关键字的大小 - * \param pfnCreateItem --[in] 使用者提供的从一个给定数据项的创建另一个新的数据项的函数 - * \param pfnFreeItem --[in] 使用者提供的用户释放数据项的函数 - * \param pfnCopyItem --[in] 使用者提供的拷贝函数. - * \param pfnAlloc --[in] 使用者提供的用户分配内存的函数. - * \param pfnDeAlloc --[in] 使用者提供的用户释放由pfnAlloc所分配的内存的函数 + * \brief 鏋勯犲嚱鏁 + * + * \param u32TableSize --[in] 鍝堝笇琛ㄧ殑澶у皬 + * \param pfnIndexOf --[in] 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟 + * \param pfnKeyOf --[in] 浣跨敤鑰呮彁渚涚殑杩斿洖涓涓搱甯岄」淇濆瓨鐨勬暟鎹」鐨勫叧閿. + * \param pfnCompare --[in] 姣旇緝涓や釜鏁版嵁椤圭殑鍏抽敭瀛楃殑澶у皬 + * \param pfnCreateItem --[in] 浣跨敤鑰呮彁渚涚殑浠庝竴涓粰瀹氭暟鎹」鐨勫垱寤哄彟涓涓柊鐨勬暟鎹」鐨勫嚱鏁 + * \param pfnFreeItem --[in] 浣跨敤鑰呮彁渚涚殑鐢ㄦ埛閲婃斁鏁版嵁椤圭殑鍑芥暟 + * \param pfnCopyItem --[in] 浣跨敤鑰呮彁渚涚殑鎷疯礉鍑芥暟. + * \param pfnAlloc --[in] 浣跨敤鑰呮彁渚涚殑鐢ㄦ埛鍒嗛厤鍐呭瓨鐨勫嚱鏁. + * \param pfnDeAlloc --[in] 浣跨敤鑰呮彁渚涚殑鐢ㄦ埛閲婃斁鐢眕fnAlloc鎵鍒嗛厤鐨勫唴瀛樼殑鍑芥暟 * * \note - * 在构造函数不会调用使用从构造函数传递的参数函数. - * 参数中的函数指针的类型定义说明参见模板中与这些函数指针项对应的成员变量. + * 鍦ㄦ瀯閫犲嚱鏁颁笉浼氳皟鐢ㄤ娇鐢ㄤ粠鏋勯犲嚱鏁颁紶閫掔殑鍙傛暟鍑芥暟. + * 鍙傛暟涓殑鍑芥暟鎸囬拡鐨勭被鍨嬪畾涔夎鏄庡弬瑙佹ā鏉夸腑涓庤繖浜涘嚱鏁版寚閽堥」瀵瑰簲鐨勬垚鍛樺彉閲. */ TChainHash( u32 u32TableSize, @@ -194,7 +194,7 @@ public: ) { /* - * 记住使用者提供的工具函数 + * 璁颁綇浣跨敤鑰呮彁渚涚殑宸ュ叿鍑芥暟 */ if(pfnIndexOf) m_pfnIndexOf = pfnIndexOf; @@ -237,7 +237,7 @@ public: m_pfnDeAlloc = NULL; /* - * 初始化哈希表的尺寸 + * 鍒濆鍖栧搱甯岃〃鐨勫昂瀵 */ m_uiSize = u32TableSize; if(m_uiSize > (u32)CONST_CHAIN_HASH_DEFAULT_MAX_SIZE) @@ -248,7 +248,7 @@ public: /* - * 初始化哈希表 + * 鍒濆鍖栧搱甯岃〃 */ if(m_pfnAlloc && m_pfnDeAlloc) m_pTable = (PTABLEENTRY_t)(*m_pfnAlloc)((u32)sizeof(TABLEENTRY_t) * m_uiSize); @@ -261,7 +261,7 @@ public: /*! - * \brief 析构函数 + * \brief 鏋愭瀯鍑芥暟 */ virtual ~TChainHash() { @@ -269,7 +269,7 @@ public: return; /* - * 释放哈希表中同义词数组所占用的内存空间. + * 閲婃斁鍝堝笇琛ㄤ腑鍚屼箟璇嶆暟缁勬墍鍗犵敤鐨勫唴瀛樼┖闂. */ for(u32 i = 0; i < m_uiSize; i++) { @@ -289,7 +289,7 @@ public: } /* - * 释放哈希表所占用的内存空间 + * 閲婃斁鍝堝笇琛ㄦ墍鍗犵敤鐨勫唴瀛樼┖闂 */ if(m_pfnAlloc && m_pfnDeAlloc) { @@ -306,126 +306,126 @@ public: private: /*! - * 哈希链表的尺寸 + * 鍝堝笇閾捐〃鐨勫昂瀵 */ u32 m_uiSize; /*! - * 哈希表 + * 鍝堝笇琛 */ PTABLEENTRY_t m_pTable; /*! - * \brief 用户定义的返回一个哈希表项的索引值函数, 传给函数的参数有本哈希表的当前无冲突尺寸 + * \brief 鐢ㄦ埛瀹氫箟鐨勮繑鍥炰竴涓搱甯岃〃椤圭殑绱㈠紩鍊煎嚱鏁, 浼犵粰鍑芥暟鐨勫弬鏁版湁鏈搱甯岃〃鐨勫綋鍓嶆棤鍐茬獊灏哄 * - * \param pKey --[in] 数据项的键值 - * \param hash_size --[in] 本哈希表的尺寸 + * \param pKey --[in] 鏁版嵁椤圭殑閿 + * \param hash_size --[in] 鏈搱甯岃〃鐨勫昂瀵 * * \return - * [0 -- hash_size - 1)范围内的整数 + * [0 -- hash_size - 1)鑼冨洿鍐呯殑鏁存暟 */ u32 (* m_pfnIndexOf)(const void * pKey, u32 hash_size); /*! - * \brief 返回一个哈希表项的键值 + * \brief 杩斿洖涓涓搱甯岃〃椤圭殑閿 * - * \param pItem --[in] 数据项 + * \param pItem --[in] 鏁版嵁椤 * * \return - * 数据项的键值 + * 鏁版嵁椤圭殑閿 */ void * (* m_pfnKeyOf)(const T * pItem); /*! - * \brief 比较两个哈希表项的大小 + * \brief 姣旇緝涓や釜鍝堝笇琛ㄩ」鐨勫ぇ灏 * - * \param pKey1 --[in] 键值1 - * \param pKey2 --[in] 键值2 + * \param pKey1 --[in] 閿1 + * \param pKey2 --[in] 閿2 * * \return - * 大于0 -- pKey1所代表的数据项大于pKey2所代表的数据项 - * 0 -- pKey1所代表的数据项等于pKey2所代表的数据项 - * 小于0 -- pKey1所代表的数据项小于pKey2所代表的数据项 + * 澶т簬0 -- pKey1鎵浠h〃鐨勬暟鎹」澶т簬pKey2鎵浠h〃鐨勬暟鎹」 + * 0 -- pKey1鎵浠h〃鐨勬暟鎹」绛変簬pKey2鎵浠h〃鐨勬暟鎹」 + * 灏忎簬0 -- pKey1鎵浠h〃鐨勬暟鎹」灏忎簬pKey2鎵浠h〃鐨勬暟鎹」 */ int (* m_pfnCompare)(const void * pKey1, const void * pKey2); /*! - * \brief 以一个已知表项为蓝本, 创建一个新的哈希表项. + * \brief 浠ヤ竴涓凡鐭ヨ〃椤逛负钃濇湰, 鍒涘缓涓涓柊鐨勫搱甯岃〃椤. * - * \param pItem --[in] 源数据项 + * \param pItem --[in] 婧愭暟鎹」 * * \return - * 新的数据项 + * 鏂扮殑鏁版嵁椤 */ T * (* m_pfnCreateItem)(const T * pItem); /*! - * \brief 和m_pfnCreateItem的派对, 用于释放由m_pfnCreateItem创建的哈希表项 + * \brief 鍜宮_pfnCreateItem鐨勬淳瀵, 鐢ㄤ簬閲婃斁鐢眒_pfnCreateItem鍒涘缓鐨勫搱甯岃〃椤 * - * \param pItem --[in] 欲被释放的数据项 + * \param pItem --[in] 娆茶閲婃斁鐨勬暟鎹」 */ void (* m_pfnFreeItem)(T * pItem); /*! - * \brief 拷贝源哈希表项到目的哈希表项. + * \brief 鎷疯礉婧愬搱甯岃〃椤瑰埌鐩殑鍝堝笇琛ㄩ」. * - * \param pItemDest --[in] 目的数据项 - * \param pItemSrc --[in] 源数据项 + * \param pItemDest --[in] 鐩殑鏁版嵁椤 + * \param pItemSrc --[in] 婧愭暟鎹」 * * \return - * 目的数据项 + * 鐩殑鏁版嵁椤 */ T * (* m_pfnCopyItem)(T * pItemDest, const T * pItemSrc); /*! - * \brief 用户提供的分配内存的函数, 使用该函数, 可以使该链地址哈希模板与内存分配方法无关. + * \brief 鐢ㄦ埛鎻愪緵鐨勫垎閰嶅唴瀛樼殑鍑芥暟, 浣跨敤璇ュ嚱鏁, 鍙互浣胯閾惧湴鍧鍝堝笇妯℃澘涓庡唴瀛樺垎閰嶆柟娉曟棤鍏. * - * \param size --[in] 欲分配内存的尺寸, 以字节为单位 + * \param size --[in] 娆插垎閰嶅唴瀛樼殑灏哄, 浠ュ瓧鑺備负鍗曚綅 * * \return - * 分配的内存的指针 + * 鍒嗛厤鐨勫唴瀛樼殑鎸囬拡 */ void * (* m_pfnAlloc)(u32 size); /*! - * \brief 是m_pfnAlloc的派对, 用于释放由m_pfnAlloc分配的内存, 其参数一定是由m_pfnAlloc所返回的值. + * \brief 鏄痬_pfnAlloc鐨勬淳瀵, 鐢ㄤ簬閲婃斁鐢眒_pfnAlloc鍒嗛厤鐨勫唴瀛, 鍏跺弬鏁颁竴瀹氭槸鐢眒_pfnAlloc鎵杩斿洖鐨勫. * - * \param pVoid --[in][out] 调用m_pfnAlloc分配的内存 + * \param pVoid --[in][out] 璋冪敤m_pfnAlloc鍒嗛厤鐨勫唴瀛 */ void (* m_pfnDeAlloc)(void * pVoid); /*! - * \brief 当哈希表中的一行空间不够时, 需要增加空间, - * 由于是内部私有函数, 因此在调用时, 内部代码必须保证参数的正确性. + * \brief 褰撳搱甯岃〃涓殑涓琛岀┖闂翠笉澶熸椂, 闇瑕佸鍔犵┖闂, + * 鐢变簬鏄唴閮ㄧ鏈夊嚱鏁, 鍥犳鍦ㄨ皟鐢ㄦ椂, 鍐呴儴浠g爜蹇呴』淇濊瘉鍙傛暟鐨勬纭. * - * \param pEntry -- 哈希表中的一行. + * \param pEntry -- 鍝堝笇琛ㄤ腑鐨勪竴琛. * - * \retval true -- 成功 - * \retval false -- 失败 + * \retval true -- 鎴愬姛 + * \retval false -- 澶辫触 * * \note - * 在函数实现中使用倍增式的分配内存 + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤鍊嶅寮忕殑鍒嗛厤鍐呭瓨 */ bool increaseSynonyms(PTABLEENTRY_t pEntry) { - // 倍增式地分配内存 + // 鍊嶅寮忓湴鍒嗛厤鍐呭瓨 u32 count = pEntry->cntAllocItems; if(0 == count) count = 2; else count = count * 2; - // 首先分配目的尺寸的哈希项数组--同义词数组 + // 棣栧厛鍒嗛厤鐩殑灏哄鐨勫搱甯岄」鏁扮粍--鍚屼箟璇嶆暟缁 PITEM_t pItems = NULL; if(m_pfnAlloc && m_pfnDeAlloc) pItems = (PITEM_t) (*m_pfnAlloc)(count * (u32)sizeof(ITEM_t)); @@ -438,7 +438,7 @@ private: return false; - // 拷贝, 此处显然两块内存不会重叠, 所以使用memcpy内存拷贝, 而不是memmove + // 鎷疯礉, 姝ゅ鏄剧劧涓ゅ潡鍐呭瓨涓嶄細閲嶅彔, 鎵浠ヤ娇鐢╩emcpy鍐呭瓨鎷疯礉, 鑰屼笉鏄痬emmove memcpy((void *)pItems, (void *)pEntry->pItems, pEntry->cntItems * sizeof(ITEM_t)); if(m_pfnAlloc && m_pfnDeAlloc) { @@ -458,17 +458,17 @@ private: /*! - * \brief 将一个元素插入到指定的"行", 由于是内部私有函数, 因此在调用时, 内部代码必须保证参数的正确性. + * \brief 灏嗕竴涓厓绱犳彃鍏ュ埌鎸囧畾鐨"琛", 鐢变簬鏄唴閮ㄧ鏈夊嚱鏁, 鍥犳鍦ㄨ皟鐢ㄦ椂, 鍐呴儴浠g爜蹇呴』淇濊瘉鍙傛暟鐨勬纭. * - * \param pEntry --[in] 哈希表中的一行 - * \param pT --[in] 欲插入的数据项 - * \param pvTKey --[in] 欲插入的数据项的键值. + * \param pEntry --[in] 鍝堝笇琛ㄤ腑鐨勪竴琛 + * \param pT --[in] 娆叉彃鍏ョ殑鏁版嵁椤 + * \param pvTKey --[in] 娆叉彃鍏ョ殑鏁版嵁椤圭殑閿. * - * \retval true -- 成功 - * \retval false -- 失败 + * \retval true -- 鎴愬姛 + * \retval false -- 澶辫触 * * \note - * 如果返回失败, 则原同义词数组不发生任何变化. + * 濡傛灉杩斿洖澶辫触, 鍒欏師鍚屼箟璇嶆暟缁勪笉鍙戠敓浠讳綍鍙樺寲. */ bool insertIntoEntry(PTABLEENTRY_t pEntry, T * pT, void * pvTKey) { @@ -495,7 +495,7 @@ private: public: /*! - * \brief 返回哈希表的尺寸 + * \brief 杩斿洖鍝堝笇琛ㄧ殑灏哄 */ u32 hash_size() { @@ -504,7 +504,7 @@ public: /*! - * \brief 返回在哈希表中保存的数据项的个数 + * \brief 杩斿洖鍦ㄥ搱甯岃〃涓繚瀛樼殑鏁版嵁椤圭殑涓暟 */ u32 count() { @@ -525,18 +525,18 @@ public: /*! - * \brief 搜索指定关键字的哈希元素, 返回第一个搜索到的元素, 因此, 应该保证没有重复的关键字. + * \brief 鎼滅储鎸囧畾鍏抽敭瀛楃殑鍝堝笇鍏冪礌, 杩斿洖绗竴涓悳绱㈠埌鐨勫厓绱, 鍥犳, 搴旇淇濊瘉娌℃湁閲嶅鐨勫叧閿瓧. * - * \param pKey --[in] 数据项的键值 + * \param pKey --[in] 鏁版嵁椤圭殑閿 * - * \retval 和数据项的键值相对应的数据项 -- 成功 - * \retval NULL -- 失败, 或者, 在哈希表中根本就没有这一项 + * \retval 鍜屾暟鎹」鐨勯敭鍊肩浉瀵瑰簲鐨勬暟鎹」 -- 鎴愬姛 + * \retval NULL -- 澶辫触, 鎴栬, 鍦ㄥ搱甯岃〃涓牴鏈氨娌℃湁杩欎竴椤 * * \note - * 搜索过程不会改变哈希表及哈希表所保存的数据项及数据项的键值,\n - * 在函数的实现中使用到使用者提供的函数:\n - * pfnKeyOf -- 使用者提供的返回一个哈希项保存的数据项的关键值;\n - * pfnCompare -- 比较两个数据项的关键字的大小;\n + * 鎼滅储杩囩▼涓嶄細鏀瑰彉鍝堝笇琛ㄥ強鍝堝笇琛ㄦ墍淇濆瓨鐨勬暟鎹」鍙婃暟鎹」鐨勯敭鍊,\n + * 鍦ㄥ嚱鏁扮殑瀹炵幇涓娇鐢ㄥ埌浣跨敤鑰呮彁渚涚殑鍑芥暟:\n + * pfnKeyOf -- 浣跨敤鑰呮彁渚涚殑杩斿洖涓涓搱甯岄」淇濆瓨鐨勬暟鎹」鐨勫叧閿;\n + * pfnCompare -- 姣旇緝涓や釜鏁版嵁椤圭殑鍏抽敭瀛楃殑澶у皬;\n */ T * searchItem(const void * pKey) { @@ -544,24 +544,24 @@ public: return NULL; /* - * 由键值求哈希值. + * 鐢遍敭鍊兼眰鍝堝笇鍊. */ u32 u32index = (*m_pfnIndexOf)(pKey, m_uiSize); if(u32index >= m_uiSize) return NULL; - // 找到同义词数组 + // 鎵惧埌鍚屼箟璇嶆暟缁 PTABLEENTRY_t pEntry = &m_pTable[u32index]; if(NULL != pEntry->pT && 0 == (*m_pfnCompare)(pKey, pEntry->pvTKey)) return pEntry->pT; - // 查看首项是否符合. + // 鏌ョ湅棣栭」鏄惁绗﹀悎. u32 count = pEntry->cntItems; PITEM_t pSynonyms = pEntry->pItems; if(0 == count || NULL == pSynonyms) return NULL; - // 在同义词数组中作线性搜索 + // 鍦ㄥ悓涔夎瘝鏁扮粍涓綔绾挎ф悳绱 for(u32 i = 0; i < count; i++) { if(pSynonyms[i].pT) @@ -576,33 +576,33 @@ public: /*! - * \brief 如果原先的哈希表的尺寸比较小, 后来需要其管理的数据项急剧增加, - * 这样会造成冲突严重, 后果是影响到查询的效率, 因此, 需要能够动态 - * 的改变哈希表的尺寸 + * \brief 濡傛灉鍘熷厛鐨勫搱甯岃〃鐨勫昂瀵告瘮杈冨皬, 鍚庢潵闇瑕佸叾绠$悊鐨勬暟鎹」鎬ュ墽澧炲姞, + * 杩欐牱浼氶犳垚鍐茬獊涓ラ噸, 鍚庢灉鏄奖鍝嶅埌鏌ヨ鐨勬晥鐜, 鍥犳, 闇瑕佽兘澶熷姩鎬 + * 鐨勬敼鍙樺搱甯岃〃鐨勫昂瀵 * - * \param size --[in] 新的哈希表尺寸 + * \param size --[in] 鏂扮殑鍝堝笇琛ㄥ昂瀵 * - * \retval true -- 成功 - * \retval false -- 失败 + * \retval true -- 鎴愬姛 + * \retval false -- 澶辫触 * * \note - * 如果调用失败, 函数保证原哈希表不发生任何变化.\n - * 在函数实现中使用了使用者提供的函数, \n - * pfnIndexOf -- 使用者提供的从键值到哈希值的转换函数. + * 濡傛灉璋冪敤澶辫触, 鍑芥暟淇濊瘉鍘熷搱甯岃〃涓嶅彂鐢熶换浣曞彉鍖.\n + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟, \n + * pfnIndexOf -- 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟. */ bool resize(u32 size) { if(size == m_uiSize || NULL == m_pfnIndexOf) return true; - // 设置新的尺寸 + // 璁剧疆鏂扮殑灏哄 u32 u32Size = size; if(u32Size > CONST_CHAIN_HASH_DEFAULT_MAX_SIZE) u32Size = CONST_CHAIN_HASH_DEFAULT_MAX_SIZE; if(u32Size < CONST_CHAIN_HASH_DEFAULT_MIN_SIZE) u32Size = CONST_CHAIN_HASH_DEFAULT_MIN_SIZE; - // 分配哈希表 + // 鍒嗛厤鍝堝笇琛 PTABLEENTRY_t pTable = NULL; if(m_pfnAlloc && m_pfnDeAlloc) pTable = (PTABLEENTRY_t) (*m_pfnAlloc)(sizeof(TABLEENTRY_t) * size); @@ -614,7 +614,7 @@ public: memset((void *)pTable, 0, sizeof(TABLEENTRY_t) * size); - // 把原哈希表中的元素逐个插入到新的哈希表中去 + // 鎶婂師鍝堝笇琛ㄤ腑鐨勫厓绱犻愪釜鎻掑叆鍒版柊鐨勫搱甯岃〃涓幓 u32 u32Index = 0; PITEM_t pSynonyms = NULL; u32 i = 0, j = 0; @@ -645,7 +645,7 @@ public: } } - // 释放原哈希表所扎内存 + // 閲婃斁鍘熷搱甯岃〃鎵鎵庡唴瀛 for(i = 0; i < m_uiSize; i++) { if(NULL != m_pTable[i].pItems) @@ -674,13 +674,13 @@ public: m_pTable = NULL; } - // 置换新的哈希表及尺寸 + // 缃崲鏂扮殑鍝堝笇琛ㄥ強灏哄 m_pTable = pTable; m_uiSize = u32Size; return true; - // 如果执行失败, 则释放执行过程中分配的内存 + // 濡傛灉鎵ц澶辫触, 鍒欓噴鏀炬墽琛岃繃绋嬩腑鍒嗛厤鐨勫唴瀛 label_failed_resize: for(i = 0; i < u32Size; i++) { @@ -715,25 +715,25 @@ public: /*! - * \brief 插入一个哈希表项 + * \brief 鎻掑叆涓涓搱甯岃〃椤 * - * \param pT --[in] 欲插入的数据项 + * \param pT --[in] 娆叉彃鍏ョ殑鏁版嵁椤 * - * \retval true -- 成功 - * \retval false -- 失败 + * \retval true -- 鎴愬姛 + * \retval false -- 澶辫触 * * \note - * 在失败的情况下, 函数实现保证原哈希表不发生任何变化.\n - * 在函数实现中使用了使用者提供的函数\n - * pfnIndexOf -- 使用者提供的从键值到哈希值的转换函数\n - * pfnKeyOf -- 使用者提供的返回一个哈希项保存的数据项的关键值. + * 鍦ㄥけ璐ョ殑鎯呭喌涓, 鍑芥暟瀹炵幇淇濊瘉鍘熷搱甯岃〃涓嶅彂鐢熶换浣曞彉鍖.\n + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟\n + * pfnIndexOf -- 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟\n + * pfnKeyOf -- 浣跨敤鑰呮彁渚涚殑杩斿洖涓涓搱甯岄」淇濆瓨鐨勬暟鎹」鐨勫叧閿. */ bool insertItem(T * pT) { if(NULL == pT || NULL == m_pTable || NULL == m_pfnKeyOf || NULL == m_pfnIndexOf) return false; - // 求关键字及哈希值 + // 姹傚叧閿瓧鍙婂搱甯屽 void * pKey = (*m_pfnKeyOf)(pT); u32 index = (*m_pfnIndexOf)(pKey, m_uiSize); if(index >= m_uiSize) @@ -747,7 +747,7 @@ public: return true; } - // 插入到同义词数组中去 + // 鎻掑叆鍒板悓涔夎瘝鏁扮粍涓幓 if(pEntry->cntItems == pEntry->cntAllocItems) { if(false == this->increaseSynonyms(pEntry)) @@ -763,20 +763,20 @@ public: } /*! - * \brief 删除一个哈希表项 + * \brief 鍒犻櫎涓涓搱甯岃〃椤 * - * \param pT --[in] 数据项 + * \param pT --[in] 鏁版嵁椤 * - * \retval true -- 成功地删除了指定地数据项 - * \retval false -- 失败, 或者, 哈希表中没有指定的数据项 + * \retval true -- 鎴愬姛鍦板垹闄や簡鎸囧畾鍦版暟鎹」 + * \retval false -- 澶辫触, 鎴栬, 鍝堝笇琛ㄤ腑娌℃湁鎸囧畾鐨勬暟鎹」 * * \note - * 在返回false的情况下, 函数实现保证原哈希表不发生任何变化\n - * 在函数实现中使用了使用者提供的函数\n - * pfnIndexOf -- 使用者提供的从键值到哈希值的转换函数\n - * pfnKeyOf -- 使用者提供的返回一个哈希项保存的数据项的关键值. \n - * pfnCompare -- 比较两个数据项的关键字的大小\n - * pfnFreeItem-- 使用者提供的用户释放由pfnAlloc所分配的内存的函数 + * 鍦ㄨ繑鍥瀎alse鐨勬儏鍐典笅, 鍑芥暟瀹炵幇淇濊瘉鍘熷搱甯岃〃涓嶅彂鐢熶换浣曞彉鍖朶n + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟\n + * pfnIndexOf -- 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟\n + * pfnKeyOf -- 浣跨敤鑰呮彁渚涚殑杩斿洖涓涓搱甯岄」淇濆瓨鐨勬暟鎹」鐨勫叧閿. \n + * pfnCompare -- 姣旇緝涓や釜鏁版嵁椤圭殑鍏抽敭瀛楃殑澶у皬\n + * pfnFreeItem-- 浣跨敤鑰呮彁渚涚殑鐢ㄦ埛閲婃斁鐢眕fnAlloc鎵鍒嗛厤鐨勫唴瀛樼殑鍑芥暟 */ bool deleteItem(T * pT) { @@ -789,19 +789,19 @@ public: } /*! - * \brief 删除一个哈希表项 + * \brief 鍒犻櫎涓涓搱甯岃〃椤 * - * \param pKey --[in] 欲被删除的数据项的键值 + * \param pKey --[in] 娆茶鍒犻櫎鐨勬暟鎹」鐨勯敭鍊 * - * \retval true -- 成功地删除了指定地数据项 - * \retval false -- 失败, 或者, 哈希表中没有指定的数据项 + * \retval true -- 鎴愬姛鍦板垹闄や簡鎸囧畾鍦版暟鎹」 + * \retval false -- 澶辫触, 鎴栬, 鍝堝笇琛ㄤ腑娌℃湁鎸囧畾鐨勬暟鎹」 * * \note - * 在返回false的情况下, 函数实现保证原哈希表不发生任何变化\n - * 在函数实现中使用了使用者提供的函数\n - * pfnIndexOf -- 使用者提供的从键值到哈希值的转换函数\n - * pfnCompare -- 比较两个数据项的关键字的大小\n - * pfnFreeItem -- 使用者提供的用户释放由pfnAlloc所分配的内存的函数 + * 鍦ㄨ繑鍥瀎alse鐨勬儏鍐典笅, 鍑芥暟瀹炵幇淇濊瘉鍘熷搱甯岃〃涓嶅彂鐢熶换浣曞彉鍖朶n + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟\n + * pfnIndexOf -- 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟\n + * pfnCompare -- 姣旇緝涓や釜鏁版嵁椤圭殑鍏抽敭瀛楃殑澶у皬\n + * pfnFreeItem -- 浣跨敤鑰呮彁渚涚殑鐢ㄦ埛閲婃斁鐢眕fnAlloc鎵鍒嗛厤鐨勫唴瀛樼殑鍑芥暟 */ bool deleteItem_with_key(void * pKey) { @@ -810,7 +810,7 @@ public: if(NULL == m_pTable || NULL == m_pfnIndexOf || NULL == m_pfnCompare || NULL == m_pfnFreeItem) return false; - // 求哈希值 + // 姹傚搱甯屽 u32 index = (*m_pfnIndexOf)(pKey, m_uiSize); if(index >= m_uiSize) return false; @@ -853,20 +853,20 @@ public: } /*! - * \brief 从哈希表中分离出一个指定的哈希表项 + * \brief 浠庡搱甯岃〃涓垎绂诲嚭涓涓寚瀹氱殑鍝堝笇琛ㄩ」 * - * \param pT --[in] 欲被从哈希表中分离出来的数据项 + * \param pT --[in] 娆茶浠庡搱甯岃〃涓垎绂诲嚭鏉ョ殑鏁版嵁椤 * - * \retval 分离出来的数据项 -- 成功 - * \retval NULL -- 失败, 或者, 哈希表中根本就没有欲分离的数据项 + * \retval 鍒嗙鍑烘潵鐨勬暟鎹」 -- 鎴愬姛 + * \retval NULL -- 澶辫触, 鎴栬, 鍝堝笇琛ㄤ腑鏍规湰灏辨病鏈夋鍒嗙鐨勬暟鎹」 * * \note - * 在函数执行成功的情况下, 该数据项从哈希表中移出.\n - * 在返回NULL的情况下, 函数实现保证原哈希表不发生任何变化\n - * 在函数实现中使用了使用者提供的函数\n - * pfnIndexOf -- 使用者提供的从键值到哈希值的转换函数\n - * pfnKeyOf -- 使用者提供的返回一个哈希项保存的数据项的关键值. \n - * pfnCompare -- 比较两个数据项的关键字的大小\n + * 鍦ㄥ嚱鏁版墽琛屾垚鍔熺殑鎯呭喌涓, 璇ユ暟鎹」浠庡搱甯岃〃涓Щ鍑.\n + * 鍦ㄨ繑鍥濶ULL鐨勬儏鍐典笅, 鍑芥暟瀹炵幇淇濊瘉鍘熷搱甯岃〃涓嶅彂鐢熶换浣曞彉鍖朶n + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟\n + * pfnIndexOf -- 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟\n + * pfnKeyOf -- 浣跨敤鑰呮彁渚涚殑杩斿洖涓涓搱甯岄」淇濆瓨鐨勬暟鎹」鐨勫叧閿. \n + * pfnCompare -- 姣旇緝涓や釜鏁版嵁椤圭殑鍏抽敭瀛楃殑澶у皬\n */ T * detachItem(T * pT) { @@ -878,19 +878,19 @@ public: } /*! - * \brief 从哈希表中分离出一个指定的哈希表项 + * \brief 浠庡搱甯岃〃涓垎绂诲嚭涓涓寚瀹氱殑鍝堝笇琛ㄩ」 * - * \param pKey --[in] 欲被从哈希表中分离出来的数据项的键值 + * \param pKey --[in] 娆茶浠庡搱甯岃〃涓垎绂诲嚭鏉ョ殑鏁版嵁椤圭殑閿 * - * \retval 分离出来的数据项 -- 成功 - * \retval NULL -- 失败, 或者, 哈希表中根本就没有欲分离的数据项 + * \retval 鍒嗙鍑烘潵鐨勬暟鎹」 -- 鎴愬姛 + * \retval NULL -- 澶辫触, 鎴栬, 鍝堝笇琛ㄤ腑鏍规湰灏辨病鏈夋鍒嗙鐨勬暟鎹」 * * \note - * 在函数执行成功的情况下, 该数据项从哈希表中移出.\n - * 在返回NULL的情况下, 函数实现保证原哈希表不发生任何变化\n - * 在函数实现中使用了使用者提供的函数\n - * pfnIndexOf -- 使用者提供的从键值到哈希值的转换函数\n - * pfnCompare -- 比较两个数据项的关键字的大小\n + * 鍦ㄥ嚱鏁版墽琛屾垚鍔熺殑鎯呭喌涓, 璇ユ暟鎹」浠庡搱甯岃〃涓Щ鍑.\n + * 鍦ㄨ繑鍥濶ULL鐨勬儏鍐典笅, 鍑芥暟瀹炵幇淇濊瘉鍘熷搱甯岃〃涓嶅彂鐢熶换浣曞彉鍖朶n + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟\n + * pfnIndexOf -- 浣跨敤鑰呮彁渚涚殑浠庨敭鍊煎埌鍝堝笇鍊肩殑杞崲鍑芥暟\n + * pfnCompare -- 姣旇緝涓や釜鏁版嵁椤圭殑鍏抽敭瀛楃殑澶у皬\n */ T * detachItem_with_key(void * pKey) { @@ -936,11 +936,11 @@ public: /*! - * \brief 释放哈希表所管理的所有数据项 + * \brief 閲婃斁鍝堝笇琛ㄦ墍绠$悊鐨勬墍鏈夋暟鎹」 * * \note - * 在函数实现中使用了使用者提供的函数\n - * pfnFreeItem -- 使用者提供的用户释放由pfnAlloc所分配的内存的函数 + * 鍦ㄥ嚱鏁板疄鐜颁腑浣跨敤浜嗕娇鐢ㄨ呮彁渚涚殑鍑芥暟\n + * pfnFreeItem -- 浣跨敤鑰呮彁渚涚殑鐢ㄦ埛閲婃斁鐢眕fnAlloc鎵鍒嗛厤鐨勫唴瀛樼殑鍑芥暟 */ bool deleteItems() { @@ -980,7 +980,7 @@ public: } /*! - * \brief 分离哈希表所管理的所有数据项 + * \brief 鍒嗙鍝堝笇琛ㄦ墍绠$悊鐨勬墍鏈夋暟鎹」 */ void detachItems() { @@ -1002,7 +1002,7 @@ public: } }; -// 是pc机系统还是嵌入式系统 +// 鏄痯c鏈虹郴缁熻繕鏄祵鍏ュ紡绯荤粺 #ifdef PC_MACHINE #ifdef OS_WINDOWS diff --git a/widgets.sln b/iec103.sln similarity index 100% rename from widgets.sln rename to iec103.sln diff --git a/inifile.h b/inifile.h index f737d20..49ba8bd 100644 --- a/inifile.h +++ b/inifile.h @@ -1,7 +1,7 @@ /*---------------------------------------------------------- - 平台无关的INI文件读写函数 V1.65 + 骞冲彴鏃犲叧鐨処NI鏂囦欢璇诲啓鍑芥暟 V1.65 - 张磊 2002.10.3 + 寮犵 2002.10.3 ----------------------------------------------------------*/ #ifndef INI_FILE_H @@ -9,48 +9,48 @@ #include "platform_def.h" -#define MAX_LINE_BUF_LENGTH 2048 //最大行缓冲区长度 +#define MAX_LINE_BUF_LENGTH 2048 //鏈澶ц缂撳啿鍖洪暱搴 -#define FILE_OPEN_ERROR -1 //文件打开错误 -#define SECTION_NOT_FOUND -2 //段没有找到 -#define KEY_NOT_FOUND -3 //键没有找到 +#define FILE_OPEN_ERROR -1 //鏂囦欢鎵撳紑閿欒 +#define SECTION_NOT_FOUND -2 //娈垫病鏈夋壘鍒 +#define KEY_NOT_FOUND -3 //閿病鏈夋壘鍒 -//工具函数 +//宸ュ叿鍑芥暟 void StrTrimLeft(char* szBuf); void StrTrimRight(char* szBuf); void StrTrimAll(char* szBuf); long GetFileSize(char* lpszFileName); -int ReadLineFromFile(FILE* IniFile, char* lpszLineBuf, int iLen); //从指定文件中读取一行内容 -bool IfBeforeHasRet(FILE* pFile); //辅助函数,判断当前文件位置前面是否是换行符号 +int ReadLineFromFile(FILE* IniFile, char* lpszLineBuf, int iLen); //浠庢寚瀹氭枃浠朵腑璇诲彇涓琛屽唴瀹 +bool IfBeforeHasRet(FILE* pFile); //杈呭姪鍑芥暟锛屽垽鏂綋鍓嶆枃浠朵綅缃墠闈㈡槸鍚︽槸鎹㈣绗﹀彿 -//读配置文件中指定段下指定键的值(字符串) +//璇婚厤缃枃浠朵腑鎸囧畾娈典笅鎸囧畾閿殑鍊(瀛楃涓) int QGetPrivateProfileString( - const char* lpszSectionName, //段名 - const char* lpszKeyName, //键名 - const char* lpszDefault, //缺省字符串 - char* lpszReturnedString, //结果字符串 - u_32 nSize, //结果字符串长度 - const char* lpszFileName, //ini文件名 - const char* lpszRemarkInLineStr = (char*)";", //行内注释符 - const char chContinueLineChar = '\\' //续行符号 + const char* lpszSectionName, //娈靛悕 + const char* lpszKeyName, //閿悕 + const char* lpszDefault, //缂虹渷瀛楃涓 + char* lpszReturnedString, //缁撴灉瀛楃涓 + u_32 nSize, //缁撴灉瀛楃涓查暱搴 + const char* lpszFileName, //ini鏂囦欢鍚 + const char* lpszRemarkInLineStr = (char*)";", //琛屽唴娉ㄩ噴绗 + const char chContinueLineChar = '\\' //缁绗﹀彿 ); -//读配置文件中指定段下指定键的值(整数) +//璇婚厤缃枃浠朵腑鎸囧畾娈典笅鎸囧畾閿殑鍊(鏁存暟) int QGetPrivateProfileInt( - const char* lpszSectionName, //段名 - const char* lpszKeyName, //键名 - int nDefault, //缺省值 - const char* lpszFileName, //ini文件名 - const char* lpszRemarkInLineStr = (char*)";", //行内注释符 - const char chContinueLineChar = '\\' //续行符号 + const char* lpszSectionName, //娈靛悕 + const char* lpszKeyName, //閿悕 + int nDefault, //缂虹渷鍊 + const char* lpszFileName, //ini鏂囦欢鍚 + const char* lpszRemarkInLineStr = (char*)";", //琛屽唴娉ㄩ噴绗 + const char chContinueLineChar = '\\' //缁绗﹀彿 ); -//向配置文件写入指定段下指定键的值(字符串) +//鍚戦厤缃枃浠跺啓鍏ユ寚瀹氭涓嬫寚瀹氶敭鐨勫(瀛楃涓) int QWritePrivateProfileString( - const char* lpszSectionName, //段名 - const char* lpszKeyName, //键名 - const char* lpszString, //要写入的字符串 - const char* lpszFileName //INI文件名 + const char* lpszSectionName, //娈靛悕 + const char* lpszKeyName, //閿悕 + const char* lpszString, //瑕佸啓鍏ョ殑瀛楃涓 + const char* lpszFileName //INI鏂囦欢鍚 ); #endif diff --git a/list_entry.cpp b/list_entry.cpp index e59435c..d313d32 100644 --- a/list_entry.cpp +++ b/list_entry.cpp @@ -4,9 +4,9 @@ * Shenzhen SCADA Control Technology Co., Ltd. * All rights reserved. * - * 实现双链表 + * 瀹炵幇鍙岄摼琛 * - * 创建日期: 2004/01/10 + * 鍒涘缓鏃ユ湡: 2004/01/10 * * $Id: list_entry.cpp,v 1.1.1.1 2006/07/05 07:31:43 jehu Exp $ * @@ -17,7 +17,7 @@ #include "list_entry.h" /* - * 双向链表的操纵例程函数的实现 + * 鍙屽悜閾捐〃鐨勬搷绾典緥绋嬪嚱鏁扮殑瀹炵幇 */ void Initialize_list_head ( list_entry_t * plist_head ) { @@ -25,10 +25,10 @@ void Initialize_list_head ( list_entry_t * plist_head ) } /* - * 判断双向链表是否为空 + * 鍒ゆ柇鍙屽悜閾捐〃鏄惁涓虹┖ * - * \retval 0 空链表 - * \retval 非0 空链表 + * \retval 0 绌洪摼琛 + * \retval 闈0 绌洪摼琛 */ int is_list_empty ( list_entry_t * plist_head ) { @@ -36,7 +36,7 @@ int is_list_empty ( list_entry_t * plist_head ) } /* - * 从双向链表的头部移取一个链表元素--与链表脱离链接关系 + * 浠庡弻鍚戦摼琛ㄧ殑澶撮儴绉诲彇涓涓摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 */ list_entry_t * remove_head_list ( list_entry_t * plist_head ) { @@ -47,7 +47,7 @@ list_entry_t * remove_head_list ( list_entry_t * plist_head ) /* - * 从双向链表的尾部移取一个链表元素--与链表脱离链接关系 + * 浠庡弻鍚戦摼琛ㄧ殑灏鹃儴绉诲彇涓涓摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 */ list_entry_t * remove_tail_list ( list_entry_t * plist_head ) { @@ -57,7 +57,7 @@ list_entry_t * remove_tail_list ( list_entry_t * plist_head ) } /* - * 从双向链表中移取制定的链表元素--与链表脱离链接关系 + * 浠庡弻鍚戦摼琛ㄤ腑绉诲彇鍒跺畾鐨勯摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 */ void remove_entry_list ( list_entry_t * pEntry ) { @@ -71,7 +71,7 @@ void remove_entry_list ( list_entry_t * pEntry ) } /* - * 将一个链表元素从尾部插入到双向链表中 + * 灏嗕竴涓摼琛ㄥ厓绱犱粠灏鹃儴鎻掑叆鍒板弻鍚戦摼琛ㄤ腑 */ void insert_tail_list ( list_entry_t * plist_head, list_entry_t * pEntry ) { @@ -87,7 +87,7 @@ void insert_tail_list ( list_entry_t * plist_head, list_entry_t * pEntry ) } /* - * 将一个链表元素从尾部插入到双向链表中 + * 灏嗕竴涓摼琛ㄥ厓绱犱粠灏鹃儴鎻掑叆鍒板弻鍚戦摼琛ㄤ腑 */ void insert_head_list ( list_entry_t * plist_head, list_entry_t * pEntry) { diff --git a/list_entry.h b/list_entry.h index 6150445..248f6d3 100644 --- a/list_entry.h +++ b/list_entry.h @@ -4,11 +4,11 @@ * Shenzhen SCADA Control Technology Co., Ltd. * All rights reserved. * - * 双链表 + * 鍙岄摼琛 * - * 创建日期: 2004/01/10 + * 鍒涘缓鏃ユ湡: 2004/01/10 * - * 摘自Windoes $(DDKPATH)/inc/ntdef.h和$(DDKPATH)/inc/ddk/ntddk.h + * 鎽樿嚜Windoes $(DDKPATH)/inc/ntdef.h鍜$(DDKPATH)/inc/ddk/ntddk.h * * $Id: list_entry.h,v 1.1.1.1 2006/07/05 07:31:43 jehu Exp $ * @@ -18,13 +18,13 @@ #define __LIST_ENTRY_H__SKLJFALKJZLJVADFHOPSHVPZIOXJHCVOIPADFDFNXVCQWEDAH /*! - * 双向链表结构定义, 可以用链表的头或者链表成员. + * 鍙屽悜閾捐〃缁撴瀯瀹氫箟, 鍙互鐢ㄩ摼琛ㄧ殑澶存垨鑰呴摼琛ㄦ垚鍛. */ typedef struct tag_list_entry_t { - struct tag_list_entry_t * flink; /*!< 指向链表元素的前驱元素 */ + struct tag_list_entry_t * flink; /*!< 鎸囧悜閾捐〃鍏冪礌鐨勫墠椹卞厓绱 */ - struct tag_list_entry_t * blink; /*!< 指向链表元素的后继元素 */ + struct tag_list_entry_t * blink; /*!< 鎸囧悜閾捐〃鍏冪礌鐨勫悗缁у厓绱 */ } list_entry_t; @@ -33,30 +33,30 @@ typedef list_entry_t ** pplist_entry_t; /* - * 下面是双向链表的操纵例程函数 + * 涓嬮潰鏄弻鍚戦摼琛ㄧ殑鎿嶇旱渚嬬▼鍑芥暟 * * +---------------------------+-----------------------------------------------------+ - * | Initialize_list_head | 初始化链表头中的list_entry_t结构 | + * | Initialize_list_head | 鍒濆鍖栭摼琛ㄥご涓殑list_entry_t缁撴瀯 | * +---------------------------+-----------------------------------------------------+ - * | is_list_empty | 判断链表是否为空 | + * | is_list_empty | 鍒ゆ柇閾捐〃鏄惁涓虹┖ | * +---------------------------+-----------------------------------------------------+ - * | remove_head_list | 从双向链表的头部移取一个链表元素--与链表脱离链接关系| + * | remove_head_list | 浠庡弻鍚戦摼琛ㄧ殑澶撮儴绉诲彇涓涓摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯粅 * +---------------------------+-----------------------------------------------------+ - * | remove_tail_list | 从双向链表的尾部移取一个链表元素--与链表脱离链接关系| + * | remove_tail_list | 浠庡弻鍚戦摼琛ㄧ殑灏鹃儴绉诲彇涓涓摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯粅 * +---------------------------+-----------------------------------------------------+ - * | remove_entry_list | 从双向链表中移取指定的链表元素--与链表脱离链接关系 | + * | remove_entry_list | 浠庡弻鍚戦摼琛ㄤ腑绉诲彇鎸囧畾鐨勯摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 | * +---------------------------+-----------------------------------------------------+ - * | insert_tail_list | 在起始处插入一个元素 | + * | insert_tail_list | 鍦ㄨ捣濮嬪鎻掑叆涓涓厓绱 | * +---------------------------+-----------------------------------------------------+ - * | insert_head_list | 在结尾处插入一个元素 | + * | insert_head_list | 鍦ㄧ粨灏惧鎻掑叆涓涓厓绱 | * +---------------------------+-----------------------------------------------------+ - * | CONTAINING_RECORD | 由链表元素指针反演出链表元素所包含的元素指针 | + * | CONTAINING_RECORD | 鐢遍摼琛ㄥ厓绱犳寚閽堝弽婕斿嚭閾捐〃鍏冪礌鎵鍖呭惈鐨勫厓绱犳寚閽 | * +---------------------------+-----------------------------------------------------+ * */ /* - * 由链表元素指针反演出链表元素所包含的元素指针 + * 鐢遍摼琛ㄥ厓绱犳寚閽堝弽婕斿嚭閾捐〃鍏冪礌鎵鍖呭惈鐨勫厓绱犳寚閽 */ #ifdef CONTAINING_RECORD #undef CONTAINING_RECORD @@ -64,43 +64,43 @@ typedef list_entry_t ** pplist_entry_t; #define CONTAINING_RECORD(_addr, _type, _field) ((_type *)((char *)(_addr) - (char *)(&((_type *)0)->_field))) /* - * 初始化双向链表 + * 鍒濆鍖栧弻鍚戦摼琛 * - * \param plist_head 指向链表的头 + * \param plist_head 鎸囧悜閾捐〃鐨勫ご */ void Initialize_list_head ( list_entry_t * plist_head ); /* - * 判断双向链表是否为空 + * 鍒ゆ柇鍙屽悜閾捐〃鏄惁涓虹┖ * - * \retval 0 空链表 - * \retval 非0 空链表 + * \retval 0 绌洪摼琛 + * \retval 闈0 绌洪摼琛 */ int is_list_empty ( list_entry_t * plist_head ); /* - * 从双向链表的头部移取一个链表元素--与链表脱离链接关系 + * 浠庡弻鍚戦摼琛ㄧ殑澶撮儴绉诲彇涓涓摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 */ list_entry_t * remove_head_list ( list_entry_t * plist_head ); /* - * 从双向链表的尾部移取一个链表元素--与链表脱离链接关系 + * 浠庡弻鍚戦摼琛ㄧ殑灏鹃儴绉诲彇涓涓摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 */ list_entry_t * remove_tail_list ( list_entry_t * plist_head ); /* - * 从双向链表中移取制定的链表元素--与链表脱离链接关系 + * 浠庡弻鍚戦摼琛ㄤ腑绉诲彇鍒跺畾鐨勯摼琛ㄥ厓绱--涓庨摼琛ㄨ劚绂婚摼鎺ュ叧绯 */ void remove_entry_list ( list_entry_t * pEntry); /* - * 将一个链表元素从尾部插入到双向链表中 + * 灏嗕竴涓摼琛ㄥ厓绱犱粠灏鹃儴鎻掑叆鍒板弻鍚戦摼琛ㄤ腑 */ void insert_tail_list ( list_entry_t * plist_head, list_entry_t * pEntry ); /* - * 将一个链表元素从头部插入到双向链表中 + * 灏嗕竴涓摼琛ㄥ厓绱犱粠澶撮儴鎻掑叆鍒板弻鍚戦摼琛ㄤ腑 */ void insert_head_list ( list_entry_t * plist_head, list_entry_t * pEntry); diff --git a/netport.h b/netport.h index 704cc54..5a0074e 100644 --- a/netport.h +++ b/netport.h @@ -16,7 +16,7 @@ BYTE CreateUdpSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr); BYTE CreateTcpServerSock(int *LiSock, DWORD NetPort); BYTE CreateTcpClientSock(int *CommSock, DWORD NetPort, DWORD NetCommIpAddr); -// 设置及时知道TCP非优雅的方式断开连接的socket属性 +// 璁剧疆鍙婃椂鐭ラ亾TCP闈炰紭闆呯殑鏂瑰紡鏂紑杩炴帴鐨剆ocket灞炴 //void set_keepalive(int fd, int keep_alive, int keep_idle, int keep_interval, int keep_count); void OpenNetPort( int commid); @@ -28,7 +28,7 @@ void UdpSend(int commid); BOOL TcpRecv(int commid, int fds, u_long ipaddr); void TcpSend(int commid); -// 检查连接服务器端口的客户端ip地址配置的端口 +// 妫鏌ヨ繛鎺ユ湇鍔″櫒绔彛鐨勫鎴风ip鍦板潃閰嶇疆鐨勭鍙 void TcpAccept(int commid, int lisfds); void PollAllPort(void); diff --git a/os_heap.cpp b/os_heap.cpp index 462edb6..b47801e 100644 --- a/os_heap.cpp +++ b/os_heap.cpp @@ -4,9 +4,9 @@ * Shenzhen SCADA Control Technology Co., Ltd. * All rights reserved. * - * 用于调试内存泄漏的对内存分配函数的实现 + * 鐢ㄤ簬璋冭瘯鍐呭瓨娉勬紡鐨勫鍐呭瓨鍒嗛厤鍑芥暟鐨勫疄鐜 * - * 创建日期: 2005/04/12 + * 鍒涘缓鏃ユ湡: 2005/04/12 * ***********************************************************************/ /*#ifdef OS_LINUX @@ -36,102 +36,102 @@ #define _fclose(_fp) do {if (_fp) {while (EOF == fclose((_fp)) && EINTR == errno);}} while(0) /*! - * 堆内存块的类型 + * 鍫嗗唴瀛樺潡鐨勭被鍨 */ typedef enum { - eMalloc = 0, /* 使用malloc分配的内存块 */ - eCalloc = 1 /* 使用calloc分配的内存块 */ + eMalloc = 0, /* 浣跨敤malloc鍒嗛厤鐨勫唴瀛樺潡 */ + eCalloc = 1 /* 浣跨敤calloc鍒嗛厤鐨勫唴瀛樺潡 */ } heap_type_t; /*! - * 堆内存块附加头 + * 鍫嗗唴瀛樺潡闄勫姞澶 * * \note - * 必须保证本结构的尺寸被16整除。 + * 蹇呴』淇濊瘉鏈粨鏋勭殑灏哄琚16鏁撮櫎銆 */ typedef struct tag_heap_head_t { - /* 堆内存块附加头所在的链表的占位 */ + /* 鍫嗗唴瀛樺潡闄勫姞澶存墍鍦ㄧ殑閾捐〃鐨勫崰浣 */ list_entry_t anchor; - /*! 堆内存块分配发生的时间 */ + /*! 鍫嗗唴瀛樺潡鍒嗛厤鍙戠敓鐨勬椂闂 */ struct timeval tv; - /*! 堆内存块类型 */ + /*! 鍫嗗唴瀛樺潡绫诲瀷 */ heap_type_t type; - /*! 堆内存块分配发生的源文件名,NULL表示匿名源文件。 */ + /*! 鍫嗗唴瀛樺潡鍒嗛厤鍙戠敓鐨勬簮鏂囦欢鍚嶏紝NULL琛ㄧず鍖垮悕婧愭枃浠躲 */ char * fl; - /*! 堆内存块分配发生的源代码行 */ + /*! 鍫嗗唴瀛樺潡鍒嗛厤鍙戠敓鐨勬簮浠g爜琛 */ int line; - /*! 堆内存块的尺寸(字节) */ + /*! 鍫嗗唴瀛樺潡鐨勫昂瀵(瀛楄妭) */ size_t size; } heap_list_t; -/* 边界对齐量 */ +/* 杈圭晫瀵归綈閲 */ #define os_heap_alignment 16 #define os_heap_pad ((sizeof(heap_list_t) % os_heap_alignment) ? (os_heap_alignment - (sizeof(heap_list_t) % os_heap_alignment)) : 0) -/* 根据数据地址求os_heap块的起始地址 */ +/* 鏍规嵁鏁版嵁鍦板潃姹俹s_heap鍧楃殑璧峰鍦板潃 */ #define os_heap_start_addr(_data) ((void *)(((unsigned char *)(_data)) - sizeof(heap_list_t) - os_heap_pad)) -/* 根据os_heap块的起始地址求数据地址 */ +/* 鏍规嵁os_heap鍧楃殑璧峰鍦板潃姹傛暟鎹湴鍧 */ #define os_heap_data_addr(_start) ((void *)(((unsigned char *)(_start)) + sizeof(heap_list_t) + os_heap_pad)) -/* 根据数据块的尺寸求os_heap块的尺寸 */ +/* 鏍规嵁鏁版嵁鍧楃殑灏哄姹俹s_heap鍧楃殑灏哄 */ #define os_heap_mb_size(_size) (sizeof(heap_list_t) + os_heap_pad + (_size)) /* - * 内存管理模块: + * 鍐呭瓨绠$悊妯″潡锛 * - * 1. 初始化过程 - * 2. 具有一个私有线程,专门侦听外部的信号,并打印报告。 - * 3. 堆内存块链表头、尾指针。 - * 4. 互斥访问保护 + * 1. 鍒濆鍖栬繃绋 + * 2. 鍏锋湁涓涓鏈夌嚎绋嬶紝涓撻棬渚﹀惉澶栭儴鐨勪俊鍙凤紝骞舵墦鍗版姤鍛娿 + * 3. 鍫嗗唴瀛樺潡閾捐〃澶淬佸熬鎸囬拡銆 + * 4. 浜掓枼璁块棶淇濇姢 */ -/* 堆内存块设施是否已经初始化 */ +/* 鍫嗗唴瀛樺潡璁炬柦鏄惁宸茬粡鍒濆鍖 */ static int g_heap_initialized = 0; -/* 堆内存块双向链表头 */ +/* 鍫嗗唴瀛樺潡鍙屽悜閾捐〃澶 */ static list_entry_t g_heap_head; /* - * 进程中使用heap_malloc/heap_calloc分配的内存 - * 且现在还在使用的内存块的总数。 + * 杩涚▼涓娇鐢╤eap_malloc/heap_calloc鍒嗛厤鐨勫唴瀛 + * 涓旂幇鍦ㄨ繕鍦ㄤ娇鐢ㄧ殑鍐呭瓨鍧楃殑鎬绘暟銆 */ static size_t g_heap_item_counter = 0; /* - * 进程中使用heap_malloc/heap_calloc分配的内存 - * 且现在还在使用的总量(字节) + * 杩涚▼涓娇鐢╤eap_malloc/heap_calloc鍒嗛厤鐨勫唴瀛 + * 涓旂幇鍦ㄨ繕鍦ㄤ娇鐢ㄧ殑鎬婚噺(瀛楄妭) */ static size_t g_heap_byte_counter = 0; -/* 初始化堆内存块设施 */ +/* 鍒濆鍖栧爢鍐呭瓨鍧楄鏂 */ static void heap_intialize(); /*! - * \brief 堆内存分配 + * \brief 鍫嗗唴瀛樺垎閰 * - * \param size 希望分配的内存的尺寸 - * \param file 指向发生堆内存分配的源代码文件名称,以null字符结尾。 - * 如果等于NULL, 表示匿名源代码文件名(anony) - * \param line 发生堆内存分配的源代码行号 + * \param size 甯屾湜鍒嗛厤鐨勫唴瀛樼殑灏哄 + * \param file 鎸囧悜鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佹枃浠跺悕绉帮紝浠ull瀛楃缁撳熬銆 + * 濡傛灉绛変簬NULL锛 琛ㄧず鍖垮悕婧愪唬鐮佹枃浠跺悕(anony) + * \param line 鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佽鍙 * * \retutrn - * 对内存分配成功的情况下,返回指向分配的内存的指针。如果内存 - * 分配失败,返回NULL。 + * 瀵瑰唴瀛樺垎閰嶆垚鍔熺殑鎯呭喌涓嬶紝杩斿洖鎸囧悜鍒嗛厤鐨勫唴瀛樼殑鎸囬拡銆傚鏋滃唴瀛 + * 鍒嗛厤澶辫触锛岃繑鍥濶ULL銆 * * \note - * 当分配的内存不在使用时,必须调用heap_free是否分配的内存。 + * 褰撳垎閰嶇殑鍐呭瓨涓嶅湪浣跨敤鏃讹紝蹇呴』璋冪敤heap_free鏄惁鍒嗛厤鐨勫唴瀛樸 * - * 参见 ANSI C 函数 malloc。 + * 鍙傝 ANSI C 鍑芥暟 malloc銆 */ void * heap_malloc ( size_t size, @@ -187,24 +187,24 @@ void * heap_malloc ( } /*! - * \brief 堆内存分配, 且内存块被初始化0. + * \brief 鍫嗗唴瀛樺垎閰, 涓斿唴瀛樺潡琚垵濮嬪寲0. * - * \param num 内存块个数 - * \param elm_size 每一个内存块的尺寸(字节) - * \param file 指向发生堆内存分配的源代码文件名称,以null字符结尾。 - * 如果等于NULL, 表示匿名源代码文件名(anony) - * \param line 发生堆内存分配的源代码行号 + * \param num 鍐呭瓨鍧椾釜鏁 + * \param elm_size 姣忎竴涓唴瀛樺潡鐨勫昂瀵(瀛楄妭) + * \param file 鎸囧悜鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佹枃浠跺悕绉帮紝浠ull瀛楃缁撳熬銆 + * 濡傛灉绛変簬NULL锛 琛ㄧず鍖垮悕婧愪唬鐮佹枃浠跺悕(anony) + * \param line 鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佽鍙 * * \retutrn - * 对内存分配成功的情况下,返回指向分配的内存的指针。如果内存 - * 分配失败,返回NULL。 + * 瀵瑰唴瀛樺垎閰嶆垚鍔熺殑鎯呭喌涓嬶紝杩斿洖鎸囧悜鍒嗛厤鐨勫唴瀛樼殑鎸囬拡銆傚鏋滃唴瀛 + * 鍒嗛厤澶辫触锛岃繑鍥濶ULL銆 * * \note - * 当分配的内存不在使用时,必须调用heap_free释放分配的内存。 + * 褰撳垎閰嶇殑鍐呭瓨涓嶅湪浣跨敤鏃讹紝蹇呴』璋冪敤heap_free閲婃斁鍒嗛厤鐨勫唴瀛樸 * - * 参见 ANSI C 函数 calloc。本函数与 calloc 不同之处在于不能 - * 象calloc那样保证返回的堆内存块的其实地址对齐在elm_size边界 - * 上。 + * 鍙傝 ANSI C 鍑芥暟 calloc銆傛湰鍑芥暟涓 calloc 涓嶅悓涔嬪鍦ㄤ簬涓嶈兘 + * 璞alloc閭f牱淇濊瘉杩斿洖鐨勫爢鍐呭瓨鍧楃殑鍏跺疄鍦板潃瀵归綈鍦╡lm_size杈圭晫 + * 涓娿 */ void * heap_calloc ( size_t num, @@ -261,12 +261,12 @@ void * heap_calloc ( } /*! - * \brief 释放堆内存 + * \brief 閲婃斁鍫嗗唴瀛 * - * \param memblock 指向先前调用heap_alloc/heap_calloc分配的内存。 + * \param memblock 鎸囧悜鍏堝墠璋冪敤heap_alloc/heap_calloc鍒嗛厤鐨勫唴瀛樸 * * \return - * 无。 + * 鏃犮 */ void heap_free (void * mb) { @@ -310,26 +310,26 @@ void heap_free (void * mb) } /*! - * \brief 报告堆内存分配 + * \brief 鎶ュ憡鍫嗗唴瀛樺垎閰 * - * 调用本函数将堆内存分配情况以追加的方式输出到指定文件中。 + * 璋冪敤鏈嚱鏁板皢鍫嗗唴瀛樺垎閰嶆儏鍐典互杩藉姞鐨勬柟寮忚緭鍑哄埌鎸囧畾鏂囦欢涓 * - * \param fname 对内存分配报告将输出到该文件中。如果fname等于NULL, - * 则报告将输出到标准输出上。 + * \param fname 瀵瑰唴瀛樺垎閰嶆姤鍛婂皢杈撳嚭鍒拌鏂囦欢涓傚鏋渇name绛変簬NULL锛 + * 鍒欐姤鍛婂皢杈撳嚭鍒版爣鍑嗚緭鍑轰笂銆 * - * \retval -1 函数调用失败。 - * \retval 0 函数调用成功。 + * \retval -1 鍑芥暟璋冪敤澶辫触銆 + * \retval 0 鍑芥暟璋冪敤鎴愬姛銆 * * \note - * 报告的格式如下 - * 时间: - * 内存使用总量: + * 鎶ュ憡鐨勬牸寮忓涓 + * 鏃堕棿: + * 鍐呭瓨浣跨敤鎬婚噺: * ...... - * 内存块列表i: - * 时间: tv - * 类型: malloc/calloc, - * 源码位置: fl(line) - * 尺寸: size + * 鍐呭瓨鍧楀垪琛╥: + * 鏃堕棿: tv + * 绫诲瀷: malloc/calloc, + * 婧愮爜浣嶇疆: fl(line) + * 灏哄: size * ...... */ int heap_report(const char * fname) diff --git a/os_heap.h b/os_heap.h index be875fe..e7ab7bc 100644 --- a/os_heap.h +++ b/os_heap.h @@ -4,9 +4,9 @@ * Shenzhen SCADA Control Technology Co., Ltd. * All rights reserved. * - * 用于调试内存泄漏的对内存分配函数 + * 鐢ㄤ簬璋冭瘯鍐呭瓨娉勬紡鐨勫鍐呭瓨鍒嗛厤鍑芥暟 * - * 创建日期: 2005/04/12 + * 鍒涘缓鏃ユ湡: 2005/04/12 * ***********************************************************************/ @@ -16,73 +16,73 @@ #include "basetype.h" /*! - * \brief 堆内存分配 + * \brief 鍫嗗唴瀛樺垎閰 * - * \param size 希望分配的内存的尺寸 - * \param file 指向发生堆内存分配的源代码文件名称,以null字符结尾。 - * 如果等于NULL, 表示匿名源代码文件名(anony) - * \param line 发生堆内存分配的源代码行号 + * \param size 甯屾湜鍒嗛厤鐨勫唴瀛樼殑灏哄 + * \param file 鎸囧悜鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佹枃浠跺悕绉帮紝浠ull瀛楃缁撳熬銆 + * 濡傛灉绛変簬NULL锛 琛ㄧず鍖垮悕婧愪唬鐮佹枃浠跺悕(anony) + * \param line 鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佽鍙 * * \retutrn - * 对内存分配成功的情况下,返回指向分配的内存的指针。如果内存 - * 分配失败,返回NULL。 + * 瀵瑰唴瀛樺垎閰嶆垚鍔熺殑鎯呭喌涓嬶紝杩斿洖鎸囧悜鍒嗛厤鐨勫唴瀛樼殑鎸囬拡銆傚鏋滃唴瀛 + * 鍒嗛厤澶辫触锛岃繑鍥濶ULL銆 * * \note - * 当分配的内存不在使用时,必须调用heap_free是否分配的内存。 + * 褰撳垎閰嶇殑鍐呭瓨涓嶅湪浣跨敤鏃讹紝蹇呴』璋冪敤heap_free鏄惁鍒嗛厤鐨勫唴瀛樸 * - * 参见 ANSI C 函数 malloc。 + * 鍙傝 ANSI C 鍑芥暟 malloc銆 */ DSLIB_API void * heap_malloc (size_t size, const char * file, int line); /*! - * \brief 堆内存分配, 且内存块被初始化0. + * \brief 鍫嗗唴瀛樺垎閰, 涓斿唴瀛樺潡琚垵濮嬪寲0. * - * \param num 内存块个数 - * \param elm_size 每一个内存块的尺寸(字节) - * \param file 指向发生堆内存分配的源代码文件名称,以null字符结尾。 - * 如果等于NULL, 表示匿名源代码文件名(anony) - * \param line 发生堆内存分配的源代码行号 + * \param num 鍐呭瓨鍧椾釜鏁 + * \param elm_size 姣忎竴涓唴瀛樺潡鐨勫昂瀵(瀛楄妭) + * \param file 鎸囧悜鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佹枃浠跺悕绉帮紝浠ull瀛楃缁撳熬銆 + * 濡傛灉绛変簬NULL锛 琛ㄧず鍖垮悕婧愪唬鐮佹枃浠跺悕(anony) + * \param line 鍙戠敓鍫嗗唴瀛樺垎閰嶇殑婧愪唬鐮佽鍙 * * \retutrn - * 对内存分配成功的情况下,返回指向分配的内存的指针。如果内存 - * 分配失败,返回NULL。 + * 瀵瑰唴瀛樺垎閰嶆垚鍔熺殑鎯呭喌涓嬶紝杩斿洖鎸囧悜鍒嗛厤鐨勫唴瀛樼殑鎸囬拡銆傚鏋滃唴瀛 + * 鍒嗛厤澶辫触锛岃繑鍥濶ULL銆 * * \note - * 当分配的内存不在使用时,必须调用heap_free释放分配的内存。 + * 褰撳垎閰嶇殑鍐呭瓨涓嶅湪浣跨敤鏃讹紝蹇呴』璋冪敤heap_free閲婃斁鍒嗛厤鐨勫唴瀛樸 * - * 参见 ANSI C 函数 calloc。本函数与 calloc 不同之处在于不能 - * 象calloc那样保证返回的堆内存块的其实地址对齐在elm_size边界 - * 上。 + * 鍙傝 ANSI C 鍑芥暟 calloc銆傛湰鍑芥暟涓 calloc 涓嶅悓涔嬪鍦ㄤ簬涓嶈兘 + * 璞alloc閭f牱淇濊瘉杩斿洖鐨勫爢鍐呭瓨鍧楃殑鍏跺疄鍦板潃瀵归綈鍦╡lm_size杈圭晫 + * 涓娿 */ DSLIB_API void * heap_calloc (size_t num, size_t elm_size, const char * file, int line); /*! - * \brief 释放堆内存 + * \brief 閲婃斁鍫嗗唴瀛 * - * \param mb 指向先前调用heap_alloc/heap_calloc分配的内存。 + * \param mb 鎸囧悜鍏堝墠璋冪敤heap_alloc/heap_calloc鍒嗛厤鐨勫唴瀛樸 * * \return - * 无。 + * 鏃犮 */ DSLIB_API void heap_free (void * mb); /*! - * \brief 报告堆内存分配 + * \brief 鎶ュ憡鍫嗗唴瀛樺垎閰 * - * 调用本函数将堆内存分配情况以追加的方式输出到指定文件中。 + * 璋冪敤鏈嚱鏁板皢鍫嗗唴瀛樺垎閰嶆儏鍐典互杩藉姞鐨勬柟寮忚緭鍑哄埌鎸囧畾鏂囦欢涓 * - * \param fname 对内存分配报告将输出到该文件中。如果fname等于NULL, - * 则报告将输出到标准输出上。 + * \param fname 瀵瑰唴瀛樺垎閰嶆姤鍛婂皢杈撳嚭鍒拌鏂囦欢涓傚鏋渇name绛変簬NULL锛 + * 鍒欐姤鍛婂皢杈撳嚭鍒版爣鍑嗚緭鍑轰笂銆 * - * \retval -1 函数调用失败。 - * \retval 0 函数调用成功。 + * \retval -1 鍑芥暟璋冪敤澶辫触銆 + * \retval 0 鍑芥暟璋冪敤鎴愬姛銆 */ DSLIB_API int heap_report (const char * fname); /* - * 堆内存分配和释放宏定义, 为了方便使用者而提供这些宏定义。 + * 鍫嗗唴瀛樺垎閰嶅拰閲婃斁瀹忓畾涔, 涓轰簡鏂逛究浣跨敤鑰呰屾彁渚涜繖浜涘畯瀹氫箟銆 * * 1. HEAP_MALLOC(_size) * 2. HEAP_CALLOC(_num, _elm_size) diff --git a/platform_def.h b/platform_def.h index 35bf0b9..bfcc281 100644 --- a/platform_def.h +++ b/platform_def.h @@ -1,43 +1,43 @@ /*----------------------------------------------------------------------------- - platform_def.h 操作系统相关定义 zl 2002.11.5 + platform_def.h 鎿嶄綔绯荤粺鐩稿叧瀹氫箟 zl 2002.11.5 - 本文件定义所有和操作系统平台相关的常量、类型、宏及头文件引用 + 鏈枃浠跺畾涔夋墍鏈夊拰鎿嶄綔绯荤粺骞冲彴鐩稿叧鐨勫父閲忋佺被鍨嬨佸畯鍙婂ご鏂囦欢寮曠敤 -----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------- -条件编译常量定义约定: +鏉′欢缂栬瘧甯搁噺瀹氫箟绾﹀畾锛 -(1) Windows操作系统: OS_WINDOWS +(1) Windows鎿嶄綔绯荤粺: OS_WINDOWS -(2) Unix(统称)操作系统: OS_UNIX -(3) Linux操作系统: _OS_UNIX_LINUX_ -(4) True64操作系统: _OS_UNIX_TRUR64_ -(5) Solaris操作系统: _OS_UNIX_SOLARIS_ +(2) Unix(缁熺О)鎿嶄綔绯荤粺: OS_UNIX +(3) Linux鎿嶄綔绯荤粺: _OS_UNIX_LINUX_ +(4) True64鎿嶄綔绯荤粺: _OS_UNIX_TRUR64_ +(5) Solaris鎿嶄綔绯荤粺: _OS_UNIX_SOLARIS_ -(6) 64位操作系统: _OS_64BIT_ +(6) 64浣嶆搷浣滅郴缁: _OS_64BIT_ -(7) Windows字节顺序: _OS_WINDOWS_BYTEORDER_ -(8) Solaris字节顺序: _OS_SOLARIS_BYTEORDER_ +(7) Windows瀛楄妭椤哄簭: _OS_WINDOWS_BYTEORDER_ +(8) Solaris瀛楄妭椤哄簭: _OS_SOLARIS_BYTEORDER_ -[说明]: +[璇存槑]锛 -a. 64位操作系统主要有:DEC True64, solaris(有时可能是32位系统,可以通过测试sizeof - (long)是否=8来判断) +a. 64浣嶆搷浣滅郴缁熶富瑕佹湁锛欴EC True64, solaris(鏈夋椂鍙兘鏄32浣嶇郴缁,鍙互閫氳繃娴嬭瘯sizeof + (long)鏄惁=8鏉ュ垽鏂) -b. windows, linux, true64 等操作系统的字节顺序和solaris相反,因此分别以Windows - 和solaris为代表定义不同的字节顺序 +b. windows, linux, true64 绛夋搷浣滅郴缁熺殑瀛楄妭椤哄簭鍜宻olaris鐩稿弽,鍥犳鍒嗗埆浠indows + 鍜宻olaris涓轰唬琛ㄥ畾涔変笉鍚岀殑瀛楄妭椤哄簭 -c. Unix操作系统种类繁多,每个变种有一定的差别,因此为常见的unix系统每种定义一个 - 条件编译常量 +c. Unix鎿嶄綔绯荤粺绉嶇被绻佸锛屾瘡涓彉绉嶆湁涓瀹氱殑宸埆锛屽洜姝や负甯歌鐨剈nix绯荤粺姣忕瀹氫箟涓涓 + 鏉′欢缂栬瘧甯搁噺 -----------------------------------------------------------------------------*/ #ifndef PLATFORM_DEF_H #define PLATFORM_DEF_H -/*------------------------------------ 头文件引用 --------------------------------*/ +/*------------------------------------ 澶存枃浠跺紩鐢 --------------------------------*/ #ifdef OS_WINDOWS //windows #include @@ -56,7 +56,7 @@ c. Unix #include #include #include - #include //inet地址族的所有结构和常量定义都在这里 + #include //inet鍦板潃鏃忕殑鎵鏈夌粨鏋勫拰甯搁噺瀹氫箟閮藉湪杩欓噷 #include #include // #include @@ -69,12 +69,12 @@ c. Unix #include #include // #include - #include //定义bsd socket的gethostbyname()函数 + #include //瀹氫箟bsd socket鐨刧ethostbyname()鍑芥暟 #endif -/*------------------------------------ 名字定义 --------------------------------*/ +/*------------------------------------ 鍚嶅瓧瀹氫箟 --------------------------------*/ -//全局名字替换名字,为减少移植时大量修改结构及函数名的工作量而设置 +//鍏ㄥ眬鍚嶅瓧鏇挎崲鍚嶅瓧,涓哄噺灏戠Щ妞嶆椂澶ч噺淇敼缁撴瀯鍙婂嚱鏁板悕鐨勫伐浣滈噺鑰岃缃 #ifdef OS_UNIX #define SYSTEMTIME QSYSTEMTIME @@ -85,13 +85,13 @@ c. Unix #define GetPrivateProfileInt QGetPrivateProfileInt #define WritePrivateProfileString QWritePrivateProfileString - #define closesocket close //winsock中关闭socket用closesocket(),而bsd socket中用close() + #define closesocket close //winsock涓叧闂璼ocket鐢╟losesocket(),鑰宐sd socket涓敤close() #define _strdup strdup #define lstrcpyn strncpy #define _getcwd getcwd #endif -/*-------------------------------- 类型定义 ------------------------------------*/ +/*-------------------------------- 绫诲瀷瀹氫箟 ------------------------------------*/ #ifdef OS_UNIX @@ -109,7 +109,7 @@ c. Unix typedef unsigned int u_int; typedef unsigned int UINT; - typedef unsigned int SOCKET; //为编译通过而临时从Winsock.h中提取的类型定义 + typedef unsigned int SOCKET; //涓虹紪璇戦氳繃鑰屼复鏃朵粠Winsock.h涓彁鍙栫殑绫诲瀷瀹氫箟 typedef unsigned long u_long; typedef unsigned long ULONG; @@ -117,36 +117,36 @@ c. Unix #endif #ifdef _OS_64BIT_ - typedef int i_32; //固定长度为4个字节的有符号整数类型 - typedef unsigned int u_32; //固定长度为4个字节的无符号整数类型 + typedef int i_32; //鍥哄畾闀垮害涓4涓瓧鑺傜殑鏈夌鍙锋暣鏁扮被鍨 + typedef unsigned int u_32; //鍥哄畾闀垮害涓4涓瓧鑺傜殑鏃犵鍙锋暣鏁扮被鍨 - typedef long _int64; //Vc中64位整数_int64在64位unix下对应long(8个字节), dnp30.cpp中引用 + typedef long _int64; //Vc涓64浣嶆暣鏁癬int64鍦64浣島nix涓嬪搴攍ong(8涓瓧鑺), dnp30.cpp涓紩鐢 #else typedef long i_32; typedef unsigned long u_32; #ifdef OS_UNIX - typedef int64_t _int64; //Vc中64位整数_int64在32位unix下对应int64_t,在sys/types.h中定义 + typedef int64_t _int64; //Vc涓64浣嶆暣鏁癬int64鍦32浣島nix涓嬪搴攊nt64_t,鍦╯ys/types.h涓畾涔 #endif #endif #ifdef OS_UNIX - typedef u_32 DWORD; //DWORD为固定长度4个字节的无符号整数 + typedef u_32 DWORD; //DWORD涓哄浐瀹氶暱搴4涓瓧鑺傜殑鏃犵鍙锋暣鏁 #endif -/*----------------------------------- 常数定义 ----------------------------------*/ +/*----------------------------------- 甯告暟瀹氫箟 ----------------------------------*/ #ifdef OS_UNIX #define TRUE 1 #define FALSE 0 #define NULL 0 - #define INVALID_SOCKET (SOCKET)(~0) //为编译通过而临时从Winsock.h中提取的类型定义 + #define INVALID_SOCKET (SOCKET)(~0) //涓虹紪璇戦氳繃鑰屼复鏃朵粠Winsock.h涓彁鍙栫殑绫诲瀷瀹氫箟 #define SOCKET_ERROR (-1) #define INADDR_NONE 0xffffffff #endif -/*------------------------------------ 宏定义 -----------------------------------*/ +/*------------------------------------ 瀹忓畾涔 -----------------------------------*/ #ifdef OS_UNIX #define MAKEWORD(a, b) ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8)) diff --git a/scadaprotect.cpp b/scadaprotect.cpp index 28f5449..e87b707 100644 --- a/scadaprotect.cpp +++ b/scadaprotect.cpp @@ -28,19 +28,19 @@ const int gActiveConst = 3; const int gStatusConst = 10; /*! - 组织结构:链路(间隔)+装置 + 缁勭粐缁撴瀯:閾捐矾(闂撮殧)+瑁呯疆 */ const char *gpStrScadaProtectConfigInfo[] = { - "*******斯凯达内部保护规约开始*******", - "模板文件名称=template.csv", - "*******斯凯达内部规约结束*******", - "", // 结束标志(中间不能含有该空字符串) + "*******鏂嚡杈惧唴閮ㄤ繚鎶よ绾﹀紑濮*******", + "妯℃澘鏂囦欢鍚嶇О=template.csv", + "*******鏂嚡杈惧唴閮ㄨ绾︾粨鏉*******", + "", // 缁撴潫鏍囧織(涓棿涓嶈兘鍚湁璇ョ┖瀛楃涓) }; //******************************************************************** -//* 读取配置函数 * -//*参数:int commid : 端口号 * +//* 璇诲彇閰嶇疆鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void ScadaProtectReadConfig(int commid) { @@ -71,7 +71,7 @@ void ScadaProtectReadConfig(int commid) pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo; - // 只有在SioParam[commid].m_psBaoHu非空时,才会运行到这里 + // 鍙湁鍦⊿ioParam[commid].m_psBaoHu闈炵┖鏃讹紝鎵嶄細杩愯鍒拌繖閲 pPortParam->m_psBaoHu = SioParam[commid].m_psBaoHu; iMaxPort = GetMaxPort(); @@ -94,7 +94,7 @@ void ScadaProtectReadConfig(int commid) // sprintf(szSection, "Port%d", commid+1); - strcpy(entry, "模板文件名称"); + strcpy(entry, "妯℃澘鏂囦欢鍚嶇О"); GetPrivateProString(szSection, entry, "template.csv", pPortParam->m_chArrayTempletFileName, sizeof(pPortParam->m_chArrayTempletFileName)-1, szPortConfig); #ifdef OS_LINUX @@ -105,19 +105,19 @@ void ScadaProtectReadConfig(int commid) InitScadaInfoFromTempletFile(commid, pPortParam, szTemplate, FALSE); // wen 2005.06.22 - // 初始化单向链表,链表最大数量为20个 + // 鍒濆鍖栧崟鍚戦摼琛紝閾捐〃鏈澶ф暟閲忎负20涓 //SingleListInit(&pPortParam->m_sBaoHuData, 20); iDevId = commid<<16; SingleListInitEx(&pPortParam->m_sBaoHuData, 20, iDevId); } //******************************************************************** -//* 读取端口数据函数 * -//*参数:int commid : 端口号 * -//* u_char buf : 数据源缓冲区指针 * -//* int len : 数据源长度 * +//* 璇诲彇绔彛鏁版嵁鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * +//* u_char buf : 鏁版嵁婧愮紦鍐插尯鎸囬拡 * +//* int len : 鏁版嵁婧愰暱搴 * //******************************************************************** -void ScadaProtectRecvData(int commid, u_char *buf, int len)// 规约读数据处理 +void ScadaProtectRecvData(int commid, u_char *buf, int len)// 瑙勭害璇绘暟鎹鐞 { int i; PROTECTMSGHEAD sMsgHead; @@ -152,25 +152,25 @@ void ScadaProtectRecvData(int commid, u_char *buf, int len)// else { pPortParam->m_psBaoHu->m_iRevStatus = 50; - // 错误数据增加 + // 閿欒鏁版嵁澧炲姞 //SioParam[commid].ErrMsgNum++; } break; case 6: case 7: case 8: - case 9: // 功能码 + case 9: // 鍔熻兘鐮 case 10: case 11: case 12: - case 13: // 端口号 + case 13: // 绔彛鍙 case 14: case 15: case 16: pPortParam->m_psBaoHu->m_iRevStatus++; pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i]; break; - case 17: // 长 度(长度计算) + case 17: // 闀 搴(闀垮害璁$畻) pPortParam->m_psBaoHu->m_iRevStatus++; pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i]; memcpy((void *)&sMsgHead, pPortParam->m_achRecvBuf+6, sizeof(PROTECTMSGHEAD)); @@ -192,12 +192,12 @@ void ScadaProtectRecvData(int commid, u_char *buf, int len)// pPortParam->m_psBaoHu->m_iNeedRevLength = sMsgHead.MsgLen; } break; - case 18:// 正确接收数据 + case 18:// 姝g‘鎺ユ敹鏁版嵁 pPortParam->m_psBaoHu->m_iNeedRevLength--; pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i]; if(pPortParam->m_psBaoHu->m_iNeedRevLength > 0) { - // wen 2006.04.29 修改数据缺少后的数据同步 + // wen 2006.04.29 淇敼鏁版嵁缂哄皯鍚庣殑鏁版嵁鍚屾 if(buf[i] == 0x90) { if(pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen-2] == (char)0xeb) @@ -223,12 +223,12 @@ void ScadaProtectRecvData(int commid, u_char *buf, int len)// //pPortParam->m_iRecvLen = 0; break; - case 19:// 错误接收数据 + case 19:// 閿欒鎺ユ敹鏁版嵁 default: if(buf[i] == 0xEB) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, @@ -238,7 +238,7 @@ void ScadaProtectRecvData(int commid, u_char *buf, int len)// ScadaProtectProcessData(commid, pPortParam, FALSE); SioParam[commid].ErrMsgNum += pPortParam->m_iRecvLen; - // 从状态1开始 + // 浠庣姸鎬1寮濮 pPortParam->m_achRecvBuf[0] = buf[i]; pPortParam->m_psBaoHu->m_iRevStatus = 1; pPortParam->m_iRecvLen = 1; @@ -249,7 +249,7 @@ void ScadaProtectRecvData(int commid, u_char *buf, int len)// if(pPortParam->m_iRecvLen > 200) { #ifndef OS_LINUX - // wen 2004.11.22 增加显示 + // wen 2004.11.22 澧炲姞鏄剧ず if((GetCurPort() == commid) && IsRealDataDisp()) { WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA, @@ -274,8 +274,8 @@ void ScadaProtectRecvData(int commid, u_char *buf, int len)// } //******************************************************************** -//* 定时器处理函数 * -//*参数:int commid : 端口号 * +//* 瀹氭椂鍣ㄥ鐞嗗嚱鏁 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void ScadaProtectTimer(int commid) { @@ -297,16 +297,16 @@ void ScadaProtectTimer(int commid) ReduceTimeOut(pPortParam); - //1. 发送定值数据,保护模拟量,保护开关量 + //1. 鍙戦佸畾鍊兼暟鎹紝淇濇姢妯℃嫙閲忥紝淇濇姢寮鍏抽噺 if(SingleListHaveData(&pPortParam->m_sBaoHuData) > 0) { - // wen 2006.05.11 将整个RTUMSG结构压入列表 + // wen 2006.05.11 灏嗘暣涓猂TUMSG缁撴瀯鍘嬪叆鍒楄〃 //rtumsg.MsgLen = SingleListGetAndDelData(&pPortParam->m_sBaoHuData, rtumsg.MsgData, sizeof(rtumsg.MsgData)); rtumsg.MsgLen = SingleListGetAndDelData(&pPortParam->m_sBaoHuData, (BYTE *)&rtumsg, sizeof(RTUMSG)); rtumsg.MsgLen -= sizeof(RTUMSGHEAD); if(rtumsg.MsgLen > 0) { - // wen 2006.05.11 在此将繁忙标识清空 + // wen 2006.05.11 鍦ㄦ灏嗙箒蹇欐爣璇嗘竻绌 if((rtumsg.PortIdx >= 0) && (rtumsg.PortIdx < GetMaxPort())) { sPortStatus.bPortIdle = TRUE; @@ -320,7 +320,7 @@ void ScadaProtectTimer(int commid) } } - //2. 发送soe数据,保护事件 + //2. 鍙戦乻oe鏁版嵁锛屼繚鎶や簨浠 if(ProvHaveSoeData(commid) > 0) { //printf("scadaprotect have soe data.\n"); @@ -330,7 +330,7 @@ void ScadaProtectTimer(int commid) } } - //3. 定时发送网络活动包和通道状态 + //3. 瀹氭椂鍙戦佺綉缁滄椿鍔ㄥ寘鍜岄氶亾鐘舵 if(pPortParam->m_iActiveTimeConst > 0) { pPortParam->m_iActiveTimeCnt++; @@ -355,31 +355,31 @@ void ScadaProtectTimer(int commid) } //******************************************************************** -//* 遥控遥调数据处理函数 * -//*参数:int commid : 端口号 * -//* u_char buf : 数据源缓冲区指针 * -//* int len : 数据源长度 * +//* 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * +//* u_char buf : 鏁版嵁婧愮紦鍐插尯鎸囬拡 * +//* int len : 鏁版嵁婧愰暱搴 * //******************************************************************** -void ScadaProtectYkYtProcess(int commid, u_char *buf, int len) // 遥控遥调处理 +void ScadaProtectYkYtProcess(int commid, u_char *buf, int len) // 閬ユ帶閬ヨ皟澶勭悊 { int portno, ykytpnt; int iDirect; //SCADAPROTECTPORTPARAM *pPortParam; - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分) - // (最高位为1时,为返校命令, 1=控合, 2=控分, 3=失败) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠, 1=鎺у悎, 2=鎺у垎, 3=澶辫触) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 if(IsExtInfoPtr(commid) == FALSE) { @@ -392,8 +392,8 @@ void ScadaProtectYkYtProcess(int commid, u_char *buf, int len) // 遥 } //******************************************************************** -//* 系统退出时规约处理函数 * -//*参数:int commid : 端口号 * +//* 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 * +//*鍙傛暟锛歩nt commid : 绔彛鍙 * //******************************************************************** void ScadaProtectExit(int commid) { @@ -420,7 +420,7 @@ void ScadaProtectExit(int commid) SingleListDelData(&pPortParam->m_sBaoHuData); } -// 该函数用来驱动由转发端口下发到实际装置的保护命令 +// 璇ュ嚱鏁扮敤鏉ラ┍鍔ㄧ敱杞彂绔彛涓嬪彂鍒板疄闄呰缃殑淇濇姢鍛戒护 void ScadaProtectBaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) { //char szDbg[128]; @@ -429,13 +429,13 @@ void ScadaProtectBaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData) SCADAPROTECTPORTPARAM *pPortParam; pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo; - // 上行数据 + // 涓婅鏁版嵁 if(MSGTYPE_BAOHU_SCADADATA == rtumsg->MsgType) //if(bUpData == TRUE) { if(pPortParam->m_psProvDev != NULL) { - // wen 2006.05.11 将整个RTUMSG结构压入列表 + // wen 2006.05.11 灏嗘暣涓猂TUMSG缁撴瀯鍘嬪叆鍒楄〃 //SingleListAddData(&pPortParam->m_sBaoHuData, rtumsg->MsgData, rtumsg->MsgLen); SingleListAddData(&pPortParam->m_sBaoHuData, (BYTE *)rtumsg, rtumsg->MsgLen+sizeof(RTUMSGHEAD)); } @@ -447,9 +447,9 @@ int ScadaProtectGetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB { return 0; } -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// -///////////////////////////以下为配置函数接口/////////////////////////// +///////////////////////////浠ヤ笅涓洪厤缃嚱鏁版帴鍙/////////////////////////// BOOL InitScadaInfoFromTempletFile(int commid, SCADAPROTECTPORTPARAM *psPortParam,\ char *ptrTemplate, BOOL bMaster) { @@ -482,12 +482,12 @@ BOOL InitScadaInfoFromTempletFile(int commid, SCADAPROTECTPORTPARAM *psPortParam // test //DebugPrint(szBuf); - if(strstr(ptr, "链路描述") != NULL) + if(strstr(ptr, "閾捐矾鎻忚堪") != NULL) { - //处理链路参数 + //澶勭悊閾捐矾鍙傛暟 ParamType = PARAM_LINK; } - else if(strstr(ptr, "设备描述") != NULL) + else if(strstr(ptr, "璁惧鎻忚堪") != NULL) { ParamType = PARAM_DEV; } @@ -567,38 +567,38 @@ BOOL GetProvDevNumFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTP switch(i) { - case 0:// 链路描述 + case 0:// 閾捐矾鎻忚堪 break; - case 1:// 链路标识 + case 1:// 閾捐矾鏍囪瘑 break; - case 2:// 链路地址 + case 2:// 閾捐矾鍦板潃 break; - case 3:// 装置数量 + case 3:// 瑁呯疆鏁伴噺 if(ilen > 0) { psPortParam->m_iDevNum = atoi(ptrSour); bRetVal = TRUE; } break; - case 4:// 备用 + case 4:// 澶囩敤 break; - case 5:// 备用 + case 5:// 澶囩敤 break; - case 6:// 地址偏移 + case 6:// 鍦板潃鍋忕Щ break; - case 7:// 数据类型 + case 7:// 鏁版嵁绫诲瀷 break; - case 8:// 写入数据库站号 + case 8:// 鍐欏叆鏁版嵁搴撶珯鍙 break; - case 9:// 写入数据库起始点号 + case 9:// 鍐欏叆鏁版嵁搴撹捣濮嬬偣鍙 break; - case 10:// 是否判断ASDU号 + case 10:// 鏄惁鍒ゆ柇ASDU鍙 break; - case 11:// 是否处理扰动数据 + case 11:// 鏄惁澶勭悊鎵板姩鏁版嵁 break; - case 12:// 是否屏蔽未配置事件 + case 12:// 鏄惁灞忚斀鏈厤缃簨浠 break; - case 13:// 一类数据问询次数(该项不可达,在循环外处理) + case 13:// 涓绫绘暟鎹棶璇㈡鏁(璇ラ」涓嶅彲杈撅紝鍦ㄥ惊鐜澶勭悊) break; } ptrSour = ptrDest+1; @@ -634,7 +634,7 @@ BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTEC // test //DebugPrint(szBuf); - if(strstr(ptr, "设备描述") != NULL) + if(strstr(ptr, "璁惧鎻忚堪") != NULL) { i++; iAiNum = 0; @@ -642,7 +642,7 @@ BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTEC continue; } - if(strstr(ptr, "链路描述") != NULL) + if(strstr(ptr, "閾捐矾鎻忚堪") != NULL) { break; } @@ -660,13 +660,13 @@ BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTEC switch(j) { - case 0:// 设备描述 + case 0:// 璁惧鎻忚堪 break; - case 1:// 设备型号 + case 1:// 璁惧鍨嬪彿 break; - case 2:// 设备地址 + case 2:// 璁惧鍦板潃 break; - case 3:// 转发地址 + case 3:// 杞彂鍦板潃 if(PARAM_NO != ParamType) { break; @@ -676,7 +676,7 @@ BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTEC psPortParam->m_psProvDev[i].m_iProvAddr = atoi(ptrSour); } break; - case 4:// 端口号&状态站号&状态点号 + case 4:// 绔彛鍙&鐘舵佺珯鍙&鐘舵佺偣鍙 if(PARAM_NO != ParamType) { break; @@ -708,15 +708,15 @@ BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTEC } } break; - case 5:// 备用 + case 5:// 澶囩敤 break; - case 6:// 数量 + case 6:// 鏁伴噺 if(ilen > 0) { iNum = atoi(ptrSour); } break; - case 7:// 数据类型 + case 7:// 鏁版嵁绫诲瀷 if(iNum <= 0) { break; @@ -838,33 +838,33 @@ int FindProtectDevFromPntNoScada(SCADAPROTECTPORTPARAM *psPortParam, int iPntNo, return i; } } -/////////////////////////////配置函数接口结束/////////////////////////// +/////////////////////////////閰嶇疆鍑芥暟鎺ュ彛缁撴潫/////////////////////////// void ScadaProtectProvMakeYkYtCommand(int commid, u_char *buf, int len) { - // buf[0] --- 端口号(=commid) + // buf[0] --- 绔彛鍙(=commid) // buf[1] // buf[2] // buf[3] - // buf[4] --- 控点号 + // buf[4] --- 鎺х偣鍙 // buf[5] // buf[6] // buf[7] - // buf[8] --- 操作类型(遥控:1=选择,2=执行,3=取消,7=直控; - // 遥调:4=选择,5=执行,6=取消,8=急停) - // buf[9] --- 控制状态(1=分到合,2=合到分, 0=失败) - // (最高位为1时,为返校命令) - // 在转发遥控数据点中,只保留了要转发的控点号,实际的端口号应该是该转发点的端口 - // 该转发点并没有指定虚拟的转发控点,则控点和转发点的点号一致。 + // buf[8] --- 鎿嶄綔绫诲瀷(閬ユ帶:1=閫夋嫨,2=鎵ц,3=鍙栨秷,7=鐩存帶; + // 閬ヨ皟:4=閫夋嫨,5=鎵ц,6=鍙栨秷,8=鎬ュ仠) + // buf[9] --- 鎺у埗鐘舵(1=鍒嗗埌鍚堬紝2=鍚堝埌鍒, 0=澶辫触) + // (鏈楂樹綅涓1鏃讹紝涓鸿繑鏍″懡浠) + // 鍦ㄨ浆鍙戦仴鎺ф暟鎹偣涓紝鍙繚鐣欎簡瑕佽浆鍙戠殑鎺х偣鍙凤紝瀹為檯鐨勭鍙e彿搴旇鏄杞彂鐐圭殑绔彛 + // 璇ヨ浆鍙戠偣骞舵病鏈夋寚瀹氳櫄鎷熺殑杞彂鎺х偣锛屽垯鎺х偣鍜岃浆鍙戠偣鐨勭偣鍙蜂竴鑷淬 } -///////////////////////以下为规约处理函数接口/////////////////////////// +///////////////////////浠ヤ笅涓鸿绾﹀鐞嗗嚱鏁版帴鍙/////////////////////////// //*******************************************************************************/ -//* 将客户端到前置机所有的报文从网络字节顺序转换成主机字节顺序函数 */ -//*参数:RTUMSG* hostmsg:转换后的主机字节顺序报文 */ -//* ORTUMSG* userdata:转换前的网络字节顺序报文 */ -//*返回值:无 */ +//* 灏嗗鎴风鍒板墠缃満鎵鏈夌殑鎶ユ枃浠庣綉缁滃瓧鑺傞『搴忚浆鎹㈡垚涓绘満瀛楄妭椤哄簭鍑芥暟 */ +//*鍙傛暟锛歊TUMSG* hostmsg:杞崲鍚庣殑涓绘満瀛楄妭椤哄簭鎶ユ枃 */ +//* ORTUMSG* userdata:杞崲鍓嶇殑缃戠粶瀛楄妭椤哄簭鎶ユ枃 */ +//*杩斿洖鍊硷細鏃 */ //*******************************************************************************/ void AllNetToHostByteSequence(PROTECTMSG *userdata) { @@ -879,62 +879,62 @@ void AllNetToHostByteSequence(PROTECTMSG *userdata) SequenceNetToHost((char *)&userdata->MsgLen, sizeof(u_32)); switch(userdata->MsgType) { - case pPFV_PROTECT_BYPASS://保护机到前置机保护数据 + case pPFV_PROTECT_BYPASS://淇濇姢鏈哄埌鍓嶇疆鏈轰繚鎶ゆ暟鎹 ptrContent = (pPROTECTCONTENTHEAD)(userdata->MsgData); - //转换保护地址 + //杞崲淇濇姢鍦板潃 SequenceNetToHost((char *)&ptrContent->uAddr, sizeof(u_32)); - //转换保护操作功能码 + //杞崲淇濇姢鎿嶄綔鍔熻兘鐮 SequenceNetToHost((char *)&ptrContent->uFuncCode, sizeof(u_32)); - //操作用户 + //鎿嶄綔鐢ㄦ埛 SequenceNetToHost((char *)&ptrContent->ummid, sizeof(u_32)); - //保留字节 + //淇濈暀瀛楄妭 SequenceNetToHost((char *)&ptrContent->uReserved, sizeof(u_32)); - //定值区号 + //瀹氬煎尯鍙 //ptrContent->cFixNo; - //CPU 号 + //CPU 鍙 //ptrContent->cCPUNo; iOffset = sizeof(PROTECTCONTENTHEAD); switch(ptrContent->uFuncCode) { - case hREADFIX://读取定值 - case hREADPAI:// 读取保护模拟量 - case hREADPDI:// 读取保护开关量 - case hQUERYFAULT:// 读取指定故障报告 - case hQUERYSELFCHECK:// 读取指定的自检报告 + case hREADFIX://璇诲彇瀹氬 + case hREADPAI:// 璇诲彇淇濇姢妯℃嫙閲 + case hREADPDI:// 璇诲彇淇濇姢寮鍏抽噺 + case hQUERYFAULT:// 璇诲彇鎸囧畾鏁呴殰鎶ュ憡 + case hQUERYSELFCHECK:// 璇诲彇鎸囧畾鐨勮嚜妫鎶ュ憡 break; - case hREADFIXNO://读取定值区号 - case hREADPWAVE:// 读取保护波形数据 + case hREADFIXNO://璇诲彇瀹氬煎尯鍙 + case hREADPWAVE:// 璇诲彇淇濇姢娉㈠舰鏁版嵁 break; - case hWRITEALLFIX:// 修改保护定值 - // 起始序号 + case hWRITEALLFIX:// 淇敼淇濇姢瀹氬 + // 璧峰搴忓彿 SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(u_32)); iOffset += sizeof(u_32); for(; iOffsetMsgLen;) { - // 数据类型 + // 鏁版嵁绫诲瀷 switch(userdata->MsgData[iOffset++] & 0x7F) { case DATATYPE_AI: - // 数据值长度(占用位数) + // 鏁版嵁鍊奸暱搴(鍗犵敤浣嶆暟) iOffset++; - // 数值 + // 鏁板 SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float)); iOffset += sizeof(float); break; case DATATYPE_DI: - // 数据值长度(占用位数) + // 鏁版嵁鍊奸暱搴(鍗犵敤浣嶆暟) iOffset++; SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float)); iOffset += sizeof(float); break; case DATATYPE_STRING: - // 数据值长度(占用字节数) - // 数值 + // 鏁版嵁鍊奸暱搴(鍗犵敤瀛楄妭鏁) + // 鏁板 iOffset += userdata->MsgData[iOffset] + 1; break; default: #ifdef _DEBUG_MSG_ - sprintf(szbuf, "保护机下发写定值报文格式有错误,无效的数据类型"); + sprintf(szbuf, "淇濇姢鏈轰笅鍙戝啓瀹氬兼姤鏂囨牸寮忔湁閿欒锛屾棤鏁堢殑鏁版嵁绫诲瀷"); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -942,36 +942,36 @@ void AllNetToHostByteSequence(PROTECTMSG *userdata) } } break; - case hWRITESPECIALFIX:// 修改指定的保护定值 + case hWRITESPECIALFIX:// 淇敼鎸囧畾鐨勪繚鎶ゅ畾鍊 for(;iOffsetMsgLen;) { - // 定值序号 + // 瀹氬煎簭鍙 SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(u_32)); iOffset += sizeof(u_32); - // 数据类型 + // 鏁版嵁绫诲瀷 switch(userdata->MsgData[iOffset++] & 0x7F) { case DATATYPE_AI: - // 数据值长度(占用位数) + // 鏁版嵁鍊奸暱搴(鍗犵敤浣嶆暟) iOffset++; - // 数值 + // 鏁板 SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float)); iOffset += sizeof(float); break; case DATATYPE_DI: - // 数据值长度(占用位数) + // 鏁版嵁鍊奸暱搴(鍗犵敤浣嶆暟) iOffset++; SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float)); iOffset += sizeof(float); break; case DATATYPE_STRING: - // 数据值长度(占用字节数) - // 数值 + // 鏁版嵁鍊奸暱搴(鍗犵敤瀛楄妭鏁) + // 鏁板 iOffset += userdata->MsgData[iOffset] + 1; break; default: #ifdef _DEBUG_MSG_ - sprintf(szbuf, "保护机下发写指定定值报文格式有错误,无效的数据类型"); + sprintf(szbuf, "淇濇姢鏈轰笅鍙戝啓鎸囧畾瀹氬兼姤鏂囨牸寮忔湁閿欒锛屾棤鏁堢殑鏁版嵁绫诲瀷"); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -979,19 +979,19 @@ void AllNetToHostByteSequence(PROTECTMSG *userdata) } } break; - case hWRITEFIXNO:// 修改保护定值区 + case hWRITEFIXNO:// 淇敼淇濇姢瀹氬煎尯 break; - case hRESETPROTECT:// 保护信号复归 + case hRESETPROTECT:// 淇濇姢淇″彿澶嶅綊 break; - case hCHECKTIME:// 单个装置对时 + case hCHECKTIME:// 鍗曚釜瑁呯疆瀵规椂 break; - case hBROADCASTCHECKTIME:// 保护装置广播对时 + case hBROADCASTCHECKTIME:// 淇濇姢瑁呯疆骞挎挱瀵规椂 break; - case hCANCEL:// 保护操作取消 + case hCANCEL:// 淇濇姢鎿嶄綔鍙栨秷 break; } break; - case fPFV_NETACTIVE://网络测试包 + case fPFV_NETACTIVE://缃戠粶娴嬭瘯鍖 break; default: break; @@ -999,10 +999,10 @@ void AllNetToHostByteSequence(PROTECTMSG *userdata) } //*******************************************************************************/ -//* 将前置机到客户机所有的报文从主机字节顺序转换成网络字节顺序函数 */ -//*参数:RTUMSG* userdata:转换前的主机字节顺序报文 */ -//* ORTUMSG* hostmsg:转换后的网络字节顺序报文 */ -//*返回值:无 */ +//* 灏嗗墠缃満鍒板鎴锋満鎵鏈夌殑鎶ユ枃浠庝富鏈哄瓧鑺傞『搴忚浆鎹㈡垚缃戠粶瀛楄妭椤哄簭鍑芥暟 */ +//*鍙傛暟锛歊TUMSG* userdata:杞崲鍓嶇殑涓绘満瀛楄妭椤哄簭鎶ユ枃 */ +//* ORTUMSG* hostmsg:杞崲鍚庣殑缃戠粶瀛楄妭椤哄簭鎶ユ枃 */ +//*杩斿洖鍊硷細鏃 */ //*******************************************************************************/ void AllHostToNetByteSequence(PROTECTMSG *userdata) { @@ -1022,40 +1022,40 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) switch(msgtype) { - case fPFV_PROTECT_BYPASS_ACK://前置机到保护机保护数据 + case fPFV_PROTECT_BYPASS_ACK://鍓嶇疆鏈哄埌淇濇姢鏈轰繚鎶ゆ暟鎹 ptrContent = (pPROTECTCONTENTHEAD)(userdata->MsgData); uFuncCode = ptrContent->uFuncCode; - //转换保护地址 + //杞崲淇濇姢鍦板潃 SequenceHostToNet((char *)&ptrContent->uAddr, sizeof(u_32)); - //转换保护操作功能码 + //杞崲淇濇姢鎿嶄綔鍔熻兘鐮 SequenceHostToNet((char *)&ptrContent->uFuncCode, sizeof(u_32)); - //操作用户 + //鎿嶄綔鐢ㄦ埛 SequenceHostToNet((char *)&ptrContent->ummid, sizeof(u_32)); - //保留字节 + //淇濈暀瀛楄妭 SequenceHostToNet((char *)&ptrContent->uReserved, sizeof(u_32)); - //定值区号 + //瀹氬煎尯鍙 //ptrContent->cFixNo; - //CPU 号 + //CPU 鍙 //ptrContent->cCPUNo; iOffset = sizeof(PROTECTCONTENTHEAD); switch(uFuncCode) { - case hREADINGDATA:// 数据申请中 + case hREADINGDATA:// 鏁版嵁鐢宠涓 break; - case hFIXDATAWITHNO:// 定值数据带序号 - // 定值类型 + case hFIXDATAWITHNO:// 瀹氬兼暟鎹甫搴忓彿 + // 瀹氬肩被鍨 datatype = userdata->MsgData[iOffset++]; for(;iOffsetMsgData[iOffset], sizeof(WORD)); @@ -1064,11 +1064,11 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } - // 定值数据类型 + // 瀹氬兼暟鎹被鍨 switch(userdata->MsgData[iOffset] & 0x7F) { case DATATYPE_AI: @@ -1082,15 +1082,15 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } break; case DATATYPE_STRING: iOffset++; - // 数据长度(占用字节数) - // 数值 + // 鏁版嵁闀垮害(鍗犵敤瀛楄妭鏁) + // 鏁板 if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE) { iOffset += userdata->MsgData[iOffset] + 1; @@ -1098,7 +1098,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } @@ -1108,11 +1108,11 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) return; } break; - case ITEM_ATTR_UNIT:// 量 纲 - case ITEM_ATTR_DESCRIPTION:// 描 述 - // 数据长度(占用字节数) + case ITEM_ATTR_UNIT:// 閲 绾 + case ITEM_ATTR_DESCRIPTION:// 鎻 杩 + // 鏁版嵁闀垮害(鍗犵敤瀛楄妭鏁) //userdata->MsgData[iOffset]; - // 数值 + // 鏁板 if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE) { iOffset += userdata->MsgData[iOffset] + 1; @@ -1120,33 +1120,33 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } break; - case ITEM_ATTR_RATE:// 参 比 - case ITEM_ATTR_LIST:// 列 表 + case ITEM_ATTR_RATE:// 鍙 姣 + case ITEM_ATTR_LIST:// 鍒 琛 default: iOffset = uDataLen; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "保护机上行读取定值报文格式有错误,无效的数据类型"); + sprintf(szbuf, "淇濇姢鏈轰笂琛岃鍙栧畾鍊兼姤鏂囨牸寮忔湁閿欒锛屾棤鏁堢殑鏁版嵁绫诲瀷"); DebugPrint(szbuf); #endif break; } } break; - case hPAIDATAWITHNO: // 保护模拟量数据带序号 + case hPAIDATAWITHNO: // 淇濇姢妯℃嫙閲忔暟鎹甫搴忓彿 break; - case hPDIDATAWITHNO: // 保护开关量数据带序号 + case hPDIDATAWITHNO: // 淇濇姢寮鍏抽噺鏁版嵁甯﹀簭鍙 break; - case hFIXDATA:// 定值数据 - // 定值类型 + case hFIXDATA:// 瀹氬兼暟鎹 + // 瀹氬肩被鍨 datatype = userdata->MsgData[iOffset++]; - // 起始序号 + // 璧峰搴忓彿 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1155,7 +1155,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } @@ -1164,18 +1164,18 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) { switch(datatype) { - case ITEM_ATTR_REALVALUE:// 实际值 - case ITEM_ATTR_DEFAULTVALUE:// 缺省值 - case ITEM_ATTR_MINMAXSTEP:// 量 程 - case ITEM_ATTR_PRECISION:// 精 度 - case ITEM_ATTR_FIGURE:// 因 子 - // 定值数据类型 + case ITEM_ATTR_REALVALUE:// 瀹為檯鍊 + case ITEM_ATTR_DEFAULTVALUE:// 缂虹渷鍊 + case ITEM_ATTR_MINMAXSTEP:// 閲 绋 + case ITEM_ATTR_PRECISION:// 绮 搴 + case ITEM_ATTR_FIGURE:// 鍥 瀛 + // 瀹氬兼暟鎹被鍨 switch(userdata->MsgData[iOffset] & 0x7F) { case DATATYPE_AI: case DATATYPE_DI: iOffset++; - // 数值 + // 鏁板 if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float)); @@ -1184,7 +1184,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } @@ -1192,8 +1192,8 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) break; case DATATYPE_STRING: iOffset++; - // 数据长度(占用字节数) - // 数值 + // 鏁版嵁闀垮害(鍗犵敤瀛楄妭鏁) + // 鏁板 if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE) { iOffset += userdata->MsgData[iOffset] + 1; @@ -1201,7 +1201,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } @@ -1212,10 +1212,10 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) return; } break; - case ITEM_ATTR_UNIT:// 量 纲 - case ITEM_ATTR_DESCRIPTION:// 描 述 - // 数据长度(占用字节数) - // 数值 + case ITEM_ATTR_UNIT:// 閲 绾 + case ITEM_ATTR_DESCRIPTION:// 鎻 杩 + // 鏁版嵁闀垮害(鍗犵敤瀛楄妭鏁) + // 鏁板 if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE) { iOffset += userdata->MsgData[iOffset] + 1; @@ -1223,37 +1223,37 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif } break; - case ITEM_ATTR_RATE:// 参 比 - case ITEM_ATTR_LIST:// 列 表 + case ITEM_ATTR_RATE:// 鍙 姣 + case ITEM_ATTR_LIST:// 鍒 琛 default: iOffset = uDataLen; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "保护机上行读取定值报文格式有错误,无效的数据类型"); + sprintf(szbuf, "淇濇姢鏈轰笂琛岃鍙栧畾鍊兼姤鏂囨牸寮忔湁閿欒锛屾棤鏁堢殑鏁版嵁绫诲瀷"); DebugPrint(szbuf); #endif break; } } break; - case hREADDATAEND:// 数据申请结束 + case hREADDATAEND:// 鏁版嵁鐢宠缁撴潫 break; - case hNORESPONSE:// 数据申请无响应 + case hNORESPONSE:// 鏁版嵁鐢宠鏃犲搷搴 break; - case hSYSTEMBUSY:// 数据处理繁忙,稍后重试 + case hSYSTEMBUSY:// 鏁版嵁澶勭悊绻佸繖锛岀◢鍚庨噸璇 break; - case hFIXNODATA:// 定值区号数据 + case hFIXNODATA:// 瀹氬煎尯鍙锋暟鎹 break; - case hPAIDATA:// 保护模拟量数据 - // 模拟量类型 + case hPAIDATA:// 淇濇姢妯℃嫙閲忔暟鎹 + // 妯℃嫙閲忕被鍨 datatype = userdata->MsgData[iOffset++]; - // 起始序号 + // 璧峰搴忓彿 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1262,7 +1262,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1273,12 +1273,12 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) { switch(datatype) { - case ITEM_ATTR_REALVALUE:// 实际值 - case ITEM_ATTR_DEFAULTVALUE:// 缺省值 - case ITEM_ATTR_MINMAXSTEP:// 量 程 - case ITEM_ATTR_PRECISION:// 精 度 - case ITEM_ATTR_FIGURE:// 因 子 - // 数值 + case ITEM_ATTR_REALVALUE:// 瀹為檯鍊 + case ITEM_ATTR_DEFAULTVALUE:// 缂虹渷鍊 + case ITEM_ATTR_MINMAXSTEP:// 閲 绋 + case ITEM_ATTR_PRECISION:// 绮 搴 + case ITEM_ATTR_FIGURE:// 鍥 瀛 + // 鏁板 if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float)); @@ -1287,16 +1287,16 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; } break; - case ITEM_ATTR_UNIT:// 量 纲 - case ITEM_ATTR_DESCRIPTION:// 描 述 - // 数据长度(占用字节数) - // 数值 + case ITEM_ATTR_UNIT:// 閲 绾 + case ITEM_ATTR_DESCRIPTION:// 鎻 杩 + // 鏁版嵁闀垮害(鍗犵敤瀛楄妭鏁) + // 鏁板 if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE) { iOffset += userdata->MsgData[iOffset] + 1; @@ -1304,18 +1304,18 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; } break; - case ITEM_ATTR_RATE:// 参 比 - case ITEM_ATTR_LIST:// 列 表 + case ITEM_ATTR_RATE:// 鍙 姣 + case ITEM_ATTR_LIST:// 鍒 琛 default: iOffset = uDataLen; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "保护机上行读取保护模拟量报文格式有错误,无效的数据类型"); + sprintf(szbuf, "淇濇姢鏈轰笂琛岃鍙栦繚鎶ゆā鎷熼噺鎶ユ枃鏍煎紡鏈夐敊璇紝鏃犳晥鐨勬暟鎹被鍨"); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1323,11 +1323,11 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) } } break; - case hPDIDATA:// 保护开关量数据 - // 开关量类型 + case hPDIDATA:// 淇濇姢寮鍏抽噺鏁版嵁 + // 寮鍏抽噺绫诲瀷 datatype = userdata->MsgData[iOffset++]; - // 起始序号 + // 璧峰搴忓彿 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1336,7 +1336,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1347,15 +1347,15 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) { switch(datatype) { - case ITEM_ATTR_REALVALUE:// 实际值 - case ITEM_ATTR_DEFAULTVALUE:// 缺省值 - // 数值 + case ITEM_ATTR_REALVALUE:// 瀹為檯鍊 + case ITEM_ATTR_DEFAULTVALUE:// 缂虹渷鍊 + // 鏁板 iOffset++; break; - case ITEM_ATTR_UNIT:// 量 纲 - case ITEM_ATTR_DESCRIPTION:// 描 述 - // 数据长度(占用字节数) - // 数值 + case ITEM_ATTR_UNIT:// 閲 绾 + case ITEM_ATTR_DESCRIPTION:// 鎻 杩 + // 鏁版嵁闀垮害(鍗犵敤瀛楄妭鏁) + // 鏁板 if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE) { iOffset += userdata->MsgData[iOffset] + 1; @@ -1365,15 +1365,15 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) userdata->MsgLen = 0; } break; - case ITEM_ATTR_MINMAXSTEP:// 量 程 - case ITEM_ATTR_PRECISION:// 精 度 - case ITEM_ATTR_FIGURE:// 因 子 - case ITEM_ATTR_RATE:// 参 比 - case ITEM_ATTR_LIST:// 列 表 + case ITEM_ATTR_MINMAXSTEP:// 閲 绋 + case ITEM_ATTR_PRECISION:// 绮 搴 + case ITEM_ATTR_FIGURE:// 鍥 瀛 + case ITEM_ATTR_RATE:// 鍙 姣 + case ITEM_ATTR_LIST:// 鍒 琛 default: iOffset = uDataLen; #ifdef _DEBUG_MSG_ - sprintf(szbuf, "保护机上行读取保护开关量报文格式有错误,无效的数据类型"); + sprintf(szbuf, "淇濇姢鏈轰笂琛岃鍙栦繚鎶ゅ紑鍏抽噺鎶ユ枃鏍煎紡鏈夐敊璇紝鏃犳晥鐨勬暟鎹被鍨"); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1381,11 +1381,11 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) } } break; - case hPWAVEDATASTART:// 保护波行数据上送开始 + case hPWAVEDATASTART:// 淇濇姢娉㈣鏁版嵁涓婇佸紑濮 break; - case hPWAVEDATA:// 保护波行数据 + case hPWAVEDATA:// 淇濇姢娉㈣鏁版嵁 /* - //起始序号 + //璧峰搴忓彿 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1394,13 +1394,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //采样个数 + //閲囨牱涓暟 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1409,13 +1409,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换年 + //杞崲骞 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(WORD)); @@ -1424,13 +1424,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换月 + //杞崲鏈 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(WORD)); @@ -1439,13 +1439,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换日 + //杞崲鏃 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1454,13 +1454,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换时 + //杞崲鏃 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1469,14 +1469,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换分 + //杞崲鍒 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1485,13 +1485,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换秒 + //杞崲绉 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1500,14 +1500,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换微秒 + //杞崲寰 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1516,13 +1516,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //采样时间间隔 + //閲囨牱鏃堕棿闂撮殧 if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float)); @@ -1531,7 +1531,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1540,7 +1540,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) for(;iOffsetMsgData[iOffset], sizeof(float)); @@ -1549,7 +1549,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1559,10 +1559,10 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) } */ break; - case hPWAVEDATAEND:// 保护波行数据上送结束 + case hPWAVEDATAEND:// 淇濇姢娉㈣鏁版嵁涓婇佺粨鏉 break; - case hPEVENTDATAWITHID:// 带索引号的事件报告数据 - //转换年 + case hPEVENTDATAWITHID:// 甯︾储寮曞彿鐨勪簨浠舵姤鍛婃暟鎹 + //杞崲骞 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1571,14 +1571,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换月 + //杞崲鏈 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1587,14 +1587,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换日 + //杞崲鏃 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1603,14 +1603,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换时 + //杞崲鏃 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1619,14 +1619,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换分 + //杞崲鍒 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1635,14 +1635,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换秒 + //杞崲绉 if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short)); @@ -1651,14 +1651,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //转换微秒 + //杞崲寰 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1667,7 +1667,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1676,7 +1676,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) for(;iOffsetMsgData[iOffset], sizeof(u_short)); @@ -1685,14 +1685,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //备注长度 + //澶囨敞闀垮害 if(userdata->MsgData[iOffset] > 0) { iOffset += userdata->MsgData[iOffset]+1; @@ -1703,10 +1703,10 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) } } break; - case hPEVENTDATAWITHSTRING:// 字符串事件报告数据 + case hPEVENTDATAWITHSTRING:// 瀛楃涓蹭簨浠舵姤鍛婃暟鎹 for(; iOffsetMsgData[iOffset]; if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE) { @@ -1716,13 +1716,13 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //字符串 + //瀛楃涓 if((iOffset + u_shortLen) < MAX_RTU_MSG_SIZE) { iOffset += u_shortLen; @@ -1730,7 +1730,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset + u_shortLen); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset + u_shortLen); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1738,21 +1738,21 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) } } break; - case hWRITEFIXACK:// 保护定值确认 + case hWRITEFIXACK:// 淇濇姢瀹氬肩‘璁 break; - case hWRITEFIXNAK:// 保护定值不确认 + case hWRITEFIXNAK:// 淇濇姢瀹氬间笉纭 break; - case hWRITEFIXNOACK:// 定值区修改确认 + case hWRITEFIXNOACK:// 瀹氬煎尯淇敼纭 break; - case hWRITEFIXNONAK:// 定值区修改不确认 + case hWRITEFIXNONAK:// 瀹氬煎尯淇敼涓嶇‘璁 break; } break; - case fPFV_NETACTIVE://网络测试包 + case fPFV_NETACTIVE://缃戠粶娴嬭瘯鍖 break; - case fPFV_STATUS://前置机状态包 + case fPFV_STATUS://鍓嶇疆鏈虹姸鎬佸寘 iOffset = 0; - //前置机A状态 + //鍓嶇疆鏈篈鐘舵 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1761,14 +1761,14 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; break; } - //前置机B状态 + //鍓嶇疆鏈築鐘舵 if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE) { SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32)); @@ -1777,7 +1777,7 @@ void AllHostToNetByteSequence(PROTECTMSG *userdata) else { #ifdef _DEBUG_MSG_ - sprintf(szbuf, "AllHostToNetByteSequence函数内存拷贝长度(=%d)超出范围, 可能引起内存段错误", iOffset); + sprintf(szbuf, "AllHostToNetByteSequence鍑芥暟鍐呭瓨鎷疯礉闀垮害锛堬紳%d锛夎秴鍑鸿寖鍥, 鍙兘寮曡捣鍐呭瓨娈甸敊璇", iOffset); DebugPrint(szbuf); #endif userdata->MsgLen = 0; @@ -1808,21 +1808,21 @@ void ScadaProtectProcessData(int commid, SCADAPROTECTPORTPARAM *psPortParam, BOO memcpy((void *)&msg, psPortParam->m_achRecvBuf+6, pPortParam->m_iRecvLen-6); AllNetToHostByteSequence(&msg); - // 主站数据处理 + // 涓荤珯鏁版嵁澶勭悊 if(PROTOCOL_MASTER == pPortParam->m_psBaoHu->PortType) { return; } - // 主站数据处理 + // 涓荤珯鏁版嵁澶勭悊 switch(msg.MsgType) { - case pPFV_PROTECT_BYPASS:// 保护指令处理 + case pPFV_PROTECT_BYPASS:// 淇濇姢鎸囦护澶勭悊 ScadaProtectByPassData(commid, pPortParam, &msg); break; - case fPFV_PROTECT_BYPASS_ACK: // 上行保护数据处理 + case fPFV_PROTECT_BYPASS_ACK: // 涓婅淇濇姢鏁版嵁澶勭悊 break; - case fPFV_NETACTIVE:// 网络活动包 + case fPFV_NETACTIVE:// 缃戠粶娲诲姩鍖 break; default: break; @@ -1901,7 +1901,7 @@ BOOL SetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTAT return FALSE; } - // wen 2005.06.22 在uclinux系统中,初始化时全部为0 + // wen 2005.06.22 鍦╱clinux绯荤粺涓,鍒濆鍖栨椂鍏ㄩ儴涓0 /* if(psPortParam->m_pPrtPortStatus[commid].bPortIdle == FALSE) { @@ -1991,37 +1991,37 @@ void SendResponsetoMMI(int commid, int mmid, u_32 ResponseType, PROTECTMSG *pmsg switch(ResponseType) { - case hREADINGDATA: // 数据交互开始 - case hREADDATAEND: // 数据交互结束 - case hSYSTEMBUSY: // 数据交互繁忙 - case hNORESPONSE: // 数据申请无响应 - // 操作用户 + case hREADINGDATA: // 鏁版嵁浜や簰寮濮 + case hREADDATAEND: // 鏁版嵁浜や簰缁撴潫 + case hSYSTEMBUSY: // 鏁版嵁浜や簰绻佸繖 + case hNORESPONSE: // 鏁版嵁鐢宠鏃犲搷搴 + // 鎿嶄綔鐢ㄦ埛 ptrProHead->ummid = mmid; - // 功能码 + // 鍔熻兘鐮 ptrProHead->uFuncCode = ResponseType; - // 保留位 + // 淇濈暀浣 mmimsg.MsgLen = sizeof(PROTECTCONTENTHEAD); break; } if(mmimsg.MsgLen > 0) { - // 发送至本端口 + // 鍙戦佽嚦鏈鍙 //SendDataToPort(commid, (char *)&mmimsg, sizeof(PROTECTMSGHEAD)+mmimsg.MsgLen); FormatDataAndSend(commid, &mmimsg); } } -// 将103规约格式转换成scada内部格式,发送到指定的端口 +// 灏103瑙勭害鏍煎紡杞崲鎴恠cada鍐呴儴鏍煎紡锛屽彂閫佸埌鎸囧畾鐨勭鍙 BOOL ScadaProtectConvertToScadaFrameAndSend(int commid) { // SendDataToPort(commid, (char *)&mmimsg, sizeof(PROTECTMSGHEAD)+mmimsg.MsgLen); return TRUE; } -// 转换成103规约格式,发送到指定的端口 +// 杞崲鎴103瑙勭害鏍煎紡锛屽彂閫佸埌鎸囧畾鐨勭鍙 BOOL ScadaProtectConvertTo103AndSend(int commid, PROTECTMSG *pmsg) { PROTECTCONTENTHEAD *ptrProHead; @@ -2030,75 +2030,75 @@ BOOL ScadaProtectConvertTo103AndSend(int commid, PROTECTMSG *pmsg) switch(ptrProHead->uFuncCode) { - // 读取定值 + // 璇诲彇瀹氬 case hREADFIX: break; - // 读取定值区号 + // 璇诲彇瀹氬煎尯鍙 case hREADFIXNO: break; - // 读取保护模拟量 + // 璇诲彇淇濇姢妯℃嫙閲 case hREADPAI: break; - // 读取保护开关量 + // 璇诲彇淇濇姢寮鍏抽噺 case hREADPDI: break; - // 读取保护波形数据 + // 璇诲彇淇濇姢娉㈠舰鏁版嵁 case hREADPWAVE: break; - // 读取指定故障报告 + // 璇诲彇鎸囧畾鏁呴殰鎶ュ憡 case hQUERYFAULT: break; - // 读取指定的自检报告 + // 璇诲彇鎸囧畾鐨勮嚜妫鎶ュ憡 case hQUERYSELFCHECK: break; - // 修改保护定值 + // 淇敼淇濇姢瀹氬 case hWRITEALLFIX: break; - // 修改指定的保护定值 + // 淇敼鎸囧畾鐨勪繚鎶ゅ畾鍊 case hWRITESPECIALFIX: break; - // 保护定值确认 + // 淇濇姢瀹氬肩‘璁 case hWRITEFIXACK: break; - // 保护定值不确认 + // 淇濇姢瀹氬间笉纭 case hWRITEFIXNAK: break; - // 修改保护定值区 + // 淇敼淇濇姢瀹氬煎尯 case hWRITEFIXNO: break; - // 定值区修改确认 + // 瀹氬煎尯淇敼纭 case hWRITEFIXNOACK: break; - // 定值区修改不确认 + // 瀹氬煎尯淇敼涓嶇‘璁 case hWRITEFIXNONAK: break; - // 保护信号复归 + // 淇濇姢淇″彿澶嶅綊 case hRESETPROTECT: break; - // 单个装置对时 + // 鍗曚釜瑁呯疆瀵规椂 case hCHECKTIME: break; - // 保护装置广播对时 + // 淇濇姢瑁呯疆骞挎挱瀵规椂 case hBROADCASTCHECKTIME: break; - // 保护操作取消 + // 淇濇姢鎿嶄綔鍙栨秷 case hCANCEL: break; } @@ -2141,7 +2141,7 @@ void ScadaProtectByPassData(int commid, SCADAPROTECTPORTPARAM *psPortParam, PROT if(sPortStatus.bPortIdle == FALSE) { - // 数据交互繁忙 + // 鏁版嵁浜や簰绻佸繖 SendResponsetoMMI(commid, mmid, hSYSTEMBUSY, pmsg); return; } @@ -2149,7 +2149,7 @@ void ScadaProtectByPassData(int commid, SCADAPROTECTPORTPARAM *psPortParam, PROT if((sPortStatus.mmid != 0xffffffff) && (mmid != (int)sPortStatus.mmid)) { - // 数据交互繁忙 + // 鏁版嵁浜や簰绻佸繖 SendResponsetoMMI(commid, mmid, hSYSTEMBUSY, pmsg); return; } @@ -2202,7 +2202,7 @@ void MakeInteractionCmd(int commid, int sourcommid, u_32 ResponseFunc, PROTECTCO msg.PortNumber = sourcommid; ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData; - // 广播命令 + // 骞挎挱鍛戒护 if(bBoardCast == TRUE) { ptrProHead->ummid = 0xffffffff; @@ -2217,18 +2217,18 @@ void MakeInteractionCmd(int commid, int sourcommid, u_32 ResponseFunc, PROTECTCO switch(ResponseFunc) { - case hREADINGDATA: // 数据申请中 - case hPWAVEDATASTART: // 保护波行数据上送开始 - case hREADDATAEND: // 数据申请结束 - case hPWAVEDATAEND: // 保护波行数据上送结束 - case hWRITEFIXNAK: // 保护定值不确认 - case hWRITEFIXNONAK: // 定值区修改不确认 - case hNORESPONSE: // 数据申请无响应 + case hREADINGDATA: // 鏁版嵁鐢宠涓 + case hPWAVEDATASTART: // 淇濇姢娉㈣鏁版嵁涓婇佸紑濮 + case hREADDATAEND: // 鏁版嵁鐢宠缁撴潫 + case hPWAVEDATAEND: // 淇濇姢娉㈣鏁版嵁涓婇佺粨鏉 + case hWRITEFIXNAK: // 淇濇姢瀹氬间笉纭 + case hWRITEFIXNONAK: // 瀹氬煎尯淇敼涓嶇‘璁 + case hNORESPONSE: // 鏁版嵁鐢宠鏃犲搷搴 msg.MsgLen = sizeof(PROTECTCONTENTHEAD); break; default: #ifdef _DEBUG_MSG_ - sprintf(szbuf, "端口%d 保护应答无效的功能码=%d!!!\n", commid, ResponseFunc); + sprintf(szbuf, "绔彛%d 淇濇姢搴旂瓟鏃犳晥鐨勫姛鑳界爜=%d!!!\n", commid, ResponseFunc); DebugPrint(szbuf); #endif break; @@ -2236,7 +2236,7 @@ void MakeInteractionCmd(int commid, int sourcommid, u_32 ResponseFunc, PROTECTCO if(msg.MsgLen > 0) { - // 发送至本端口 + // 鍙戦佽嚦鏈鍙 //SendDataToPort(commid, (char *)&msg, sizeof(PROTECTMSGHEAD)+msg.MsgLen); FormatDataAndSend(commid, &msg); } @@ -2318,7 +2318,7 @@ BOOL MakeSoeDataPacket(int commid) *puValue = sSoeData.SoeTime.mSec; iOffset += sizeof(u_32); pwValue = (WORD *)&msg.MsgData[iOffset]; - // 修改序号为fun+inf + // 淇敼搴忓彿涓篺un锛媔nf //*pwValue = sSoeData.iPntNo - pPortParam->m_psProvDev[iDevNo].m_sYxInfo.m_iStartPntNo + 1; *pwValue = (WORD)(((sSoeData.u8ProvFun<<8) + sSoeData.u8ProvInf) & 0x0000FFFF); if((*pwValue) == 0) @@ -2328,11 +2328,11 @@ BOOL MakeSoeDataPacket(int commid) iOffset += sizeof(WORD); - // <<< 修改 - // 含有故障序号和相对时间 + // <<< 淇敼 + // 鍚湁鏁呴殰搴忓彿鍜岀浉瀵规椂闂 //if(sSoeData.u8Type == 2) //{ - // sprintf(szExtend, "<相对时间[%d],故障序号[%d]>", sSoeData.wRelativeTime, sSoeData.wFaultNo); + // sprintf(szExtend, "<鐩稿鏃堕棿[%d],鏁呴殰搴忓彿[%d]>", sSoeData.wRelativeTime, sSoeData.wFaultNo); // msg.MsgData[iOffset] = strlen(szExtend); // memcpy((void *)&msg.MsgData[iOffset+1], szExtend, msg.MsgData[iOffset]); // iOffset += msg.MsgData[iOffset]+1; @@ -2344,23 +2344,23 @@ BOOL MakeSoeDataPacket(int commid) if(sSoeData.bStatus == 1) { - strcpy(szExtend, "动作"); + strcpy(szExtend, "鍔ㄤ綔"); } else { - strcpy(szExtend, "恢复"); + strcpy(szExtend, "鎭㈠"); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2005.10.25 增加扩充字符串,用来解析保护事件中的故障参数 - // 含有故障序号和相对时间 + // wen 2005.10.25 澧炲姞鎵╁厖瀛楃涓诧紝鐢ㄦ潵瑙f瀽淇濇姢浜嬩欢涓殑鏁呴殰鍙傛暟 + // 鍚湁鏁呴殰搴忓彿鍜岀浉瀵规椂闂 //if(sSoeData.u8Type == 2) //{ - // sprintf(szExtend, "%s <相对时间[%d],故障序号[%d]>", szExtend, sSoeData.wRelativeTime, sSoeData.wFaultNo); + // sprintf(szExtend, "%s <鐩稿鏃堕棿[%d],鏁呴殰搴忓彿[%d]>", szExtend, sSoeData.wRelativeTime, sSoeData.wFaultNo); //} if(sSoeData.u8Type == 2) { - sprintf(szExtend, "%s <相对时间[%d],故障序号[%d]>", szExtend, sSoeData.wRelativeTime, sSoeData.wFaultNo); + sprintf(szExtend, "%s <鐩稿鏃堕棿[%d],鏁呴殰搴忓彿[%d]>", szExtend, sSoeData.wRelativeTime, sSoeData.wFaultNo); } else if(sSoeData.u8Type == 3) { @@ -2370,19 +2370,19 @@ BOOL MakeSoeDataPacket(int commid) msg.MsgData[iOffset] = strlen(szExtend); memcpy((void *)&msg.MsgData[iOffset+1], szExtend, msg.MsgData[iOffset]); iOffset += msg.MsgData[iOffset]+1; - // >>> 完成 + // >>> 瀹屾垚 msg.MsgLen = iOffset; FormatDataAndSend(commid, &msg); - //发送soe数据 + //鍙戦乻oe鏁版嵁 return TRUE; } return FALSE; } -//===========================数据处理函数结束========================= +//===========================鏁版嵁澶勭悊鍑芥暟缁撴潫========================= -//===========================调试函数开始========================= +//===========================璋冭瘯鍑芥暟寮濮========================= void DispPrtPortStatus(int commid, SCADAPROTECTPORTPARAM *psPortParam) { int i, iMaxPort; @@ -2402,4 +2402,4 @@ void DispPrtPortStatus(int commid, SCADAPROTECTPORTPARAM *psPortParam) strcpy(szDbg, "<<FEND) + 淇濇姢鎸囦护鍖(PROTECT->FEND) */ #define pPFV_PROTECT_BYPASS 1 /*! - 保护数据包应答(FEND->PROTECT) + 淇濇姢鏁版嵁鍖呭簲绛(FEND->PROTECT) */ #define fPFV_PROTECT_BYPASS_ACK 2 /*! - 通道状态包(FEND->PROTECT) + 閫氶亾鐘舵佸寘(FEND->PROTECT) */ #define fPFV_STATUS 3 /*! - 网络活动包(FEND<->PROTECT) + 缃戠粶娲诲姩鍖(FEND<->PROTECT) */ #define fPFV_NETACTIVE 0xF0 -//指令包操作码 +//鎸囦护鍖呮搷浣滅爜 /*! - 读取定值 + 璇诲彇瀹氬 */ #define hREADFIX 0x01 /*! - 读取定值区号 + 璇诲彇瀹氬煎尯鍙 */ #define hREADFIXNO 0x07 /*! - 读取保护模拟量 + 璇诲彇淇濇姢妯℃嫙閲 */ #define hREADPAI 0x09 /*! - 读取保护开关量 + 璇诲彇淇濇姢寮鍏抽噺 */ #define hREADPDI 0x0b /*! - 读取保护波形数据 + 璇诲彇淇濇姢娉㈠舰鏁版嵁 */ #define hREADPWAVE 0x0d /*! - 读取指定故障报告 + 璇诲彇鎸囧畾鏁呴殰鎶ュ憡 */ #define hQUERYFAULT 0x11 /*! - 读取指定的自检报告 + 璇诲彇鎸囧畾鐨勮嚜妫鎶ュ憡 */ #define hQUERYSELFCHECK 0x12 /*! - 修改保护定值 + 淇敼淇濇姢瀹氬 */ #define hWRITEALLFIX 0x15 /*! - 修改指定的保护定值 + 淇敼鎸囧畾鐨勪繚鎶ゅ畾鍊 */ #define hWRITESPECIALFIX 0x16 /*! - 保护定值确认 + 淇濇姢瀹氬肩‘璁 */ #define hWRITEFIXACK 0x17 /*! - 保护定值不确认 + 淇濇姢瀹氬间笉纭 */ #define hWRITEFIXNAK 0x18 /*! - 修改保护定值区 + 淇敼淇濇姢瀹氬煎尯 */ #define hWRITEFIXNO 0x19 /*! - 定值区修改确认 + 瀹氬煎尯淇敼纭 */ #define hWRITEFIXNOACK 0x1a /*! - 定值区修改不确认 + 瀹氬煎尯淇敼涓嶇‘璁 */ #define hWRITEFIXNONAK 0x1b /*! - 保护信号复归 + 淇濇姢淇″彿澶嶅綊 */ #define hRESETPROTECT 0x1c /*! - 单个装置对时 + 鍗曚釜瑁呯疆瀵规椂 */ #define hCHECKTIME 0x1d /*! - 保护装置广播对时 + 淇濇姢瑁呯疆骞挎挱瀵规椂 */ #define hBROADCASTCHECKTIME 0x1e /*! - 读取保护装置状态 + 璇诲彇淇濇姢瑁呯疆鐘舵 */ #define hSTATUS 0x1f /*! - 读取菜单单元值 + 璇诲彇鑿滃崟鍗曞厓鍊 */ #define hCOMMAND 0x20 /*! - 读取扰动参数的命令 + 璇诲彇鎵板姩鍙傛暟鐨勫懡浠 */ #define hDISTCOMMAND 0x21 /*! - 保护操作取消 + 淇濇姢鎿嶄綔鍙栨秷 */ #define hCANCEL 0xFF -//应答包操作码 +//搴旂瓟鍖呮搷浣滅爜 /*! - 数据申请中 + 鏁版嵁鐢宠涓 */ #define hREADINGDATA 0x02 /*! - 定值数据 + 瀹氬兼暟鎹 */ #define hFIXDATA 0x03 /*! - 数据申请结束 + 鏁版嵁鐢宠缁撴潫 */ #define hREADDATAEND 0x04 /*! - 数据申请无响应 + 鏁版嵁鐢宠鏃犲搷搴 */ #define hNORESPONSE 0x05 /*! - 数据处理繁忙,稍后重试 + 鏁版嵁澶勭悊绻佸繖锛岀◢鍚庨噸璇 */ #define hSYSTEMBUSY 0x06 /*! - 定值区号数据 + 瀹氬煎尯鍙锋暟鎹 */ #define hFIXNODATA 0x08 /*! - 保护模拟量数据 + 淇濇姢妯℃嫙閲忔暟鎹 */ #define hPAIDATA 0x0a /*! - 保护开关量数据 + 淇濇姢寮鍏抽噺鏁版嵁 */ #define hPDIDATA 0x0c /*! - 保护波行数据上送开始 + 淇濇姢娉㈣鏁版嵁涓婇佸紑濮 */ #define hPWAVEDATASTART 0x0e /*! - 保护波行数据 + 淇濇姢娉㈣鏁版嵁 */ #define hPWAVEDATA 0x0f /*! - 保护波行数据上送结束 + 淇濇姢娉㈣鏁版嵁涓婇佺粨鏉 */ #define hPWAVEDATAEND 0x10 /*! - 带索引号的事件报告数据 + 甯︾储寮曞彿鐨勪簨浠舵姤鍛婃暟鎹 */ #define hPEVENTDATAWITHID 0x13 /*! - 字符串事件报告数据 + 瀛楃涓蹭簨浠舵姤鍛婃暟鎹 */ #define hPEVENTDATAWITHSTRING 0x14 /*! - 保护定值确认 + 淇濇姢瀹氬肩‘璁 */ #define hWRITEFIXACK 0x17 /*! - 保护定值不确认 + 淇濇姢瀹氬间笉纭 */ #define hWRITEFIXNAK 0x18 /*! - 定值区修改确认 + 瀹氬煎尯淇敼纭 */ #define hWRITEFIXNOACK 0x1a /*! - 定值区修改不确认 + 瀹氬煎尯淇敼涓嶇‘璁 */ #define hWRITEFIXNONAK 0x1b /*! - 定值数据带序号 + 瀹氬兼暟鎹甫搴忓彿 */ #define hFIXDATAWITHNO 0x22 /*! - 保护模拟量数据带序号 + 淇濇姢妯℃嫙閲忔暟鎹甫搴忓彿 */ #define hPAIDATAWITHNO 0x23 /*! - 保护开关量数据带序号 + 淇濇姢寮鍏抽噺鏁版嵁甯﹀簭鍙 */ #define hPDIDATAWITHNO 0x24 -// 数据项目属性 +// 鏁版嵁椤圭洰灞炴 /*! - 实际值 + 瀹為檯鍊 */ #define ITEM_ATTR_REALVALUE 1 /*! - 缺省值 + 缂虹渷鍊 */ #define ITEM_ATTR_DEFAULTVALUE 2 /*! - 量 程 + 閲 绋 */ #define ITEM_ATTR_MINMAXSTEP 3 /*! - 备 用 + 澶 鐢 */ #define ITEM_ATTR_STANDBY 4 /*! - 精 度 + 绮 搴 */ #define ITEM_ATTR_PRECISION 5 /*! - 因 子 + 鍥 瀛 */ #define ITEM_ATTR_FIGURE 6 /*! - 参 比 + 鍙 姣 */ #define ITEM_ATTR_RATE 7 /*! - 列 表 + 鍒 琛 */ #define ITEM_ATTR_LIST 8 /*! - 量 纲 + 閲 绾 */ #define ITEM_ATTR_UNIT 9 /*! - 描 述 + 鎻 杩 */ #define ITEM_ATTR_DESCRIPTION 10 /*! - 保护操作超时时间(秒) + 淇濇姢鎿嶄綔瓒呮椂鏃堕棿(绉) */ #define OPERPROTECTTIMEOUT 15 -// 是pc机系统还是嵌入式系统 +// 鏄痯c鏈虹郴缁熻繕鏄祵鍏ュ紡绯荤粺 #ifdef PC_MACHINE #ifdef OS_WINDOWS #pragma pack (push,1) @@ -298,31 +298,31 @@ typedef struct tagPROTECTCONTENTHEAD { - u_32 ummid __attribute__ ((packed));// 操作用户 - u_32 uAddr __attribute__ ((packed));// 保护地址 - char cFixNo __attribute__ ((packed));// 定值区号 - char cCPUNo __attribute__ ((packed));// CPU号 - u_32 uFuncCode __attribute__ ((packed));// 操作功能码 - u_32 uReserved __attribute__ ((packed));// 保留 + u_32 ummid __attribute__ ((packed));// 鎿嶄綔鐢ㄦ埛 + u_32 uAddr __attribute__ ((packed));// 淇濇姢鍦板潃 + char cFixNo __attribute__ ((packed));// 瀹氬煎尯鍙 + char cCPUNo __attribute__ ((packed));// CPU鍙 + u_32 uFuncCode __attribute__ ((packed));// 鎿嶄綔鍔熻兘鐮 + u_32 uReserved __attribute__ ((packed));// 淇濈暀 }PROTECTCONTENTHEAD, *pPROTECTCONTENTHEAD; typedef struct { - u_32 MsgType __attribute__ ((packed));// 信息类型 - u_32 PortNumber __attribute__ ((packed));// 信息端口号 - u_32 MsgLen __attribute__ ((packed));// 信息长度 - //u_char MsgData[1]; // 信息数据 + u_32 MsgType __attribute__ ((packed));// 淇℃伅绫诲瀷 + u_32 PortNumber __attribute__ ((packed));// 淇℃伅绔彛鍙 + u_32 MsgLen __attribute__ ((packed));// 淇℃伅闀垮害 + //u_char MsgData[1]; // 淇℃伅鏁版嵁 }PROTECTMSGHEAD; typedef struct { - u_32 MsgType __attribute__ ((packed));// 信息类型 - u_32 PortNumber __attribute__ ((packed));// 信息端口号 - u_32 MsgLen __attribute__ ((packed));// 信息长度 - u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 信息数据 + u_32 MsgType __attribute__ ((packed));// 淇℃伅绫诲瀷 + u_32 PortNumber __attribute__ ((packed));// 淇℃伅绔彛鍙 + u_32 MsgLen __attribute__ ((packed));// 淇℃伅闀垮害 + u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 淇℃伅鏁版嵁 }PROTECTMSG; -// 是pc机系统还是嵌入式系统 +// 鏄痯c鏈虹郴缁熻繕鏄祵鍏ュ紡绯荤粺 #ifdef PC_MACHINE #ifdef OS_WINDOWS #pragma pack (pop) @@ -333,25 +333,25 @@ typedef struct typedef struct { - BOOL bPortIdle; // 端口保护操作空闲标识 - u_32 timeOut; // 保护操作超时时间 - u_32 mmid; // 保护操作用户 + BOOL bPortIdle; // 绔彛淇濇姢鎿嶄綔绌洪棽鏍囪瘑 + u_32 timeOut; // 淇濇姢鎿嶄綔瓒呮椂鏃堕棿 + u_32 mmid; // 淇濇姢鎿嶄綔鐢ㄦ埛 } PORTSTATUS, *pPORTSTATUS; typedef struct tagSCADAPROVDEVDEF { /*! - \brief 装置的实际端口号 + \brief 瑁呯疆鐨勫疄闄呯鍙e彿 */ i_32 m_iRealCommid; /*! - \brief 装置的转发地址(唯一确定一个装置) + \brief 瑁呯疆鐨勮浆鍙戝湴鍧(鍞竴纭畾涓涓缃) */ i_32 m_iProvAddr; /*! - \brief 转发SOE数据参数 + \brief 杞彂SOE鏁版嵁鍙傛暟 \note - 用于历史记录的转发事件(应该是没有作用,已经遗弃) + 鐢ㄤ簬鍘嗗彶璁板綍鐨勮浆鍙戜簨浠(搴旇鏄病鏈変綔鐢紝宸茬粡閬楀純) */ DEVPROVSOE m_sProvSoe; @@ -365,34 +365,34 @@ typedef struct tagSCADAPROTECTPORTPARAM { /*! \var SCADAPROTECTPORTPARAM::m_achRecvBuf - \brief 接收数据缓冲区 + \brief 鎺ユ敹鏁版嵁缂撳啿鍖 \note - 缓冲区最大不超过 MAX_RTU_MSG_SIZE+12(包头) bytes\n + 缂撳啿鍖烘渶澶т笉瓒呰繃 MAX_RTU_MSG_SIZE+12(鍖呭ご) bytes\n */ char m_achRecvBuf[MAX_RTU_MSG_SIZE+12]; /*! \var SCADAPROTECTPORTPARAM::m_iRecvLen - \brief 接收数据长度 + \brief 鎺ユ敹鏁版嵁闀垮害 */ int m_iRecvLen; /*! \var SCADAPROTECTPORTPARAM::m_iRecvLen - \brief 网络活动包的发送时间 + \brief 缃戠粶娲诲姩鍖呯殑鍙戦佹椂闂 */ int m_iActiveTimeCnt; int m_iActiveTimeConst; /*! \var SCADAPROTECTPORTPARAM::m_iRecvLen - \brief 通道状态包的发送时间 + \brief 閫氶亾鐘舵佸寘鐨勫彂閫佹椂闂 */ int m_iStatusTimeCnt; int m_iStatusTimeConst; /*! - 保护装置数量 + 淇濇姢瑁呯疆鏁伴噺 */ i_32 m_iDevNum; @@ -404,102 +404,102 @@ typedef struct tagSCADAPROTECTPORTPARAM PORTSTATUS *m_pPrtPortStatus; /*! - \brief 该规约的端口数据指针 + \brief 璇ヨ绾︾殑绔彛鏁版嵁鎸囬拡 */ SIO_PARAM_BAOHU_DEF *m_psBaoHu; }SCADAPROTECTPORTPARAM, *pSCADAPROTECTPORTPARAM; -/////////////////////////以下为通用函数接口/////////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鎺ュ彛/////////////////////////// /*! - \brief 读取配置函数 - \param commid -- 端口号 + \brief 璇诲彇閰嶇疆鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void ScadaProtectReadConfig(int commid); // 初始化处理 +void ScadaProtectReadConfig(int commid); // 鍒濆鍖栧鐞 /*! - \brief 读取端口数据函数 - \param commid -- 端口号 + \brief 璇诲彇绔彛鏁版嵁鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void ScadaProtectRecvData(int commid, u_char *buf, int len);// 规约读数据处理 +void ScadaProtectRecvData(int commid, u_char *buf, int len);// 瑙勭害璇绘暟鎹鐞 /*! - \brief 规约数据处理定时器函数 - \param commid -- 端口号 + \brief 瑙勭害鏁版嵁澶勭悊瀹氭椂鍣ㄥ嚱鏁 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void ScadaProtectTimer(int commid); // 定时器处理 +void ScadaProtectTimer(int commid); // 瀹氭椂鍣ㄥ鐞 /*! - \brief 遥控遥调数据处理函数 - \param commid -- 端口号 + \brief 閬ユ帶閬ヨ皟鏁版嵁澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n - \param buf -- 数据源缓冲区指针 - \param len -- 数据源长度 + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n + \param buf -- 鏁版嵁婧愮紦鍐插尯鎸囬拡 + \param len -- 鏁版嵁婧愰暱搴 */ -void ScadaProtectYkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理 +void ScadaProtectYkYtProcess(int commid, u_char *buf, int len); // 閬ユ帶閬ヨ皟澶勭悊 /*! - \brief 系统下发对时函数 - \param commid -- 端口号 + \brief 绯荤粺涓嬪彂瀵规椂鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -//void ScadaProtectSendSystemTime(int commid); // 系统对时 +//void ScadaProtectSendSystemTime(int commid); // 绯荤粺瀵规椂 /*! - \brief 系统退出时规约处理函数 - \param commid -- 端口号 + \brief 绯荤粺閫鍑烘椂瑙勭害澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ -void ScadaProtectExit(int commid); // 规约退出 +void ScadaProtectExit(int commid); // 瑙勭害閫鍑 /*! - \brief 保护命令处理函数 - \param commid -- 端口号 - \param rtumsg -- 下发的保护命令指针 + \brief 淇濇姢鍛戒护澶勭悊鍑芥暟 + \param commid -- 绔彛鍙 + \param rtumsg -- 涓嬪彂鐨勪繚鎶ゅ懡浠ゆ寚閽 \note - 取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n + 鍙栧艰寖鍥达細0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void ScadaProtectBaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData); /*! - \brief 取保护数据库指针函数 - \param commid -- 端口号 - \param iProvAddr -- 统一编排的保护转发地址 - \param ppBaoHuDB -- 存放保护数据指针的指针 - \retval -- 返回该装置保护数据组数 + \brief 鍙栦繚鎶ゆ暟鎹簱鎸囬拡鍑芥暟 + \param commid -- 绔彛鍙 + \param iProvAddr -- 缁熶竴缂栨帓鐨勪繚鎶よ浆鍙戝湴鍧 + \param ppBaoHuDB -- 瀛樻斁淇濇姢鏁版嵁鎸囬拡鐨勬寚閽 + \retval -- 杩斿洖璇ヨ缃繚鎶ゆ暟鎹粍鏁 */ int ScadaProtectGetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB); -/////////////////////////通用函数接口结束/////////////////////////////// +/////////////////////////閫氱敤鍑芥暟鎺ュ彛缁撴潫/////////////////////////////// -/////////////////////////以下为通用函数支持接口///////////////////////// +/////////////////////////浠ヤ笅涓洪氱敤鍑芥暟鏀寔鎺ュ彛///////////////////////// void ScadaProtectProvMakeYkYtCommand(int commid, u_char *buf, int len); -/////////////////////////通用函数支持接口结束/////////////////////////// +/////////////////////////閫氱敤鍑芥暟鏀寔鎺ュ彛缁撴潫/////////////////////////// -///////////////////////////以下为配置函数接口/////////////////////////// +///////////////////////////浠ヤ笅涓洪厤缃嚱鏁版帴鍙/////////////////////////// BOOL InitScadaInfoFromTempletFile(int commid, SCADAPROTECTPORTPARAM *psPortParam,\ char *ptrTemplate, BOOL bMaster); BOOL GetProvDevNumFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTPORTPARAM *psPortParam); BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTPORTPARAM *psPortParam); int FindProtectDevFromPntNoScada(SCADAPROTECTPORTPARAM *psPortParam, int iPntNo, int itype); -/////////////////////////////配置函数接口结束/////////////////////////// +/////////////////////////////閰嶇疆鍑芥暟鎺ュ彛缁撴潫/////////////////////////// -///////////////////////以下为规约处理函数接口/////////////////////////// +///////////////////////浠ヤ笅涓鸿绾﹀鐞嗗嚱鏁版帴鍙/////////////////////////// void ReduceTimeOut(SCADAPROTECTPORTPARAM *psPortParam); BOOL IsProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam); BOOL GetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTATUS *pStatus); BOOL SetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTATUS *pStatus); BOOL SetProtectPortIdleEx(int commid, int iBaoHuCommid, PORTSTATUS *pStatus); void SendResponsetoMMI(int commid, int mmid, u_32 ResponseType, PROTECTMSG *pmsg); -//将客户机报文所有的数据从网络字节循序转换成主机字节顺序函数 +//灏嗗鎴锋満鎶ユ枃鎵鏈夌殑鏁版嵁浠庣綉缁滃瓧鑺傚惊搴忚浆鎹㈡垚涓绘満瀛楄妭椤哄簭鍑芥暟 void AllNetToHostByteSequence(PROTECTMSG *userdata); -//将客户机报文所有的数据从主机字节顺序转换成网络字节顺序函数 +//灏嗗鎴锋満鎶ユ枃鎵鏈夌殑鏁版嵁浠庝富鏈哄瓧鑺傞『搴忚浆鎹㈡垚缃戠粶瀛楄妭椤哄簭鍑芥暟 void AllHostToNetByteSequence(PROTECTMSG *userdata); BOOL ScadaProtectConvertToScadaFrameAndSend(int commid); BOOL ScadaProtectConvertTo103AndSend(int commid, PROTECTMSG *pmsg); -//数据处理函数总入口 +//鏁版嵁澶勭悊鍑芥暟鎬诲叆鍙 void ScadaProtectProcessData(int commid, SCADAPROTECTPORTPARAM *psPortParam, BOOL bProcess); void ScadaProtectByPassData(int commid, SCADAPROTECTPORTPARAM *psPortParam, PROTECTMSG *pmsg); @@ -508,9 +508,9 @@ void MakeInteractionCmd(int commid, int sourcommid, u_32 ResponseFunc, PROTECTCO void MakeNetActivePacket(int commid); void MakeStatusPacket(int commid); BOOL MakeSoeDataPacket(int commid); -/////////////////////////规约处理函数接口结束/////////////////////////// +/////////////////////////瑙勭害澶勭悊鍑芥暟鎺ュ彛缁撴潫/////////////////////////// -/////////////////////////以下为调试函数接口///////////////////////////// +/////////////////////////浠ヤ笅涓鸿皟璇曞嚱鏁版帴鍙///////////////////////////// void DispPrtPortStatus(int commid, SCADAPROTECTPORTPARAM *psPortParam); -///////////////////////////调试函数接口结束///////////////////////////// +///////////////////////////璋冭瘯鍑芥暟鎺ュ彛缁撴潫///////////////////////////// #endif // !defined(_SCADABAOHU_H_200506020948__INCLUDED_) diff --git a/tcphost.cpp b/tcphost.cpp index 26984b0..b063786 100644 --- a/tcphost.cpp +++ b/tcphost.cpp @@ -27,40 +27,40 @@ * no message * * Revision 1.12 2006/06/16 06:17:41 administrator - * 修改变位遥信点号为word类型而不是dword类型的bug + * 淇敼鍙樹綅閬ヤ俊鐐瑰彿涓簑ord绫诲瀷鑰屼笉鏄痙word绫诲瀷鐨刡ug * * Revision 1.11 2006/05/26 10:38:03 administrator - * 增加32位模拟量传送 + * 澧炲姞32浣嶆ā鎷熼噺浼犻 * * Revision 1.10 2006/04/30 07:25:51 administrator - * 不连接服务器,也可以做主备运转 + * 涓嶈繛鎺ユ湇鍔″櫒锛屼篃鍙互鍋氫富澶囪繍杞 * * Revision 1.9 2006/04/28 06:28:59 administrator * no message * * Revision 1.8 2006/04/26 05:59:27 administrator - * 如果为并列运行方式下,所以装置都是下发机 + * 濡傛灉涓哄苟鍒楄繍琛屾柟寮忎笅锛屾墍浠ヨ缃兘鏄笅鍙戞満 * * Revision 1.7 2006/04/22 07:48:22 administrator - * 可以屏蔽网络连接的错误信息,支持端口通讯时不切换主备机及网络连接成功的算法 + * 鍙互灞忚斀缃戠粶杩炴帴鐨勯敊璇俊鎭紝鏀寔绔彛閫氳鏃朵笉鍒囨崲涓诲鏈哄強缃戠粶杩炴帴鎴愬姛鐨勭畻娉 * * Revision 1.6 2006/01/19 09:53:57 Administrator - * bug修正 + * bug淇 * * Revision 1.5 2006/01/17 06:14:44 Administrator - * 增加对时、装置并列运行以及端口号偏移 + * 澧炲姞瀵规椂銆佽缃苟鍒楄繍琛屼互鍙婄鍙e彿鍋忕Щ * * Revision 1.4 2005/11/30 09:49:29 Administrator - * 厦门出差时的修改 + * 鍘﹂棬鍑哄樊鏃剁殑淇敼 * * Revision 1.3 2005/11/18 03:49:23 Administrator - * 增加施耐德modbus规约 + * 澧炲姞鏂借愬痉modbus瑙勭害 * * Revision 1.2 2005/10/20 06:55:46 Administrator - * 新增前置机功能 + * 鏂板鍓嶇疆鏈哄姛鑳 * * Revision 1.1 2005/10/12 06:03:45 Administrator - * 增加前置机功能 + * 澧炲姞鍓嶇疆鏈哄姛鑳 * * **************************************************************************************/ @@ -80,9 +80,9 @@ BYTE SyncHead[6] = {0xeb, 0x90, 0xeb, 0x90, 0xeb, 0x90}; int SystemTimeFlag; int SystemTimeMode; -// 暂时不进行配置,在需要模拟盘接入时,在打开该接口 -int gMapOutputPort=0; // 模拟盘输出端口 -int gMapSaveDataPort=0; // 模拟盘请求数据缓冲端口 +// 鏆傛椂涓嶈繘琛岄厤缃紝鍦ㄩ渶瑕佹ā鎷熺洏鎺ュ叆鏃讹紝鍦ㄦ墦寮璇ユ帴鍙 +int gMapOutputPort=0; // 妯℃嫙鐩樿緭鍑虹鍙 +int gMapSaveDataPort=0; // 妯℃嫙鐩樿姹傛暟鎹紦鍐茬鍙 //int SystemLoginFalg; @@ -261,15 +261,15 @@ void InitSetTcpIpAddr(void) GetConfigName(InitFileName, sizeof(InitFileName), 0); - GetPrivateProString("前置机", "前置机A地址1", "", ipaddr[0], 30, InitFileName); - GetPrivateProString("前置机", "前置机A地址2", "", ipaddr[1], 30, InitFileName); - GetPrivateProString("前置机", "前置机B地址1", "", ipaddr[2], 30, InitFileName); - GetPrivateProString("前置机", "前置机B地址2", "", ipaddr[3], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈篈鍦板潃1", "", ipaddr[0], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈篈鍦板潃2", "", ipaddr[1], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈築鍦板潃1", "", ipaddr[2], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈築鍦板潃2", "", ipaddr[3], 30, InitFileName); - GetPrivateProString("前置机", "前置机A地址1掩码", "", ipaddrmask[0], 30, InitFileName); - GetPrivateProString("前置机", "前置机A地址2掩码", "", ipaddrmask[1], 30, InitFileName); - GetPrivateProString("前置机", "前置机B地址1掩码", "", ipaddrmask[2], 30, InitFileName); - GetPrivateProString("前置机", "前置机B地址2掩码", "", ipaddrmask[3], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈篈鍦板潃1鎺╃爜", "", ipaddrmask[0], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈篈鍦板潃2鎺╃爜", "", ipaddrmask[1], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈築鍦板潃1鎺╃爜", "", ipaddrmask[2], 30, InitFileName); + GetPrivateProString("鍓嶇疆鏈", "鍓嶇疆鏈築鍦板潃2鎺╃爜", "", ipaddrmask[3], 30, InitFileName); //DebugPrint("InitSetTcpIpAddr Begin..."); for(i = 0; i < 4; i++) @@ -282,7 +282,7 @@ void InitSetTcpIpAddr(void) if(CheckTcpIpAddr((char*)ipaddr[i]) == FALSE) { - sprintf(szbuf, "前置机%C地址%d = %s 错误!!!", + sprintf(szbuf, "鍓嶇疆鏈%C鍦板潃%d = %s 閿欒!!!", (i < 2) ? 'A' : 'B', (i % 2) + 1, ipaddr[i]); DebugPrint(szbuf); } @@ -296,8 +296,8 @@ void InitSetTcpIpAddr(void) //DebugPrint("InitSetTcpIpAddr End."); - //SystemTimeFlag = GetPrivateProInt("对时", "对时", 1, InitFileName); - SystemTimeMode = GetPrivateProInt("对时", "对时方式", 1, InitFileName); + //SystemTimeFlag = GetPrivateProInt("瀵规椂", "瀵规椂", 1, InitFileName); + SystemTimeMode = GetPrivateProInt("瀵规椂", "瀵规椂鏂瑰紡", 1, InitFileName); if(SystemTimeMode == 0) { SystemTimeFlag = 0; @@ -382,30 +382,30 @@ BOOL InitFendMsgEx(void) InitSetTcpIpAddr(); - FendMsg.EnableLink = GetPrivateProInt("前置机", "允许前置机连接", 1, InitFileName); + FendMsg.EnableLink = GetPrivateProInt("鍓嶇疆鏈", "鍏佽鍓嶇疆鏈鸿繛鎺", 1, InitFileName); FendMsg.EnableLink = FendMsg.EnableLink ? 1 : 0; - FendMsg.LinkFlag = GetPrivateProInt("前置机", "前置机连接", 2, InitFileName) % 3; + FendMsg.LinkFlag = GetPrivateProInt("鍓嶇疆鏈", "鍓嶇疆鏈鸿繛鎺", 2, InitFileName) % 3; FendMsg.LinkFlag = 2; - // wen 2006.01.14 增加装置的起始厂站号的偏移 - FendMsg.iPortOffset = GetPrivateProInt("前置机", "起始厂站号", 0, InitFileName); + // wen 2006.01.14 澧炲姞瑁呯疆鐨勮捣濮嬪巶绔欏彿鐨勫亸绉 + FendMsg.iPortOffset = GetPrivateProInt("鍓嶇疆鏈", "璧峰鍘傜珯鍙", 0, InitFileName); if(FendMsg.iPortOffset < 0) { FendMsg.iPortOffset = 0; } - // wen 2006.01.14 增加并列运行方式 - FendMsg.iRunMode = GetPrivateProInt("前置机", "运行方式", 0, InitFileName) % 2; + // wen 2006.01.14 澧炲姞骞跺垪杩愯鏂瑰紡 + FendMsg.iRunMode = GetPrivateProInt("鍓嶇疆鏈", "杩愯鏂瑰紡", 0, InitFileName) % 2; if(FendMsg.iRunMode < 0) { FendMsg.iRunMode = RUN_MODE_STANDBY; } - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) - FendMsg.iPortMask = GetPrivateProInt("前置机", "主备切换端口屏蔽字", 0, InitFileName); + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) + FendMsg.iPortMask = GetPrivateProInt("鍓嶇疆鏈", "涓诲鍒囨崲绔彛灞忚斀瀛", 0, InitFileName); - // wen 2006.05.20 32bit传送模拟量数据 - FendMsg.iSendAiof32Bit = GetPrivateProInt("前置机", "遥测数据32位传送", 0, InitFileName); + // wen 2006.05.20 32bit浼犻佹ā鎷熼噺鏁版嵁 + FendMsg.iSendAiof32Bit = GetPrivateProInt("鍓嶇疆鏈", "閬ユ祴鏁版嵁32浣嶄紶閫", 0, InitFileName); if(FendMsg.iSendAiof32Bit > 0) { FendMsg.iSendAiof32Bit = 1; @@ -422,7 +422,7 @@ BOOL InitFendMsgEx(void) { FendMsg.TcpIpAddr[i][0] = 0x00; - // 判断是否前置机IP地址(针对于ds-3116的3地址的情况) + // 鍒ゆ柇鏄惁鍓嶇疆鏈篒P鍦板潃(閽堝浜巇s-3116鐨3鍦板潃鐨勬儏鍐) if(false == CheckIsFendIpAddr(HostIpAddr.AllIpAddr[j])) { continue; @@ -433,17 +433,17 @@ BOOL InitFendMsgEx(void) FendMsg.AllIpAddr[i] = HostIpAddr.AllIpAddr[j]; - if(IN_CLASSA(FendMsg.AllIpAddr[i])) //A类地址 + if(IN_CLASSA(FendMsg.AllIpAddr[i])) //A绫诲湴鍧 { FendMsg.HostIpAddr[i] = FendMsg.AllIpAddr[i] & IN_CLASSA_NET; FendMsg.BroadCastAddr[i] = FendMsg.HostIpAddr[i] | IN_CLASSA_HOST; } - else if(IN_CLASSB(FendMsg.AllIpAddr[i])) //B类地址 + else if(IN_CLASSB(FendMsg.AllIpAddr[i])) //B绫诲湴鍧 { FendMsg.HostIpAddr[i] = FendMsg.AllIpAddr[i] & IN_CLASSB_NET; FendMsg.BroadCastAddr[i] = FendMsg.HostIpAddr[i] | IN_CLASSB_HOST; } - else if(IN_CLASSC(FendMsg.AllIpAddr[i])) //C类地址 + else if(IN_CLASSC(FendMsg.AllIpAddr[i])) //C绫诲湴鍧 { FendMsg.HostIpAddr[i] = FendMsg.AllIpAddr[i] & IN_CLASSC_NET; FendMsg.BroadCastAddr[i] = FendMsg.HostIpAddr[i] | IN_CLASSC_HOST; @@ -486,9 +486,9 @@ BOOL InitFendMsg(void) InitSetTcpIpAddr(); - FendMsg.LinkFlag = GetPrivateProInt("前置机", "前置机连接", 2, InitFileName) % 3; + FendMsg.LinkFlag = GetPrivateProInt("鍓嶇疆鏈", "鍓嶇疆鏈鸿繛鎺", 2, InitFileName) % 3; FendMsg.LinkFlag = 2; - FendMsg.EnableLink = GetPrivateProInt("前置机", "允许前置机连接", 1, InitFileName); + FendMsg.EnableLink = GetPrivateProInt("鍓嶇疆鏈", "鍏佽鍓嶇疆鏈鸿繛鎺", 1, InitFileName); FendMsg.EnableLink = FendMsg.EnableLink ? 1 : 0; gethostname(FendMsg.Name, 100); @@ -504,7 +504,7 @@ BOOL InitFendMsg(void) inaddr = *((struct in_addr *)test->h_addr_list[i]); - // 判断是否前置机IP地址(针对于ds-3116的3地址的情况) + // 鍒ゆ柇鏄惁鍓嶇疆鏈篒P鍦板潃(閽堝浜巇s-3116鐨3鍦板潃鐨勬儏鍐) if(false == CheckIsFendIpAddr(ntohl(inaddr.s_addr))) { continue; @@ -513,17 +513,17 @@ BOOL InitFendMsg(void) strcpy(FendMsg.TcpIpAddr[i], inet_ntoa(*addr)); FendMsg.AllIpAddr[i] = ntohl(inaddr.s_addr); - if(IN_CLASSA(FendMsg.AllIpAddr[i])) //A类地址 + if(IN_CLASSA(FendMsg.AllIpAddr[i])) //A绫诲湴鍧 { FendMsg.HostIpAddr[i] = FendMsg.AllIpAddr[i] & IN_CLASSA_NET; FendMsg.BroadCastAddr[i] = FendMsg.HostIpAddr[i] | IN_CLASSA_HOST; } - else if(IN_CLASSB(FendMsg.AllIpAddr[i])) //B类地址 + else if(IN_CLASSB(FendMsg.AllIpAddr[i])) //B绫诲湴鍧 { FendMsg.HostIpAddr[i] = FendMsg.AllIpAddr[i] & IN_CLASSB_NET; FendMsg.BroadCastAddr[i] = FendMsg.HostIpAddr[i] | IN_CLASSB_HOST; } - else if(IN_CLASSC(FendMsg.AllIpAddr[i])) //C类地址 + else if(IN_CLASSC(FendMsg.AllIpAddr[i])) //C绫诲湴鍧 { FendMsg.HostIpAddr[i] = FendMsg.AllIpAddr[i] & IN_CLASSC_NET; FendMsg.BroadCastAddr[i] = FendMsg.HostIpAddr[i] | IN_CLASSC_HOST; @@ -550,7 +550,7 @@ BOOL InitHostWSAStartup(void) GetConfigName(InitFileName, sizeof(InitFileName), 0); - // wen 2002.08.01 初始化时,应该关闭网络在初始化 + // wen 2002.08.01 鍒濆鍖栨椂锛屽簲璇ュ叧闂綉缁滃湪鍒濆鍖 if(bInitFinished) { CloseHost(); @@ -595,11 +595,11 @@ BOOL InitHostWSAStartup(void) HostLink[i].SocketId = INVALID_SOCKET; } - Host_Socket_Port = GetPrivateProInt("网络设置", "主机网络端口", 7119, InitFileName); - GetPrivateProString("主机地址", "主机A地址1", "", (char*)HostLink[0].TcpIpAddr[0], 30, InitFileName); - GetPrivateProString("主机地址", "主机A地址2", "", (char*)HostLink[0].TcpIpAddr[1], 30, InitFileName); - GetPrivateProString("主机地址", "主机B地址1", "", (char*)HostLink[1].TcpIpAddr[0], 30, InitFileName); - GetPrivateProString("主机地址", "主机B地址2", "", (char*)HostLink[1].TcpIpAddr[1], 30, InitFileName); + Host_Socket_Port = GetPrivateProInt("缃戠粶璁剧疆", "涓绘満缃戠粶绔彛", 7119, InitFileName); + GetPrivateProString("涓绘満鍦板潃", "涓绘満A鍦板潃1", "", (char*)HostLink[0].TcpIpAddr[0], 30, InitFileName); + GetPrivateProString("涓绘満鍦板潃", "涓绘満A鍦板潃2", "", (char*)HostLink[0].TcpIpAddr[1], 30, InitFileName); + GetPrivateProString("涓绘満鍦板潃", "涓绘満B鍦板潃1", "", (char*)HostLink[1].TcpIpAddr[0], 30, InitFileName); + GetPrivateProString("涓绘満鍦板潃", "涓绘満B鍦板潃2", "", (char*)HostLink[1].TcpIpAddr[1], 30, InitFileName); for(i=0, j=0; i < 4; i++) { @@ -610,7 +610,7 @@ BOOL InitHostWSAStartup(void) if(CheckTcpIpAddr((char*)HostLink[i/2].TcpIpAddr[i%2]) == FALSE) { - sprintf(szbuf, "主机%c地址%d = %s 错误!!!", + sprintf(szbuf, "涓绘満%c鍦板潃%d = %s 閿欒!!!", ((i < 2) ? 'A' : 'B'), ((i % 2) + 1), HostLink[i/2].TcpIpAddr[i%2]); DebugPrint(szbuf); @@ -633,7 +633,7 @@ void LinkOneHost(int hostid) struct sockaddr_in sa; int retval, len, tmp_len; char tmp_buf[256]; - u_long largp = 1L; //非阻塞模式 + u_long largp = 1L; //闈為樆濉炴ā寮 /* if((!SystemLoginFalg) && RESTRICTED_USER) @@ -685,7 +685,7 @@ void LinkOneHost(int hostid) } #ifdef OS_LINUX - // wen 2005.07.08 将socket设置为非阻塞模式 + // wen 2005.07.08 灏唖ocket璁剧疆涓洪潪闃诲妯″紡 retval = fcntl(HostLink[hostid].SocketId, F_GETFL, 0); fcntl(HostLink[hostid].SocketId, F_SETFL, retval|O_NONBLOCK); #else @@ -693,7 +693,7 @@ void LinkOneHost(int hostid) if(SOCKET_ERROR == retval) { retval = WSAGetLastError(); - sprintf(tmp_buf, "wen: ioctlsocket设置非阻塞模式错误, SocketError=%d, SocketId = %d", retval, HostLink[hostid].SocketId); + sprintf(tmp_buf, "wen: ioctlsocket璁剧疆闈為樆濉炴ā寮忛敊璇, SocketError=%d, SocketId = %d", retval, HostLink[hostid].SocketId); DebugPrint(tmp_buf); return; } @@ -701,7 +701,7 @@ void LinkOneHost(int hostid) if(ShmGetDispHostLinkFlag()) { - sprintf(tmp_buf, "【socket=%d】前置机连接主机%c(%s:%d)!!!", HostLink[hostid].SocketId, + sprintf(tmp_buf, "銆恠ocket=%d銆戝墠缃満杩炴帴涓绘満%c(%s:%d)!!!", HostLink[hostid].SocketId, hostid+'A', (char *)HostLink[hostid].TcpIpAddr[HostLink[hostid].CurLinkIdx], Host_Socket_Port); DebugPrint((char*)tmp_buf); } @@ -728,7 +728,7 @@ void LinkOneHost(int hostid) retval = connect((SOCKET)HostLink[hostid].SocketId, (struct sockaddr *)&sa, sizeof(sa)); if(retval != 0) { - // wen 2005.10.21 修改网络错误判断 + // wen 2005.10.21 淇敼缃戠粶閿欒鍒ゆ柇 retval = GetNetErrorNo(); if(IsWouldBlockEx(retval) == FALSE) //if(IsWouldBlock() == FALSE) @@ -740,7 +740,7 @@ void LinkOneHost(int hostid) // wen 2002.04.05 if(ShmGetDispHostLinkFlag()) { - sprintf(tmp_buf, "与主机%c(%s:%d)网络连接错误,错误号 = %d !!!", + sprintf(tmp_buf, "涓庝富鏈%c(%s:%d)缃戠粶杩炴帴閿欒锛岄敊璇彿 = %d !!!", hostid + 'A', (char *)HostLink[hostid].TcpIpAddr[HostLink[hostid].CurLinkIdx], Host_Socket_Port, retval); DebugPrint((char*)tmp_buf); } @@ -768,7 +768,7 @@ void HostConnect(SOCKET socket, WORD error) { if(ShmGetDispHostLinkFlag()) { - sprintf(szbuf, "与主机%c(%s:%d)网络连接失败,错误号 = %d !!!", + sprintf(szbuf, "涓庝富鏈%c(%s:%d)缃戠粶杩炴帴澶辫触锛岄敊璇彿 = %d !!!", id+'A', (char *)HostLink[id].TcpIpAddr[HostLink[id].CurLinkIdx], Host_Socket_Port, error); DebugPrint((char*)szbuf); } @@ -782,13 +782,13 @@ void HostConnect(SOCKET socket, WORD error) if(ShmGetDispHostLinkFlag()) { - sprintf(szbuf, "与主机%c(%s:%d)网络连接成功 !!!", + sprintf(szbuf, "涓庝富鏈%c(%s:%d)缃戠粶杩炴帴鎴愬姛 !!!", id+'A', (char *)HostLink[id].TcpIpAddr[HostLink[id].CurLinkIdx], Host_Socket_Port); DebugPrint((char*)szbuf); } //HostSendBuf[id].MsgLen = 0; - // wen 2002.07.10 确保首先发送以下帧 + // wen 2002.07.10 纭繚棣栧厛鍙戦佷互涓嬪抚 ClearSendBuffer(id); ClearRecvBuffer(id); @@ -811,7 +811,7 @@ void LinkToHost(void) } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.30 将该段代码提前,如果不连接服务器,也可以做主备运转 + // wen 2006.04.30 灏嗚娈典唬鐮佹彁鍓嶏紝濡傛灉涓嶈繛鎺ユ湇鍔″櫒锛屼篃鍙互鍋氫富澶囪繍杞 for(i = 0; i < MAX_FEND; i++) { FendMsg.LinkCnt[i]++; @@ -843,8 +843,8 @@ void LinkToHost(void) //if(HostLink[i].StatusCnt > (5000/TIMER_CNT)) if(HostLink[i].StatusCnt > (10000/TIMER_CNT)) { - // wen 2005.07.21 修改冗余代码 - //sprintf(szbuf, "【socket=%d】接收主机%c数据超时关闭!!!", + // wen 2005.07.21 淇敼鍐椾綑浠g爜 + //sprintf(szbuf, "銆恠ocket=%d銆戞帴鏀朵富鏈%c鏁版嵁瓒呮椂鍏抽棴!!!", // HostLink[i].SocketId, i + 'A'); //DebugPrint((char*)szbuf); //HostLink[i].StatusCnt = 0; @@ -874,7 +874,7 @@ void LinkToHost(void) } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.30 将该段代码提前,如果不连接服务器,也可以做主备运转 + // wen 2006.04.30 灏嗚娈典唬鐮佹彁鍓嶏紝濡傛灉涓嶈繛鎺ユ湇鍔″櫒锛屼篃鍙互鍋氫富澶囪繍杞 /* for(i = 0; i < MAX_FEND; i++) { @@ -902,7 +902,7 @@ void LinkToHost(void) switch(FendMsg.LinkStatus[1]*2 + FendMsg.LinkStatus[0]) { - case 3: // 两前置机都处于连机状态 + case 3: // 涓ゅ墠缃満閮藉浜庤繛鏈虹姸鎬 for(i = 0; i < MAX_HOST; i++) { if(HostLink[i].Status == 0) @@ -912,11 +912,11 @@ void LinkToHost(void) } break; - case 1: // 仅前置机 A 处于连机状态 + case 1: // 浠呭墠缃満 A 澶勪簬杩炴満鐘舵 //SendSwitch(0); break; - case 2: // 仅前置机 B 处于连机状态 + case 2: // 浠呭墠缃満 B 澶勪簬杩炴満鐘舵 //SendSwitch(1); break; @@ -957,27 +957,27 @@ void CloseHostSocket(SOCKET socket, int flag) switch(flag) { case HOST_CLOSE_NET: - sprintf(szbuf, "【socket=%d】主机主动关闭与主机 %c 的网络连接!!!", + sprintf(szbuf, "銆恠ocket=%d銆戜富鏈轰富鍔ㄥ叧闂笌涓绘満 %c 鐨勭綉缁滆繛鎺!!!", HostLink[i].SocketId, i + 'A'); DebugPrint((char*)szbuf); break; case OVER_TIME_CLOSE_NET: - sprintf(szbuf, "【socket=%d】网络定时超时关闭与主机 %c 的网络连接!!!", + sprintf(szbuf, "銆恠ocket=%d銆戠綉缁滃畾鏃惰秴鏃跺叧闂笌涓绘満 %c 鐨勭綉缁滆繛鎺!!!", HostLink[i].SocketId, i + 'A'); DebugPrint((char*)szbuf); break; case FEND_CLOSE_NET: - sprintf(szbuf, "【socket=%d】前置机关闭与主机 %c 的网络连接!!!", + sprintf(szbuf, "銆恠ocket=%d銆戝墠缃満鍏抽棴涓庝富鏈 %c 鐨勭綉缁滆繛鎺!!!", HostLink[i].SocketId, i + 'A'); DebugPrint((char*)szbuf); break; case ERROR_CLOSE_NET: - sprintf(szbuf, "【socket=%d】网络错误后关闭与主机 %c 的网络连接!!!", + sprintf(szbuf, "銆恠ocket=%d銆戠綉缁滈敊璇悗鍏抽棴涓庝富鏈 %c 鐨勭綉缁滆繛鎺!!!", HostLink[i].SocketId, i + 'A'); DebugPrint((char*)szbuf); break; default: - sprintf(szbuf, "【socket=%d】其他情况关闭与主机 %c 的网络连接!!!", + sprintf(szbuf, "銆恠ocket=%d銆戝叾浠栨儏鍐靛叧闂笌涓绘満 %c 鐨勭綉缁滆繛鎺!!!", HostLink[i].SocketId, i + 'A'); DebugPrint((char*)szbuf); break; @@ -1022,7 +1022,7 @@ void PutDataToHostRevBuf(int hostid, char *buf, int len) } else { - sprintf(szbuf, "主机%c接收暂存缓冲区分半存储!!!", 'A'+hostid); + sprintf(szbuf, "涓绘満%c鎺ユ敹鏆傚瓨缂撳啿鍖哄垎鍗婂瓨鍌!!!", 'A'+hostid); DebugPrint((char*)szbuf); memmove((char*)&HostRevBuf[hostid].MsgData[HostRevBuf[hostid].Rear], ptr, j); @@ -1036,7 +1036,7 @@ void PutDataToHostRevBuf(int hostid, char *buf, int len) } else { - sprintf(szbuf, "主机%c接收暂存缓冲区溢出!!!", 'A'+hostid); + sprintf(szbuf, "涓绘満%c鎺ユ敹鏆傚瓨缂撳啿鍖烘孩鍑!!!", 'A'+hostid); DebugPrint((char*)szbuf); } } @@ -1150,7 +1150,7 @@ int GetHostMsgFormHostRevBuf(HOSTMSG *hmsg, int hostid) } if(msglen > (MAX_RTU_MSG_SIZE - 12)) { - sprintf(szbuf, "接收主机%c信息包超长 Len = %d!", 'A'+hostid, msglen); + sprintf(szbuf, "鎺ユ敹涓绘満%c淇℃伅鍖呰秴闀 Len = %d!", 'A'+hostid, msglen); DebugPrint((char*)szbuf); status = 0; @@ -1181,7 +1181,7 @@ int GetHostMsgFormHostRevBuf(HOSTMSG *hmsg, int hostid) if(memcmp((char*)&hmsg->MsgData[msgidx-6], (char*)SyncHead, 6) == 0) { - sprintf(szbuf, "接收主机%c 信息包失步! ", 'A'+ hostid); + sprintf(szbuf, "鎺ユ敹涓绘満%c 淇℃伅鍖呭け姝! ", 'A'+ hostid); DebugPrint((char*)szbuf); status = 0; @@ -1232,7 +1232,7 @@ BOOL ReadDataFormHost(SOCKET socket) { if(FALSE == AllDataRtuToHostByteSequence(&hostmsg)) { - sprintf(szbuf, "接收主机%c数据格式错误!!!", 'A'+ hostid); + sprintf(szbuf, "鎺ユ敹涓绘満%c鏁版嵁鏍煎紡閿欒!!!", 'A'+ hostid); DebugPrint((char*)szbuf); continue; } @@ -1244,7 +1244,7 @@ BOOL ReadDataFormHost(SOCKET socket) if(sum != CalCheckout((u_char*)hostmsg.MsgData, hostmsg.MsgLen - 2)) { - sprintf(szbuf, "接收主机%c信息校验码错误!!!", 'A'+ hostid); + sprintf(szbuf, "鎺ユ敹涓绘満%c淇℃伅鏍¢獙鐮侀敊璇!!!", 'A'+ hostid); DebugPrint((char*)szbuf); continue; } @@ -1295,14 +1295,14 @@ BOOL ReadDataFormHost(SOCKET socket) } break; - // wen 2003.10.24 增加动态数据库修改的同步(郑州农科) - //case hRELOADDBSTN:// 重新装入数据库站信息 - // 启动线程拷贝站信息数据并替换该站的数据类型的句柄(如:模拟量,开关量,电度量和离线量) + // wen 2003.10.24 澧炲姞鍔ㄦ佹暟鎹簱淇敼鐨勫悓姝(閮戝窞鍐滅) + //case hRELOADDBSTN:// 閲嶆柊瑁呭叆鏁版嵁搴撶珯淇℃伅 + // 鍚姩绾跨▼鎷疯礉绔欎俊鎭暟鎹苟鏇挎崲璇ョ珯鐨勬暟鎹被鍨嬬殑鍙ユ焺(濡:妯℃嫙閲忥紝寮鍏抽噺锛岀數搴﹂噺鍜岀绾块噺) // break; - // wen 2003.10.24 增加动态数据库修改的同步(郑州农科) - //case hRELOADDBPOINT:// 重新装入数据库点信息 - // 直接设置点信息 + // wen 2003.10.24 澧炲姞鍔ㄦ佹暟鎹簱淇敼鐨勫悓姝(閮戝窞鍐滅) + //case hRELOADDBPOINT:// 閲嶆柊瑁呭叆鏁版嵁搴撶偣淇℃伅 + // 鐩存帴璁剧疆鐐逛俊鎭 // break; default: // hMAPANDATA,hMAPDIDATA,hBYPASSCMD,hYKYTCMD etc. @@ -1312,7 +1312,7 @@ BOOL ReadDataFormHost(SOCKET socket) } // wen 2002.04.05 - // 主备服务器数据都发送(针对可能无应答的服务器) + // 涓诲鏈嶅姟鍣ㄦ暟鎹兘鍙戦(閽堝鍙兘鏃犲簲绛旂殑鏈嶅姟鍣) //if(HostLink[hostid].Status) // continue; @@ -1354,18 +1354,18 @@ int SendDataToHostSendBuf(int hostid, u_char *buf, int len, BOOL bInsert) revmsg = (HOSTMSG*)buf; - // wen 2002.08.01 数据帧格式错误,长度大于总长度 + // wen 2002.08.01 鏁版嵁甯ф牸寮忛敊璇紝闀垮害澶т簬鎬婚暱搴 if(revmsg->MsgLen > len) { - sprintf(szbuf, "发送到主机%c缓冲区数据帧格式错误:帧长度:%d 字节", 'A'+hostid, revmsg->MsgLen); + sprintf(szbuf, "鍙戦佸埌涓绘満%c缂撳啿鍖烘暟鎹抚鏍煎紡閿欒锛氬抚闀垮害锛%d 瀛楄妭", 'A'+hostid, revmsg->MsgLen); DebugPrint((char*)szbuf); return 0; } - // wen 2002.07.11 给判断多留一些空间 + // wen 2002.07.11 缁欏垽鏂鐣欎竴浜涚┖闂 //imsgLen = msg.MsgLen + sizeof(ORTUMSGHEAD); imsgLen = revmsg->MsgLen + sizeof(ORTUMSGHEAD); - // 6bytes同步头+2bytes校验+12bytes空闲字节 + // 6bytes鍚屾澶+2bytes鏍¢獙+12bytes绌洪棽瀛楄妭 //if((MAX_NET_BUF - HostSendBuf[hostid].MsgLen) < (msg.MsgLen+6)) if((MAX_NET_BUF - HostSendBuf[hostid].MsgLen) < (imsgLen+20)) { @@ -1374,10 +1374,10 @@ int SendDataToHostSendBuf(int hostid, u_char *buf, int len, BOOL bInsert) return 0; } - // wen 2002.08.01 数据发送以后,缓冲区长度任然不足 + // wen 2002.08.01 鏁版嵁鍙戦佷互鍚庯紝缂撳啿鍖洪暱搴︿换鐒朵笉瓒 if((MAX_NET_BUF - HostSendBuf[hostid].MsgLen) < (imsgLen+20)) { - sprintf(szbuf, "主机%c发送缓冲区溢出!!!", 'A'+hostid); + sprintf(szbuf, "涓绘満%c鍙戦佺紦鍐插尯婧㈠嚭!!!", 'A'+hostid); DebugPrint((char*)szbuf); return 0; } @@ -1392,7 +1392,7 @@ int SendDataToHostSendBuf(int hostid, u_char *buf, int len, BOOL bInsert) if(FALSE == AllDataHostToRtuByteSequence(revmsg, &msg)) { - sprintf(szbuf, "向主机%c发送数据格式错误!!!", 'A'+ hostid); + sprintf(szbuf, "鍚戜富鏈%c鍙戦佹暟鎹牸寮忛敊璇!!!", 'A'+ hostid); DebugPrint((char*)szbuf); return 0; } @@ -1409,10 +1409,10 @@ int SendDataToHostSendBuf(int hostid, u_char *buf, int len, BOOL bInsert) memmove((char*)&HostSendBuf[hostid].MsgData[HostSendBuf[hostid].MsgLen], (char*)&msg, imsgLen); HostSendBuf[hostid].MsgLen += imsgLen; - // wen 2002.08.01 数据缓冲区长度过长(永远也不会到达) + // wen 2002.08.01 鏁版嵁缂撳啿鍖洪暱搴﹁繃闀(姘歌繙涔熶笉浼氬埌杈) if(HostSendBuf[hostid].MsgLen > MAX_NET_BUF) { - sprintf(szbuf, "主机%c缓冲区长度越限:长度:%d 字节", + sprintf(szbuf, "涓绘満%c缂撳啿鍖洪暱搴﹁秺闄愶細闀垮害锛%d 瀛楄妭", 'A'+hostid, HostSendBuf[hostid].MsgLen); DebugPrint((char*)szbuf); HostSendBuf[hostid].MsgLen = 0; @@ -1460,16 +1460,16 @@ int SendHost(int hostid) FD_SET(HostLink[hostid].SocketId, &fdset_wr); memset((char*)&timeout, 0, sizeof(struct timeval)); - // wen 2005.07.08 设置超时等待时间(这样会丢失数据吗?) + // wen 2005.07.08 璁剧疆瓒呮椂绛夊緟鏃堕棿(杩欐牱浼氫涪澶辨暟鎹悧锛) //timeout.tv_usec = 200; retval = select(HostLink[hostid].SocketId+1, (fd_set*)0, &fdset_wr, (fd_set*)0, &timeout); if(retval == 0) { - // wen 2005.10.21 累计值超限关闭socket + // wen 2005.10.21 绱鍊艰秴闄愬叧闂璼ocket HostLink[hostid].iNoWriteNum++; if(HostLink[hostid].iNoWriteNum > MAX_NO_WRITE_NUM) { - sprintf(szbuf, "主机%c SOCKET不可写标记累计超过限值", 'A'+hostid); + sprintf(szbuf, "涓绘満%c SOCKET涓嶅彲鍐欐爣璁扮疮璁¤秴杩囬檺鍊", 'A'+hostid); DebugPrint((char*)szbuf); CloseHostSocket(HostLink[hostid].SocketId, OVER_TIME_CLOSE_NET); @@ -1480,7 +1480,7 @@ int SendHost(int hostid) if(retval != -1) { - // 首先判断socket写标识正常否 + // 棣栧厛鍒ゆ柇socket鍐欐爣璇嗘甯稿惁 if(FD_ISSET(HostLink[hostid].SocketId, &fdset_wr)) { HostLink[hostid].iNoWriteNum = 0; @@ -1495,7 +1495,7 @@ int SendHost(int hostid) { if(ShmGetDispHostLinkFlag()) { - sprintf(szbuf, "【socket=%d】发送主机%c网络可能阻塞", + sprintf(szbuf, "銆恠ocket=%d銆戝彂閫佷富鏈%c缃戠粶鍙兘闃诲", HostLink[hostid].SocketId, 'A'+hostid); DebugPrint((char*)szbuf); } @@ -1504,7 +1504,7 @@ int SendHost(int hostid) { if(ShmGetDispHostLinkFlag()) { - sprintf(szbuf, "发送主机%c缓冲区网络出错:%d,请求:%d 字节", + sprintf(szbuf, "鍙戦佷富鏈%c缂撳啿鍖虹綉缁滃嚭閿欙細%d锛岃姹傦細%d 瀛楄妭", 'A'+hostid, neterror, HostSendBuf[hostid].MsgLen); DebugPrint((char*)szbuf); } @@ -1519,7 +1519,7 @@ int SendHost(int hostid) { if(ShmGetDispHostLinkFlag()) { - sprintf(szbuf, "【socket=%d】发送主机%c缓冲区出错! 剩余:%d 字节,发送:%d 字节", + sprintf(szbuf, "銆恠ocket=%d銆戝彂閫佷富鏈%c缂撳啿鍖哄嚭閿! 鍓╀綑锛%d 瀛楄妭锛屽彂閫侊細%d 瀛楄妭", HostLink[hostid].SocketId, 'A'+hostid, HostSendBuf[hostid].MsgLen, retval); DebugPrint((char*)szbuf); } @@ -1527,7 +1527,7 @@ int SendHost(int hostid) } else { - //sprintf(szbuf, "【socket=%d】发送主机%c缓冲区! 发送:%d 字节", + //sprintf(szbuf, "銆恠ocket=%d銆戝彂閫佷富鏈%c缂撳啿鍖! 鍙戦侊細%d 瀛楄妭", // HostLink[hostid].SocketId, 'A'+hostid, retval); //DebugPrint((char*)szbuf); HostSendBuf[hostid].MsgLen = 0; @@ -1553,7 +1553,7 @@ void SendHostSendBufToHost(void) { int i; - // wen 2003.06.11 增加变化数据的发送 + // wen 2003.06.11 澧炲姞鍙樺寲鏁版嵁鐨勫彂閫 SendRtuChangeDataToHost(); for(i = 0; i < MAX_HOST; i++) @@ -1583,7 +1583,7 @@ void HostDataProceWithSignalYkYt(HOSTMSG *hmsg) pSioParam = GetSioParamPtr(); - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //port = hmsg->PortNumber; port = hmsg->PortNumber - FendMsg.iPortOffset; if(port < 0 ) @@ -1625,7 +1625,7 @@ void HostDataProceWithSignalYkYt(HOSTMSG *hmsg) } //*************************************************************** -//* 主机数据处理 * +//* 涓绘満鏁版嵁澶勭悊 * //*************************************************************** void HostDataProce(HOSTMSG *hostmsg) { @@ -1641,7 +1641,7 @@ void HostDataProce(HOSTMSG *hostmsg) break; } - if(hostmsg->MsgLen >= 10) // 多条遥调遥控命令 + if(hostmsg->MsgLen >= 10) // 澶氭潯閬ヨ皟閬ユ帶鍛戒护 { //ProLen = 0; //memmove((char*)&MultiYkYtMsg, (char*)hostmsg, hostmsg->MsgLen+sizeof(HOSTMSGHEAD)); @@ -1649,7 +1649,7 @@ void HostDataProce(HOSTMSG *hostmsg) //MultiYkYtSelectProce(); //MultiYkYtFlag = FALSE; } - else // 单条遥调遥控命令 + else // 鍗曟潯閬ヨ皟閬ユ帶鍛戒护 { HostDataProceWithSignalYkYt(hostmsg); } @@ -1715,7 +1715,7 @@ void HostDataProce(HOSTMSG *hostmsg) //HostMapOpProc(hostmsg); break; - // 数据库信息修改 + // 鏁版嵁搴撲俊鎭慨鏀 case NET_PROFILE_UPDATE: //ModifyDBProc(hostmsg); break; @@ -1723,14 +1723,14 @@ void HostDataProce(HOSTMSG *hostmsg) } //*************************************************************** -//* 发送变化数据到主机 * +//* 鍙戦佸彉鍖栨暟鎹埌涓绘満 * //*************************************************************** void SendRtuChangeDataToHost(void) { int i; #ifdef FEND_STANDBY_NOSEND - // wen 2003.01.07 前置机为备用机时,不发送变化数据给服务器 + // wen 2003.01.07 鍓嶇疆鏈轰负澶囩敤鏈烘椂锛屼笉鍙戦佸彉鍖栨暟鎹粰鏈嶅姟鍣 if(!IsSendDatatoPort(-1)) return; #endif @@ -1748,7 +1748,7 @@ void SendRtuChangeDataToHost(void) } //*************************************************************** -//* 发送端口统计到主机数据 * +//* 鍙戦佺鍙g粺璁″埌涓绘満鏁版嵁 * //*************************************************************** void SendPortStatisticsToHost(void) { @@ -1782,7 +1782,7 @@ void SendPortStatisticsToHost(void) } //*************************************************************** -//* 发送端口状态到主机数据 * +//* 鍙戦佺鍙g姸鎬佸埌涓绘満鏁版嵁 * //*************************************************************** void SendPortStatusToHost(int flag) { @@ -1799,7 +1799,7 @@ void SendPortStatusToHost(int flag) MsgBuf.EMsgLen = 0; for(i = 0; i < portnum; i++) { - // 将端口状态复位 + // 灏嗙鍙g姸鎬佸浣 pSioParam[i].LineCommCnt++; if ( (((long)pSioParam[i].LineCommCnt*TIMER_CNT)/1000) > 60 ) { @@ -1807,7 +1807,7 @@ void SendPortStatusToHost(int flag) pSioParam[i].Status = FALSE; } - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //MsgBuf.MsgData[i*2] = (BYTE)i; MsgBuf.MsgData[i*2] = (BYTE)(i+FendMsg.iPortOffset); @@ -1818,10 +1818,10 @@ void SendPortStatusToHost(int flag) //SendPortStatisticsToHost(); } -// wen 2003.01.08 前置机向服务器发送全数据时,提取数据值时,应 -// 该判断该值的有效性。这样就不会发生遥信误报警的情况。 +// wen 2003.01.08 鍓嶇疆鏈哄悜鏈嶅姟鍣ㄥ彂閫佸叏鏁版嵁鏃讹紝鎻愬彇鏁版嵁鍊兼椂锛屽簲 +// 璇ュ垽鏂鍊肩殑鏈夋晥鎬с傝繖鏍峰氨涓嶄細鍙戠敓閬ヤ俊璇姤璀︾殑鎯呭喌銆 //*************************************************************** -//* 送端口全数据到主机 * +//* 閫佺鍙e叏鏁版嵁鍒颁富鏈 * //*************************************************************** void SendPortAllDataToHost(void) { @@ -1843,9 +1843,9 @@ void SendPortAllDataToHost(void) // return; #ifdef FEND_STANDBY_NOSEND - // wen 2003.01.07 前置机为备用机时,不发送全数据给服务器 - // 可以省去,因为备用机不做数据处理,其端口状态 PortParam[sendport].Status - // 也不会变为TRUE + // wen 2003.01.07 鍓嶇疆鏈轰负澶囩敤鏈烘椂锛屼笉鍙戦佸叏鏁版嵁缁欐湇鍔″櫒 + // 鍙互鐪佸幓锛屽洜涓哄鐢ㄦ満涓嶅仛鏁版嵁澶勭悊锛屽叾绔彛鐘舵 PortParam[sendport].Status + // 涔熶笉浼氬彉涓篢RUE if(!IsSendDatatoPort(-1)) return; #endif @@ -1879,9 +1879,9 @@ void SendPortAllDataToHost(void) { if(PROTOCOL_MASTER == pSioParam[sendport].m_psBaoHu->PortType) { - // 端口由停运---转为-->正常,需要有1 分钟来刷行该端口数据 - // 否则发送上去的全数据会由于没有完全刷新而出现报警混乱。 - // 最严重的后果是遥信报警反复,即我们所说的误报。 + // 绔彛鐢卞仠杩---杞负-->姝e父锛岄渶瑕佹湁1 鍒嗛挓鏉ュ埛琛岃绔彛鏁版嵁 + // 鍚﹀垯鍙戦佷笂鍘荤殑鍏ㄦ暟鎹細鐢变簬娌℃湁瀹屽叏鍒锋柊鑰屽嚭鐜版姤璀︽贩涔便 + // 鏈涓ラ噸鐨勫悗鏋滄槸閬ヤ俊鎶ヨ鍙嶅锛屽嵆鎴戜滑鎵璇寸殑璇姤銆 //if(pSioParam[sendport].iDelaySendAllData < (60000/TIMER_CNT)) if(pSioParam[sendport].iDelaySendAllData < 60) { @@ -1923,13 +1923,13 @@ void SendPortAllDataToHost(void) //sprintf(szDbg, "SendAllData from port=%d", sendport); //DebugPrint(szDbg); - // wen 2005.06.20 传送32bit模拟量数据 + // wen 2005.06.20 浼犻32bit妯℃嫙閲忔暟鎹 if(FendMsg.iSendAiof32Bit) { - // 发送全遥测 + // 鍙戦佸叏閬ユ祴 SendAllDataBuf.MsgType = PGC3_AI32ALLDATA; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //SendAllDataBuf.PortNumber = sendport; SendAllDataBuf.PortNumber = sendport+FendMsg.iPortOffset; @@ -1966,10 +1966,10 @@ void SendPortAllDataToHost(void) } else { - // 发送全遥测 + // 鍙戦佸叏閬ユ祴 SendAllDataBuf.MsgType = iAIALLDATA; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //SendAllDataBuf.PortNumber = sendport; SendAllDataBuf.PortNumber = sendport+FendMsg.iPortOffset; @@ -2016,10 +2016,10 @@ void SendPortAllDataToHost(void) } } - // 发送全遥信 + // 鍙戦佸叏閬ヤ俊 SendAllDataBuf.MsgType = iDIALLDATA; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //SendAllDataBuf.PortNumber = sendport; SendAllDataBuf.PortNumber = sendport+FendMsg.iPortOffset; @@ -2055,10 +2055,10 @@ void SendPortAllDataToHost(void) } /* - // 发送全离线遥信 + // 鍙戦佸叏绂荤嚎閬ヤ俊 SendAllDataBuf.MsgType = iODALLDATA; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //SendAllDataBuf.PortNumber = sendport; SendAllDataBuf.PortNumber = sendport+FendMsg.iPortOffset; @@ -2092,10 +2092,10 @@ void SendPortAllDataToHost(void) } */ - // 发送全电度 + // 鍙戦佸叏鐢靛害 SendAllDataBuf.MsgType = iPIALLDATA; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //SendAllDataBuf.PortNumber = sendport; SendAllDataBuf.PortNumber = sendport+FendMsg.iPortOffset; @@ -2134,13 +2134,13 @@ void SendPortAllDataToHost(void) } //*************************************************************** -//* 填充 SOE 数据缓冲区 * +//* 濉厖 SOE 鏁版嵁缂撳啿鍖 * //*************************************************************** void SetSoeData(int commidex, SOE_DEF *pSoeData) { int commid; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ commid = commidex + FendMsg.iPortOffset; gRtuChangeMsg[SOEMSGNO].MsgType = iSOEDATA; @@ -2166,13 +2166,13 @@ void SetSoeData(int commidex, SOE_DEF *pSoeData) } //*************************************************************** -//* 填充 遥控遥调返校 数据缓冲区 * +//* 濉厖 閬ユ帶閬ヨ皟杩旀牎 鏁版嵁缂撳啿鍖 * //*************************************************************** void SetYkYtAckData( int portno, char *buf ) { int port; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ //port = portno; port = portno+FendMsg.iPortOffset; @@ -2189,7 +2189,7 @@ void SetYkYtAckData( int portno, char *buf ) gRtuChangeMsg[YKYTACKNO].MsgData[gRtuChangeMsg[YKYTACKNO].MsgLen++] = buf[0];// Point Low gRtuChangeMsg[YKYTACKNO].MsgData[gRtuChangeMsg[YKYTACKNO].MsgLen++] = buf[1];// Point High - gRtuChangeMsg[YKYTACKNO].MsgData[gRtuChangeMsg[YKYTACKNO].MsgLen++] = buf[2];// 返校码 + gRtuChangeMsg[YKYTACKNO].MsgData[gRtuChangeMsg[YKYTACKNO].MsgLen++] = buf[2];// 杩旀牎鐮 } void SelectHostSocketEvent(void) @@ -2223,7 +2223,7 @@ void SelectHostSocketEvent(void) if(inum > 0) { memset((char*)&timeout, 0, sizeof(struct timeval)); - // wen 2005.07.08 设置超时等待时间 + // wen 2005.07.08 璁剧疆瓒呮椂绛夊緟鏃堕棿 //timeout.tv_usec = 200; if(select(nfds+1, &fdset_ro, &fdset_wr, &fdset_ex, &timeout) < 1) { @@ -2237,7 +2237,7 @@ void SelectHostSocketEvent(void) continue; } - // 首先判断socket是否异常 + // 棣栧厛鍒ゆ柇socket鏄惁寮傚父 if(FD_ISSET(HostLink[i].SocketId, &fdset_ex)) { CloseHostSocket(HostLink[i].SocketId, ERROR_CLOSE_NET); @@ -2246,14 +2246,14 @@ void SelectHostSocketEvent(void) if(TRUE == HostLink[i].InitOk) { - // socket可读 + // socket鍙 if(FD_ISSET(HostLink[i].SocketId, &fdset_ro)) { - // 将该socket中的数据读完 + // 灏嗚socket涓殑鏁版嵁璇诲畬 /* if(ReadHost(i) == FALSE) { - // 端口已经关闭 + // 绔彛宸茬粡鍏抽棴 CloseHostSocket(HostLink[i].SocketId, HOST_CLOSE_NET); continue; } @@ -2264,14 +2264,14 @@ void SelectHostSocketEvent(void) */ if(ReadDataFormHost(HostLink[i].SocketId) == FALSE) { - // 关闭SOCKET端口 + // 鍏抽棴SOCKET绔彛 CloseHostSocket(HostLink[i].SocketId, HOST_CLOSE_NET); continue; } } } - // socket可写 + // socket鍙啓 if(FALSE == HostLink[i].InitOk) { if(FD_ISSET(HostLink[i].SocketId, &fdset_wr)) @@ -2308,7 +2308,7 @@ void SelectHostSocketEventEx(void) nfds = HostLink[i].SocketId+1; memset((char*)&timeout, 0, sizeof(struct timeval)); - // wen 2005.07.08 设置超时等待时间 + // wen 2005.07.08 璁剧疆瓒呮椂绛夊緟鏃堕棿 //timeout.tv_usec = 200; if(TRUE == HostLink[i].InitOk) { @@ -2326,7 +2326,7 @@ void SelectHostSocketEventEx(void) } #ifdef OS_WINDOWS - // 首先判断socket是否异常 + // 棣栧厛鍒ゆ柇socket鏄惁寮傚父 if(FD_ISSET(HostLink[i].SocketId, &fdset_ex)) { CloseHostSocket(HostLink[i].SocketId, ERROR_CLOSE_NET); @@ -2336,19 +2336,19 @@ void SelectHostSocketEventEx(void) if(TRUE == HostLink[i].InitOk) { - // socket可读 + // socket鍙 if(FD_ISSET(HostLink[i].SocketId, &fdset_ro)) { if(ReadDataFormHost(HostLink[i].SocketId) == FALSE) { - // 关闭SOCKET端口 + // 鍏抽棴SOCKET绔彛 CloseHostSocket(HostLink[i].SocketId, HOST_CLOSE_NET); continue; } } } - // socket可写 + // socket鍙啓 if(FALSE == HostLink[i].InitOk) { if(FD_ISSET(HostLink[i].SocketId, &fdset_wr)) @@ -2380,28 +2380,28 @@ void TcpHostTimer(void) // sm.Hour, sm.Min, sm.Sec, sm.mSec); //DebugPrint(szDbg); - // 连接 + // 杩炴帴 LinkToHost(); - // 连接是否成功以及对有效端口数据接收 + // 杩炴帴鏄惁鎴愬姛浠ュ強瀵规湁鏁堢鍙f暟鎹帴鏀 //SelectHostSocketEvent(); SelectHostSocketEventEx(); - // 发送数据 + // 鍙戦佹暟鎹 SendHostSendBufToHost(); - // 发送端口状态 + // 鍙戦佺鍙g姸鎬 SendPortStatusToHost(1); - // 发送全数据 + // 鍙戦佸叏鏁版嵁 SendPortAllDataToHost(); - // 2006.01.13 增加前置机到服务器的对时功能 + // 2006.01.13 澧炲姞鍓嶇疆鏈哄埌鏈嶅姟鍣ㄧ殑瀵规椂鍔熻兘 SendSystemTimeToHost(); } //*************************************************************** -//* 向主机请求模拟量 * +//* 鍚戜富鏈鸿姹傛ā鎷熼噺 * //*************************************************************** void MapAnPointToHost(int iMapOutPort, int iMapSavePort) { @@ -2439,7 +2439,7 @@ void MapAnPointToHost(int iMapOutPort, int iMapSavePort) } //*************************************************************** -//* 向主机请求状态量 * +//* 鍚戜富鏈鸿姹傜姸鎬侀噺 * //*************************************************************** void MapDiPointToHost(int iMapOutPort, int iMapSavePort) { @@ -2467,7 +2467,7 @@ void MapDiPointToHost(int iMapOutPort, int iMapSavePort) continue; } - // 主机离线量点为 'X' 类型 + // 涓绘満绂荤嚎閲忕偣涓 'X' 绫诲瀷 MapPointBuf.MsgData[MapPointBuf.MsgLen++] = (u_char)(pProvDi[i].wType == 'o' ? 'x' : pProvDi[i].wType); MapPointBuf.MsgData[MapPointBuf.MsgLen++] = (u_char)pProvDi[i].PortNo; *(short*)&MapPointBuf.MsgData[MapPointBuf.MsgLen] = pProvDi[i].PntNo; @@ -2478,7 +2478,7 @@ void MapDiPointToHost(int iMapOutPort, int iMapSavePort) } //*************************************************************** -//* 主机模拟盘数据处理 * +//* 涓绘満妯℃嫙鐩樻暟鎹鐞 * //*************************************************************** void FormHostMapDataProce(int iMapOutPort, int iMapSavePort, HOSTMSG *msg) { @@ -2532,7 +2532,7 @@ void FormHostMapDataProce(int iMapOutPort, int iMapSavePort, HOSTMSG *msg) int GetFendTxdFlag(void) { - // wen 2006.04.26 如果为并列运行,则下发标识为真 + // wen 2006.04.26 濡傛灉涓哄苟鍒楄繍琛岋紝鍒欎笅鍙戞爣璇嗕负鐪 if(RUN_MODE_ALLHOT == FendMsg.iRunMode) { return TRUE; @@ -2562,7 +2562,7 @@ int CheckIsFendIpAddr(u_long addr) } //*************************************************************** -//* 写变化数据到变化数据缓冲区 * +//* 鍐欏彉鍖栨暟鎹埌鍙樺寲鏁版嵁缂撳啿鍖 * //*************************************************************** void WriteChangeData(int commidex, int point, void *pntmsg, BYTE type) { @@ -2575,14 +2575,14 @@ void WriteChangeData(int commidex, int point, void *pntmsg, BYTE type) //if (WriteChangeFlag == 0) // return; - // wen 2006.01.14 增加端口偏移 + // wen 2006.01.14 澧炲姞绔彛鍋忕Щ commid = commidex + FendMsg.iPortOffset; pRtuChangeMsg = GetRtuChangeMsgPtr(); switch (type) { case AI_PNT_TYPE: - // wen 2006.05.20 传送32bit模拟量数据 + // wen 2006.05.20 浼犻32bit妯℃嫙閲忔暟鎹 if(FendMsg.iSendAiof32Bit) { aiptr = (AI_DEF *)pntmsg; @@ -2609,7 +2609,7 @@ void WriteChangeData(int commidex, int point, void *pntmsg, BYTE type) break; } - // 传送16bit模拟量数据 + // 浼犻16bit妯℃嫙閲忔暟鎹 aiptr = (AI_DEF *)pntmsg; pRtuChangeMsg[AIMSGNO].MsgType = iAIDATA; pRtuChangeMsg[AIMSGNO].EMsgLen = 0; @@ -2720,7 +2720,7 @@ void WriteChangeData(int commidex, int point, void *pntmsg, BYTE type) //WriteProvChangeData(pntmsg, type); } -// 判断该端口是否下发数据 +// 鍒ゆ柇璇ョ鍙f槸鍚︿笅鍙戞暟鎹 BOOL IsSendDatatoPort(int port) { FEND_DEF *pFendMsg; @@ -2729,14 +2729,14 @@ BOOL IsSendDatatoPort(int port) //static int test=0; BOOL bReturn = TRUE; -#ifdef PC_MACHINE // 该条件仅仅在windows模拟环境中有效 +#ifdef PC_MACHINE // 璇ユ潯浠朵粎浠呭湪windows妯℃嫙鐜涓湁鏁 #if (FEND_OTHERDEV_DS3116 == 1) return TRUE; #endif #endif //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.01.14 增加并列运行方式 + // wen 2006.01.14 澧炲姞骞跺垪杩愯鏂瑰紡 /* pFendMsg = GetFendMsgPtr(); if(port < 0) @@ -2751,15 +2751,15 @@ BOOL IsSendDatatoPort(int port) pSioParam = GetSioParamPtr(); switch(pSioParam[port].iForceSendFlag) { - case 1:// 强制下发 + case 1:// 寮哄埗涓嬪彂 //bReturn = TRUE; break; - case 2:// 强制不下发 + case 2:// 寮哄埗涓嶄笅鍙 bReturn = FALSE; break; - case 0:// 正常情况下 + case 0:// 姝e父鎯呭喌涓 default: - // 本前置机不属于主前置机 + // 鏈墠缃満涓嶅睘浜庝富鍓嶇疆鏈 if(pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx] == FALSE) { bReturn = FALSE; @@ -2786,15 +2786,15 @@ BOOL IsSendDatatoPort(int port) pSioParam = GetSioParamPtr(); switch(pSioParam[port].iForceSendFlag) { - case 1:// 强制下发 + case 1:// 寮哄埗涓嬪彂 //bReturn = TRUE; break; - case 2:// 强制不下发 + case 2:// 寮哄埗涓嶄笅鍙 bReturn = FALSE; break; - case 0:// 正常情况下 + case 0:// 姝e父鎯呭喌涓 default: - // 本前置机不属于主前置机 + // 鏈墠缃満涓嶅睘浜庝富鍓嶇疆鏈 if(RUN_MODE_ALLHOT == pFendMsg->iRunMode) { bReturn = TRUE; @@ -2809,7 +2809,7 @@ BOOL IsSendDatatoPort(int port) //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // 两个地方调用,时钟周期为20ms,20×200=4000ms÷2=2s + // 涓や釜鍦版柟璋冪敤锛屾椂閽熷懆鏈熶负20ms锛20脳200=4000ms梅2=2s //if(test == 200) //{ // sprintf(szDbg, "port=%d, SendTxd=%d", port, bReturn); @@ -2841,7 +2841,7 @@ HOSTMSG *GetRtuChangeMsgPtr() #if 0 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 增加字节顺序转换函数 +// 澧炲姞瀛楄妭椤哄簭杞崲鍑芥暟 BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) { int i; @@ -2855,11 +2855,11 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) bRetVal = TRUE; switch(hmsg->MsgType) { - case iREQUESTHOSTSTATUS:// 请求主机状态 + case iREQUESTHOSTSTATUS:// 璇锋眰涓绘満鐘舵 bRetVal = FALSE; break; - case iTIMEINFORM: // 前置机对时 + case iTIMEINFORM: // 鍓嶇疆鏈哄鏃 pTime = (SYSTEMTIME*)hmsg->MsgData; pWord = (WORD *)pSendMsg->MsgData; pWord[0] = SequenceHostToRtuWord(pTime->wYear); @@ -2871,8 +2871,8 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) pWord[6] = SequenceHostToRtuWord(pTime->wMilliseconds); break; - case iAIDATA: // 变化遥测 - case iAIALLDATA: // 遥测全数据 + case iAIDATA: // 鍙樺寲閬ユ祴 + case iAIALLDATA: // 閬ユ祴鍏ㄦ暟鎹 pWord = (WORD *)pSendMsg->MsgData; pwSour = (WORD *)hmsg->MsgData; for(i=0; iMsgLen; i+=2) @@ -2886,8 +2886,8 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) } break; - // wen 2006.05.20 32bit传送模拟量数据(和电度量传送格式一致) - case PGC3_AI32DATA: // 变化32位遥测数据 + // wen 2006.05.20 32bit浼犻佹ā鎷熼噺鏁版嵁(鍜岀數搴﹂噺浼犻佹牸寮忎竴鑷) + case PGC3_AI32DATA: // 鍙樺寲32浣嶉仴娴嬫暟鎹 for(i=0; iMsgLen; i+=6) { if((i+6) > hmsg->MsgLen) @@ -2903,7 +2903,7 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) *plDest = SequenceHostToRtulong(*plSour); } break; - case PGC3_AI32ALLDATA: // 遥测32位全数据 + case PGC3_AI32ALLDATA: // 閬ユ祴32浣嶅叏鏁版嵁 pWord = (WORD *)&pSendMsg->MsgData; pwSour = (WORD *)&hmsg->MsgData; *pWord = SequenceHostToRtuWord(*pwSour); @@ -2921,8 +2921,8 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) } break; - case iDIDATA: // 变化遥信 - case iODDATA: // 离线遥信数据 + case iDIDATA: // 鍙樺寲閬ヤ俊 + case iODDATA: // 绂荤嚎閬ヤ俊鏁版嵁 for(i=0; iMsgLen; i+=3) { if((i+3) > hmsg->MsgLen) @@ -2932,14 +2932,14 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) pWord = (WORD *)&pSendMsg->MsgData[i]; pwSour = (WORD *)&hmsg->MsgData[i]; - // wen 2006.05.20 修改遥信变化数据字节转换的bug,应该为WORD类型 + // wen 2006.05.20 淇敼閬ヤ俊鍙樺寲鏁版嵁瀛楄妭杞崲鐨刡ug锛屽簲璇ヤ负WORD绫诲瀷 //*pWord = SequenceHostToRtuDWord(*pwSour); *pWord = SequenceHostToRtuWord(*pwSour); pSendMsg->MsgData[i+2] = hmsg->MsgData[i+2]; } break; - case iPIDATA: // 变化电度 + case iPIDATA: // 鍙樺寲鐢靛害 for(i=0; iMsgLen; i+=6) { if((i+6) > hmsg->MsgLen) @@ -2956,11 +2956,11 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) } break; - case iSOEDATA: // SOE 数据 + case iSOEDATA: // SOE 鏁版嵁 memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; - case iACKDATA: // 遥控遥调返校 + case iACKDATA: // 閬ユ帶閬ヨ皟杩旀牎 memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; @@ -2982,11 +2982,11 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; - case iODALLDATA: // 离线遥信全数据 + case iODALLDATA: // 绂荤嚎閬ヤ俊鍏ㄦ暟鎹 memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; - case iWUFANGYKYTREQ: // 五防遥控遥调请求 + case iWUFANGYKYTREQ: // 浜旈槻閬ユ帶閬ヨ皟璇锋眰 for(i=0; iMsgLen; i+=8) { if((i+8) > hmsg->MsgLen) @@ -3005,7 +3005,7 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) } break; - case iDIALLDATA: // 遥信全数据 + case iDIALLDATA: // 閬ヤ俊鍏ㄦ暟鎹 pWord = (WORD *)&pSendMsg->MsgData; pwSour = (WORD *)&hmsg->MsgData; *pWord = SequenceHostToRtuWord(*pwSour); @@ -3013,7 +3013,7 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) memcpy(&pSendMsg->MsgData[2], &hmsg->MsgData[2], hmsg->MsgLen-2); break; - case iPIALLDATA: // 电度全数据 + case iPIALLDATA: // 鐢靛害鍏ㄦ暟鎹 pWord = (WORD *)&pSendMsg->MsgData; pwSour = (WORD *)&hmsg->MsgData; *pWord = SequenceHostToRtuWord(*pwSour); @@ -3031,16 +3031,16 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) } break; - case iBYPASSDATA: // 直通数据 + case iBYPASSDATA: // 鐩撮氭暟鎹 memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; - case iODPOINT: // 读离线量点数据 + case iODPOINT: // 璇荤绾块噺鐐规暟鎹 memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; - case iANPOINT: // 读模拟量点数据 - case iDIPOINT: // 读数字量点数据 + case iANPOINT: // 璇绘ā鎷熼噺鐐规暟鎹 + case iDIPOINT: // 璇绘暟瀛楅噺鐐规暟鎹 for(i=0; iMsgLen; i+=4) { if((i+4) > hmsg->MsgLen) @@ -3056,14 +3056,14 @@ BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg) } break; - case iLINESTATUS: // 端口线路状态 + case iLINESTATUS: // 绔彛绾胯矾鐘舵 memcpy(pSendMsg->MsgData, hmsg->MsgData, hmsg->MsgLen); break; - case iNETTESTMSG: // 网络状态包 + case iNETTESTMSG: // 缃戠粶鐘舵佸寘 break; - case iNETNAMEPLATE: // 网络标示包 + case iNETNAMEPLATE: // 缃戠粶鏍囩ず鍖 pSendMsg->MsgData[0] = hmsg->MsgData[0]; pWord = (WORD *)&pSendMsg->MsgData[1]; pwSour = (WORD *)&hmsg->MsgData[1]; @@ -3094,17 +3094,17 @@ BOOL AllDataRtuToHostByteSequence(HOSTMSG *hmsg) bRetVal = TRUE; switch(hmsg->MsgType) { - case hHOSTSTATUS: // 主机状态 + case hHOSTSTATUS: // 涓绘満鐘舵 for(i = 0; i < MAX_HOST; i++) { SequenceRtuToHost((char *)&hmsg->MsgData[i*sizeof(int)], sizeof(int)); } break; - case NET_PROFILE_UPDATE: // 主机下发更改数据库指令 + case NET_PROFILE_UPDATE: // 涓绘満涓嬪彂鏇存敼鏁版嵁搴撴寚浠 break; - case hTIMEINFORM: // 主机对时 + case hTIMEINFORM: // 涓绘満瀵规椂 pTime = (SYSTEMTIME*)hmsg->MsgData; pTime->wYear = SequenceRtuToHostWord(pTime->wYear); pTime->wMonth = SequenceRtuToHostWord(pTime->wMonth); @@ -3115,54 +3115,54 @@ BOOL AllDataRtuToHostByteSequence(HOSTMSG *hmsg) pTime->wMilliseconds = SequenceRtuToHostWord(pTime->wMilliseconds); break; - case hYKYTCMD: // 遥控遥调命令 - if(hmsg->MsgLen >= 10) // 多条遥调遥控命令 + case hYKYTCMD: // 閬ユ帶閬ヨ皟鍛戒护 + if(hmsg->MsgLen >= 10) // 澶氭潯閬ヨ皟閬ユ帶鍛戒护 { - // ??? 多帧的结构 + // ??? 澶氬抚鐨勭粨鏋 SequenceRtuToHost((char *)&hmsg->MsgData[1], 2); } else { - // 遥控遥调反校失败 + // 閬ユ帶閬ヨ皟鍙嶆牎澶辫触 SequenceRtuToHost((char *)&hmsg->MsgData[1], 2); } break; - case hBYPASSCMD: // 直通数据 + case hBYPASSCMD: // 鐩撮氭暟鎹 break; - case hMAPANDATA: // 模拟量点数据 + case hMAPANDATA: // 妯℃嫙閲忕偣鏁版嵁 for(i=0; i<(int)hmsg->MsgLen; i+=4) { SequenceRtuToHost((char *)&hmsg->MsgData[i], sizeof(float)); } break; - case hMAPDIDATA: // 数字量点数据 + case hMAPDIDATA: // 鏁板瓧閲忕偣鏁版嵁 break; - case hDATA_OUTPUT_CTRL: // 数据输出控制 + case hDATA_OUTPUT_CTRL: // 鏁版嵁杈撳嚭鎺у埗 break; - case hRELOADDATABASE: // 重新装入数据库 + case hRELOADDATABASE: // 閲嶆柊瑁呭叆鏁版嵁搴 break; - case hNETTESTMSG: // 网络状态包 + case hNETTESTMSG: // 缃戠粶鐘舵佸寘 break; - case hMAPALLOP: // 模拟盘全盘操作 + case hMAPALLOP: // 妯℃嫙鐩樺叏鐩樻搷浣 switch( hmsg->MsgData[0] ) { - case 0: // 全屏操作 + case 0: // 鍏ㄥ睆鎿嶄綔 SequenceRtuToHost((char *)&hmsg->MsgData[1], sizeof(DWORD)); break; - case 1: // 单点遥测操作 + case 1: // 鍗曠偣閬ユ祴鎿嶄綔 SequenceRtuToHost((char *)&hmsg->MsgData[1], sizeof(WORD)); SequenceRtuToHost((char *)&hmsg->MsgData[3], sizeof(float)); break; - case 2: // 单点遥信操作 + case 2: // 鍗曠偣閬ヤ俊鎿嶄綔 SequenceRtuToHost((char *)&hmsg->MsgData[1], sizeof(WORD)); break; } diff --git a/tcphost.h b/tcphost.h index a654cc9..f2f2431 100644 --- a/tcphost.h +++ b/tcphost.h @@ -21,19 +21,19 @@ * no message * * Revision 1.5 2006/05/26 10:38:03 administrator - * 增加32位模拟量传送 + * 澧炲姞32浣嶆ā鎷熼噺浼犻 * * Revision 1.4 2006/04/22 07:49:26 administrator - * 可以屏蔽网络连接的错误信息,支持端口通讯时不切换主备机及网络连接成功的算法 + * 鍙互灞忚斀缃戠粶杩炴帴鐨勯敊璇俊鎭紝鏀寔绔彛閫氳鏃朵笉鍒囨崲涓诲鏈哄強缃戠粶杩炴帴鎴愬姛鐨勭畻娉 * * Revision 1.2 2006/01/17 06:14:53 Administrator - * 增加对时、装置并列运行以及端口号偏移 + * 澧炲姞瀵规椂銆佽缃苟鍒楄繍琛屼互鍙婄鍙e彿鍋忕Щ * * Revision 1.1 2005/10/20 06:20:34 Administrator - * 新增前置机功能 + * 鏂板鍓嶇疆鏈哄姛鑳 * * Revision 1.1 2005/10/12 06:03:46 Administrator - * 增加前置机功能 + * 澧炲姞鍓嶇疆鏈哄姛鑳 * * **************************************************************************************/ @@ -47,7 +47,7 @@ #include "common.h" -// 另外一个前置机装置是pc还是ds-3116 +// 鍙﹀涓涓墠缃満瑁呯疆鏄痯c杩樻槸ds-3116 #define FEND_OTHERDEV_DS3116 1 #define HOST_CLOSE_NET 1 @@ -57,62 +57,62 @@ #define CHECK_VERSION_FLAG 1 -// 运行方式是主备方式 +// 杩愯鏂瑰紡鏄富澶囨柟寮 #define RUN_MODE_STANDBY 0 -// 并列方式,同时运行 +// 骞跺垪鏂瑰紡锛屽悓鏃惰繍琛 #define RUN_MODE_ALLHOT 1 -//**************** 端口数据类型 ************************ -#define iCOMM_DATA 0x10 // RTU数据包类型 +//**************** 绔彛鏁版嵁绫诲瀷 ************************ +#define iCOMM_DATA 0x10 // RTU鏁版嵁鍖呯被鍨 -//************ 前置机 --> 主机 数据类型 **************** -#define iREQUESTHOSTSTATUS 0x14 // 请求主机状态 -#define iTIMEINFORM 0x2c // 前置机对时 -#define iAIDATA 0x31 // 变化遥测 -#define iDIDATA 0x32 // 变化遥信 -#define iPIDATA 0x33 // 变化电度 -#define iSOEDATA 0x34 // SOE 数据 -#define iACKDATA 0x35 // 遥控遥调返校 +//************ 鍓嶇疆鏈 --> 涓绘満 鏁版嵁绫诲瀷 **************** +#define iREQUESTHOSTSTATUS 0x14 // 璇锋眰涓绘満鐘舵 +#define iTIMEINFORM 0x2c // 鍓嶇疆鏈哄鏃 +#define iAIDATA 0x31 // 鍙樺寲閬ユ祴 +#define iDIDATA 0x32 // 鍙樺寲閬ヤ俊 +#define iPIDATA 0x33 // 鍙樺寲鐢靛害 +#define iSOEDATA 0x34 // SOE 鏁版嵁 +#define iACKDATA 0x35 // 閬ユ帶閬ヨ皟杩旀牎 #define WUXI_ZHUANFA_AI_TO_HOST 0x36 #define WUXI_ZHUANFA_DI_TO_HOST iDIALLDATA #define WUXI_ZHUANFA_PI_TO_HOST 0x37 -#define iODDATA 0x38 // 离线遥信数据 -#define iODALLDATA 0x39 // 离线遥信全数据 -#define iWUFANGYKYTREQ 0x3d // 五防遥控遥调请求 - -#define iAIALLDATA 0x40 // 遥测全数据 -#define iDIALLDATA 0x41 // 遥信全数据 -#define iPIALLDATA 0x42 // 电度全数据 -// wen 2006.05.20 32bit传送模拟量数据 -#define PGC3_AI32DATA 0x45 // 变化32位遥测数据 -#define PGC3_AI32ALLDATA 0x46 // 遥测32位全数据 - -#define iBYPASSDATA 0x50 // 直通数据 - -#define iODPOINT 0x81 // 读离线量点数据 -#define iANPOINT 0x82 // 读模拟量点数据 -#define iDIPOINT 0x83 // 读数字量点数据 -#define iLINESTATUS 0x84 // 端口线路状态 -#define iNETTESTMSG 0xf0 // 网络状态包 -#define iNETNAMEPLATE 0xef // 网络标示包 - -//************ 主机 --> 前置机 数据类型 **************** -#define hHOSTSTATUS 0x15 // 主机状态 -#define NET_PROFILE_UPDATE 0x1B // 主机下发更改数据库指令 -#define hTIMEINFORM 0x2c // 主机对时 -#define hYKYTCMD 0x35 // 遥控遥调命令 -#define hBYPASSCMD 0x50 // 直通数据 -#define hMAPANDATA 0x82 // 模拟量点数据 -#define hMAPDIDATA 0x83 // 数字量点数据 -#define hDATA_OUTPUT_CTRL 0x85 // 数据输出控制 -#define hRELOADDATABASE 0x86 // 重新装入数据库 -#define hNETTESTMSG 0xf0 // 网络状态包 -#define hMAPALLOP 0xf4 // 模拟盘全盘操作 - - -//*********************数据缓冲区************************ +#define iODDATA 0x38 // 绂荤嚎閬ヤ俊鏁版嵁 +#define iODALLDATA 0x39 // 绂荤嚎閬ヤ俊鍏ㄦ暟鎹 +#define iWUFANGYKYTREQ 0x3d // 浜旈槻閬ユ帶閬ヨ皟璇锋眰 + +#define iAIALLDATA 0x40 // 閬ユ祴鍏ㄦ暟鎹 +#define iDIALLDATA 0x41 // 閬ヤ俊鍏ㄦ暟鎹 +#define iPIALLDATA 0x42 // 鐢靛害鍏ㄦ暟鎹 +// wen 2006.05.20 32bit浼犻佹ā鎷熼噺鏁版嵁 +#define PGC3_AI32DATA 0x45 // 鍙樺寲32浣嶉仴娴嬫暟鎹 +#define PGC3_AI32ALLDATA 0x46 // 閬ユ祴32浣嶅叏鏁版嵁 + +#define iBYPASSDATA 0x50 // 鐩撮氭暟鎹 + +#define iODPOINT 0x81 // 璇荤绾块噺鐐规暟鎹 +#define iANPOINT 0x82 // 璇绘ā鎷熼噺鐐规暟鎹 +#define iDIPOINT 0x83 // 璇绘暟瀛楅噺鐐规暟鎹 +#define iLINESTATUS 0x84 // 绔彛绾胯矾鐘舵 +#define iNETTESTMSG 0xf0 // 缃戠粶鐘舵佸寘 +#define iNETNAMEPLATE 0xef // 缃戠粶鏍囩ず鍖 + +//************ 涓绘満 --> 鍓嶇疆鏈 鏁版嵁绫诲瀷 **************** +#define hHOSTSTATUS 0x15 // 涓绘満鐘舵 +#define NET_PROFILE_UPDATE 0x1B // 涓绘満涓嬪彂鏇存敼鏁版嵁搴撴寚浠 +#define hTIMEINFORM 0x2c // 涓绘満瀵规椂 +#define hYKYTCMD 0x35 // 閬ユ帶閬ヨ皟鍛戒护 +#define hBYPASSCMD 0x50 // 鐩撮氭暟鎹 +#define hMAPANDATA 0x82 // 妯℃嫙閲忕偣鏁版嵁 +#define hMAPDIDATA 0x83 // 鏁板瓧閲忕偣鏁版嵁 +#define hDATA_OUTPUT_CTRL 0x85 // 鏁版嵁杈撳嚭鎺у埗 +#define hRELOADDATABASE 0x86 // 閲嶆柊瑁呭叆鏁版嵁搴 +#define hNETTESTMSG 0xf0 // 缃戠粶鐘舵佸寘 +#define hMAPALLOP 0xf4 // 妯℃嫙鐩樺叏鐩樻搷浣 + + +//*********************鏁版嵁缂撳啿鍖************************ #define AIMSGNO 0 #define DIMSGNO 1 #define SOEMSGNO 2 @@ -131,10 +131,10 @@ typedef struct tagTCP_SEND_DATA_BUF typedef struct tagTCP_RCV_DATA_BUF { - int MsgCnt __attribute__ ((packed));// 信息内容计数 - int Front __attribute__ ((packed));// 信息取数指针 - int Rear __attribute__ ((packed));// 信息存入指针 - BYTE MsgData[MAX_NET_BUF] __attribute__ ((packed));// 信息数据 + int MsgCnt __attribute__ ((packed));// 淇℃伅鍐呭璁℃暟 + int Front __attribute__ ((packed));// 淇℃伅鍙栨暟鎸囬拡 + int Rear __attribute__ ((packed));// 淇℃伅瀛樺叆鎸囬拡 + BYTE MsgData[MAX_NET_BUF] __attribute__ ((packed));// 淇℃伅鏁版嵁 } TCP_RCV_DATA_BUF; typedef struct tagFEND_DEF @@ -156,36 +156,36 @@ typedef struct tagFEND_DEF int SendTxdDataFlag[MAX_FEND] __attribute__ ((packed)); - // wen 2006.01.14 增加装置的起始厂站号的偏移 + // wen 2006.01.14 澧炲姞瑁呯疆鐨勮捣濮嬪巶绔欏彿鐨勫亸绉 int iPortOffset __attribute__ ((packed)); int iRunMode __attribute__ ((packed)); - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) int iPortMask __attribute__ ((packed)); - // wen 2006.05.20 32bit传送模拟量数据 + // wen 2006.05.20 32bit浼犻佹ā鎷熼噺鏁版嵁 int iSendAiof32Bit __attribute__ ((packed)); } FEND_DEF; typedef struct tagTCP_LINK_DEF { - u_char InitFlag __attribute__ ((packed));// 初始化标志 - u_char InitOk __attribute__ ((packed));// 初始化成功标志 - long InitLinkCnt __attribute__ ((packed));// 初始化计数 - - char ExistFlag __attribute__ ((packed));// 存在标志 - u_char CommFlag __attribute__ ((packed));// 通讯标志 - u_char Status __attribute__ ((packed));// 工作状态 - long StatusCnt __attribute__ ((packed));// 状态计数 - SOCKET SocketId __attribute__ ((packed));// 连接号 + u_char InitFlag __attribute__ ((packed));// 鍒濆鍖栨爣蹇 + u_char InitOk __attribute__ ((packed));// 鍒濆鍖栨垚鍔熸爣蹇 + long InitLinkCnt __attribute__ ((packed));// 鍒濆鍖栬鏁 + + char ExistFlag __attribute__ ((packed));// 瀛樺湪鏍囧織 + u_char CommFlag __attribute__ ((packed));// 閫氳鏍囧織 + u_char Status __attribute__ ((packed));// 宸ヤ綔鐘舵 + long StatusCnt __attribute__ ((packed));// 鐘舵佽鏁 + SOCKET SocketId __attribute__ ((packed));// 杩炴帴鍙 - u_char LinkType __attribute__ ((packed));// 连接类型 + u_char LinkType __attribute__ ((packed));// 杩炴帴绫诲瀷 char CurLinkIdx __attribute__ ((packed)); - u_char TcpIpAddr[MAX_ADDR][TCPIP_ADDR_LEN] __attribute__ ((packed));// Tcp/Ip 地址 + u_char TcpIpAddr[MAX_ADDR][TCPIP_ADDR_LEN] __attribute__ ((packed));// Tcp/Ip 鍦板潃 - u_char VersionFalgByte __attribute__ ((packed));// 服务器版本号标志 - int RevHostStatusMsg __attribute__ ((packed));// 接收主机广播信息 + u_char VersionFalgByte __attribute__ ((packed));// 鏈嶅姟鍣ㄧ増鏈彿鏍囧織 + int RevHostStatusMsg __attribute__ ((packed));// 鎺ユ敹涓绘満骞挎挱淇℃伅 char NetNameplateFalg __attribute__ ((packed)); @@ -193,37 +193,37 @@ typedef struct tagTCP_LINK_DEF } TCP_LINK_DEF; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 兼容老系统的RTUMSG结构 +// 鍏煎鑰佺郴缁熺殑RTUMSG缁撴瀯 typedef struct tagORTUMSGHEAD { - u_char MsgType __attribute__ ((packed));// 信息类型 - u_char PortNumber __attribute__ ((packed));// 信息端口号 - short MsgLen __attribute__ ((packed));// 信息长度 + u_char MsgType __attribute__ ((packed));// 淇℃伅绫诲瀷 + u_char PortNumber __attribute__ ((packed));// 淇℃伅绔彛鍙 + short MsgLen __attribute__ ((packed));// 淇℃伅闀垮害 } ORTUMSGHEAD; typedef struct tagORTUMSG { - u_char MsgType __attribute__ ((packed));// 信息类型 - u_char PortNumber __attribute__ ((packed));// 信息端口号 - short MsgLen __attribute__ ((packed));// 信息长度 - u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 信息数据 + u_char MsgType __attribute__ ((packed));// 淇℃伅绫诲瀷 + u_char PortNumber __attribute__ ((packed));// 淇℃伅绔彛鍙 + short MsgLen __attribute__ ((packed));// 淇℃伅闀垮害 + u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 淇℃伅鏁版嵁 } ORTUMSG; typedef struct tagHOSTMSGHEAD { - WORD MsgType __attribute__ ((packed));// 信息类型 - WORD PortNumber __attribute__ ((packed));// 信息端口号 - WORD MsgLen __attribute__ ((packed));// 信息长度 - WORD EMsgLen __attribute__ ((packed));// 扩展信息长度 + WORD MsgType __attribute__ ((packed));// 淇℃伅绫诲瀷 + WORD PortNumber __attribute__ ((packed));// 淇℃伅绔彛鍙 + WORD MsgLen __attribute__ ((packed));// 淇℃伅闀垮害 + WORD EMsgLen __attribute__ ((packed));// 鎵╁睍淇℃伅闀垮害 } HOSTMSGHEAD; typedef struct tagHOSTMSG { - WORD MsgType __attribute__ ((packed));// 信息类型 - WORD PortNumber __attribute__ ((packed));// 信息端口号 - WORD MsgLen __attribute__ ((packed));// 信息长度 - WORD EMsgLen __attribute__ ((packed));// 扩展信息长度 - u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 信息数据 + WORD MsgType __attribute__ ((packed));// 淇℃伅绫诲瀷 + WORD PortNumber __attribute__ ((packed));// 淇℃伅绔彛鍙 + WORD MsgLen __attribute__ ((packed));// 淇℃伅闀垮害 + WORD EMsgLen __attribute__ ((packed));// 鎵╁睍淇℃伅闀垮害 + u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 淇℃伅鏁版嵁 } HOSTMSG; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ BOOL GetConfigName(char *szFileName, int iFileNameLen, int IsPortConfig); @@ -253,7 +253,7 @@ void SendHostSendBufToHost(void); void ClearSendBuffer(int hostid); void ClearRecvBuffer(int hostid); -// 服务器数据处理及发送 +// 鏈嶅姟鍣ㄦ暟鎹鐞嗗強鍙戦 void HostDataProceWithSignalYkYt(HOSTMSG *hmsg); void HostDataProce(HOSTMSG *hostmsg); void SendRtuChangeDataToHost(void); @@ -267,30 +267,30 @@ void SelectHostSocketEvent(void); void SelectHostSocketEventEx(void); void TcpHostTimer(void); -// 服务器模拟盘数据处理 +// 鏈嶅姟鍣ㄦā鎷熺洏鏁版嵁澶勭悊 void MapAnPointToHost(int iMapOutPort, int iMapSavePort); void MapDiPointToHost(int iMapOutPort, int iMapSavePort); void FormHostMapDataProce(int iMapOutPort, int iMapSavePort, HOSTMSG *msg); -// 获取前置机的下发标识 +// 鑾峰彇鍓嶇疆鏈虹殑涓嬪彂鏍囪瘑 int GetFendTxdFlag(void); -// 判断网络地址是否是前置机地址 +// 鍒ゆ柇缃戠粶鍦板潃鏄惁鏄墠缃満鍦板潃 int CheckIsFendIpAddr(u_long addr); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 前置机功能函数 +// 鍓嶇疆鏈哄姛鑳藉嚱鏁 void WriteChangeData(int commidex, int point, void *pntmsg, BYTE type); BOOL IsSendDatatoPort(int port); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 获取全局变量 +// 鑾峰彇鍏ㄥ眬鍙橀噺 TCP_LINK_DEF *GetHostLinkPtr(); FEND_DEF *GetFendMsgPtr(); HOSTMSG *GetRtuChangeMsgPtr(); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// 增加字节顺序转换函数 +// 澧炲姞瀛楄妭椤哄簭杞崲鍑芥暟 BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg); BOOL AllDataRtuToHostByteSequence(HOSTMSG *hmsg); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/typedef.h b/typedef.h index 3ecc03c..7a7e019 100644 --- a/typedef.h +++ b/typedef.h @@ -2,14 +2,14 @@ * * Copyright (C) 1999-2000 SCADA Technology Control Co., Ltd. All rights reserved. * -* 作者: 杨小波 +* 浣滆: 鏉ㄥ皬娉 * -* 日期: 2001/08/07 +* 鏃ユ湡: 2001/08/07 * -* 说明: -* 最基本的类型定义. -* 1: 基本类型的长度(字节单位) -* 2: 定义可移植类型 +* 璇存槑: +* 鏈鍩烘湰鐨勭被鍨嬪畾涔. +* 1: 鍩烘湰绫诲瀷鐨勯暱搴(瀛楄妭鍗曚綅) +* 2: 瀹氫箟鍙Щ妞嶇被鍨 * *************************************************************************************/ @@ -19,21 +19,21 @@ * \if developer_doc * \file * - * \brief 最基本的类型定义 + * \brief 鏈鍩烘湰鐨勭被鍨嬪畾涔 * * id: $Id: typedef.h,v 1.2 2006/08/04 03:37:33 zhuzhenhua Exp $ * - * \author 杨小波 prcharold@sina.com.cn develop1@szscada.com + * \author 鏉ㄥ皬娉 prcharold@sina.com.cn develop1@szscada.com * \endif */ #include /*! - * 定义最基本的类型, 这些类型可以在不同的操作系统中保持字节长度不变, - * 便于在不同的操作系统环境中, PGC系列软件之间交换数据和文件 + * 瀹氫箟鏈鍩烘湰鐨勭被鍨, 杩欎簺绫诲瀷鍙互鍦ㄤ笉鍚岀殑鎿嶄綔绯荤粺涓繚鎸佸瓧鑺傞暱搴︿笉鍙, + * 渚夸簬鍦ㄤ笉鍚岀殑鎿嶄綔绯荤粺鐜涓, PGC绯诲垪杞欢涔嬮棿浜ゆ崲鏁版嵁鍜屾枃浠 * - * 单字节数据类型 //(SIZE_OF_CHAR = sizeof(char)) + * 鍗曞瓧鑺傛暟鎹被鍨 //(SIZE_OF_CHAR = sizeof(char)) */ #define SIZE_OF_CHAR 1 @@ -56,7 +56,7 @@ typedef unsigned char BYTE; #define SIZE_OF_SHORT 2 /*! - * 双字节 //(SIZE_OF_SHORT = sizeof(short)) + * 鍙屽瓧鑺 //(SIZE_OF_SHORT = sizeof(short)) */ #if SIZE_OF_SHORT == 2 typedef short pgc16; @@ -75,7 +75,7 @@ typedef unsigned short WORD; #define SIZE_OF_LONG 4 #define SIZE_OF_INT 4 /*! - * 双字节 (SIZE_OF_LONG = sizeof(long)) + * 鍙屽瓧鑺 (SIZE_OF_LONG = sizeof(long)) */ #if SIZE_OF_LONG == 4 && SIZE_OF_INT == 4 typedef int pgc32; @@ -114,7 +114,7 @@ typedef unsigned int DWORD; #define SIZE_OF_LONG 8 /*! - * 8字节 (SIZE_OF_LONG == sizeof(long)) + * 8瀛楄妭 (SIZE_OF_LONG == sizeof(long)) */ #if SIZE_OF_LONG == 8 typedef long pgc64; @@ -147,7 +147,7 @@ typedef u_int64_t DDWORD; #define SIZE_OF_PTR 4 /*! - * 指针 (SIZE_OF_PTR == sizeof(void *)) + * 鎸囬拡 (SIZE_OF_PTR == sizeof(void *)) */ #if SIZE_OF_PTR == 4 typedef pgc32 PGCPTR; @@ -165,7 +165,7 @@ typedef pgcu64 UPTR; /*! - * PGCBOOL自定义类型 -- 表达SCADA布尔量 + * PGCBOOL鑷畾涔夌被鍨 -- 琛ㄨ揪SCADA甯冨皵閲 */ //#ifndef __PGCBOOL_DEF__ //#define __PGCBOOL_DEF__ @@ -181,64 +181,64 @@ typedef pgcu8 PGCBOOL; //#endif // OS_WINDOWS /*! - * ipc别名定义. + * ipc鍒悕瀹氫箟. * - * 共享内存键值, 共享内存id, 信号量键值, 信号量id, 消息队列键值, 消息队列id + * 鍏变韩鍐呭瓨閿, 鍏变韩鍐呭瓨id, 淇″彿閲忛敭鍊, 淇″彿閲廼d, 娑堟伅闃熷垪閿, 娑堟伅闃熷垪id * */ -typedef key_t shmkey_t, SHMKEY_t; // 共享内存键值 -typedef int shmid_t, SHMID_t; // 共享内存id +typedef key_t shmkey_t, SHMKEY_t; // 鍏变韩鍐呭瓨閿 +typedef int shmid_t, SHMID_t; // 鍏变韩鍐呭瓨id -typedef key_t semkey_t, SEMKEY_t; // 信号量键值 -typedef int semid_t, SEMID_t; // 信号量id +typedef key_t semkey_t, SEMKEY_t; // 淇″彿閲忛敭鍊 +typedef int semid_t, SEMID_t; // 淇″彿閲廼d -typedef key_t msgkey_t, MSGKEY_t; // 消息队列键值 -typedef int msgid_t, MSGID_t; // 消息队列id +typedef key_t msgkey_t, MSGKEY_t; // 娑堟伅闃熷垪閿 +typedef int msgid_t, MSGID_t; // 娑堟伅闃熷垪id /*! - * 无效的共享内存映射地址(-1) + * 鏃犳晥鐨勫叡浜唴瀛樻槧灏勫湴鍧(-1) */ #define SHM_ADDR_INVALID ((void *)(-1)) /*! - * 和windows兼容的布尔类型定义BOOL + * 鍜寃indows鍏煎鐨勫竷灏旂被鍨嬪畾涔塀OOL */ typedef int BOOL; /*! CAUTIOUS -* 如果, 以后站号, 点号类型的数据类型定义发生变化, 则需要修改该行 +* 濡傛灉, 浠ュ悗绔欏彿, 鐐瑰彿绫诲瀷鐨勬暟鎹被鍨嬪畾涔夊彂鐢熷彉鍖, 鍒欓渶瑕佷慨鏀硅琛 * -* 站号, 点号类型定义 +* 绔欏彿, 鐐瑰彿绫诲瀷瀹氫箟 */ typedef int32 stn_no_t; typedef int32 pnt_no_t; /*! - * 历史数据采样类型定义 + * 鍘嗗彶鏁版嵁閲囨牱绫诲瀷瀹氫箟 */ typedef i_8 sampling_type_t; /*! - * 在TRU64上, pthread_t的长度等于8, 而在linux(intel)上, pthread_t的长度 - * 等于4, 所以为了兼容, 定义thd_id_t的长度为8个字节, 因此, 在非64位平台 - * 上, 使用一个结构来代替 + * 鍦═RU64涓, pthread_t鐨勯暱搴︾瓑浜8, 鑰屽湪linux(intel)涓, pthread_t鐨勯暱搴 + * 绛変簬4, 鎵浠ヤ负浜嗗吋瀹, 瀹氫箟thd_id_t鐨勯暱搴︿负8涓瓧鑺, 鍥犳, 鍦ㄩ潪64浣嶅钩鍙 + * 涓, 浣跨敤涓涓粨鏋勬潵浠f浛 * - * 线程标识符(id)类型定义 + * 绾跨▼鏍囪瘑绗(id)绫诲瀷瀹氫箟 */ -#if defined(OS_LINUX) // unix平台(肯定使用posix线程库) +#if defined(OS_LINUX) // unix骞冲彴(鑲畾浣跨敤posix绾跨▼搴) #if SIZE_OF_PTHREAD_T == 8 typedef pthread_t thd_id_t; #elif SIZE_OF_PTHREAD_T == 4 typedef struct { - //! 低32位上定义thd_id + //! 浣32浣嶄笂瀹氫箟thd_id pthread_t thd_id; - //! 高32位保留 + //! 楂32浣嶄繚鐣 i_32 reserved; } thd_id_t; @@ -249,10 +249,10 @@ typedef i_8 sampling_type_t; #elif SIZE_OF_PTHREAD_T == 4 typedef struct { - //! 低32位上定义thd_id + //! 浣32浣嶄笂瀹氫箟thd_id u_32 thd_id; - //! 高32位保留 + //! 楂32浣嶄繚鐣 i_32 reserved; } thd_id_t; @@ -260,9 +260,9 @@ typedef i_8 sampling_type_t; #endif /*! - * 便于移植和修改的数据类型定义. + * 渚夸簬绉绘鍜屼慨鏀圭殑鏁版嵁绫诲瀷瀹氫箟. * - * 网络套接字类型 + * 缃戠粶濂楁帴瀛楃被鍨 */ typedef int socket_t, SOCKET_t; @@ -275,7 +275,7 @@ typedef int socket_t, SOCKET_t; #endif //end of defined(__unix) /*! - * ip地址定义 + * ip鍦板潃瀹氫箟 */ //typedef u_32 ip_addr_t; @@ -297,13 +297,13 @@ typedef int socket_t, SOCKET_t; * no message * * Revision 1.10 2003/08/01 06:36:19 scada -* 在Win32平台上借用__int64定义64bit的整数 +* 鍦╓in32骞冲彴涓婂熺敤__int64瀹氫箟64bit鐨勬暣鏁 * * Revision 1.9 2003/07/01 01:31:01 scada * no message * * Revision 1.8 2003/06/05 03:56:15 jehu -* 将注释修改为符合doxgen工具提取开发文档 +* 灏嗘敞閲婁慨鏀逛负绗﹀悎doxgen宸ュ叿鎻愬彇寮鍙戞枃妗 * * Revision 1.7 2003/01/10 10:38:40 scada * no message @@ -321,7 +321,7 @@ typedef int socket_t, SOCKET_t; * revised errors and warning under solaris/CC environment * * Revision 1.2 2002/08/26 02:07:32 harold -* 重新定义stn_no_t, pnt_no_t, sampling_type_t, 由无符号整数-->有符号整数 +* 閲嶆柊瀹氫箟stn_no_t, pnt_no_t, sampling_type_t, 鐢辨棤绗﹀彿鏁存暟-->鏈夌鍙锋暣鏁 * * Revision 1.1.1.1 2002/08/21 07:16:36 harold * temporarily import @@ -357,15 +357,15 @@ typedef int socket_t, SOCKET_t; * no message * * Revision 1.2 2002/01/15 08:44:34 harold -* 添加线程id类型定义thd_id_t +* 娣诲姞绾跨▼id绫诲瀷瀹氫箟thd_id_t * * Revision 1.1.1.1 2001/12/24 09:33:23 harold * no message * * Revision 1.2 2001/12/24 06:39:57 harold -* 为了适应不同的操作系统, 不同的CPU类型, 及不同的编译器, -* 对头文件做了相应的修改, 同时添加了一些宏定义, 如: -* HAVE__FUNCTION__, __OS__, __PLATFORM__,__TIMEZONE__等等. +* 涓轰簡閫傚簲涓嶅悓鐨勬搷浣滅郴缁, 涓嶅悓鐨凜PU绫诲瀷, 鍙婁笉鍚岀殑缂栬瘧鍣, +* 瀵瑰ご鏂囦欢鍋氫簡鐩稿簲鐨勪慨鏀, 鍚屾椂娣诲姞浜嗕竴浜涘畯瀹氫箟, 濡: +* HAVE__FUNCTION__, __OS__, __PLATFORM__,__TIMEZONE__绛夌瓑. * * * diff --git a/udpcomm.cpp b/udpcomm.cpp index 16f4da8..53265fe 100644 --- a/udpcomm.cpp +++ b/udpcomm.cpp @@ -65,19 +65,19 @@ void GetHostIpAddr(void) HostIpAddr.AllIpAddr[i] = ntohl(inaddr.S_un.S_addr); - if(IN_CLASSA(HostIpAddr.AllIpAddr[i])) /*A类地址*/ + if(IN_CLASSA(HostIpAddr.AllIpAddr[i])) /*A绫诲湴鍧*/ { HostIpAddr.NetMaskIpAddr[i] = IN_CLASSA_NET; HostIpAddr.MainIpAddr[i] = (HostIpAddr.AllIpAddr[i] & IN_CLASSA_NET); HostIpAddr.BroadCastIpAddr[i] = (HostIpAddr.AllIpAddr[i] & IN_CLASSA_NET) | IN_CLASSA_HOST; } - else if(IN_CLASSB(HostIpAddr.AllIpAddr[i])) /*B类地址*/ + else if(IN_CLASSB(HostIpAddr.AllIpAddr[i])) /*B绫诲湴鍧*/ { HostIpAddr.NetMaskIpAddr[i] = IN_CLASSB_NET; HostIpAddr.MainIpAddr[i] = (HostIpAddr.AllIpAddr[i] & IN_CLASSB_NET); HostIpAddr.BroadCastIpAddr[i] = (HostIpAddr.AllIpAddr[i] & IN_CLASSB_NET) | IN_CLASSB_HOST; } - else if(IN_CLASSC(HostIpAddr.AllIpAddr[i])) /*C类地址*/ + else if(IN_CLASSC(HostIpAddr.AllIpAddr[i])) /*C绫诲湴鍧*/ { HostIpAddr.NetMaskIpAddr[i] = IN_CLASSC_NET; HostIpAddr.MainIpAddr[i] = (HostIpAddr.AllIpAddr[i] & IN_CLASSC_NET); @@ -86,7 +86,7 @@ void GetHostIpAddr(void) } } -//创建用于系统配置的UDP socket +//鍒涘缓鐢ㄤ簬绯荤粺閰嶇疆鐨刄DP socket void CreatUdpSetSock(void) { int tmp; @@ -119,24 +119,24 @@ void CreatUdpSetSock(void) return; } - // wen 2005.12.01 在这里初始化数据 + // wen 2005.12.01 鍦ㄨ繖閲屽垵濮嬪寲鏁版嵁 InitGlobalMember(); - //设置socket输入输出绶冲 + //璁剧疆socket杈撳叆杈撳嚭缁跺啿 tmp = MAX_NET_BUF_SIZE; setsockopt(UdpParam.Socket, SOL_SOCKET, SO_RCVBUF, (char*)&tmp, sizeof(tmp)); tmp = MAX_NET_BUF_SIZE; setsockopt(UdpParam.Socket, SOL_SOCKET, SO_SNDBUF, (char*)&tmp, sizeof(tmp)); tmp = 1; - setsockopt(UdpParam.Socket, SOL_SOCKET, SO_BROADCAST, (char*)&tmp, sizeof(tmp)); // 广播 + setsockopt(UdpParam.Socket, SOL_SOCKET, SO_BROADCAST, (char*)&tmp, sizeof(tmp)); // 骞挎挱 - //让配置socket 能收不同网段的配置命令 + //璁╅厤缃畇ocket 鑳芥敹涓嶅悓缃戞鐨勯厤缃懡浠 memset(&UdpParam.Addr, 0, sizeof(UdpParam.Addr)); UdpParam.Addr.sin_family = AF_INET; UdpParam.Addr.sin_port = htons(UdpParam.PortNumber); - // wen 2005.03.08 修改ip为指定的地址 + // wen 2005.03.08 淇敼ip涓烘寚瀹氱殑鍦板潃 UdpParam.Addr.sin_addr.s_addr = htonl(INADDR_ANY); //UdpParam.Addr.sin_addr.s_addr = inet_addr("192.168.1.200"); @@ -172,10 +172,10 @@ int CheckIsMySelftIpAddr(u_long addr) } } -// 定义前置机功能 +// 瀹氫箟鍓嶇疆鏈哄姛鑳 #ifdef FUNCTION_FEND #if (FEND_OTHERDEV_DS3116 == 0) - // 非ds-3116设备时,需要用他来确定是否为另一个前置机 + // 闈瀌s-3116璁惧鏃讹紝闇瑕佺敤浠栨潵纭畾鏄惁涓哄彟涓涓墠缃満 return CheckIsFendIpAddr(addr); #endif #endif @@ -198,7 +198,7 @@ int CheckIsCurDevIpAddr(u_long addr) return false; } -//接收网络配置网络命令 +//鎺ユ敹缃戠粶閰嶇疆缃戠粶鍛戒护 void SetUdpRecv(void) { struct timeval outtime; @@ -220,7 +220,7 @@ void SetUdpRecv(void) for(; ;) { - //异步收 + //寮傛鏀 if(select(FD_SETSIZE, &set, NULL, NULL, &outtime) < 1) break; @@ -230,7 +230,7 @@ void SetUdpRecv(void) break; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2005.09.28 增加对udp通讯端口的显示 + // wen 2005.09.28 澧炲姞瀵箄dp閫氳绔彛鐨勬樉绀 if(RealDataDispFlag) { if((CurPort == GetMaxPort()) && (CheckIsCurDevIpAddr(ntohl(UdpParam.Addr.sin_addr.s_addr)))) @@ -282,7 +282,7 @@ void SetUdpRecv(void) } } -//发送配置命令,引入IP地址,可以自由采用点对点,全网广播发送方式 +//鍙戦侀厤缃懡浠わ紝寮曞叆IP鍦板潃锛屽彲浠ヨ嚜鐢遍噰鐢ㄧ偣瀵圭偣锛屽叏缃戝箍鎾彂閫佹柟寮 int SetUdpSend(u_long ipaddr, char *buf, int len) { struct sockaddr_in addr; @@ -293,9 +293,9 @@ int SetUdpSend(u_long ipaddr, char *buf, int len) return false; } -// 定义前置机功能 +// 瀹氫箟鍓嶇疆鏈哄姛鑳 #ifdef FUNCTION_FEND - // wen 2005.10.12 增加是否下发前置机的判断 + // wen 2005.10.12 澧炲姞鏄惁涓嬪彂鍓嶇疆鏈虹殑鍒ゆ柇 #if (FEND_OTHERDEV_DS3116 == 0) if(GetFendTxdFlag() == 0) { @@ -349,7 +349,7 @@ int SetUdpSend(u_long ipaddr, char *buf, int len) } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2005.09.28 增加对udp通讯端口的显示 + // wen 2005.09.28 澧炲姞瀵箄dp閫氳绔彛鐨勬樉绀 /*if((CurPort == msg->PortIdx) && RealDataDispFlag) { if(SDS_SIO_SEND_DATA == wType) @@ -377,7 +377,7 @@ int SetUdpSend(u_long ipaddr, char *buf, int len) return true; } -//填充配置结果,返包到上行绶冲 +//濉厖閰嶇疆缁撴灉锛岃繑鍖呭埌涓婅缁跺啿 int FillAndSendCmd(u_long ipaddr, u_char port, WORD cmd, u_char *retbuf, int len) { RTUMSG rtumsg; @@ -478,9 +478,9 @@ void AddDispLine(DISP_LINE_BUF *dispbuf, char *msg) strcpy(dispbuf->Line[dispbuf->Rear], szbuf); dispbuf->Rear = (dispbuf->Rear + 1) % MAX_DISP_LINE; - // 当缓冲区满后, 丢掉前半个缓冲区内数据,否则, - // 我们无法停下来观看已有数据,它可能一直滚动, - // 因为每添加一行我们的指针不得不退让一行 + // 褰撶紦鍐插尯婊″悗, 涓㈡帀鍓嶅崐涓紦鍐插尯鍐呮暟鎹紝鍚﹀垯锛 + // 鎴戜滑鏃犳硶鍋滀笅鏉ヨ鐪嬪凡鏈夋暟鎹紝瀹冨彲鑳戒竴鐩存粴鍔, + // 鍥犱负姣忔坊鍔犱竴琛屾垜浠殑鎸囬拡涓嶅緱涓嶉璁╀竴琛 dispbuf->LineCnt = dispbuf->LineCnt + 1; if(dispbuf->LineCnt == MAX_DISP_LINE) { @@ -507,9 +507,9 @@ void WatchDataPutDispBuf(int port, WORD type, u_char *buf, int len) GetLocalTime(&st); szbuf[0] = tchar; - sprintf((char*)&szbuf[1], "%04d-%02d-%02d %02d:%02d:%02d.%03d 端口%d %s 数据, 长度 = %d", + sprintf((char*)&szbuf[1], "%04d-%02d-%02d %02d:%02d:%02d.%03d 绔彛%d %s 鏁版嵁, 闀垮害 = %d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, - port + 1, type == SDS_SIO_SEND_DATA ? "发送" : "接收", len); + port + 1, type == SDS_SIO_SEND_DATA ? "鍙戦" : "鎺ユ敹", len); AddDispLine(&DevParam[iCurDevIdx].WatchDispLine, szbuf); @@ -556,9 +556,9 @@ void WatchDataPutDispBufToFile(int port, WORD type, u_char *buf, int len) fp = fopen(szFileName, "a"); szbuf[0] = tchar; - sprintf((char*)&szbuf[1], "%04d-%02d-%02d %02d:%02d:%02d.%03d 端口%d %s 数据, 长度 = %d", + sprintf((char*)&szbuf[1], "%04d-%02d-%02d %02d:%02d:%02d.%03d 绔彛%d %s 鏁版嵁, 闀垮害 = %d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, - port + 1, type == SDS_SIO_SEND_DATA ? "发送" : "接收", len); + port + 1, type == SDS_SIO_SEND_DATA ? "鍙戦" : "鎺ユ敹", len); AddDispLine(&DevParam[iCurDevIdx].WatchDispLine, szbuf); @@ -638,7 +638,7 @@ int AddDev( u_long *addr, int num ) } } - // 新设备 + // 鏂拌澶 iDevNum++; return iDevNum - 1; @@ -656,7 +656,7 @@ void SetUdpRecvDataProcess(u_long ipaddr, u_char *buf, int len) for(plen = 0; plen < len;) { msg = (RTUMSG*)&buf[plen]; - //让数值为高字节前,低字节后(但此处无特别的作用,仅为了与机器无关而设) + //璁╂暟鍊间负楂樺瓧鑺傚墠锛屼綆瀛楄妭鍚(浣嗘澶勬棤鐗瑰埆鐨勪綔鐢紝浠呬负浜嗕笌鏈哄櫒鏃犲叧鑰岃) tmp = BYTE1(buf[plen+1]) + BYTE0(buf[plen+2]); msg->MsgType = tmp; tmp = BYTE1(buf[plen+3]) + BYTE0(buf[plen+4]); @@ -671,17 +671,17 @@ void SetUdpRecvDataProcess(u_long ipaddr, u_char *buf, int len) switch(msg->MsgType & 0x3fff) { - // 获取系统IP到上行 - // 0x00 - 0x03字节: 第一网卡地址IP地址 - // 0x044 - 0x07字节: 第二网卡地址IP地址 - // 0x08字节: 端口数目总数,包括网络通讯端口 - // 0x09 - 0xd字节: 保留 - // 0x0e字节: 串行通讯端口数目 - // 0x0f字节: 网络通讯端口数目 - // 0x10 - 4个带0x00结尾的字符串,它们是设备名称、软件版本、 - // 软件版本日期和制造厂商名称 - // 接下来,如果网卡数量多于2个,接着填写从第三网卡 - // 开始的网络IP地址 + // 鑾峰彇绯荤粺IP鍒颁笂琛 + // 0x00 - 0x03瀛楄妭: 绗竴缃戝崱鍦板潃IP鍦板潃 + // 0x044 - 0x07瀛楄妭: 绗簩缃戝崱鍦板潃IP鍦板潃 + // 0x08瀛楄妭锛 绔彛鏁扮洰鎬绘暟锛屽寘鎷綉缁滈氳绔彛 + // 0x09 - 0xd瀛楄妭锛 淇濈暀 + // 0x0e瀛楄妭锛 涓茶閫氳绔彛鏁扮洰 + // 0x0f瀛楄妭锛 缃戠粶閫氳绔彛鏁扮洰 + // 0x10 - 4涓甫0x00缁撳熬鐨勫瓧绗︿覆锛屽畠浠槸璁惧鍚嶇О銆佽蒋浠剁増鏈 + // 杞欢鐗堟湰鏃ユ湡鍜屽埗閫犲巶鍟嗗悕绉 + // 鎺ヤ笅鏉ワ紝濡傛灉缃戝崱鏁伴噺澶氫簬2涓紝鎺ョ潃濉啓浠庣涓夌綉鍗 + // 寮濮嬬殑缃戠粶IP鍦板潃 case SDS_GET_IP_ADDR: case SDS_N_GET_IP_ADDR: if(!(msg->MsgType & 0x8000)) @@ -703,7 +703,7 @@ void SetUdpRecvDataProcess(u_long ipaddr, u_char *buf, int len) OutputDebugString(szInfo);*/ } - // 跳过4个字符串 + // 璺宠繃4涓瓧绗︿覆 k = 0x10; ptr = (char*)&msg->MsgData[k]; k += (strlen(ptr) + 1); @@ -774,7 +774,7 @@ void SetUdpRecvDataProcess(u_long ipaddr, u_char *buf, int len) tmp = BYTE1(msg->MsgData[0]) + BYTE0(msg->MsgData[1]); - // 传输错误, 重来 + // 浼犺緭閿欒, 閲嶆潵 if((msg->MsgType & 0xc000) == 0x4000) { tmp = 0; @@ -794,21 +794,21 @@ void SetUdpRecvDataProcess(u_long ipaddr, u_char *buf, int len) //SioParam[msg->PortIdx].RecvCharNum += msg->MsgLen; } - // wen 2004.11.25 删除数据缓冲区数据长度(保持和5249中的程序一致) + // wen 2004.11.25 鍒犻櫎鏁版嵁缂撳啿鍖烘暟鎹暱搴(淇濇寔鍜5249涓殑绋嬪簭涓鑷) SioParam[msg->PortIdx].RecvBuf.MsgCnt = 0; SioParam[msg->PortIdx].RecvCharNum += msg->MsgLen; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.24 如果仅仅是接收到数据,不认为端口状态为正常, - // 必须是修改了数据库点才认为是端口正常。子站除外。 + // wen 2006.04.24 濡傛灉浠呬粎鏄帴鏀跺埌鏁版嵁锛屼笉璁や负绔彛鐘舵佷负姝e父锛 + // 蹇呴』鏄慨鏀逛簡鏁版嵁搴撶偣鎵嶈涓烘槸绔彛姝e父銆傚瓙绔欓櫎澶栥 //SioParam[msg->PortIdx].LineCommCnt = 0; //SioParam[msg->PortIdx].Status = TRUE; //============================================================= SioParam[msg->PortIdx].LineCommCnt = 0; if(SioParam[msg->PortIdx].m_psBaoHu) { - // 如果为子站 + // 濡傛灉涓哄瓙绔 if(SioParam[msg->PortIdx].m_psBaoHu->PortType) { SioParam[msg->PortIdx].Status = TRUE; @@ -826,7 +826,7 @@ void SetUdpRecvDataProcess(u_long ipaddr, u_char *buf, int len) //} break; case SDS_SIO_SEND_DATA: - // 数据已经接收 + // 鏁版嵁宸茬粡鎺ユ敹 //sprintf(szInfo, "TIP_(%08d): port=%d Send Data is received.\n", // getpid(), msg->PortIdx+1); //DebugPrint(szInfo); @@ -856,23 +856,23 @@ int SetDevConfigFileEx(char *szPortConfigName, int blk) if(!DevParam[iCurDevIdx].CurCommIp) { - ////QTMessageBox("设备配置文件...", "无有效设备!!!"); + ////QTMessageBox("璁惧閰嶇疆鏂囦欢...", "鏃犳湁鏁堣澶!!!"); return -1; } if(szPortConfigName == NULL) { - //QTMessageBox("设备配置文件...", "下装设备配置文件名称错误!!!"); + //QTMessageBox("璁惧閰嶇疆鏂囦欢...", "涓嬭璁惧閰嶇疆鏂囦欢鍚嶇О閿欒!!!"); return -1; } if(strlen(szPortConfigName) == 0) { - //QTMessageBox("设备配置文件...", "下装设备配置文件名称错误!!!"); + //QTMessageBox("璁惧閰嶇疆鏂囦欢...", "涓嬭璁惧閰嶇疆鏂囦欢鍚嶇О閿欒!!!"); return -1; } - // wen 2005.12.01 在这里设置全局的配置文件名称 + // wen 2005.12.01 鍦ㄨ繖閲岃缃叏灞鐨勯厤缃枃浠跺悕绉 if(blk == 0) { strcpy(gCurConfigFileName, szPortConfigName); @@ -900,7 +900,7 @@ int SetDevConfigFileEx(char *szPortConfigName, int blk) fclose(fp); if(iSendLen == 0) { - //QTMessageBox("设备配置文件...", "下装设备配置文件失败!!!"); + //QTMessageBox("璁惧閰嶇疆鏂囦欢...", "涓嬭璁惧閰嶇疆鏂囦欢澶辫触!!!"); return -1; } return 0; @@ -908,8 +908,8 @@ int SetDevConfigFileEx(char *szPortConfigName, int blk) } fclose(fp); - //MessageBox(NULL, "设备配置文件设置完成!!!", "设备配置文件...", MB_OK | MB_ICONINFORMATION); - //QTMessageBox("设备配置文件...", "设备配置文件设置完成!!!"); + //MessageBox(NULL, "璁惧閰嶇疆鏂囦欢璁剧疆瀹屾垚!!!", "璁惧閰嶇疆鏂囦欢...", MB_OK | MB_ICONINFORMATION); + //QTMessageBox("璁惧閰嶇疆鏂囦欢...", "璁惧閰嶇疆鏂囦欢璁剧疆瀹屾垚!!!"); return 1; } diff --git a/udpping.cpp b/udpping.cpp index 50da571..427c73c 100644 --- a/udpping.cpp +++ b/udpping.cpp @@ -21,17 +21,17 @@ //* udpping.cpp * //* Liangchu Lee 1999.12.20 * //*************************************************************** -//************************修 改 提 示**************************** -//1. wen 2002.11.11 前置机为备用机B时,主机退出,无法进行切换: -// 问题:当前置机A为主机下发,退出系统后备用前置机无法把自身切换 -// 为主机。 -// 描述:修改读取函数部分 UdpPingReaddata(void)。 -// 结果:增加判断,长时间收不到对方PING包,置其下发标志为FALSE。 -//2. wen 2003.04.21 服务器和前置机共处一台机器中,会出现绑定失败。 -// 问题:前置机后启动,ping接收端口不能正常工作。 -// 描述:服务器、前置机共处一台机器,当前置机后启动,绑定失败, -// 地址被服务器使用。错误信息=10048(套接字地址被使用)。 -// 结果:设置socket属性为SO_REUSEADDR,地址可重用。 +//************************淇 鏀 鎻 绀**************************** +//1. wen 2002.11.11 鍓嶇疆鏈轰负澶囩敤鏈築鏃讹紝涓绘満閫鍑猴紝鏃犳硶杩涜鍒囨崲锛 +// 闂锛氬綋鍓嶇疆鏈篈涓轰富鏈轰笅鍙戯紝閫鍑虹郴缁熷悗澶囩敤鍓嶇疆鏈烘棤娉曟妸鑷韩鍒囨崲 +// 涓轰富鏈恒 +// 鎻忚堪锛氫慨鏀硅鍙栧嚱鏁伴儴鍒 UdpPingReaddata(void)銆 +// 缁撴灉锛氬鍔犲垽鏂紝闀挎椂闂存敹涓嶅埌瀵规柟PING鍖咃紝缃叾涓嬪彂鏍囧織涓篎ALSE銆 +//2. wen 2003.04.21 鏈嶅姟鍣ㄥ拰鍓嶇疆鏈哄叡澶勪竴鍙版満鍣ㄤ腑锛屼細鍑虹幇缁戝畾澶辫触銆 +// 闂锛氬墠缃満鍚庡惎鍔紝ping鎺ユ敹绔彛涓嶈兘姝e父宸ヤ綔銆 +// 鎻忚堪锛氭湇鍔″櫒銆佸墠缃満鍏卞涓鍙版満鍣紝褰撳墠缃満鍚庡惎鍔紝缁戝畾澶辫触锛 +// 鍦板潃琚湇鍔″櫒浣跨敤銆傞敊璇俊鎭=10048(濂楁帴瀛楀湴鍧琚娇鐢)銆 +// 缁撴灉锛氳缃畇ocket灞炴т负SO_REUSEADDR锛屽湴鍧鍙噸鐢ㄣ //*************************************************************** #include "commport.h" #include "udpping.h" @@ -74,9 +74,9 @@ BOOL UdpPingInit(void) struct sockaddr_in *cliaddr; //struct hostent *test; #ifndef MACRO_NETPING_P2P - BOOL bBroadcast = TRUE; // 是否广播方式发送数据报 + BOOL bBroadcast = TRUE; // 鏄惁骞挎挱鏂瑰紡鍙戦佹暟鎹姤 #endif - int timeout = 1000; // 超时 + int timeout = 1000; // 瓒呮椂 char szConfig[256]; @@ -87,8 +87,8 @@ BOOL UdpPingInit(void) sprintf(szConfig, "%s/config.ini", IniFilePath); #endif - gUdpPingReadPort = GetPrivateProInt("网络设置", "PING接收端口", 8124, szConfig); - gUdpPingWritePort = GetPrivateProInt("网络设置", "PING发送端口", 8123, szConfig); + gUdpPingReadPort = GetPrivateProInt("缃戠粶璁剧疆", "PING鎺ユ敹绔彛", 8124, szConfig); + gUdpPingWritePort = GetPrivateProInt("缃戠粶璁剧疆", "PING鍙戦佺鍙", 8123, szConfig); //test = gethostbyname(pFendMsg->Name); for(i = 0; i < MAX_ADDR; i++) @@ -115,13 +115,13 @@ BOOL UdpPingInit(void) } #ifdef OS_LINUX - // wen 2005.07.08 将socket设置为非阻塞模式 + // wen 2005.07.08 灏唖ocket璁剧疆涓洪潪闃诲妯″紡 tmp = fcntl(UdpPing.sSocket[i], F_GETFL, 0); fcntl(UdpPing.sSocket[i], F_SETFL, tmp|O_NONBLOCK); #endif #ifndef MACRO_NETPING_P2P - // wen 2006.04.28 不使用广播发送ping包 + // wen 2006.04.28 涓嶄娇鐢ㄥ箍鎾彂閫乸ing鍖 bBroadcast = TRUE; setsockopt(UdpPing.sSocket[i], SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(bBroadcast)); #endif @@ -164,7 +164,7 @@ BOOL UdpPingInit(void) return FALSE; } - // wen 2003.04.21 服务器和前置机共处一台机器中,会出现绑定失败。套接字地址被使用 + // wen 2003.04.21 鏈嶅姟鍣ㄥ拰鍓嶇疆鏈哄叡澶勪竴鍙版満鍣ㄤ腑锛屼細鍑虹幇缁戝畾澶辫触銆傚鎺ュ瓧鍦板潃琚娇鐢 tmp_len = 1; setsockopt(UdpPing.rSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&tmp_len, sizeof(int)); @@ -204,7 +204,7 @@ void UdpPingSendData(void) } cnt = 0; - // 获取全局变量,通过函数调用 + // 鑾峰彇鍏ㄥ眬鍙橀噺锛岄氳繃鍑芥暟璋冪敤 pHostLink = GetHostLinkPtr(); pFendMsg = GetFendMsgPtr(); @@ -246,7 +246,7 @@ void UdpPingSendData(void) && (pFendMsg->SendTxdDataFlag[1] == 0)) { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) //pFendMsg->SendTxdDataFlag[0] = FALSE; //pFendMsg->SendTxdDataFlag[1] = FALSE; //pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx] = TRUE; @@ -285,7 +285,7 @@ void UdpPingSendData(void) && (pFendMsg->SendTxdDataFlag[1] == 0)) { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) //pFendMsg->SendTxdDataFlag[0] = FALSE; //pFendMsg->SendTxdDataFlag[1] = FALSE; //pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx] = TRUE; @@ -327,7 +327,7 @@ void UdpPingSendData(void) pFendMsg->SendTxdDataFlag[1] = FALSE; } - // wen 2002.11.25 连接服务器慢的系统会出现切换不成功 + // wen 2002.11.25 杩炴帴鏈嶅姟鍣ㄦ參鐨勭郴缁熶細鍑虹幇鍒囨崲涓嶆垚鍔 /* switch(pFendMsg->LinkStatus[1]*2 + pFendMsg->LinkStatus[0]) { @@ -344,7 +344,7 @@ void UdpPingSendData(void) } //DebugPrint("UdpPingSendData Begin..."); - // 字节顺序转换 + // 瀛楄妭椤哄簭杞崲 PingData.wNodeID = SequenceHostToRtuWord(PingData.wNodeID); for(i = 0; i < MAX_ADDR; i++) { @@ -360,7 +360,7 @@ void UdpPingSendData(void) switch(gSendTxdDataFendIdx) { - case 1: // 前置机 A 下发数据 + case 1: // 鍓嶇疆鏈 A 涓嬪彂鏁版嵁 if(pFendMsg->SendTxdDataFlag[0] == 0) { pFendMsg->SendTxdDataFlag[1] = FALSE; @@ -377,7 +377,7 @@ void UdpPingSendData(void) gSendTxdDataFendIdx = 0; } break; - case 2: // 前置机 B 下发数据 + case 2: // 鍓嶇疆鏈 B 涓嬪彂鏁版嵁 if(pFendMsg->SendTxdDataFlag[1] == 0) { pFendMsg->SendTxdDataFlag[0] = FALSE; @@ -410,7 +410,7 @@ void UdpPingSendData(void) // PingData.wNodeID, PingData.inetAddr, PingData.inetMask, PingData.dwStatus); //DebugPrint(szDbg); - // 字节顺序转换 + // 瀛楄妭椤哄簭杞崲 //PingData.wNodeID = SequenceHostToRtuWord(PingData.wNodeID); PingData.inetMask = SequenceHostToRtuDWord(PingData.inetMask); PingData.inetAddr = SequenceHostToRtuDWord(PingData.inetAddr); @@ -459,7 +459,7 @@ void UdpPingSendDataP2P(void) } cnt = 0; - // 获取全局变量,通过函数调用 + // 鑾峰彇鍏ㄥ眬鍙橀噺锛岄氳繃鍑芥暟璋冪敤 pHostLink = GetHostLinkPtr(); pFendMsg = GetFendMsgPtr(); @@ -501,7 +501,7 @@ void UdpPingSendDataP2P(void) && (pFendMsg->SendTxdDataFlag[1] == 0)) { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) //pFendMsg->SendTxdDataFlag[0] = FALSE; //pFendMsg->SendTxdDataFlag[1] = FALSE; //pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx] = TRUE; @@ -540,7 +540,7 @@ void UdpPingSendDataP2P(void) && (pFendMsg->SendTxdDataFlag[1] == 0)) { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) //pFendMsg->SendTxdDataFlag[0] = FALSE; //pFendMsg->SendTxdDataFlag[1] = FALSE; //pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx] = TRUE; @@ -572,7 +572,7 @@ void UdpPingSendDataP2P(void) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } -// wen 2006.04.29 在uclinux下,发送数据给自己无法接收的到。始终认为自己是存在的。 +// wen 2006.04.29 鍦╱clinux涓嬶紝鍙戦佹暟鎹粰鑷繁鏃犳硶鎺ユ敹鐨勫埌銆傚缁堣涓鸿嚜宸辨槸瀛樺湪鐨勩 #ifdef OS_LINUX pFendMsg->FendExistFlag[pFendMsg->FendIdx] = TRUE; pFendMsg->FendExistCnt[pFendMsg->FendIdx] = 0; @@ -588,7 +588,7 @@ void UdpPingSendDataP2P(void) pFendMsg->SendTxdDataFlag[1] = FALSE; } - // wen 2002.11.25 连接服务器慢的系统会出现切换不成功 + // wen 2002.11.25 杩炴帴鏈嶅姟鍣ㄦ參鐨勭郴缁熶細鍑虹幇鍒囨崲涓嶆垚鍔 /* switch(pFendMsg->LinkStatus[1]*2 + pFendMsg->LinkStatus[0]) { @@ -605,7 +605,7 @@ void UdpPingSendDataP2P(void) } //DebugPrint("UdpPingSendDataP2P Begin..."); - // 字节顺序转换 + // 瀛楄妭椤哄簭杞崲 PingData.wNodeID = SequenceHostToRtuWord(PingData.wNodeID); for(i = 0; i < MAX_ADDR; i++) { @@ -621,7 +621,7 @@ void UdpPingSendDataP2P(void) switch(gSendTxdDataFendIdx) { - case 1: // 前置机 A 下发数据 + case 1: // 鍓嶇疆鏈 A 涓嬪彂鏁版嵁 if(pFendMsg->SendTxdDataFlag[0] == 0) { pFendMsg->SendTxdDataFlag[1] = FALSE; @@ -638,7 +638,7 @@ void UdpPingSendDataP2P(void) gSendTxdDataFendIdx = 0; } break; - case 2: // 前置机 B 下发数据 + case 2: // 鍓嶇疆鏈 B 涓嬪彂鏁版嵁 if(pFendMsg->SendTxdDataFlag[1] == 0) { pFendMsg->SendTxdDataFlag[0] = FALSE; @@ -661,15 +661,15 @@ void UdpPingSendDataP2P(void) memset((char *)servaddr, 0, sizeof(struct sockaddr_in)); servaddr->sin_family = AF_INET; //servaddr->sin_addr.s_addr = htonl(pFendMsg->SetTcpIpAddr[2*i]); - // 字节顺序转换 + // 瀛楄妭椤哄簭杞崲 //PingData.wNodeID = SequenceHostToRtuWord(PingData.wNodeID); PingData.inetMask = SequenceHostToRtuDWord(PingData.inetMask); PingData.inetAddr = SequenceHostToRtuDWord(PingData.inetAddr); PingData.dwStatus = SequenceHostToRtuDWord(PingData.dwStatus); - // 点对点发送给前置机 + // 鐐瑰鐐瑰彂閫佺粰鍓嶇疆鏈 for(j=0; jFendIdx) { @@ -700,7 +700,7 @@ void UdpPingSendDataP2P(void) } } - // 点对点发送给服务器 + // 鐐瑰鐐瑰彂閫佺粰鏈嶅姟鍣 for(j=0; j 0) @@ -733,13 +733,13 @@ void UdpPingReaddata(void) char revip[32]; char szbuf[128]; static int dflag = 0; - // wen 2002.11.11 前置机为备用机B时,主机退出,无法进行切换 + // wen 2002.11.11 鍓嶇疆鏈轰负澶囩敤鏈築鏃讹紝涓绘満閫鍑猴紝鏃犳硶杩涜鍒囨崲 static int recvtimeout = 0; TCP_LINK_DEF *pHostLink; FEND_DEF *pFendMsg; SIO_PARAM_DEF *pSioParam; - // 获取全局变量,通过函数调用 + // 鑾峰彇鍏ㄥ眬鍙橀噺锛岄氳繃鍑芥暟璋冪敤 pHostLink = GetHostLinkPtr(); pFendMsg = GetFendMsgPtr(); //for(i = 0; i < MAX_ADDR; i++) @@ -778,7 +778,7 @@ void UdpPingReaddata(void) //if(!CmpnString((char*)pingmsg->barrRandom, PINGRANDOM, MAX_RANDOM-1)) // continue; - // 字节顺序转换 + // 瀛楄妭椤哄簭杞崲 pingmsg->wNodeID = SequenceRtuToHostWord(pingmsg->wNodeID); pingmsg->inetAddr = SequenceRtuToHostDWord(pingmsg->inetAddr); pingmsg->inetMask = SequenceRtuToHostDWord(pingmsg->inetMask); @@ -797,16 +797,16 @@ void UdpPingReaddata(void) /* test if(gtestread == 0) { - // 前置机a + // 鍓嶇疆鏈篴 if(pingmsg->wNodeID == 0) { - DebugPrint("屏蔽前置机a的ping包"); + DebugPrint("灞忚斀鍓嶇疆鏈篴鐨刾ing鍖"); break; } }*/ - // wen 2002.11.11 前置机为备用机B时,主机退出,无法进行切换 - // 每一个ping 包 一秒钟发送一次 + // wen 2002.11.11 鍓嶇疆鏈轰负澶囩敤鏈築鏃讹紝涓绘満閫鍑猴紝鏃犳硶杩涜鍒囨崲 + // 姣忎竴涓猵ing 鍖 涓绉掗挓鍙戦佷竴娆 if(!pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx]) { if(recvtimeout < 6) @@ -817,7 +817,7 @@ void UdpPingReaddata(void) { recvtimeout = 0; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // wen 2006.04.22 主备切换时,判断的端口通讯状态屏蔽字(按位屏蔽) + // wen 2006.04.22 涓诲鍒囨崲鏃讹紝鍒ゆ柇鐨勭鍙i氳鐘舵佸睆钄藉瓧(鎸変綅灞忚斀) //pFendMsg->SendTxdDataFlag[(pFendMsg->FendIdx+1)%MAX_ADDR] = FALSE; //pFendMsg->SendTxdDataFlag[pFendMsg->FendIdx] = TRUE; //======================================================================= @@ -861,7 +861,7 @@ void UdpPingReaddata(void) continue; } - // wen 2002.11.11 前置机为备用机B时,主机退出,无法进行切换 + // wen 2002.11.11 鍓嶇疆鏈轰负澶囩敤鏈築鏃讹紝涓绘満閫鍑猴紝鏃犳硶杩涜鍒囨崲 recvtimeout = 0; } @@ -895,7 +895,7 @@ void UdpPingReaddata(void) } break; } - // wen 2006.04.29 多余的指令,这种情况永远不会发生,上面已经消除了这种情况 + // wen 2006.04.29 澶氫綑鐨勬寚浠わ紝杩欑鎯呭喌姘歌繙涓嶄細鍙戠敓锛屼笂闈㈠凡缁忔秷闄や簡杩欑鎯呭喌 //if(pFendMsg->SendTxdDataFlag[0] && pFendMsg->SendTxdDataFlag[1]) //{ // pFendMsg->SendTxdDataFlag[1] = FALSE; @@ -927,7 +927,7 @@ void UdpPingReaddata(void) { if(dflag == 0) { - sprintf(szbuf, "接收服务器状态为双主机状态错误!!! 当前处理服务器 %c 状态包。", pingmsg->wNodeID + 'A'); + sprintf(szbuf, "鎺ユ敹鏈嶅姟鍣ㄧ姸鎬佷负鍙屼富鏈虹姸鎬侀敊璇!!! 褰撳墠澶勭悊鏈嶅姟鍣 %c 鐘舵佸寘銆", pingmsg->wNodeID + 'A'); DebugPrint((char*)szbuf); } dflag = 1; @@ -938,13 +938,13 @@ void UdpPingReaddata(void) { if(pHostLink[0].Status == 0) { - sprintf(szbuf, "接收服务器状态 A 服务器为主机!!!"); + sprintf(szbuf, "鎺ユ敹鏈嶅姟鍣ㄧ姸鎬 A 鏈嶅姟鍣ㄤ负涓绘満!!!"); DebugPrint((char*)szbuf); } if(pHostLink[1].Status == 0) { - sprintf(szbuf, "接收服务器状态 B 服务器为主机!!!"); + sprintf(szbuf, "鎺ユ敹鏈嶅姟鍣ㄧ姸鎬 B 鏈嶅姟鍣ㄤ负涓绘満!!!"); DebugPrint((char*)szbuf); } } @@ -989,7 +989,7 @@ void UdpPingSwitch(void) int i; FEND_DEF *pFendMsg; - // 获取全局变量,通过函数调用 + // 鑾峰彇鍏ㄥ眬鍙橀噺锛岄氳繃鍑芥暟璋冪敤 pFendMsg = GetFendMsgPtr(); for(i=0; i +#include "MySQLAdo.h" #include "baohua.h" #include "buban103.h" #include "buban104.h" @@ -51,7 +52,7 @@ int InitBaohuMainFlag = 0; void BaohuLibMain(int netportnum); -int main(void) +int main(int argc, char **argv) { std::cout << "Hello World!\n"; @@ -61,6 +62,8 @@ int main(void) WSADATA WSAData; #endif + InitDatabase(argc, argv, "localhost", "root", "123456", "health"); + //瀹氭椂鍣ㄦ寚閽堢疆绌 //m_pMainTimer = NULL; //璇ユ浠g爜杩涘叆鐜鍙橀噺KERNELFEND_ROOT鎵鎸囧畾鐨勭洰褰 @@ -143,6 +146,8 @@ int main(void) conf_close(pvdataconf_handle); pvdataconf_handle = NULL; } + + UninitDatabase(); } // 杩愯绋嬪簭: Ctrl + F5 鎴栬皟璇 >鈥滃紑濮嬫墽琛(涓嶈皟璇)鈥濊彍鍗 diff --git a/widgets.vcxproj b/widgets.vcxproj index 3311fc3..0de67e6 100644 --- a/widgets.vcxproj +++ b/widgets.vcxproj @@ -24,6 +24,7 @@ Win32Proj widgets 10.0.17763.0 + iec103 @@ -75,8 +76,8 @@ true - C:\Program Files\MariaDB 10.11\include;$(VC_IncludePath);$(WindowsSDK_IncludePath); - C:\Program Files\MariaDB 10.11\lib;D:\Workspace\deps\x64\dbg;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + C:\Program Files\MariaDB 10.10\include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + C:\Program Files\MariaDB 10.10\lib;D:\Workspace\deps\x64\dbg;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 false @@ -108,7 +109,7 @@ true USING_MYSQL;_DEBUG;_CONSOLE;OS_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;DISABLE_OS_HEAP true - /UTF-8 %(AdditionalOptions) + /utf-8 %(AdditionalOptions) Console