EPICS pythonSoftIOC教程

安装教程

1、检查你python版本

你需要python3.7或更更高版本。通过向一个终端输入以下检查你python的版本。

root@orangepi5:~# python3 --version
Python 3.10.6

2、创建一个虚拟环境

推荐你安装到一个"虚拟环境",因而这个安装将不影响任何已有的Python软件:

python3 -m venv /path/to/venv
source /path/to/venv/bin/activate

3、安装这个库

你现在可以使用pip安装这个库:

root@orangepi5:~# python3 -m pip install softioc

在linux或MacOS上,你可以安装cothread,其将在第一个教程中被使用:

root@orangepi5:~# python3 -m pip install cothread

现在应该安装好了这个库并且这个命令行接口在你的路径上。你可以通过输入以下检查安装的版本:

root@orangepi5:~# pythonSoftIOC --version
4.3.0

创建IOC

1、介绍

在安装了这个模块后,我们可以创建一个简单的EPICS输入/输出控制器(IOC)。

使用pythonSoftIOC和被称为"Python soft IOC"的softioc创建一个EPICS IOC。以下代码展示了一个带有两个过程变量(PVs)的简单IOC:

# 导入基本的框架组件。
from softioc import softioc, builder
import cothread

# 设置记录前缀
builder.SetDeviceName("PYTHONIOC")

# 创建一些记录。
ai = builder.aIn('AI', initial_value=5)
ao = builder.aOut('AO', initial_value=12.45, always_update=True,
                  on_update=lambda v: ai.set(v))

# 启动这个IOC的范例。
builder.LoadDatabase()
softioc.iocInit()

# 在iocInit后,启动要被运行的所需过程。
def update():
    while True:
        ai.set(ai.get() + 1)
        cothread.Sleep(1)

cothread.Spawn(update)

# 最后,用一个交换shell让IOC保持运行
softioc.interactive_ioc(globals())

在下面详细地描述每个部分:

from softioc import softioc, builder
import cothread

softioc库是pythonsoftIOC的组成部分。两个子模块softioc.softioc和softioc.builder为Python软IOCs提供了基本功能并且是常被使用的模块。

cothread是IOC可以将其用于异步操作的两个可能库之一。

注意:

cothread在Mac M1或者在Windows上无效。你可以按照在IOC中使用asyncio使用asyncio来替代。

ai = builder.aIn('AI', initial_value=5)
ao = builder.aOut('AO', initial_value=12.45, always_update=True, on_update=lambda v: ai.set(v))

通常使用softioc.builder动态地创建PVs。在初始化IOC前,必须完成所有PV创建。我们在ao上位on_update定义了一个lambda函数,因而在我们设置ao时,ai将被设置成相同地值。always_update标记确保on_update函数总是被触发,如果更新值与当前值相同,on_update函数总是被触发不是默认行为。

builder.LoadDatabase()
softioc.iocInit()

初始化IOC就是简单地调用两个函数的事情:LoadDatabase()和iocInit(),必须按顺序调用它们。在调用LoadDatabase()后,不再可能创建PVs。

def update():
    while True:
        ai.set(ai.get() + 1)
        cothread.Sleep(1)

cothread.Spawn(update)

我们定义了一个长期运行的操作,它将每秒增加ai的值。这通过cothread在后台被运行。

softioc.interactive_ioc(globals())

最后,在不再需要这个IOC前,程序必须不退出。interactive_ioc()运行一个在范围内有很多有用EPICS函数的Python解释器shell,并且传递globals()在IOC运行时允许与IOC内部交互。另外调用像cothread.WaitForQuit()或者这其它cothread阻塞操作的东西。

注意:以下部分应该仅用于调试目的,而不用于生产测试,由于使用的函数不一定反映一个真实用户在通过网络查询一个IOC时看到的东西。合适的网络访问示例见从一个IOC读取数据。

在这个解释器中,立即访问在softioc.softioc模块中定义的方法。例如,可以运行dbgf()函数观察AI的增加值。

>>> dbgf("PYTHONIOC:AI")
DBF_DOUBLE:         36
>>> dbgf("PYTHONIOC:AI")
DBF_DOUBLE:         37

而dbpf()方法运行数据被设置并且观察传递给on_update的lambda的功能。我们对AO设置值并且对AI读取值(确切值将根据花费的时间而变化):

>>> dbgf("PYTHONIOC:AI")
DBF_DOUBLE:         15
>>> dbpf("PYTHONIOC:OUT","999")
DBF_DOUBLE:         999
>>> dbgf("PYTHONIOC:AI")
DBF_DOUBLE:         1010

2、创建PVs

详细见softioc.builder的文档,在这里提供一个概要。

PV被内部创建并且动态地使用epicsdbbuilder地功能,在此上下文epicsdbbuilder仅提供用于创建.db文件地机制,但softioc.builder也绑定每个创建地PV到一个特定的python设备,这允许PV运行被挂接到Python支持。

必须在两个阶段进行PV创建:第一个阶段,必须通过调用SetDeviceName()设定设备名。在此之后,能够通过调用任何以下PV创建函数创建PVs:

aIn(), aOut()
boolIn(), boolOut()
longIn(), longOut()
stringIn(), stringOut()
mbbIn(), mbbOut()
WaveformIn(), WaveformOut()

偶尔想要创建不带Python设备支持的软记录,尤其需要任何其它记录类型。使用相应的作为softioc.builder.records的方法提供的记录创建函数做这件事。例如,如果需要一个calc记录,则通过调用softioc.builder.recrods.calc能够创建这个记录。见在IOC中使用软记录的示例。

对于通过这些方法创建的所有记录,get()和set()方法可用于读取和写这个记录的当前值。对于IN记录,调用set()将触发一个记录更新(所有IN记录默认用SCAN="I/O Intr"创建)。

通过以下命令运行以上的python程序:

root@orangepi5:/home/orangepi/python_program# python3 pythonioc.py
Starting iocInit
############################################################################
## EPICS 7.0.7.0
## Rev. 7.0.7.99.0.1
## Rev. Date 7.0.7.99.0.1
############################################################################
iocRun: All initialization complete
2023-06-26T11:25:53.445 Requested provider 'local' not found
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

在同一个局域网中进行通道访问测试:

root@lubancat:/home/cat# caget PYTHONIOC:AI
PYTHONIOC:AI                   63
root@lubancat:/home/cat# caget PYTHONIOC:AI
PYTHONIOC:AI                   65
root@lubancat:/home/cat# caput PYTHONIOC:AO 999
Old : PYTHONIOC:AO                   12.45
New : PYTHONIOC:AO                   999
root@lubancat:/home/cat# caget PYTHONIOC:AI
PYTHONIOC:AI                   1003
root@lubancat:/home/cat# caget PYTHONIOC:AI
PYTHONIOC:AI                   1004
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值