Почему RS485 возвращает отправленные данные? - PullRequest
0 голосов
/ 20 мая 2019

Я использую адаптеры RS485 с MAX485.Эта проблема возникает ТОЛЬКО при связи ПК с малиной.Все работает нормально, затем общение малины с малиной.По какой-то причине ПК отсылает назад команду, которую я ему отправил, и только потом возвращает нужные мне данные.

Я попытался очистить USB-порты входящих и исходящих буферов, используя: glbl._serialPort3.DiscardOutBuffer(); glbl._serialPort3.DiscardInBuffer(); Но проблема не устранена,Ниже приведен код, который я написал, закомментированные строки предназначены только для тестирования, поэтому не обращайте на них внимания.

public static void LLSread()
    {

        byte adress;
        int result = glbl._serialPort3.ReadByte();
        //Console.WriteLine("Received Data:" + result); //b.ToString("X2") to print out as hex
        if (result == 49)
        {
            result = glbl._serialPort3.ReadByte();
            if (result == 3 || result == 1 || result == 2 || result == 4)
            {
                adress = (byte)result;
                result = glbl._serialPort3.ReadByte();
                if (result == 6)
                {
                    result = glbl._serialPort3.ReadByte();
                    if (result == 253 || result == 108 || result == 57 || result == 147)
                    {
                        glbl._serialPort3.DiscardOutBuffer();
                        glbl._serialPort3.DiscardInBuffer();
                        sendLLS(adress);
                        Console.WriteLine("data sent");
                    }
                }
            }
        }
    }
    public static void sendLLS(byte adress)
    {
        byte[] data = { 0x3e, adress, 0x06, 0x17, 0x0b, 0xb8, 0x11, 0x30 };
        byte crc = ComputeChecksum(data);
        byte[] aftercrc = { 0x3e, adress, 0x06, 0x17, 0x0b, 0xb8, 0x01, 0x30, crc };
        Thread.Sleep(10);
        glbl._serialPort3.Write(aftercrc, 0, aftercrc.Length);
        for(int i = 0; i < 9; i++)
            {
           // int result2 = glbl._serialPort2.ReadByte();
           // Console.WriteLine("sent data on rs485 line:" + result2);
        }


    }

Command is [49, 3, 6, 253] and for some reason response i get is [49, 3, 6, 253, 62, 3, 6, 23, 11, 184, 1, 48, 6]. I should only get [62, 3, 6, 23, 11, 184, 1, 48, 6], which i do if i communicate raspberry to raspberry, but not when communicating raspberry to PC. Can someone help me?

1 Ответ

0 голосов
/ 21 мая 2019

Чтобы ответить на вторую часть, отобразить значения в шестнадцатеричном виде ->

Console.WriteLine ("отправленные данные в строке rs485: 0x" + result2.ToString ("X2"));

...