【发布时间】:2018-08-21 17:46:54
【问题描述】:
我有一个特殊的问题。
我正在尝试与需要在 UWP 项目中进行串行通信的外围设备进行通信。我正在使用Windows.Devices.SerialCommunication。
出于演示的目的,我创建了一个包含两个按钮的新页面,以及两个不同的点击处理程序。一个用于打开端口,另一个用于向外围设备发送消息。
一个处理程序是:
SerialDevice device;
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
string selector = SerialDevice.GetDeviceSelector("COM7");
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector);
if (devices.Any())
{
DeviceInformation deviceInfo = devices.First();
device = await SerialDevice.FromIdAsync(deviceInfo.Id);
//*********************
device.BaudRate = 9600;
device.DataBits = 8;
device.Parity = SerialParity.None;
device.StopBits = SerialStopBitCount.One;
device.ReadTimeout = device.WriteTimeout = TimeSpan.FromMilliseconds(1000);
device.Handshake = SerialHandshake.None;
}
_dataReader = new DataReader(device.InputStream);
_dataWriter = new DataWriter(device.OutputStream);
}
当我启用电源时,外围设备上有一个红灯。当//********* 上面的行被执行时,灯被关闭。外围设备不会响应任何消息。当我停止程序时,灯又亮了。
我制作了一个运行良好的 .NET Framework 应用程序。它功能齐全。我在那里使用了System.IO.Ports。我注意到一件事:
如果我在 .NET Framework 应用程序中仅提取并运行这部分代码:
SerialPort comPort = new SerialPort();
_ComPort.PortName = PortName;
_ComPort.BaudRate = BaudRate;
_ComPort.DataBits = 8;
_ComPort.Parity = Parity.None;
_ComPort.StopBits = StopBits.One;
_ComPort.DataReceived += new SerialDataReceivedEventHandler(_ComPort_DataReceived);
_ComPort.Open();
仅此而已。
然后再次运行UWP应用,端口完美打开,灯为红色,设备响应消息。我可以关闭设备,并根据需要多次从 UWP 应用程序初始化它。当我重新启动计算机时,我无法再次从 UWP 应用程序初始化设备(直到我从 .NET Framework 应用程序运行上述代码块)。
如果你想知道,外围设备是 Suzo Happ 制造的 Bill to Bill 单元。
我在 UWP 中的属性初始化方面没有犯任何错误。
【问题讨论】:
-
@Eutherpy 谢谢,但我已经看到了。不过,对于查看此问题的人来说可能很有用。
-
嗯,我记得这里有一个关于uwp应用程序安全限制的话题..
-
@Essigwurst 有什么详细信息,可以链接吗?
-
@Shocky2 你能分享你的代码来读取接收到的数据吗?我面临相同或相似的症状(尽管我是根据产品和供应商 ID 选择 SerialDevice),并且似乎在收到预期的 UTF8 格式中基本上无法识别字符串数据。
标签: c# uwp serial-port