📄 writecoildlg.cpp
字号:
// WriteCoilDlg.cpp : implementation file
//
//---- Notice: -----------------------------------------------------------------
//--- The limimation for maximum No. of coils to write, 16, is just for convenient
//--- for demo code writing. Actually, It is 128 in a 5000/TCP.
#include "stdafx.h"
//#include "coilwrview.h"
#include "coilwr.h"
#include "WriteCoilDlg.h"
#include <winsock2.h>
#include "..\..\..\include\adamtcp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//#define DeviceID 0x01 // 0x01 indicate the 5000/TCP
#define DEFAULT_PORT 502 // Port for Modbus/TCP
//-------- default timeout ------
int iConnectionTimeout=2000;
int iSendTimeout=2000;
int iReceiveTimeout=2000;
/////////////////////////////////////////////////////////////////////////////
// CWriteCoilDlg dialog
CWriteCoilDlg::CWriteCoilDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWriteCoilDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWriteCoilDlg)
m_nStart0 = -1;
m_nStart1 = -1;
m_nStart2 = -1;
m_nStart3 = -1;
m_nStart4 = -1;
m_nStart5 = -1;
m_nStart6 = -1;
m_nStart7 = -1;
m_nStart8 = -1;
m_nStart9 = -1;
m_nStart10 = -1;
m_nStart11 = -1;
m_nStart12 = -1;
m_nStart13 = -1;
m_nStart14 = -1;
m_nStart15 = -1;
m_strIPAddress = _T("");
m_strNoOfWrite = _T("");
m_strStartAddress = _T("");
m_strDeviceID = _T("");
m_strDLLVersion = _T("");
//}}AFX_DATA_INIT
}
void CWriteCoilDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWriteCoilDlg)
DDX_Radio(pDX, IDC_RADIO1, m_nStart0);
DDX_Radio(pDX, IDC_RADIO3, m_nStart1);
DDX_Radio(pDX, IDC_RADIO5, m_nStart2);
DDX_Radio(pDX, IDC_RADIO7, m_nStart3);
DDX_Radio(pDX, IDC_RADIO9, m_nStart4);
DDX_Radio(pDX, IDC_RADIO11, m_nStart5);
DDX_Radio(pDX, IDC_RADIO13, m_nStart6);
DDX_Radio(pDX, IDC_RADIO15, m_nStart7);
DDX_Radio(pDX, IDC_RADIO17, m_nStart8);
DDX_Radio(pDX, IDC_RADIO19, m_nStart9);
DDX_Radio(pDX, IDC_RADIO21, m_nStart10);
DDX_Radio(pDX, IDC_RADIO23, m_nStart11);
DDX_Radio(pDX, IDC_RADIO25, m_nStart12);
DDX_Radio(pDX, IDC_RADIO27, m_nStart13);
DDX_Radio(pDX, IDC_RADIO29, m_nStart14);
DDX_Radio(pDX, IDC_RADIO31, m_nStart15);
DDX_Text(pDX, IDC_EDIT_IPADDRESS, m_strIPAddress);
DDX_Text(pDX, IDC_EDIT_NOOFWRITE, m_strNoOfWrite);
DDX_Text(pDX, IDC_EDIT_STARTADDRESS, m_strStartAddress);
DDX_Text(pDX, IDC_EDIT_DEVICEID, m_strDeviceID);
DDX_Text(pDX, IDC_EDIT_DLLVERSION, m_strDLLVersion);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWriteCoilDlg, CDialog)
//{{AFX_MSG_MAP(CWriteCoilDlg)
ON_BN_CLICKED(ID_EXIT, OnExit)
ON_BN_CLICKED(ID_WRITECOIL, OnWritecoil)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWriteCoilDlg message handlers
void CWriteCoilDlg::OnExit()
{
// TODO: Add your control notification handler code here
CDialog::OnOK();
}
void CWriteCoilDlg::OnWritecoil()
{
// TODO: Add your control notification handler code here
CString strText,strTemp;
char szIPAddress[20];
int i,nID,iRetVal;
WORD wDeviceID;
WORD wStartAddress;
WORD wCount;
BYTE byData[128];
int CoilValue[16];
CButton* pRadioButton;
char szDump[80];
//--- Firstly, initial DLL to working ---
/***
iRetVal=ADAMTCP_Open();
if( iRetVal!=0 )
{
sprintf(szDump,"ADAMTCP_Open() Failure !!! code=%d\n",iRetVal);
MessageBox( szDump );
return;
}
***/
nID=IDC_RADIO1;
for(i=0; i<16; i++)
{
pRadioButton=(CButton *)GetDlgItem(nID+2*i);
if( pRadioButton->GetCheck()==BST_CHECKED )
CoilValue[i]=0;
else
CoilValue[i]=1;
}
// How many coils to write
GetDlgItemText(IDC_EDIT_NOOFWRITE,strTemp);
wCount=atoi(strTemp);
if( wCount<0 || wCount>16 )
{
MessageBox("The # of Coil must between 1 to 16 !");
return;
}
// the Device ID
GetDlgItemText(IDC_EDIT_DEVICEID,strTemp);
wDeviceID=atoi(strTemp);
// the start address to write
GetDlgItemText(IDC_EDIT_STARTADDRESS,strTemp);
wStartAddress=atoi(strTemp);
// get the 5000/TCP's IP Address
GetDlgItemText(IDC_EDIT_IPADDRESS,szIPAddress,20);
//--- try to create a connection to 5000/TCP ---
iRetVal=ADAMTCP_Connect(szIPAddress,DEFAULT_PORT,
iConnectionTimeout, iSendTimeout, iReceiveTimeout);
if( iRetVal<0 )
{
sprintf(szDump,"ADAMTCP_Connect() Failure !!! code=%d\n",iRetVal);
MessageBox(szDump);
ADAMTCP_Disconnect();
return;
}
//--- prepare data to write to coil ---
for(i=0; i<wCount; i++)
byData[i]=CoilValue[i];
//--- writing the coils ---
iRetVal=ADAMTCP_WriteCoil(szIPAddress, wDeviceID, wStartAddress, wCount, byData);
if( iRetVal )
{
sprintf(szDump,"ADAMTCP_WriteCoil() Failure !!! code=%d\n",iRetVal);
MessageBox(szDump);
ADAMTCP_Disconnect();
return;
}
//--- lastly, disconnet connection to 5000/TCP ---
ADAMTCP_Disconnect();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -