问题标签 [minimalmodbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
95 浏览

python - Minimalmodbus 重新连接

使用通过 USB 连接的 Arduino 处理树莓派。通过 python 与 minimummodbus 库进行通信尝试在 Arduino 被拔掉一段时间后重新连接。我试图在出错时再次重复连接代码,但没有帮助。是否有任何功能可以在串行连接丢失时重新连接?

0 投票
1 回答
344 浏览

python - 在 minimummodbus 中更改波特率

Python(和Linux)的绝对初学者试图设置一个modbus RTU主控来控制步进电机。

最终我将尝试在 Raspberry Pi 上实现该解决方案,但现在我正试图让它在 Windows 机器上运行。我安装了 python 3.8 并使用 Pycharm 作为 IDE。

我认为出于我的目的,图书馆'minimalmodbus'将拥有我需要的一切。但是,我还没有弄清楚如何正确打开端口。我正在尝试遵循此处的文档:https ://minimalmodbus.readthedocs.io/en/stable/index.html

我的特定从设备恰好是 115200 波特,而 minimummodbus 中的默认端口是 19200。

在示例中给出:

在文档中进一步说明了以下内容,我认为我没有理解:

模块级常量 minimummodbus.BAUDRATE 等在 1.0 版中被删除

无论如何,这是我尝试过的:

第一行可以接受,第二行不行。.baudrate 的情况相同。我一定遗漏了一些明显的东西。

谢谢!

0 投票
3 回答
1126 浏览

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

概括

我正在使用此 USB 转 RJ45 电缆将我的 Windows 10 开发人员工作站连接到EPEver Tracer 3210an 太阳能充电控制器

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

预期结果

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

实际结果

代码

我试过的

  • 改用pymodbus模块
  • 试过easymodbus模块
  • 将波特率更改为9600
  • 尝试使用ASCII模式而不是RTU(99% 确信它需要RTU模式)
  • 将串行设备上的 COM 端口从更改COM3COM4
  • 重新启动计算机
  • 将 MT-50 显示器连接到充电控制器(完美运行)
  • 将设置更改parity为其他值(偶数、奇数、空格等)

问题

  1. 如何成功地将我的开发人员工作站连接到充电控制器?
  2. 这条电缆有没有可能已经死了?
  3. 我还能做些什么来测试电缆以确保其正常工作?
  4. 我还能做些什么来测试充电控制器以确保其响应?
0 投票
1 回答
15 浏览

minimalmodbus - 在 minimummodbus 中查找有效的 slaveaddresses 或 slaveaddresses 的数量

该文档没有提供执行此操作的方法,据我所知,公共汽车并非旨在执行此操作。但也许有一种答案可以从设备中获得,而不会干扰任何东西来确定哪些设备在那里?

0 投票
1 回答
755 浏览

python - Minimalmodbus - 树莓派的 RS485 屏蔽

我正在尝试将 Seeed Studio 的用于 Raspberry Pi 的 RS485 屏蔽与 Raspberry Pi 2B 上的 Python Minimalmodbus库接口 -不工作!!!

屏蔽:https ://www.seeedstudio.com/RS-485-Shield-for-Raspberry-Pi.html

我在 Raspberry Pi 上测试了以下内容:

  • 如果我使用 Python串行库发送数据,它工作得很好。它打开从设备上的继电器并正确响应。

ser.write('\xff\x05\x00\x00\xff\x00\x99\xe4')

  • 如果我为 Python 使用Minimalmodbus库,它不起作用

instrument.write_bit(0,1,5)

错误: minimalmodbus.NoResponseError:没有与仪器通信(无应答)

注意:我在同一个 RPi 上使用另一个 USB-to-RS485 转换器使用了相同的 Minimalmodbus python 代码,它运行良好。

皮顿代码:

错误: minimalmodbus.NoResponseError:没有与仪器通信(无应答)

如果我可以将这个特定的 rs485-shield 与 Minimalmodbus 库一起使用,有人可以帮忙吗?先感谢您

问候,

0 投票
2 回答
62 浏览

python - 2 个不同寄存器的两个相同值 - minimummodbus

我已经开始使用 AcuRev 2000 的最小 modbus,其寄存器映射在此链接https://www.accuenergy.com/support/modbus-map/?modbus-map=acurev-2000-modbus-map,我是读取频率 (8192-8193) 和第 2 行的电压 (8196-8197)。

运行我的程序时,它通常会在这两个参数中给我相同的值,我尝试了一些方法,比如增加读数之间的时间,或者它们之间的小延迟,但它似乎没有改善。您认为问题出在哪里——可能是 RS-485 适配器吗?

输出是这样的,有些重复出现和电压线一样,这就是问题所在:

我的代码是这样的

0 投票
2 回答
115 浏览

controller - Modbus寄存器只能读不能写

我正在尝试通过 Modbus 协议与空气冷水机的 uC2 SE 控制器进行通信。串行 RS485 到 USB 端口 COM 与控制器连接,我能够读取寄存器,但无法使用 write_register 函数更改它们的值。我也试过用测试仪。exe和Modscan64软件,结果是一样的,只能读不能写。我在这里介绍了这段代码正在运行并且可以检查调试响应。提前谢谢你的帮助!

更改温度设定值

COOLING_SETPOINT_REG = 41

尝试: print(instrument.read_register(COOLING_SETPOINT_REG,1)) 除了 IOError: print('Failed to read from instrument')

NEW_TEMPERATURE = 20.1

return_flag = instrument.write_register(COOLING_SETPOINT_REG, NEW_TEMPERATURE,1,functioncode = 6, signed = True) # 寄存器编号、值、存储的小数位数 output_flag = 'SUCCESS' if return_flag else 'FAILURE' print('writing single register status ' + output_flag + '\n' )

尝试: print(instrument.read_register(COOLING_SETPOINT_REG,1)) 除了 IOError: print('Failed to read from instrument')

Respuesta调试:

MinimalModbus 调试模式。将写入仪器(预期返回 7 个字节):'\x01\x03\x00)\x00\x01UÂ' (01 03 00 29 00 01 55 C2) 最小 Modbus 调试模式。打开端口 COM8 MinimalModbus 调试模式。清除端口 COM8 MinimalModbus 调试模式的串行缓冲区。写之前不需要睡觉。自上次读取以来的时间:334030.00 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2)(7 字节),往返时间:62.0 ms。读取超时:1000.0 毫秒。

