Как мне прочитать значения, записанные на сервере в pymodbusPython

Программы на Python
Ответить
Anonymous
 Как мне прочитать значения, записанные на сервере в pymodbus

Сообщение Anonymous »

Я создал сервер и записал на него значения, используя block.setValues. Однако я не могу прочитать эти значения от клиента. Честно говоря, я не знаю, что делаю неправильно, и не могу найти много информации в Интернете. Даже ChatGPT и Copilot не могут мне помочь.
Сначала я пытался создать шум, генерируя случайные числа в цикле и отображая их с помощью plt, но для меня это было еще более невозможно.
сервер

Код: Выделить всё

from pymodbus.server import StartTcpServer
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.device import ModbusDeviceIdentification
import random
import time

# Datenblock initialisieren
block = ModbusSequentialDataBlock(0, [0]*100)
store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block)
context = ModbusServerContext(slaves=store, single=True)

identity = ModbusDeviceIdentification()
identity.VendorName = 'FI'
identity.ProductCode = 'S1'
identity.VendorUrl = 'http://github.com/riptideio/pymodbus/'
identity.ProductName = 'Mein Server'
identity.ModelName = 'S1'
identity.MajorMinorRevision = '1.0'

def update_data():
while True:
# Zufällige Werte im Register ändern (z.B. für 100 Werte)
for i in range(0,10):
block.setValues(i, random.randint(0,255))
print("Daten aktualisiert...")
print(block.values)
time.sleep(5)  # Warte 1 Sekunde vor der nächsten Aktualisierung

if __name__ == '__main__':
# Starte den Server
#print("Starte Modbus-Server...")

# Server starten - der Server läuft hier in einer Blockschleife
StartTcpServer(context, identity=identity, address=("localhost", 5020))

# Daten regelmäßig aktualisieren (die Server-Logik läuft hier im Hintergrund)
while True:
update_data()  # Daten regelmäßig aktualisieren
клиент

Код: Выделить всё

from pymodbus.client import ModbusTcpClient
import time

# Modbus-Server-Adresse und -Port
SERVER_IP = 'localhost'
SERVER_PORT = 5020

# Erstelle den Modbus-TCP-Client
client = ModbusTcpClient(SERVER_IP, port=SERVER_PORT)

def read_data():
while True:
list=[]
for i in range(0,10):
result = client.read_holding_registers(i)

if result.isError():
print("Fehler beim Auslesen der Register.")
else:
# Ausgabe der Werte
list.append(result.registers)

print("Gelesene Werte:", list)

# Warte 5 Sekunden bevor die nächsten Daten ausgelesen werden
time.sleep(5)

if __name__ == "__main__":
# Verbindung zum Server aufbauen
if client.connect():
print(f"Verbunden mit Modbus-Server {SERVER_IP}:{SERVER_PORT}")
read_data()  # Starte das regelmäßige Auslesen der Daten
else:
print(f"Verbindung zum Server {SERVER_IP}:{SERVER_PORT} konnte nicht hergestellt werden.")
Чтение значений прямо сейчас дает такой список: [ [0], [0], ...]
Я пробовал между катушками чтения и регистрами хранения, но оба не работают.
На данный момент я надеюсь, что прочтение будет правильным, поскольку я надеюсь, что смогу опираться на это.
Спасибо за любую помощь

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-pymodbus
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»