linux下python中RS485设备地址的设置

linux下python中RS485设备地址的设置,python,serial-port,pyserial,plc,rs485,Python,Serial Port,Pyserial,Plc,Rs485,我试图连接到通过RS485(HMI+PLC,通信协议为Fatek自己的协议)进行通信的现有设备网络。我没有问题直接连接到PLC(我可以读取和写入寄存器),但我必须离开HMIPLC连接。当直接连接到HMI和PLC之间的线路时(通过FTDI USBRS485适配器),我无法从PLC读取或写入寄存器(我没有收到正确的响应) 从我收集的信息来看,只要设置了地址,就可以在一条RS485线上连接多个设备。问题是:我看不出在哪里设置这个地址。它是否包含在发送的每个“帧”中?它是否设置在USBRS485适配器的

我试图连接到通过RS485(HMI+PLC,通信协议为Fatek自己的协议)进行通信的现有设备网络。我没有问题直接连接到PLC(我可以读取和写入寄存器),但我必须离开HMIPLC连接。当直接连接到HMI和PLC之间的线路时(通过FTDI USBRS485适配器),我无法从PLC读取或写入寄存器(我没有收到正确的响应)

从我收集的信息来看,只要设置了地址,就可以在一条RS485线上连接多个设备。问题是:我看不出在哪里设置这个地址。它是否包含在发送的每个“帧”中?它是否设置在USBRS485适配器的驱动程序中?适配器中是否有硬编码

提前谢谢大家,


Michał

正如下面的维基百科文章所述,RS485是一种没有默认软件或协议的电气规范。
处理设备地址的机制必须由您自己创建,或者通过选择具有此功能的协议并应用它来创建

RS-485仅规定了发电机和接收器的电气特性:物理层。它没有指定或推荐任何通信协议;其他标准定义了RS-485链路上的通信协议。本标准前言引用了电信系统公告TSB-89,其中包含应用指南,包括数据信令速率与电缆长度、短截线长度和配置

例如,Modbus不是经常使用吗?

Modbus是一种数据通信协议,最初由Modicon(现为施耐德电气)于1979年发布,用于其可编程逻辑控制器(PLC)。Modbus已成为事实上的标准通信协议,现在是连接工业电子设备的常用方式。Modbus在工业环境中很受欢迎,因为它是公开发布的,并且免版税

还有一些python包。

如何设置设备地址将需要根据要采用的软件包的规格进行


此外:

顺便说一句,如果您正在为PLC设备使用制造商的专有协议,那么您很可能会为该设备和协议使用这种多点连接。 第一种方法似乎是联系制造商的支持部门

或者,即使此站点是制造商支持位置,您也需要添加信息,例如您尝试连接的设备以及配置

&

&

看起来您的系统正在使用“Fatek通信协议”,该协议记录在FB用户手册的附录1中。()


该协议看起来像许多工业PLC控制器的典型协议。但是,由于消息类型的数量,它有点复杂。不用深入研究,几天内实现逻辑似乎是可行的。或者某个地方可能有开源实现(尽管我没有搜索)。

通常在串行通信中,1:1或1:N,只能有一个主设备(在您的情况下,HMI是主设备)和一个或多个从设备响应主设备的请求,在提交新请求之前,主机必须始终等待收到响应

如果连接第二台主机,则会在网络上产生冲突,RS-485无法管理这些冲突

串行网络上只能存在一个主机


如果您想克服这些限制,请考虑用以太网和TCP/IP替换该网络

我知道该文档,我使用它来实现通信。如问题所述,我能够读写寄存器。在本协议的规范中,我没有看到任何关于发送方地址的信息,但RS485通常被描述为具有此类功能,可能它位于与上述文档中描述的数据传输不同的层上?@mpnowacki:所有通信都是在主设备和每个从设备之间进行的。因此,主机永远不必发送自己的地址,只需发送从机地址。。每个从机的消息都包含其ID。这在第1-1页底部进行了描述。在数据帧中,从机的ID是字节2和3,其中第一个字节是STX(^a)。这更清楚了吗?是的,我现在明白了,在一条RS485线路上不可能有两个主机。谢谢,改变通信协议目前不是一个选项。这些连接到HMI的PLC可以进行多点通信,但我看不到它是如何实现的。你使用的是Linux中描述的rs485 IOCTL吗?或者ftdi适配器是否为您提供了其他api?好的,谢谢,我现在明白了不可能实现我想要的:)