首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP -无法读取串行端口COM

UWP -无法读取串行端口COM
EN

Stack Overflow用户
提问于 2016-05-19 06:55:40
回答 1查看 1.3K关注 0票数 2

我需要读取电子天平的重量,我可以发送命令返回我的重量,但天平没有反应。我认为这是一种老式的HB交易。

这是为Windows10开发的,以前有一个用Visual Fox Pro编写的代码,但非常旧,客户想要升级。

显然,我可以连接到天平并发送命令来返回我的体重,但天平永远不会响应。

代码语言:javascript
复制
private async void Button_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            var deviceSelector = SerialDevice.GetDeviceSelector("COM5");
            var devices = await DeviceInformation.FindAllAsync(deviceSelector);
            if (devices.Any())
            {
                var deviceId = devices.First().Id;
                serialPort = await SerialDevice.FromIdAsync(deviceId);

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

                    dataWriteObject = new DataWriter(serialPort.OutputStream);
                    await WriteAsync(WriteCancellationTokenSource.Token);

                    dataReaderObject = new DataReader(serialPort.InputStream);
                    await ReadAsync(ReadCancellationTokenSource.Token);

                }
            }


        }
        catch (Exception ex)
        {
            TxtRespuesta.Text = ex.Message;
        }
        finally
        {
            serialPort.Dispose();
            serialPort = null;
        }
    }

    private async Task ReadAsync(CancellationToken cancellationToken)
    {

        Task<UInt32> loadAsyncTask;

        uint ReadBufferLength = 1024;

        // Don't start any IO if we canceled the task
        lock (ReadCancelLock)
        {
            cancellationToken.ThrowIfCancellationRequested();

            // Cancellation Token will be used so we can stop the task operation explicitly
            // The completion function should still be called so that we can properly handle a canceled task
            dataReaderObject.InputStreamOptions = InputStreamOptions.Partial;
            loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken);
        }

        UInt32 bytesRead = await loadAsyncTask;
        if (bytesRead > 0)
        {
            TxtRespuesta.Text += dataReaderObject.ReadString(bytesRead);
        }
        //rootPage.NotifyUser("Read completed - " + bytesRead.ToString() + " bytes were read", NotifyType.StatusMessage);
    }

    private async Task WriteAsync(CancellationToken cancellationToken)
    {

        Task<UInt32> storeAsyncTask;
        String cadena = "@GI;23;";
        char[] buffer = cadena.ToArray();
        cadena.CopyTo(0, buffer, 0, cadena.Length);
        String InputString = new string(buffer);
        dataWriteObject.WriteString(InputString);

        // Don't start any IO if we canceled the task
        lock (WriteCancelLock)
        {
            cancellationToken.ThrowIfCancellationRequested();
            storeAsyncTask = dataWriteObject.StoreAsync().AsTask(cancellationToken);
        }

        UInt32 bytesWritten = await storeAsyncTask;
        if (bytesWritten > 0)
        {

        }
        //rootPage.NotifyUser("Write completed - " + bytesWritten.ToString() + " bytes written", NotifyType.StatusMessage);
    }
EN

回答 1

Stack Overflow用户

发布于 2016-05-19 12:57:47

当然,首先,您的应用程序必须在应用程序清单中声明它正在进行串行通信:

代码语言:javascript
复制
<DeviceCapability Name="serialcommunication">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="name:serialPort"/>
    </Device>
</DeviceCapability>

这会是缺失的部分吗?

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

https://stackoverflow.com/questions/37311379

复制
相关文章

相似问题

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