аппаратная и фоновая история < /h3>
python3 с использованием VS-кода в качестве моего ide < /p>
< /li>
Linux Mint 21.3 (Cinnamon) < /p>
< /li>
Попытка последовательной связи, чтобы запросить Pzem-004t (v3) Power
module ("Slave"), который использует RS-485 (modbus) Comms через Pellific® PL2303 TTL-to-USB Converter < /p>
< /li>
Я подтвердил адрес устройства = 0x01, используя Docklight® (запустите отдельно на платформе Windows) < /p>
< /li>
< /ul>
Я начал с кода Python, предоставленного на GitHub в качестве отправной точки. Но, как был предоставлен этот код, он дал несколько ошибок, связанных с «преамбулкой». Я заменил преамбулу /настройку этого предоставленного GitHub кода, который изначально был < /p>
from pymodbus.client import ModbusSerialClient as ModbusClient
# configure the serial port
client = ModbusClient(method='rtu', port='/dev/ttyUSB0', baudrate=9600)
с первыми 11 строками кода, показанными ниже . Все остальное остается прежним.
Мой измененный код теперь будет запустить < /em>, но бросает сообщение об ошибке (цитируется после моего неисправного кода) < /p>
{ Неисправный} код < /h3>
from pymodbus.client.sync import ModbusSerialClient
# configure the serial port
client = ModbusSerialClient(
method='rtu',
port='/dev/ttyUSB0',
baudrate=9600,
#timeout=3,
parity='N',
stopbits=1,
bytesize=8
)
#device default address is 0x01. However you can change the address by modifying the register that sets the address
device_address = 0x01
# connect to the PZEM-004T
client.connect()
# read the voltage value
result = client.read_input_registers(0x0000, 1, device_address)
voltage = float(result.registers[0] / 10.0)
# read the current value
result = client.read_input_registers(0x0001, 2, device_address)
current = float(result.registers[0] / 1000.0)
# read the power value
result = client.read_input_registers(0x0003, 2, device_address)
power = float(result.registers[0])
# read energy value
result = client.read_input_registers(0x0005, 2, device_address)
energy = float(result.registers[0])
# read the frequency value
result = client.read_input_registers(0x0007, 1, device_address)
frequency = float(result.registers[0] / 10.0)
#read the power factor value
result = client.read_input_registers(0x0008, 1, device_address)
power_factor = float(result.registers[0] / 100.0)
# print the values
print(f"Voltage: {voltage} V")
print(f"Current: {current} A")
print(f"Power: {power} W")
print(f"Energy: {energy} Wh")
print(f"Frequency: {frequency} Hz")
print(f"Power Factor: {power_factor} ")
# disconnect from the PZEM-004T
client.close()
< /code>
Ошибка выброшена < /h3>
Traceback (most recent call last):
File "/home/username/Documents/Python_PZEM_Module/another_PZEM_test", line 22, in
result = client.read_input_registers(0x0000, 1, 0x01)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: ModbusClientMixin.read_input_registers() takes from 2 to 3 positional arguments but 4 were given
< /code>
может кто -нибудь пролить свет на эту проблему? Результаты там.import asyncio
import time
from pymodbus import FramerType
from pymodbus.client import AsyncModbusSerialClient, ModbusSerialClient
# configure the serial port
client = ModbusClient.ModbusSerialClient(
"/dev/ttyUSB0",
framer=FramerType.RTU,
baudrate=9600,
bytesize=8,
parity="N",
stopbits=1,
)
< /code>
А теперь отбрасываемое сообщение об ошибке: < /p>
username@userplatform:~/Documents/Python_PZEM_Module$ cd /home/username/Documents/Python_PZEM_Module ; /usr/bin/env /bin/python3.11 /home/username/.vscode/extensions/ms-python.debugpy-2024.14.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher 39645 -- /home/username/Documents/Python_PZEM_Module/another_PZEM_test
Traceback (most recent call last):
File "/home/username/Documents/Python_PZEM_Module/another_PZEM_test", line 3, in
from pymodbus import FramerType
ImportError: cannot import name 'FramerType' from 'pymodbus' (/usr/lib/python3/dist-packages/pymodbus/__init__.py)
Подробнее здесь: https://stackoverflow.com/questions/794 ... -arguments
Pymodbus, TypeError ⸺ Слишком много позиционных аргументов ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение