Modbus 无法从 epever tracer 1210a 读取数据到树莓派 [英] Modbus cant read data from epever tracer 1210a to raspberry
问题描述
我想为tracer做一个监控程序
i want to make a monitoring program for tracer
我使用 rs485 USB 转换器将 epever tracer1210a 连接到 raspberry pi 3 model b
i use rs485 usb converter to connect epever tracer1210a to raspberry pi 3 model b
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
client = ModbusClient(method = 'rtu', port = '/dev/ttyACM0', baudrate = 115200)
client.connect()
print( client)
result = client.read_input_registers(0x3100,6,unit=1)
print (result)
solarVoltage = float(result.registers[0] /100.0)
solarCurrent = float(result.registers[1] /100.0)
batteryVoltage = float(result.registers[4] /100.0)
chargeCurrent = float(result.registers[5] /100.0)
print("solar voltage : ",solarVoltage)
print("solar current : ",solarCurrent)
print("battery volatage : ",batteryVoltage)
print("charge current : ",chargeCurrent)
client.close()
我得到这样的错误:
ModbusSerialClient(rtu baud[115200])Modbus 错误:[输入/输出] Modbus 错误:[无效消息] 收到不完整的消息,预计至少 2 个字节(收到 0 个)回溯(最近一次调用最后一次):文件yutub.py",第 9 行,在solarVoltage = float(result.registers[0]/100.0)AttributeError: 'ModbusIOException' 对象没有属性 'registers'
ModbusSerialClient(rtu baud[115200]) Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received) Traceback (most recent call last): File "yutub.py", line 9, in solarVoltage = float(result.registers[0] /100.0) AttributeError: 'ModbusIOException' object has no attribute 'registers'
请帮我解决这个问题
推荐答案
我遇到了同样的问题.
请按照以下步骤解决问题:
Follow the below steps to fix the issue:
- git clone https://github.com/kasbert/epsolar-tracer/tree/master/xr_usb_serial_common-1a
- 按照自述文件中的安装步骤操作.
您在执行 make
时可能会遇到问题.在这种情况下,请执行 sudo apt-get install linux-headers
.
You might face problem when you execute make
. In such case do sudo apt-get install linux-headers
.
检查系统是否检测到 USB UART
Check that the USB UART is detected by the system
lsusb
检查是否未为 Exar USB UART 安装 CDC-ACM 驱动程序
Check that the CDC-ACM driver was not installed for the Exar USB UART
ls/dev/tty*
要删除 CDC-ACM 驱动程序并安装驱动程序:
To remove the CDC-ACM driver and install the driver:
sudo rmmod cdc-acm
sudo modprobe -r usbserial
sudo modprobe usbserial
sudo insmod ./xr_usb_serial_common.ko
此后,当您执行 ls/dev/tty*
时,您将看到/dev/ttyXRUSB0.这意味着驱动程序已安装并且您处于良好状态.
After this when you do ls /dev/tty*
you will see /dev/ttyXRUSB0. This means the driver is installed and you are in good shape.
将代码中的端口更改为/dev/ttyXRUSB0".
Change the port in your code to '/dev/ttyXRUSB0'.
重新启动 PI 后,您可能不会看到 ttyXRUSB0,而是会看到 ttyACM0.在这种情况下执行 sudo echo blacklist cdc-acm >/etc/modprobe.d/blacklist-cdc-acm.conf
.如果 PI 不允许您执行,则在路径中创建文件并写入 blacklist cdc-acm
.
After you restart the PI you might not see the ttyXRUSB0 instead you will see ttyACM0. In such case execute sudo echo blacklist cdc-acm > /etc/modprobe.d/blacklist-cdc-acm.conf
. If PI does not allow you to execute then create the file in the path and write blacklist cdc-acm
.
重新启动并验证 ls/dev/tty*
中是否仍显示 ttyACM0.
Reboot and verify if ttyACM0 is still displayed in ls /dev/tty*
.
这篇关于Modbus 无法从 epever tracer 1210a 读取数据到树莓派的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!