首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Windows API操作RS端口

使用Windows API操作RS端口
EN

Stack Overflow用户
提问于 2018-08-14 20:44:32
回答 1查看 280关注 0票数 1

我正在尝试了解如何使用Windows API与RS232/RS422通信。我需要连接到一些我不能真正控制通信协议的硬件,所以我不得不这样做。我需要将TX +(引脚3)设置为高(~5伏),将TX -(引脚7)设置为低(~0伏)。

我知道有

代码语言:javascript
复制
SetCommBreak

但这使两个引脚(3,7)都到了~5伏。我只需要引脚3为5伏,引脚7为~0伏。有没有可行的方法来做到这一点?如果我能像控制电线一样控制这些线路,我会很高兴,但有没有一种方法可以操纵波特率并传输数据来实现这一点?或者任何一种解决方案?

EN

回答 1

Stack Overflow用户

发布于 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://social.msdn.microsoft.com/Forums/vstudio/en-US/1751dafb-2fd5-48b8-8c16-08dd95d7db6d/writing-a-string-to-an-rs485-port-vs-2010-c?forum=vcgeneral

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51841775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档