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

📄 writecoildlg.cpp

📁 关于台湾研华远程以太网模块上位机控制源代码
💻 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 + -