【发布时间】:2021-08-19 08:26:49
【问题描述】:
我正在使用 Flask python 编写一个应用程序,它允许我管理 2 个不同的电机。一个用于固体筒仓,另一个用于液体筒仓。
要连接到这些电机,我使用的是 OPCUA 连接。 在我的 python 文件中,我重复了两次代码,因为它是完全相同的过程,只有 nodeId 发生了变化。对于实体,它是 ua.NodeId(13,4),对于另一个,它是 ua.NodeId(23,4)。
我尝试编写以下代码:
from flask import Flask
from flask import request
from flask import render_template
from opcua import Client
from opcua import ua
client = Client("opc.tcp://{ip}:4840/freeopcua/server/".format(ip='10.1.5.xxx'))
root = client.get_root_node()
objects = client.get_objects_node()
client.connect()
client.load_type_definitions()
app = Flask(__name__)
drive_state = 'Off'
if request.endpoint == 'solid_silos':
statusId = client.get_node(ua.NodeId(13, 5))
elif request.endpoint == 'liquid_silos':
statusId = client.get_node(ua.NodeId(23, 5))
statusId_val = statusId.get_value()
if statusId_val == 1:
drive_state = 'On'
if statusId_val == 2:
drive_state = 'Off'
print(statusId_val)
opc_state = 0
@app.route('/solid_silos/', endpoint='solid_silos')
@app.route('/liquid_silos/', endpoint='liquid_silos')
def form():
global drive_state
if request.endpoint == 'solid_silos':
statusId = client.get_node(ua.NodeId(13, 5))
elif request.endpoint == 'liquid_silos':
statusId = client.get_node(ua.NodeId(23, 5))
statusId_val = statusId.get_value()
if statusId_val == 1:
drive_state = 'On'
function_id = 101
if statusId_val == 2:
drive_state = 'Off'
function_id = 100
print(statusId_val)
if request.endpoint == 'solid_silos':
return render_template('solid_silos.html',drive_state=drive_state, function_id=function_id)
elif request.endpoint == 'liquid_silos':
return render_template('liquid_silos.html',drive_state=drive_state, function_id=function_id)
但我最终遇到了这个问题
raise AssertionError( AssertionError: View function mapping is overwriting an existing endpoint function: liquid_silos
另外,两个不同的页面用我在 html 文件中创建的标签分隔,如下所示:
<div id="menu">
<ul id="onglets">
<li><a href="/solid_silos/"> Solid Silos </a></li>
<li class="active"><a href="/liquid_silos/"> Liquid Silos </a></li>
</ul>
</div>
【问题讨论】: