跳到主要内容

枚举参考

C / C++ / C# / Java / Python / Rust 六种语言 SDK 共用的枚举权威表。语义以本页为准(各语言的成员拼写与本地取值,各节「各语言成员名」里逐条列出),各语言页面只写自己的类型名与用法。

跨语言口径:语义一致,数值不要求一致。取值以 C# / Python 为准;某语言另有本地编号的,在本节末尾单独说明。

枚举表

枚举用途权威取值
运行态设备与 IO 控制器的连接 / 数据交换状态0..8 + 0x7FFFFFFF
运行错误码服务端运行错误(状态查询透出)0 / 负值 / -10000
调用返回码SDK 调用返回值(启停 / 读写过程数据 / 诊断)0 / 负值
事件等级事件与日志等级0 / 1 / 2
服务区过程数据寻址区域(I 区 / Q 区)0..4

运行态

IO 设备对 IO 控制器的连接与数据交换状态;只有 DataExchange 表示周期数据正在交换。

名称含义
None0未初始化 / 栈未启动
Idle1已启动,等待 IO 控制器(无 AR)
Connecting2控制器已发起连接(STARTUP)
Parameterized3参数化完成(PRMEND),等待应用就绪
ApplicationReady4应用就绪(APPLRDY),参数交换完成
DataExchange5周期数据交换正常(DATA)
Aborted6连接已断开(ABORT)
Resetting7复位中(Reset 请求)
ConfigError8配置错误降级态:控制面可用、数据面未启动,原因见等待原因 / 状态文案
Unknown0x7FFFFFFF未知 / 读不到真实状态。不要当成 None

各语言类型名:

语言类型名
Cpns_device_state_t
C++PnSState
C#PnSState
JavaPnSState
PythonPnSState
RustServiceState

各语言成员名(照自己语言的这一行抄;括号内是该语言自身的值,源码未显式写数值的从略):

语言成员名
CPNS_DEV_STATE_UNKNOWN(0) / PNS_DEV_STATE_STOPPED(1) / PNS_DEV_STATE_IDLE(2) / PNS_DEV_STATE_CONNECTING(3) / PNS_DEV_STATE_DATA(4) / PNS_DEV_STATE_ABORTED(5) / PNS_DEV_STATE_APP_READY(6) / PNS_DEV_STATE_CONFIG_ERROR(7)
C++Disconnected(0) / Connecting(1) / Connected(2) / Running(3) / Idle(4) / ConfigError(5) / Unknown(6)
C#None(0) / Idle(1) / Connecting(2) / Parameterized(3) / ApplicationReady(4) / DataExchange(5) / Aborted(6) / Resetting(7) / ConfigError(8) / Unknown(0x7FFFFFFF)
JavaUNKNOWN(0) / STOPPED(1) / STARTING(2) / RUNNING(3) / STOPPING(4) / ERROR(5) / CONFIG_ERROR(6)
PythonNONE(0) / IDLE(1) / CONNECTING(2) / PARAMETERIZED(3) / APPLICATION_READY(4) / DATA_EXCHANGE(5) / ABORTED(6) / RESETTING(7) / CONFIG_ERROR(8) / UNKNOWN(0x7FFFFFFF)
RustStopped / Initialized / Connecting / Parameterized / Ready / DataExchange / Aborted / ConfigError / Unknown(按服务端状态字符串映射,没有稳定整数值)

注:

  • 上表「名称」一列是 C# 的拼写;Python 是同一套名字的全大写形式,C 带 PNS_DEV_STATE_ 前缀,Java / C++ / Rust 另有一套成员名 —— 都照「各语言成员名」抄用。
  • 跨语言只对应语义,不要按数值判等:Java(0..6)、C / C++(0 起)都是本地编号,且 C / C++ 没有 Parameterized / Resetting;Rust 没有稳定整数值,也不单列 Resetting

运行错误码

服务端运行态错误码(状态查询透出的 errorCode 字段枚举化)。与调用返回码语义不同,不可混用

名称含义
Ok0无错误
ErrInit-1栈初始化失败
ErrCfg-2配置无效
ErrThread-3周期线程创建 / 优先级设置失败
ErrRunning-4状态非法(重复启动 / 停止)
ErrPdi-5过程数据交换失败
ErrDap-6槽 0 插入失败
ErrNull-8设备未启动(空会话 / 未 Start 或已 Stop)
ErrDiag-9诊断参数非法
Unknown-10000未识别值;原值经错误原值属性 / 函数如实透传

-7 未定义,不要占位使用。未识别值一律落 Unknown,原值不丢。

各语言类型名:

