Metadata-Version: 2.1
Name: pysmlib
Version: 3.2.0
Summary: Python Finite State Machines for EPICS
Home-page: https://darcato.github.io/pysmlib/docs/html/
Author: Damiano Bortolato - Davide Marcato
Author-email: davide.marcato@lnl.infn.it
License: GPLv3
Download-URL: https://github.com/darcato/pysmlib
Description: # pysmlib
        
        ## Python Finite State Machines for EPICS
        
        _Developers_: Damiano Bortolato - Davide Marcato @ Laboratori Nazionali di Legnaro - INFN
        
        Main Repository: https://github.com/darcato/pysmlib
        
        Full documentation: https://darcato.github.io/pysmlib/docs/html/
        
        ### Main features
        
        - Easy to use and fast development of complex event based fsm - just code the states!
        - Full EPICS Channel Access integration via PyEpics.
        - High expandability as provided by all the libraries of Python.
        - Integrated configurable logging systems.
        - Convenient methods to access all the information on I/O.
        - Timers can be used to execute actions after a time delay.
        - Integrated watchdog logic.
        - Multi-threading: each fsm is executed on a different thread, sharing I/O.
        - Convenient loader to launch a daemon with multiple fsm.
        - Possibility to apply a configurable naming convention on I/O.
        
        ## Installation
        
        To install simply run:
        
        ``` bash
        pip install pysmlib
        ```
        
        or download the latest release/sources from github, unpack it and run:
        
        ``` bash
        cd pysmlib
        pip install .
        ```
        
        ### Dependencies
        
        Requires Python 3.6+. Pyepics is
        required and automatically installed by pip. Sphinx and its theme "Read the
        Docs" are required to build the documentation.
        
        ## Example
        
        ``` python
        #! /usr/bin/python
        from smlib import fsmBase, loader
        
        # FSM definition
        class exampleFsm(fsmBase):
            def __init__(self, name, *args, **kwargs):
                super(exampleFsm, self).__init__(name, **kwargs)
        
                self.counter = self.connect("testcounter") # connect to PV "testcounter"
                self.mirror = self.connect("testmirror")
                self.enable = self.connect("testenable")
        
                self.gotoState('idle')
            
            # idle state
            def idle_eval(self):
                if self.enable.rising():
                    self.gotoState("mirroring")
        
            # mirroring state
            def mirroring_eval(self):
                if self.enable.falling():
                    self.gotoState("idle")
                elif self.counter.changing():
                    readValue = self.counter.val()
                    self.mirror.put(readValue)
        
        # Main
        if __name__ == '__main__':
            # load the fsm
            l = loader()
            l.load(exampleFsm, "myFirstFsm")
        
            # start execution
            l.start()
        ```
        
Platform: UNKNOWN
Requires-Python: >=3.6
Description-Content-Type: text/markdown
