跳到主要内容

错误码

两类码不要混用。

  • 调用返回码 PnSErrorCodeStart、地址化读写、PDO.Read / Write 的返回值。IO 路径不抛异常。
  • 运行态码 PnSRuntimeErrorCode:属性 ErrorCode。表示设备当前运行错误,不是某一次调用的结果。

Connect("127.0.0.1")Start 失败时可能抛 PnSServiceException(带 PnSErrorCode + 原因 + 服务端原值)。

PnSErrorCode

名称含义
0Success成功
-1InvalidArgument地址非法 / 空缓冲 / 参数越界
-2InvalidHandleStart 或已 Stop
-3NotConnected无应用关系 / 未进入数据交换
-4NativeError栈 / 服务端错误
-5LengthMismatch长度越界
-6NotFound地址 / 报警 ID / 条目不存在
-7Busy上一次操作未完成(例如过程报警仍在途)
-8NotSupported写 Q 等不支持的操作
-100NativeDllNotFoundnative 库未加载
-101PlatformNotSupported仅 Windows x64
-102ServiceUnreachable服务不可达 / 超时 / 非本产品服务

PnSRuntimeErrorCode

属性 ErrorCode。未识别值返回 Unknown,原值仍经 ErrorCodeRaw 透传。中文消息用 ErrorMessagePnSErrorCodeInfo.GetRuntimeMessage

名称含义
0Ok无错误
-1ErrInit栈初始化失败
-2ErrCfg配置无效
-3ErrThread周期线程创建或优先级设置失败
-4ErrRunning状态非法(重复启动 / 停止)
-5ErrPdi过程数据交换失败
-6ErrDap槽 0 插入失败
-8ErrNull设备未启动
-9ErrDiag诊断参数非法
-10000Unknown未识别值。看 ErrorCodeRaw
PnSRuntimeErrorCode code = device.ErrorCode;
string text = device.ErrorMessage;
int raw = device.ErrorCodeRaw;

string mapped = PnSErrorCodeInfo.GetRuntimeMessage(raw);
PnSRuntimeErrorCode parsed = PnSErrorCodeInfo.FromRaw(raw);

PnSServiceException

成员类型说明
ErrorCodePnSErrorCodeSDK 调用错误码
ServerErrorCodeint服务端原值(0 = 未携带)
ServerErrorCodeEnumPnSRuntimeErrorCode上项的枚举形态
Messagestring原因
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

名称说明
0None未初始化 / 未启动
1Idle已启动,等待 IO 控制器
2Connecting控制器已发起连接
3Parameterized参数化完成,等待应用就绪
4ApplicationReady应用就绪
5DataExchange周期数据交换正常
6Aborted连接已断开
7Resetting复位中
8ConfigError配置错误。进程仍在,数据面未起。原因见 StatusMessage
0x7FFFFFFFUnknown未知 / 服务不可达

Connected == true 对应已进入周期数据交换。State == Unknown 表示当前读不到真实状态,不要当成 None

处理建议

现象先看再做什么
Start 失败LastServiceError / PnSServiceException确认服务已启动、本机回环可达
InvalidHandle是否已 Start、是否已 Stop重新 Connect + Start
NotSupported是否在写 Q只写 I,Q 只读
ServiceUnreachable服务是否在跑不要把失败粉饰成成功
ConfigErrorStatusMessage按文案查网卡 / 运行配置后重载
ErrorCode != OkErrorMessage + ErrorCodeRaw未识别码保留原值上报
控制器看不见故障通道诊断DiagStdAdd 上报,不要只打本地日志