#ifndef _ZJD_HOST_MODBUS_TCP_PROCESS_H_ #define _ZJD_HOST_MODBUS_TCP_PROCESS_H_ #include "netproc.h" #include "modbus_def.h" 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); //寄存地址排序 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 */); 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_