map/das-dn/hostmodbusrtuovernet/host_modbus_rtu_tcp.h

92 lines
3.0 KiB
C
Raw Normal View History

2024-07-08 10:27:17 +08:00
#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_