我正在尝试了解如何使用Windows API与RS232/RS422通信。我需要连接到一些我不能真正控制通信协议的硬件,所以我不得不这样做。我需要将TX +(引脚3)设置为高(~5伏),将TX -(引脚7)设置为低(~0伏)。
我知道有
SetCommBreak但这使两个引脚(3,7)都到了~5伏。我只需要引脚3为5伏,引脚7为~0伏。有没有可行的方法来做到这一点?如果我能像控制电线一样控制这些线路,我会很高兴,但有没有一种方法可以操纵波特率并传输数据来实现这一点?或者任何一种解决方案?
发布于 2018-08-14 23:31:32
你不能随意操作RX和TX引脚,没有限制*不写你自己的RS485/RS422协议是硬编码在芯片上。在加载(自动) windows串行驱动程序时,您在操作引脚方面受到限制的原因是,串行端口的规范( RS485 /RS422是什么)需要特定的数据结构,即起始位、停止位、RTS (准备发送)等信号。这个必需的数据结构是在windows串行驱动程序中实现的,您不能在中覆盖它。您可以自定义您的数据,以生成所需的引脚状态,但您的数据将始终被封装在串行协议所需的结构中(开始/停止位,... ),cf此来自https://en.wikipedia.org/wiki/RS-485的图形

在windows中,您在DCB结构( https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_dcb )中初始化串行端口。
在此串行端口结构中,定义了在RS485 / RS422上运行的几个协议,如MODBus、...
您可以将RS-485/RS-422串行端口视为“智能文件”。“智能”,因为可以访问多个从站/地址。如果你在文件/串行总线上写了一个正确的地址,你会得到一个答案,例如,如果你写了一个23,意思是“从23,把你的寄存器值发送给我!”
这个覆盖的协议是必须在软件中实现的。为此,您不需要操纵单个引脚,除了可能的控制线,如RTS,...实际上,如果不编写自己的驱动程序,您就无法做到这一点。
在http://libmodbus.org/documentation/中实现MODBus协议的一个例子
下面的引用表明,在RS-485上运行的协议是在串行端口层上编写的:
您不能像在RS232上使用ASCII码协议那样,“手工”轻松地制作MODBUS消息:每个MODBUS消息都以校验和码结尾,校验和码是根据消息的全部内容计算得出的。因此,要交换MODBUS消息,必须使用:
由设备供应商提供的具有兼容接口的特定程序;
或具有编程库的简单RS485接口,该编程库对MODBUS消息进行编码和解码;
或能够自行编码和解码MODBUS消息的智能RS485接口,例如Yocto-RS485。
来源:http://www.yoctopuce.com/EN/article/a-quick-tutorial-on-rs485-and-modbus
https://stackoverflow.com/questions/51841775
复制相似问题