调整CMakeFiles的预定义

This commit is contained in:
zhouhuang 2024-12-03 20:27:52 +08:00
parent 7931f6abc8
commit a65b3a8299
8 changed files with 204 additions and 1468 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -12,18 +12,24 @@
#include <signal.h>
#ifndef USE_NOPOLL_WEBSOCKET
#include <queue>
#include <string>
#include <stack>
#include <easywsclient.hpp>
using easywsclient::WebSocket;
#else
#include <nopoll.h>
#include <nopoll_decl.h>
#define MAX_MSG_COUNT 4096
#endif
#include <json.h>
#if 0
#include <md5.h>
#include <base64.h>
#include <mbedtls/aes.h>
#include <mbedtls/error.h>
#endif
#include "soe.h"
#include "yxbw.h"
@ -33,8 +39,6 @@
#include "public.h"
#define MAX_MSG_COUNT 4096
typedef std::unordered_map<std::string, short> uid2pidmap;
#define CMD_CONTROL_OPERATION 0
@ -71,11 +75,6 @@ typedef struct {
} attrvectorGroup;
typedef std::unordered_map<int, attrvectorGroup> pid2attrvectormap;
#include <queue>
#include <string>
#include <stack>
class CRYDevice
{
public:

View File

@ -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;
}
}
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;
}

View File

