93 lines
3.1 KiB
C
93 lines
3.1 KiB
C
![]() |
#ifndef _ZJD_SUB_MODBUS_RTU_TCP_PROCESS_H_
|
||
|
#define _ZJD_SUB_MODBUS_RTU_TCP_PROCESS_H_
|
||
|
|
||
|
#include "netproc.h"
|
||
|
#include "modbus_def.h"
|
||
|
#include <vector>
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct
|
||
|
{
|
||
|
struNetWorkOption net;
|
||
|
BYTE defaultYCType;
|
||
|
} struSubModbusTCPOption;
|
||
|
#pragma pack()
|
||
|
|
||
|
typedef std::vector<int> vecInt;
|
||
|
|
||
|
class CSubModbusTcpProcessItem : public CNetProcessItem
|
||
|
{
|
||
|
public:
|
||
|
BYTE ied_addr;
|
||
|
WORD m_nNum;
|
||
|
|
||
|
short m_CoilRegCount;
|
||
|
short m_DiscreteRegCount;
|
||
|
short m_HoldingRegCount;
|
||
|
short m_InputregCount;
|
||
|
|
||
|
BYTE *m_pCoilRegTable;
|
||
|
BYTE *m_pDiscreteRegTable;
|
||
|
WORD *m_pHoldingRegTable;
|
||
|
WORD *m_pInputRegTable;
|
||
|
|
||
|
public:
|
||
|
CSubModbusTcpProcessItem();
|
||
|
virtual ~CSubModbusTcpProcessItem();
|
||
|
|
||
|
void Attach(int uid, int sock, DWORD peer_addr, WORD peer_port);
|
||
|
void Release(void);
|
||
|
|
||
|
};
|
||
|
|
||
|
class CSubModbusTcpProcess : public CNetProcess
|
||
|
{
|
||
|
public:
|
||
|
CSubModbusTcpProcess();
|
||
|
virtual ~CSubModbusTcpProcess();
|
||
|
|
||
|
CNetProcessItem *CreateItem(int ord);
|
||
|
void DestroyItem(int ord, BOOLEAN bDeleted = FALSE);
|
||
|
|
||
|
virtual BOOLEAN OnPreCreate(int id);
|
||
|
virtual BOOLEAN Run(void);
|
||
|
virtual BOOLEAN OnTimer(void);
|
||
|
private:
|
||
|
struSubModbusTCPOption m_option;
|
||
|
BYTE m_YC_Type;
|
||
|
enum
|
||
|
{
|
||
|
M_ME_NA,
|
||
|
M_ME_NC
|
||
|
};
|
||
|
|
||
|
vecInt m_CoilRegTable;
|
||
|
vecInt m_DiscreteTable;
|
||
|
vecInt m_HoldingRegTable;
|
||
|
vecInt m_InputRegTable;
|
||
|
|
||
|
private:
|
||
|
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
|
||
|
BOOLEAN OnReceiveData(CSubModbusTcpProcessItem *pItem, BYTE* pData, int count, int uid);
|
||
|
|
||
|
eMBErrorCode eMBTCPSend(BYTE ucSlaveAddress, const BYTE *pucFrame, WORD usLength);
|
||
|
|
||
|
eMBException prveMBError2Exception(eMBErrorCode eErrorCode);
|
||
|
eMBException eMBFuncReadInputRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncReadHoldingRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncWriteHoldingRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncWriteMultipleHoldingRegister(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncReadCoils(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncWriteCoil(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncWriteMultipleCoils(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
eMBException eMBFuncReadDiscreteInputs(CSubModbusTcpProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
||
|
|
||
|
|
||
|
eMBErrorCode eMBRegInputCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNRegs);
|
||
|
eMBErrorCode eMBRegHoldingCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNRegs, eMBRegisterMode eMode);
|
||
|
eMBErrorCode eMBRegCoilsCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNCoils, eMBRegisterMode eMode);
|
||
|
eMBErrorCode eMBRegDiscreteCB(CSubModbusTcpProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNDiscrete);
|
||
|
};
|
||
|
|
||
|
#endif //_ZJD_SUB_MODBUS_RTU_TCP_PROCESS_H_
|