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

📄 ecsample.c

📁 基于EthernetIP协议的应用程序,可以读取AB公司Controllogix系列Ethernetip协议PLC数据. 此软件代码可用于工业控制.
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
*****************************************************************************
**
** File Name
** ---------
**
** ECSample.C
**
*****************************************************************************
*****************************************************************************
**
** Description
** -----------
**
** EtherNet/IP example application.
**
*****************************************************************************
*****************************************************************************
**
** Source Change Indices
** ---------------------
**
** Porting: <none>----4<major>         Customization: <none>----4<major>
**
*****************************************************************************
*****************************************************************************
**                                                                         **
** ETHERNET/IP EXAMPLE CODE                                                **
** COPYRIGHT (c) 2002-2005 ODVA (Open DeviceNet Vendor Association)		   **
**						   & ControlNet International Ltd.                 **
**                                                                         **
** All rights reserved, except as specifically licensed in writing.        **
** Use of the Ethernet/IP Example Protocol Software is subject to          **
** ODVA's and ControlNet International's Terms of Use Agreement.           **
** The following work constitutes example program code and is intended     **
** merely to illustrate useful programming techniques.  The user is        **
** responsible for applying the code correctly.  The code is provided      **
** AS IS without warranty and is in no way guaranteed to be error-free.    **
**                                                                         **
*****************************************************************************
*****************************************************************************
*/

/****************************************************************************
*****************************************************************************
**
** Change Log
** ----------
**
** 05 August 2002						Initial Release Version 1.1		HoR
** 14 February 2003						Added two Callback functions	HoR
**
*****************************************************************************
****************************************************************************/

#include <stdio.h>
#include <string.h>

#include "windows.h"

#include "ECInterface.h"

/*****************************************************************************
******************************************************************************
** ! User supplied Data for the Userdefined Assembly Objects
******************************************************************************
*/
#define SY_INST_ID_CONSUMER_101 	101
#define SY_INST_ID_PRODUCER_102 	102
#define SY_INST_ID_CONFIG_103   	103
#define SY_INST_ID_STATUSIN_104		104
#define SY_INST_ID_STATUSOUT_105	105

#define SY_INST_ID_CONSUMER_111 	111
#define SY_INST_ID_PRODUCER_112 	112
#define SY_INST_ID_CONFIG_113   	113

#define SY_INST_ID_CONSUMER_121 	121
#define SY_INST_ID_PRODUCER_122 	122
#define SY_INST_ID_CONFIG_123   	123

#define SY_INST_ID_HEARTBEAT        190

/* ! */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ConData_101       =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ConDataSize_101    =  100;
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ProData_102       =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ProDataSize_102    =  100; /* + 2 words header for input assembly CLX */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ConfigData_103    =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ConfigDataSize_103 =   0;
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_StatusInData_104  =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_StatusInSize_104   =   8;  /* + 2 words header for input assembly CLX */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_StatusOutData_105 =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_StatusOutSize_105  =   0;  /* no user data from CLX */

/* ! */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ConData_111       =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ConDataSize_111    =  32;
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ProData_112       =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ProDataSize_112    =  32;  /* + 2 words header for input assembly CLX */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ConfigData_113    =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ConfigDataSize_113 =  10;

/* ! */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ConData_121       =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ConDataSize_121    =  492;
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ProData_122       =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ProDataSize_122    =  492; /* + 2 words header for input assembly CLX */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_ConfigData_123    =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_ConfigDataSize_123 =   0;

/* ! */
ETHERNETIPEXAMPLECODE_API unsigned char *gAssembly_HeartbeatData     =NULL; ETHERNETIPEXAMPLECODE_API unsigned int gAssembly_HeartbeatSize      =  0; /* shall be 0, as the heartbeat
																																					     format does not support any
																																						 data */

/* ! */
ETHERNETIPEXAMPLECODE_API UINT16 SY_HEARTBEAT_INSTANCE = SY_INST_ID_HEARTBEAT;

/* ! */
ETHERNETIPEXAMPLECODE_API UINT16 RunIdleStat;

/*
** start edits: September,23rd 2005, H.F.
*/

ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_101;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_102;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_103;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_104;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_105;

ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_111;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_112;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_113;

ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_121;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_122;
ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_123;

ETHERNETIPEXAMPLECODE_API BOOL RunIdleStat_Heartbeat;


ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_101;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_102;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_103;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_104;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_105;

ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_111;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_112;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_113;

ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_121;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_122;
ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_123;

ETHERNETIPEXAMPLECODE_API UINT16 AssemblyStat_Heartbeat;

/*
** end edits: September,23rd 2005, H.F.
*/

ETHERNETIPEXAMPLECODE_API UINT16 CON_FLAG;

