C# 如何在Win10 IoT中获取串行设备状态

C# 如何在Win10 IoT中获取串行设备状态,c#,raspberry-pi,uwp,iot,C#,Raspberry Pi,Uwp,Iot,情况:工业机器使用串行端口(通过USB)连接到树莓。它由发送到串行端口的字符串控制 该项目:创建一个应用程序的树莓控制这样的机器 工具:Visual Studio 2015通过以太网连接到Raspberry的PC上,该应用程序使用C#for Win 10 UWP编写,并在为ARM构建时部署到Raspberry 问题:由于机器在现实世界中执行命令可能需要几分钟的时间,因此最好在Raspberry监视器上获得有关机器当前状态的反馈(此外,很明显,操作员在操作时可以获得视觉和听觉线索) 因特网上有几个

情况:工业机器使用串行端口(通过USB)连接到树莓。它由发送到串行端口的字符串控制

该项目:创建一个应用程序的树莓控制这样的机器

工具:Visual Studio 2015通过以太网连接到Raspberry的PC上,该应用程序使用C#for Win 10 UWP编写,并在为ARM构建时部署到Raspberry

问题:由于机器在现实世界中执行命令可能需要几分钟的时间,因此最好在Raspberry监视器上获得有关机器当前状态的反馈(此外,很明显,操作员在操作时可以获得视觉和听觉线索)

因特网上有几个串行设备代码的例子。我从他们那里得到了密码。创建端口:

serialPort = await SerialDevice.FromIdAsync(Id);
serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.ReadTimeout = TimeSpan.FromMilliseconds(2000);
serialPort.BaudRate = 9600;
serialPort.Parity = SerialParity.None;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
// serialPort.Handshake = SerialHandshake.None;
// serialPort.Handshake = SerialHandshake.RequestToSend;
serialPort.Handshake = SerialHandshake.RequestToSendXOnXOff;
和发送命令:

public async Task WriteAsync(string cmdText)
{
    Task<int> storeAsyncTask;
    dataWriteObject = new DataWriter(serialPort.OutputStream);
    dataWriteObject.WriteString(cmdText);
    storeAsyncTask = dataWriteObject.StoreAsync().AsTask();
    int bytesWritten = await storeAsyncTask;
}
问题是,在Win 10应用程序中,这些状态永远不会从false变为false,而在PC版本中一切都正常。关于这一点,只有一个未回答的老问题,在创建示例时,似乎没有人关心端口的状态。我尝试了各种类型的控制流标志,但没有成功。我试着使用VisualStudio的Intellisense提供的各种东西,但是没有什么好结果。强制值serialPort.IsRequestToSenEnabled为true会导致无效值的异常


非常感谢您提供的任何提示。

我发现在Windows 10 UWP下,串行端口的行为与此完全相同
SerialPort.DataSetReadyState
从不更改。我发现的唯一解决方法是挂接SerialPinchhange事件,并在那里捕获DSR状态更改。不幸的是,这并没有给出值,只是它发生了变化,但如果给定已知的初始状态,则可以跟踪该值

        AddHandler SerialPort.PinChanged,
        Sub(sender As Object, e As PinChangedEventArgs)
            Select Case e.PinChange
                Case SerialPinChange.DataSetReady
                    DSRchanged = True
            End Select
        End Sub

你是说同样的应用程序可以在PC上运行,但不能在Raspberry Pi上运行?你能接收serialPort.PinChanged事件吗?@RitaHan MSFT它不是同一个应用程序;PC版本适用于x86,而Raspberry版本适用于ARM。PC程序使用经典网络框架,而新应用程序使用UWP。否,未触发Pin更改事件。
        AddHandler SerialPort.PinChanged,
        Sub(sender As Object, e As PinChangedEventArgs)
            Select Case e.PinChange
                Case SerialPinChange.DataSetReady
                    DSRchanged = True
            End Select
        End Sub