CryoCon库
项目描述
CryoCon库
该库用于控制CryoCon温度控制器的基本功能。它由一个核心库、一个可选的模拟器和可选的tango设备服务器组成。
已与M32和M24C型号进行测试,但应适用于其他型号。
它可以与ETH或串行线路连接一起使用(以下将介绍设置串行线路连接的推荐方式)
安装
在您喜欢的Python环境中键入
$ pip install cryocon
库
cryocon库的核心是CryoCon对象。要创建一个CryoCon对象,您需要传递一个通信对象。
通信对象可以是任何支持简单API的对象,该API由两种方法组成(支持同步或异步版本)
- 
write_readline(buff: bytes) -> bytes或async write_readline(buff: bytes) -> bytes
- 
write(buff: bytes) -> None或async write(buff: bytes) -> None
支持此API的库是sockio(cryocon已预安装,因此您无需担心安装它)。
本库包含TCP对象的异步和同步版本。它还支持一系列功能,如重新连接和超时处理。
以下是连接到cryocon控制器的步骤
import asyncio
from sockio.aio import TCP
from cryocon import CryoCon
async def main():
    tcp = TCP("192.168.1.123", 5000)  # use host name or IP
    cryo = CryoCon(tcp)
    idn = await cryo.idn()
    name = await cryo.name()
    print("Connected to {} ({})".format(idn, name))
    # channel access:
    temp_A = await cryo['A'].temperature()
    unit = await cryo['A'].unit()
    print("Channel A temperature: {}{}".format(temp_A, unit))
    # loop access:
    source_1 = await cryo[1].source()
    print("Loop 1 source: {}".format(source_1))
    # activate control
    await cryo.control(True)
    # hardware only accepts queries every 100ms. Yo can, however,
    # group queries in single request:
    async with cryo as group:
        cryo.idn()
        cryo.control()
        cryo['A'].temperature()
    idn, ctrl, temp_A = group.replies
asyncio.run(main())
串行线
为了访问基于串行的CryoCon设备,强烈建议您使用ser2net或socat创建一个串行到TCP桥接器
假设您的设备连接到/dev/ttyS0,波特率设置为19200,以下是如何使用socat将您的设备暴露在机器端口5000上
socat -v TCP-LISTEN:5000,reuseaddr,fork file:/dev/ttyS0,rawer,b19200,cs8,eol=10,icanon=1
可能值得考虑使用supervisor或circus将socat或ser2net作为服务启动。
模拟器
提供了一个CryoCon模拟器。
在使用之前,请确保已使用以下命令安装了所有内容
$ pip install cryocon[simulator]
使用sinstruments引擎。
要启动模拟器,您需要编写一个YAML配置文件,在其中定义您要模拟的设备数量及其属性。
以下示例导出2个硬件设备。第一个是使用默认值的最小配置,第二个明确定义了一些初始值
# config.yml
devices:
- class: CryoCon
  name: cryo1
  transports:
  - type: tcp
    url: :5000
- class: CryoCon
  name: cryo2
  transports:
    - type: tcp
      url: :5001
  channels:
    A:
      unit: K
    B:
      unit: K
  loops:
    1:
      source: A
      type: MAN
  distc: 4
  lockout: OFF
  remled: ON
  control: OFF
要启动模拟器,请键入
$ sinstruments-server -c ./config.yml --log-level=DEBUG
2020-05-14 16:02:35,004 INFO  simulator: Bootstraping server
2020-05-14 16:02:35,004 INFO  simulator: no backdoor declared
2020-05-14 16:02:35,004 INFO  simulator: Creating device CryoCon ('CryoCon')
2020-05-14 16:02:35,080 INFO  simulator.CryoCon[('', 5000)]: listening on ('', 5000) (newline='\n') (baudrate=None)
2020-05-14 16:02:35,080 INFO  simulator: Creating device CryoCon ('CryoCon')
2020-05-14 16:02:35,081 INFO  simulator.CryoCon[('', 5001)]: listening on ('', 5001) (newline='\n') (baudrate=None)
(要查看完整选项列表,请键入sinstruments-server --help)
您可以像访问真实硬件一样访问它
$ nc localhost 5000
*IDN?
Cryo-con,24C,204683,1.01A
或使用库
$ python
>>> from sockio.sio import TCP   # use synchronous socket in the CLI!
>>> from cryocon import CryoCon
>>> cryo = CryoCon(TCP('localhost', 5000))
>>> print(cryo.idn())
Cryo-con,24C,204683,1.01A
或者,从Python 3.8开始,可以启动一个原生的异步REPL
$ python -m asyncio
>>> from sockio.aio import TCP
>>> from cryocon import CryoCon
>>> cryo = CryoCon(TCP('localhost', 5000))
>>> print(await cryo.idn())
Tango服务器
还提供了一个tango设备服务器。
请确保使用以下命令安装了所有内容
$ pip install cryocon[tango-ds]
在tango数据库中注册cryocon tango服务器
$ tangoctl server add -s CryoCon/test -d CryoCon test/cryocon/1
$ tangoctl device property write -d test/cryocon/1 -p url -v "tcp://192.168.123:5000"
(以上示例使用tangoctl。在使用之前,您需要使用pip install tangoctl安装它。您可以使用任何其他tango工具,如fandango或Jive)
使用以下命令启动服务器
$ CryoCon test
TODO
- 将on_connection_made回调添加到初始化控制器,其中- unit=K
- 缓存IDN、fw版本、hw版本
- 是否应该缓存system:name?和input:name?在理论上,可以直接通过硬件前面板进行修改
 
- unit=
项目详情
cryocon-3.1.12.tar.gz的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | c9db47043e0be216d75bed4bde7dc1be00557fd2addfbfca820c7932dfa8a24c | |
| MD5 | 24aa445ca5bc1ba4a4c471a715523440 | |
| BLAKE2b-256 | 23bf572e4c47678622c235b6eaf80c3a191e9732b75a08c2d1b258234583ca07 |