/* ! */
ETHERNETIPEXAMPLECODE_API unsigned char      gResponseData[1024];
ETHERNETIPEXAMPLECODE_API unsigned int       gResponseDataSize;
ETHERNETIPEXAMPLECODE_API struct sockaddr_in gResponseAddrIn;


/*****************************************************************************

******************************************************************************
******************************************************************************
**Definitions for Vendor Specific Class 300hex (768d) with 3 Instances and 3 Attributes
******************************************************************************
*/
struct sClass_768_Instance_1_Attributes{
	eci_BOOL itsAttribute1;
	eci_INT	itsAttribute2;
	eci_INT  itsAttribute3;
}gClass_768_Instance_1_Attributes={
	0x01,
	0x0202,
	0x0304
};

struct sClass_768_Instance_2_Attributes{
	eci_BOOL itsAttribute1;
	eci_INT	itsAttribute2;
	eci_INT  itsAttribute3;
}gClass_768_Instance_2_Attributes = {
	0x01,
	0x0505,
	0x0606
};

struct sClass_768_Instance_3_Attributes{
	eci_BOOL itsAttribute1;
	eci_INT	itsAttribute2;
	eci_INT  itsAttribute3;
}gClass_768_Instance_3_Attributes = {
	0x01,
	0x0505,
	0x0606
};
/*****************************************************************************

******************************************************************************
******************************************************************************
**Definitions for Vendor Specific Class 301hex (769d) with 1 Instance and 3 Attributes
******************************************************************************
*/
struct sClass_769_Instance_1_Attributes{
	eci_BOOL itsAttribute1;
	eci_INT  itsAttribute2;
	eci_DINT itsAttribute3;
}gClass_769_Instance_1_Attributes={
	0x01,
	0x0707,
	0x08080808l
};
/*****************************************************************************

******************************************************************************

******************************************************************************
**
** this User supplied function is called after receiving a response
**
** Parameter:
**            theAddrIn  : IP-Address of the Sender
**            theData    : Pointer to the Response Data
**            theDataLen : lenght of the Response Data
******************************************************************************
*/
//////////////////////////////////////////////////////////////////////////
/*
	by cxiaobao
*/
 __declspec(dllexport) void (*gpOnResponseCB_Func)(struct sockaddr_in, void* ,int) = NULL;
//////////////////////////////////////////////////////////////////////////
void EC_ResponseCB(  struct sockaddr_in theAddrIn,  void *theData, int theDataSize ){
/*
** Do something with the received Data
*/
	/* ! */
	gResponseAddrIn = theAddrIn;

	/* ! */
	gResponseDataSize = theDataSize > sizeof( gResponseData ) ? sizeof( gResponseData ) : theDataSize;

	/* ! */
	memcpy( gResponseData, theData, gResponseDataSize );

	if(NULL != gpOnResponseCB_Func)
		gpOnResponseCB_Func(gResponseAddrIn, gResponseData,gResponseDataSize);
}

/*****************************************************************************
** ! this User supplied function is called after copy of configuration data for the user defined assembly instance
******************************************************************************
*/
int EC_UserDefinedAssemblyInstanceConfigDataCB( unsigned int theConfigInstanceNo ){
/*
**
*/
	/* ! */
	switch( theConfigInstanceNo ){

		/* ! */
		case SY_INST_ID_CONSUMER_101 : /* user supplied code */  break;
		case SY_INST_ID_PRODUCER_102 : /* user supplied code */ break;
		case SY_INST_ID_CONFIG_103   : /* user supplied code */ break;
		case SY_INST_ID_STATUSIN_104 : /* user supplied code */ break;
		case SY_INST_ID_STATUSOUT_105: /* user supplied code */ break;

		/* ! */
		case SY_INST_ID_CONSUMER_111 : /* user supplied code */ break;
		case SY_INST_ID_PRODUCER_112 : /* user supplied code */ break;
		case SY_INST_ID_CONFIG_113   : /* user supplied code */ break;

		/* ! */
		case SY_INST_ID_CONSUMER_121 : /* user supplied code */ break;
		case SY_INST_ID_PRODUCER_122 : /* user supplied code */ break;
		case SY_INST_ID_CONFIG_123   : /* user supplied code */ break;

		/* ! */
		case SY_INST_ID_HEARTBEAT    : /* user supplied code */ break;
	}

	/* ! */
	return ECI_E_SUCCESS;
}
/*****************************************************************************

******************************************************************************
******************************************************************************
** ! this User supplied function is called after Output data for the assembly object was received
******************************************************************************
*/
void EC_AfterSyncOfReceiveDataCB( int theAssemblyInstanceNo ){
/*
** new data arrived, work with the newest data
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -