電子天びんの重量を読み取る必要がありますが、重量を返すようにコマンドを送信できますが、残高が応答していません。私はdevel 古いモデルHBの貿易です。UWP - シリアルポートCOMを読み取ることができません
これはWindows 10用に開発されたものですが、これまではVisual Fox Proで作成されたコードがありましたが、非常に古いものであり、アップグレードを希望しています。
私は天びんに接続して、私の体重を返すようにコマンドを送信することはできますが、天びんは決して応答しません。
private async void Button_Click(object sender, RoutedEventArgs e)
{
try
{
var deviceSelector = SerialDevice.GetDeviceSelector("COM5");
var devices = await DeviceInformation.FindAllAsync(deviceSelector);
if (devices.Any())
{
var deviceId = devices.First().Id;
serialPort = await SerialDevice.FromIdAsync(deviceId);
if (serialPort != null)
{
serialPort.BaudRate = 9600;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
serialPort.Parity = SerialParity.None;
serialPort.Handshake = SerialHandshake.None;
dataWriteObject = new DataWriter(serialPort.OutputStream);
await WriteAsync(WriteCancellationTokenSource.Token);
dataReaderObject = new DataReader(serialPort.InputStream);
await ReadAsync(ReadCancellationTokenSource.Token);
}
}
}
catch (Exception ex)
{
TxtRespuesta.Text = ex.Message;
}
finally
{
serialPort.Dispose();
serialPort = null;
}
}
private async Task ReadAsync(CancellationToken cancellationToken)
{
Task<UInt32> loadAsyncTask;
uint ReadBufferLength = 1024;
// Don't start any IO if we canceled the task
lock (ReadCancelLock)
{
cancellationToken.ThrowIfCancellationRequested();
// Cancellation Token will be used so we can stop the task operation explicitly
// The completion function should still be called so that we can properly handle a canceled task
dataReaderObject.InputStreamOptions = InputStreamOptions.Partial;
loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken);
}
UInt32 bytesRead = await loadAsyncTask;
if (bytesRead > 0)
{
TxtRespuesta.Text += dataReaderObject.ReadString(bytesRead);
}
//rootPage.NotifyUser("Read completed - " + bytesRead.ToString() + " bytes were read", NotifyType.StatusMessage);
}
private async Task WriteAsync(CancellationToken cancellationToken)
{
Task<UInt32> storeAsyncTask;
String cadena = "@GI;23;";
char[] buffer = cadena.ToArray();
cadena.CopyTo(0, buffer, 0, cadena.Length);
String InputString = new string(buffer);
dataWriteObject.WriteString(InputString);
// Don't start any IO if we canceled the task
lock (WriteCancelLock)
{
cancellationToken.ThrowIfCancellationRequested();
storeAsyncTask = dataWriteObject.StoreAsync().AsTask(cancellationToken);
}
UInt32 bytesWritten = await storeAsyncTask;
if (bytesWritten > 0)
{
}
//rootPage.NotifyUser("Write completed - " + bytesWritten.ToString() + " bytes written", NotifyType.StatusMessage);
}
エラー情報がありますか?あなたのbytesReadがnullを返すことを意味しましたか?私たちはあなたのテスト用のデバイスを持っていなかったので、より多くの情報が人々にあなたをより良く助けることができます。コードの問題またはデバイスの問題であることをテストするには、[公式サンプル](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CustomSerialDeviceAccess)を使用してください。 –