PNDriver用户编程接口说明之三
本文源自西门子的技术文档《IO-Base User Programming Interface for PN Driver》第4章的前半部分,描述了PN主站协议栈代码中的接口函数调用方法,将作为PNDriver用户编程接口说明的第三篇笔记。
4 函数和数据类型
在用户代码中#include<pniobase.h>后,就可以调用以下函数实现相应功能,诸如IO控制器管理、读写IO数据、读写记录数据和报警诊断等。
4.1. 控制器管理
在OFFLINE模式下的可以调用控制器管理的相关接口
4.1.1 PNIO_controller_open
描述:该函数实例化一个控制器,在初始化过程中注册一个IO控制器,控制器打开后处于OFFLINE模式下。
函数形式:
PNIO_UINT32 PNIO_CODE_ATTR PNIO_interface_open(
PNIO_UINT32 CpIndex, //in
PNIO_UINT32 ExtPar, //in
PNIO_CBF cbf_rec_read_conf, //in
PNIO_CBF cbf_rec_write_conf, //in
PNIO_CBF cbf_alarm_ind, //in
PNIO_UINT32 * Handle //out
);
| 参数名 | 参数描述 |
|---|---|
| CpIndex | 模块索引 |
| ExtPar | 扩展参数 |
| cbf_rec_read_conf | 响应读记录数据的回调函数,不能为空 |
| cbf_rec_write_conf | 响应写记录数据的回调函数,不能为空 |
| cbf_Alarmcbf_alarm_indInd | 响应报警事件的回调函数,不能为空 |
| Handle | 打开控制器成功将返回控制器句柄,该句柄将作为后续函数的输入 |
返回值:
- PNIO_OK
- PNIO_ERR_CREATE_INSTANCE
- PNIO_ERR_INTERNAL
- PNIO_ERR_NO_RESOURCE
- PNIO_ERR_RPM_CALLBACK
- PNIO_ERR_PRM_CP_ID
- PNIO_ERR_PRM_HND
- PNIO_ERR_PRM_EXT_PAR
4.1.2 PNIO_register_cbf
描述:手动注册控制器相关事件及其回调函数
PNIO_UINT32 PNIO_CODE_ATTR PNIO_register_cbf(
PNIO_UINT32 Handle //in
PNIO_CBE_TYPE CbeType, //in
PNIO_CBF Cbf //in
);
| 参数名 | 参数描述 |
|---|---|
| Handle | 控制器句柄 |
| CbeType | 事件类型 |
| Cbf | 回调函数注意:该参数不可为空 |
返回值:
- PNIO_OK
- PNIO_ERR_MODE_VALUE
- PNIO_ERR_ALLREADY_DONE
- PNIO_ERR_PRM_CALLBACK
- PNIO_ERR_PRM_TYPE
- PNIO_ERR_SEQUENCE
- PNIO_ERR_WRONG_HND
4.1.3 PNIO_controller_close
描述:该函数关闭控制器实例,调用该函数后就不能收到相关的事件
函数形式:
PNIO_UINT32 PNIO_CODE_ATTR PNIO_controller_close(
PNIO_UINT32 Handle //in
);
| 参数名 | 参数描述 |
|---|---|
| Handle | 控制器句柄 |
返回值:
- PNIO_OK
- PNIO_ERR_NO_RESOURCE
- PNIO_ERR_WRONG_HND
4.1.4 PNIO_iosystem_reconfig
4.1.5 SERV_CP_init
描述:该函数初始化通信服务,需要在PN驱动前调用,将开启以下几个任务:
- 跟踪子系统
- PNIO协议栈
- 邮箱
- 线程
- 线程运行
函数形式:
PNIO_UINT32 PNIO_CODE_ATTR SERV_CP_init(
PNIO_DEBUG_SETTINGS_PTR_TYPE DebugSetting
);
| 参数名 | 参数描述 |
|---|---|
| DebugSetting | 是否允许开启跟踪功能 |
返回值:
- PNIO_OK
- PNIO_ERR_SEQUENCE
4.1.6 SERV_CP_undo_init
4.1.7 SERV_CP_get_network_adapters
描述:该函数获取以太网接口数据结构
函数形式:
PNIO_UINT32 PNIO_CODE_ATTR SERV_CP_get_network_adapters(
PNIO_CP_ID_PTR_TYPE CpList, // output
PNIO_UINT8 * NumberOfCps // output
);
| 参数名 | 参数描述 |
|---|---|
| CpList | 以太网接口数据结构体指针 |
| NumberOfCps | 以太网接口数目 |
返回值:
- PNIO_OK
4.1.8 SERV_CP_startup
描述:该函数启动通信服务,将需要以下几个参数:
- PCI本地以太网接口
- 以太网接口数目
- 配置数据
- 存储卡中数据
- 产品描述数据
4.1.9 SERV_CP_shutdown
描述:该函数关闭通信服务
4.1.10 SERV_CP_set_trace_level
跟踪信息打印级别
4.1.11 SERV_CP_set_trace_buffer
跟踪信息缓冲区大小设置
4.2 运行模式相关接口函数
控制器处于运行模式下的相关接口
4.2.1 PNIO_set_mode
描述:该函数手动设置控制器运行模式:OFFLINE、CLEAR、OPERATE
函数形式:
PNIO_UINT32 PNIO_CODE_ATTR PNIO_set_mode(
PNIO_UINT32 Handle, //in
PNIO_MODE_TYPE Mode //in
);
| 参数名 | 参数描述 |
|---|---|
| Handle | 控制器句柄 |
| Mode | 运行模式 |
返回值:
- PNIO_OK
- PNIO_ERR_MODE_VALUE
- PNIO_ERR_NO_RESOURCE
- PNIO_ERR_SET_MODE_NOT_ALLOWED
- PNIO_ERR_WRONG_HND
- PNIO_ERR_SEQUENCE
4.2.2 41 PNIO_CBE_MODE_IND事件
描述:设置控制器运行模式后会触发运行模式修改事件
结构体:
typedef struct {
PNIO_MODE_TYPE Mode;
} ATTR_PACKED PNIO_CBE_PRM_MODE_IND;
| 成员变量 | 描述 |
|---|---|
| Mode | 运行模式 |
4.2.3 PNIO_device_activate
本文着重控制器应用程序编程,设备应用程序接口暂不做介绍,后续将陆续增加。
4.2.4 PNIO_CBE_DEV_ACT_CONF事件
本文着重控制器应用程序编程,设备数据结构暂不做介绍,后续将陆续增加。
4.3 读写IO数据接口函数
这是控制器应用程序读写过程数据的重要函数。
4.3.1 PNIO_data_read
描述:过程数据区是一片共享内存区,协议栈收到设备上送的输入数据后更新该区域,PNIO_data_read函数也从该区域读出输入数据。函数立刻返回。
4.3.2 PNIO_data_write
控制器数据发给设备
| 参数 | read | write |
|---|---|---|
| 函数名 | PNIO_data_read | PNIO_data_write |
| Handle | 控制器句柄 | |
| pAddr | 子模块逻辑地址 | |
| BufLen | 缓冲区长度 | |
| pDataLen | 实际读出的数据长度 | × |
| pBuffer | 数据缓冲区地址 | |
| IOIocState | 输入数据状态 | 输出数据状态 |
| pIOremState | 远端状态,读入数据结果 | 数据写出的结果 |
举个例子:假设有两个输入模块,一个输入模块对应%IB0-%IB1,长度2字节;另一个输入模块对应%IB2-%IB5,长度4字节,那么对应的输入数据为:
| I地址 | 长度 | 数据区 | 返回值 |
|---|---|---|---|
| 2 | 8 | 4 | OK |
| 2 | 2 | 4 | OK |
| 3 | 2 | 4 | OK |
| 5 | 1 | 3 | OK |
| 5 | 8 | 1 | OK |
| 1 | 2 | 1 | OK |
| 1 | 1 | 1 | OK |
返回值:
- PNIO_OK
- PNIO_ERR_PRM_ADD
- PNIO_ERR_PRM_BUF
- PNIO_ERR_PRM_IO_TYPE
- PNIO_ERR_PRM_LEN
- PNIO_ERR_PRM_LOC_STATE
- PNIO_ERR_PRM_RSTATE
- PNIO_ERR_UNKNOWN_ADDR
- PNIO_ERR_VALUE_LEN
- PNIO_ERR_WRONG_HND
- PNIO_WARN_IRT_INCONSISTENT
4.4 读记录数据
4.4.1 PNIO_rec_read_req
调用PNIO_rec_read_req会让控制器发出读纪录数据请求。
PNIO_UINT32 PNIO_CODE_ATTR PNIO_rec_read_req(
PNIO_UINT32 Handle, //in
PNIO_ADDR * pAddr, //in
PNIO_UINT32 RecordIndex, //in
PNIO_REF ReqRef, //in
PNIO_UINT32 Length //in
);
| 参数 | 说明 |
|---|---|
| AppHandle | 控制器句柄 |
| pAddr | IO设备记录数据的地址 |
| RecordIndex | 记录数据索引 |
| ReqRef | |
| Length | 记录数据长度 |
返回值:
- PNIO_OK
- PNIO_ERR_PRM_ADD
- PNIO_ERR_PRM_REC_INDEX
- PNIO_ERR_SEQUENCE
- PNIO_ERR_VALUE_LEN
- PNIO_ERR_WRONG_HND
4.4.2 PNIO_CBE_REC_READ_CONF
在调用PNIO_rec_read_req函数后,会触发PNIO_CBE_REC_READ_CONF事件
4.5 写记录数据
4.5.1 PNIO_rec_write_req
PNIO_UINT32 PNIO_CODE_ATTR PNIO_rec_write_req(
PNIO_UINT32 Handle, //in
PNIO_ADDR * pAddr, //in
PNIO_UINT32 RecordIndex, //in
PNIO_REF ReqRef, //in
PNIO_UINT32 Length, //in
PNIO_UINT8 * pBuffer // in
);
| 参数 | 说明 |
|---|---|
| AppHandle | 控制器句柄 |
| pAddr | IO设备记录数据的地址 |
| RecordIndex | 记录数据索引 |
| ReqRef | |
| Length | 记录数据长度 |
| pBuufer | 记录数据地址 |
返回值:
- PNIO_OK
- PNIO_ERR_PRM_ADD
- PNIO_ERR_PRM_REC_INDEX
- PNIO_ERR_SEQUENCE
- PNIO_ERR_VALUE_LEN
- PNIO_ERR_WRONG_HND
4.5.2 PNIO_CBE_REC_WRITE_CONF
在调用PNIO_rec_write_req函数后,会触发PNIO_CBE_REC_WRITE_CONF事件
4.6 报警接口
协议栈会生成报警,并向应用程序层发出PNIO_CBE_ALARM_IND事件,所支持的所有报警类型参考PNIO_ALARM_TYPE。
4.6.1 PNIO_CBE_ALARM_IND
当IO设备向IO控制器发出报警时会触发该事件
4.7 读配置
4.7.1 PNIO_ctrl_diag_req
该函数将触发一个诊断请求PNIO_CBE_CTRL_DIAG_CONF事件
PNIO_UINT32 PNIO_CODE_ATTR PNIO_ctrl_diag_req(
PNIO_UINT32 Handle, //in
PNIO_CTRL_DIAG * pDiagReq //in
);
| 参数 | 说明 |
|---|---|
| AppHandle | 控制器句柄 |
| pDiagReq | PNIO_CTRL_DIAG结构体指针 |
返回:
- PNIO_OK
- PNIO_ERR_NO_RESOURCE
- PNIO_ERR_WRONG_HND
- PNIO_ERR_PRM_POINTER
- PNIO_ERR_PRM_INVALIDARG
- PNIO_ERR_PRM_ADD
- PNIO_ERR_SEQUENCE
4.7.2 PNIO_CBE_CTRL_DIAG_CONF
在调用PNIO_ctrl_diag_req函数后,会触发PNIO_CBE_CTRL_DIAG_CONF事件
4.8 保留数据的接口
保留数据保存了上次掉电时的一些信息,包括了IPv4、设备名称和MIB对象,将在下一次系统启动时加载。
PN Driver使用一个XML文件保存了保留数据,IO-Base的控制器应用程序咋系统重启时加载该XML文件。
4.8.1 PNIO_CBE_REMA_READ_CONF
如果修改了保留数据文件,将会触发PNIO_CBE_REMA_READ_CONF事件
4.8.1.1 PNIO_interface_set_ip_and_nos
设置通信接口的IP地址和设备名
4.8.1.2 DCP/SNMP请求
4.8.1.3 ResetToFactory
恢复出厂设置
4.9 等时实时(IRT)接口函数
本文着重控制器RT实时等级应用程序编程,IRT接口暂是没有用到,后续将陆续增加。
4.9.1 PNIO_CP_register_cbf
注册事件及其回调函数,当事件发生时将触发执行回调函数。注意:该函数调用只能在控制器的OFFLINE模式下
4.9.2 PNIO_CP_CBE_STARTOP_IND和PNIO_CP_CBE_STARTOP_CYCLEINFO_IND
本文着重控制器RT实时等级应用编程,该事件用于IRT,后续将陆续增加。
4.9.3 PNIO_CP_set_opdone
本文着重控制器RT实时等级应用编程,该函数为IRT接口,后续将陆续增加。
4.9.4 PNIO_CP_CBE_OPFAULT_IND
本文着重控制器RT实时等级应用编程,该事件用于IRT,后续将陆续增加。
posted on 2025-06-09 11:12 MichaelChen-99 阅读(92) 评论(0) 收藏 举报
浙公网安备 33010602011771号