语言类型名
Cpns_runtime_error_code_t
C++PnSRuntimeErrorCode
C#PnSRuntimeErrorCode
JavaPnSRuntimeErrorCode
PythonPnSRuntimeErrorCode
RustPnSRuntimeErrorCode

各语言成员名(照自己语言的这一行抄;括号内是该语言自身的值,源码未显式写数值的从略):

语言成员名
CPNS_RUNTIME_ERR_OK(0) / PNS_RUNTIME_ERR_INIT(-1) / PNS_RUNTIME_ERR_CFG(-2) / PNS_RUNTIME_ERR_THREAD(-3) / PNS_RUNTIME_ERR_RUNNING(-4) / PNS_RUNTIME_ERR_PDI(-5) / PNS_RUNTIME_ERR_DAP(-6) / PNS_RUNTIME_ERR_NULL(-8) / PNS_RUNTIME_ERR_DIAG(-9) / PNS_RUNTIME_ERR_UNKNOWN(-10000)
C++Ok(0) / ErrInit(-1) / ErrCfg(-2) / ErrThread(-3) / ErrRunning(-4) / ErrPdi(-5) / ErrDap(-6) / ErrNull(-8) / ErrDiag(-9) / Unknown(-10000)
C#Ok(0) / ErrInit(-1) / ErrCfg(-2) / ErrThread(-3) / ErrRunning(-4) / ErrPdi(-5) / ErrDap(-6) / ErrNull(-8) / ErrDiag(-9) / Unknown(-10000)
JavaOK(0) / ERR_INIT(-1) / ERR_CFG(-2) / ERR_THREAD(-3) / ERR_RUNNING(-4) / ERR_PDI(-5) / ERR_DAP(-6) / ERR_NULL(-8) / ERR_DIAG(-9) / UNKNOWN(-10000)
PythonOK(0) / ERR_INIT(-1) / ERR_CFG(-2) / ERR_THREAD(-3) / ERR_RUNNING(-4) / ERR_PDI(-5) / ERR_DAP(-6) / ERR_NULL(-8) / ERR_DIAG(-9) / UNKNOWN(-10000)
RustOk(0) / ErrInit(-1) / ErrCfg(-2) / ErrThread(-3) / ErrRunning(-4) / ErrPdi(-5) / ErrDap(-6) / ErrNull(-8) / ErrDiag(-9) / Unknown(-10000)

调用返回码

SDK 调用(启停、读写过程数据、诊断)的返回值。负值制0 = 成功,负值 = 失败。

名称含义
Success0成功
InvalidArgument-1地址非法 / 空缓冲 / 参数越界
InvalidHandle-2Start 或已 Stop
NotConnected-3无应用关系 / 未进入数据交换
NativeError-4栈 / 对端错误
LengthMismatch-5长度越界
NotFound-6地址 / 条目不存在
Busy-7忙:上一次操作未完成(如报警还在等 ACK);另一个实时会话正占着唯一连接门时也是这个码
NotSupported-8写入只读输入地址等不支持的操作
NativeDllNotFound-100native 库未加载
PlatformNotSupported-101仅 Windows x64
ServiceUnreachable-102会话不可达 / 超时

各语言类型名:

语言类型名
Cpns_result_t
C++PnSErrorCode
C#PnSErrorCode
JavaPnSErr
PythonPnSErr
RustPnSErrorCode

各语言成员名(照自己语言的这一行抄;括号内是该语言自身的值,源码未显式写数值的从略):

语言成员名
CPNS_OK(0) / PNS_ERR_INVALID_PARAM(-1) / PNS_ERR_NO_STACK(-2) / PNS_ERR_NO_CONNECTION(-3) / PNS_ERR_TIMEOUT(-4) / PNS_ERR_NOT_SUPPORTED(-5) / PNS_ERR_BUSY(-6) / PNS_ERR_NATIVE(-7) / PNS_ERR_DLL_LOAD(-8) / PNS_ERR_ENTRY_MISSING(-9) / PNS_ERR_CONFIG(-10) / PNS_ERR_MEMORY(-11) / PNS_ERR_NOT_FOUND(-12)
C++Success(0) / InvalidArgument(-1) / InvalidHandle(-2) / NotConnected(-3) / NativeError(-4) / LengthMismatch(-5) / NotFound(-6) / Busy(-7) / NotSupported(-8) / NativeDllNotFound(-100) / PlatformNotSupported(-101) / ServiceUnreachable(-102)
C#Success(0) / InvalidArgument(-1) / InvalidHandle(-2) / NotConnected(-3) / NativeError(-4) / LengthMismatch(-5) / NotFound(-6) / Busy(-7) / NotSupported(-8) / NativeDllNotFound(-100) / PlatformNotSupported(-101) / ServiceUnreachable(-102)
JavaOK(0) / INVALID_PARAM(1) / NOT_INITIALIZED(2) / ALREADY_INITIALIZED(3) / TIMEOUT(4) / NO_DEVICE(5) / NOT_AVAILABLE(6) / IO_ERROR(7) / ALARM_ERROR(8) / CONFIG_ERROR(9) / DLL_NOT_FOUND(100) / UNKNOWN(999)
PythonOK(0) / INVALID_PARAM(1) / NOT_INITIALIZED(2) / ALREADY_INITIALIZED(3) / TIMEOUT(4) / NO_DEVICE(5) / NOT_AVAILABLE(6) / IO_ERROR(7) / ALARM_ERROR(8) / CONFIG_ERROR(9) / DLL_NOT_FOUND(100) / UNKNOWN(999)
RustSuccess(0) / InvalidArgument(-1) / InvalidHandle(-2) / NotConnected(-3) / NativeError(-4) / LengthMismatch(-5) / NotFound(-6) / Busy(-7) / NotSupported(-8) / NativeDllNotFound(-100) / PlatformNotSupported(-101) / ServiceUnreachable(-102)

