hi, i think i made a mistake while writing my post. I am using tcp. This is the code that lets me change the start and stop bits and that i know it works.
from pymodbus.client import ModbusTcpClient
import time
# Dirección IP del dispositivo Modbus TCP para escritura
ip_address_write = '192.168.1.6'
# Puerto Modbus TCP (generalmente 502)
port = 502
# Crea un cliente Modbus TCP para escritura
client_write = ModbusTcpClient(ip_address_write, port)
try:
client_write.connect() # Conecta con el dispositivo de escritura
print("Robot Conectado")
bit_value = True # Valor del bit que deseas escribir (True para 1 o False para 0)
address_write = 0x00 # Dirección de escritura (dirección del Coil)
client_write.write_coil(address_write, bit_value, unit=0x01) # Escribe el valor del bit en el Coil
print(f"Valor escrito en el Coil {address_write} ROBOT: {bit_value}")
time.sleep(3)
bit_valueF = False # Valor del bit que deseas escribir (True para 1 o False para 0)
client_write.write_coil(address_write, bit_valueF, unit=0x01)
print(f"Valor escrito en el Coil {address_write} ROBOT: {bit_valueF}")
time.sleep(20)
except Exception as e:
print(f"Error de comunicación: {e}")
finally:
# Cierra la conexión
client_write.close()
print("Robot Desconectado")
sorry if the comments are in spanish. As i said, this script worked for running any program saved in the robot.
This is the script that tries to write movement on the robot and doesn´t work:
from pymodbus.client import ModbusTcpClient
import struct
import time
# Dirección IP del dispositivo Modbus TCP para escritura
ip_address_write = '192.168.1.6'
# Puerto Modbus TCP (generalmente 502)
port = 502
# Crea un cliente Modbus TCP para escritura
client_write = ModbusTcpClient(ip_address_write, port)
try:
client_write.connect() # Conecta con el dispositivo de escritura
print("Robot Conectado")
float_value = 200 # Valor flotante de 32 bits que deseas escribir
address_write = 41326 # Dirección de escritura (dirección del Holding Register)
# Convierte el valor flotante en una representación binaria en 32 bits
value_bytes = struct.pack('>f', float_value)
# Divide el valor binario en dos registros de 16 bits (Holding Registers)
value_registers = struct.unpack('>HH', value_bytes)
# Escribe los registros en el dispositivo de escritura
client_write.write_register(address_write, value_registers[0], unit=0x01) # Escribir la parte alta
time.sleep(1) # Espera para escribir la parte baja
client_write.write_register(address_write + 1, value_registers[1], unit=0x01) # Escribir la parte baja
print(f"Valor escrito en el Holding Register {address_write} ROBOT: {float_value}")
except Exception as e:
print(f"Error de comunicación: {e}")
finally:
# Cierra la conexión
client_write.close()
print("Robot Desconectado")
i am getting the registers from the DobotStudio Pro User Guide (MG400&M1 Pro) V2.7.1 · Jul 10, 2023 page 75-79. I got it from https://www.dobot-robots.com/service/download-center
i would appreciate any help you could give me.
**