📄 readme.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 + -