This commit is contained in:
zhouhuang 2024-11-20 15:43:54 +08:00
parent 94b6344e3e
commit 1089ebb5c6
11 changed files with 4118 additions and 1624 deletions

View File

@ -45,14 +45,15 @@ else ()
message ("else:${CMAKE_C_FLAGS_RELEASE}")
endif()
option (HAVE_FTP_PROCESS "use ry ftp" ON)
if (HAVE_FTP_PROCESS)
add_definitions(-DHAVE_FTP_PROCESS)
set (APP_LIBS ${APP_LIBS} curl)
endif ()
# option (HAVE_FTP_PROCESS "use ry ftp" ON)
# if (HAVE_FTP_PROCESS)
# add_definitions(-DHAVE_FTP_PROCESS)
# set (APP_LIBS ${APP_LIBS} curl)
# endif ()
find_package(miniocpp REQUIRED)
target_link_libraries(application PRIVATE miniocpp::miniocpp)
set (APP_LIBS ${APP_LIBS} miniocpp::miniocpp)
# target_link_libraries(application PRIVATE miniocpp::miniocpp)
include_directories (
inc
@ -80,8 +81,10 @@ set (APP_SRCS
hostiec104/host_iec104.cpp
hostmodbusrtu/host_modbus_rtu.cpp
hostmodbustcp/host_modbus_tcp.cpp
hostmodbustcpbf/host_modbus_tcp_bf.cpp
rtustatusproc/rtustatus.cpp
subiec104/sub_iec104.cpp
submodbustcp/sub_modbus_tcp.cpp
zjd3100proc/zjd3100pro.cpp
minio/ftp2minio.cpp
)
@ -220,12 +223,9 @@ endif ()
include_directories ("${CMAKE_CURRENT_BINARY_DIR}")
link_directories (${LINK_DIR})
if (UNIX)
set (APP_LIBS ${APP_LIBS} pthread)
set (APP_LIBS ${APP_LIBS} dl)
set (APP_LIBS ${APP_LIBS} rt)
#set (APP_LIBS ${APP_LIBS} websockets)
endif()
set (APP_LIBS ${APP_LIBS} pthread)
set (APP_LIBS ${APP_LIBS} dl)
set (APP_LIBS ${APP_LIBS} rt)
#add_link_options (-static)
add_executable (application ${APP_SRCS})

View File

@ -3,10 +3,11 @@
"configurePresets": [
{
"name": "debug",
"name": "default",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"CMAKE_BUILD_TYPE": "Release"
}
}
]

View File

@ -7,9 +7,8 @@
#include "../rtustatusproc/rtustatus.h"
#include "../zjd3100proc/zjd3100pro.h"
#include "../minio/ftp2minio.h"
//#include "../bfftpfile2issmqtt/bfftpfile2issmqtt.h"
#ifdef USE_WEBSOCKET
#endif
#include "../hostmodbustcpbf/host_modbus_tcp_bf.h"
BYTE CChangeMaster::m_tcitype;
@ -355,11 +354,6 @@ void CChangeMaster::StartUp(void)
vLog(LOG_INFO, "协议<%d>创建为: iec104从协议.\n", i);
procs[i] = new CSubIEC104Process();
}
else if (PROTOCOL_FTP2MINIO == config.processes[i].proto)
{
vLog(LOG_INFO, "协议<%d>创建为: FTP读取转MINIO存储协议.\n", i);
procs[i] = new CFtp2MinioProcess();
}
else if (PROTOCOL_LOCAL_DEBUG == config.processes[i].proto)
{//Local debug
vLog(LOG_INFO, "协议<%d>创建为: 本地调试协议.\n", i);
@ -370,6 +364,21 @@ void CChangeMaster::StartUp(void)
vLog(LOG_INFO, "协议<%d>创建为: 网关状态协议.\n", i);
procs[i] = new CRTUStatusProcess();
}
else if (PROTOCOL_FTP2MINIO == config.processes[i].proto)
{
vLog(LOG_INFO, "协议<%d>创建为: FTP读取转MINIO存储协议.\n", i);
procs[i] = new CFtp2MinioProcess();
}
else if (PROTOCOL_HOST_BF_MODBUSTCP == config.processes[i].proto)
{
vLog(LOG_INFO, "协议<%d>创建为: 倍福modbus tcp主协议.\n", i);
procs[i] = new CHostModbusTcpBFProcess();
}
else if (PROTOCOL_HOST_BF_ADS == config.processes[i].proto)
{
vLog(LOG_INFO, "协议<%d>创建为: 倍福ADS采集协议.\n", i);
//procs[i] = new CHostModbusTcpProcess();
}
else
{
vLog(LOG_ERROR, "(%s,%d)系统不支持该协议或该协议未知.\n", config.processes[i].name, config.processes[i].proto);

View File

@ -221,7 +221,7 @@ int main(int argc, char** argv)
}
//此处增加一条协议配置
#if 1
#if 0
int i;
for (i = 0; i < PROCESSES_NUM; i++)
{
@ -229,6 +229,7 @@ int main(int argc, char** argv)
}
memcpy(&config.processes[i], &config.processes[0], sizeof(struProcess));
config.processes[i].proto = PROTOCOL_FTP2MINIO;
snprintf(config.processes[i].option.ftp2minio.ftp.user, sizeof(config.processes[i].option.ftp2minio.ftp.user), "%s", "administrator");
#endif
unsigned int m_runCount = 0;
unsigned int count = 0;

File diff suppressed because it is too large Load Diff

View File

