Ошибка при работе с COM-портом
Добавлено: 24.01.2015 20:07:37
Здравствуйте!
Пульт, собранный на микроконтроллере, периодически посылает по RS485 на компьютер запросы, компьютер - отвечает. Однако, пульт сообщает, что ответ содержит ошибки. Операционная система Windows-7 x32, среда разработки Lazarus-1.3. Пробовал то же самое на Lazarus-1.2.6. Для оаботы с портом использовал функции WinAPI, компоненты Sdpo и Cportlaz_v1.0.0. (т.е в результате испытал 6 программ, написанных на Lazarus, эффект тот же самый). Аналогичную программу написал на С++ - всё прекрасно работает. Снял осциллограммы c выхода преобразователя RS232/RS485:
Явно видно, что при использовании Lazarus, длительность передачи "0" меньше, чем в программе, написанной на С++. Возникло подозрение, что какая-то проблема, связанная с RTS, поэтому снял осциллограмму непосредственно на выходе COM-порта компьютера:
Здесь так же видно, что искажения связаны с длительностью передачи нуля.
Для контроля обмена использовал сниффер Filemon - информация программами Lazarus и С++ передаётся одна и та же, т.е. вариант, что неправильно формируется ответ - исключен.
Испробовал множество вариантов, но Lazarus стабильно выдаёт одни и те же искажения (приём, к стати, работает нормально).
Вопросы:
1. Приходилось ли кому-нибудь работать с COM-портом в связке Lazarus - Windows-7?
2. Чем могут быть вызваны такие искажения?
Пульт, собранный на микроконтроллере, периодически посылает по RS485 на компьютер запросы, компьютер - отвечает. Однако, пульт сообщает, что ответ содержит ошибки. Операционная система Windows-7 x32, среда разработки Lazarus-1.3. Пробовал то же самое на Lazarus-1.2.6. Для оаботы с портом использовал функции WinAPI, компоненты Sdpo и Cportlaz_v1.0.0. (т.е в результате испытал 6 программ, написанных на Lazarus, эффект тот же самый). Аналогичную программу написал на С++ - всё прекрасно работает. Снял осциллограммы c выхода преобразователя RS232/RS485:
Явно видно, что при использовании Lazarus, длительность передачи "0" меньше, чем в программе, написанной на С++. Возникло подозрение, что какая-то проблема, связанная с RTS, поэтому снял осциллограмму непосредственно на выходе COM-порта компьютера:
Здесь так же видно, что искажения связаны с длительностью передачи нуля.
Для контроля обмена использовал сниффер Filemon - информация программами Lazarus и С++ передаётся одна и та же, т.е. вариант, что неправильно формируется ответ - исключен.
Испробовал множество вариантов, но Lazarus стабильно выдаёт одни и те же искажения (приём, к стати, работает нормально).
Вопросы:
1. Приходилось ли кому-нибудь работать с COM-портом в связке Lazarus - Windows-7?
2. Чем могут быть вызваны такие искажения?