问题描述
摘要
我正在使用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
设置更改为其他值(偶数,奇数,空格等)
问题
- 如何将开发人员工作站成功连接到充电控制器?
- 这根电缆有可能没电了吗?
- 我还能做些什么来测试电缆以确保其正常工作?
- 我还能做些什么来测试充电控制器,以确保其响应?
解决方法
通过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
而不是 RJ45
。 8P8C
用于多种 RJ registered jack types。也许其中列出的其中一种类型与 Tracer 使用的类型相对应?
在关于如何Capture and Analyze Solar Power Generation Metrics with Python and InfluxDB的文章中找到了这个问题的完整解决方案。