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

📄 mbtcp_evc_demodlg.cpp

📁 wince环境下的一个EVC的modbus协议通讯的例子程序
💻 CPP
字号:
// MBTCP_eVC_demoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MBTCP_eVC_demo.h"
#include "MBTCP_eVC_demoDlg.h"
#include "Modbus_ARM.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMBTCP_eVC_demoDlg dialog

CMBTCP_eVC_demoDlg::CMBTCP_eVC_demoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMBTCP_eVC_demoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMBTCP_eVC_demoDlg)
	m_ip = _T("");
	m_port = 0;
	m_rcoilfrom = 0;
	m_rcoilr = _T("");
	m_rcoilto = 0;
	m_rregsfrom = 0;
	m_rregsr = _T("");
	m_rregsto = 0;
	m_wcoil = 0;
	m_wcoils = 0;
	m_wreg = 0;
	m_wregv = 0;
	m_com = 0;
	m_databit = 0;
	m_parity = 0;
	m_baud = 0;
	m_stopbit = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMBTCP_eVC_demoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMBTCP_eVC_demoDlg)
	DDX_Text(pDX, IDC_IP, m_ip);
	DDX_Text(pDX, IDC_PORT, m_port);
	DDX_Text(pDX, IDC_RCOILFROM, m_rcoilfrom);
	DDX_Text(pDX, IDC_RCOILR, m_rcoilr);
	DDX_Text(pDX, IDC_RCOILTO, m_rcoilto);
	DDX_Text(pDX, IDC_RREGSFROM, m_rregsfrom);
	DDX_Text(pDX, IDC_RREGSR, m_rregsr);
	DDX_Text(pDX, IDC_RREGSTO, m_rregsto);
	DDX_Text(pDX, IDC_WCOIL, m_wcoil);
	DDX_Text(pDX, IDC_WCOILS, m_wcoils);
	DDX_Text(pDX, IDC_WREG, m_wreg);
	DDX_Text(pDX, IDC_WREGV, m_wregv);
	DDX_Text(pDX, IDC_COM, m_com);
	DDX_Text(pDX, IDC_DataBit, m_databit);
	DDX_Text(pDX, IDC_Parity, m_parity);
	DDX_Text(pDX, IDC_Baud, m_baud);
	DDX_Text(pDX, IDC_StopBit, m_stopbit);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMBTCP_eVC_demoDlg, CDialog)
	//{{AFX_MSG_MAP(CMBTCP_eVC_demoDlg)
	ON_BN_CLICKED(IDC_CREATE, OnCreate)
	ON_BN_CLICKED(IDC_CLOSE, OnClose)
	ON_BN_CLICKED(IDC_RCOILB, OnRcoilb)
	ON_BN_CLICKED(IDC_RREGSB, OnRregsb)
	ON_BN_CLICKED(IDC_WCOILB, OnWcoilb)
	ON_BN_CLICKED(IDC_WREGB, OnWregb)
	ON_BN_CLICKED(IDC_MBRTURADIO, OnMbrturadio)
	ON_BN_CLICKED(IDC_MBTCPRADIO, OnMbtcpradio)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMBTCP_eVC_demoDlg message handlers

BOOL CMBTCP_eVC_demoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	m_check = FALSE;	//For Modbus TCP
	m_check2 = FALSE;	//For Modbus RTU
	m_which = TRUE;	//Modbus RTU

	m_port =502;
	m_ip.Format(_T("%S"),"10.0.0.100");
	m_rcoilfrom = 6;
	m_rcoilto = 10;
	m_rregsfrom = 16;
	m_rregsto = 20;
	m_wcoil = 6;
	m_wcoils = 1;
	m_wreg = 16;
    m_wregv = 12345;
	
	m_com = 3;
	m_baud = 19200;
	m_parity = 0;
	m_databit = 8;
	m_stopbit = 1;

	((CButton*)GetDlgItem(IDC_MBRTURADIO))->SetCheck(1);
	((CEdit*)GetDlgItem(IDC_IP))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_PORT))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_COM))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_Baud))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_Parity))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_DataBit))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_StopBit))->EnableWindow(1);

	UpdateData(FALSE);
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CMBTCP_eVC_demoDlg::OnCreate() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_which){
		if(!MBRTUInit(m_com, 19200, 0, 8, 1, 300)){
			AfxMessageBox(_T("Create Success!"));
			m_check2 = TRUE;
		}
		else{
			AfxMessageBox(_T("Create Failure!"));
			m_check2 = FALSE;
		}
	}
	else{
		char temp[30];
		sprintf(temp,"%S",m_ip,5000);
		if(!MBTCPInit(1,temp,m_port,5000)){
			AfxMessageBox(_T("Create Success!"));
			m_check = TRUE;
		}
		else{
			AfxMessageBox(_T("Create Failure!"));
			m_check = FALSE;
		}
	}

	UpdateData(FALSE);
}

void CMBTCP_eVC_demoDlg::OnClose() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_which){
		if(m_check2 == FALSE){
			AfxMessageBox(_T("The COM port has been closed!"));
		}
		else{
			MBRTUClose(m_com);
			m_check2 = FALSE;
		}
	}
	else{
		if(m_check == FALSE){
				AfxMessageBox(_T("The socket has been closed!"));
			}
			else{
				MBTCPClose(1);
				m_check = FALSE;
			}
	}
	UpdateData(FALSE);
}