@ -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<uintptr_t>(&t_data.localtime) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.localtime);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationY) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationY);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationZ) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationZ);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTurbineOperationMode) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTurbineOperationMode);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBPLevel) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBPLevel);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iYPLevel) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iYPLevel);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenToruqe) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenToruqe);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iRotorSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iRotorSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTheoreticalPower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTheoreticalPower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iReactivePower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iReactivePower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iActivePowerSetPointValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iActivePowerSetPointValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iReactivePowerSetPointValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iReactivePowerSetPointValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iSetValueGenSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iSetValueGenSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iSetValuePitchAngle) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iSetValuePitchAngle);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle1RefValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle1RefValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle2RefValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle2RefValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle3RefValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle3RefValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle1) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle1);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle2) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle2);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle3) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle3);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVaneDirection) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVaneDirection);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindDirection) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindDirection);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord01) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord01);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord02) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord02);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord03) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord03);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord04) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord04);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord05) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord05);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord06) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord06);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord07) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord07);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord08) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord08);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode01) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode01);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode02) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode02);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode03) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode03);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode04) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode04);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode05) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode05);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode06) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode06);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode07) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode07);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode08) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode08);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iFrequency) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iFrequency);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iUL1_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iUL1_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iUL2_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iUL2_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iUL3_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iUL3_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iIL1_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iIL1_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iIL2_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iIL2_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iIL3_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iIL3_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1MotorCurrent) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1MotorCurrent);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2MotorCurrent) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2MotorCurrent);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3MotorCurrent) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3MotorCurrent);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngleBk1) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngleBk1);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngleBk2) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngleBk2);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngleBk3) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngleBk3);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iCosPhi) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iCosPhi);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGearPressA) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGearPressA);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGearPressB) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGearPressB);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iHydrPress) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iHydrPress);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iNacellePositionLtd) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iNacellePositionLtd);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iCableTwistTotal) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iCableTwistTotal);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iNacellePositionTotal) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iNacellePositionTotal);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempOutdoor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempOutdoor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempHub_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempHub_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempNacelle_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempNacelle_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempTowerBase_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempTowerBase_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempCabinetNacelle_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempCabinetNacelle_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempCabinetTowerBase_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempCabinetTowerBase_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempTransformer690_400V_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempTransformer690_400V_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempMV_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempMV_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempMotor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempMotor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempMotor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempMotor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempMotor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempMotor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempBattBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempBattBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempBattBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempBattBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempBattBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempBattBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempCntr_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempCntr_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempInvBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempInvBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempInvBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempInvBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempInvBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempInvBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempPMMHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempPMMHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempPMMHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempPMMHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempPMMHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempPMMHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempPMCHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempPMCHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempPMCHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempPMCHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempPMCHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempPMCHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempRotorBearA_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempRotorBearA_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempRotorBearB_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempRotorBearB_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTemp1GearOil_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTemp1GearOil_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGearBearDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGearBearDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGearBearNDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGearBearNDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenBearDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenBearDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenBearNDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenBearNDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenStatorU_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenStatorU_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenStatorV_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenStatorV_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenStatorW_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenStatorW_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenCoolingAir_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenCoolingAir_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAvailabillityToday) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAvailabillityToday);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAvailabillityTotal) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAvailabillityTotal);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iKWhThisDay) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iKWhThisDay);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iKWhOverall) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iKWhOverall);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iOperationHoursDay) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iOperationHoursDay);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iOperationHoursOverall) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iOperationHoursOverall);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iLostKWhThisDay) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iLostKWhThisDay);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iLostKWhOverall) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iLostKWhOverall);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW001) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW001);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW002) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW002);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW003) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW003);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW004) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW004);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW005) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW005);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW006) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW006);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW007) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW007);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW008) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW008);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW009) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW009);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW010) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW010);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW011) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW011);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW012) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW012);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW013) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW013);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW014) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW014);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW015) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW015);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW016) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW016);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW017) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW017);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW018) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW018);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW019) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW019);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW020) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW020);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW021) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW021);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW022) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW022);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW023) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW023);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW024) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW024);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW025) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW025);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW026) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW026);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW027) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW027);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW028) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW028);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW029) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW029);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW030) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW030);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW031) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW031);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW032) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW032);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW033) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW033);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW034) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW034);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW035) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW035);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW036) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW036);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW037) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW037);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW038) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW038);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW039) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW039);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW040) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW040);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW041) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW041);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW042) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW042);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW043) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW043);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW044) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW044);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW045) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW045);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW046) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW046);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW047) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW047);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW048) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW048);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW049) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW049);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW050) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW050);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed_10sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed_10sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower_10sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower_10sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_10sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_10sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_10min) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_10min);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAvailablePower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAvailablePower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.FirstTriggeredCode) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.FirstTriggeredCode);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.FaultInformation) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.FaultInformation);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.WecRunCondition) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.WecRunCondition);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeedIEC) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeedIEC);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeedIEC_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeedIEC_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeedIEC_10min) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeedIEC_10min);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iYawPress) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iYawPress);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iStandardAirDensity) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iStandardAirDensity);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAirDensity) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAirDensity);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationYFiltered) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationYFiltered);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationZFiltered) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationZFiltered);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGearWaterCool_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGearWaterCool_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.PowerLimitSource) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.PowerLimitSource);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempOutdoor_10min) - reinterpret_cast<uintptr_t>(&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();

View File

@ -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<uintptr_t>(&t_data.localtime) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.localtime);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationY) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationY);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationZ) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationZ);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTurbineOperationMode) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTurbineOperationMode);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBPLevel) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBPLevel);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iYPLevel) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iYPLevel);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenToruqe) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenToruqe);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iRotorSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iRotorSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTheoreticalPower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTheoreticalPower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iReactivePower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iReactivePower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iActivePowerSetPointValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iActivePowerSetPointValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iReactivePowerSetPointValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iReactivePowerSetPointValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iSetValueGenSpeed) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iSetValueGenSpeed);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iSetValuePitchAngle) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iSetValuePitchAngle);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle1RefValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle1RefValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle2RefValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle2RefValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle3RefValue) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle3RefValue);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle1) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle1);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle2) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle2);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngle3) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngle3);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVaneDirection) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVaneDirection);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindDirection) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindDirection);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord01) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord01);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord02) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord02);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord03) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord03);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord04) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord04);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord05) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord05);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord06) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord06);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord07) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord07);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.StateWord08) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.StateWord08);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode01) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode01);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode02) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode02);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode03) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode03);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode04) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode04);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode05) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode05);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode06) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode06);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode07) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode07);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.ActiveStatusCode08) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.ActiveStatusCode08);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iFrequency) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iFrequency);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iUL1_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iUL1_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iUL2_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iUL2_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iUL3_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iUL3_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iIL1_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iIL1_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iIL2_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iIL2_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iIL3_690V) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iIL3_690V);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1MotorCurrent) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1MotorCurrent);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2MotorCurrent) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2MotorCurrent);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3MotorCurrent) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3MotorCurrent);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngleBk1) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngleBk1);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngleBk2) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngleBk2);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iPitchAngleBk3) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iPitchAngleBk3);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iCosPhi) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iCosPhi);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGearPressA) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGearPressA);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGearPressB) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGearPressB);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iHydrPress) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iHydrPress);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iNacellePositionLtd) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iNacellePositionLtd);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iCableTwistTotal) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iCableTwistTotal);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iNacellePositionTotal) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iNacellePositionTotal);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempOutdoor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempOutdoor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempHub_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempHub_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempNacelle_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempNacelle_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempTowerBase_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempTowerBase_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempCabinetNacelle_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempCabinetNacelle_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempCabinetTowerBase_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempCabinetTowerBase_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempTransformer690_400V_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempTransformer690_400V_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempMV_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempMV_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempMotor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempMotor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempMotor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempMotor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempMotor_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempMotor_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempBattBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempBattBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempBattBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempBattBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempBattBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempBattBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempCntr_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempCntr_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempInvBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempInvBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempInvBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempInvBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempInvBox_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempInvBox_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempPMMHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempPMMHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempPMMHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempPMMHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempPMMHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempPMMHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade1TempPMCHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade1TempPMCHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade2TempPMCHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade2TempPMCHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iBlade3TempPMCHeatsink_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iBlade3TempPMCHeatsink_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempRotorBearA_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempRotorBearA_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempRotorBearB_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempRotorBearB_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTemp1GearOil_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTemp1GearOil_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGearBearDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGearBearDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGearBearNDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGearBearNDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenBearDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenBearDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenBearNDE_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenBearNDE_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenStatorU_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenStatorU_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenStatorV_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenStatorV_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenStatorW_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenStatorW_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGenCoolingAir_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGenCoolingAir_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAvailabillityToday) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAvailabillityToday);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAvailabillityTotal) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAvailabillityTotal);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iKWhThisDay) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iKWhThisDay);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iKWhOverall) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iKWhOverall);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iOperationHoursDay) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iOperationHoursDay);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iOperationHoursOverall) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iOperationHoursOverall);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iLostKWhThisDay) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iLostKWhThisDay);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iLostKWhOverall) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iLostKWhOverall);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW001) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW001);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW002) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW002);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW003) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW003);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW004) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW004);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW005) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW005);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW006) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW006);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW007) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW007);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW008) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW008);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW009) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW009);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW010) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW010);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW011) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW011);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW012) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW012);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW013) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW013);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW014) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW014);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW015) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW015);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW016) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW016);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW017) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW017);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW018) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW018);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW019) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW019);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW020) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW020);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW021) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW021);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW022) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW022);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW023) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW023);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW024) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW024);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW025) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW025);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW026) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW026);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW027) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW027);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW028) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW028);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW029) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW029);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW030) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW030);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW031) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW031);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW032) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW032);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW033) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW033);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW034) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW034);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW035) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW035);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW036) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW036);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW037) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW037);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW038) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW038);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW039) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW039);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW040) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW040);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW041) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW041);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW042) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW042);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW043) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW043);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW044) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW044);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW045) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW045);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW046) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW046);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW047) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW047);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW048) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW048);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW049) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW049);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.SCW050) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.SCW050);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed_10sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed_10sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenSpeed_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenSpeed_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower_10sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower_10sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iGenPower_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iGenPower_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_10sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_10sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeed_10min) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeed_10min);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAvailablePower) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAvailablePower);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.FirstTriggeredCode) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.FirstTriggeredCode);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.FaultInformation) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.FaultInformation);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.WecRunCondition) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.WecRunCondition);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeedIEC) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeedIEC);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeedIEC_30sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeedIEC_30sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iWindSpeedIEC_10min) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iWindSpeedIEC_10min);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iYawPress) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iYawPress);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iStandardAirDensity) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iStandardAirDensity);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iAirDensity) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iAirDensity);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationYFiltered) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationYFiltered);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iVibrationZFiltered) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iVibrationZFiltered);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempGearWaterCool_1sec) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.iTempGearWaterCool_1sec);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.PowerLimitSource) - reinterpret_cast<uintptr_t>(&t_data);
fields[len].length = sizeof(t_data.PowerLimitSource);
len++;
fields[len].start = reinterpret_cast<uintptr_t>(&t_data.iTempOutdoor_10min) - reinterpret_cast<uintptr_t>(&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);

View File

@ -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;

View File

@ -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_