Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 928

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Я не спец в Дельфи, но с грехом пополам написал программку для работы с виртуальным СОМ портом, использующую Win API. (на самом деле я собрал ее из различных примеров, найденных в сети). Хотел еще включить в программу контроль паритета при обмене, но примеров найти не могу. Может подскажете, как это делается или ткнете носом в примерчик. Заранее спасибо.

ttron Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: ttron (статус: Посетитель)
Вопрос отправлен: 23 сентября 2008, 11:49
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, ttron!
Если уж так сильно хочеться писать на АПИ - пишите. Но не стоит даром тратить время. Для работы с COM портом я использую вот эту библиотеку. Она не слишком далеко ушла от апи, но есть хорошей объёрткой. Изучение исходников ее даст ответы на многие вопросы.
По поводу паритета. Вы должны в коде создавать структуру и заполнять её (без этого никак). вот и допишите туда такое

//эти две строки обязаны быть у Вас, если у Вас АПИ
FillChar(dcb, SizeOf(dcb), 0);
  dcb.DCBlength := SizeOf(dcb);
//.....
//по типу паритета заполняем поле
  case parity of
    'N', 'n': dcb.parity := 0;
    'O', 'o': dcb.parity := 1;
    'E', 'e': dcb.parity := 2;
    'M', 'm': dcb.parity := 3;
    'S', 's': dcb.parity := 4;
  end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 сентября 2008, 12:04
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 9 октября 2008, 20:48; участников в обсуждении: 3.
ttron

ttron (статус: Посетитель), 23 сентября 2008, 21:57 [#1]:

Спасибо, но переделывать уже не хочется, тем более, что прога работает. Как устанавливать поле DCB я знаю. Видимо API возьмет на себя функции установки бита паритета в посылке при прередаче. Проблема в том, как обнаружить, что произошла ошибка паритета при приеме? Я обязательно изучу тексты библиотеки, но слету не смог там обнаружить ничего подобного. Может подскажете, где это, я попробую сделать по аналогии. Заранее спасибо.
Вадим К

Вадим К (статус: Академик), 23 сентября 2008, 23:21 [#2]:

Ну так это и включает. Просто сам контроль идет на аппаратном уровне и мешаться туда виндовс не даст. Если сбой произошёл - то просто потеряются данные и сгенерируется ошибка.
В приведённой выше библиотеке ищите по слову ErrRxParity.

Если хочеться внятных ответов надо писать конкретно что хочеться.

И ещё. Если этот параметр не передаётся железякой, которая подключена к СОМ порту, то включай/не включай - толку не будет. Точнее - просто перестанет работать. Правда в некоторых случаях девайс умеет определять наличии, но это скорее исключение.
Учитывая всё вышесказанное, подумайте, скорее всего, что бы включить контроль четности, надо будет проверить девайс. А добавить одну строку в программу - это не переделка. это так.
Галочка "подтверждения прочтения" - вселенское зло.
ttron

ttron (статус: Посетитель), 24 сентября 2008, 10:29 [#3]:

Спасибо. Под переделкой я понимал переход с АПИ на использование вышеупомянутой библиотеки, этого не хотелось бы. Одну-две строки добавить к рабочей программе, это не проблема, согласен. Боюсь, только, этим не обойдется, ну это мои проблемы.
Железку я сам делал, поэтому она будет слать то, что мне потребуется :)
В любом случае, спасибо за наводку.
ANBsoft

ANBsoft (статус: Студент), 9 октября 2008, 01:17 [#4]:

Может еще актуально, сам только что 2 дня провозился с подобной проблемой. Очень рекомендую:
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1126
ttron

ttron (статус: Посетитель), 9 октября 2008, 20:48 [#5]:

Спасибо, полезная информация.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.04 сек.