2013-06-16 3 views
0

Я знаю, что этот вопрос не нов, и для Google можно использовать код кода/класс для обмена сообщениями rs232. Однако теперь я уже использую класс. Но это работает иногда, но очень часто нет. Связь просто прекращается. . Мне потребуется много времени, чтобы прочитать все концепции последовательной связи и отладить этот код.Связь rs232 часто создает ошибку

Могу ли я получить некоторую помощь от SO?

Спасибо,

PS: кстати, в моем проекте, мне нужно часто послать строку (массив символов) на другой rs232 терминал непрерывно или в некоторых определенных случаях. Может ли ошибка быть вызвана не закрытием, повторным открытием RS232/COM-дескриптора вместе с каждым сообщением?

Пожалуйста, я включил мой код

RS232.cpp RS232.hpp RS232_client

Edit01:

RS232_client является код, написанный на другой стороне. Моя сторона - это компьютер с использованием win7, проект скомпилирован с MSVS2008

Об ошибке в моем коде иногда бывает, когда я называю «int RS232 :: Write (double * joints)», он вызывает ошибку, и передача останавливается , не показывая ничего на стороне ПК

Edit02:

Как следует Stratton @ Крис, моя проблема может быть от плохого письменного класса rs232 без необходимой проверки. Поэтому я тестировал свой проект с другим классом, загруженным из CodeProject CSerial. Я поставил код здесь для справки

Serial.cpp Serial.h

И это, как я адаптировать этот класс для моего кода:

my adaptation

Таким образом, процесс со стороны ПК это то же самое, т.е. отправить строку, ждать, чтобы прочитать 's' или 'S', и отправить «q \ r» для выхода.

за 3 шага выше с новым кодом, я могу сделать шаг 1 OK, но на шаге 2, он висит там, как будто нет (чтение) событие вызывается

 // Wait for an event 
     lLastError = serialPort.WaitEvent(); // it waits here forever!!!! 
     if (lLastError != ERROR_SUCCESS) 
      ShowError(serialPort.GetLastError(), _T("Unable to wait for a COM-port event.")); 
+0

Поскольку у меня нет большой концепции в работе. Я не могу определить, в чем проблема. –

+0

FYI, использующий 'GetCommState', почти всегда ошибается. Вы не хотите наследовать настройки из последней программы для использования порта, вы хотите изменить их все.Единственное, что подходит для GetCommState, - это проверка конфигурации для устранения неполадок, а не при подключении. –

+0

Я тестировал оба случая, закрывал и открывал порт при каждом соединении (что похоже на то, что вы сказали - GetCommState во время связи), и только один раз открывается, и оба не работают –

ответ

0

я, наконец, может иметь RS232, который освобождает от внезапной внезапной остановки. Здесь я загружаю новую версию RS232.cpp

Единственная разница между двумя версиями в новом RS232_open(), я не использую GetCommState. Вместо этого конфигурация устанавливается BuildCommDCBA с использованием строки настройки baudr

Спасибо за помощь SO!

Смежные вопросы