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

serial-port - Windows XP 嵌入式 - RS485 问题

我们有一个运行 XP Embedded 的系统,COM2 是一个硬件 RS485 端口。

在我的代码中,我使用RTS_CONTROL_TOGGLE设置 DCB 。我假设它会做它所说的......一旦发生写空中断,就在内核模式下关闭 RTS。这应该是即时的。

相反,我们在示波器上看到 PC 驱动总线的时间比消息结束时间长 1-8 毫秒。我们正在与之交谈的设备会在大约 1-5 毫秒内做出响应。所以... 通信腐败盛行。不,没有办法改变目标的响应时间。

我们现在已经连接到 RS232 端口并将示波器连接到 TX 和 RTS 线,我们看到了同样的情况。RTS 线在消息发送后 1-8 毫秒保持高电平。

我们还尝试关闭 FIFO,或将 FIFO 深度设置为 1,但没有任何效果。

有任何想法吗?我将尝试在“SendFile,清除 RTS”周期中以 REALTIME 优先级从用户模式手动控制 RTS 线路。我也不希望这会奏效。这不应该在用户模式下完成。

0 投票
1 回答
97 浏览

embedded - 通知上层收到消息的首选方法

我正在为嵌入式 C 项目编写 RS485 驱动程序。

驱动程序正在侦听传入的消息,并应在收到完整的消息并准备好读取时通知上层应用程序。

这样做的首选方法是什么?

通过使用中断?触发 SW 中断并从 ISR 中读取消息?

让应用程序定期轮询驱动程序?

0 投票
2 回答
1656 浏览

linux - 如何验证原子写入?

我一直在努力搜索(在 S[O|F|U] 网络和其他地方),并认为这是一个不常见的问题。我正在使用运行 Debian Linux 2.6.28-4 的 Atmel AT91SAM9263-EK 开发板(ARM926EJ-S 内核,ARMv5 指令集)。我正在使用(我相信)tty 驱动程序与RS-485 串行控制器通信。我需要确保写入和读取是原子的。几行源代码(在本文末尾相对于内核源安装目录列出)暗示或隐含地说明了这一点。

有什么方法可以验证向/从该设备写入/读取实际上是原子操作吗?或者, /dev/ttyXX 设备是否被视为 FIFO 并且参数到此结束?仅仅相信代码正在执行它提出的这一主张似乎是不够的——就在今年 2 月,freebsd 被证明缺乏对小行的原子写入. 是的,我意识到 freebsd 与 Linux 并不完全相同,但我的观点是,仔细确定并没有什么坏处。我能想到的就是继续发送数据并寻找一个排列——我希望有一些更科学的东西,理想情况下,是确定性的。不幸的是,我完全不记得以前大学时代的并发编程课程。我会非常感激在正确方向上的一记耳光或推搡。如果您选择回复,请提前感谢您。

亲切的问候,

杰斯


驱动程序/char/tty_io.c:1087


拱/臂/包括/asm/bitops.h:37


驱动程序/串行/serial_core.c:2376

此外,来自 man write(3) 文档:

尝试写入管道或 FIFO 有几个主要特征:

  • 原子/非原子:如果在一个操作中写入的全部量没有与来自任何其他进程的数据交错,则写入是原子的。当有多个写入器向单个读取器发送数据时,这很有用。应用程序需要知道可以以原子方式执行的写入请求有多大。此最大值称为 {PIPE_BUF}。本卷 IEEE Std 1003.1-2001 没有说明超过 {PIPE_BUF} 字节的写入请求是否是原子的,但要求 {PIPE_BUF} 或更少字节的写入应该是原子的。
0 投票
4 回答
24531 浏览

embedded - Microchip PIC 的 Modbus 堆栈

有人可以建议一个用于 Microchip PIC18 处理器的 Modbus RTU 从站的开源实现吗?我正在寻找用于 RS-232/RS-485 的 Modbus RTU 实现,但也欢迎 Modbus TCP/IP 实现。

0 投票
3 回答
1098 浏览

embedded - UART速度可能错误

我的大脑被炸了,所以我想我会把这个传给社区。

当向我的嵌入式系统发送 1 个字符时,它始终认为它收到了 2 个字符。第一个接收到的字符似乎映射到传输的字符(以某种未知的方式),第二个接收到的字符总是 0xff。

这是我观察到的:

我检查了我的时钟,它们似乎没问题。这个非工作版本和以前的版本之间的唯一区别是我现在使用的是 RS485 芯片。

我已经将信号一直跟踪到 MCU,它看起来很好(确认了 RX 引脚上的位值)

0 投票
3 回答
833 浏览

error-handling - 用于通过串行 (RS485) 传输 ascii 的简单稳健的纠错

我有一个非常低速的串行数据连接(RS485):9600 波特的实际数据传输速率约为其的 25%。

串行线路正在通过一个极高 EMR 的区域。峰值波动可达3000 KV。

我还不能强制改变物理介质,但可以很容易地提供一个简单的、健壮的前向纠错方案。该方案需要在 PIC18 系列微控制器上易于实施。

想法?

0 投票
2 回答
2173 浏览

c - 自定义 RS485 协议

我正在为分布式系统中的串行通信编写一个简单的多点 RS485 协议。我正在使用可寻址模型,其中从设备被给予 20 毫秒的响应窗口。主 uC 轮询连接的设备以​​获取更新,并做出相应的响应。我使用了校验和并采取了必要的超限预防措施,以确保连接的设备不会响应格式错误的消息。这种方法在大约 99% 的情况下被证明是有效的,但是如果在通信会话期间引入新设备,我会丢失数据包。“热”插入新设备将对从设备监控的信号产生负面影响,即使只是极短的时间。我在工程的软件方面,但是如何在不尝试重新创建 TCP 的情况下缓解这种情况呢?我们使用轮询模型是因为它速度快,并且可以很好地为我们的应用程序工作,不需要 RTOS 功能。我在每个 cpu 上都有大量的周期,从基本的角度考虑。

0 投票
3 回答
289 浏览

atmel - 有没有人有任何示例代码或建议可以帮助我通过 RS-485 将我的 100 针 uc3a1512 连接到设备?

我正在尝试连接和控制仅接受 RS-485 输入的设备。我希望通过我现有的UC3A1512与此设备通信。有没有人有任何现有的源代码或示例可以帮助我创建这个界面?

我需要一种通过RS-485 格式输出数据的方法。

我不需要建立往返通信,我只需要能够向设备发送命令。

我查看了Atmel的网站以及AVRreaks,但我认为我的项目没有任何价值。

请查看Lin Engineering的Adob​​e PDF第 10 页,以了解有关我需要与之通信的设备的更多信息。

0 投票
2 回答
793 浏览

linux - pxa255 中的 RS485 支持

我想使用放在我卡上的 rs485。我正在研究 arm-linux 和 pxa255 处理器。我已经检查了位于 arm-linux 工具链中的“serial.h”,但不幸的是我找不到合适的 rs485 设置结构,尽管它在 cris 等其他环境中受支持。所以现在,我必须编写一个低级驱动程序来启用 rs485 还是有其他更简单的方法来做到这一点?

0 投票
0 回答
267 浏览

rs485 - 通过 RS485 进行板载单元通信

我听说板载单元 (OBU) 可以通过 RS485 进行通信。我的问题是,怎么做?

例如,我想从 OBU 询问一些运行时变量的状态(哪些门打开了?等)或者另一个例子,我想向 OBU 发送一些数据(外部温度)。

我必须实施什么协议才能做到这些?是否有任何示例实现可用?

谢谢,克里斯