【发布时间】:2022-01-14 19:44:21
【问题描述】:
我正在使用 Python 启动一个程序。我想将 Python 的一些信息发送到 Simply Modbus TCP Client。说实话我真的不会用 Python,同时我也在学习 Modbus。
我收到的错误消息是:
runfile('C:/Users/rafa_/OneDrive/Área de Trabalho/TCC_v.0/2/simhvac.py', wdir='C:/Users/rafa_/OneDrive/Área de Trabalho/TCC_v.0/2')
Erro: ("'Hvac' object has no attribute '_server'",)
我的代码在那里(有人可以帮助我):
from threading import Thread
from pyModbusTCP.server import DataBank, ModbusServer
from time import sleep
import time
class ServidorMODBUS():
""" Classe Servidor Modbus"""
def __init__(self, host_ip, port):
"""construtor"""
self._server = ModbusServer(host=host_ip, port=port, no_block=True)
self._db = DataBank
class Hvac(Thread):
def __init__(self):
Thread.__init__(self)
self.Ts = 0.5 # Sampling period in seconds
# Initial conditions
self.temperature = 25 # Initial temperature (Celsius degree)
self.co2 = 400 # Initial CO2 concentration (ppm)
self.humity = 33 # Initial Humidity (% RH)
self.number_of_occup = 1
self.co2_air_inlet = 200
self.T_air = 23
self.T_ac = 20
self.H_ac = 90
self.H_air = 90
# CO2 Parameters
self.co2_params = {
'a1': -0.8964,
'kn': 2.108,
'ki': 0.0579,
'kd': self.Ts
}
# Temperature Parameters
self.temperature_params = {
'beta_i1' : -1.179,
'beta_i2' : 0.2567,
'alfa_ac' : 0.0043,
'alfa_air' : 0.0762,
'alfa_0' : 0.0013,
'alfa_1' : -9.96E-4,
'alfa_I' : -3.06E-4
}
# Humity Parameters
self.humity_params = {
'delta_i1' : -1.6696,
'delta_i2' : 0.6844,
'gamma_ac' : -2.83E-4,
'gamma_air' : 0.0147,
'gamma_T' : 2.16E-4,
'gamma_0' : 0.0016,
'gamma_1' : 0.0018,
'gamma_I' : 4.98E-5
}
def run(self):
co2 = [self.co2, self.co2]
temp = [self.temperature, self.temperature]
humity = [self.humity, self.humity]
co2_il = [self.co2_air_inlet, self.co2_air_inlet]
"""Execuçao MODBUS"""
try:
self._server.start()
print("Servidor MODBUS online")
while True:
t = time.time()
# Process CO2, temperature, humity
(a1, kn, ki, kd) = self.co2_params.values()
n = self.number_of_occup
i = self.co2_air_inlet
d = 0 # disturbance
self.co2 = kn*n + ki*i + kd*d - a1*co2[0]
(beta_i1, beta_i2, alfa_ac, alfa_air, alfa_0, alfa_1, alfa_I) = self.temperature_params.values()
T_ac = self.T_ac
T_air = self.T_air
self.temperature = alfa_ac*T_ac+alfa_air*T_air+alfa_0*co2[0]+alfa_1*co2[1]+alfa_I*co2_il[1] - beta_i1*temp[0]-beta_i2*temp[1]
(delta_i1,delta_i2,gamma_ac,gamma_air,gamma_T,gamma_0,gamma_1,gamma_I) = self.humity_params.values()
H_ac = self.H_ac
H_air = self.H_air
self.humity = gamma_ac*H_ac+gamma_air*H_air+gamma_T*self.temperature+gamma_0*co2[0]+gamma_1*co2[1]+gamma_I*co2_il[1]-delta_i1*humity[0]-delta_i2*humity[1]
# Update delays
co2 = [self.co2, co2[0]]
temp = [self.temperature, temp[0]]
humity = [self.humity, humity[0]]
co2_il = [self.co2_air_inlet, co2_il[0]]
print('CO2:', self.co2, 'Temp:', self.temperature, 'Humidity:', self.humity)
time.sleep(self.Ts-(time.time()-t))
self._db.set_words(1000, co2, temp, humity, co2_il)
print("________________")
print("Tabela MODBUS")
print(f'Holding Register \r\n R1000: {self.db.get_words(1000)}\r\n R2000 {self.db.get_words(2000)}')
print(f'Coil \r\n R1000:{self.db.get_bits(1000)}')
sleep(1)
except Exception as e:
print("Erro: ", e.args)
下面的截图显示了错误。
【问题讨论】:
-
请让我们知道您面临的具体问题(错误、意外结果、无法确定如何执行特定任务等) - 请参阅 how to ask 以获取指导。
-
实际上程序运行了,但没有将包发送给客户端
-
所以当你查询服务器时你得到一个错误?请说明您是如何查询的以及结果是什么(编辑问题并添加额外信息)。
-
我现在要回家,我要分享一些打印屏幕,简而言之,程序正在冷却,但没有将信息发送给客户