#ifndef _ISS_HOST_MODBUS_TCP_BF_PROCESS_H_ #define _ISS_HOST_MODBUS_TCP_BF_PROCESS_H_ #include "netproc.h" #include "modbus_def.h" 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; time_t last_sec; BOOLEAN publishStateData(void); BOOLEAN publishAnalogData(void); public: std::string m_pidName; 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; #if 0 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: 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 //_ISS_HOST_MODBUS_TCP_BF_PROCESS_H_