Логотип Modbus TCP/ip Мягкий комфорт V8Python

Программы на Python
Anonymous
Логотип Modbus TCP/ip Мягкий комфорт V8

Сообщение Anonymous »

Я выполняю школьный проект, включающий TCP/IP-связь между логотипом и моим компьютером, но не могу заставить его работать. Я не пытаюсь создать сервер, я просто хочу отправить значение со своего компьютера на сетевой цифровой вход логотипа.
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")
Проверьте коды, но функция работает, ошибка el primero devolvio este: я попробовал эти два кода, но ни один из них не сработал, первый возвращает эту ошибку:

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

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

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