0
我需要向激光傳感器發送命令。它通過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類相同的功能。
的代碼是這樣的:
首先,我找到該設備(和它的作品,我得到「COM1」作爲PORTNAME)
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時,似乎沒有命令被髮送......激光沒有打開和關閉,我也沒有收到任何錯誤。有任何想法嗎?