Je dois envoyer une commande à un capteur laser. Il est connecté à l'USB via un adaptateur RS232 vers USB. Il fonctionne en utilisant l '"ancienne" classe SerialPort, ce qui signifie que le laser reçoit la commande et s'allume (je peux voir le faisceau pendant 3 secondes, puis il disparaît, comme prévu). Le code est le suivant:Envoi de commandes à un périphérique série dans UWP
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();
}
J'ai essayé de reproduire la même fonctionnalité en utilisant la classe SerialDevice basée sur cette tutorial.
Le code est le suivant:
D'abord, je trouve l'appareil (et cela fonctionne, je reçois « COM1 » comme 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;
}
C'est ce que j'utilise pour envoyer des commandes à lui:
private async Task WriteCommand(string command)
{
var dataWriter = new DataWriter(device.OutputStream);
dataWriter.WriteString(command);
await dataWriter.StoreAsync();
dataWriter.DetachStream();
dataWriter = null;
}
Et voici comment j'envoie les commandes réelles:
private async Task OpenAndCloseLaser()
{
//initialize
await WriteCommand(INIT_COMMAND);
// open laser
await WriteCommand("s0o");
await Task.Delay(3000);
//shutdown laser
await WriteCommand("s0p");
}
Lorsque vous utilisez la classe SerialDevice et le DataWriter, il semble qu'aucune commande n'est envoyée ... le laser ne s'allume pas et s'éteint et je ne reçois aucune erreur. Des idées?