C#串行链路字节通信错误

时间:2017-01-23 14:28:28

标签: c# byte

我想问你,因为我无法解决我的问题。我编写了MCU和PC(窗口)之间的通信,但是存在问题。

沟通类型:字节 消息结构: PC-> MCU AA 55 MESLEN MESSID PACKID [1] PACKID [0] DATA CRC; MCU-> PC 55 AA MESID DATA1 DATA0 CRC(固定大小)。

其中AA 55(55 AA)是邮件标题

沟通原则: PC发送了一些数据(带有乱码ID,打包ID等)

MCU接收数据,如果数据正常(Header和CRC正常),则发送具有相同messID和packedID的响应以确认先前的消息。如果没有,“watchdog”重新发送消息(并写入控制台超时)。

除一例外,通讯工作没有问题。如果DATA0 = 0x1A且DATA1 = 0x00,则通信完全失败。

我使用测试仪检查通信,并且此消息正确发送,有任何延迟等。

具体问题: 1)仅在这种情况下,通信失败。 2)仅在这种情况下,PC从串行链路接收大延迟的字节,但数据发送正确(在振镜上检查)。

我试过了: 改变超时 更改接收字节阈值(现在为1,但我测试了7B,但它是同样的问题)

REC。功能来源:

      static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        int BytesNr = port.BytesToRead;
        int InputCRC = 0;
        Uart_alldata = false;
        byte[] tempData = new byte[10];


        if (BytesNr == 7)
        {
            // port.Read(tempData, 0, BytesNr); 
            for (int i = 0; i < BytesNr; i++) tempData[i] = Convert.ToByte(port.ReadByte()); // alt for test
            Array.Copy(tempData, inbuffer, BytesNr);
            Uart_alldata = true;
            string data = BitConverter.ToString(tempData);
            Console.WriteLine(data);
        }
        else
        {
            // port.Read(tempData, 0, pocetB); 
            for (int i = 0; i < BytesNr; i++) tempData[i] = Convert.ToByte(port.ReadByte());
            Array.Copy(tempData, inbuffer, BytesNr);

            string data = BitConverter.ToString(tempData);
            Console.WriteLine(data);
            port.DiscardInBuffer();
        }

        try
        {
            port = new SerialPort(ArrayComPortsNames[cislo_portu], 9600, Parity.None, 8, StopBits.One);
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            port.ReadBufferSize = 4096;
            port.WriteBufferSize = 4096;
            port.WriteTimeout = 500;
            port.ReadTimeout = 50;
            port.RtsEnable = true;
            port.DtrEnable = true;
            port.ReceivedBytesThreshold = 1;


            // Begin communications
            port.Open();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);

        }
        Console.WriteLine("Port otevřen");
    }

about 200 previous messages without problem ReadBytes:7B 55-AA-02-00-17-CC-1C-00-00-00 ReadBytes:7B 55-AA-02-00-17-CC-1C-00-00-00 ReadBytes:7B 55-AA-02-00-18-CC-1B-00-00-00 ReadBytes:7B 55-AA-02-00-18-CC-1B-00-00-00 ReadBytes:7B 55-AA-02-00-19-CC-1A-00-00-00 ReadBytes:7B 00-00-00-00-00-00-00-00-00-00 55-AA-02-00-19-CC-1A-00-00-00 ReadBytes:7B 00-00-00-00-00-00-00-00-00-00 55-AA-02-00-1A-00-00-00-00-00 00-00-00-00-00-00-00-00-00-00 CC-19-00-00-00-00-00-00-00-00 Timeout Timeout Timeout 55-AA-02-00-1A-00-00-00-00-00 00-00-00-00-00-00-00-00-00-00 CC-19-00-00-00-00-00-00-00-00 Timeout Timeout Timeout 55-AA-02-00-1A-00-00-00-00-00 00-00-00-00-00-00-00-00-00-00 CC-19-00-00-00-00-00-00-00-00 Timeout Timeout Timeout 55-AA-02-00-1A-00-00-00-00-00 00-00-00-00-00-00-00-00-00-00 CC-19-00-00-00-00-00-00-00-00

你有什么想法问题吗? 谢谢你的想法。

此致

L.Beran

0 个答案:

没有答案