Я сейчас пытаюсь получить данные от моего ведомого Arduino на мой компьютер.Я успешен в создании Arduino-раба.Однако, когда я пытаюсь получить данные с моего компьютера с помощью библиотеки Pymodbus, мой код не получает данные от Arduino и вызывает исключение ModbusIOException.Для спецификаций моего проекта я пытаюсь построить Modbus RTU с Arduino для имитации датчика со случайными числами в качестве показаний.В коде Arduino используется библиотека Modbus-Arduino Андре Сарменто.
https://github.com/andresarmento/modbus-arduino
Я уже проверил свое ведомое устройство Arduino, если оно работает.Я попытался прочитать данные через эмулятор Modbus Master (QModMaster), и он работал просто отлично.Это может доказать, что сама проблема в коде Мастера.Более того, похоже, что последовательное соединение работает нормально, так как self.client.connect () возвращает True.
Это скриншоты конфигураций QModMaster.
Конфигурации ведомых Конфигурации последовательного порта
Код Python для мастера:
class ModbusRTU:
def __init__(self, graph_name, port, baudrate=9600,
stopbits=1, bytesize=8, parity='N',
timeout=1):
self.graph_name = graph_name
self.client = ModbusSerialClient(method='rtu',
port=port,
baudrate=baudrate,
parity=parity,
timeout=timeout)
self.connection = self.client.connect()
result = self.client.read_holding_registers(address=0,
count=2,
unit=1)
print(result.registers)
if __name__ == '__main__':
modbus = ModbusRTU(graph_name='/dev/ttyACM0',
port='/dev/ttyACM0', baudrate=9600,
stopbits=1, bytesize=8, parity='N',
timeout=1)
print(modbus.check_connection())
Код Arduino для моделируемого подчиненного устройства и датчика:
#include <Modbus.h>
#include <ModbusSerial.h>
ModbusSerial mb;
const int READING = 0;
const int DECIMAL = 1;
void setup() {
mb.config(&Serial, 9600, SERIAL_8N1);
mb.setSlaveId(1);
mb.addHreg(READING);
mb.addHreg(DECIMAL);
}
void loop() {
mb.task();
mb.Hreg(READING, random(1, 201));
mb.Hreg(DECIMAL, random(0, 4));
}
Попечать results.registers
, это предположительно список целых чисел.Тем не менее, он просто вызывает ModbusIOException с сообщением:
'ModbusIOException' object has no attribute 'registers'
File "/home/kebaranas/PythonProjects/ThirsyWell/tools/utilities.py", line 21, in __init__
print(result.registers)
File "/home/kebaranas/PythonProjects/ThirsyWell/tools/utilities.py", line 29, in <module>
timeout=1)
Это также дает это сообщение.
Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)