📄 ecsample.c
字号:
/****************************************************************************
*****************************************************************************
**
** 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 + -