100 lines
3.1 KiB
C++
100 lines
3.1 KiB
C++
#ifndef _ZJD_HOST_MODBUS_RTU_PROCESS_H_
|
|
#define _ZJD_HOST_MODBUS_RTU_PROCESS_H_
|
|
|
|
#include "portproc.h"
|
|
#include "modbus_def.h"
|
|
|
|
class CHostModbusRtuProcessItem : public CPortProcessItem
|
|
{
|
|
public:
|
|
DWORD m_nFramePoll;
|
|
int m_nPollCount;
|
|
private:
|
|
int m_nCurFrame;
|
|
struModbusExtFrame m_nModbusFrames[MODBUS_RTU_AUTOMATIC_FRAME_MAX];
|
|
public:
|
|
CHostModbusRtuProcessItem();
|
|
virtual ~CHostModbusRtuProcessItem();
|
|
|
|
void Attach(int uid, int physicsAddress = 0, int commonAddress = 0, int originatorAddress = 0);
|
|
void Release(void);
|
|
|
|
|
|
struModbusExtFrame* GetNextFrame(void);
|
|
void AddFrames(struModbusExtFrame*, struModbusExtFrame*, struModbusExtFrame*);
|
|
BOOLEAN insertFrames(struModbusExtFrame* frames, int msgSize)
|
|
{
|
|
int i = 0;
|
|
int pos = 0;
|
|
for (pos = 0; pos < MODBUS_RTU_AUTOMATIC_FRAME_MAX; pos++)
|
|
{
|
|
if (m_nModbusFrames[pos].FrameType == 0x00) break;
|
|
}
|
|
for (i = 0; i < msgSize; i++)
|
|
{
|
|
if (pos >= MODBUS_RTU_AUTOMATIC_FRAME_MAX) return FALSE;
|
|
if (frames[i].FrameType == 0 || frames[i].FuncCode == 0 || frames[i].RegCount == 0) continue;
|
|
memcpy(&m_nModbusFrames[pos], &frames[i], sizeof(struModbusExtFrame));
|
|
pos++;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
};
|
|
|
|
class CHostModbusRtuProcess : public CPortProcess
|
|
{
|
|
public:
|
|
int m_nNeedCount;
|
|
int m_nState;
|
|
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_nFramePoll;
|
|
|
|
public:
|
|
CHostModbusRtuProcess();
|
|
virtual ~CHostModbusRtuProcess();
|
|
|
|
CPortProcessItem *CreateItem(int ord);
|
|
void DestroyItem(int ord, BOOLEAN bDeleted = FALSE);
|
|
|
|
void calc1(void);
|
|
void sort1(STRUCT_PARAM*, int); //功能码排序
|
|
void sort2(STRUCT_PARAM*, int); //寄存地址排序
|
|
|
|
virtual BOOLEAN OnPreCreate(int id);
|
|
virtual BOOLEAN Run(void);
|
|
virtual BOOLEAN OnTimer(void);
|
|
|
|
virtual BOOLEAN GetReadDataFrame(CHostModbusRtuProcessItem *pItem, BYTE* pData, int& count);
|
|
|
|
virtual BOOLEAN GetYKFrame(CHostModbusRtuProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame);
|
|
virtual BOOLEAN GetYTFrame(CHostModbusRtuProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame);
|
|
virtual BOOLEAN GetSetTimeFrame(CHostModbusRtuProcessItem *pItem, BYTE* pData, int& count);
|
|
|
|
BOOLEAN OnReceiveData(BYTE* pData, int count);
|
|
virtual BOOLEAN OnReceiveYXData(CHostModbusRtuProcessItem *pItem, BYTE* pData, int count);
|
|
virtual BOOLEAN OnReceiveYCData(CHostModbusRtuProcessItem *pItem, BYTE* pData, int count);
|
|
virtual BOOLEAN OnReceiveYMData(CHostModbusRtuProcessItem *pItem, BYTE* pData, int count);
|
|
};
|
|
|
|
#endif //_ZJD_HOST_MODBUS_RTU_PROCESS_H_
|