错误码
两类码不要混用。
- 调用返回码
PnSErrorCode:Start、地址化读写、PDO.Read/Write的返回值。IO 路径不抛异常。 - 运行态码
PnSRuntimeErrorCode:属性ErrorCode。表示设备当前运行错误,不是某一次调用的结果。
Connect("127.0.0.1") 或 Start 失败时可能抛 PnSServiceException(带 PnSErrorCode + 原因 + 服务端原值)。
PnSErrorCode
| 值 | 名称 | 含义 |
|---|---|---|
| 0 | Success | 成功 |
| -1 | InvalidArgument | 地址非法 / 空缓冲 / 参数越界 |
| -2 | InvalidHandle | 未 Start 或已 Stop |
| -3 | NotConnected | 无应用关系 / 未进入数据交换 |
| -4 | NativeError | 栈 / 服务端错误 |
| -5 | LengthMismatch | 长度越界 |
| -6 | NotFound | 地址 / 报警 ID / 条目不存在 |
| -7 | Busy | 上一次操作未完成(例如过程报警仍在途) |
| -8 | NotSupported | 写 Q 等不支持的操作 |
| -100 | NativeDllNotFound | native 库未加载 |
| -101 | PlatformNotSupported | 仅 Windows x64 |
| -102 | ServiceUnreachable | 服务不可达 / 超时 / 非本产品服务 |
PnSRuntimeErrorCode
属性 ErrorCode。未识别值返回 Unknown,原值仍经 ErrorCodeRaw 透传。中文消息用 ErrorMessage 或 PnSErrorCodeInfo.GetRuntimeMessage。
| 值 | 名称 | 含义 |
|---|---|---|
| 0 | Ok | 无错误 |
| -1 | ErrInit | 栈初始化失败 |
| -2 | ErrCfg | 配置无效 |
| -3 | ErrThread | 周期线程创建或优先级设置失败 |
| -4 | ErrRunning | 状态非法(重复启动 / 停止) |
| -5 | ErrPdi | 过程数据交换失败 |
| -6 | ErrDap | 槽 0 插入失败 |
| -8 | ErrNull | 设备未启动 |
| -9 | ErrDiag | 诊断参数非法 |
| -10000 | Unknown | 未识别值。看 ErrorCodeRaw |
PnSRuntimeErrorCode code = device.ErrorCode;
string text = device.ErrorMessage;
int raw = device.ErrorCodeRaw;
string mapped = PnSErrorCodeInfo.GetRuntimeMessage(raw);
PnSRuntimeErrorCode parsed = PnSErrorCodeInfo.FromRaw(raw);
PnSServiceException
| 成员 | 类型 | 说明 |
|---|---|---|
ErrorCode | PnSErrorCode | SDK 调用错误码 |
ServerErrorCode | int | 服务端原值(0 = 未携带) |
ServerErrorCodeEnum | PnSRuntimeErrorCode | 上项的枚举形态 |
Message | string | 原因 |
try
{
var device = DarraPnS.Connect("127.0.0.1");
device.Start();
}
catch (PnSServiceException ex)
{
Console.WriteLine(ex.ErrorCode + ": " + ex.Message);
if (ex.ServerErrorCode != 0)
Console.WriteLine("服务端: " + ex.ServerErrorCodeEnum + " (" + ex.ServerErrorCode + ")");
}
PnSState
| 值 | 名称 | 说明 |
|---|---|---|
| 0 | None | 未初始化 / 未启动 |
| 1 | Idle | 已启动,等待 IO 控制器 |
| 2 | Connecting | 控制器已发起连接 |
| 3 | Parameterized | 参数化完成,等待应用就绪 |
| 4 | ApplicationReady | 应用就绪 |
| 5 | DataExchange | 周期数据交换正常 |
| 6 | Aborted | 连接已断开 |
| 7 | Resetting | 复位中 |
| 8 | ConfigError | 配置错误。进程仍在,数据面未起。原因见 StatusMessage |
0x7FFFFFFF | Unknown | 未知 / 服务不可达 |
Connected == true 对应已进入周期数据交换。State == Unknown 表示当前读不到真实状态,不要当成 None。
处理建议
| 现象 | 先看 | 再做什么 |
|---|---|---|
Start 失败 | LastServiceError / PnSServiceException | 确认服务已启动、本机回环可达 |
InvalidHandle | 是否已 Start、是否已 Stop | 重新 Connect + Start |
NotSupported | 是否在写 Q | 只写 I,Q 只读 |
ServiceUnreachable | 服务是否在跑 | 不要把失败粉饰成成功 |
ConfigError | StatusMessage | 按文案查网卡 / 运行配置后重载 |
ErrorCode != Ok | ErrorMessage + ErrorCodeRaw | 未识别码保留原值上报 |
| 控制器看不见故障 | 通道诊断 | DiagStdAdd 上报,不要只打本地日志 |