2017-05-08 19 views
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クラスを使用して同じ機能を複製しようとしました。私はデバイスを見つける

最初の(そしてそれは私が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を使用すると、コマンドが送信されないようです...レーザーがオン/オフしていないため、エラーが発生していません。何か案は?

答えて

0

問題ここでは、私はSERIALPORTクラスでcommand.The「古い」.NET Frameworkは、おそらく(メソッドが書き込みラインと呼ばれている)デフォルトでこれをやっていたと\r\n終了を送信しなかったということでした。

だから今、それはこれで動作します。

device.IsDataTerminalReadyEnabled = true; 
      device.IsRequestToSendEnabled = true; 

      var dataWriter = new DataWriter(device.OutputStream); 

      dataWriter.WriteString(command + "\r\n"); 

      await dataWriter.StoreAsync(); 

      dataWriter.DetachStream(); 
      dataWriter = null; 

そして、これと:

device.IsDataTerminalReadyEnabled = true; 
     device.IsRequestToSendEnabled = true; 

     var dataWriter = new DataWriter(device.OutputStream); 

     byte[] message = System.Text.Encoding.ASCII.GetBytes(command + "\r\n"); 
     dataWriter.WriteBytes(message); 

     await dataWriter.StoreAsync(); 

     dataWriter.DetachStream(); 
     dataWriter = null; 
関連する問題