У меня очень странная проблема, я передачи 105 байт [] буфера, и постоянно приема 116 байт на другой стороне.SerialPort Write() посылает больше байт, чем в буфере передачи
Последние 2 байта на исходных данных является CRC16
код, который я использую для передачи есть, его зацикливание.
static SerialPort sp = null;
static void Main(string[] args)
{
//105 bytes send buffer
byte[] data = new byte[] {0xa,0x03,0x64,0x0e,0x15,0x00,0x01,0x00,
0x01,0x00,0x06,0x00,0x23,0x00,0x5f,0x00,
0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x25,0xb8,0x00,0x05,0xff,
0x23,0x00,0x00,0x00,0x00,0x00,0xa2,0x00,
0x00,0x02,0x20,0x00,0x04,0x00,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x01,0x00,0x1f,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xae,
0x1f
};
Console.WriteLine("Serial Port Test");
sp = new SerialPort("COM1", 19200);
sp.Open();
if (sp.IsOpen)
{
Console.WriteLine("Begining to transmit serial data..");
}
for (; ;)
{
Thread.Sleep(1000);
sp.Write(data,0,data.Length);
sp.DiscardOutBuffer();
}
Console.WriteLine("End of transmission");
Console.ReadKey();
}
Что я постоянно получать на другой стороне следующие 116 байт (Как странно это, что сообщение заканчивается с первоначальными CRC байт ??)
0xa, 0x03, 0x64, 0x0e, 0x15, 0x00, 0x01, 0x00,
0x01, 0x00, 0x06, 0x00, 0x23, 0x00, 0x5f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb8, 0x00,
0x05, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0xa2, 0x00, 0x00, 0x02, 0x20, 0x00, 0x04,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xae, 0x1f,
Любая помощь будет понятно, чтобы устранить эту проблему,
Спасибо
Итак, вы получаете двойные всплески во всех байтах 0xFF. У вас есть код приемника? – Corey
Привет, ресивер - это модуль Tibbo RS232 для IP. Я тестировал этот модуль с ведомым устройством Modbus, и он работает, это просто приложение .net, которое не может правильно передать исходные данные. –
Почему вы вызываете 'sp.DiscardOutBuffer()'? Если в аппаратном буфере последовательного порта есть какие-либо байты, они будут отбрасывать их. Кажется, что это происходит. –