在rs485 Modbus通信中,我正试图以我的Pi 4B作为主播。我会要求注册值。pyModbus和USB- ok 485(类似于ftdi)都可以使用它的虚拟com (/dev/ttyUSB0 0)
现在..。
我用标准程序召集了uart4。
dtoverlay=uart4,ctsrts
所以我将使用/dev/ttyAMA1 1,TX=GPIO8,RX=GPIO9,RTS=GPIO11,CTS=GPIO10
我买了一个便宜的TTL/RS-485。DE和RE连接到uart RTS (CTS已启用但未使用)。TX到DI,RX转RO
我要求每次注册5个寄存器(每个响应都有3s超时),最后暂停3秒。
我连接了一些LED,并将波特率降低到1200,看看LED是如何工作的。
另一方面,我正在使用ftdi USB- as 485监控Modbus的活动,并通过编程实现对特定消息的响应(充当“假”奴隶)。
根本没有ftdi的活动。
如果我脱附DE,只留下RE与RTS,我会看到TTL TX消息上的RX引脚(就像一个循环回声)。
怎么了??
发布于 2022-10-17 16:45:37
我买了一个便宜的TTL/RS-485。DE和RE一起连接到uart RTS (CTS已启用但未使用)。
这不对。使用Modbus,一次只允许一个设备使用该总线,因此需要之一(也可以是RTS或CTS)在设备准备好在总线上写入一些东西并在整个帧传输之前保持低电平。经过一段确定的时间后,信号必须很高才能释放总线,并允许其他设备进行交谈。
实际上,由于这是一个非常常见的问题,您将发现在这个问题中解决问题所需的一切。一个非常简短的总结:您需要调整您用来添加信号的任何库,以在TTL转换器上输入驱动器启用/读取启用引脚。如果您想知道USB转换器为什么工作而TTL不能工作,答案非常简单:您的USB转换器在其硬件中实现了这个信号(您可以阅读有关链接的更多细节)。
这个问题不难解决,但如果你缺乏耐心,或者没有时间浪费,那就走快车道,买一台像样的收发器。有很多种选择,这只是其中之一(我没有隶属于制造商,也没有从中获利)。您也可以坚持那些通过USB连接,其中大多数将工作(但不是全部)。
如果您决定实现软件解决方案,请注意,您将要求在非实时平台上实现实时性能,这意味着即使该解决方案可能会在几乎100%的时间内工作,但它并不一定总是有效的。如果您的RPi加载了太多的工作,那么可能会出现信令时间不适当的情况,并且有些帧可能无法到达另一边。你会被警告:如果你的应用程序在任何方面都是关键任务,那就忘掉它,买一个合适的收发器吧。
https://stackoverflow.com/questions/74097994
复制相似问题