I am trying to make a Modbus simulation in python and a Modbus client to read the values from the server.
But i keep getting this error:
Here is my server code:
import random
from pymodbus.datastore import ModbusSequentialDataBlock, ModbusSlaveContext, ModbusServerContext
from pymodbus.server.async_io import StartTcpServer
from pymodbus.server.async_io import ModbusTcpServer
# Define the Modbus registers
coils = ModbusSequentialDataBlock(1, [False] * 100)
discrete_inputs = ModbusSequentialDataBlock(1, [False] * 100)
holding_registers = ModbusSequentialDataBlock(1, [0] * 100)
input_registers = ModbusSequentialDataBlock(1, [0] * 100)
temperature_values = [random.uniform(4, 15) for _ in range(7)]
flow_values = [random.uniform(-1, 1) for _ in range(2)]
holding_registers.setValues(0, temperature_values)
holding_registers.setValues(10, flow_values)
# Define the Modbus slave context
slave_context = ModbusSlaveContext(
di=discrete_inputs,
co=coils,
hr=holding_registers,
ir=input_registers
)
# Define the Modbus server context
server_context = ModbusServerContext(slaves=slave_context, single=True)
# Start the Modbus TCP server
server = ModbusTcpServer(context=server_context, address=("localhost", 502))
server_thread = StartTcpServer()
# Start the server in a separate thread
if __name__ == "__main__":
server_thread.start()
and this is my client:
from pymodbus.client.tcp import ModbusTcpClient
from time import sleep
# Connect to the Modbus TCP server
client = ModbusTcpClient('localhost', port=502)
# Read the values from the Modbus registers
coils = client.read_coils(address=1, count=100)
discrete_inputs = client.read_discrete_inputs(address=1, count=100)
holding_registers = client.read_holding_registers(address=1, count=100)
input_registers = client.read_input_registers(address=1, count=100)
# Print the values
while True:
print("Coils:", coils)
print("Discrete Inputs:", discrete_inputs)
print("Holding Registers:", holding_registers)
print("Input Registers:", input_registers)
sleep(5)
# Close the Modbus TCP client
#client.close()
This is my first time using Modbus, so I would appreciate the help
I have tried using different software such as Modscan and CAS Mosbus Scanner, but didn't seem to help
source https://stackoverflow.com/questions/76261295/how-do-i-make-a-modbus-simulation
Comments
Post a Comment