Serial port Windows UWP Windows.Devices.SerialCommunication.SerialDevice不工作
只是我,还是这只虫子Serial port Windows UWP Windows.Devices.SerialCommunication.SerialDevice不工作,serial-port,uwp,Serial Port,Uwp,只是我,还是这只虫子 serialPort = await SerialDevice.FromIdAsync(Id); serialPort始终为空,即使Id不为空 我需要让它工作。目前,我正在编写非常“快速且肮脏”的代码,以测试来自Windows10通用应用程序的串行通信。我在x86和x64中调试,结果相同 这里是我现在的位置,但如果不创建serialPort,我就走不了多远 public class SerialComm { private SerialDevice
serialPort = await SerialDevice.FromIdAsync(Id);
serialPort
始终为空,即使Id
不为空
我需要让它工作。目前,我正在编写非常“快速且肮脏”的代码,以测试来自Windows10通用应用程序的串行通信。我在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();
}
感谢您的帮助和建议……如果您试图打开的“COM3”串行端口是车载串行端口,则当前串行通信类的设计不允许访问车载串行端口。串行通信类仅支持USB到串行通信,不支持直接串行通信。在上面的代码中,myDevices[0].Port.Name的值是多少?我在Maxbotix传感器上遇到了相同的问题,该传感器使用FTDI芯片进行USB到串行通信。我可以在终端程序中很好地连接到设备,并且可以从real.NET Framework的
SerialPort
类中使用它,但是在GitHub的UWP SerialSample和我的代码中,SerialDevice.FromIdAsync()
返回了null
对我来说,解决方案分为两部分
第一部分是在Package.appxmanifest
文件中添加设备功能:
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
检查GitHub上的“官方”示例SerialSample,它也会这样做。这是在10.0.10240.0和Windows10版本10240中,这些文档都太粗制滥造了,没有一个合理的答案。我会随机猜测,因为没有显式的Open()方法,您无法获得一个,因为设备已经在使用中。或者你忘了在舱单上要求“串行通信”功能。谢谢你的回答,汉斯。我应该说我确实在清单中添加了这个功能。另外,请注意,在我的Microsoft制作和分发的示例中,相同的函数也给出了null,因此这不仅仅是我的代码。我猜,如果设备已经在使用中,将抛出一个异常,而不是返回null。。。(只是猜测…)我的FTDI设备也有同样的问题,包括我的代码和GitHub上的SerialSample。你找到解决方案了吗?答案很好,但为了未来谷歌的利益,如果你不
处理SerialDevice
的一个实例,它将一直不可用,直到GC再次运行并表现出非常相似的症状。谢谢你的回答。它是一个USB到串行端口(Arduino)。在faat,问题是端口已经是busyn,但我也不知道如何实际打开它。按照arduino上串行通信的编程方式,端口打开后会立即发送欢迎消息,但我无法获取。一次只能有一个进程拥有该端口,因此如果该端口属于其他进程,则您的应用程序将无法打开它。这是出于设计……关于正在读取的欢迎字符串,您能告诉我以下内容吗:1。您使用的是哪个Arduino板(UNO R3、Leonardo等)?2.Arduino闪现了什么节目?i、 e.您能看到带有标准“闪烁”示例的欢迎屏幕吗?还是只在你的应用程序中出现?3.如果标准样品没有出现这种情况,您能否发送一份样品Arduino草图来重新处理问题?4.重置Arduino设备时,在Arduino IDE内运行“终端”时,您看到了什么?这与您在他们的程序中看到的相比如何?@PrashantHPhadke MSFT您在哪里看到“不允许板载串行端口”的声明?我也得到了空端口,但在上找不到该语句。我使用的是IPC,所以不能使用USB串行设备。有什么办法可以访问车载串行端口吗?你知道为什么它从IDASync一直没有完成吗?我也在那里等待,就像你一样,但它只是无限地运行。。。
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);
}
}