我们正在构建一个产品,它需要modbus通信(rs-485和TCP/IP).代码必须在运行Linux的嵌入式设备上运行.我们有以下标准来选择我们将要使用的库.
它必须是开源的,因为我们是开源极客.
我们会将此产品提供给我们的用户以及我们不了解他们的应用程序,因此必须完成modbus协议的实施.
广泛的用户群:我们认为代码的用户越多,代码的稳定性就越高.
我遇到了两个这样的库:
和
还有更多的modbus库吗?请建议有利有弊
有谁知道一个易于使用的Python程序充当MODBUS奴隶?我需要用MODBUS主机进行一些集成测试.代码可以是串行或TCP.
TY,弗雷德
我正在阅读一个库(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}吗?
代码工作,但真的让我感到困惑.是不是我理解错了?
我有一台使用Modbus TCP的设备。我想从中读取数据并将其显示在网页上(服务器之间没有中间)。
我找到了一个与Chrome扩展程序几乎具有完全相同功能的项目:
https://github.com/Cloud-Automation/chrome-modbus
它在javascript代码中使用了此代码:chrome.sockets.tcp
我希望我可以使用WebSockets在网页上做同样的事情。
似乎websockets可以在我的网页上(充当客户端)工作,从设备(充当服务器)发送和接收信息。似乎websockets不受cors影响。
有没有人指出我可以从哪里开始?(或者JavaScript库会很棒)
这可能吗?
问题
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) 我正在开发android应用程序来控制plc在tcp/ip modbus的帮助下,任何人都有很好的教程吗?
Modbus协议逃脱线程(Android,Jamod)
我正在开发的设备必须支持CANopen和Modbus(RTU和TCP)通信。是否有任何电子数据表格式(例如EDS或XDD)可用于定义两者?
我尝试使用几个工具(Vector CANeds和ODVA EZ-EDS)来生成一个与两者兼容的简单EDS文件,甚至依靠在文本编辑器中手动编辑文件,但是每个文件的输出看起来都差不多,但是彼此根本不相容。
理想情况下,我想使用CiA XDD格式,因为从我的桌面主应用程序中“反序列化”相对来说比较简单。但是,这似乎完全面向CANopen。
任何人都可以提供的任何信息,提示,技巧或指示,将不胜感激。
我尝试使用“安装”到/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) 在编程方面,我是一个真正的初学者。我的目的是通过 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)