无法通过串行/Modbus 从 Windows 10 连接到 EPsolar Tracer 3210an 充电控制器

Can't connect to EPsolar Tracer 3210an charge controller from Windows 10 via Serial / Modbus

总结

我正在使用 this USB-to-RJ45 cable to connect my Windows 10 developer workstation to the EPEver Tracer 3210an solar charge controller

我正在使用 Python 3.8.6 和 minimalmodbus 模块来尝试连接到设备、检索数据和控制设备参数。

预期结果

充电控制器returns光伏 (PV) 面板的输入电压。

实际结果

MinimalModbus debug mode. Create serial port COM4
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): '\x01\x041\x00\x00\x01?6' (01 04 31 00 00 01 3F 36)
MinimalModbus debug mode. Clearing serial buffers for port COM4
MinimalModbus debug mode. No sleep required before write. Time since previous read: 105406.00 ms, minimum silent period: 1.75 ms.
MinimalModbus debug mode. Response from instrument: '' () (0 bytes), roundtrip time: 1015.0 ms. Timeout for reading: 1000.0 ms.

Traceback (most recent call last):
  File "tempCodeRunnerFile.python", line 17, in <module>
    pv_voltage = ins.read_register(PV_VOLTAGE, 2, 4, False) 
  File "C:\Users\TrevorSullivan\scoop\apps\python\current\lib\site-packages\minimalmodbus.py", line 441, in read_register
    return self._generic_command(
  File "C:\Users\TrevorSullivan\scoop\apps\python\current\lib\site-packages\minimalmodbus.py", line 1170, in _generic_command
    payload_from_slave = self._perform_command(functioncode, payload_to_slave)
  File "C:\Users\TrevorSullivan\scoop\apps\python\current\lib\site-packages\minimalmodbus.py", line 1240, in _perform_command
    response = self._communicate(request, number_of_bytes_to_read)
  File "C:\Users\TrevorSullivan\scoop\apps\python\current\lib\site-packages\minimalmodbus.py", line 1406, in _communicate
    raise NoResponseError("No communication with the instrument (no answer)")
minimalmodbus.NoResponseError: No communication with the instrument (no answer)

代码

import minimalmodbus
import serial

ins = minimalmodbus.Instrument('COM4', 1, debug=True)

ins.serial.baudrate = 115200
ins.serial.bytesize = 8
ins.serial.stopbits = 1
ins.serial.parity = serial.PARITY_NONE
ins.serial.timeout = 1

ins.mode = minimalmodbus.MODE_RTU
ins.clear_buffers_before_each_transaction = True

PV_VOLTAGE = 0x3100

pv_voltage = ins.read_register(PV_VOLTAGE, 2, 4, False) 
print(pv_voltage)

我试过的

问题

  1. 如何才能将我的开发者工作站成功连接到充电控制器?
  2. 有没有可能是这条电缆没电了?
  3. 我还能做些什么来测试电缆以确保其正常工作?
  4. 我还能做些什么来测试充电控制器以确保其响应?

与这些控制器 (manual) 的通信是通过 RS485(通过 RJ45 连接器提供)进行的。手册中仅简要提及(技术规格部分中的“RS485接口”)。

您使用的电缆似乎是路由器控制台电缆,我相信它使用 RS232 协议(see document 来自 Cisco 作为示例)。 RS232 和 RS485 不同,不兼容,所以这条线不行。

该控制器的手册没有详细介绍,我在 EPEVER website 上看不到 modbus 手册。我使用 Tracer-BN 系列设备,epever 支持人员通过电子邮件向我发送了一份详细说明 modbus 设置的手册;因为你的设备也支持 MT50 远程仪表,我假设它的寄存器是相同的。您可能可以通过搜索“常用软件或 MT50 LCD 单元”(带引号)找到手册 - 我相信 2.5 版是最新的(注意:我没有发布 link 因为它似乎没有可在官方网站上获得,因此点击风险自负!)

RJ45接线(来自上面的手册)是:

Pin  | Define 
-----|-------------------------------------
1    | Power supply output +5V or +7.5V 
2    | Power supply output +5V or +7.5V 
3    | RS-485-B 
4    | RS-485-B 
5    | RS-485-A 
6    | RS-485-A 
7    | Ground 
8    | Ground

注意:这些设备可以串联;如果您只连接到一个,请使用引脚 3、5 和 7。我发现可靠的通信需要接地连接。

注意 2:Epever 确实有 'official' USB 转 RJ45 电缆(CC-USB-RS485-150U);我有其中三个,但无法正常工作(当地经销商提到有类似问题)。这些电缆可从 Amazon 获得(由于您的控制台电缆 link 而选择它们)。

检查电缆是否正确接线的一个好方法是将其与 charge controller 软件一起使用(我相信这使用 modus 与设备通信,但它们可能支持其他协议)。

为了进行测试,我使用了一个便宜的 USB->RS485 适配器(115200、n、8、1),它工作得很好(现场有大约 10 个连接到内置设备RS485)。 USB->485 adapter I use was from Aliexpress (got 10 and have had no issues) but you can get something similar from Amazon(但如前所述,我认为您需要并非所有适配器都有的接地连接器 - 我无法通过两线连接使它们可靠地工作)。我将标准网络导线切成两半并将其连接到此适配器(省去挖掘压接工具等);我还没有在其他地方看到过这种布线设置,所以不要认为你能买到一个 off-the-shelf(其他的来自 Epever)。

Afaict,上面使用的正确术语是 8P8C rather than RJ45. 8P8C is used for a wide variety of RJ registered jack types。也许那里列出的其中一种类型对应于 Tracer 使用的是什么?

在有关如何 Capture and Analyze Solar Power Generation Metrics with Python and InfluxDB 的文章中找到了此问题的完整解决方案。