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

问题描述

摘要

我正在使用this USB-to-RJ45 cable将Windows 10开发人员工作站连接到EPEver Tracer 3210an solar charge controller

我正在将Python 3.8.6和minimalmodbus模块一起使用,以尝试连接到设备,检索数据并控制设备参数。

预期结果

充电控制器返回光伏(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,False) 
print(pv_voltage)

我尝试过的东西

  • 改为使用pymodbus模块
  • 尝试了easymodbus模块
  • 将波特率更改为9600
  • 尝试使用ASCII模式而不是RTU(尽管99%的人相信它需要RTU模式)
  • 将串行设备上的COM端口从COM3更改为COM4
  • 重新启动计算机
  • 将MT-50显示屏连接到充电控制器(工作正常)
  • parity设置更改为其他值(偶数,奇数,空格等)

问题

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

解决方法

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

您使用的电缆似乎是路由器控制台电缆,我相信它使用RS232协议(以Cisco的see document为例)。 RS232和RS485不同,并且不兼容,因此该电缆不起作用。

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

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确实有一条“官方” USB到RJ45电缆(CC-USB-RS485-150U);我有其中的三个,却一无所获(当地一家经销商提到有类似的问题)。这些电缆可从Amazon获得(由于您的控制台电缆链接而将其选中)。

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

为了进行测试,我使用了便宜的USB-> RS485适配器,该适配器的接线如上所述(115200,n,8、1),并且效果很好(其中约有10个在现场连接到内置RS485的设备) 。 USB->485 adapter I use来自Aliexpress(获得10,并且没有问题),但是您可以获得类似的from Amazon(但是如上所述,我认为您需要并非所有适配器都具有的接地连接器-我无法获得这些通过两线连接可靠地工作)。我将标准网络导线切成两半,然后将其连接到此适配器(保存了压接工具等);我还没有在其他地方看到过这种布线设置,所以不要认为您可以购买一个现成的(其他则可以从Epever购买)。

,

事实上,上面使用的正确术语应该是 8P8C 而不是 RJ458P8C 用于多种 RJ registered jack types。也许其中列出的其中一种类型与 Tracer 使用的类型相对应?

,

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