0

我正在使用 Velleman K8055 USB 实验板,它有一个我正在导入的 python 模块。

为了使 K8055 正常运行,我必须在 K8055 模块中创建一个类的实例,然后打开与板的连接……据我了解,我必须保持该连接/实例运行,并使用该唯一控制板的实例,甚至从子模块中。

我很难弄清楚如何从我的子模块/包中访问先前初始化的 K8055 实例......

我有一个与以下非常相似的应用程序结构......

SmartyPi/
SmartyPi/smartypi.py
SmartyPi/smartypi/__init__.py
SmartyPi/smartypi/appglobals.py
SmartyPi/smartypi/scheduler/
SmartyPi/smartypi/scheduler/__init__.py
SmartyPi/smartypi/scheduler/Scheduler.py
SmartyPi/smartypi/web/
SmartyPi/smartypi/web/__init__.py
SmartyPi/smartypi/web/k8055.py
SmartyPi/smartypi/web/root.py
SmartyPi/smartypi/web/schedule.py

在“SmartyPi/appglobals.py”中,我已经初始化了我的 k8055 对象/连接实例:

from pyk8055 import k8055
globalK8055 = k8055(0) //Open connection to the I/O board on channel 1

我希望能够从以下位置访问相同的“globalK8055”实例:

SmartyPi/smartypi/web/k8055.py
SmartyPi/smartypi/web/schedule.py

我的“SmartyPi/smartypi/web/k8055.py”目前看起来像这样:

import cherrypy

from jinja2 import Environment, PackageLoader

import time

def render_template(template, **params):
    jinja_env = Environment(loader=PackageLoader('smartypi', 'static/templates'))
    return jinja_env.get_template(template).render(params)

class K8055:
    '''
    K8055 Setup Class
    '''

    @cherrypy.expose
    def index(self, **kwargs):
        '''
        Defines k8055 Page
        '''
        if kwargs:                
            k8055Set(kwargs) //Set a Channel On/Off

            return render_template("k8055.html", version = kwargs) //Render Web Page

        else:
            return render_template("k8055.html", version = "SmartyPi v0.01")

def k8055Set(kwargs):

    print 'In k8055Set function: ' + str(kwargs)

    from smartypi.appglobals import globalK8055 as k

    if 'digOut1' in kwargs:

        if kwargs['digOut1'] == 'on':
            print 'Turning On Digital Output 1'
            print k.SetDigitalChannel(1)

        elif kwargs['digOut1'] == 'off':
            print 'Turning Off Digital Output 1'
            print k.ClearDigitalChannel(1)

    elif 'digOut2' in kwargs:

        if kwargs['digOut2'] == 'on':
            print 'Turning On Digital Output 2'
            print k.SetDigitalChannel(2)

        elif kwargs['digOut2'] == 'off':
            print 'Turning Off Digital Output 2'
            print k.ClearDigitalChannel(2)

当我第一次调用“k8055Set()”函数时,板的行为与预期一样,但再次调用它(从网页发出另一个 POST 请求)似乎创建了我与 I/O 板连接的另一个实例死了.....只有重新启动我的应用程序才能获得与我的板的另一个“干净和新”的连接,该连接只适合访问一次......

有人对我如何实现这一目标有任何想法吗?

4

0 回答 0