标签: modbus

需要Modbus嗅探器工具

我正在寻找一个好的专业modbus嗅探器工具来扫描主从通信.请问有谁有想法?

问丹妮

modbus

5
推荐指数
2
解决办法
7711
查看次数

CRC-CCITT 到 CRC16 Modbus 实现

我在使用 PHP 生成 modbus CRC16 代码时遇到了很多麻烦。我在互联网上找到了很多不同的代码,但我已经尝试过,但由于某种原因我没有得到正确的结果。我找到了一个用于生成 CRC16-CCITT 的 PHP 代码。我已将查找表更改为 modbus CRC 对应表,但结果仍然不正确。代码如下。我还需要做什么才能将 CRC16-CCITT 代码转换为 CRC16-MODBUS 代码。

<?php 

/*************************************************************************
 * phpCrc16 v1.1 -- CRC16/CCITT implementation 
 *
 * By Matteo Beccati <matteo@beccati.com>
 * 
 * Original code by:
 * Ashley Roll
 * Digital Nemesis Pty Ltd
 * www.digitalnemesis.com
 * ash@digitalnemesis.com 
 *
 * Test Vector: "123456789" (character string, no quotes)
 * Generated CRC: 0x29B1
 * 
 *************************************************************************/



/*
 * Returns CRC16 of a string as int value
 */
