Files
geomative/GeomativeStudio/h/DialRealTimeMeasureData.h
coco df489d5640 a
2026-07-03 16:05:30 +08:00

156 lines
6.0 KiB
C++

#ifndef AFX_DIALREALTIMEMEASUREDATA_H__CA946FA9_52D2_4B68_92E2_30C065867518__INCLUDED_
#define AFX_DIALREALTIMEMEASUREDATA_H__CA946FA9_52D2_4B68_92E2_30C065867518__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DialMeasureData.h : header file
//
#include "DialListRealTimeMeasuData.h"
#include "TaskDataOper.h"
//#include "RingBuffer.h"
#include "DialListRealTimeMeasuGR.h"
#include "CtrlProtocolDef.h"
/////////////////////////////////////////////////////////////////////////////
// CDialRealTimeMeasureData dialog
#define MAX_REPEAT_SND_CNT 90000
// enum EN_DEVICE_TYPE
// {
// EN_DEV_GD10 = 0,
// EN_DEV_PLC
// };
#include "cpp\socket\NetRequestDialog.h"
class CDialRealTimeMeasureData : public CNetRequestDialog
{
// Construction
public:
CDialRealTimeMeasureData(CWnd* pParent = NULL); // standard constructor
void SetTaksID(CString strTaskCN){ m_strTaskCN = strTaskCN; }
void SetTaksID(int iTaskID){m_iTaskID = iTaskID;}
void SetSptType(int iSptType){ m_iSptType = iSptType; }
void SetDeviceID(UINT uiDevID){m_uiDevID = uiDevID;}
void SetTaskListSelectItem(STTaskListItem* pSelectTaskItem = NULL);
void SetTestingTaskID(CString strTestingTaskID){ m_strTestingTaskID = strTestingTaskID; }
void SetBtnStatus(BYTE ucBtnStatus);
int GetMeasureType(){ return m_iMeasuType; }
//获取正在测量的方式,单点测量、从当前位置开始测量、全部测量
// EN_TASK_TESTING_METHOD GetTestingMethod()
// {
// return m_eTestingMethod;
// }
bool InitGrList(CListCtrl &tdGrList, CString strTaskCN);
// Dialog Data
//{{AFX_DATA(CDialRealTimeMeasureData)
enum { IDD = IDD_DIALOG_REAL_TIME_MEASURE_DATA };
CTabCtrl m_tabChange;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDialRealTimeMeasureData)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CDialRealTimeMeasureData)
virtual BOOL OnInitDialog();
afx_msg void OnMeasureAll();
afx_msg void OnMeasureCurPt();
//afx_msg void OnMeasureDownloadMeasuCfg();
afx_msg void OnMeasureFromCur();
afx_msg void OnShowDetailMeasureData();
afx_msg void OnSelchangeTabChg(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnMeasureSuspendMeau();
afx_msg void OnClose();
virtual void OnCancel();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnSelchangingTabChg(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
protected:
static void NotifyResFunc(LPARAM lOperType, LPARAM lOperRes, LPVOID lpWnd);
bool MeasureAllGR();
// void ClearMeasuGRInfo();
void ClearRecvBuffer();
bool RecvMeasureGRData();
bool ProcRcvGrData();
void StopMeasuDataInfo(bool bIsNormalExit = true);
int ProcRcvMeasuData();
// void RegisterBuffer(RingBuffer* pReadBuf, RingBuffer* pWriteBuf){m_pReadBuf = pReadBuf; m_pWriteBuf = pWriteBuf;}
// bool SendData(const BYTE* pData, int iLen);
int GetNeedMeasuData(char* pData,int &iLen, int iMaxLen);
int GetSigNeedMeasuData(char* pData,int &iLen, int iMaxLen);
int GetNeedMeasuGR(char* pData,int &iLen, int iMaxLen, int iAddtionalVal=0);
void ProcRcvData(const STCtrlProtoHeader& stCtrlInfo, const char* pData);
void ProcGD10Data(const STCtrlProtoHeader& stCtrlHeader, const char* pPayload);
void ProcPLCData(const STCtrlProtoHeader& stCtrlHeader, const char* pPayload);
//static UINT StartMeasuData(LPVOID pInfo);
void ThreadJoin();
void PreNetResponse(WPARAM wParam, LPARAM lParam);
public:
CDialListRealTimeMeasureData m_dialListMeasuTask;//改为公有访问
CDialListRealTimeMeasuGR m_dialListMeasuGR;
STTaskListItem m_stTaskItem;
STRemTaskArg m_stTaskArg;
UINT32 m_uiDevID;
UINT32 m_uiPlcID;
protected:
// int m_iStartElec;
// int m_iEndElec;
// bool m_bIsNetOper; //是否正在网络操作
bool m_bIsSigMeasuring; //是否正在进行数据测量
bool m_bIsSuspend; //是否进行暂停
int m_iRecvElecID; //已经接受了的电极ID
BYTE m_ucData[MAX_RECV_MEASURE]; //接收数据缓冲区
int m_iRecvDataLen;
int m_iMeasuType; //测量数据类型,1是指测量数据,2是指接地电阻
int m_iTaskID; //测试任务ID
bool m_bIsDownLoadTask; //是否已经下发了任务配置
BYTE m_ucCmd; //正在进行通信的命令字
STQueryTaskBasicInfo m_stQueryTdInfo;
CTaskDataOper m_TaskdDBOper;
bool m_bIsOpenTbData; //是否已经打开具体的数据表
// int m_iMeasuMethod; //测量方法:0:不测量 1:全部测量,2:只测量当前点 3:从当前点开始测量
int m_iMeasureDataID;
int m_iSigDataMeasuTimeout;
int m_iCurTsn; //当前点的TSN
// int m_iListDataID; //测量数据列表的ID
// bool m_bIsSuspend; //是否暂停测量
STTaskDetailBasicData m_stTaskBasicData;
BYTE m_ucMeasuBtnStatus[2]; //分别代表测量数据和接地电阻测量按钮此时所处的状态
// BOOL m_bIsSuspenMeasu[2];
bool m_bIsRunning;
// RingBuffer *m_pReadBuf;
// RingBuffer *m_pWriteBuf;
CWinThread* m_pThread;
CRITICAL_SECTION m_MutexSec;
BYTE m_ucPayLoad[MAX_SND_DATA];
// BYTE m_ucDevType;
int m_iRepeatSndCnt;
std::vector<STSigSndDataInfo> m_vtMeasureData;
bool m_bIsThreadFinshed;
int m_iSelMeasuIndex;
int m_iGRAttionalVal;//用于在测量当前位置的时候用
//////////////////////////////////////////////////////////////////////////
int m_iLoopCnt;
int m_iCurLoop;
BYTE m_ucLastBtnStatus;
// BYTE m_ucDevType; //正在通信的设备类型 0代表GD10, 1代表PLC
CString m_strTaskCN; //同云端taskID
CString m_strTestingTaskID; //保存当前正在测量的任务ID
int m_iSptType;
//EN_TASK_TESTING_METHOD m_eTestingMethod;//保存正在测量的方式,单点测量、从当前位置开始测量、全部测量
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_DIALMEASUREDATA_H__CA946FA9_52D2_4B68_92E2_30C065867518__INCLUDED_)