📄 didodlg.cpp
字号:
// DIDODlg.cpp : implementation file
//
#include "stdafx.h"
#include "Demo8000.h"
#include "DIDODlg.h"
#include "MBDLLTool.h" // add by Yeh
#include "com_sub.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDIDODlg dialog
CDIDODlg::CDIDODlg(CWnd* pParent /*=NULL*/)
: CDialog(CDIDODlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDIDODlg)
m_addr = _T("");
//}}AFX_DATA_INIT
}
CDIDODlg::CDIDODlg(int type, int addr, CWnd* pParent /*=NULL*/)
: CDialog(CDIDODlg::IDD, pParent)
{
m_type= type;
m_idx= addr;
}
void CDIDODlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDIDODlg)
DDX_Control(pDX, IDC_CURRENT_ONOFF, m_curr_ctrl);
DDX_Control(pDX, IDC_ONOFF, m_onoff_ctrl);
DDX_Text(pDX, IDC_MODBUS_ADDR, m_addr);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDIDODlg, CDialog)
//{{AFX_MSG_MAP(CDIDODlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDIDODlg message handlers
BOOL CDIDODlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
int rc, addr_1, bytes, bitno;
switch(m_type)
{
case DI_BARE_TYPE:
m_addr.Format(_T("Input Coil, Modbus Address: %06d"), DI_BARE_PTR+m_idx+100001);
bytes= m_idx/8;
bitno= m_idx%8;
rc= Coil_Bit_Read(&Coil.DI_INIT[bytes], bitno);
if(rc==0)
m_onoff_ctrl.SetCurSel(0);
else
m_onoff_ctrl.SetCurSel(1);
rc= Coil_Bit_Read(&Coil.DI_BARE[bytes], bitno);
if(rc==0)
m_curr_ctrl.SetCurSel(0);
else
m_curr_ctrl.SetCurSel(1);
break;
case DO_BARE_TYPE:
m_addr.Format(_T("Output Coil, Modbus Address: %06d"), DO_BARE_PTR+m_idx+1);
bytes= m_idx/8;
bitno= m_idx%8;
rc= Coil_Bit_Read(&Coil.DO_INIT[bytes], bitno);
if(rc==0)
m_onoff_ctrl.SetCurSel(0);
else
m_onoff_ctrl.SetCurSel(1);
rc= Coil_Bit_Read(&Coil.DO_BARE[bytes], bitno);
if(rc==0)
m_curr_ctrl.SetCurSel(0);
else
m_curr_ctrl.SetCurSel(1);
break;
case DI_SOFT_TYPE:
addr_1= m_idx + DD_MAX_BIT;
m_addr.Format(_T("Input Coil Soft, Modbus Address: %06d"), DI_SOFT_PTR+m_idx+100001);
bytes= addr_1/8;
bitno= addr_1%8;
rc= Coil_Bit_Read(&Coil.DI_INIT[bytes], bitno);
if(rc==0)
m_onoff_ctrl.SetCurSel(0);
else
m_onoff_ctrl.SetCurSel(1);
bytes= m_idx/8;
bitno= m_idx%8;
rc= Coil_Bit_Read(&Coil.DI_SOFT[bytes], bitno);
if(rc==0)
m_curr_ctrl.SetCurSel(0);
else
m_curr_ctrl.SetCurSel(1);
break;
case DO_SOFT_TYPE:
addr_1= m_idx + DD_MAX_BIT;
m_addr.Format(_T("Output Coil Soft, Modbus Address: %06d"), DO_SOFT_PTR+m_idx+1);
bytes= addr_1/8;
bitno= addr_1%8;
rc= Coil_Bit_Read(&Coil.DO_INIT[bytes], bitno);
if(rc==0)
m_onoff_ctrl.SetCurSel(0);
else
m_onoff_ctrl.SetCurSel(1);
bytes= m_idx/8;
bitno= m_idx%8;
rc= Coil_Bit_Read(&Coil.DO_SOFT[bytes], bitno);
if(rc==0)
m_curr_ctrl.SetCurSel(0);
else
m_curr_ctrl.SetCurSel(1);
break;
}
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDIDODlg::OnOK()
{
// TODO: Add extra validation here
int rc, addr_1, bytes, bitno;
float fl;
UpdateData(TRUE);
switch(m_type)
{
case DI_BARE_TYPE:
bytes= m_idx/8;
bitno= m_idx%8;
rc= m_onoff_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DI_INIT[bytes], bitno, rc);
rc= m_curr_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DI_BARE[bytes], bitno, rc);
break;
case DO_BARE_TYPE:
bytes= m_idx/8;
bitno= m_idx%8;
rc= m_onoff_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DO_INIT[bytes], bitno, rc);
rc= m_curr_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DO_BARE[bytes], bitno, rc);
fl= (float)rc;
set_AODO_output(DO_TYPE, m_idx, fl);
break;
case DI_SOFT_TYPE:
addr_1= m_idx + DD_MAX_BIT;
bytes= addr_1/8;
bitno= addr_1%8;
rc= m_onoff_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DI_INIT[bytes], bitno, rc);
bytes= m_idx/8;
bitno= m_idx%8;
rc= m_curr_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DI_SOFT[bytes], bitno, rc);
break;
case DO_SOFT_TYPE:
addr_1= m_idx + DD_MAX_BIT;
bytes= addr_1/8;
bitno= addr_1%8;
rc= m_onoff_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DO_INIT[bytes], bitno, rc);
bytes= m_idx/8;
bitno= m_idx%8;
rc= m_curr_ctrl.GetCurSel();
Coil_Bit_Write(&Coil.DO_SOFT[bytes], bitno, rc);
break;
}
UpdateData(FALSE);
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -