75 lines
3.1 KiB
C++
75 lines
3.1 KiB
C++
#ifndef _ZJD_SUB_MODBUS_RTU_PROCESS_H_
|
|
#define _ZJD_SUB_MODBUS_RTU_PROCESS_H_
|
|
|
|
#include "portproc.h"
|
|
#include "modbus_def.h"
|
|
|
|
#define MB_SER_PDU_SIZE_MIN 4 /*!< Minimum size of a Modbus RTU frame. */
|
|
#define MB_SER_PDU_SIZE_MAX 256 /*!< Maximum size of a Modbus RTU frame. */
|
|
#define MB_SER_PDU_SIZE_CRC 2 /*!< Size of CRC field in PDU. */
|
|
#define MB_SER_PDU_ADDR_OFF 0 /*!< Offset of slave address in Ser-PDU. */
|
|
#define MB_SER_PDU_PDU_OFF 1 /*!< Offset of Modbus-PDU in Ser-PDU. */
|
|
|
|
class CSubModbusRtuProcessItem : public CPortProcessItem
|
|
{
|
|
public:
|
|
CSubModbusRtuProcessItem();
|
|
virtual ~CSubModbusRtuProcessItem();
|
|
|
|
void Attach(int uid, int physicsAddress = 0, int commonAddress = 0, int originatorAddress = 0);
|
|
void Release(void);
|
|
public:
|
|
short m_YCRegCount;
|
|
WORD *m_pYCRegTab;
|
|
short m_YMRegCount;
|
|
WORD *m_pYMRegTab;
|
|
short m_YXRegCount;
|
|
BYTE *m_pYXRegTab;
|
|
};
|
|
|
|
class CSubModbusRtuProcess : public CPortProcess
|
|
{
|
|
private:
|
|
DWORD usTimerT35_50us;
|
|
public:
|
|
CSubModbusRtuProcess();
|
|
virtual ~CSubModbusRtuProcess();
|
|
|
|
CPortProcessItem *CreateItem(int ord);
|
|
void DestroyItem(int ord, BOOLEAN bDeleted = FALSE);
|
|
|
|
virtual BOOLEAN OnPreCreate(int id);
|
|
virtual BOOLEAN Run(void);
|
|
virtual BOOLEAN OnTimer(void);
|
|
BOOLEAN OnReceiveData(BYTE* pData, int count);
|
|
|
|
private:
|
|
BYTE m_YC_Type;
|
|
BYTE ucRTUBuf[MB_SER_PDU_SIZE_MAX];
|
|
enum
|
|
{
|
|
M_ME_NA,
|
|
M_ME_NC
|
|
};
|
|
BOOLEAN SerialPortTimeout(void);
|
|
eMBErrorCode eMBRTUSend(BYTE ucSlaveAddress, const BYTE *pucFrame, WORD usLength);
|
|
|
|
eMBException prveMBError2Exception(eMBErrorCode eErrorCode);
|
|
eMBException eMBFuncReadInputRegister(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncReadHoldingRegister(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncWriteHoldingRegister(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncWriteMultipleHoldingRegister(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncReadCoils(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncWriteCoil(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncWriteMultipleCoils(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
eMBException eMBFuncReadDiscreteInputs(CSubModbusRtuProcessItem *pItem, BYTE* pucFrame, WORD* usLen);
|
|
|
|
|
|
eMBErrorCode eMBRegInputCB(CSubModbusRtuProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNRegs);
|
|
eMBErrorCode eMBRegHoldingCB(CSubModbusRtuProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNRegs, eMBRegisterMode eMode);
|
|
eMBErrorCode eMBRegCoilsCB(CSubModbusRtuProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNCoils, eMBRegisterMode eMode);
|
|
eMBErrorCode eMBRegDiscreteCB(CSubModbusRtuProcessItem *pItem, BYTE* pucRegBuffer, WORD usAddress, WORD usNDiscrete);
|
|
};
|
|
|
|
#endif //_ZJD_SUB_MODBUS_RTU_PROCESS_H_
|