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

📄 readme.txt

📁 AVR单片机基础上的以太网协议编程
💻 TXT
字号:
struct EM_FindTagQuery //无证实服务,类似于RARP请求  
//EPA设备查询请求 ,一个离线组态的设备刚加入到网络时,
//应通过该服务来查询自己的PD Tag是否冲突,此时,若收不到应答,说明不冲突 
{uchar Query_Type; 
 //请求查询类型,0 根据PD Tag查询,1 根据FB Tag查询,2 根据ElementID查询 
 uchar Reserved[3];
 uchar PD_Tag[32]; //物理设备位号,不足用0x20(空格)填充
 uchar FB_Tag[32]; //功能块实例位号,不足用0x20(空格)填充 
 uint ElementID; //功能块实例中的参数对象索引,与FB Tag一起使用
};
 
struct EM_FindTagReply //无证实服务,类似于RARP应答 
//EPA设备查询应答,返回被查询对象的IP地址,以及该对象所在设备的Device ID、PD Tag 
{uchar Query_Type;
 uchar Duplicate_Tag_Detected; //TRUE,说明PD Tag冲突
 uchar Reserved[2];
 uchar Queried_Object_IP_Address[4]; //本地IP地址
 uchar Queried_Object_DeviceID[32]; // 本地设备标识,不足用空格填充
 uchar Queried_Object_PD_Tag[32]; // 本地设备物理位号,不足用空格填充
};

struct EM_GetDeviceAttribute  //证实服务,类似于ARP 
//根据IP获得指定设备的属性,若指定设备在网络上运行正常,
//设备向组态应用程序发回一个正响应Result(+);否则,
//由EPA系统管理实体向用户应用程序发送一个负响应Result(-) 
{uchar Destination_IP_Address[4];
};

struct EM_GetDeviceAttribute_Result_Positive //设备信息读取服务正响应
{uchar DeviceID[32];
 uchar PD_Tag[32];
 uchar Status; //EAP设备所处的状态,0 无地址,1 未组态,2 已组态
 uchar Device_Type; //设备类型,描述设备的功能,由设备制造商设定
 uint Annunciation_Interval; //设备发送声明消息的时间间隔
 uint Annunciation_Version_Number; //所发送声明消息的版本号
 uchar Duplicate_Tag_Detected; //TRUE,说明PD Tag冲突
 uchar Device_Redundancy_Number; 
 //设备冗余号,如为活动设备,该值为0,并且无以下四个参数;否则,为相应设备冗余号
 uint LAN_Redundancy_Port;  //设备冗余消息处理端口号
 uchar Device_Redundancy_State;
 //设备冗余状态,0活动状态,1备份状态
 uchar Max_Redundancy_Number; //设备最大冗余个数
 uchar Reserved[2];
 uchar Active_IP_Address[4]; //当前可操作的IP地址(活动设备的IP)
};

struct EM_GetDeviceAttribute_Result_Negative //设备信息读取服务负响应
{uchar Destination_IP_Address[4];
 ErrorType Error_Type; //错误类型 
};

struct Domain //域对象 
{uint ObjectID; //EPA管理信息库中域对象的索引
 uchar Domain_Name[32]; //域对象的名称,读/写
 uint Max_Octets; //域中的最大字节数
 uint Password; //为存取权规定口令,读/写
 uchar Access_Groups; //位7到位0分别对应着存取组1到存取组8,
 //如果相应的位被设置,则该域对象是该存取组的成员,读/写 
 uchar Access_Rights; //存取对象的权,如果相应位被设置,则对应权被许可
 //7 读已注册口令的权,6 写已注册口令的权,5 使用已注册口令的权,
 //3 读存取组的权,2 写存取组的权,1 使用存取组的权,读/写 
 ulong Local_Address; 
 //指向具体域对象的指针,可用于内部寻址域对象。如果不用的话,其值设为:0xffffffff
 uchar Domain_State; //域对象的状态
 //0 存在,1 下载,2 上传,3 准备好,4 使用中
 uchar Last_State; //域对象上/下载之前的状态,同上
 uint Used_Application_Counter; //正在使用这个域的程序的个数
 //如果大于0,说明这个域正在被使用,它不能被下载服务所覆盖
};

struct DomainUpload  //证实服务,域上载服务报文 
{uint Source_AppID;
 uint Destination_AppID;
 uint Destination_ObjectID;
 uint Data_Number; //表示本次域上载过程中,域上载服务被调用的次数
 //第一次请求上载时,该值为0,以后每次收到正确响应后,均递增1
};

struct DomainUpload_Result_Positive  //域上载服务正响应报文 
{uint Destination_AppID;  
 uint Data_Length;  //上载的字节长度,0~512
 uchar MoreFollows; //TRUE,表示还有数据还上载 
 uchar Reserved[3];
 uchar Load_Data[512]; //域上载数据
};

struct DomainUpload_Result_Negative  //域上载服务负响应报文 
{uint Destination_AppID;
 uchar Reserved[2];
 ErrorType Error_Type;
};

