初始化
推荐方式
用 PnSService(),外面套 with,调一次 start(),循环里写 Q、读 I。
先装好 Darra Profinet Slave。站名和网卡在配置工具里设好,构造不用传。不要每个周期 PnSService() / close()。
构造函数
PnSService()
class PnSService:
def __init__(self) -> None
新建从站实例。服务没起来也能 new,不抛;这只是拿到对象,还没启用 IO,主站也还没连上。
示例:
from darra_pns import PnSService, PnSErr
with PnSService() as svc:
rc = svc.start()
if rc != PnSErr.OK:
print(svc.last_service_error)
else:
while running:
# 写 Q、读 I 写在这里
pass
svc.stop()
with 包住整个程序寿命,循环写在 with 里面。start 一次就够。每个周期 close 会把 Q 清掉,下一圈再写等于输出被扔掉。
启停
start()
def start(self) -> PnSErr
启用 IO,返回 PnSErr。成功不等于主站已经在换数据,那要看 connected。已经 start 且还没 stop,再调一次直接返回 OK。
失败写 last_service_error,一般不抛。服务没起来返回对应错误码。另一个实例已经在跑是例外:返回 PnSErr.NOT_AVAILABLE,不抛(契约见 SDK 连接契约)。
示例:
rc = svc.start()
if rc != PnSErr.OK:
print(svc.last_service_error)
stop()
def stop(self) -> None
停用 IO。实例还在,可以再 start。没 start 过或已经 stop,再调一次没事。失败写 last_service_error,不抛。
彻底放开用 close(),不是 stop()。
示例:
svc.stop()
资源释放
close()
def close(self) -> None
放开实例。Q 会被清掉(清的是 Q 的净荷窗:PPM 输出区前 3 字节 IOPS 前缀不动);I 留着,等下一个程序。幂等。with 退出会调本方法。放开之后这个实例不能再用,要重新 PnSService()。
停 IO 用 stop()。stop 之后实例还在,可以再 start。
示例:
svc.close()