标签: modbus

我应该将哪个modbus库用于GCC的modbus协议

我们正在构建一个产品,它需要modbus通信(rs-485和TCP/IP).代码必须在运行Linux的嵌入式设备上运行.我们有以下标准来选择我们将要使用的库.

  1. 它必须是开源的,因为我们是开源极客.

  2. 我们会将此产品提供给我们的用户以及我们不了解他们的应用程序,因此必须完成modbus协议的实施.

  3. 广泛的用户群:我们认为代码的用户越多,代码的稳定性就越高.

我遇到了两个这样的库:

http://www.freemodbus.org

libmodbus

还有更多的modbus库吗?请建议有利有弊

gcc modbus

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

需要Modbus嗅探器工具

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

问丹妮

modbus

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

寻找Python代码作为MODBUS奴隶

有谁知道一个易于使用的Python程序充当MODBUS奴隶?我需要用MODBUS主机进行一些集成测试.代码可以是串行或TCP.

TY,弗雷德

python simulator modbus

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

此字节顺序转换是否正确?

我正在阅读一个库(github.com/adduc/phpmodbus),这个函数用于将整数转换为little-endian或big-endian字节串:

private static function endianness($value, $endianness = 0) {
    if ($endianness == 0)
        return
                self::iecBYTE(($value >> 8) & 0x000000FF) .
                self::iecBYTE(($value & 0x000000FF)) .
                self::iecBYTE(($value >> 24) & 0x000000FF) .
                self::iecBYTE(($value >> 16) & 0x000000FF);
    else
        return
                self::iecBYTE(($value >> 24) & 0x000000FF) .
                self::iecBYTE(($value >> 16) & 0x000000FF) .
                self::iecBYTE(($value >> 8) & 0x000000FF) .
                self::iecBYTE(($value & 0x000000FF));
}
Run Code Online (Sandbox Code Playgroud)

iecBYTE函数是chr($value & 0xFF).

现在也许我很厚,但是小端字符串看起来不对.
例如,0xAABBCCDD你会得到{CC}{DD}{AA}{BB}.

我甚至在维基百科上查了一下.不应该{DD}{CC}{BB}{AA}吗?

代码工作,但真的让我感到困惑.是不是我理解错了?

php modbus endianness

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

HTML / JavaScript网页上的Modbus TCP通信

我有一台使用Modbus TCP的设备。我想从中读取数据并将其显示在网页上(服务器之间没有中间)。

我找到了一个与Chrome扩展程序几乎具有完全相同功能的项目:

https://github.com/Cloud-Automation/chrome-modbus

它在javascript代码中使用了此代码:chrome.sockets.tcp

我希望我可以使用WebSockets在网页上做同样的事情。

似乎websockets可以在我的网页上(充当客户端)工作,从设备(充当服务器)发送和接收信息。似乎websockets不受cors影响。

有没有人指出我可以从哪里开始?(或者JavaScript库会很棒)

这可能吗?

javascript tcp modbus websocket

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

Modbus错误:[无效消息]接收到不完整的消息,预期至少2个字节(已接收0个)

问题

pymodbus主站/客户端可以向从站/服务器发送请求。从属/服务器使事物准备好返回,并正在等待主/客户端将它们捡起。尽管服务器/从机已准备就绪,但主服务器/客户端仅返回错误“ Modbus错误:[输入/输出] Modbus错误:[无效消息]接收到的消息不完整,预期至少2个字节(接收到0个字节)”。

设定

我使用带有此适配器的笔记本电脑作为服务器/从机:https : //www.amazon.com/dp/B076WVFXN8/ref=twister_B076X1BS4H?_encoding=UTF8&psc=1

我有一个Raspberry Pi 3 / BananaPi作为主服务器/客户端,并带有此适配器:https ://www.aliexpress.com/item/32781613765.html?spm=a2g0s.9042311.0.0.1aec4c4d0EXx8M

