IP-адрес логотипа: 192.168.0.2
сетевой входной идентификатор: 1
порт TCP/IP: 502
сетевой входной адрес: 1
Код: Выделить всё
import socket
from umodbus import conf
from umodbus.client import tcp
conf.SIGNED_VALUES = True
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.0.2', 502))
message = tcp.write_single_coil(slave_id=1, address=1, value=1)
response = tcp.send_message(message, sock)
print(response)
sock.close()
print("Transfer finished")
try:
from pymodbus.client.sync import ModbusTcpClient
except ModuleNotFoundError:
# Si la primera opción falla, usa la segunda opción de importación
from pymodbus.client import ModbusTcpClient
ip_address = '192.168.0.2'
port = 502 # Puerto por defecto para Modbus TCP
client = ModbusTcpClient(ip_address, port)
if not client.connect():
print("No se pudo conectar al cliente Modbus")
else:
print("Conexión exitosa")
# Escribir un valor digital en una bobina
def write_digital(client, address, value):
result = client.write_coil(address, value)
if result.isError():
print(f"Error al escribir el valor en la puerta digital: {result}")
else:
print("Valor escrito correctamente en la puerta digital")
# Dirección de la bobina digital (depende de la configuración del Siemens LOGO!)
coil_address = 0x0001
# Valor a escribir en la bobina digital (True para encender, False para apagar)
digital_value_to_write = True
# Escribir el valor digital
write_digital(client, coil_address, digital_value_to_write)
# Cerrar la conexión
client.close()
print("Conexión cerrada")
Код: Выделить всё
Traceback (most recent call last):
File "C:\Users\ruths\AppData\Local\Programs\Python\Python39\modbus.py", line 16, in
response = tcp.send_message(message, sock)
File "C:\Users\ruths\AppData\Local\Programs\Python\Python39\lib\site-packages\umodbus\client\tcp.py", line 261, in send_message
response_error_adu = recv_exactly(sock.recv, exception_adu_size)
File "C:\Users\ruths\AppData\Local\Programs\Python\Python39\lib\site-packages\umodbus\utils.py", line 132, in recv_exactly
chunk = recv_fn(size - recv_bytes)
ConnectionResetError: [WinError 10054] Se ha forzado la interrupción de una conexión existente por el host remoto
>>>
Код: Выделить всё
Traceback (most recent call last):
File "C:\Users\ruths\AppData\Local\Programs\Python\Python39\modbus.py", line 16, in
response = tcp.send_message(message, sock)
File "C:\Users\ruths\AppData\Local\Programs\Python\Python39\lib\site-packages\umodbus\client\tcp.py", line 261, in send_message
response_error_adu = recv_exactly(sock.recv, exception_adu_size)
File "C:\Users\ruths\AppData\Local\Programs\Python\Python39\lib\site-packages\umodbus\utils.py", line 132, in recv_exactly
chunk = recv_fn(size - recv_bytes)
ConnectionResetError: [WinError 10054] Se ha forzado la interrupción de una conexión existente por el host remoto
>>>
Код: Выделить всё
[WinError 10054] Se ha forzado la interrupción de una conexión existente por el host remotoПодробнее здесь: https://stackoverflow.com/questions/788 ... comfort-v8