问题标签 [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 投票
1 回答
993 浏览

c++ - “串行传输完成”-中断 RS485 [BeagleBoneBlack - Angstrom]

我正在 BeagleBoneBlack 上开发应用程序。嵌入式 linux 对我来说很新 =/

我面临的问题是我想实现 RS485 通信,我使用 SeriaLib-Library 编写了一段 C++-Code,目前使用专用 GPIO 来切换 RS485 接口的方向。到目前为止一切都很好。

要编写消息,函数 write 用于以下

唯一的问题是在最后一个字节写入总线后立即切换 DIRECTION-Pin =(

在微控制器上开发时,对各种中断等做出反应是没有问题的。

有什么解决方案 - 在内核深处?- 成功传输消息后直接切换引脚?

0 投票
3 回答
10763 浏览

python - 通过使用 Beaglebone Black Angstrom 的半双工 RS-485 分线板实现自动 RTS 的 Python PySerial

我正在尝试使用运行 Angstrom(3.8 内核)的 Beaglebone Black 与位于 9600-N-8-1 的半双工 RS-485 网络上的设备进行通信。

我正在尝试使用与此类似的 RS-485 分线板:https ://www.sparkfun.com/products/10124,除了芯片是 MAX3485 http://www.maximintegrated.com/datasheet/index .mvp/id/1079。我买了预装了引脚和端子排的电路板。我的一个朋友用示波器对其进行了测试,并声称 RS-485 板确实可以工作。该板有五个连接到 BBB 的引脚。3-5V(电源)、RX-I、TX-O、RTS 和 GND。

我已禁用 BBB 上的 HDMI 支持,以便UART4_RTSnUART4_CTSn引脚可用。

然后我找到了一个覆盖来启用带有 RTS/CTS 控制的 UART-4:

编译并启用覆盖:

像这样将485板连接到BB

在python中,我试图像这样使用串口:

我知道该程序有效,因为当我使用 USB 到 RS-485 转换器/dev/ttyUSB0并设置rtscts=False通信在两个方向上都很好。但我无法使用 RS-485 板使通信正常工作。

RS-485 板有两个问题,都处理 RTS。

  1. 板上的 RTS 与我期望的方式相反。当我在 rs485 板的 RTS 引脚上施加电压时,板上的 RTS LED 熄灭,板不会传输。当我从 RTS 引脚移除电压时,RTS LED 会亮起,并且电路板将进行传输。如何反转 BBB 上 UART_RTSn 引脚的极性?

    Temporary solution: I've made a small bone script program that uses UART4_RTSn pin as input. It turns on a different GPIO when the UART4_RTSn pin is off and turns off that same GPIO pin when the UART4_RTSn pin is on. Then hooked up the RTS pin on the rs485 board to the GPIO pin instead of the UART4_RTSn pin.

    这似乎是一个糟糕的解决方案,但它确实使 RS485 板上的 RTS 在/dev/ttyO4从命令行回显时在正确的时间启动。

    如何UART4_RTSn通过调整硬件配置或更改 pyserial 中的配置来更改引脚的极性?

    这让我想到了第二个问题

  2. 正如我在问题 1 中所述UART4_RTSn,当像这样将值回显到 tty 端口时,该引脚将为我自动(但向后)工作:

    这将使UART4_RTSnLED 在数据传输时闪烁。如果我在没有上面提到的骨文的情况下设置它,那么它将正常打开并在传输时闪烁。如果我使用我的bonescript hack,那么它将正常关闭并在传输时闪烁(这是我想要的)。但是,这仅在从命令行使用 echo 时有效。当我使用 python 并设置串行端口时,UART4_RTSn引脚变为非活动状态。发射时不会闪烁。一旦我在python中发表声明:

    UART4_RTSn销关闭并保持关闭。使用 发送信息时不闪烁ser.write(stuff)。因此,rs485 板未启用传输。如何让UART4_RTSnpin 在 pyserial 中自动工作?我试过设置rtscts=False,但没有用。

    我可以使用ser.setRTS(True)ser.setRTS(False)手动切换引脚值,因此我知道我使用了正确的引脚并且它正在被识别。但我不想直接切换 UART4_RTSn 引脚。我希望它在串行端口传输数据时自动工作,并且在使用 echo 时它会自动工作,但在 Python 中不会。

任何帮助将不胜感激。

0 投票
1 回答
1986 浏览

c++ - Wince 6.0 中的串口配置

我正在使用 WinCE 6.0 设备进行串行通信。它有4个串口,我用的是2个,一个用于RS232,另一个用于RS485。用 RS232 配置的串口工作正常,但 RS485 通信不工作下面是代码,

///////////////////////////////////////// ////////////////// 我将 RTS 信号更改为切换状态,但仍然无法正常工作。我将 RTS 延迟增加到 1000,尝试发送数据设备但没有得到结果。端口打开或参数设置没有错误,我通过将错误消息写入文件来监视那些。这是端口打开和配置的代码。

0 投票
0 回答
1159 浏览

c - 来自 UART 通过 RS485 与 PIC32 通信的额外垃圾字节

到目前为止的工作:

  • 从带有 USB 转换器的 PC 发送字节到我的带有 Click-Board RS485 的 PIC32MX
  • UART5 用于接收数据,这些数据通过 UART4 发回以在终端中读取
  • 字节被正确回显,但是:

问题:

  • PIC32 接收到一些额外的垃圾字节,如“<0>”或 0x01(在我的 PIC32 上已经对其进行了调试)
  • 当我使用 printf 在中断中回显数据时,接收到的额外字节更少(但无论如何都是一些)

这是我的代码:

我没有像在 plib-Example 中那样放置 PPSOutput。这可能是个问题吗?我猜这里的映射不是必需的,因为它需要标准引脚?

我希望你能以某种方式帮助我。我真的很沮丧,也很努力,但我就是想不通,为什么我会收到这些额外的字节。


编辑:解决了问题:

在这里找到解决方案: http ://www.edaboard.com/thread195556.html

事实是,您需要等待,直到数据可用!添加了以下行并且它的工作完美!

0 投票
1 回答
1233 浏览

c - MicroC rs-485, pic16f887 字符串发送问题

如何将字符串“MY STRING”从主照片发送到从属照片?

我正在使用 MicroC RS-485 库示例:

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/rs-485_library.htm

我试图将字符串从主机发送到从机:并设置 dat[7] = "my string"; 期待 dat[7] 在奴隶上用我的字符串,但我得到空值......

链接底部的原始代码。

掌握

奴隶:

在此处输入图像描述

0 投票
1 回答
514 浏览

arduino - RS485 Breakout 和 Arduino Uno rev.3

大家好,我有这个奇怪的问题,我有两种情况,在第一种情况下,我有一个能量计,我使用这个盾牌在此处输入链接描述,我可以从能量计中读取数据。一切正常。在第二种情况下,我有一个电能表,我使用这个 RS485 屏蔽在此处输入链接描述,但我无法读取数据,我不知道在第二种情况下问题出在哪里,我有这个配置:

rs485 brokenout - arduino uno rev. 3 3-5V - 5V RX-I - PIN0 TX-0 - PIN1 RTS - PIN2 GND - GND

我用的是 RS485 的 A 和 B 连接器的 120 欧姆电阻,但我不知道问题出在哪里,你能帮帮我吗?

最好的问候 A。

0 投票
0 回答
1523 浏览

linux - 第一次调用后串行连接返回 NULL

我正在尝试通过 rs485 串行链接与 arduino 交谈。我在我的电脑中插入了一个 USB 转串行 rs485 适配器,在 arduino 端插入了一个 max485。要开始,我只是上传了一个草图,它会发回它收到的东西。

然后,为了测试连接,我在 pc 中运行一个 python 脚本,将一个字符写入串行端口并监听响应:

我第一次启动脚本时会发生这样的事情:

如果我尝试再次启动脚本,它只会写:

只有当我重新启动我的电脑(顺便说一下使用 ubuntu)时,它才会再次开始工作。如果我拔下并再次插入 USB 到串行转换器,没有任何变化,如果我重新启动 arduino,同样的故事。我用树莓派尝试了相同的配置,结果是相同的。更改usb端口不起作用,在arduino中再次上传相同的草图,没有任何反应。引脚 13 上的 LED 闪烁,因此 arduino 正在接收和发送一些东西,serial.read() 函数返回,所以有东西到达,但(第一次之后)是一个空字符'\x00'。在一个积极的情况下,重新启动后,我尝试让脚本继续运行一段时间,一切都很好,直到我点击 ctrl-c 并再次启动脚本。

这是我插入串行转换器后的 dmesg:

我不知道在此之后该怎么做,任何帮助将不胜感激。

编辑 :

电脑不需要重新启动,如果我卸载然后再次加载模块 ch341(处理 USB 转换器的模块),它就可以工作。我在代码顶部添加了两行:

我知道它并不能真正解决问题,但它确实有效。

编辑 2: 查看文档http://lxr.free-electrons.com/source/Documentation/serial/serial-rs485.txt,我尝试使用 c 中的此代码向驱动程序发送 ioctl 信号(i'我对C不好,所以请原谅我)

但是编译和运行程序我看到的只是这个:

我认为,通过查看驱动程序https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.c,它根本没有适当的功能来处理 ioctl。

0 投票
0 回答
5384 浏览

c - C语言半双工RS485 linux串行USB编程

我正在尝试在我的程序中的 Ubuntu 14.04 中设置半双工通信。我的 RS485 收发器使用 RTS 线在发送和接收之间来回切换。与系统交谈时我正在使用说话,并且该程序是主程序。问题是,当我发送完包裹后,RTS 并没有切换回来,这样我就可以接收数据了。基本上我希望它把 RTS 调高,发送数据,把 RTS 调低,然后读取数据。任何帮助都会很棒。

0 投票
0 回答
494 浏览

serial-port - 从串口 RS485 解码加扰的 UART 字节

我正在用两个 RS485 适配器(A、B、C 线)连接两台 PC(一台 Windows,一台 Linux)。问题是..虽然两个设备都设置为“19200 8N1”...我无法获得有效的连接,因为字节仅从一个方向到达并且内容以某种方式被加扰。

我打开设备并在 Windows 上stty -F /dev/ttyS1 19200 cs8 -parity执行和操作echo 12345 > /dev/ttyS1,我总是收到相同数量的字节,但数据是乱码。有了这个我收到0x67 0xb3 0xb2 0x59 0xd9 0xbd。当我做相反的事情并从 Windows 发送一些东西并尝试在 linux 中阅读时,我什么也没有收到(cat /dev/ttyS1od -x < /dev/ttyS1)。

我可以通过尝试解码数据是如何加扰的,以某种方式找出连接出了什么问题吗?是否可以通过某种 UART 加密分析来找出错误的设置?或者任何想法这里有什么问题?

0 投票
1 回答
934 浏览

c - Modbus中的多线程?如何以 500 毫秒发送查询,保持响应时间为 1 秒?

我已经实现了MODBUS主从通信。我已经实现了 fun 6、16 和 3。我将 1 分钟设置为响应时间。现在的问题是我想在 500 毫秒发送查询。但是由于这 1 秒的响应时间,我需要等到 1 秒才能发送第二个查询。我如何每 500 毫秒发送一次查询,保持响应时间为 1 秒。

如果我们还在等待先前查询的响应,是否可以发送新查询?

如何通过 MODBUS 与速度较慢的设备通信?