我下面本教程的大部分的设置,除了Arduino是交换与笔记本电脑适配器:https://circuitdigest.com/microcontroller-projects/rs485-serial-communication-between-arduino-and-raspberry-pi - Raspberry的针脚连接方法与本教程中的相同。

我在笔记本电脑上将此程序作为服务器/从机:

#!/usr/bin/env python
from pymodbus.server.sync import StartTcpServer
from pymodbus.server.sync import StartUdpServer
from pymodbus.server.sync import StartSerialServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock, ModbusSparseDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.transaction import ModbusRtuFramer, ModbusBinaryFramer

import logging
FORMAT = ('%(asctime)-15s %(threadName)-15s'
          ' %(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.setLevel(logging.DEBUG)

def run_server():

    slave_store1 = ModbusSlaveContext(co=ModbusSequentialDataBlock(0, [1]*16))
    slave_store2 = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [1]*16))
    slave_store3 …
Run Code Online (Sandbox Code Playgroud)

python modbus rs485 banana-pi pymodbus3

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

Modbus tcp android应用程序

我正在开发android应用程序来控制plc在tcp/ip modbus的帮助下,任何人都有很好的教程吗?
Modbus协议逃脱线程(Android,Jamod)

eclipse android tcp modbus

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

适用于CANopen和Modbus的EDS

我正在开发的设备必须支持CANopen和Modbus(RTU和TCP)通信。是否有任何电子数据表格式(例如EDS或XDD)可用于定义两者?

我尝试使用几个工具(Vector CANeds和ODVA EZ-EDS)来生成一个与两者兼容的简单EDS文件,甚至依靠在文本编辑器中手动编辑文件,但是每个文件的输出看起来都差不多,但是彼此根本不相容。

理想情况下,我想使用CiA XDD格式,因为从我的桌面主应用程序中“反序列化”相对来说比较简单。但是,这似乎完全面向CANopen。

任何人都可以提供的任何信息,提示,技巧或指示,将不胜感激。

modbus canopen opc

4
推荐指数
1
解决办法
412
查看次数

Modbus 错误:[输入/输出] 未收到来自远程设备的响应

我尝试使用“安装”/dev/cu.SLAB_USBtoUART.

这是我的代码:

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

from pymodbus.constants import Endian
from pymodbus.constants import Defaults
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer

# settings for USB-RS485 adapter
SERIAL = '/dev/cu.SLAB_USBtoUART'
BAUD = 19200

# set Modbus defaults

Defaults.UnitId = 1
Defaults.Retries = 5

client = ModbusClient(method='rtu', port=SERIAL, stopbits=1, bytesize=8, timeout=3, baudrate=BAUD, parity='E')

connection = client.connect()
print "Readout started"

#result = client.read_discrete_inputs(0)
#result = client.read_holding_registers(12,19)
result = client.read_input_registers(0,1)
print(result) …
Run Code Online (Sandbox Code Playgroud)

python modbus pymodbus3 pymodbus

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

什么是“必须处理用户手势才能显示权限请求”。Chrome Web Serial API 中出现错误消息?

在编程方面,我是一个真正的初学者。我的目的是通过 COM 端口 RS485 控制具有 Google Chrome 中集成的 API 的设备。我尝试重现以下教程: https: //web.dev/serial/

控制台中出现以下错误消息:

“未捕获(承诺中)DOMException:无法在‘Serial’上执行‘requestPort’:必须处理用户手势以显示权限请求。”

我该如何修复这个错误?

非常感谢您的帮助。

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>examplepage</title>
    <script>
    async function caller() {
        // Prompt user to select any serial port.
    const port = await navigator.serial.requestPort();

    // Wait for the serial port to open.
    await port.open({ baudRate: 9600 });
    };
    
    if ("serial" in navigator) {
  alert("Your browser supports Web Serial API!");
  caller();
}
    else {alert("Your browser does not support Web …
Run Code Online (Sandbox Code Playgroud)

html javascript google-chrome serial-port modbus

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