问题标签 [rs485]

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 投票
0 回答
749 浏览

serial-port - 通过 RS485 串行电缆与硬件通信

我有一个智能电表,通过 RS485 串行电缆连接到电脑。该硬件有一个软件,您可以读取其内部寄存器并在软件上查看它们。当我试图通过软件读取仪表的寄存器时,我运行了一个串行端口监控软件来嗅探正在发送和接收到仪表的字节。

这是嗅探结果:

我的问题:是否可以将请求字节(在上面找到)发送到仪表,然后获取答案字节并将它们保存在电脑上?基本上,是否可以通过发送十六进制字节并接收答案来与仪表通信?还是在发送十六进制字节之前还需要执行一些其他步骤?

注意:我的目标是开发一个基本的和更简单的软件作为仪表随附的软件。

0 投票
3 回答
17931 浏览

c++ - 串口编程 RS485

我的任务是通过 RS485 2 线系统实现 ModBus 协议。(实际上是三根线,A/B 和 GND)。ModBus 不是重点,但在此之前的步骤……通过接口进行简单的 I/O。

我正在使用 FTDI USB-RS485 转换器将 Linux 主机(不可互换)连接到 Windows 主机(可与另一台 Linux 主机互换,但我想避免这种情况)

编码应该是 19200, 8, n, 1。但它似乎不起作用。

我手头没有确切的代码,但在 Linux 上我正在这样做:

接下来,我配置端口。

目前还没有计划奇偶校验和流量控制,因为最终结果将连接到一个低级电路板,我需要自己处理信号。此外,没有任何电线可以实现“不受限制的通信”。(毕竟我不希望 XON/XOFF 字符限制我可以传输的字节范围)

所有这些功能都正确执行并设置了数据。

在 Windows 上,我像这样打开串行端口:

奇偶校验和流量控制被禁用。字节大小设置为 8。

编辑:既然有人问过,这是我在 Windows 上的波特率代码(来自内存) SP.DCBlength= sizeof(SP); SP.BaudRate = 19200; SP.奇偶校验 = 无奇偶校验;SP.StopBits = ONESTOPBIT;SetCommState(hSerial, &SP);

同样,所有这些功能都可以完美运行。

现在,对于让我头疼的测试用例。

在 Linux 主机上,我创建了一个 256 字节大小的字节缓冲区。这个缓冲区填充了从 0 到 255 的字符值......然后通过网络通过写入发送。同时,对方正在用“ReadFile”等待数据到达。

使用此配置,对于“其他 Linux 主机”以及 Windows 主机,256 字节到达......但是它不是 0-255 的数字,而是 00 06 等。

当我在设置我真正想要的选项之前将 termios 结构的所有成员设置为 0 时,我可以让 Linuxhost 工作。我猜,这是因为控制字符......但是如果我这样做,Windows 主机要么只接收 256 个字节中的 4 个。

正如我所说,不幸的是我手头没有代码。如果有人知道我可以从什么角度解决这个问题,我将不胜感激。一旦我再次可以访问它,我将发布更多代码。

我如何实现读取操作:

需要注意的是,我确实设置了超时,但不记得确切的值。

编辑:因为我现在可以再次访问我的工作地点,所以这是实际的(当前)代码。

}

至于实际的发送/接收代码:

}

至于示波器:我已经测试了发送的两个方向。两人都非常出色地完成了他们的工作。

0x55 的信号在 50 微秒的长度上是一个恒定的 Up/Down(应该如此,因此设置波特率也没有问题)。

那么我的“接收”代码中有什么我做错了吗?“选择”错了吗?

0 投票
2 回答
69 浏览

linux - 如何在 debian 中安装 Hjelmslund USB485

正如标题所说!

我可以使用“dmesg”从设备中读取信息,并在“lsusb”时看到它,但我如何附加/安装它,例如 dev/ttyUSB2

0 投票
3 回答
53271 浏览

python - 使用python通过串行发送十六进制

这个周末我要做一个小项目。有一个太阳能电池逆变器(丹佛斯 ULX 3600i),我将尝试连接到我的 linux 机器,看看我是否可以从中获取数据,例如为统计数据创造了多少能量。上面有一个用于 RJ45 连接的输入,但带有 RS485。

我得到了电缆,通过电脑中的 USB 端口连接它,在电脑和逆变器之间有一个 RS485 转换器。