20.0 MinimalModbus 调试模式。将写入仪器(预期返回 8 个字节):'\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54) MinimalModbus 调试模式。打开端口 COM8 MinimalModbus 调试模式。清除端口 COM8 MinimalModbus 调试模式的串行缓冲区。写之前不需要睡觉。自上次读取以来的时间:47.00 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54)(8 字节),往返时间:47.0 ms。读取超时:1000.0 毫秒。

写入单个寄存器状态失败

MinimalModbus 调试模式。将写入仪器(预期返回 7 个字节):'\x01\x03\x00)\x00\x01UÂ' (01 03 00 29 00 01 55 C2) 最小 Modbus 调试模式。打开端口 COM8 MinimalModbus 调试模式。清除端口 COM8 MinimalModbus 调试模式的串行缓冲区。写之前不需要睡觉。自上次读取以来的时间:46.0​​0 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2)(7 字节),往返时间:47.0 ms。读取超时:1000.0 毫秒。

0 投票
2 回答
283 浏览

python - minimalmodbus,随机生成错误的crc

我目前正在使用 RaspberryPi 进行数据采集项目。当我启动我的请求脚本时,有时(很少但经常)我的奴隶(计算机)检测到 CRC 错误或无效长度。我猜这个错误可能来自这样一个事实,因为我的脚本很快并且在几秒钟内要求数百个寄存器,有时消息不完整,我的奴隶将其检测为错误消息。我想知道是否有可能 minimummodbus 的时间不正确,有时会发送错误或请求的一部分(不完整)。

