map/das-dn/submodbustcp/sub_modbus_tcp.h

91 lines
3.0 KiB
C
Raw Normal View History

2024-11-20 15:43:54 +08:00
#ifndef _ZJD_SUB_MODBUS_TCP_PROCESS_H_
#define _ZJD_SUB_MODBUS_TCP_PROCESS_H_
#include "netproc.h"
#include "modbus_def.h"
#include <vector>
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;
2024-11-25 10:59:23 +08:00
int m_yccount;
int m_ymcount;
int m_yxcount;
int m_ykcount;
int m_ytcount;
2024-11-20 15:43:54 +08:00
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 */);
2024-11-25 15:05:37 +08:00
BOOLEAN OnReceiveData(CSubModbusTcpProcessItem*, BYTE*, int, int);
2024-11-20 15:43:54 +08:00
2024-11-25 15:05:37 +08:00
eMBErrorCode eMBTCPSend(BYTE, const BYTE*, WORD, int);
2024-11-20 15:43:54 +08:00
2024-11-25 15:05:37 +08:00
eMBException prveMBError2Exception(eMBErrorCode);
2024-11-20 15:43:54 +08:00
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_TCP_PROCESS_H_