C#串行链路字节通信错误
我想问你,因为我无法解决我的问题。我编程了MCU和PC(windows)之间的通信,但出现了一个问题 通信类型:字节 消息结构: PC->MCU AA 55 MESLEN MESSID PACKID[1]PACKID[0]数据CRC; MCU->PC 55 AA MESID DATA1 DATA0 CRC(固定大小) 其中,AA 55(55 AA)是消息头 通信原则: PC发送了大量数据(带有mess ID、packedID等) MCU接收数据,如果数据正常(标头和CRC正常),则发送一个带有相同MESID和packedID的响应,以确认之前的消息。否则,“看门狗”将重新发送消息(并写入控制台超时) 除了一个案例外,通信工作没有问题。在DATA0=0x1A和DATA1=0x00的情况下,通信完全失败 我使用示波器检查通信,该消息正确发送,但有任何延迟等 具体问题: 1) 只有在这种情况下,通信才失败。 2) 只有在这种情况下,PC从串行链路接收字节时延迟较大,但数据发送正确(在示波器上检查) 我试过: 更改超时 更改接收字节treshold(现在为1,但我测试了7B,但问题相同) 记录功能源:C#串行链路字节通信错误,c#,byte,C#,Byte,我想问你,因为我无法解决我的问题。我编程了MCU和PC(windows)之间的通信,但出现了一个问题 通信类型:字节 消息结构: PC->MCU AA 55 MESLEN MESSID PACKID[1]PACKID[0]数据CRC; MCU->PC 55 AA MESID DATA1 DATA0 CRC(固定大小) 其中,AA 55(55 AA)是消息头 通信原则: PC发送了大量数据(带有mess ID、packedID等) MCU接收数据,如果数据正常(标头和CRC正常),则发送一个带有相
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");
}
静态无效端口\u DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
int BytesNr=port.BytesToRead;
int InputCRC=0;
Uart_alldata=false;
字节[]临时数据=新字节[10];
如果(字节数==7)
{
//读取端口(tempData,0,字节数);
for(int i=0;i
大约200条以前的信息没有问题
读取字节:7B
55-AA-02-00-17-CC-1C-00-00-00
读取字节:7B
55-AA-02-00-17-CC-1C-00-00-00
读取字节:7B
55-AA-02-00-18-CC-1B-00-00-00
读取字节:7B
55-AA-02-00-18-CC-1B-00-00-00
读取字节:7B
55-AA-02-00-19-CC-1A-00-00-00
读取字节:7B
00-00-00-00-00-00-00-00-00-00
55-AA-02-00-19-CC-1A-00-00-00
读取字节: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-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-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-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-00
你知道问题出在哪里吗??
谢谢你的想法
问候
L.Beran编辑:数据接收正常(标题、数据本身和CRC),但发生了移位。我认为如果您使用更具体的标记,您的问题更有可能得到答案。我在谷歌上搜索到MCU之前并不知道它是什么,但我敢打赌有一些硬件/嵌入式标签可以用来引起那些人的注意。