#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 #include #include #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_