@ -4,172 +4,6 @@
#include "netproc.h"
#include "modbus_def.h"
#include <dirent.h>
#include <nopoll.h>
#include <nopoll_decl.h>
#pragma pack(1)
typedef struct {
QLONG localtime;// PLC本地时间 8 none 0.0001 毫秒 little endian 系统
WORD iGenSpeed;// 发电机转速 2 200 0.1 转/分 40ms 控制系统
WORD iGenPower;// 机组有功功率 2 201 0.1 千瓦 40ms 控制系统
WORD iWindSpeed;// 风速 2 202 0.01 米/秒 40ms 气象
WORD iVibrationY;// 机舱振动前后方向 2 203 0.001 米/秒^2 40ms 机舱
WORD iVibrationZ;// 机舱振动左右方向 2 204 0.001 米/秒^2 40ms 机舱
WORD iTurbineOperationMode;// 运行模式 2 205 1 需要解析 1s 控制系统
WORD iBPLevel;// 刹车等级 2 206 1 需要解析 1s 控制系统
WORD iYPLevel;// 偏航运行模式 2 207 1 需要解析 1s 控制系统
WORD iWindSpeed_1sec;// 风速1秒均值 2 208 0.01 米/秒 1s 控制系统
WORD iGenSpeed_1sec;// 发电机转速1秒均值 2 209 0.1 转/分 1s 控制系统
WORD iGenPower_1sec;// 机组有功1秒均值 2 210 0.1 千瓦 1s 控制系统
WORD iGenToruqe_1sec;// 发电机扭矩1秒均值 2 211 0.1 牛米 1s 控制系统
WORD iRotorSpeed;// 风轮转速 2 212 0.1 转/分 1s 控制系统
WORD iTheoreticalPower;// 理论有功功率 2 213 0.1 千瓦 1s 控制系统
WORD iReactivePower;// 无功功率 2 214 0.1 千乏 1s 控制系统
WORD iActivePowerSetPointValue;// 有功设定值 2 215 0.1 千瓦 1s 控制系统
WORD iCosPhiSetValue;// 功率因数设定值 2 216 0.001 . 1s 控制系统
WORD iSetValueGenSpeed;// 发电机转速设定值 2 217 0.1 转/分 1s 控制系统
WORD iSetValuePitchAngle;// 桨叶角度设定值 2 218 0.01 度 1s 控制系统
WORD iPitchAngle1RefValue;// 桨叶1角度给定 2 219 0.01 度 1s 控制系统
WORD iPitchAngle2RefValue;// 桨叶2角度给定 2 220 0.01 度 1s 控制系统
WORD iPitchAngle3RefValue;// 桨叶3角度给定 2 221 0.01 度 1s 控制系统
WORD iPitchAngle1;// 桨叶1角度 2 222 0.01 度 1s 变桨系统
WORD iPitchAngle2;// 桨叶2角度 2 223 0.01 度 1s 变桨系统
WORD iPitchAngle3;// 桨叶3角度 2 224 0.01 度 1s 变桨系统
WORD iVaneDirection;// 机舱方向 2 225 0.1 度 1s 气象
WORD iWindDirection;// 风向(与机舱夹角) 2 226 0.1 度 1s 气象
WORD StateWord01;// 状态字01 2 227 1 需要解析 1s 控制系统 详细解析见 状态字解析
WORD StateWord02;// 状态字02 2 228 1 需要解析 1s 控制系统
WORD StateWord03;// 状态字03 2 229 1 需要解析 1s 控制系统
WORD StateWord04;// 状态字04 2 230 1 需要解析 1s 控制系统
WORD StateWord05;// 状态字05 2 231 1 需要解析 1s 控制系统
WORD StateWord06;// 状态字06 2 232 1 需要解析 1s 控制系统
WORD StateWord07;// 状态字07 2 233 1 需要解析 1s 控制系统
WORD StateWord08;// 状态字08 2 234 1 需要解析 1s 控制系统
DWORD ActiveStatusCode01;// 故障代码01 4 235 1 需要解析 1s 控制系统 代表目前已经触发的故障代码类似02HH04HL005L
DWORD ActiveStatusCode02;// 故障代码02 4 237 1 需要解析 1s 控制系统 详细解析见故障代码字解析
DWORD ActiveStatusCode03;// 故障代码03 4 239 1 需要解析 1s 控制系统
DWORD ActiveStatusCode04;// 故障代码04 4 241 1 需要解析 1s 控制系统
DWORD ActiveStatusCode05;// 故障代码05 4 243 1 需要解析 1s 控制系统
DWORD ActiveStatusCode06;// 故障代码06 4 245 1 需要解析 1s 控制系统
DWORD ActiveStatusCode07;// 故障代码07 4 247 1 需要解析 1s 控制系统
DWORD ActiveStatusCode08;// 故障代码08 4 249 1 需要解析 1s 控制系统
WORD iFrequency;// 电网频率 2 251 0.01 赫兹 1s 电网
WORD iUL1_690V;// 电网L1相电压 2 252 0.1 伏 1s 电网
WORD iUL2_690V;// 电网L2相电压 2 253 0.1 伏 1s 电网
WORD iUL3_690V;// 电网L3相电压 2 254 0.1 伏 1s 电网
WORD iIL1_690V;// 电网L1相电流 2 255 0.1 安 1s 电网
WORD iIL2_690V;// 电网L2相电流 2 256 0.1 安 1s 电网
WORD iIL3_690V;// 电网L3相电流 2 257 0.1 安 1s 电网
WORD iBlade1MotorCurrent;// 变桨电机1电流 2 258 0.1 安 1s 变桨系统
WORD iBlade2MotorCurrent;// 变桨电机2电流 2 259 0.1 安 1s 变桨系统
WORD iBlade3MotorCurrent;// 变桨电机3电流 2 260 0.1 安 1s 变桨系统
WORD iPitchAngleBk1;// 备用桨叶角度1 2 261 0.01 度 1s 变桨系统
WORD iPitchAngleBk2;// 备用桨叶角度2 2 262 0.01 度 1s 变桨系统
WORD iPitchAngleBk3;// 备用桨叶角度3 2 263 0.01 度 1s 变桨系统
WORD iCosPhi;// 并网点功率因数 2 264 0.001 . 1s 电网
WORD iGearPressA;// 齿轮箱油压A 2 265 0.1 巴 1s 齿轮箱
WORD iGearPressB;// 齿轮箱油压B 2 266 0.1 巴 1s 齿轮箱
WORD iHydrPress;// 液压系统压力 2 267 0.1 巴 1s 液压系统
WORD iNacellePositionLtd;// 机舱绝对方向 2 268 0.1 度 1s 机舱
WORD iCableTwistTotal;// 总扭缆角度 2 269 0.1 度 1s 机舱
WORD iNacellePositionTotal;// 机舱方向 2 270 0.1 度 1s 机舱
WORD iTempOutdoor_1sec;// 环境温度 2 271 0.1 摄氏度 1s 环境
WORD iTempHub_1sec;// 轮毂内温度 2 272 0.1 摄氏度 1s 轮毂
WORD iTempNacelle_1sec;// 机舱内温度 2 273 0.1 摄氏度 1s 机舱
WORD iTempTowerBase_1sec;// 塔基内温度 2 274 0.1 摄氏度 1s 塔基
WORD iTempCabinetNacelle_1sec;// 机舱柜内温度 2 275 0.1 摄氏度 1s 机舱
WORD iTempCabinetTowerBase_1sec;// 塔基柜内温度 2 276 0.1 摄氏度 1s 塔基
WORD iTempTransformer690_400V_1sec;// 400伏变压器温度 2 277 0.1 摄氏度 1s 塔基
WORD iTempMV_1sec;// 箱变温度 2 278 0.1 摄氏度 1s 箱变
WORD iBlade1TempMotor_1sec;// 变桨电机1温度 2 279 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempMotor_1sec;// 变桨电机2温度 2 280 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempMotor_1sec;// 变桨电机3温度 2 281 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempBattBox_1sec;// 变桨电池柜1温度 2 282 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempBattBox_1sec;// 变桨电池柜2温度 2 283 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempBattBox_1sec;// 变桨电池柜3温度 2 284 0.1 摄氏度 1s 变桨系统
WORD iTempCntr_1sec;// 变桨中控箱温度 2 285 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempInvBox_1sec;// 变桨逆变器1温度 2 286 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempInvBox_1sec;// 变桨逆变器2温度 2 287 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempInvBox_1sec;// 变桨逆变器3温度 2 288 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempPMMHeatsink_1sec;// 变桨PMM1散热器温度 2 289 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempPMMHeatsink_1sec;// 变桨PMM2散热器温度 2 290 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempPMMHeatsink_1sec;// 变桨PMM3散热器温度 2 291 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempPMCHeatsink_1sec;// 变桨PMC1散热器温度 2 292 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempPMCHeatsink_1sec;// 变桨PMC2散热器温度 2 293 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempPMCHeatsink_1sec;// 变桨PMC3散热器温度 2 294 0.1 摄氏度 1s 变桨系统
WORD iTempRotorBearA_1sec;// 主轴承A温度 2 295 0.1 摄氏度 1s 传动链
WORD iTempRotorBearB_1sec;// 主轴承B温度 2 296 0.1 摄氏度 1s 传动链
WORD iTemp1GearOil_1sec;// 齿轮箱油温 2 297 0.1 摄氏度 1s 齿轮箱
WORD iTempGearBearDE_1sec;// 齿轮箱驱动齿轴承温度 2 298 0.1 摄氏度 1s 齿轮箱
WORD iTempGearBearNDE_1sec;// 齿轮箱非驱动侧轴承温度 2 299 0.1 摄氏度 1s 发电机
WORD iTempGenBearDE_1sec;// 发电机驱动侧轴承温度 2 300 0.1 摄氏度 1s 发电机
WORD iTempGenBearNDE_1sec;// 发电机非驱动侧轴承温度 2 301 0.1 摄氏度 1s 发电机
WORD iTempGenStatorU_1sec;// 发电机绕组U温度 2 302 0.1 摄氏度 1s 发电机
WORD iTempGenStatorV_1sec;// 发电机绕组V温度 2 303 0.1 摄氏度 1s 发电机
WORD iTempGenStatorW_1sec;// 发电机绕组W温度 2 304 0.1 摄氏度 1s 发电机
WORD iTempGenCoolingAir_1sec;// 发电机冷却风温度 2 305 0.1 摄氏度 1s 发电机
WORD iAvailabillityToday;// 当天可利用率 2 306 0.001 . 1s 控制系统
WORD iAvailabillityTotal;// 总可利用率 2 307 0.001 . 1s 控制系统
DWORD iKWhThisDay;// 当天发电量 2 308 千瓦时 1s 控制系统
DWORD iKWhOverall;// 总发电量 2 310 千瓦时 1s 控制系统
WORD iOperationHoursDay;// 当天发电小时数 2 312 小时 1s 控制系统
DWORD iOperationHoursOverall;// 总发电小时数 2 313 小时 1s 控制系统
WORD iLostKWhThisDay;// 当天损失发电量 2 315 千瓦时 1s 控制系统
DWORD iLostKWhOverall;// 总损失发电量 2 316 千瓦时 1s 控制系统
DWORD FirstTriggeredCode;// 首触故障代码高 4 318 1 1s 控制系统 详细解析见故障代码字解析
WORD SCW001;// 故障代码字01 2 320 1 1s 控制系统
WORD SCW002;// 故障代码字02 2 321 1 1s 控制系统
WORD SCW003;// 故障代码字03 2 322 1 1s 控制系统
WORD SCW004;// 故障代码字04 2 323 1 1s 控制系统
WORD SCW005;// 故障代码字05 2 324 1 1s 控制系统
WORD SCW006;// 故障代码字06 2 325 1 1s 控制系统
WORD SCW007;// 故障代码字07 2 326 1 1s 控制系统
WORD SCW008;// 故障代码字08 2 327 1 1s 控制系统
WORD SCW009;// 故障代码字09 2 328 1 1s 控制系统
WORD SCW010;// 故障代码字10 2 329 1 1s 控制系统
WORD SCW011;// 故障代码字11 2 330 1 1s 控制系统
WORD SCW012;// 故障代码字12 2 331 1 1s 控制系统
WORD SCW013;// 故障代码字13 2 332 1 1s 控制系统
WORD SCW014;// 故障代码字14 2 333 1 1s 控制系统
WORD SCW015;// 故障代码字15 2 334 1 1s 控制系统
WORD SCW016;// 故障代码字16 2 335 1 1s 控制系统
WORD SCW017;// 故障代码字17 2 336 1 1s 控制系统
WORD SCW018;// 故障代码字18 2 337 1 1s 控制系统
WORD SCW019;// 故障代码字19 2 338 1 1s 控制系统
WORD SCW020;// 故障代码字20 2 339 1 1s 控制系统
WORD SCW021;// 故障代码字21 2 340 1 1s 控制系统
WORD SCW022;// 故障代码字22 2 341 1 1s 控制系统
WORD SCW023;// 故障代码字23 2 342 1 1s 控制系统
WORD SCW024;// 故障代码字24 2 343 1 1s 控制系统
WORD SCW025;// 故障代码字25 2 344 1 1s 控制系统
WORD SCW026;// 故障代码字26 2 345 1 1s 控制系统
WORD SCW027;// 故障代码字27 2 346 1 1s 控制系统
WORD SCW028;// 故障代码字28 2 347 1 1s 控制系统
WORD SCW029;// 故障代码字29 2 348 1 1s 控制系统
WORD SCW030;// 故障代码字30 2 349 1 1s 控制系统
WORD SCW031;// 故障代码字31 2 350 1 1s 控制系统
WORD SCW032;// 故障代码字32 2 351 1 1s 控制系统
WORD SCW033;// 故障代码字33 2 352 1 1s 控制系统
WORD SCW034;// 故障代码字34 2 353 1 1s 控制系统
WORD SCW035;// 故障代码字35 2 354 1 1s 控制系统
WORD SCW036;// 故障代码字36 2 355 1 1s 控制系统
WORD SCW037;// 故障代码字37 2 356 1 1s 控制系统
WORD SCW038;// 故障代码字38 2 357 1 1s 控制系统
WORD SCW039;// 故障代码字39 2 358 1 1s 控制系统
WORD SCW040;// 故障代码字40 2 359 1 1s 控制系统
WORD SCW041;// 故障代码字41 2 360 1 1s 控制系统
WORD SCW042;// 故障代码字42 2 361 1 1s 控制系统
WORD iGenSpeed_10sec;// 发电机转速10秒均值 2 362
WORD iGenSpeed_30sec;// 发电机转速30秒均值 2 363
WORD iGenPower_10sec;// 机组有功10秒均值 2 364
WORD iGenPower_30sec;// 机组有功30秒均值 2 365
WORD iWindSpeed_10sec;// 风速10秒均值 2 366
WORD iWindSpeed_30sec;// 风速30秒均值 2 367
WORD iAvailablePower;// 可用有功功率 2 368
} struRYDeviceData;
#pragma pack()
class CHostModbusTcpProcessItem : public CNetProcessItem
{
public:
@ -217,48 +51,6 @@ private:
void calc2(void);
void sort1(STRUCT_PARAM*, int); //功能码排序
void sort2(STRUCT_PARAM*, int); //寄存地址排序
struRYModbusOption m_nOptions;
//增加websocket连接
pthread_t m_pid;
short m_uid;
public:
BOOLEAN m_bHaveFTP; //存在FTP协议
//ftp参数信息
char m_user[64];
char m_password[64];
char m_remotePath[128];
char m_localPath[128];
//文件信息
int m_iv;
LONG m_currentDirNo; //当前目录编号
LONG m_currentFileNo; //当前文件编号
LONG m_lastDirNo; //上一目录编号
LONG m_lastFileNo; //上一文件编号
LONG m_currentDirStartFileNo; //当前目录文件开始编号
LONG m_lastReadDirNo; //最后获取的目录编号
LONG m_lastReadFileNo; //最后获取的文件编号
LONG m_lastReadDirStartFileNo; //最后获取的目录文件开始编号
LONG m_curStartDirNo; //当前获取的目录编号
LONG m_curStartFileNo; //当前获取的文件编号
BOOLEAN m_bHaveUnReadFile; //存在未读的文件
BOOLEAN m_bFtpRun;
int _mkdir(const char* pathName) {
if (access(pathName, F_OK) == 0) return 0;
// 创建目录
if (mkdir(pathName, 0777) == -1) {
vLog(LOG_ERROR, "创建文件夹 %s失败<%d,%s>\r\n", pathName, errno, strerror(errno));
return -1;
}
return 1;
}
public:
CHostModbusTcpProcess();
virtual ~CHostModbusTcpProcess();
@ -278,9 +70,6 @@ public:
BOOLEAN OnReceiveData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
virtual BOOLEAN OnReceiveIDData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYXData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYCData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYMData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,289 @@
#ifndef _ZJD_HOST_MODBUS_TCP_BF_PROCESS_H_
#define _ZJD_HOST_MODBUS_TCP_BF_PROCESS_H_
#include "netproc.h"
#include "modbus_def.h"
#include <dirent.h>
#include <nopoll.h>
#include <nopoll_decl.h>
#pragma pack(1)
typedef struct {
QLONG localtime;// PLC本地时间 8 none 0.0001 毫秒 little endian 系统
WORD iGenSpeed;// 发电机转速 2 200 0.1 转/分 40ms 控制系统
WORD iGenPower;// 机组有功功率 2 201 0.1 千瓦 40ms 控制系统
WORD iWindSpeed;// 风速 2 202 0.01 米/秒 40ms 气象
WORD iVibrationY;// 机舱振动前后方向 2 203 0.001 米/秒^2 40ms 机舱
WORD iVibrationZ;// 机舱振动左右方向 2 204 0.001 米/秒^2 40ms 机舱
WORD iTurbineOperationMode;// 运行模式 2 205 1 需要解析 1s 控制系统
WORD iBPLevel;// 刹车等级 2 206 1 需要解析 1s 控制系统
WORD iYPLevel;// 偏航运行模式 2 207 1 需要解析 1s 控制系统
WORD iWindSpeed_1sec;// 风速1秒均值 2 208 0.01 米/秒 1s 控制系统
WORD iGenSpeed_1sec;// 发电机转速1秒均值 2 209 0.1 转/分 1s 控制系统
WORD iGenPower_1sec;// 机组有功1秒均值 2 210 0.1 千瓦 1s 控制系统
WORD iGenToruqe_1sec;// 发电机扭矩1秒均值 2 211 0.1 牛米 1s 控制系统
WORD iRotorSpeed;// 风轮转速 2 212 0.1 转/分 1s 控制系统
WORD iTheoreticalPower;// 理论有功功率 2 213 0.1 千瓦 1s 控制系统
WORD iReactivePower;// 无功功率 2 214 0.1 千乏 1s 控制系统
WORD iActivePowerSetPointValue;// 有功设定值 2 215 0.1 千瓦 1s 控制系统
WORD iCosPhiSetValue;// 功率因数设定值 2 216 0.001 . 1s 控制系统
WORD iSetValueGenSpeed;// 发电机转速设定值 2 217 0.1 转/分 1s 控制系统
WORD iSetValuePitchAngle;// 桨叶角度设定值 2 218 0.01 度 1s 控制系统
WORD iPitchAngle1RefValue;// 桨叶1角度给定 2 219 0.01 度 1s 控制系统
WORD iPitchAngle2RefValue;// 桨叶2角度给定 2 220 0.01 度 1s 控制系统
WORD iPitchAngle3RefValue;// 桨叶3角度给定 2 221 0.01 度 1s 控制系统
WORD iPitchAngle1;// 桨叶1角度 2 222 0.01 度 1s 变桨系统
WORD iPitchAngle2;// 桨叶2角度 2 223 0.01 度 1s 变桨系统
WORD iPitchAngle3;// 桨叶3角度 2 224 0.01 度 1s 变桨系统
WORD iVaneDirection;// 机舱方向 2 225 0.1 度 1s 气象
WORD iWindDirection;// 风向(与机舱夹角) 2 226 0.1 度 1s 气象
WORD StateWord01;// 状态字01 2 227 1 需要解析 1s 控制系统 详细解析见 状态字解析
WORD StateWord02;// 状态字02 2 228 1 需要解析 1s 控制系统
WORD StateWord03;// 状态字03 2 229 1 需要解析 1s 控制系统
WORD StateWord04;// 状态字04 2 230 1 需要解析 1s 控制系统
WORD StateWord05;// 状态字05 2 231 1 需要解析 1s 控制系统
WORD StateWord06;// 状态字06 2 232 1 需要解析 1s 控制系统
WORD StateWord07;// 状态字07 2 233 1 需要解析 1s 控制系统
WORD StateWord08;// 状态字08 2 234 1 需要解析 1s 控制系统
DWORD ActiveStatusCode01;// 故障代码01 4 235 1 需要解析 1s 控制系统 代表目前已经触发的故障代码类似02HH04HL005L
DWORD ActiveStatusCode02;// 故障代码02 4 237 1 需要解析 1s 控制系统 详细解析见故障代码字解析
DWORD ActiveStatusCode03;// 故障代码03 4 239 1 需要解析 1s 控制系统
DWORD ActiveStatusCode04;// 故障代码04 4 241 1 需要解析 1s 控制系统
DWORD ActiveStatusCode05;// 故障代码05 4 243 1 需要解析 1s 控制系统
DWORD ActiveStatusCode06;// 故障代码06 4 245 1 需要解析 1s 控制系统
DWORD ActiveStatusCode07;// 故障代码07 4 247 1 需要解析 1s 控制系统
DWORD ActiveStatusCode08;// 故障代码08 4 249 1 需要解析 1s 控制系统
WORD iFrequency;// 电网频率 2 251 0.01 赫兹 1s 电网
WORD iUL1_690V;// 电网L1相电压 2 252 0.1 伏 1s 电网
WORD iUL2_690V;// 电网L2相电压 2 253 0.1 伏 1s 电网
WORD iUL3_690V;// 电网L3相电压 2 254 0.1 伏 1s 电网
WORD iIL1_690V;// 电网L1相电流 2 255 0.1 安 1s 电网
WORD iIL2_690V;// 电网L2相电流 2 256 0.1 安 1s 电网
WORD iIL3_690V;// 电网L3相电流 2 257 0.1 安 1s 电网
WORD iBlade1MotorCurrent;// 变桨电机1电流 2 258 0.1 安 1s 变桨系统
WORD iBlade2MotorCurrent;// 变桨电机2电流 2 259 0.1 安 1s 变桨系统
WORD iBlade3MotorCurrent;// 变桨电机3电流 2 260 0.1 安 1s 变桨系统
WORD iPitchAngleBk1;// 备用桨叶角度1 2 261 0.01 度 1s 变桨系统
WORD iPitchAngleBk2;// 备用桨叶角度2 2 262 0.01 度 1s 变桨系统
WORD iPitchAngleBk3;// 备用桨叶角度3 2 263 0.01 度 1s 变桨系统
WORD iCosPhi;// 并网点功率因数 2 264 0.001 . 1s 电网
WORD iGearPressA;// 齿轮箱油压A 2 265 0.1 巴 1s 齿轮箱
WORD iGearPressB;// 齿轮箱油压B 2 266 0.1 巴 1s 齿轮箱
WORD iHydrPress;// 液压系统压力 2 267 0.1 巴 1s 液压系统
WORD iNacellePositionLtd;// 机舱绝对方向 2 268 0.1 度 1s 机舱
WORD iCableTwistTotal;// 总扭缆角度 2 269 0.1 度 1s 机舱
WORD iNacellePositionTotal;// 机舱方向 2 270 0.1 度 1s 机舱
WORD iTempOutdoor_1sec;// 环境温度 2 271 0.1 摄氏度 1s 环境
WORD iTempHub_1sec;// 轮毂内温度 2 272 0.1 摄氏度 1s 轮毂
WORD iTempNacelle_1sec;// 机舱内温度 2 273 0.1 摄氏度 1s 机舱
WORD iTempTowerBase_1sec;// 塔基内温度 2 274 0.1 摄氏度 1s 塔基
WORD iTempCabinetNacelle_1sec;// 机舱柜内温度 2 275 0.1 摄氏度 1s 机舱
WORD iTempCabinetTowerBase_1sec;// 塔基柜内温度 2 276 0.1 摄氏度 1s 塔基
WORD iTempTransformer690_400V_1sec;// 400伏变压器温度 2 277 0.1 摄氏度 1s 塔基
WORD iTempMV_1sec;// 箱变温度 2 278 0.1 摄氏度 1s 箱变
WORD iBlade1TempMotor_1sec;// 变桨电机1温度 2 279 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempMotor_1sec;// 变桨电机2温度 2 280 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempMotor_1sec;// 变桨电机3温度 2 281 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempBattBox_1sec;// 变桨电池柜1温度 2 282 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempBattBox_1sec;// 变桨电池柜2温度 2 283 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempBattBox_1sec;// 变桨电池柜3温度 2 284 0.1 摄氏度 1s 变桨系统
WORD iTempCntr_1sec;// 变桨中控箱温度 2 285 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempInvBox_1sec;// 变桨逆变器1温度 2 286 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempInvBox_1sec;// 变桨逆变器2温度 2 287 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempInvBox_1sec;// 变桨逆变器3温度 2 288 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempPMMHeatsink_1sec;// 变桨PMM1散热器温度 2 289 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempPMMHeatsink_1sec;// 变桨PMM2散热器温度 2 290 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempPMMHeatsink_1sec;// 变桨PMM3散热器温度 2 291 0.1 摄氏度 1s 变桨系统
WORD iBlade1TempPMCHeatsink_1sec;// 变桨PMC1散热器温度 2 292 0.1 摄氏度 1s 变桨系统
WORD iBlade2TempPMCHeatsink_1sec;// 变桨PMC2散热器温度 2 293 0.1 摄氏度 1s 变桨系统
WORD iBlade3TempPMCHeatsink_1sec;// 变桨PMC3散热器温度 2 294 0.1 摄氏度 1s 变桨系统
WORD iTempRotorBearA_1sec;// 主轴承A温度 2 295 0.1 摄氏度 1s 传动链
WORD iTempRotorBearB_1sec;// 主轴承B温度 2 296 0.1 摄氏度 1s 传动链
WORD iTemp1GearOil_1sec;// 齿轮箱油温 2 297 0.1 摄氏度 1s 齿轮箱
WORD iTempGearBearDE_1sec;// 齿轮箱驱动齿轴承温度 2 298 0.1 摄氏度 1s 齿轮箱
WORD iTempGearBearNDE_1sec;// 齿轮箱非驱动侧轴承温度 2 299 0.1 摄氏度 1s 发电机
WORD iTempGenBearDE_1sec;// 发电机驱动侧轴承温度 2 300 0.1 摄氏度 1s 发电机
WORD iTempGenBearNDE_1sec;// 发电机非驱动侧轴承温度 2 301 0.1 摄氏度 1s 发电机
WORD iTempGenStatorU_1sec;// 发电机绕组U温度 2 302 0.1 摄氏度 1s 发电机
WORD iTempGenStatorV_1sec;// 发电机绕组V温度 2 303 0.1 摄氏度 1s 发电机
WORD iTempGenStatorW_1sec;// 发电机绕组W温度 2 304 0.1 摄氏度 1s 发电机
WORD iTempGenCoolingAir_1sec;// 发电机冷却风温度 2 305 0.1 摄氏度 1s 发电机
WORD iAvailabillityToday;// 当天可利用率 2 306 0.001 . 1s 控制系统
WORD iAvailabillityTotal;// 总可利用率 2 307 0.001 . 1s 控制系统
DWORD iKWhThisDay;// 当天发电量 2 308 千瓦时 1s 控制系统
DWORD iKWhOverall;// 总发电量 2 310 千瓦时 1s 控制系统
WORD iOperationHoursDay;// 当天发电小时数 2 312 小时 1s 控制系统
DWORD iOperationHoursOverall;// 总发电小时数 2 313 小时 1s 控制系统
WORD iLostKWhThisDay;// 当天损失发电量 2 315 千瓦时 1s 控制系统
DWORD iLostKWhOverall;// 总损失发电量 2 316 千瓦时 1s 控制系统
DWORD FirstTriggeredCode;// 首触故障代码高 4 318 1 1s 控制系统 详细解析见故障代码字解析
WORD SCW001;// 故障代码字01 2 320 1 1s 控制系统
WORD SCW002;// 故障代码字02 2 321 1 1s 控制系统
WORD SCW003;// 故障代码字03 2 322 1 1s 控制系统
WORD SCW004;// 故障代码字04 2 323 1 1s 控制系统
WORD SCW005;// 故障代码字05 2 324 1 1s 控制系统
WORD SCW006;// 故障代码字06 2 325 1 1s 控制系统
WORD SCW007;// 故障代码字07 2 326 1 1s 控制系统
WORD SCW008;// 故障代码字08 2 327 1 1s 控制系统
WORD SCW009;// 故障代码字09 2 328 1 1s 控制系统
WORD SCW010;// 故障代码字10 2 329 1 1s 控制系统
WORD SCW011;// 故障代码字11 2 330 1 1s 控制系统
WORD SCW012;// 故障代码字12 2 331 1 1s 控制系统
WORD SCW013;// 故障代码字13 2 332 1 1s 控制系统
WORD SCW014;// 故障代码字14 2 333 1 1s 控制系统
WORD SCW015;// 故障代码字15 2 334 1 1s 控制系统
WORD SCW016;// 故障代码字16 2 335 1 1s 控制系统
WORD SCW017;// 故障代码字17 2 336 1 1s 控制系统
WORD SCW018;// 故障代码字18 2 337 1 1s 控制系统
WORD SCW019;// 故障代码字19 2 338 1 1s 控制系统
WORD SCW020;// 故障代码字20 2 339 1 1s 控制系统
WORD SCW021;// 故障代码字21 2 340 1 1s 控制系统
WORD SCW022;// 故障代码字22 2 341 1 1s 控制系统
WORD SCW023;// 故障代码字23 2 342 1 1s 控制系统
WORD SCW024;// 故障代码字24 2 343 1 1s 控制系统
WORD SCW025;// 故障代码字25 2 344 1 1s 控制系统
WORD SCW026;// 故障代码字26 2 345 1 1s 控制系统
WORD SCW027;// 故障代码字27 2 346 1 1s 控制系统
WORD SCW028;// 故障代码字28 2 347 1 1s 控制系统
WORD SCW029;// 故障代码字29 2 348 1 1s 控制系统
WORD SCW030;// 故障代码字30 2 349 1 1s 控制系统
WORD SCW031;// 故障代码字31 2 350 1 1s 控制系统
WORD SCW032;// 故障代码字32 2 351 1 1s 控制系统
WORD SCW033;// 故障代码字33 2 352 1 1s 控制系统
WORD SCW034;// 故障代码字34 2 353 1 1s 控制系统
WORD SCW035;// 故障代码字35 2 354 1 1s 控制系统
WORD SCW036;// 故障代码字36 2 355 1 1s 控制系统
WORD SCW037;// 故障代码字37 2 356 1 1s 控制系统
WORD SCW038;// 故障代码字38 2 357 1 1s 控制系统
WORD SCW039;// 故障代码字39 2 358 1 1s 控制系统
WORD SCW040;// 故障代码字40 2 359 1 1s 控制系统
WORD SCW041;// 故障代码字41 2 360 1 1s 控制系统
WORD SCW042;// 故障代码字42 2 361 1 1s 控制系统
WORD iGenSpeed_10sec;// 发电机转速10秒均值 2 362
WORD iGenSpeed_30sec;// 发电机转速30秒均值 2 363
WORD iGenPower_10sec;// 机组有功10秒均值 2 364
WORD iGenPower_30sec;// 机组有功30秒均值 2 365
WORD iWindSpeed_10sec;// 风速10秒均值 2 366
WORD iWindSpeed_30sec;// 风速30秒均值 2 367
WORD iAvailablePower;// 可用有功功率 2 368
} struRYDeviceData;
#pragma pack()
class CHostModbusTcpBFProcessItem : public CNetProcessItem
{
public:
BYTE m_addr;
WORD m_nNum;
DWORD m_nFramePoll;
private:
int m_nCurFrame;
struModbusExtFrame m_nModbusFrames[MODBUS_RTU_AUTOMATIC_FRAME_MAX];
public:
CHostModbusTcpBFProcessItem();
virtual ~CHostModbusTcpBFProcessItem();
DWORD apdu_t0_begin;
void Attach(int uid, int sock, DWORD peer_addr, WORD peer_port);
void Release(void);
struModbusExtFrame* GetNextFrame(void);
void AddFrames(struModbusExtFrame*, struModbusExtFrame*, struModbusExtFrame*);
};
class CHostModbusTcpBFProcess : public CNetProcess
{
public:
BYTE m_nFrameType;
DWORD m_nCount; //loops passed
DWORD m_nFrameCount;
WORD m_nCurBeginReg;
WORD m_nCurRegCount;
BYTE m_nCurFuncCode;
BOOLEAN m_nNeedSend;
DWORD m_nCurFrame;
DWORD m_nSendPoint; //send out loop
short m_nTimeout;
int m_nYKOrder;
BYTE m_bYKValue;
BYTE m_nYKState;
int m_nYTOrder;
DWORD m_dwYTValue;
BYTE m_nYTState;
private:
void calc2(void);
void sort1(STRUCT_PARAM*, int); //功能码排序
void sort2(STRUCT_PARAM*, int); //寄存地址排序
struRYModbusOption m_nOptions;
//增加websocket连接
pthread_t m_pid;
short m_uid;
public:
BOOLEAN m_bHaveFTP; //存在FTP协议
//ftp参数信息
char m_user[64];
char m_password[64];
char m_remotePath[128];
char m_localPath[128];
//文件信息
int m_iv;
LONG m_currentDirNo; //当前目录编号
LONG m_currentFileNo; //当前文件编号
LONG m_lastDirNo; //上一目录编号
LONG m_lastFileNo; //上一文件编号
LONG m_currentDirStartFileNo; //当前目录文件开始编号
LONG m_lastReadDirNo; //最后获取的目录编号
LONG m_lastReadFileNo; //最后获取的文件编号
LONG m_lastReadDirStartFileNo; //最后获取的目录文件开始编号
LONG m_curStartDirNo; //当前获取的目录编号
LONG m_curStartFileNo; //当前获取的文件编号
BOOLEAN m_bHaveUnReadFile; //存在未读的文件
BOOLEAN m_bFtpRun;
int _mkdir(const char* pathName) {
if (access(pathName, F_OK) == 0) return 0;
// 创建目录
if (mkdir(pathName, 0777) == -1) {
vLog(LOG_ERROR, "创建文件夹 %s失败<%d,%s>\r\n", pathName, errno, strerror(errno));
return -1;
}
return 1;
}
public:
CHostModbusTcpBFProcess();
virtual ~CHostModbusTcpBFProcess();
CNetProcessItem *CreateItem(int ord);
void DestroyItem(int ord, BOOLEAN bDeleted = FALSE);
virtual BOOLEAN OnPreCreate(int id);
virtual BOOLEAN Run(void);
virtual BOOLEAN OnTimer(void);
virtual BOOLEAN GetReadDataFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int& count);
virtual BOOLEAN GetYKFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
virtual BOOLEAN GetYTFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
virtual BOOLEAN GetSetTimeFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int& count);
BOOLEAN OnReceiveData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
virtual BOOLEAN OnReceiveIDData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYXData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYCData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYMData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
};
#endif //_ZJD_HOST_MODBUS_RTU_TCP_BF_PROCESS_H_

