map/das-dn/hostmodbustcp/host_modbus_tcp.h
2024-10-21 10:53:15 +08:00

276 lines
15 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _ZJD_HOST_MODBUS_TCP_PROCESS_H_
#define _ZJD_HOST_MODBUS_TCP_PROCESS_H_
#include "netproc.h"
#include "modbus_def.h"
#define HAVE_FTP_PROCESS
#ifdef HAVE_FTP_PROCESS
#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 iGenSpeed1s;// 发电机转速1秒均值 2 209 0.1 转/分 1s 控制系统
WORD iGenPower1s;// 机组有功1秒均值 2 210 0.1 千瓦 1s 控制系统
WORD iWindSpeed1s;// 风速1秒均值 2 208 0.01 米/秒 1s 控制系统
WORD iGenToruqe1s;// 发电机扭矩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 控制系统
} struRYDeviceData;
#pragma pack()
#endif
class CHostModbusTcpProcessItem : 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:
CHostModbusTcpProcessItem();
virtual ~CHostModbusTcpProcessItem();
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 CHostModbusTcpProcess : 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); //寄存地址排序
#ifdef HAVE_FTP_PROCESS
//增加websocket连接
pthread_t m_pid;
short m_uid;
public:
int m_iv;
LONG m_currentDirNo; //当前目录编号
LONG m_currentFileNo; //当前文件编号
LONG m_lastDirNo; //上一目录编号
LONG m_lastFileNo; //上一文件编号
LONG m_lastStartFileNo; //文件开始编号
//ftp参数信息
char m_user[128];
char m_password[128];
char m_remoteIp[64];
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;
}
#endif
public:
CHostModbusTcpProcess();
virtual ~CHostModbusTcpProcess();
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(CHostModbusTcpProcessItem *pItem, BYTE* pData, int& count);
virtual BOOLEAN GetYKFrame(CHostModbusTcpProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
virtual BOOLEAN GetYTFrame(CHostModbusTcpProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
virtual BOOLEAN GetSetTimeFrame(CHostModbusTcpProcessItem *pItem, BYTE* pData, int& count);
BOOLEAN OnReceiveData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
#ifdef HAVE_FTP_PROCESS
virtual BOOLEAN OnReceiveIDData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
#endif
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);
};
#endif //_ZJD_HOST_MODBUS_RTU_TCP_PROCESS_H_