然后我正在编写一个小的 python 代码来发出请求。但是我不知道如何正确发送数据。

逆变器使用丹佛斯 ComLynx 协议(第 26 页是我要发送的数据):

编辑:我现在可以发送请求,因为 Adam 4520 RS485 转换器上的 LED 灯闪烁一次,但是没有返回数据,但是当我在终端中执行 CTRL+C 时出现此错误:

0 投票
1 回答
316 浏览

serial-communication - 在 NetBSD 中创建串行通信

我正在尝试在 NetBSD 中创建串行通信。此通信将通过 RS-485 将计算机与控制器连接起来。

问题是我不知道是否需要一些配置或驱动程序来做到这一点。

具体来说,通信将通过 RS-485 端口进行。我尝试使用 /dev/tty01,但串行输出中没有脉冲。

在 NetBSD 中打开、发送和接收串行数据是否需要一些配置、驱动程序或代码?

直到现在我都没有成功。

谢谢

0 投票
1 回答
7328 浏览

c# - 通过 C# 接收 RS485 命令

我一直在谷歌搜索,但没有找到任何代码来帮助我解决这个问题,也许我错过了什么?我想接收 RS485 命令。目前我只是收到垃圾。这是我当前的代码,尽管我认为它没有帮助:

这只是一个测试,看看我是否能收到数据。有谁知道我如何通过串口接收数据并在文本框中显示它们?

0 投票
2 回答
2198 浏览

error-handling - 包错误校验码

我正在 PIC 微控制器和 Linux 计算机上编写 RS-485 协议。我最初在考虑使用 CRC8 来检查传入的数据,但看起来这将是一项处理器密集型任务。

相反,我正在考虑一种更简单的 PEC 算法,也许将所有传入的字节与一个种子进行异或,以创建一个非常简单的 CRC 单步实现。

有这样的算法会有什么缺点?

0 投票
3 回答
1821 浏览

modbus - Modbus RTU 和 ASCII 在同一条 RS485 电缆上

我必须从通过 RS485-USB 串行通信电缆连接的某些设备读取数据。除了使用 modbus ASCII 的设备外,这些设备都使用 modbus RTU。
我可以在同一根电缆上使用两种协议吗?我认为 RTU 单元不回复 ASCII 请求,反之亦然,但这会导致问题吗?有没有人试过这个或有任何经验?

我这里没有任何设备可以尝试,我必须直接在客户处设置所有内容。

这将是我理想的配置

PC_USB----------RS485+RTU------RS485+RTU------RS485+RTU------RS485+ASCII

如果这不起作用,我将不得不切换到如下解决方案

PC_USB----------RS485+RTU------RS485+RTU------RS485+RTU
PC_USB----------RS485+ASCII

由于对硬件、电缆和位置的一些限制,这将是非常有问题的。

0 投票
1 回答
4087 浏览

c++ - 通过 RS485 通讯

我有一台通过 RS485 连接到另一台设备的单板计算机。计算机应向设备发送请求并接收响应(使用设备相关协议)。我可以毫无问题地发送消息并且设备接收它们(例如我可以更改设备的参数)。当我想从设备读取参数时会出现问题。在这种情况下,我得到了错误的响应(错误的字符、转移的消息、不完整的消息……)。

这是我的初始化代码:

发送代码:

接收代码:

这些功能aux_gpio_write_settings()aux_gpio_read_settings()用于设置 UART(通过 GPIOs) st RS485 可以发送或接收数据。

如果我在我的 linux 台式计算机上使用该代码,它可以正常工作,因为 USB/RS485 适配器会在发送和接收模式之间自动切换。在我的单板计算机上,我必须手动完成。因此,我认为设置 GPIO 和接收响应会导致时序问题。我该如何处理这个问题?

0 投票
1 回答
2509 浏览

parsing - Receiving an input string using MAX485 breakout block for Arduino Uno

I am attempting to use my arduino uno's rx and tx pins to receive an ASCII character string from an rs485 device transmitting at 2400 BAUD with 0.100Sec between transmissions, and then parse and output certain pieces of the string to a 16x2 LCD attached to the arduino.. I am getting some data strings, as I checked with my scope, coming in on the rx pin 0-5vdc square wave. Anyone with sample code to receive rs485 ascii strings into a buffer would be helpful.