跳到主要内容
未列出页
此页面未列出。搜索引擎不会对其索引,只有拥有直接链接的用户才能访问。

SDK 连接契约

先装好 Darra Profinet Slave。用语言 SDK 读写过程数据。

语言 SDK

无参构造,再启动。不传 IP、端口、站名。站名和网卡在配置工具里设。

连上什么样:

看什么含义
Connected控制器已经在换周期数据
EverConnected曾经连上过。现在没连就是掉线
WaitReason / StatusMessage还没连上时的原因

本机同时只能有一个语言 SDK 在跑过程数据。关掉占用的程序,下一个就能接上。

第二个会话怎么被拒

连接门是全机唯一的(跨进程、跨语言共用一道门)。第二个实时会话一定失败,但各语言的失败形态不同 —— 这不是契约不同,是各语言按自己的惯例报同一件事:

语言第二个实时会话
CPnSServiceConnectRealtime 返回 PNS_ERR_BUSY
C++Start() 返回 false,原因写 LastError()
C#Start()InvalidOperationException,并把 PnSErrorCode.Busy 记成最近错误码
Javastart()PnSServiceException
Pythonstart() 返回 PnSErr.NOT_AVAILABLE(不抛)
Ruststart() 返回 Err(ServiceError::RealtimeGate)last_error_code()PnSErrorCode::Busy

一句话:托管语言(C# / Java)抛异常,C / C++ / Python / Rust 走返回值。每个语言的具体写法见各自的初始化页(同一目录下 c/ cpp/ java/ python/ rust/ 各一份)。

Busy 这个码有两个来源:上一个操作没做完,和这道门被占。见枚举参考

门什么时候放开

占门的是实例,不是进程。只 Stop 不让出:

语言放开实例
CPnSServiceClose()
C++Close()(析构也会调)
C#Dispose() —— Stop() 不释放门
Javaclose()try-with-resources 退出会调)
Pythonclose()with 退出会调)
Rustclose()Drop 会调)

程序整个退出也算放开:门是内核对象,进程结束时自动回收,不会卡死下一个。