Код: Выделить всё
from pymodbus.client import ModbusSerialClient
import time
PORT = "/dev/ttyAMA2"
BAUDRATE = 19200
PARITY = 'N'
STOPBITS = 1
SLAVE_ID = 1
REG_OP_CMD = 8
REG_FREQ_RAM = 13
REG_RESET = 1
def connect():
client = ModbusSerialClient(
port=PORT,
baudrate=BAUDRATE,
parity=PARITY,
stopbits=STOPBITS,
timeout=1
)
if client.connect():
print("Connection successful.")
result = client.read_holding_registers(address=8, count=1, slave=1)
print("Result: ", result)
return client
else:
print("Connection failed!")
return None
def forward(client):
return client.write_register(REG_OP_CMD, 2, slave=SLAVE_ID)
def stop_motor(client):
return client.write_register(REG_OP_CMD, 1, slave=SLAVE_ID)
def set_freq(client, hz):
raw = int(hz * 100)
return client.write_register(REG_FREQ_RAM, raw, slave=SLAVE_ID)
def main():
client = connect()
if not client:
return
try:
print("Frequency set to 20 Hz")
set_freq(client, 20)
time.sleep(2)
print("Moving Forward...")
forward(client)
time.sleep(3)
print("3 seconds passed. Motor stopped.")
stop_motor(client)
time.sleep(2)
print("TEST COMPLETED SUCCESSFULLY...")
finally:
client.close()
print("Port closed.")
if __name__ == "__main__":
main()
Мне интересны ответы на два вопроса здесь:
1. Является ли проблема того, что команды не работают через определенный период времени из-за постоянного повторного запуска этого кода сценария? Если да, что я могу сделать?
2. Возникнет ли у меня эта проблема в большом проекте, где после установления соединения только один раз двигателю будет неоднократно предложено «пройти вперед и подождать 3 секунды»?
Версия
---------
pymodbus: 3.8.6
Подробнее здесь: https://stackoverflow.com/questions/798 ... tion-delay
Мобильная версия