View File

@ -198,7 +198,9 @@ typedef int SOCKET;
#define PROTOCOL_SUB_GDW104 47 //国网104从
#define PROTOCOL_HW_MQTT 72 //华为物联平台ROMA
#define PROTOCOL_OPCUA 78 //opcua协议
#define PROTOCOL_FTP2MINIO 79 //opcua协议
#define PROTOCOL_FTP2MINIO 79 //FTP转minio协议
#define PROTOCOL_HOST_BF_MODBUSTCP 80 //倍福MODBUSTCP主
#define PROTOCOL_HOST_BF_ADS 81 //倍福ADS协议
#define ADDR_TYPE_NORMAL 0
#define ADDR_TYPE_HEX 1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,92 @@
#ifndef _ZJD_SUB_MODBUS_TCP_PROCESS_H_
#define _ZJD_SUB_MODBUS_TCP_PROCESS_H_
#include "netproc.h"
#include "modbus_def.h"
#include <vector>
#pragma pack(1)
typedef struct
{
struNetWorkOption net;
BYTE defaultYCType;
} struSubModbusTCPOption;
#pragma pack()
typedef std::vector<int> vecInt;
class CSubModbusTcpProcessItem : public CNetProcessItem
{
public:
BYTE ied_addr;
WORD m_nNum;
short m_CoilRegCount;
short m_DiscreteRegCount;
short m_HoldingRegCount;
short m_InputregCount;
BYTE *m_pCoilRegTable;
BYTE *m_pDiscreteRegTable;
WORD *m_pHoldingRegTable;
WORD *m_pInputRegTable;
public:
CSubModbusTcpProcessItem();
virtual ~CSubModbusTcpProcessItem();
void Attach(int uid, int sock, DWORD peer_addr, WORD peer_port);
void Release(void);
};
class CSubModbusTcpProcess : public CNetProcess
{
public:
CSubModbusTcpProcess();
virtual ~CSubModbusTcpProcess();
CNetProcessItem *CreateItem(int ord);
void DestroyItem(int ord, BOOLEAN bDeleted = FALSE);
virtual BOOLEAN OnPreCreate(int id);
virtual BOOLEAN Run(void);
virtual BOOLEAN OnTimer(void);
private:
struSubModbusTCPOption m_option;
BYTE m_YC_Type;
enum
{
M_ME_NA,
M_ME_NC
};
vecInt m_CoilRegTable;
vecInt m_DiscreteTable;
vecInt m_HoldingRegTable;
vecInt m_InputRegTable;
private:
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
BOOLEAN OnReceiveData(CSubModbusTcpProcessItem *pItem, BYTE* pData, int count, int uid);
eMBErrorCode eMBTCPSend(BYTE ucSlaveAddress, const BYTE *pucFrame, WORD usLength);
eMBException prveMBError2Exception(eMBErrorCode eErrorCode);
eMBException eMBFuncReadInputRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncReadHoldingRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncWriteHoldingRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncWriteMultipleHoldingRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncReadCoils(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncWriteCoil(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncWriteMultipleCoils(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBException eMBFuncReadDiscreteInputs(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
eMBErrorCode eMBRegInputCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNRegs);
eMBErrorCode eMBRegHoldingCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNRegs, eMBRegisterMode eMode);
eMBErrorCode eMBRegCoilsCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNCoils, eMBRegisterMode eMode);
eMBErrorCode eMBRegDiscreteCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNDiscrete);
};
#endif //_ZJD_SUB_MODBUS_TCP_PROCESS_H_