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

📄 ykytdlg.cpp

📁 串口收发工具
💻 CPP
字号:
// YkYtDlg.cpp : implementation file
//

#include "stdafx.h"
#include "maintain.h"
#include "YkYtDlg.h"
#include "maintainview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CYkYtDlg dialog


CYkYtDlg::CYkYtDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CYkYtDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CYkYtDlg)
	m_YkNo = 0;
	m_YkAction = -1;
	m_YtValue = 0.0;
	//}}AFX_DATA_INIT
	pWnd = pParent;
	
}


void CYkYtDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CYkYtDlg)
	DDX_Control(pDX, IDC_EDIT_YTNO, m_YtNo);
	DDX_Control(pDX, IDC_EDIT_RETURNINFO, m_info);
	DDX_Control(pDX, IDC_BTN_YKEXECUTE, m_ykExecute);
	DDX_Control(pDX, IDC_BTN_YKCANCEL, m_ykCancel);
	DDX_Text(pDX, IDC_EDIT_YKNO, m_YkNo);
	DDV_MinMaxInt(pDX, m_YkNo, 0, 255);
	DDX_CBIndex(pDX, IDC_COMBO_YKACTION, m_YkAction);
	DDX_Text(pDX, IDC_EDIT_YTVALUE, m_YtValue);
	DDV_MinMaxDouble(pDX, m_YtValue, 0., 1000.);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CYkYtDlg, CDialog)
	//{{AFX_MSG_MAP(CYkYtDlg)
	ON_BN_CLICKED(IDC_BTN_YKSELECT, OnBtnYkselect)
	ON_BN_CLICKED(IDC_BTN_YKEXECUTE, OnBtnYkexecute)
	ON_BN_CLICKED(IDC_BTN_YKCANCEL, OnBtnYkcancel)
	ON_BN_CLICKED(IDC_BTN_YTEXECUTE, OnBtnYtexecute)
	ON_MESSAGE(MSG_CONTROLRETURN, OnControlResult)
	ON_MESSAGE(MSG_CONTROLRETURN_MODBUS, OnModbusControlResult)
	
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CYkYtDlg message handlers

void CYkYtDlg::OnBtnYkselect() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	((CMaintainView*)pWnd)->SetYkPara(m_YkNo,m_YkAction);
	m_info.SetWindowText(_T(""));

}

void CYkYtDlg::OnBtnYkexecute() 
{
	// TODO: Add your control notification handler code here
	int nCurGuiyue = ((CMaintainView*)pWnd)->GetGuiyueType();
	if((nCurGuiyue == 3)||(nCurGuiyue == 4))//0420 modbus
	{
		UpdateData(true);
		((CMaintainView*)pWnd)->SetYkPara(m_YkNo,m_YkAction);
	}
	else
	{
		m_info.SetWindowText(_T("遥控执行"));
		((CMaintainView*)pWnd)->YkExecute();
		((CButton*)GetDlgItem(IDC_BTN_YKEXECUTE))->EnableWindow(false);
		((CButton*)GetDlgItem(IDC_BTN_YKCANCEL))->EnableWindow(false);
	}
}

void CYkYtDlg::OnBtnYkcancel() 
{
	// TODO: Add your control notification handler code here
	((CMaintainView*)pWnd)->YkCancel();
	int nCurGuiyue = ((CMaintainView*)pWnd)->GetGuiyueType();
	if((nCurGuiyue == 1)||(nCurGuiyue == 2))//cdt,fdk
	{
		m_info.SetWindowText(_T("遥控撤销"));
		((CButton*)GetDlgItem(IDC_BTN_YKEXECUTE))->EnableWindow(false);
		((CButton*)GetDlgItem(IDC_BTN_YKCANCEL))->EnableWindow(false);
	}
}

