gpt4 book ai didi

.net - 什么会影响 Serialport.Read() 返回的值

转载 作者:行者123 更新时间:2023-12-01 04:22:55 26 4
gpt4 key购买 nike

我在 C# 2.0 中编写了一个简单的应用程序,使用 .Net Framework 2.0 Serialport 类通过 COM1 与 Controller 卡进行通信。

最近出现了一个问题,Read 方法返回的字节不正确。它返回了正确的字节数,只有值不正确。用 Delphi 编写的类似应用程序仍然返回正确的值。

我用过 Portmon记录两个应用程序串行端口上的事件,比较了两个日志和其中一些(显然)不同的设置,我试图尽可能地模仿 Delphi 应用程序,但无济于事。

那么,什么会影响 Read 方法返回的字节值?

两个应用程序之间的大多数设置是相同的。

以下是 Portmon 日志中不同行的列表:

德尔福应用:

IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:dc ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:0 Replace:0 XonLimit:256 XoffLimit:256 IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:100 RC:1000 WM:100 WC:1000 IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR RXFLAG TXEMPTY CTS DSR RLSD BRK ERR RING RX80FULL



C# 应用程序:

IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13 IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024 IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:-1 RC:1000 WM:0 WC:1000 IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING



更新:

正确返回的字节为:91、1、1、3、48、48、50、69、66、51、70、55、52、93(14 个字节)。
最后一个值是一个简单的校验和。

返回的错误值是:91、241、254、252、242、146、42、201、51、70、55、52、93(13 个字节)。

如您所见,返回的第一个和最后五个字节是对应的。

ErrorReceived 事件指示发生了帧错误,这可以解释不正确的值。但问题是当 Delphi 应用程序显然没有时,为什么 SerialPort 会遇到帧错误?

最佳答案

好吧,问题似乎已经解决了(至少目前是这样)。

显然,框架错误导致返回不正确的值。我编写了一个 VB6 应用程序,使用 MSComm 控件,运行良好,并比较了 Portmon 生成的日志文件。

我发现了以下差异

VB6 应用程序:

IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:1 Replace:0 XonLimit:256 XoffLimit:256



C# 应用程序:

IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024



玩弄设置我发现如果我设置 _serialPort.DtrEnable = trueC# 应用程序生成以下日志条目:

IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:1 Replace:0 XonLimit:1024 XoffLimit:1024



这似乎可以防止框架错误,并且应用程序似乎运行良好。

关于.net - 什么会影响 Serialport.Read() 返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/117945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com