Проблема с последовательным портом при записи - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь говорить / слушать каждые 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!

...