void CYkYtDlg::OnBtnYtexecute() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	CString ytno,ytvalue;
	m_YtNo.GetWindowText(ytno);
	int nCurGuiyue = ((CMaintainView*)pWnd)->GetGuiyueType();
	
	if(nCurGuiyue == 4)//modbus遥调不含小数位
		((CMaintainView*)pWnd)->SetYtPara(int(m_YtValue),atoi(ytno));
	else
		((CMaintainView*)pWnd)->SetYtPara(int(m_YtValue*10),atoi(ytno));

	if((nCurGuiyue == 1)||(nCurGuiyue == 2))//cdt,fdk
		m_info.SetWindowText(_T("遥调执行"));
}

BOOL CYkYtDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_YtNo.SetWindowText("0");
	// TODO: Add extra initialization here
	m_YkAction = 0;
	UpdateData(false);

	//fdk cdt都应该有反校 0420 0241 modbus遥控遥调都是直接下发
	int nCurGuiyue = ((CMaintainView*)pWnd)->GetGuiyueType();
	if((nCurGuiyue == 3)||((nCurGuiyue == 4)))
	{
		((CButton*)GetDlgItem(IDC_BTN_YKSELECT))->EnableWindow(false);
		((CButton*)GetDlgItem(IDC_BTN_YKEXECUTE))->EnableWindow(true);
		((CButton*)GetDlgItem(IDC_BTN_YKCANCEL))->EnableWindow(false);
		m_YtNo.EnableWindow(true);
		if (nCurGuiyue == 3)
			m_info.SetWindowText("遥调值可为整数或带一位小数,实际下发值为设定值的10倍");
		else
			m_info.SetWindowText("遥调值不含小数,例如256V则传0x100");
	}
	
	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CYkYtDlg::OnModbusControlResult(WPARAM wParam, LPARAM lParam) 
{
	CString str;
	WORD rtn1 = (WORD)wParam;
	WORD rtn2 = (WORD)lParam;
	switch(rtn1) {
	case 1://yk return
		if (rtn2 == 0x00)
			str = _T("遥控分");
		else
			str = _T("遥控合");
		break;
	case 2://yt return
		str.Format("遥调电压值:%d",rtn2);
		break;
	default:
		break;
	}
	m_info.SetWindowText(str);
}

void CYkYtDlg::OnControlResult(WPARAM wParam, LPARAM lParam) 
{
	CString str;
	int rtn1 = (int)wParam;
	int rtn2 = (int)lParam;
	switch(rtn1)
	{
	case -1:
		str = _T("遥控反校返回数据长度错误或校验错误!");
		break;
	case 0:
		str = _T("操作正确");
		break;
	case 0xff://cdt
	case 0x03://fdk
		str = _T("遥控反校错误!");
		break;
	case 0xCC://cdt合
	case 0x33://cdt分
	case 0x02://fdk
		str = _T("遥控反校正确,请执行或撤销遥控操作!"); 
		m_ykCancel.EnableWindow(true);
		m_ykExecute.EnableWindow(true);
		break;
	case 101://0420
		str = _T("遥控执行正确!");
		break;
	case 100://0420
		str = _T("遥控执行错误!");
		break;
	case 201://0420
		str = _T("遥调执行正确!");
		break;
	case 200://0420
		str = _T("遥调执行错误!");
		break;
	default:
		break;
	}
	m_info.SetWindowText(str);
	
	if(rtn2>0)
	{
		switch(rtn2)
		{
		case 1:
			str = _T("无效命令");
			break;
		case 2:
			str = _T("校验错误");
			break;
		case 3:
			str = _T("无效帧长度");
			break;
		case 4:
			str = _T("I/O错误");
			break;
		case 5:
			str = _T("函数操作错误");
			break;
		case 6:
			str = _T("笔记本反应超时");
			break;
		case 7:
			str = _T("信件错误");
			break;
		case 8:
			str = _T("地址错误");
			break;
		case 9:
			str = _T("超时错误");
			break;
		case 10:
			str = _T("两次命令不一致");
			break;
			
		}
		m_info.SetWindowText(str);
	}
}

⌨️ 快捷键说明

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