map/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.h

131 lines
4.3 KiB
C
Raw Permalink Normal View History

2024-12-03 10:36:06 +08:00
#ifndef _ISS_HOST_MODBUS_TCP_BF_PROCESS_H_
#define _ISS_HOST_MODBUS_TCP_BF_PROCESS_H_
2024-11-20 15:43:54 +08:00
#include "netproc.h"
#include "modbus_def.h"
class CHostModbusTcpBFProcessItem : 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:
CHostModbusTcpBFProcessItem();
virtual ~CHostModbusTcpBFProcessItem();
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 CHostModbusTcpBFProcess : 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); //寄存地址排序
struRYModbusOption m_nOptions;
//增加websocket连接
2024-12-11 16:30:53 +08:00
pthread_t m_cpid;
2024-11-20 17:28:24 +08:00
//short m_uid;
time_t last_sec;
BOOLEAN publishStateData(void);
BOOLEAN publishAnalogData(void);
2024-11-20 15:43:54 +08:00
public:
2024-12-10 14:25:46 +08:00
std::string m_pidName;
2024-11-20 15:43:54 +08:00
BOOLEAN m_bHaveFTP; //存在FTP协议
2025-01-10 09:12:01 +08:00
char m_cpidName[16];
2024-11-20 15:43:54 +08:00
//ftp参数信息
char m_user[64];
char m_password[64];
char m_remotePath[128];
char m_localPath[128];
//文件信息
int m_iv;
LONG m_currentDirNo; //当前目录编号
LONG m_currentFileNo; //当前文件编号
LONG m_lastDirNo; //上一目录编号
LONG m_lastFileNo; //上一文件编号
LONG m_currentDirStartFileNo; //当前目录文件开始编号
LONG m_lastReadDirNo; //最后获取的目录编号
LONG m_lastReadFileNo; //最后获取的文件编号
LONG m_lastReadDirStartFileNo; //最后获取的目录文件开始编号
LONG m_curStartDirNo; //当前获取的目录编号
LONG m_curStartFileNo; //当前获取的文件编号
BOOLEAN m_bHaveUnReadFile; //存在未读的文件
BOOLEAN m_bFtpRun;
2024-12-03 10:36:06 +08:00
#if 0
2024-11-20 15:43:54 +08:00
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;
}
2024-12-03 10:36:06 +08:00
#endif
2024-11-20 15:43:54 +08:00
public:
CHostModbusTcpBFProcess();
virtual ~CHostModbusTcpBFProcess();
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(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int& count);
virtual BOOLEAN GetYKFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
virtual BOOLEAN GetYTFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pBuf, int& count, DWORD& frame, BYTE& FuncCode);
virtual BOOLEAN GetSetTimeFrame(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int& count);
BOOLEAN OnReceiveData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
int OnPackageReceived(BYTE* pBuf, int count, int ord /* = -1 */);
virtual BOOLEAN OnReceiveIDData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYXData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYCData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
virtual BOOLEAN OnReceiveYMData(CHostModbusTcpBFProcessItem *pItem, BYTE* pData, int count);
};
2024-12-03 10:36:06 +08:00
#endif //_ISS_HOST_MODBUS_TCP_BF_PROCESS_H_