我正在使用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连接的另一个实例死板.....只有通过重新启动我的应用程序才能获得另一个“干净且新的”连接到我的主板,这只能被访问一次......
有人对我如何实现这个目标有任何想法吗?