Windows UWP Windows.Devices.SerialCommunication.SerialDevice无法正常工作

Ber*_*rdG 11 serial-port uwp

它只是我,还是这个bug?

serialPort = await SerialDevice.FromIdAsync(Id);
Run Code Online (Sandbox Code Playgroud)

serialPort即使Id不是,也总是为空.

我需要这个工作.现在我只是编写非常"快速和脏"的代码来测试来自Windows 10 Universal应用程序的串行通信.我在x86和x64中都调试了相同的结果.

这就是我现在所处的位置,但如果没有创建serialPort,我不能走得很远....

public class SerialComm
    {
        private SerialDevice serialPort;
        DataWriter dataWriteObject = null;
        DataReader dataReaderObject = null;

        public async void StartTest()
        {

            var deviceSelector = SerialDevice.GetDeviceSelector("COM3");
            var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(deviceSelector);
            var myCurrentDevice = myDevices[0];
            string Id = myCurrentDevice.Id.ToString();

            try
            {
                serialPort = await SerialDevice.FromIdAsync(Id);
            }
            catch (Exception)
            {

                throw;
            }

            StringBuilder commandBuilder = new StringBuilder();

            while (true)
            {
                var rBuffer = (new byte[1]).AsBuffer();
                await serialPort.InputStream.ReadAsync(rBuffer, 1, InputStreamOptions.Partial);

                if ((char)rBuffer.ToArray()[0] != '\n')
                {
                    commandBuilder.Append((char)rBuffer.ToArray()[0]);
                }
                else
                {
                    string temp = "";

                    try
                    {
                        temp += rBuffer.ToString();
                    }
                    catch (Exception)
                    {
                        temp = "Error";
                    }

                    commandBuilder.Append(temp);
                }

                string stringToDisplay = commandBuilder.ToString();
            }
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助和建议......

Nic*_*cki 8

对于使用FTDI芯片进行USB到串行通信的Maxbotix传感器,我遇到了同样的问题.我可以在终端程序中很好地连接到设备,我可以从真正的.NET Framework SerialPort类中使用它,但是在GitHub的UWP SerialSample和我的代码中都SerialDevice.FromIdAsync()返回了null.

对我来说,解决方案分为两部分.

第一部分是在Package.appxmanifest文件中添加设备功能:

<DeviceCapability Name="serialcommunication">
  <Device Id="any">
    <Function Type="name:serialPort" />
  </Device>
</DeviceCapability>
Run Code Online (Sandbox Code Playgroud)

第二部分是从FTDI网站下载更新的驱动程序(我使用的是2.12.06版本).我一做到这一点就开始工作了.

完整示例如下:

            var aqsFilter = SerialDevice.GetDeviceSelector("COM3");
            var devices = await DeviceInformation.FindAllAsync(aqsFilter);
            if (devices.Any())
            {
                var deviceId = devices.First().Id;
                this.device = await SerialDevice.FromIdAsync(deviceId);

                if (this.device != null)
                {
                    this.device.BaudRate = 57600;
                    this.device.StopBits = SerialStopBitCount.One;
                    this.device.DataBits = 8;
                    this.device.Parity = SerialParity.None;
                    this.device.Handshake = SerialHandshake.None;

                    this.reader = new DataReader(this.device.InputStream);
                }
            }
Run Code Online (Sandbox Code Playgroud)


小智 2

如果您尝试打开的“COM3”串行端口是板载串行端口,则串行通信类的当前设计不允许访问板载串行端口。串行通信类仅支持 USB 转串行通信,不支持直接串行通信。在上面的代码中,myDevices[0].Port.Name 的值是多少?