📄 dlgxinjiedataread.cpp
字号:
// DlgXinjieDataRead.cpp : implementation file
//
#include "stdafx.h"
#include "ModbusPLC.h"
#include "DlgXinjieDataRead.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdlgs.h>
extern CModbus *g_pModbus;
UINT ThreadPlcDataRead(LPVOID pParam)
{
CDlgXinjieDataRead *pDlg=(CDlgXinjieDataRead *)pParam;
pDlg->PlcDataReadProc();
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CDlgXinjieDataRead dialog
CDlgXinjieDataRead::CDlgXinjieDataRead(CWnd* pParent /*=NULL*/)
: CDialog(CDlgXinjieDataRead::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgXinjieDataRead)
//}}AFX_DATA_INIT
m_pnData = NULL;
m_strPlcData = "";
}
void CDlgXinjieDataRead::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgXinjieDataRead)
DDX_Control(pDX, IDC_PROGRESS, m_ProgressPlcDataRead);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgXinjieDataRead, CDialog)
//{{AFX_MSG_MAP(CDlgXinjieDataRead)
ON_BN_CLICKED(IDC_BTN_START_DATA_READ, OnBtnStartDataRead)
ON_BN_CLICKED(IDC_BTN_BREAK, OnBtnBreak)
ON_BN_CLICKED(IDC_BTN_SAVE_FILE, OnBtnSaveFile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgXinjieDataRead message handlers
void CDlgXinjieDataRead::PlcDataReadProc()
{
m_bThreadBreak = FALSE;
CString strTmp;
int nDataNum = m_nAddressEnd-m_nAddressStart;
for(int i=0;i<nDataNum&&m_bThreadBreak!=TRUE;i++)
{
unsigned char i_rtu = 1;
unsigned short int i_regadd = (unsigned short int )(m_nAddressStart+i);
unsigned short int i_regcount = 1;
if(!g_pModbus->IsConnected())
return;
g_pModbus->MODBUS_S_ReadMultiRegD(1,i_regadd,i_regcount,&(m_pnData[i]));
// m_pnData[i] = i*10;
if(i%2==0)
strTmp.Format("D%d:%d ",i_regadd,m_pnData[i]);
else
strTmp.Format("D%d:%d\r\n",i_regadd,m_pnData[i]);
m_strPlcData += strTmp;
Sleep(500);
SetDlgItemText(IDC_EDIT_PLC_DATA,m_strPlcData);
m_ProgressPlcDataRead.SetPos(i+1);
}
}
void CDlgXinjieDataRead::OnBtnStartDataRead()
{
UpdataPlcProcData();
AfxBeginThread(ThreadPlcDataRead,this);
}
int CDlgXinjieDataRead::UpdataPlcProcData()
{
m_nAddressStart = GetDlgItemInt(IDC_EDIT_ADDRESS_START);
m_nAddressEnd = GetDlgItemInt(IDC_EDIT_ADDRESS_END);
m_nAddressCur = m_nAddressStart;
if(m_pnData!=NULL)
{
delete m_pnData;
m_pnData = NULL;
}
m_strPlcData = "";
SetDlgItemText(IDC_EDIT_PLC_DATA,m_strPlcData);
m_ProgressPlcDataRead.SetRange(0,0);
int nDataNum = m_nAddressEnd-m_nAddressStart;
if(nDataNum>0)
{
m_pnData = new short int [nDataNum];
m_ProgressPlcDataRead.SetRange(0,nDataNum);
}
return nDataNum;
}
BOOL CDlgXinjieDataRead::DestroyWindow()
{
if(m_pnData!=NULL)
{
delete m_pnData;
m_pnData = NULL;
}
return CDialog::DestroyWindow();
}
void CDlgXinjieDataRead::OnBtnBreak()
{
m_bThreadBreak = TRUE;
m_ProgressPlcDataRead.SetRange(0,0);
}
void CDlgXinjieDataRead::OnBtnSaveFile()
{
char filter[]="PLC Data (*.csv)|*.csv|";
CString strFilePath;
CFileDialog FileDlg(TRUE,NULL,strFilePath,OFN_OVERWRITEPROMPT,filter);
if(FileDlg.DoModal()==IDOK)
{
strFilePath=FileDlg.GetFileName();
strFilePath=strFilePath+".csv";
CString strData = "",strTmp = "";
for(int i=0;i<m_nAddressEnd-m_nAddressStart;i++)
{
if(i%2==0)
strTmp.Format("%d,",m_pnData[i]);
else
strTmp.Format("%d\r\n",m_pnData[i]);
strData += strTmp;
}
CFile fFile;
if(!fFile.Open(strFilePath, CFile::modeCreate | CFile::modeWrite))
{
AfxMessageBox("不能打开文件.");
return;
}
fFile.WriteHuge((const void*)strData, strData.GetLength());
AfxMessageBox("数据保存完成.");
fFile.Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -