Я пытаюсь говорить / слушать каждые 10 секунд через последовательный порт (Modbus RSU 485).(Проект UWP)
Я последовал официальному примеру, предложенному Microsoft и адаптирован к моему личному случаю.
Проблема, с которой я сталкиваюсь, заключается в том, что задача WriteAsync () случайным образом записывает сообщение два разаследовательно ... например, он должен написать «привет», вместо этого он пишет «привет», генерируя необработанное исключение в «System.Exception» в System.Private.CoreLib.dll ...
вот соответствующий код:
public async Task WriteAsync()
{
DataWriter dataWriter = new DataWriter(PortaSeriale.OutputStream);
string Funzione03 = "0x01 0x03 0x80 0x01 0x00 0x04 0x3C 0x09";
byte[] bytes = Funzione03.Split(' ').Select(item => Convert.ToByte(item, 16)).ToArray();
if (dataWriter != null)
{
dataWriter.WriteBytes(bytes);
await dataWriter.StoreAsync().AsTask();
dataWriter.DetachStream();
dataWriter = null;
}
}
А вот и функция чтения
public async Task<string> ReadAsync(uint ReadBufferLength)
{
Task<UInt32> loadAsyncTask;
byte[] ByteLettura = null;
dataReader.InputStreamOptions = InputStreamOptions.Partial;
loadAsyncTask = dataReader.LoadAsync(ReadBufferLength).AsTask();
UInt32 bytesRead = await loadAsyncTask; //base 32bit
if (bytesRead > 0) //se leggi byte, convertili in Hexadecimal
{
ByteLettura = dataReader.ReadBuffer(bytesRead).ToArray();
string HexMessage = string.Join("-", ByteLettura.Select(item => item.ToString("X2")));
return HexMessage;}
return $"";
}
Таймер устанавливается в MainPage и тикает каждые 10 секунд.Если необходимо, я опубликую его код.
Я не знаю, как решить эту проблему ... есть предложения?
thx!