⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgxinjiedataread.cpp

📁 自己开发的
💻 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 + -