从站返回错误:

当奴隶不知道该回答什么时,这是我在主人身上遇到的典型错误:

我在从机上使用 modbus_tk 来模拟 modbus 从机。接下来通常是我的代码的一部分,它从依赖于值类型的从站请求值。

由于我的第一个猜测是时间问题,我随机插入“time.sleep”来计时我的请求,但错误仍然出现。而且它是完全随机的,有时它会工作 5 分钟,有时会在我的第一个 CRC 错误之前几秒钟。你知道我应该去哪里调查吗?在此先感谢您的帮助!

编辑:我的 PC 充当从机,具有模拟多个从机的 modbus_tk 脚本。RPI 是请求寄存器及其值的主机。为了避免 IllegalAddress 错误,从站都配置为在这些特定寄存器中具有值。物理连接是一个 USB 到 RS485 转换器,RPI 配备了一个 HAT 处理 RS485 输入/输出。所以它实际上是一个 ModBus RTU 通信。当请求进来时,slave 循环并发送一个应答。

EDIT2:所以我进一步调查并发现了一些有趣的东西。我收到了一个错误(这次是在主机上),从机显然发送了错误的校验和......在查看它时,我发现 modbus_tk 生成的校验和很好,但主机收到的答案不一样。看起来有些字节在路上发生了变化,这很奇怪。那是从哪里来的?硬件问题?仅在轮询多个寄存器时才会出现此错误(一次超过 2 个)。如果要求的寄存器数量为 1 或 2,则所有其他请求都可以。

0 投票
2 回答
559 浏览

modbus - Minimalmodbus:在同一个串口上读取多个从机

我有一个设置,在同一个串行端口上菊花链连接了 2 个 SDM120 kWh 电能表(将来我想添加一个 SDM630)。我在 MinimalModbus 通信中找到了“使用多种仪器”。我成功读取地址 1 上 SDM120 上的寄存器,但读取地址 2 时出现错误。错误:minimalmodbus.NoResponseError: No communication with the instrument (no answer).

我可以通过添加来解决它time.sleep(0.1),但我认为 RS485 允许在第一个地址完成后立即读取第二个地址的寄存器。我也尝试了较低的值,但是例如。time.sleep(0.01)还给了一个NoResponseError

我个人认为该设置instrument.serial.timeout = 1已经产生了预期的效果,但显然我真的需要time.sleep. time.sleep(0.1) 是正确的做法吗?如果是这样:我怎么知道最低值,所以我没有NoResponseError?试错?我的脚本可以优化吗?特别是当时间很重要时,例如。避免注入电网(光伏分流器,...)。提前致谢!

剧本:

没有的输出time.sleep(0.1)

输出time.sleep(0.1)

0 投票
0 回答
151 浏览

python - Minimalmodbus 我可以读取数据,但我不能写它(RTU)

我正在使用 minimummodbus python 库将我的 Raspberry Pi 与“Spacelogic Thermostat TC900”(RTU)进行通信。

我读取数据没有问题,但是当我尝试在其上写入时,控制台显示下一个错误:

在我看来,这个错误没有任何意义,因为如果我能阅读,我必须与仪器进行通信。

最小modbus主页:https ://minimalmodbus.readthedocs.io/en/stable/index.html

minimummodbus write_bits 页面:https ://minimalmodbus.readthedocs.io/en/stable/apiminimalmodbus.html?highlight=write_bits#minimalmodbus.Instrument.write_bits

我的代码:

控制台输出:

我也尝试了pymodbus,但同样的事情发生了,我只能读取数据。

我以为错误可能出在恒温器上,但我使用Modbus Poll在上面写字,没有问题。