276 lines
15 KiB
C++
276 lines
15 KiB
C++
#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 控制系统 代表目前已经触发的故障代码类似:02(HH)04(HL)005(L)
|
||
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_
|