それは私だけですか、それともこれはバグですか?
serialPort = await SerialDevice.FromIdAsync(Id);
serialPort
は常にnullですが、Id
はnullではありません。
これを機能させる必要があります。今のところ、Windows 10ユニバーサルアプリからのシリアル通信をテストするために、非常に「迅速で汚い」コードを書いています。 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();
}
あなたの助けとアドバイスをありがとう....
USBからシリアルへの通信にFTDIチップを使用していたMaxbotixセンサーでも同じ問題が発生しました。ターミナルプログラムでデバイスに正常に接続でき、実際の.NETFrameworkのSerialPort
クラスから使用できましたが、GitHubのUWPSerialSampleと私のコードの両方でSerialDevice.FromIdAsync()
null
を返しました。
私にとって、解決策は2つの部分に分かれていました。
最初の部分は、Package.appxmanifest
ファイルにデバイス機能を追加することでした。
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
2番目の部分は、更新されたドライバー(バージョン2.12.06を使用)を FTDI Webサイト からダウンロードすることでした。私がこれをするとすぐに、それは働き始めました。
以下の完全なサンプル:
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);
}
}
開こうとしている「COM3」シリアルポートがオンボードシリアルポートである場合、シリアル通信クラスの現在の設計では、オンボードシリアルポートにアクセスできません。シリアル通信クラスは、USBからシリアルへの通信のみをサポートし、直接シリアル通信はサポートしません。上記のコードでは、myDevices [0] .Port.Nameの値は何ですか?