void CMBTCP_eVC_demoDlg::OnRcoilb() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	
	if(m_which){
		if(m_check2 == TRUE){
			unsigned char iRecv[10]={0};
			int rr;
			rr = MBRTU_R_Coils(m_com,1, m_rcoilfrom,(m_rcoilto-m_rcoilfrom+1),iRecv,2);
			if(!rr)
			{
				m_rcoilr.Format(_T("%d %d %d %d %d %d %d %d %d %d"),iRecv[0],iRecv[1],iRecv[2],iRecv[3],iRecv[4],iRecv[5],iRecv[6],iRecv[7],iRecv[8],iRecv[9]);
			}
			else
			{
				CString aa;
				aa.Format(_T("%d"),rr);
				AfxMessageBox(aa);
			}
		}
		else{
			AfxMessageBox(_T("Please create COM port first!!"));
		}
	}
	else{
		if(m_check == TRUE){
			unsigned char iRecv[10]={0};
			MBTCP_R_Coils(1,1,m_rcoilfrom,(m_rcoilto-m_rcoilfrom+1),iRecv,1);
			m_rcoilr.Format(_T("%d %d %d %d %d %d %d %d %d %d"),iRecv[0],iRecv[1],iRecv[2],iRecv[3],iRecv[4],iRecv[5],iRecv[6],iRecv[7],iRecv[8],iRecv[9]);
		}
		else{
			AfxMessageBox(_T("Please create socket first!!"));
		}

	}
	UpdateData(FALSE);
}

void CMBTCP_eVC_demoDlg::OnRregsb() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_which){
		if(m_check2 == TRUE){
			short iRecv[10]={0};
			int rr;
			rr = MBRTU_R_Registers(m_com,1,m_rregsfrom,(m_rregsto-m_rregsfrom+1),iRecv,3);
			if(!rr)
			{	
				m_rregsr.Format(_T("%d %d %d %d %d %d %d %d %d %d"),iRecv[0],iRecv[1],iRecv[2],iRecv[3],iRecv[4],iRecv[5],iRecv[6],iRecv[7],iRecv[8],iRecv[9]);
			}
			else
			{
				CString aa;
				aa.Format(_T("%d"),rr);
				AfxMessageBox(aa);
			}
		}
		else{
			AfxMessageBox(_T("Please create COM port first!!"));
		}
	}
	else{
			if(m_check == TRUE){
			short iRecv[10]={0};
			MBTCP_R_Registers(1,1,m_rregsfrom,(m_rregsto-m_rregsfrom+1),iRecv,3);
			m_rregsr.Format(_T("%d %d %d %d %d %d %d %d %d %d"),iRecv[0],iRecv[1],iRecv[2],iRecv[3],iRecv[4],iRecv[5],iRecv[6],iRecv[7],iRecv[8],iRecv[9]);
		}
		else{
			AfxMessageBox(_T("Please create socket first!!"));
		}
	}
	UpdateData(FALSE);
}

void CMBTCP_eVC_demoDlg::OnWcoilb() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	int rr;
	if(m_which){
		if(m_check2 == TRUE){
			rr = MBRTU_W_Coil(m_com,1,m_wcoil,m_wcoils);
			if(!rr)
			{
				AfxMessageBox(_T("Write Coil Success!!"));
			}
			else
			{
				CString aa;
				aa.Format(_T("%d"),rr);
				AfxMessageBox(aa);
			}
		}
		else{
			AfxMessageBox(_T("Please create COM port first!!"));
		}
	}
	else{
		if(m_check == TRUE){
			MBTCP_W_Coil(1,1,m_wcoil,m_wcoils);
		}
		else{
			AfxMessageBox(_T("Please create socket first!!"));
		}
	}
	UpdateData(FALSE);
}

void CMBTCP_eVC_demoDlg::OnWregb() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	int rr;
	if(m_which){
		if(m_check2 == TRUE){
			rr = MBRTU_W_Register(m_com,1,m_wreg,m_wregv);
			if(!rr)
			{
				AfxMessageBox(_T("Write Register Success!!"));
			}
			else
			{
				CString aa;
				aa.Format(_T("%d"),rr);
				AfxMessageBox(aa);
			}
		}
		else{
			AfxMessageBox(_T("Please create COM port first!!"));
		}
	}
	else{
		if(m_check == TRUE){
			if(MBTCP_W_Register(1,1,m_wreg,m_wregv))
				AfxMessageBox(_T("Write Registry Fail"));

		}
		else{
			AfxMessageBox(_T("Please create socket first!!"));
		}
	}
	UpdateData(FALSE);
}

void CMBTCP_eVC_demoDlg::OnMbrturadio() 
{
	// TODO: Add your control notification handler code here
	((CButton*)GetDlgItem(IDC_MBRTURADIO))->SetCheck(1);
	((CButton*)GetDlgItem(IDC_MBTCPRADIO))->SetCheck(0);
	((CEdit*)GetDlgItem(IDC_IP))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_PORT))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_COM))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_Baud))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_Parity))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_DataBit))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_StopBit))->EnableWindow(1);
	m_which = TRUE;

}

void CMBTCP_eVC_demoDlg::OnMbtcpradio() 
{
	// TODO: Add your control notification handler code here
	((CButton*)GetDlgItem(IDC_MBTCPRADIO))->SetCheck(1);
	((CButton*)GetDlgItem(IDC_MBRTURADIO))->SetCheck(0);
	((CEdit*)GetDlgItem(IDC_IP))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_PORT))->EnableWindow(1);
	((CEdit*)GetDlgItem(IDC_COM))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_Baud))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_Parity))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_DataBit))->EnableWindow(0);
	((CEdit*)GetDlgItem(IDC_StopBit))->EnableWindow(0);
	m_which =FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -