连接与启停
生命周期:Connect → Start → [诊断 / 过程数据] → Stop / Dispose。数据用属性(非 GetXxx),状态返回枚举。
推荐
无参 DarraPnS.Connect() 是应用主入口。站点名、网卡由配置工具 / 服务决定,SDK 不选网卡。
工厂方法
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
Connect() | DarraPnS | 设备 | 静态 | 本机会话。不探测服务,Start 后读写诊断与过程数据 |
Connect(string host, int port = DefaultServicePort) | DarraPnS | 设备 | 静态 | 指定本机服务。host 只应填 127.0.0.1。创建时探测服务可达性 |
Connect(string host, string apiKey, int port = DefaultServicePort) | DarraPnS | 设备 | 静态 | 同上,并携带服务 API 密钥 |
Connect(string host, int port, string configXmlPath, string apiKey = null) | DarraPnS | 设备 | 静态 | 同上,并挂本地运行配置副本(仅供变量联想) |
LoadConfig(string xmlPath) | DarraPnS | 设备 | 静态 | 只解析运行配置 XML / 建变量表。不要对返回实例调用 Start |
DefaultServicePort | int | 设备 | 只读 | 本机服务默认端口(固定,不可配置) |
ServiceHttpTimeoutMs | int | 设备 | 只读 | 探测超时(毫秒) |
ServiceStartStopTimeoutMs | int | 设备 | 只读 | 启停超时(毫秒) |
ServiceIoTimeoutMs | int | 设备 | 只读 | 诊断 / 过程数据查询超时(毫秒) |
var device = DarraPnS.Connect();
Connect("127.0.0.1") 创建时会探测本机服务;不可达抛 PnSServiceException(ServiceUnreachable)。host 不要填局域网地址。
服务端配置了 API 密钥时,用带 apiKey 的重载;未配置传 null 或空串。
启停
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
Start() | PnSErrorCode | 设备 | 写 | 启动本会话;已启动则返回成功 |
Stop() | void | 设备 | 写 | 停止本会话。主站在连时不要拆应用关系。Stop 后本实例不可复用 |
Dispose() | void | 设备 | 写 | 等价 Stop + 释放(幂等) |
IsServiceMode | bool | 设备 | 只读 | 是否服务会话(Connect 工厂) |
IsRunning | bool | 设备 | 只读 | 本会话是否已成功 Start。运行态以 Connected / State 为准 |
ServiceHost | string | 设备 | 只读 | 服务主机 |
ServicePort | int | 设备 | 只读 | 服务端口 |
LastServiceError | string | 设备 | 只读 | 最近一次服务错误(成功调用清空) |
var device = DarraPnS.Connect();
if (device.Start() != PnSErrorCode.Success)
{
Console.WriteLine("启动失败: " + device.LastServiceError);
return;
}
try
{
// 先看诊断,再按需读写过程数据
// 见 诊断 / 过程数据
}
finally
{
device.Stop();
}
Start 失败可能抛 PnSServiceException(带 PnSErrorCode + 原因)。详见 错误码。
IsRunning == true 只说明本实例已 Start,不等于 IO 控制器已连。是否在换周期数据看 Connected。
主站已在连时不要 Stop 拆应用关系。Stop 后必须重新 Connect,不要复用同一实例。
运行态
优先读这些属性判断现场。完整诊断字段见 诊断。
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
Connected | bool | 设备 | 只读 | 是否已与 IO 控制器建立周期数据交换 |
State | PnSState | 设备 | 只读 | 运行态枚举。服务不可达为 Unknown |
ErrorCode | PnSRuntimeErrorCode | 设备 | 只读 | 最近一次运行错误(枚举)。未识别值 Unknown |
ErrorCodeRaw | int | 设备 | 只读 | 运行错误原值(0 = 无错误)。未识别值仍经本属性透传 |
ErrorMessage | string | 设备 | 只读 | 运行错误中文消息 |
StatusMessage | string | 设备 | 只读 | 状态详情。配置失败时带原因,正常态为空 |
EverConnected | bool | 设备 | 只读 | 是否曾与 IO 控制器建立过连接(待机 vs 掉线) |
AlarmCount | int | 设备 | 只读 | 活动报警总数 |
CriticalAlarmCount | int | 设备 | 只读 | Critical 报警数 |
Connected == true 才表示周期数据在换。
EverConnected 用于区分:从未连过(待机)还是连过又断(掉线)。掉线报警被确认后,这个判别信号仍保留。
其它
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
EnumerateInterfaces() | IReadOnlyList<string> | 设备 | 静态 | 枚举本机网卡名。仅诊断用,SDK 不选网卡 |
Version | DarraPnSVersionInfo | 设备 | 静态 | SDK 版本。加载失败返回 null |
NativeDllPath | string | 设备 | 只读 | 已加载的 native 库路径(诊断) |
DarraPnSVersionInfo ver = DarraPnS.Version;
if (ver != null)
{
Console.WriteLine(ver.Major + "." + ver.Minor + "." + ver.Patch);
}
下一步:诊断。