Skip to content

Commit

Permalink
Merge pull request #546 from necst-telescope/#545-memb
Browse files Browse the repository at this point in the history
#545 add membrane
  • Loading branch information
r-yamada1998 committed Jun 19, 2024
2 parents 9342e37 + e58b3e2 commit 88af2dc
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 0 deletions.
4 changes: 4 additions & 0 deletions neclib/defaults/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ port = "/dev/ttyUSB0"
_ = "ND287"
port = "/dev/ttyUSB1"

[membrane]
_ = "CPZ2724"
rsw_id = 2

[ccd_controller]
_ = "M100"
host = "192.168.100.47"
Expand Down
1 change: 1 addition & 0 deletions neclib/devices/membrane/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .cpz2724 import CPZ2724 # noqa: F401
71 changes: 71 additions & 0 deletions neclib/devices/membrane/cpz2724.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
__all__ = ["CPZ2724"]

import time

from ... import get_logger, utils
from .membrane_base import Membrane


class CPZ2724(Membrane):
Manufacturer = "Interface"
Model = "CPZ2724"

Identifier = "rsw_id"

def __init__(self) -> None:
self.logger = get_logger(self.__class__.__name__)
self.rsw_id = self.Config.rsw_id

self.io = self._initialize_io()

@utils.skip_on_simulator
def _initialize_io(self):
import pyinterface

self.io = pyinterface.open(2724, self.rsw_id)
if self.io is None:
raise RuntimeError("Cannot communicate with the CPZ board.")

self.io.initialize()

return self.io

def get_memb_status(self):
ret = self.dio.input_point(8, 3)
if ret[0] == 0:
self.memb_act = "OFF"
else:
self.memb_act = "DRIVE"

if ret[1] == 0:
if ret[2] == 0:
self.memb_pos = "MOVE"
else:
self.memb_pos = "CLOSE"
else:
self.memb_pos = "OPEN"
return [self.memb_act, self.memb_pos]

def memb_open(self) -> None:
ret = self.get_memb_status()
if ret[1] != "OPEN":
buff = [1, 1]
self.io.output_point(buff, 7)
while ret[1] != "OPEN":
time.sleep(5)
ret = self.get_memb_status()
buff = [0, 0]
self.io.output_point(buff, 7)
return

def memb_close(self) -> None:
ret = self.get_memb_status()
if ret[1] != "CLOSE":
buff = [0, 1]
self.io.output_point(buff, 7)
while ret[1] != "CLOSE":
time.sleep(5)
ret = self.get_memb_status()
buff = [0, 0]
self.io.output_point(buff, 7)
return
26 changes: 26 additions & 0 deletions neclib/devices/membrane/membrane_base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from abc import abstractmethod

from ..device_base import DeviceBase


class Membrane(DeviceBase):

Manufacturer: str = ""
Model: str

@abstractmethod
def memb_open(self) -> None:
"""Open membrane."""
...

@abstractmethod
def memb_close(self) -> None:
"""Close membrane."""
...

@abstractmethod
def get_memb_status(self):
# Type hints are not written because the way to write them
# differs depending on the version.
"""Get status of membrane."""
...

0 comments on commit 88af2dc

Please sign in to comment.