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

📄 commparameters.cpp

📁 一个modbus协议的opc server
💻 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 + -