3)目的
该核心函数提供了对包中字段赋值的机制。该函数只能对格式化包的字段赋值,否则将出错。对于格式化包,只需指定字段的值,而字段的类型和大小可从包格式中自动获取。
4)错误
Program Abort:分段错误(由无效包指针或fd_name参数引起)。
Program Abort:包指针为空。
Program Abort:包指针指向已销毁包。
Program Abort:包指针指向未知包。
Recoverable Error:包中无此字段。
5)相关函数
采用该核心函数的衍生函数来给包的information或structure字段赋值。
采用op_pk_fd_set()根据数字索引为字段赋值。
采用op_pk_nfd_get()获取包中某字段的值。
采用op_pk_nfd_strip()删除某字段,并相应减小包的总大小。
8. op_pk_nfd_get (pkptr, fd_name, value_ptr)
此核心函数的作用是获取给定包中某字段值,将字段类型状态改为“unset”,根据名称来确定字段,其参数说明如表2-33所示。
表2-32 op_pk_nfd_get()函数的参数说明
参数 | 类型 | 描 述 |
pkptr | Packet* | 指向给定包的指针 |
fd_name | const char* | 字段名 |
value_ptr | Vartype | 指向存放指定字段地址的指针 |
1)返回值
Compcode——确认操作是否成功的代码。如果发生错误,则返回OPC_COMPCODE_FAILURE。
2)详解
该核心函数参数支持五种字段类型:int、double、packet、information 和structure。对于简单的字段类型,如int和double,直接将它们的值赋给参数,并不受该函数影响。
对于packet和structure字段类型,同样将它们的值赋给参数。然而,当访问这些值时,就将其从包中删除,其状态更改为“unset”,且不可通过函数op_pk_nfd_get()来进行访问,同时包的总大小也随之减小。这种机制更严格了对被封装字段内容的所有权控制。
访问未定义的的information字段是非法的,为了避免产生错误,应将字符串“unspecified”复制到被传递值的指针中。
此外,该核心函数的安全级别MT-safe。
3)目的
该核心函数提供了获取包字段值的机制,常用于将包作为用于进程间通信的数据容器。通常在包到达处理器或队列输入流时调用该函数,且必须对该包进行处理、存储并需要一个应答信息。
4)错误
Program Abort:分段错误(由无效包指针或fd_name参数引起)。
Program Abort:包指针为空。
Program Abort:包指针指向已销毁包。
Program Abort:包指针指向未知包。
5)相关函数
采用op_pk_fd_set()为包字段赋值。
采用op_pk_nfd_get_db1()通过数字索引获取包中double类型字段值。
采用op_pk_nfd_get_int32()通过数字索引获取包中32位整型字段值。
采用op_pk_nfd_get_int64()通过数字索引获取包中64位整型字段值。
采用op_pk_nfd_get_objid()通过数字索引获取包中对象ID字段值。
采用op_pk_nfd_get_pkid()通过数字索引获取包中包ID字段值。
采用op_pk_nfd_get_pkt()通过数字索引获取包中包字段值。
采用op_pk_nfd_get_ptr()通过数字索引获取包中指针字段值。
采用op_pk_fd_get()通过数字索引获取格式化包或非格式化包中某字段值。
采用op_pk_nfd_type()确定包字段的类型。
采用op_pk_nfd_size()确定包字段的大小。
采用op_pk_nfd_is_set()确定包字段是否已设置。
9. op_pk_creation_time_get (pkptr)
此核心函数的作用是获取包创建时的仿真时间,其参数说明如表2-34所示。
表2-34 op_pk_creation_time_get()函数的参数说明
参数 | 类型 | 描 述 |
pkptr | Packet* | 指向相关包的指针 |
1)返回值
double——给定包创建时的仿真时间。
2)详解
新包通常通过以下三种方法进入循环:
由函数op_pk_create()或op_pk_create_fmt()显式创建;
通过函数op_pk_copy()复制已存在的包;
通过核心函数自动复制在总线或无线链路上向多个目的地传输的包。
通过上述前两种方法创建的包将被赋予新的创建模块ID和创建时间。若外部进程的上下文调用第二种方法,此时的创建模块ID将设为常量OPC_OBJID_INVALID。通过第三种方法复制的包将被赋予最初传送的包的创建信息。
对包的许多操作大多都不会影响包的创建信息。正如前面提到的,在总线和无线链路上传输将创建多个包的复本,但但复本都将保留初始的创建信息。通过函数op_pk_copy()生成的复本包将产生新的创建信息。
此外,该核心函数可用于格式化包和非格式化包,其安全级别MT-safe。
3)目的
该核心函数提供了确定包创建时的仿真时间的机制,主要用于计算端到端传输和处理延时。与函数op_pk_creation_mod_get()结合,op_pk_create_time_get()函数可用于比较不同源位置的端到端延时。
4)错误
Program Abort:分段错误(由无效包指针或fd_name参数引起)。
Program Abort:包指针为空。
Program Abort:包指针指向已销毁包。
Program Abort:包指针指向未知包。
5)相关函数
采用op_pk_creation_mod_get()获取包创建处的模块ID。
采用op_pk_stamp()标记包的当前模块和仿真时间。
采用op_pk_stamp_mod_get()和op_pk_stamp_time_get()通过包戳获取模块ID和仿真时间。
10. op_pk_total_size_get (pkptr)
此核心函数的作用是获取包的总大小,其参数说明如表2-35所示。
表2-35 op_pk_total_size_get()函数的参数说明
参数 | 类型 | 描 述 |
pkptr | Packet* | 指向相关包的指针 |
1)返回值
OpT_Packet_Size——给定包的总大小(bit位数)。
2)详解
包的总大小为数据和各个附加字段大小的总和。修改数据大小、设置/复位包字段、修改包字段大小都可影响包总的大小。
此外,该核心函数可用于格式化包和非格式化包,其安全级别MT-safe。
3)目的
该核心函数提供了一种确定包总的大小的机制,主要用于统计量收集、资源分配、根据大小对包进行分类。
4)错误
Program Abort:分段错误(由无效包指针或fd_name参数引起)。
Program Abort:包指针为空。
Program Abort:包指针指向已销毁包。
Program Abort:包指针指向未知包。
5)相关函数
采用op_pk_total_size_set()分配包的总大小。
采用op_pk_bulk_size_set()设置包的bulk数据大小。
采用op_pk_bulk_size_get()获取包的bulk数据大小。
采用op_pk_fd_size()修改非格式包中的字段大小。
采用op_pk_fd_strip()或op_pk_nfd_strip()删除某字段从而减小包总的大小。