首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的DTR握手

C#中的DTR握手
EN

Stack Overflow用户
提问于 2021-08-02 10:18:05
回答 1查看 384关注 0票数 0

在win32 API中,可以使用fDtrControl of DCB结构启用DTR握手。但是,握手属性的C# SerialPort类只允许RTS流控制。

如何在C#中进行DTR握手?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-02 15:23:56

正如你所认为的,可能有两种可能的方法。

一个是在.NET SerialPort API的范围内处理它。

ReadBufferSize指定一个非常大的大小。可在规范中指定最多2GB。

缓冲区大小,以字节为单位。默认值为4096;最大值为正int,即2147483647。

如果以某种方式确定应用程序具有足够的处理能力,则将DtrEnable设置为true。如果您的应用程序做了一些繁重的事情,那么在此期间将DtrEnable设置为false。

无法执行诸如由设备驱动程序控制的及时处理,但如果缓冲区大小较大,则不太可能丢失数据。

如果通信协议规范定义了双向DTR/DSR握手,则在编写应用程序之前检查DsrHolding

此属性用于数据集就绪/数据终端就绪(DSR/DTR)握手。数据集就绪(DSR)信号通常由调制解调器发送到端口,以表明它已准备好进行数据传输或数据接收。

另一种方法是使用P/Invoke调用Win32API的通信功能

在由fDtrControl指定的DCB中有一个名为SetCommState的设置,可以指定DTR_CONTROL_HANDSHAKE。

fDtrControl DTR (数据终端就绪)流量控制.此成员可以是下列值之一。

  • 当设备打开时,DTR_CONTROL_DISABLE 0x00将禁用DTR行,并将其禁用。
  • DTR_CONTROL_ENABLE 0x01在设备打开时启用DTR行,并将其打开。
  • DTR_CONTROL_HANDSHAKE 0x02支持DTR握手。如果启用握手,则应用程序使用EscapeCommFunction函数调整行是错误的。

如果您想在这里使用双向DTR/DSR握手,也可以指定fOutXDsrFlow。

fOutxDsrFlow 如果此成员为真,则监视DSR (数据集就绪)信号以进行输出流控制。如果该成员为TRUE,并且关闭了DSR,则将暂停输出,直到再次发送DSR为止。

如果设备驱动程序实现正确,则应启用DTR流控制。

但是,它不能在Windows以外的平台上使用,所有的串口处理(包括其他功能)都必须使用带有P/Invoke的Win32API。

例如,有一篇这样的文章。

使用P/Invoke开发用于串行设备通信的.NET基类库

但是,下载链接似乎已被禁用。也许是这样的。

netserialcomm默认

sntcz/SnT.IO.端口

类似的方法是使用C++/CLI中的C#通信函数API创建一个可以从Win32调用的库。

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

https://stackoverflow.com/questions/68619918

复制
相关文章

相似问题

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