レーザーセンサーにコマンドを送信する必要があります。それは、RS232-USBアダプタを介してUSBに接続される。UWPでシリアルデバイスにコマンドを送信する
"古い" SerialPortクラスを使用しています。これは、レーザーがコマンドを受信してオンになることを意味します(ビームが3秒間見え、次に消滅します)。コードはこれです:
private void OpenAndCloseLaser()
{
serialPort = new SerialPort();
serialPort.PortName = "COM1";
serialPort.BaudRate = 19200;
serialPort.DataBits = 7;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.Even;
serialPort.Open();
//initialization command
serialPort.WriteLine("s0c");
//open laser
serialPort.WriteLine("s0o");
Thread.Sleep(3000);
//shut down laser
serialPort.WriteLine("s0p");
serialPort.Close();
}
私はこのtutorialに基づいてSerialDeviceクラスを使用して同じ機能を複製しようとしました。私はデバイスを見つける
最初の(そしてそれは私がPortNameはとして「COM1」を取得し、作品)これは私がそれにコマンドを送信するために使用していますものです
private async Task GetDeviceAsync()
{
string aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
device = await SerialDevice.FromIdAsync(dis[0].Id);
device.BaudRate = 19200;
device.DataBits = 7;
device.StopBits = SerialStopBitCount.One;
device.Parity = SerialParity.Even;
device.ReadTimeout = TimeSpan.FromMilliseconds(2000);
device.WriteTimeout = TimeSpan.FromMilliseconds(2000);
device.ErrorReceived += Device_ErrorReceived;
}
:
コードはこれです:
private async Task WriteCommand(string command)
{
var dataWriter = new DataWriter(device.OutputStream);
dataWriter.WriteString(command);
await dataWriter.StoreAsync();
dataWriter.DetachStream();
dataWriter = null;
}
そして、これは私が実際にコマンドを送信する方法である:
private async Task OpenAndCloseLaser()
{
//initialize
await WriteCommand(INIT_COMMAND);
// open laser
await WriteCommand("s0o");
await Task.Delay(3000);
//shutdown laser
await WriteCommand("s0p");
}
SerialDeviceクラスとDataWriterを使用すると、コマンドが送信されないようです...レーザーがオン/オフしていないため、エラーが発生していません。何か案は?