function CRC16($str)
{
    static $CRC16_Lookup = …
Run Code Online (Sandbox Code Playgroud)

php modbus crc16

5
推荐指数
0
解决办法
5537
查看次数

解码字节数组

我想解码从 modbus 通信接收到的字节数组。这是表示字节数组的十六进制字符串:

01 11 0C 46 57 35 32 39 37 30 31 52 30 2E 35 FE 27
Run Code Online (Sandbox Code Playgroud)

我想分成三部分:

  1. 01 11 0℃
  2. 46 57 35 32 39 37 30 31 52 30 2E 35
  3. FE 27

为了从字节转换为十六进制,我使用以下方法:

 #region ByteToHex
    /// <summary>
    /// method to convert a byte array into a hex string
    /// </summary>
    /// <param name="comByte">byte array to convert</param>
    /// <returns>a hex string</returns>
    public string ByteToHex(byte[] comByte)
    {
        //create a new StringBuilder object
        StringBuilder builder = new …
Run Code Online (Sandbox Code Playgroud)

c# modbus

5
推荐指数
1
解决办法
9647
查看次数

pymodbus 异常响应(131, 3, IllegalAddress)

我正在尝试运行这段代码:

from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging

logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

client = ModbusClient(method='rtu', baudrate=9600, parity='E', port='/dev/ttyUSB0', timeout=1)
client.connect()

rr = client.read_holding_registers(40000, 7, unit=0x01)
print rr
client.close()
Run Code Online (Sandbox Code Playgroud)

但我只得到这个:

DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.factory:Factory Response[131]
DEBUG:pymodbus.transaction:adding transaction 0
DEBUG:pymodbus.transaction:getting transaction 1
Exception Response(131, 3, IllegalAddress)
Run Code Online (Sandbox Code Playgroud)

另一方面,这个 C 代码(使用 libmodbus)正在工作:

modbus_t *mb;
int16_t hregs[9];
mb = modbus_new_rtu('/dev/ttyUSB0', 9600, 'E', 8, 1);
modbus_set_slave(mb, 1);
modbus_read_registers(mb, 0x40000, 7, hregs)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python modbus pymodbus

5
推荐指数
1
解决办法
1万
查看次数

Nmodbus Tcpclient 连接因启用 modbus 的设备出现超时错误而关闭

我正在使用 nmodbus 库(从 Google 代码下载)通过 TCP 进行 modbus rtu 通信。

我正在使用硬件(RS485 到以太网转换器)将我的 modbus over RTU 请求转换为 TCP,反之亦然。

如果我发送请求并且 modbus 设备处于活动状态,则一切正常,但是如果我发送请求并且 modbus 设备未处于活动状态,则我的 tcpclient 连接会自动关闭,我希望它保持打开状态并抛出超时异常,但这没有发生。

我已经正确设置了超时值,但仍然没有结果。

我的示例伪代码如下

using (TcpClient _client = new TcpClient(ipAdd, 1025))
{
_client.NoDelay = true;
ModbusSerialMaster _device = ModbusSerialMaster.CreateRtu(tcpObj);
_device.Transport.ReadTimeout = 1000;
_device.Transport.WriteTimeout = 1000;
_device.ReadInputRegisters(meterID, startAdd, register);
}
Run Code Online (Sandbox Code Playgroud)

我已经使用modbus模拟器(Pollscan,modbus poll)验证了转换器和modbus硬件的功能

我相信我在设置 tcpclient 的属性时犯了一些错误,但不确定到底是什么。

任何建议、意见都非常值得赞赏。

c# modbus tcpclient

5
推荐指数
0
解决办法
2114
查看次数

Android Modbus RTU 库

请为我知道之前讨论过的问题道歉,但我找不到答案。我正在尝试创建一个应用程序以通过 Modbus RTU 与我们的微控制器进行通信。是否有任何适用于 Android 的 Modbus RTU 的库,或者我必须自己编写整个代码。?

谢谢

android modbus

5
推荐指数
1
解决办法
6130
查看次数

pymodbus“单元”参数是什么意思?

我有一些在 pymodbus 1.2 下编写的 modbus TCP 代码,相关代码是

result = modbus_client.read_holding_registers(40093, 3)

更新到 pymodbus 1.4.0 后,它无法工作,直到我将新的单元参数放入函数调用中(示例中都包含 unit=1):

result = modbus_client.read_holding_registers(40093, 3, unit=1)

pymodbus read_holding_registers() 中的单元参数是什么意思?我似乎无法在任何地方找到解释。消息来源说“:param unit:这个请求所针对的从属单元”,但我不明白这是什么意思,也不明白除了 1 之外还有什么选择。

python modbus modbus-tcp pymodbus

5
推荐指数
1
解决办法
1407
查看次数

树莓派 RS485/Uart Modbus

我正在尝试在 UART 上连接一个 RS485 适配器,以便通过 Raspberry Pi 上的 modbus 进行通信。我的最终目标是让所有这些都与 Node 应用程序一起工作,但到目前为止,我的开发人员一直在使用 Python。

我的硬件连接看起来像:

[Modbus 设备] <===> [RS485 芯片 <==> Raspberry PI GPIO] 引脚。RS485 有三根线(发送、接收、方向),它们的连接方式如下

RaspiPi <=>适配器

GPIO 14 (8) - Tx <=> 数据+

GPIO 15 (10)- Rx <=>- 数据-

GPIO 18 (12) - 方向

RS485 不是典型的 9 针适配器。我的芯片上有三根电线。用作差分集和地线的双绞线。

通过手动翻转 GPIO18 进行发送/接收,我已经能够在此适配器和 USB-RS485 适配器之间发送串行通信。(代码如下)[1]。此代码纯粹用于证明适配器工作

我坚持让 modbus 在 GPIO 适配器上工作。我试过使用minimalmodbus,它与USB-RS485 适配器配合良好,但与GPIO 适配器配合使用时失败了。我怀疑这是因为没有设置方向销。

理想的解决方案是在 pi 上为 GPIO 找到一个 RS485 驱动程序,但除此之外,我看到了三个选项

1 - 制作我自己的驱动程序(我完全不熟悉的东西) 2 - 以某种方式获得一个 modbus 库来翻转内核空间中的 GPIO 引脚 3 …

python modbus rs485 gpio raspberry-pi

5
推荐指数
1
解决办法
8173
查看次数

如何在 Windows 上为 C++ 安装 libmodbus?还有其他替代的 modbus 库吗?

我需要在 C++ 上使用 Modbus RTU。我一直在尝试按照https://github.com/stephane/libmodbus上的说明进行操作,但我无法真正掌握它。哪位知道怎么安装的可以帮帮我吗?如果不是 libmodbus,一些替代的 Modbus 库建议也可能有所帮助。

以下是一些可能有帮助的额外信息:

  • 我使用 Windows 8.1,64 位
  • 我在 Code::Blocks 上编写 C++

先感谢您!

c++ installation modbus

5
推荐指数
0
解决办法
1403
查看次数

在 C# 中以编程方式更改串口配置

2的设备类型具有不同的协议并与单个串行端口连接。通过协议,我的意思是串口配置不同。

我有一个协议 ID p_id,我可以通过它检查当前正在读取哪个设备。下面是我的代码

下面是我的主函数,它调用一个名为的类 CombinedEngine

 static class Program
 {
   private static CombinedEngine _eng;
   static async Task Main(string[] args)
    {
      try
      {
         _eng = new CombinedEngine();
      }
      catch (Exception ex)
      {
            Debug.WriteLine(ex.Message.ToString());
                //_log.Error(ex, ex.Message);
      }
    }
     while(true);
 }
Run Code Online (Sandbox Code Playgroud)

组合发动机类

class CombinedEngine
{
   SerialPort port = new SerialPort();
   public CombinedEngine()
    {          

        try
        {
            
            var p = mdc.mdc_protocol.ToList();
            
            if(p.Count > 0)
            {
                foreach(var pr in p)
                {
                    var p_id = pr.protocol_id;

                    if(p_id=="01")//modbus
                    {
                        if (port.IsOpen)
                            port.Close();

                        port = new …
Run Code Online (Sandbox Code Playgroud)

c# serial-port modbus serial-communication

5
推荐指数
1
解决办法
393
查看次数