📄 commparameters.cpp
字号:
// CommParameters.cpp : implementation file
//
#include "stdafx.h"
#include "CommParameters.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
enum
{
mbNOPARITY = 0,
mbODDPARITY = 1,
mbEVENPARITY = 2,
mbMARKPARITY = 3,
mbSPACEPARITY = 4,
mbONESTOPBIT = 0,
mbONE5STOPBITS = 1,
mbTWOSTOPBITS = 2,
mbFC_NONE = 0,
mbFC_DTRDSR = 0x1,
mbFC_RTSCTS = 0x2,
mbFC_XONXOFF = 0x4,
mbLOCAL = 1,
mbREMOTE = 2,
mbMODE_RTU = 0,
mbMODE_ASCII = 1,
mbREAL_NORMAL = 0,
mbREAL_REVERSE = 1
} GeneralConstants;
/////////////////////////////////////////////////////////////////////////////
// CCommParameters dialog
CCommParameters::CCommParameters(CWnd* pParent /*=NULL*/)
: CDialog(CCommParameters::IDD, pParent)
{
//{{AFX_DATA_INIT(CCommParameters)
m_bDTRDSR = FALSE;
m_bRTSCTS = FALSE;
m_bXONXOFF = FALSE;
//}}AFX_DATA_INIT
m_bModeNew=FALSE;
}
void CCommParameters::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCommParameters)
DDX_Control(pDX, IDC_EDIT_DELAY, m_edtDelay);
DDX_Control(pDX, IDC_CHK_ACTIVE, m_chkActive);
DDX_Control(pDX, IDC_EDIT_CHAR_INTERVAL, m_edtCharInterval);
DDX_Control(pDX, IDC_EDIT_TIME_OUT, m_edtTimeOut);
DDX_Control(pDX, IDC_CBO_BYTESIZE, m_cboByteSize);
DDX_Control(pDX, IDC_CBO_STOPBITSCB, m_cboStopBits);
DDX_Control(pDX, IDC_CBO_PARITY, m_cboParity);
DDX_Control(pDX, IDC_CBO_COM_PORT, m_cboPorta);
DDX_Control(pDX, IDC_CBO_BAUD_RATE, m_cboBaudRate);
DDX_Check(pDX, IDC_CHK_DTRDSR, m_bDTRDSR);
DDX_Check(pDX, IDC_CHK_RTSCTS, m_bRTSCTS);
DDX_Check(pDX, IDC_CHK_XONXOFF, m_bXONXOFF);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCommParameters, CDialog)
//{{AFX_MSG_MAP(CCommParameters)
ON_BN_CLICKED(IDC_OK, OnOkey)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCommParameters message handlers
void CCommParameters::LoadCombos()
{
int nIndex=-1;
CString str;
//port
m_cboPorta.AddString("COM1");
m_cboPorta.AddString("COM2");
m_cboPorta.AddString("COM3");
m_cboPorta.AddString("COM4");
m_cboPorta.AddString("COM5");
m_cboPorta.AddString("COM6");
m_cboPorta.AddString("COM7");
m_cboPorta.AddString("COM8");
m_cboPorta.SetCurSel(0);
//baudrate
/*CBR_110 CBR_19200
CBR_300 CBR_38400
CBR_600 CBR_56000
CBR_1200 CBR_57600
CBR_2400 CBR_115200
CBR_4800 CBR_128000
CBR_9600 CBR_256000
CBR_14400 */
str.Format("%d", CBR_110);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_110);
str.Format("%d", CBR_300);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_300);
str.Format("%d", CBR_600);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_600);
str.Format("%d", CBR_1200);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_1200);
str.Format("%d", CBR_2400);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_2400);
str.Format("%d", CBR_4800);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_4800);
str.Format("%d", CBR_9600);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_9600);
str.Format("%d", CBR_14400);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_14400);
str.Format("%d", CBR_19200);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_19200);
str.Format("%d", CBR_38400);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_38400);
str.Format("%d", CBR_56000);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_56000);
str.Format("%d", CBR_57600);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_57600);
str.Format("%d", CBR_115200);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_115200);
str.Format("%d", CBR_128000);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_128000);
str.Format("%d", CBR_256000);
nIndex=m_cboBaudRate.AddString(str);
m_cboBaudRate.SetItemData( nIndex,CBR_256000);
m_cboBaudRate.SetCurSel(0);
//parity
str="Even";
nIndex=m_cboParity.AddString(str);
m_cboParity.SetItemData( nIndex,EVENPARITY);
str="Mark";
nIndex=m_cboParity.AddString(str);
m_cboParity.SetItemData( nIndex,MARKPARITY);
str="No parity";
nIndex=m_cboParity.AddString(str);
m_cboParity.SetItemData( nIndex,NOPARITY);
str="Odd";
nIndex=m_cboParity.AddString(str);
m_cboParity.SetItemData( nIndex,ODDPARITY);
m_cboParity.SetCurSel(0);
//stop bits
str="1";
nIndex=m_cboStopBits.AddString(str);
m_cboStopBits.SetItemData( nIndex,ONESTOPBIT);
str="1.5";
nIndex=m_cboStopBits.AddString(str);
m_cboStopBits.SetItemData( nIndex,ONE5STOPBITS);
str="2";
nIndex=m_cboStopBits.AddString(str);
m_cboStopBits.SetItemData( nIndex,TWOSTOPBITS);
m_cboStopBits.SetCurSel(0);
//Byte Size
str="7";
nIndex=m_cboByteSize.AddString(str);
m_cboByteSize.SetItemData( nIndex,7);
str="8";
nIndex=m_cboByteSize.AddString(str);
m_cboByteSize.SetItemData( nIndex,8);
m_cboByteSize.SetCurSel(0);
}
BOOL CCommParameters::OnInitDialog()
{
CDialog::OnInitDialog();
LoadCombos();
if (!m_bModeNew) {
ShowParameters();
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CCommParameters::ShowParameters()
{
int iIndex;
CString str;
CButton* pRadTransMode;
BSTR bstrTCPServer=NULL;
long lTcpPort=0;
str.Format("COM%d",m_pLModbus->ComPort());
iIndex=m_cboPorta.FindString(-1, str);
m_cboPorta.SetCurSel( iIndex );
//baudrate
str.Format("%d",(m_pLModbus->BaudRate()));
iIndex=m_cboBaudRate.FindString(-1, str);
m_cboBaudRate.SetCurSel( iIndex );
//parity
switch (m_pLModbus->Parity()) {
case EVENPARITY:
str="Even";
break;
case MARKPARITY:
str="Mark";
break;
case NOPARITY:
str="No parity";
break;
case ODDPARITY:
str="Odd";
break;
default:
str="";
}
iIndex=m_cboParity.FindString(-1, str);
m_cboParity.SetCurSel( iIndex );
//StopBits
switch (m_pLModbus->StopBits()) {
case ONESTOPBIT:
str="1";
break;
case ONE5STOPBITS:
str="1.5";
break;
case TWOSTOPBITS:
str="2";
break;
default:
str="2";
}
iIndex=m_cboStopBits.FindString(-1, str);
m_cboStopBits.SetCurSel(iIndex);
//ByteSize
switch (m_pLModbus->ByteSize()) {
case 7:
str="7";
break;
case 8:
str="8";
break;
default:
str="8";
break;
}
iIndex=m_cboByteSize.FindString(-1, str);
m_cboByteSize.SetCurSel(iIndex);
//time-out
str.Format("%d",m_pLModbus->Timeout());
m_edtTimeOut.SetWindowText(str);
//char interval
str.Format("%d",m_pLModbus->SilentInterval());
m_edtCharInterval.SetWindowText(str);
//Delay
str.Format("%d",m_pLModbus->Delay());
m_edtDelay.SetWindowText(str);
//active com port
m_chkActive.SetCheck(m_pLModbus->IsActive());
//flow control
m_bDTRDSR=(mbFC_DTRDSR&m_pLModbus->FlowControl())!=0;
m_bRTSCTS=(mbFC_RTSCTS&m_pLModbus->FlowControl())!=0;
m_bXONXOFF=(mbFC_XONXOFF&m_pLModbus->FlowControl())!=0;
//Transmission Mode
switch (m_pLModbus->TransmissionMode()) {
case mbMODE_RTU:
pRadTransMode=(CButton*)GetDlgItem(IDC_RAD_RTU);
break;
case mbMODE_ASCII:
default:
pRadTransMode=(CButton*)GetDlgItem(IDC_RAD_ASCII);
}
pRadTransMode->SetCheck(1);
UpdateData(FALSE);
return TRUE;
}
BOOL CCommParameters::SaveParameters()
{
int nIndex;
DWORD dwBaudRate=0;
BYTE byParity=0;
DWORD dwTimeout;
DWORD dwSilentInterval;
CString str;
CString sAux;
CString sConnectionName;
CString sMachine;
BSTR bstr=NULL;
BYTE byFlowControl;
CButton* pRadTransMode;
VARIANT_BOOL bValue=VARIANT_FALSE;
CWaitCursor wait; // display wait cursor
UpdateData(TRUE);
//com port
nIndex=m_cboPorta.GetCurSel();
if (nIndex<0) {
AfxMessageBox("Invalid com port");
goto ParamError;
}
m_pLModbus->ComPort(BYTE(nIndex+1));
//Baud Rate
nIndex=m_cboBaudRate.GetCurSel();
if (nIndex<0) {
AfxMessageBox("Invalid Baud-Rate");
goto ParamError;
}
dwBaudRate=m_cboBaudRate.GetItemData(nIndex);
m_pLModbus->BaudRate(dwBaudRate);
//parity
nIndex=m_cboParity.GetCurSel();
if (nIndex<0) {
AfxMessageBox("Invalid Parity");
goto ParamError;
}
byParity=BYTE(m_cboParity.GetItemData(nIndex));
m_pLModbus->Parity(byParity);
//Stop bits
nIndex=m_cboStopBits.GetCurSel();
if (nIndex<0) {
AfxMessageBox("Invalid Stop Bits");
goto ParamError;
}
m_pLModbus->StopBits((BYTE)m_cboStopBits.GetItemData(nIndex));
byFlowControl=mbFC_NONE;
if (m_bDTRDSR) {
byFlowControl=byFlowControl|mbFC_DTRDSR;
}
if (m_bRTSCTS) {
byFlowControl=byFlowControl|mbFC_RTSCTS;
}
if (m_bXONXOFF) {
byFlowControl=byFlowControl|mbFC_XONXOFF;
}
m_pLModbus->FlowControl(byFlowControl);
//timeout
m_edtTimeOut.GetWindowText(str);
dwTimeout=(DWORD)atol(str);
if (0==dwTimeout) {
AfxMessageBox("Invalid timeout");
goto ParamError;
}
m_pLModbus->Timeout(dwTimeout);
//silentinterval
m_edtCharInterval.GetWindowText(str);
dwSilentInterval=(DWORD)atol(str);
if (0==dwSilentInterval) {
AfxMessageBox("Invalid Char Interval");
goto ParamError;
}
m_pLModbus->SilentInterval(dwSilentInterval);
//Delay
m_edtDelay.GetWindowText(str);
m_pLModbus->Delay((DWORD)atol(str));
//Transmission Mode
pRadTransMode=(CButton*)GetDlgItem(IDC_RAD_RTU);
ASSERT(pRadTransMode);
if (FALSE!=pRadTransMode->GetCheck()) {
m_pLModbus->TransmissionMode(mbMODE_RTU);
}
else {
m_pLModbus->TransmissionMode(mbMODE_ASCII);
}
//Byte Size
nIndex=m_cboByteSize.GetCurSel();
if (nIndex<0) {
AfxMessageBox("Invalid Byte Size");
goto ParamError;
}
m_pLModbus->ByteSize((BYTE)m_cboByteSize.GetItemData(nIndex));
return (TRUE);
ParamError:
return FALSE;
}
void CCommParameters::OnOkey()
{
if (SaveParameters()) {
CDialog::OnOK();
}
}
void CCommParameters::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -