У меня возникает много проблем, пытаясь получить последовательный порт для получения правильного сообщения. Он продолжает обрезать сообщения. Вот мой код, и я попытаюсь проработать после кода.Проблемы с SerialPort Class
public SerialComms(SerialPort sp)
{
this.sp = sp;
this.sp.Open();
this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
do
{
Console.WriteLine("port open waiting message");
Console.ReadKey();
} while(!_terminate);
this.sp.Close();
}
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string dataReceived;
StringComparer strComp = StringComparer.OrdinalIgnoreCase;
SerialPort sp = (SerialPort)sender;
int i = sp.BytesToRead;
byte[] _byte = new byte[i];
char[] _char = new char[i];
sp.read(_byte, 0, i);
dataReceived = Encoding.UTF8.GetString(_byte);
//dataReceived = new string(_char);
//dataReceived = sp.ReadExisting();
if (strComp.Equals("00000000000000"), dataReceived))
_terminate = true;
Console.WriteLine(dataReceived);
}
Теперь у меня есть тестовый проект, который мы используем для тестирования наших серийных серий в производстве с использованием устаревшего программного обеспечения - я знаю, что это нормально. Я подключил последовательный монитор к порту, и сообщение, поступающее через передачи, не вызывает никаких проблем. Когда я отправляю сообщение, такое как, первый раз через него обычно проходит через штраф, а на принимающей стороне монитор показывает, что он проходит; однако, когда он печатает на консоль, он обрезается после первого сообщения. Я прикрепляю скриншоты сообщения, проходящего через монитор порта и выход на консоль (улыбающееся лицо и сердце, которые отображаются, преобразуются в префиксные байты, почему это сердце и смайлик, о которых я не знаю)
Хорошо, поэтому я не могу опубликовать изображение из-за того, что у меня недостаточно репутации, чтобы сделать это. Я напишу, как выглядит вывод на консоль ниже (в этом случае по какой-то причине оно усекло и первое сообщение :()
На мониторе последовательного порта передается сообщение (я отправил его три с интервалом в несколько секунд "между каждым отправкой сообщения):
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .123456789.
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 +0,123456789. 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 +0,123456789.
на консоли я получил следующее (☺ ♥ и символы 02 и 03 , они STX и ETX сообщение, которое является стандартом для наших передач):
☺123456
789♥
☺
4 ♥
☺
4 ♥
Эта проблема сводит меня с ума !!! Пожалуйста помоги! Унаследовано использование устаревшего MSCommLib, и мы переходим к .Net 4
Я заменил ваши заполнители настоящими символами, если я их отменил, пожалуйста, исправьте. Для скриншотов, ссылки на сайт, например, http://imgur.com/, и более высокий пользователь rep могут повернуть ссылки на изображения. –