From a65b3a8299890d267b5306698adc12cfef4b075c Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Tue, 3 Dec 2024 20:27:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4CMakeFiles=E7=9A=84=E9=A2=84?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- das-dn/CMakeLists.txt | 107 +-- das-dn/cmg/ry.cpp | 67 +- das-dn/cmg/ry.h | 13 +- das-dn/comm/ryFileDef.cpp | 94 ++- das-dn/hostadsbf/hostadsbf.cpp | 653 +--------------- das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp | 720 +----------------- das-dn/inc/public.h | 6 +- das-dn/inc/ryFileDef.h | 12 + 8 files changed, 204 insertions(+), 1468 deletions(-) diff --git a/das-dn/CMakeLists.txt b/das-dn/CMakeLists.txt index 5964a71d..adb20d9e 100644 --- a/das-dn/CMakeLists.txt +++ b/das-dn/CMakeLists.txt @@ -6,6 +6,8 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) option (USE_MQTT "use mqtt protocol" OFF) +option (USE_CRYPTO "use own crypto" OFF) +option (USE_UUID "use uuid lib" OFF) option (USE_WEBSOCKET "use websocket" ON) option (USE_SQLITE3 "use sqlite3" ON) option (USE_ADS "use ads" ON) @@ -57,18 +59,11 @@ endif() find_package(miniocpp REQUIRED) set (APP_LIBS ${APP_LIBS} miniocpp::miniocpp) -# target_link_libraries(application PRIVATE miniocpp::miniocpp) include_directories ( inc inc/json - inc/uuid - inc/sqlite - inc/nopoll - inc/websockets - inc/crypto - cmg/ - inc/mqtt) + cmg) set (APP_SRCS cmg/main.cpp @@ -99,25 +94,31 @@ set (APP_SRCS set (APP_SRCS ${APP_SRCS} third_party/json/jsoncpp.cpp) -set (APP_SRCS ${APP_SRCS} - third_party/base64/base64.c - third_party/md5/md5.c - third_party/aes/aes.c - third_party/aes/error.c - third_party/aes/platform_util.c) +if (USE_CRYPTO) + include_directories (inc/crypto) + set (APP_SRCS ${APP_SRCS} + third_party/base64/base64.c + third_party/md5/md5.c + third_party/aes/aes.c + third_party/aes/error.c + third_party/aes/platform_util.c) +endif () -set (APP_SRCS ${APP_SRCS} - third_party/uuid/clear.c - third_party/uuid/compare.c - third_party/uuid/copy.c - third_party/uuid/gen_uuid.c - third_party/uuid/isnull.c - third_party/uuid/pack.c - third_party/uuid/parse.c - third_party/uuid/unpack.c - third_party/uuid/unparse.c - third_party/uuid/uuid_time.c - third_party/uuid/randutils.c) +if (USE_UUID) + include_directories (inc/uuid) + set (APP_SRCS ${APP_SRCS} + third_party/uuid/clear.c + third_party/uuid/compare.c + third_party/uuid/copy.c + third_party/uuid/gen_uuid.c + third_party/uuid/isnull.c + third_party/uuid/pack.c + third_party/uuid/parse.c + third_party/uuid/unpack.c + third_party/uuid/unparse.c + third_party/uuid/uuid_time.c + third_party/uuid/randutils.c) +endif () set (APP_SRCS ${APP_SRCS} third_party/zlog/buf.c @@ -142,32 +143,34 @@ set (APP_SRCS ${APP_SRCS} third_party/zlog/zlog.c) if (USE_WEBSOCKET) - set (APP_SRCS ${APP_SRCS} - third_party/websockets/easywsclient.cpp - ) -# find_package(websockets) -# set (APP_LIBS ${APP_LIBS} websockets) - -# set (APP_SRCS ${APP_SRCS} -# third_party/nopoll/nopoll.c -# third_party/nopoll/nopoll_conn.c -# third_party/nopoll/nopoll_conn_opts.c -# third_party/nopoll/nopoll_listener.c -# third_party/nopoll/nopoll_ctx.c -# third_party/nopoll/nopoll_decl.c -# third_party/nopoll/nopoll_io.c -# third_party/nopoll/nopoll_log.c -# third_party/nopoll/nopoll_msg.c) + option (USE_NOPOLL "use nopoll websocket lib" OFF) + if (USE_NOPOLL) + include_directories (inc/nopoll) + set (APP_SRCS ${APP_SRCS} + third_party/nopoll/nopoll.c + third_party/nopoll/nopoll_conn.c + third_party/nopoll/nopoll_conn_opts.c + third_party/nopoll/nopoll_listener.c + third_party/nopoll/nopoll_ctx.c + third_party/nopoll/nopoll_decl.c + third_party/nopoll/nopoll_io.c + third_party/nopoll/nopoll_log.c + third_party/nopoll/nopoll_msg.c) + add_definitions(-DUSE_WEBSOCKET) + add_definitions(-DNOPOLL_OS_UNIX=1) + add_definitions(-DSHOW_DEBUG_LOG) + add_definitions(-DNOPOLL_HAVE_VASPRINTF=1) + add_definitions(-DNOPOLL_HAVE_TLSv10_ENABLED=1) + add_definitions(-DNOPOLL_HAVE_TLSv11_ENABLED=1) + add_definitions(-DNOPOLL_HAVE_TLSv12_ENABLED=1) + add_definitions(-DNOPOLL_HAVE_TLS_FLEXIBLE_ENABLED=1) + else () + include_directories (inc/websockets) + set (APP_SRCS ${APP_SRCS} + third_party/websockets/easywsclient.cpp + ) + endif () set (APP_LIBS ${APP_LIBS} ssl crypto) -# add_definitions(-DUSE_WEBSOCKET) -# add_definitions(-DNOPOLL_OS_UNIX=1) -# add_definitions(-DSHOW_DEBUG_LOG) -# add_definitions(-DNOPOLL_HAVE_VASPRINTF=1) -# add_definitions(-DNOPOLL_HAVE_TLSv10_ENABLED=1) -# add_definitions(-DNOPOLL_HAVE_TLSv11_ENABLED=1) -# add_definitions(-DNOPOLL_HAVE_TLSv12_ENABLED=1) -# add_definitions(-DNOPOLL_HAVE_TLS_FLEXIBLE_ENABLED=1) - endif () if (USE_ADS) @@ -199,6 +202,7 @@ if (USE_ADS) endif () if (USE_MQTT) + include_directories (inc/mqtt) set(APP_SRCS ${APP_SRCS} third_party/mqtt/actions.c third_party/mqtt/callbacks.c @@ -254,6 +258,7 @@ if (USE_MQTT) endif (USE_MQTT) if (USE_SQLITE3) + include_directories (inc/sqlite) set (APP_SRCS ${APP_SRCS} third_party/sqlite/KompexSQLiteBlob.cpp third_party/sqlite/KompexSQLiteDatabase.cpp diff --git a/das-dn/cmg/ry.cpp b/das-dn/cmg/ry.cpp index facce4dd..1f8f41dd 100644 --- a/das-dn/cmg/ry.cpp +++ b/das-dn/cmg/ry.cpp @@ -1320,60 +1320,25 @@ BOOLEAN CRYDevice::processRyADSParam(const Json::Value jsonRoot, int pid) snprintf(config_config.processes[pid].option.ryads.ftp.remotePath, sizeof(config_config.processes[pid].option.ryads.ftp.remotePath), "%s", "/data/rtdatalog"); } - //远程地址 - if (jsonRoot["remoteAddr"].isString()) { - snprintf(config_config.processes[pid].option.ryads.remoteIp, sizeof(config_config.processes[pid].option.ryads.remoteIp), "%s", jsonRoot["remoteAddr"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ryads.remoteIp, sizeof(config_config.processes[pid].option.ryads.remoteIp), "%s", "192.168.129.26"); + if (jsonRoot["targetAddr"].isInt()) { + config_config.processes[pid].option.ryads.net.target_addr = jsonRoot["targetAddr"].asInt(); + } else if (jsonRoot["targetAddr"].isString()) { + if (inet_pton(AF_INET, jsonRoot["targetAddr"].asCString(), &config_config.processes[pid].option.ryads.net.target_addr) == 1) { + vLog(LOG_DEBUG, "IPv4 地址转换成功,网络字节序为: %u.\n", config_config.processes[pid].option.ryads.net.target_addr); + } else { + vLog(LOG_ERROR, "inet_pton error(%d,%s).\n", errno, strerror(errno)); + } } - if (jsonRoot["remoteNetId"].isString()) { - snprintf(config_config.processes[pid].option.ryads.remoteNetId, sizeof(config_config.processes[pid].option.ryads.remoteNetId), "%s", jsonRoot["remoteNetId"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ryads.remoteNetId, sizeof(config_config.processes[pid].option.ryads.remoteNetId), "%s.1.1", config_config.processes[pid].option.ryads.remoteIp); - } - //本地地址 - if (jsonRoot["localAddr"].isString()) { - snprintf(config_config.processes[pid].option.ryads.localIp, sizeof(config_config.processes[pid].option.ryads.localIp), "%s", jsonRoot["localAddr"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ryads.localIp, sizeof(config_config.processes[pid].option.ryads.localIp), "%s", "127.0.0.1"); - } - if (jsonRoot["localNetId"].isString()) { - snprintf(config_config.processes[pid].option.ryads.localNetId, sizeof(config_config.processes[pid].option.ryads.localNetId), "%s", jsonRoot["localNetId"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ryads.localNetId, sizeof(config_config.processes[pid].option.ryads.localNetId), "%s.1.1", config_config.processes[pid].option.ryads.localIp); + if (jsonRoot["bindAddr"].isInt()) { + config_config.processes[pid].option.ryads.net.bind_addr = jsonRoot["bindAddr"].asInt(); + } else if (jsonRoot["bindAddr"].isString()) { + if (inet_pton(AF_INET, jsonRoot["bindAddr"].asCString(), &config_config.processes[pid].option.ryads.net.bind_addr) == 1) { + vLog(LOG_DEBUG, "IPv4 地址转换成功,网络字节序为: %u.\n", config_config.processes[pid].option.ryads.net.bind_addr); + } else { + vLog(LOG_ERROR, "inet_pton error(%d,%s).\n", errno, strerror(errno)); + } } - //Minio参数 - //URL - if (jsonRoot["URL"].isString()) { - snprintf(config_config.processes[pid].option.ftp2minio.minio.url, sizeof(config_config.processes[pid].option.ftp2minio.minio.url), "%s", jsonRoot["URL"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ftp2minio.minio.url, sizeof(config_config.processes[pid].option.ftp2minio.minio.url), "%s", "http://192.168.109.187:9000"); - } - //用户名 - if (jsonRoot["minioUserName"].isString()) { - snprintf(config_config.processes[pid].option.ftp2minio.minio.user, sizeof(config_config.processes[pid].option.ftp2minio.minio.user), "%s", jsonRoot["minioUserName"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ftp2minio.minio.user, sizeof(config_config.processes[pid].option.ftp2minio.minio.user), "%s", "das"); - } - //密码 - if (jsonRoot["minioPassWord"].isString()) { - snprintf(config_config.processes[pid].option.ftp2minio.minio.password, sizeof(config_config.processes[pid].option.ftp2minio.minio.password), "%s", jsonRoot["minioPassWord"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ftp2minio.minio.password, sizeof(config_config.processes[pid].option.ftp2minio.minio.password), "%s", "zaq12WSX"); - } - //桶 - if (jsonRoot["bucket"].isString()) { - snprintf(config_config.processes[pid].option.ftp2minio.minio.bucket, sizeof(config_config.processes[pid].option.ftp2minio.minio.bucket), "%s", jsonRoot["bucket"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ftp2minio.minio.bucket, sizeof(config_config.processes[pid].option.ftp2minio.minio.bucket), "%s", "test"); - } - //桶中的绝对路径 - if (jsonRoot["object"].isString()) { - snprintf(config_config.processes[pid].option.ftp2minio.minio.object, sizeof(config_config.processes[pid].option.ftp2minio.minio.object), "%s", jsonRoot["object"].asCString()); - } else { - snprintf(config_config.processes[pid].option.ftp2minio.minio.object, sizeof(config_config.processes[pid].option.ftp2minio.minio.object), "%s", "/A-001/Alarm/"); - } return TRUE; } diff --git a/das-dn/cmg/ry.h b/das-dn/cmg/ry.h index 207ac5a7..fbb2dca1 100644 --- a/das-dn/cmg/ry.h +++ b/das-dn/cmg/ry.h @@ -12,18 +12,24 @@ #include #ifndef USE_NOPOLL_WEBSOCKET + #include + #include + #include #include using easywsclient::WebSocket; #else #include #include + #define MAX_MSG_COUNT 4096 #endif #include +#if 0 #include #include #include #include +#endif #include "soe.h" #include "yxbw.h" @@ -33,8 +39,6 @@ #include "public.h" -#define MAX_MSG_COUNT 4096 - typedef std::unordered_map uid2pidmap; #define CMD_CONTROL_OPERATION 0 @@ -71,11 +75,6 @@ typedef struct { } attrvectorGroup; typedef std::unordered_map pid2attrvectormap; - -#include -#include -#include - class CRYDevice { public: diff --git a/das-dn/comm/ryFileDef.cpp b/das-dn/comm/ryFileDef.cpp index 24df253e..957b4dad 100644 --- a/das-dn/comm/ryFileDef.cpp +++ b/das-dn/comm/ryFileDef.cpp @@ -1,4 +1,6 @@ #include "ryFileDef.h" +#include "public.h" +#include "math.h" int calcFields(FIELDDES* fields) { @@ -544,4 +546,94 @@ int calcFields(FIELDDES* fields) len++; return len; -} \ No newline at end of file +} + +size_t write_callback(void *ptr, size_t size, size_t nmemb, struct memory *mem) +{ + size_t new_size = mem->size + size * nmemb; + mem->response = (char *)realloc(mem->response, new_size + 1); + if (mem->response == NULL) { + vLog(LOG_ERROR, "Failed to allocate memory.\n"); + return 0; // Out of memory + } + memcpy(&(mem->response[mem->size]), ptr, size * nmemb); + mem->size = new_size; + mem->response[new_size] = '\0'; + return size * nmemb; +} + +float GetUnitYCRealFromValue(int uid, int order, LONG value) +{ + int udb; + float coef; + float base; + struUnit* pUnit; + struUnitYC* pYC; + + if (uid < 0 || uid >= UNIT_NUM) return 0; + pUnit = &config.units[uid]; + if ((pUnit->state & 0x01) != TRUE) return 0; + if (order < 0 || order >= pUnit->yccount) return 0; + pYC = &pUnit->ycs[order]; + udb = pYC->order; + if (udb < 0 || udb >= DATABASE_YC_NUM) { + coef = 1.0f; + base = 0.0f; + } else { + coef = pYC->coef; + base = pYC->base; + } + return (float)(value * coef + base); +} + +BOOLEAN GetUnitYCIsFloat(int uid, int order) +{ + int udb; + float coef = 1.0f; + struUnit* pUnit; + struUnitYC* pYC; + if (uid < 0 || uid >= UNIT_NUM) return 0; + pUnit = &config.units[uid]; + if ((pUnit->state & 0x01) != TRUE) return 0; + if (order < 0 || order >= pUnit->yccount) return 0; + pYC = &pUnit->ycs[order]; + udb = pYC->order; + if (udb < 0 || udb >= DATABASE_YC_NUM) + { + coef = 1.0f; + } + else + { + coef = pYC->coef; + } + + if (fabsf(coef) <= 1E-8) coef = 1.0f; + if (fabsf(coef - 1.0f) <= 1E-8) return FALSE; + return TRUE; +} + +int GetUnitYXCount(int uid) +{ + if (uid < 0 || uid >= UNIT_NUM) return 0; + return config.units[uid].yxcount; +} + +int GetUnitYCCount(int uid) +{ + if (uid < 0 || uid >= UNIT_NUM) return 0; + return config.units[uid].yccount; +} + +BOOLEAN GetUnitYCType(int uid, int order) +{ + struUnit* pUnit; + struUnitYC* pYC; + + if (uid < 0 || uid >= UNIT_NUM) return 0; + pUnit = &config.units[uid]; + if ((pUnit->state & 0x01) != TRUE) return 0; + if (order < 0 || order >= pUnit->yccount) return 0; + pYC = &pUnit->ycs[order]; + return pYC->highSpeed; +} + diff --git a/das-dn/hostadsbf/hostadsbf.cpp b/das-dn/hostadsbf/hostadsbf.cpp index 1acfd797..fd42e6ff 100644 --- a/das-dn/hostadsbf/hostadsbf.cpp +++ b/das-dn/hostadsbf/hostadsbf.cpp @@ -195,6 +195,7 @@ static struDataLengthMBAddr m_datalen_mbaddr[] = { { 2, 394 } }; + static bool publish_sensor_data(const char* command, const Json::Value payload) { Json::StreamWriterBuilder builder; @@ -225,81 +226,6 @@ static bool publish_sensor_data(const char* command, const Json::Value payload) return true; } -static float GetUnitYCRealFromValue(int uid, int order, LONG value) -{ - int udb; - float coef; - float base; - struUnit* pUnit; - struUnitYC* pYC; - - if (uid < 0 || uid >= UNIT_NUM) return 0; - pUnit = &config.units[uid]; - if ((pUnit->state & 0x01) != TRUE) return 0; - if (order < 0 || order >= pUnit->yccount) return 0; - pYC = &pUnit->ycs[order]; - udb = pYC->order; - if (udb < 0 || udb >= DATABASE_YC_NUM) { - coef = 1.0f; - base = 0.0f; - } else { - coef = pYC->coef; - base = pYC->base; - } - return (float)(value * coef + base); -} - -static BOOLEAN GetUnitYCIsFloat(int uid, int order) -{ - int udb; - float coef = 1.0f; - struUnit* pUnit; - struUnitYC* pYC; - if (uid < 0 || uid >= UNIT_NUM) return 0; - pUnit = &config.units[uid]; - if ((pUnit->state & 0x01) != TRUE) return 0; - if (order < 0 || order >= pUnit->yccount) return 0; - pYC = &pUnit->ycs[order]; - udb = pYC->order; - if (udb < 0 || udb >= DATABASE_YC_NUM) - { - coef = 1.0f; - } - else - { - coef = pYC->coef; - } - - if (fabsf(coef) <= 1E-8) coef = 1.0f; - if (fabsf(coef - 1.0f) <= 1E-8) return FALSE; - return TRUE; -} - -static int GetUnitYXCount(int uid) -{ - if (uid < 0 || uid >= UNIT_NUM) return 0; - return config.units[uid].yxcount; -} - -static int GetUnitYCCount(int uid) -{ - if (uid < 0 || uid >= UNIT_NUM) return 0; - return config.units[uid].yccount; -} - -static BOOLEAN GetUnitYCType(int uid, int order) -{ - struUnit* pUnit; - struUnitYC* pYC; - - if (uid < 0 || uid >= UNIT_NUM) return 0; - pUnit = &config.units[uid]; - if ((pUnit->state & 0x01) != TRUE) return 0; - if (order < 0 || order >= pUnit->yccount) return 0; - pYC = &pUnit->ycs[order]; - return pYC->highSpeed; -} - static WORD GetUnitYCRegisterAddr(int uid, int point) { struUnit* pUnit; @@ -415,26 +341,6 @@ static bool publishhistoryLowSpeedData(const noPollConn* conn, const int uid, co return false; } -struct memory { - char *response; - size_t size; -}; - -static size_t write_callback(void *ptr, size_t size, size_t nmemb, struct memory *mem) { - size_t new_size = mem->size + size * nmemb; - //fprintf(stderr, "mem is: %u", mem->response); - mem->response = (char *)realloc(mem->response, new_size + 1); - if (mem->response == NULL) { - fprintf(stderr, "Failed to allocate memory.\n"); - return 0; // Out of memory - } - memcpy(&(mem->response[mem->size]), ptr, size * nmemb); - mem->size = new_size; - mem->response[new_size] = '\0'; - return size * nmemb; -} - - static int ftpget(const char* remote, const char* local, const char* user, const char* pwd, const long timeout = 3, struct memory* chunk = NULL) { //vLog(LOG_DEBUG, "start to get %s to local %s, with name: %s, and password: %s.\n", remote, local, user, pwd); @@ -508,549 +414,10 @@ static void* ryftp_process(void* param) } int len = 0; - struRYDeviceData t_data; + //struRYDeviceData t_data; FIELDDES fields[1024]; len = calcFields(fields); - vLog(LOG_DEBUG, "len is: %d\n", len); -#if 0 - fields[len].start = reinterpret_cast(&t_data.localtime) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.localtime); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationY) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationY); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationZ) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationZ); - len++; - fields[len].start = reinterpret_cast(&t_data.iTurbineOperationMode) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTurbineOperationMode); - len++; - fields[len].start = reinterpret_cast(&t_data.iBPLevel) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBPLevel); - len++; - fields[len].start = reinterpret_cast(&t_data.iYPLevel) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iYPLevel); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenToruqe) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenToruqe); - len++; - fields[len].start = reinterpret_cast(&t_data.iRotorSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iRotorSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iTheoreticalPower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTheoreticalPower); - len++; - fields[len].start = reinterpret_cast(&t_data.iReactivePower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iReactivePower); - len++; - fields[len].start = reinterpret_cast(&t_data.iActivePowerSetPointValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iActivePowerSetPointValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iReactivePowerSetPointValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iReactivePowerSetPointValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iSetValueGenSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iSetValueGenSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iSetValuePitchAngle) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iSetValuePitchAngle); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle1RefValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle1RefValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle2RefValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle2RefValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle3RefValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle3RefValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle1) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle1); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle2) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle2); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle3) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle3); - len++; - fields[len].start = reinterpret_cast(&t_data.iVaneDirection) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVaneDirection); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindDirection) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindDirection); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord01) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord01); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord02) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord02); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord03) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord03); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord04) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord04); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord05) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord05); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord06) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord06); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord07) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord07); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord08) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord08); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode01) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode01); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode02) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode02); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode03) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode03); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode04) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode04); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode05) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode05); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode06) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode06); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode07) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode07); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode08) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode08); - len++; - fields[len].start = reinterpret_cast(&t_data.iFrequency) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iFrequency); - len++; - fields[len].start = reinterpret_cast(&t_data.iUL1_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iUL1_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iUL2_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iUL2_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iUL3_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iUL3_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iIL1_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iIL1_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iIL2_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iIL2_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iIL3_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iIL3_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1MotorCurrent) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1MotorCurrent); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2MotorCurrent) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2MotorCurrent); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3MotorCurrent) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3MotorCurrent); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngleBk1) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngleBk1); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngleBk2) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngleBk2); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngleBk3) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngleBk3); - len++; - fields[len].start = reinterpret_cast(&t_data.iCosPhi) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iCosPhi); - len++; - fields[len].start = reinterpret_cast(&t_data.iGearPressA) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGearPressA); - len++; - fields[len].start = reinterpret_cast(&t_data.iGearPressB) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGearPressB); - len++; - fields[len].start = reinterpret_cast(&t_data.iHydrPress) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iHydrPress); - len++; - fields[len].start = reinterpret_cast(&t_data.iNacellePositionLtd) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iNacellePositionLtd); - len++; - fields[len].start = reinterpret_cast(&t_data.iCableTwistTotal) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iCableTwistTotal); - len++; - fields[len].start = reinterpret_cast(&t_data.iNacellePositionTotal) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iNacellePositionTotal); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempOutdoor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempOutdoor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempHub_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempHub_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempNacelle_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempNacelle_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempTowerBase_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempTowerBase_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempCabinetNacelle_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempCabinetNacelle_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempCabinetTowerBase_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempCabinetTowerBase_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempTransformer690_400V_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempTransformer690_400V_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempMV_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempMV_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempMotor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempMotor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempMotor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempMotor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempMotor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempMotor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempBattBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempBattBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempBattBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempBattBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempBattBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempBattBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempCntr_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempCntr_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempInvBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempInvBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempInvBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempInvBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempInvBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempInvBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempPMMHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempPMMHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempPMMHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempPMMHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempPMMHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempPMMHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempPMCHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempPMCHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempPMCHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempPMCHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempPMCHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempPMCHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempRotorBearA_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempRotorBearA_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempRotorBearB_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempRotorBearB_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTemp1GearOil_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTemp1GearOil_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGearBearDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGearBearDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGearBearNDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGearBearNDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenBearDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenBearDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenBearNDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenBearNDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenStatorU_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenStatorU_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenStatorV_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenStatorV_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenStatorW_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenStatorW_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenCoolingAir_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenCoolingAir_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iAvailabillityToday) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAvailabillityToday); - len++; - fields[len].start = reinterpret_cast(&t_data.iAvailabillityTotal) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAvailabillityTotal); - len++; - fields[len].start = reinterpret_cast(&t_data.iKWhThisDay) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iKWhThisDay); - len++; - fields[len].start = reinterpret_cast(&t_data.iKWhOverall) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iKWhOverall); - len++; - fields[len].start = reinterpret_cast(&t_data.iOperationHoursDay) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iOperationHoursDay); - len++; - fields[len].start = reinterpret_cast(&t_data.iOperationHoursOverall) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iOperationHoursOverall); - len++; - fields[len].start = reinterpret_cast(&t_data.iLostKWhThisDay) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iLostKWhThisDay); - len++; - fields[len].start = reinterpret_cast(&t_data.iLostKWhOverall) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iLostKWhOverall); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW001) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW001); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW002) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW002); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW003) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW003); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW004) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW004); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW005) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW005); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW006) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW006); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW007) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW007); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW008) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW008); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW009) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW009); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW010) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW010); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW011) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW011); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW012) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW012); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW013) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW013); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW014) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW014); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW015) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW015); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW016) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW016); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW017) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW017); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW018) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW018); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW019) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW019); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW020) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW020); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW021) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW021); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW022) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW022); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW023) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW023); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW024) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW024); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW025) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW025); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW026) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW026); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW027) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW027); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW028) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW028); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW029) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW029); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW030) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW030); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW031) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW031); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW032) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW032); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW033) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW033); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW034) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW034); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW035) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW035); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW036) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW036); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW037) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW037); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW038) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW038); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW039) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW039); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW040) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW040); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW041) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW041); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW042) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW042); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW043) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW043); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW044) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW044); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW045) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW045); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW046) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW046); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW047) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW047); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW048) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW048); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW049) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW049); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW050) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW050); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed_10sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed_10sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower_10sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower_10sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_10sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_10sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_10min) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_10min); - len++; - fields[len].start = reinterpret_cast(&t_data.iAvailablePower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAvailablePower); - len++; - fields[len].start = reinterpret_cast(&t_data.FirstTriggeredCode) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.FirstTriggeredCode); - len++; - fields[len].start = reinterpret_cast(&t_data.FaultInformation) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.FaultInformation); - len++; - fields[len].start = reinterpret_cast(&t_data.WecRunCondition) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.WecRunCondition); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeedIEC) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeedIEC); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeedIEC_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeedIEC_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeedIEC_10min) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeedIEC_10min); - len++; - fields[len].start = reinterpret_cast(&t_data.iYawPress) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iYawPress); - len++; - fields[len].start = reinterpret_cast(&t_data.iStandardAirDensity) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iStandardAirDensity); - len++; - fields[len].start = reinterpret_cast(&t_data.iAirDensity) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAirDensity); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationYFiltered) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationYFiltered); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationZFiltered) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationZFiltered); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGearWaterCool_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGearWaterCool_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.PowerLimitSource) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.PowerLimitSource); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempOutdoor_10min) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempOutdoor_10min); - len++; -#endif + //判断是否链接单元 int uid = mbt->GetUnitID(0); //默认只接一个设备 @@ -1369,11 +736,21 @@ BOOLEAN CHostADSBFProcess::OnPreCreate(int id) vLog(LOG_DEBUG, "润阳ADS读取配置错误。"); return FALSE; } - +#if 0 m_localIp = m_nOptions.localIp; //本机IP地址 m_localNetId = m_nOptions.localNetId; //本机IP地址 m_remoteIp = m_nOptions.remoteIp; //PLC设备ip地址 m_remoteNetId = m_nOptions.remoteNetId; +#endif + char ipaddress[32]; + memset(ipaddress, '\0', sizeof(ipaddress)); + inet_ntop(AF_INET, &m_nOptions.net.bind_addr, ipaddress, 16); + m_localIp = std::string(ipaddress); + m_localNetId = m_localIp + std::string(".1.1"); + memset(ipaddress, '\0', sizeof(ipaddress)); + inet_ntop(AF_INET, &m_nOptions.net.target_addr, ipaddress, 16); + m_remoteIp = std::string(ipaddress); + m_remoteNetId = m_remoteIp + std::string(".1.1"); m_bHaveFTP = m_nOptions.bHaveFTP; calc(); @@ -1459,7 +836,7 @@ BOOLEAN CHostADSBFProcess::OnTimer(void) if ((m_currentDirNo == -1) && (m_currentFileNo == -1)) { //当前文件和目录都为-1,程序第一次启动。需要获取ftp目录及文件ID readFileID(); - return TRUE; + //return TRUE; } } readRealData(); diff --git a/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp b/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp index 96a808aa..1e1a3465 100644 --- a/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp +++ b/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp @@ -248,81 +248,6 @@ static bool publish_sensor_data(const noPollConn* conn, const char* command, con return true; } -static float GetUnitYCRealFromValue(int uid, int order, LONG value) -{ - int udb; - float coef; - float base; - struUnit* pUnit; - struUnitYC* pYC; - - if (uid < 0 || uid >= UNIT_NUM) return 0; - pUnit = &config.units[uid]; - if ((pUnit->state & 0x01) != TRUE) return 0; - if (order < 0 || order >= pUnit->yccount) return 0; - pYC = &pUnit->ycs[order]; - udb = pYC->order; - if (udb < 0 || udb >= DATABASE_YC_NUM) { - coef = 1.0f; - base = 0.0f; - } else { - coef = pYC->coef; - base = pYC->base; - } - return (float)(value * coef + base); -} - -static BOOLEAN GetUnitYCIsFloat(int uid, int order) -{ - int udb; - float coef = 1.0f; - struUnit* pUnit; - struUnitYC* pYC; - if (uid < 0 || uid >= UNIT_NUM) return 0; - pUnit = &config.units[uid]; - if ((pUnit->state & 0x01) != TRUE) return 0; - if (order < 0 || order >= pUnit->yccount) return 0; - pYC = &pUnit->ycs[order]; - udb = pYC->order; - if (udb < 0 || udb >= DATABASE_YC_NUM) - { - coef = 1.0f; - } - else - { - coef = pYC->coef; - } - - if (fabsf(coef) <= 1E-8) coef = 1.0f; - if (fabsf(coef - 1.0f) <= 1E-8) return FALSE; - return TRUE; -} - -static int GetUnitYXCount(int uid) -{ - if (uid < 0 || uid >= UNIT_NUM) return 0; - return config.units[uid].yxcount; -} - -static int GetUnitYCCount(int uid) -{ - if (uid < 0 || uid >= UNIT_NUM) return 0; - return config.units[uid].yccount; -} - -static BOOLEAN GetUnitYCType(int uid, int order) -{ - struUnit* pUnit; - struUnitYC* pYC; - - if (uid < 0 || uid >= UNIT_NUM) return 0; - pUnit = &config.units[uid]; - if ((pUnit->state & 0x01) != TRUE) return 0; - if (order < 0 || order >= pUnit->yccount) return 0; - pYC = &pUnit->ycs[order]; - return pYC->highSpeed; -} - static WORD GetUnitYCRegisterAddr(int uid, int point) { struUnit* pUnit; @@ -447,74 +372,6 @@ static bool publishhistoryLowSpeedData(const noPollConn* conn, const int uid, co } -#define USE_MEMORY - -#ifdef USE_MEMORY - -struct memory { - char *response; - size_t size; -}; - -static size_t write_callback(void *ptr, size_t size, size_t nmemb, struct memory *mem) -{ - size_t new_size = mem->size + size * nmemb; - mem->response = (char *)realloc(mem->response, new_size + 1); - if (mem->response == NULL) { - vLog(LOG_ERROR, "Failed to allocate memory.\n"); - return 0; // Out of memory - } - memcpy(&(mem->response[mem->size]), ptr, size * nmemb); - mem->size = new_size; - mem->response[new_size] = '\0'; - return size * nmemb; -} - -#else -struct CustomProgress -{ - curl_off_t lastruntime; - CURL *curl; -}; - -static int progressCallback(void* p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) -{ - struct CustomProgress *progress = (struct CustomProgress *)p; - CURL *curl = progress->curl; - curl_off_t curtime = 0; - - curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &curtime); - if ((curtime - progress->lastruntime) >= 3000000) { - progress->lastruntime = curtime; - vLog(LOG_DEBUG, "Total time: %f\n", curtime); - } - vLog(LOG_DEBUG, "UP: %ld bytes of %ld bytes, DOWN: %ld bytes of %ld bytes.\n", ulnow, ultotal, dlnow, dltotal); - if (ultotal) vLog(LOG_DEBUG, "UP progress: %0.2f\n", float(ulnow /ultotal)); - if (dltotal) vLog(LOG_DEBUG, "DOWN progress: %0.2f\n", float(dlnow /dltotal)); - return 0; -} - -static size_t getContentLengthFunc(void *ptr, size_t size, size_t nmemb, void *stream) -{ - int r; - long len = 0; - - r = sscanf((const char*)ptr, "Content-Length: %ld\n", &len); - if (r) *((long *)stream) = len; - return size * nmemb; -} - -static size_t discardFunc(void *ptr, size_t size, size_t nmemb, void *stream) -{ - return size * nmemb; -} - -static size_t writefunc(void* ptr, size_t size, size_t nmemb, FILE* stream) -{ - return fwrite(ptr, size, nmemb, stream); -} -#endif - static int ftpget(const char* remote, const char* local, const char* user, const char* pwd, const long timeout = 3, struct memory* chunk = NULL) { //vLog(LOG_DEBUG, "start to get %s to local %s, with name: %s, and password: %s.\n", remote, local, user, pwd); @@ -525,35 +382,7 @@ static int ftpget(const char* remote, const char* local, const char* user, const snprintf(user_key, sizeof(user_key), "%s:%s", user, pwd); CURLcode ret = CURLE_GOT_NOTHING; -#ifndef USE_MEMORY - FILE *file; - curl_off_t local_file_len = -1; - long filesize = 0; - struct stat file_info; - int use_resume = 0; - - if (stat(local, &file_info) == 0) { - local_file_len = file_info.st_size; - use_resume = 1; - } -#if 0 - file = fopen(local, "ab+"); - if (file == NULL) { - vLog(LOG_ERROR, "open file error(%d,%s)\n", errno, strerror(errno)); - return 0; - } -#endif - curl_easy_setopt(curl, CURLOPT_URL, remote); - curl_easy_setopt(curl, CURLOPT_USERPWD, user_key); - curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, timeout); - curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, getContentLengthFunc); - curl_easy_setopt(curl, CURLOPT_HEADERDATA, &filesize); - curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, use_resume ? local_file_len : 0); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, file); - ret = curl_easy_perform(curl); - fclose(file); -#else + curl_easy_setopt(curl, CURLOPT_URL, remote); curl_easy_setopt(curl, CURLOPT_USERPWD, user_key); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, timeout); @@ -561,7 +390,7 @@ static int ftpget(const char* remote, const char* local, const char* user, const curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)chunk); curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L); // Optional: depending on your FTP server ret = curl_easy_perform(curl); -#endif + curl_easy_cleanup(curl); curl_global_cleanup(); @@ -582,7 +411,7 @@ static void* ryftp_process(void* param) char user[128] = "administrator"; char password[128] = "123456"; char ipaddress[128] = "127.0.0.1"; - char remotePath[128] = "Hard Disk2/data/rtdatalog"; + char remotePath[128] = "/data/rtdatalog"; char pathName[128] = "./"; //配置远方路径 @@ -616,550 +445,11 @@ static void* ryftp_process(void* param) } int len = 0; - struRYDeviceData t_data; + //struRYDeviceData t_data; FIELDDES fields[1024]; len = calcFields(fields); - vLog(LOG_DEBUG, "len is: %d\n", len); -#if 0 - fields[len].start = reinterpret_cast(&t_data.localtime) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.localtime); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationY) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationY); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationZ) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationZ); - len++; - fields[len].start = reinterpret_cast(&t_data.iTurbineOperationMode) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTurbineOperationMode); - len++; - fields[len].start = reinterpret_cast(&t_data.iBPLevel) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBPLevel); - len++; - fields[len].start = reinterpret_cast(&t_data.iYPLevel) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iYPLevel); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenToruqe) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenToruqe); - len++; - fields[len].start = reinterpret_cast(&t_data.iRotorSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iRotorSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iTheoreticalPower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTheoreticalPower); - len++; - fields[len].start = reinterpret_cast(&t_data.iReactivePower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iReactivePower); - len++; - fields[len].start = reinterpret_cast(&t_data.iActivePowerSetPointValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iActivePowerSetPointValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iReactivePowerSetPointValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iReactivePowerSetPointValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iSetValueGenSpeed) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iSetValueGenSpeed); - len++; - fields[len].start = reinterpret_cast(&t_data.iSetValuePitchAngle) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iSetValuePitchAngle); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle1RefValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle1RefValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle2RefValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle2RefValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle3RefValue) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle3RefValue); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle1) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle1); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle2) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle2); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngle3) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngle3); - len++; - fields[len].start = reinterpret_cast(&t_data.iVaneDirection) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVaneDirection); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindDirection) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindDirection); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord01) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord01); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord02) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord02); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord03) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord03); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord04) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord04); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord05) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord05); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord06) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord06); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord07) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord07); - len++; - fields[len].start = reinterpret_cast(&t_data.StateWord08) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.StateWord08); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode01) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode01); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode02) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode02); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode03) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode03); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode04) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode04); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode05) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode05); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode06) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode06); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode07) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode07); - len++; - fields[len].start = reinterpret_cast(&t_data.ActiveStatusCode08) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.ActiveStatusCode08); - len++; - fields[len].start = reinterpret_cast(&t_data.iFrequency) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iFrequency); - len++; - fields[len].start = reinterpret_cast(&t_data.iUL1_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iUL1_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iUL2_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iUL2_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iUL3_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iUL3_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iIL1_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iIL1_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iIL2_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iIL2_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iIL3_690V) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iIL3_690V); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1MotorCurrent) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1MotorCurrent); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2MotorCurrent) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2MotorCurrent); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3MotorCurrent) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3MotorCurrent); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngleBk1) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngleBk1); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngleBk2) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngleBk2); - len++; - fields[len].start = reinterpret_cast(&t_data.iPitchAngleBk3) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iPitchAngleBk3); - len++; - fields[len].start = reinterpret_cast(&t_data.iCosPhi) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iCosPhi); - len++; - fields[len].start = reinterpret_cast(&t_data.iGearPressA) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGearPressA); - len++; - fields[len].start = reinterpret_cast(&t_data.iGearPressB) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGearPressB); - len++; - fields[len].start = reinterpret_cast(&t_data.iHydrPress) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iHydrPress); - len++; - fields[len].start = reinterpret_cast(&t_data.iNacellePositionLtd) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iNacellePositionLtd); - len++; - fields[len].start = reinterpret_cast(&t_data.iCableTwistTotal) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iCableTwistTotal); - len++; - fields[len].start = reinterpret_cast(&t_data.iNacellePositionTotal) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iNacellePositionTotal); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempOutdoor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempOutdoor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempHub_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempHub_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempNacelle_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempNacelle_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempTowerBase_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempTowerBase_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempCabinetNacelle_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempCabinetNacelle_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempCabinetTowerBase_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempCabinetTowerBase_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempTransformer690_400V_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempTransformer690_400V_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempMV_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempMV_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempMotor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempMotor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempMotor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempMotor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempMotor_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempMotor_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempBattBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempBattBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempBattBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempBattBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempBattBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempBattBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempCntr_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempCntr_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempInvBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempInvBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempInvBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempInvBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempInvBox_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempInvBox_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempPMMHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempPMMHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempPMMHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempPMMHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempPMMHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempPMMHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade1TempPMCHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade1TempPMCHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade2TempPMCHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade2TempPMCHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iBlade3TempPMCHeatsink_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iBlade3TempPMCHeatsink_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempRotorBearA_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempRotorBearA_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempRotorBearB_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempRotorBearB_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTemp1GearOil_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTemp1GearOil_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGearBearDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGearBearDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGearBearNDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGearBearNDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenBearDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenBearDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenBearNDE_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenBearNDE_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenStatorU_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenStatorU_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenStatorV_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenStatorV_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenStatorW_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenStatorW_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGenCoolingAir_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGenCoolingAir_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iAvailabillityToday) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAvailabillityToday); - len++; - fields[len].start = reinterpret_cast(&t_data.iAvailabillityTotal) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAvailabillityTotal); - len++; - fields[len].start = reinterpret_cast(&t_data.iKWhThisDay) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iKWhThisDay); - len++; - fields[len].start = reinterpret_cast(&t_data.iKWhOverall) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iKWhOverall); - len++; - fields[len].start = reinterpret_cast(&t_data.iOperationHoursDay) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iOperationHoursDay); - len++; - fields[len].start = reinterpret_cast(&t_data.iOperationHoursOverall) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iOperationHoursOverall); - len++; - fields[len].start = reinterpret_cast(&t_data.iLostKWhThisDay) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iLostKWhThisDay); - len++; - fields[len].start = reinterpret_cast(&t_data.iLostKWhOverall) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iLostKWhOverall); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW001) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW001); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW002) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW002); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW003) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW003); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW004) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW004); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW005) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW005); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW006) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW006); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW007) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW007); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW008) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW008); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW009) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW009); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW010) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW010); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW011) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW011); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW012) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW012); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW013) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW013); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW014) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW014); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW015) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW015); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW016) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW016); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW017) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW017); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW018) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW018); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW019) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW019); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW020) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW020); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW021) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW021); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW022) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW022); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW023) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW023); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW024) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW024); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW025) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW025); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW026) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW026); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW027) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW027); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW028) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW028); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW029) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW029); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW030) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW030); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW031) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW031); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW032) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW032); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW033) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW033); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW034) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW034); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW035) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW035); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW036) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW036); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW037) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW037); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW038) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW038); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW039) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW039); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW040) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW040); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW041) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW041); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW042) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW042); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW043) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW043); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW044) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW044); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW045) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW045); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW046) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW046); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW047) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW047); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW048) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW048); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW049) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW049); - len++; - fields[len].start = reinterpret_cast(&t_data.SCW050) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.SCW050); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed_10sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed_10sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenSpeed_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenSpeed_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower_10sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower_10sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iGenPower_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iGenPower_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_10sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_10sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeed_10min) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeed_10min); - len++; - fields[len].start = reinterpret_cast(&t_data.iAvailablePower) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAvailablePower); - len++; - fields[len].start = reinterpret_cast(&t_data.FirstTriggeredCode) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.FirstTriggeredCode); - len++; - fields[len].start = reinterpret_cast(&t_data.FaultInformation) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.FaultInformation); - len++; - fields[len].start = reinterpret_cast(&t_data.WecRunCondition) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.WecRunCondition); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeedIEC) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeedIEC); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeedIEC_30sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeedIEC_30sec); - len++; - fields[len].start = reinterpret_cast(&t_data.iWindSpeedIEC_10min) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iWindSpeedIEC_10min); - len++; - fields[len].start = reinterpret_cast(&t_data.iYawPress) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iYawPress); - len++; - fields[len].start = reinterpret_cast(&t_data.iStandardAirDensity) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iStandardAirDensity); - len++; - fields[len].start = reinterpret_cast(&t_data.iAirDensity) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iAirDensity); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationYFiltered) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationYFiltered); - len++; - fields[len].start = reinterpret_cast(&t_data.iVibrationZFiltered) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iVibrationZFiltered); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempGearWaterCool_1sec) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempGearWaterCool_1sec); - len++; - fields[len].start = reinterpret_cast(&t_data.PowerLimitSource) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.PowerLimitSource); - len++; - fields[len].start = reinterpret_cast(&t_data.iTempOutdoor_10min) - reinterpret_cast(&t_data); - fields[len].length = sizeof(t_data.iTempOutdoor_10min); - len++; -#endif + //判断是否链接单元 int uid = mbt->GetUnitID(0); //默认只接一个设备 if (uid < 0 || uid >= UNIT_NUM) return ((void*)0); diff --git a/das-dn/inc/public.h b/das-dn/inc/public.h index f08519a2..7657b495 100644 --- a/das-dn/inc/public.h +++ b/das-dn/inc/public.h @@ -622,11 +622,7 @@ typedef struct typedef struct { - char localIp[32]; - char localNetId[48]; - char remoteIp[32]; - char remoteNetId[48]; - + struNetWorkOption net; BOOLEAN bHaveFTP; struFTPOption ftp; } struRYADSOption; diff --git a/das-dn/inc/ryFileDef.h b/das-dn/inc/ryFileDef.h index 121a49bd..43f413ee 100644 --- a/das-dn/inc/ryFileDef.h +++ b/das-dn/inc/ryFileDef.h @@ -24,6 +24,11 @@ typedef struct { int address; } struDataLengthMBAddr; +struct memory { + char *response; + size_t size; +}; + typedef struct { int uid; //ftp参数信息 @@ -234,5 +239,12 @@ typedef struct { #pragma pack() int calcFields(FIELDDES *fields); +size_t write_callback(void *ptr, size_t size, size_t nmemb, struct memory *mem); +float GetUnitYCRealFromValue(int uid, int order, LONG value); +BOOLEAN GetUnitYCIsFloat(int uid, int order); +int GetUnitYXCount(int uid); +int GetUnitYCCount(int uid); +BOOLEAN GetUnitYCType(int uid, int order); + #endif //_RYFILE_DEFINE_H_