Сначала я пытался создать шум, генерируя случайные числа в цикле и отображая их с помощью 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.")
Я пробовал между катушками чтения и регистрами хранения, но оба не работают.
На данный момент я надеюсь, что прочтение будет правильным, поскольку я надеюсь, что смогу опираться на это.
Спасибо за любую помощь
Подробнее здесь: https://stackoverflow.com/questions/793 ... n-pymodbus
Мобильная версия