struct Event //事件对象 
{uint ObjectID;  //事件对象的标识号 
 uint Length;  //事件数据的字节长度 
 uint Password;
 uchar Access_Groups;
 uchar Access_Rights;
 ulong Local_Address;
 uchar Enabled; 
 //TRUE,表示事件对象未被锁定,可以发送事件,否则,被锁定,事件不能发送 
};

struct EventNotification //事件通知服务,可选 
{uint Destination_AppID;
 uint Source_AppID;
 uint Source_ObjectID; //与事件相关联的对象的标识符 
 uint Event_Number;  //事件的序号   
 uchar Event_Data[512];
};

struct AcknowledgeEventNotification //证实服务,事件通知确认服务,可选
{uint Destination_AppID;                                             
 uint Destination_ObjectID;
 uint Event_Number;
};

struct AcknowledgeEventNotification_Result_Positive //事件通知确认服务正响应
{uint Destination_AppID;
};

struct AcknowledgeEventNotification_Result_Negative //事件通知确认服务负响应
{uint Destination_AppID;
 uchar Reserved[2];
 ErrorType Error_Type;
}; 

struct AlterEventConditonMonitor //证实服务,改变事件条件监视服务,可选 
{uint Destination_AppID;
 uint Destination_ObjectID;
 uchar Enabled; //TURE,对事件对象解锁 
 uchar Reserved[3];
};

struct AlterEventConditonMonitor_Result_Positive //改变事件条件监视服务正响应
{uint Destination_AppID;
};

struct AlterEventConditonMonitor_Result_Negative //改变事件条件监视服务负响应
{uint Destination_AppID;
 uchar Reserved[2];
 ErrorType Error_Type;
};

struct Simple_Variable //简单变量对象
{uint ObjectID;
 uchar Data_Type; //变量对象的数据类型 
 uint Length; //变量对象的字节长度 
 ulong Local_Address;
 uint Password;
 uchar Access_Groups;
 uchar Access_Rights;
};

struct Read   //证实服务,变量读服务 
{uint Destination_AppID;
 uint Destination_ObjectID;
 //被读取对象标识符,如DestinationObjectID为0,则表示读取该功能块实例的所有参数对象
 uint SubIndex;
 //被读取对象的子索引,如SubIndex为0,则表示读取该对象的所有子元素  
};

struct Read_Result_Positive  //变量读服务正响应
{uint Destination_AppID;
 uchar Reserved[2];
 uchar Data[512];
};

struct Read_Result_Negative  //变量读服务负响应
{uint Destination_AppID;
 uchar Reserved[2];
 ErrorType Error_Type;
};
 
struct Write  //证实服务,变量写服务
{uint Destination_AppID;
 uint Destination_ObjectID;
 //被写对象的标识符,如DestinationObject Id为0,则表示读取该功能块的所有参数对象
 uint SubIndex;
 //被写对象的子索引,如SubIndex为0,则表示写该对象的所有子元素
 uchar Reserved[2];
 uchar Data[512]; //写请求数据 
};

struct Write_Result_Positive //变量写服务正响应 
{uint Destination_AppID;
};

struct Write_Result_Negative //变量写服务负响应 
{uint Destination_AppID;
 uchar Reserved[2];
 ErrorType Error_Type;
};

ErrorType *Error; //全局变量,指向错误类型结构体,方便错误的处理

void Error_Man_Main()
{switch Error->Error_Class
  {case 0:  switch Error->Error_Code
               {case 0:   Resource_Memory_Unavailable();  break;
                case 1:   Resource_Other();  break;
                default:  break;
               }   break;
   case 1:  switch Error->Error_Code
               {case 0:   Service_Object_State_Conflict();  break;
                case 1:   Service_Object_Constraint_Conflict();  break;
                case 2:   Service_Parameter_Inconsistent();  break;
                case 3:   Service_Illegal_Parameter();  break;
                case 4:   Service_Size_Error();  break;
                case 5:   Service_Other();  break;
                default:  break;
               }   break;
   case 2:  switch Error->Error_Code
               {case 0:   Access_Object_Access_Unsupported();  break;
                case 1:   Access_Object_Non_Existent();  break;
                case 2:   Access_Object_Access_Denied();  break;
                case 3:   Access_Hardware_Fault();  break;
                case 4:   Access_Type_Conflict();  break;
                case 5:   Access_Object_Attribute_Inconsistent();  break;
                case 6:   Access_Access_to_Element_Unsupported();  break;
                case 7:   Access_Other();  break;
                default:  break;
               }  break;
   case 3:  switch Error->Error_Code
               {case 0:   Timer_Timer_Expire();  break;
                case 1:   Timer_Timer_Error();  break;
                case 2:   Timer_Other();  break;
                default:  break;
               }  break;
   case 4:  switch Error->Error_Code
               {case 0:   Other_Other(); break;
                default:  break;
               }  break;
   default:  break;
}

⌨️ 快捷键说明

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