注:

  • Java / Python 现用正值制0 / 1..9 / 100 / 999),与本表负值语义对应但数值不同。
  • C pns_result_t 用自己一套负值(-1..-12,另有超时 / 运行库加载 / 入口缺失 / 配置 / 内存等),取值见 C SDK 页面。
  • Busy(-7)是 native -6 的落点,但它还有第二个来源:唯一连接门被别的实时会话占着(C# / Rust 把这个码记成最近错误码;C++ 头文件同样把 Busy 注释成「实时门已被占用」)。Java / Python 没有本成员,各自用本地码 / 异常 —— 六种语言第二个会话的失败形态见 SDK 连接契约
  • Rust 读写过程数据失败返回 ServiceErrorServiceResult<T>),静态最近错误码走 PnSErrorCode

C 语言码 ≠ 本表枚举码:两边都占负数区间,且 -4..-8 同值不同义(C 语言码 = 超时 / 不支持 / 忙 / 原生层失败 / DLL 加载失败;本表 = 原生失败 / 长度不符 / 不存在 / 忙 / 不受支持),裸转必然走错分支。跨语言换算必须走各语言提供的转换函数,禁止裸类型转换;只加换算表,不重编号。

各语言换算入口:

语言换算入口
C++PnSErrorCodeFromNative(int)constexpr
C#PnSErrorCodeMap.FromNativeCode(int)
RustPnSErrorCode::from_native_code(i32)

事件等级

事件与日志等级;连接 = Info,掉线 / 运行错误 = Warn

名称含义
Info0信息
Warn1警告
Error2错误

各语言类型名:

语言类型名
Cpns_event_level_t
C++PnSEventLevel
C#PnSEventLevel
JavaPnSEventLevel
PythonPnSEventLevel
RustEventLevel(没有稳定整数值,按枚举名用)

服务区

过程数据寻址的区域;I 区只读(控制器 → 设备),Q 区只写(设备 → 控制器)。

名称含义
Unknown0未知
Input1I 区:只读(I0.0 / IB0 / IW2 / ID4
Output2Q 区:只写(Q0.0 / QB0 / QW2 / QD4
Memory3M 区:仅用于报不支持
Db4DB 区:仅用于报不支持

各语言类型名:

语言类型名
Cpns_service_area_t
C++PnSServiceArea
C#PnSAddressArea
JavaPnSServiceArea
PythonPnSServiceArea
RustServiceArea(别名 PnSAddressArea

各语言成员名(照自己语言的这一行抄;括号内是该语言自身的值,源码未显式写数值的从略):

语言成员名
CPNS_SERVICE_AREA_UNKNOWN(0) / PNS_SERVICE_AREA_INPUT(1) / PNS_SERVICE_AREA_OUTPUT(2) / PNS_SERVICE_AREA_MEMORY(3) / PNS_SERVICE_AREA_DB(4)
C++Unknown(0) / Input(1) / Output(2) / Memory(3) / Db(4)
C#Unknown(0) / Input(1) / Output(2) / Memory(3) / Db(4)
JavaUNKNOWN / INPUT / OUTPUT / MEMORY / DB
PythonUNKNOWN(0) / INPUT(1) / OUTPUT(2) / MEMORY(3) / DB(4)
RustUnknown / Input / Output / Memory / Db

Memory / Db 只用于报「不支持」:解析到 M 区 / DB 区即拒绝,不做任何映射,六种语言都有这两个值。