112 lines
3.6 KiB
C++
112 lines
3.6 KiB
C++
#ifndef _ZJD_HOST_MODBUS_TCP_PROCESS_H_
|
|
#define _ZJD_HOST_MODBUS_TCP_PROCESS_H_
|
|
|
|
#include "netproc.h"
|
|
#include "modbus_def.h"
|
|
|
|
#include <dirent.h>
|
|
#include <nopoll.h>
|
|
#include <nopoll_decl.h>
|
|
|
|
class CHostModbusTcpProcessItem : public CNetProcessItem
|
|
{
|
|
public:
|
|
BYTE m_addr;
|
|
WORD m_nNum;
|
|
DWORD m_nFramePoll;
|
|
private:
|
|
int m_nCurFrame;
|
|
struModbusExtFrame m_nModbusFrames[MODBUS_RTU_AUTOMATIC_FRAME_MAX];
|
|
public:
|
|
CHostModbusTcpProcessItem();
|
|
virtual ~CHostModbusTcpProcessItem();
|
|
|
|
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 CHostModbusTcpProcess : 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;
|
|
private:
|
|
void calc2(void);
|
|
void sort1(STRUCT_PARAM*, int); //功能码排序
|
|
void sort2(STRUCT_PARAM*, int); //寄存地址排序
|
|
|
|
//增加websocket连接
|
|
pthread_t m_pid;
|
|
|
|
public:
|
|
noPollConn *m_conn;
|
|
int m_iv;
|
|
LONG m_currentDirNo; //当前目录编号
|
|
LONG m_currentFileNo; //当前文件编号
|
|
LONG m_lastDirNo; //上一目录编号
|
|
LONG m_lastFileNo; //上一文件编号
|
|
LONG m_lastStartFileNo; //文件开始编号
|
|
|
|
//ftp参数信息
|
|
char m_user[128];
|
|
char m_password[128];
|
|
char m_remoteIp[64];
|
|
|
|
int _mkdir(const char* pathName) {
|
|
if (access(pathName, F_OK) == 0) return 0;
|
|
// 创建目录
|
|
if (mkdir(pathName, 0777) == -1) {
|
|
vLog(LOG_ERROR, "创建文件夹 %s失败<%d,%s>\r\n", pathName, errno, strerror(errno));
|
|
return -1;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
public:
|
|
CHostModbusTcpProcess(noPollConn *conn);
|
|
virtual ~CHostModbusTcpProcess();
|
|
|
|
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(CHostModbusTcpProcessItem *pItem, BYTE* pData, int& count);
|
|
|
|
virtual BOOLEAN GetYKFrame(CHostModbusTcpProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
|
|
virtual BOOLEAN GetYTFrame(CHostModbusTcpProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
|
|
virtual BOOLEAN GetSetTimeFrame(CHostModbusTcpProcessItem *pItem, BYTE* pData, int& count);
|
|
|
|
BOOLEAN OnReceiveData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
|
|
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
|
|
virtual BOOLEAN OnReceiveIDData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
|
|
virtual BOOLEAN OnReceiveYXData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
|
|
virtual BOOLEAN OnReceiveYCData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
|
|
virtual BOOLEAN OnReceiveYMData(CHostModbusTcpProcessItem *pItem, BYTE* pData, int count);
|
|
};
|
|
|
|
#endif //_ZJD_HOST_MODBUS_RTU_TCP_PROCESS_H_
|