#ifndef _ZJD_HOST_MODBUS_RTU_NET_PROCESS_H_ #define _ZJD_HOST_MODBUS_RTU_NET_PROCESS_H_ #include "netproc.h" #include "modbus_def.h" class CHostModbusRtuOverTcpProcessItem : public CNetProcessItem { public: BYTE m_addr; DWORD m_nFramePoll; int m_nPollCount; private: int m_nCurFrame; struModbusExtFrame m_nModbusFrames[MODBUS_RTU_AUTOMATIC_FRAME_MAX]; public: CHostModbusRtuOverTcpProcessItem(); virtual ~CHostModbusRtuOverTcpProcessItem(); 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 CHostModbusRtuOverTcpProcess : 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; DWORD m_DataCount; private: int m_nState; int m_nNeedCount; //模拟串口数据接受和获取方式 struPortBuffer buffers; int GetDataCount(void); void DropData(int count); int AppendBuffer(BYTE *pBuf, int count); BOOLEAN GetData(BYTE* pBuf, int count); private: void calc2(void); void sort1(STRUCT_PARAM*, int); //功能码排序 void sort2(STRUCT_PARAM*, int); //寄存地址排序 public: CHostModbusRtuOverTcpProcess(); virtual ~CHostModbusRtuOverTcpProcess(); 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(CHostModbusRtuOverTcpProcessItem* pItem, BYTE* pData, int& count); virtual BOOLEAN GetYKFrame(CHostModbusRtuOverTcpProcessItem* pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode); virtual BOOLEAN GetYTFrame(CHostModbusRtuOverTcpProcessItem* pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode); virtual BOOLEAN GetSetTimeFrame(CHostModbusRtuOverTcpProcessItem *pItem, BYTE* pData, int& count); BOOLEAN OnReceiveData(CHostModbusRtuOverTcpProcessItem *pItem, BYTE* pData, int count); int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */); virtual BOOLEAN OnReceiveYXData(CHostModbusRtuOverTcpProcessItem *pItem, BYTE* pData, int count);; virtual BOOLEAN OnReceiveYCData(CHostModbusRtuOverTcpProcessItem *pItem, BYTE* pData, int count);; virtual BOOLEAN OnReceiveYMData(CHostModbusRtuOverTcpProcessItem *pItem, BYTE* pData, int count); }; #endif //_ZJD_HOST_MODBUS_RTU_NET_PROCESS_H_