1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Работа с Com портом

Тема в разделе "Delphi - программирование", создана пользователем Deamon, 3 дек 2006.

Статус темы:
Закрыта.
  1. Deamon

    Deamon Гость

    Репутация:
    0
    Прошу прощения, если подобная тема уже существует. по запросу "232" и "com" поиск ничего не выдал.

    Я создал приложение, которое обращается к com порту через CreateFile. Но по ReadFile программа выдает неверные(покоцанные) данные.

    Я подозреваю, что это из-за того, что я использую неверные настройки в dcb структуре. А именно в поле Flags. Смотрю в сторону флагов fDtrControl fRtsControl.

    Весь инет облазил, не нашел нигде где-бы показывался пример установки флагов этих флагов. Дело в том, если я поле flags определяю, как
    Код:
    dcb.Flags:=dcb.Flags or fDtrControl;
    то вызов SetCommState происходит нормально. А при
    Код:
    dcb.Flags:=dcb.Flags or fDtrControl or fRtsControl*DTR_CONTROL_ENABLE;
    или
    Код:
    dcb.Flags:=dcb.Flags or fDtrControl or fRtsControl;
    SetCommState выдает false =(.

    И вообще возможно, что ReadFile получает покарёжанную инфу именно из-за этих флагов?

    Заранее спасибо за ответ.
     
  2. zubr

    zubr Гость

    Репутация:
    0
    Вот как я инициализирую структуру DCB в своем компоненте KlientServComConnect:
    Код:
    Const
    dcb_Binary			 = $00000001;
    dcb_ParityCheck		 = $00000002;
    dcb_OutxCtsFlow		 = $00000004;
    dcb_OutxDsrFlow		 = $00000008;
    dcb_DtrControlMask	 = $00000030;
    dcb_DtrControlDisable  = $00000000;
    dcb_DtrControlEnable	= $00000010;
    dcb_DtrControlHandshake = $00000020;
    dcb_DsrSensivity		= $00000040;
    dcb_TXContinueOnXoff	= $00000080;
    dcb_OutX				= $00000100;
    dcb_InX				 = $00000200;
    dcb_ErrorChar		  = $00000400;
    dcb_NullStrip		  = $00000800;
    dcb_RtsControlMask	 = $00003000;
    dcb_RtsControlDisable  = $00000000;
    dcb_RtsControlEnable	= $00001000;
    dcb_RtsControlHandshake = $00002000;
    dcb_RtsControlToggle	= $00003000;
    dcb_AbortOnError		= $00004000;
    dcb_Reserveds		  = $FFFF8000;
    
    
    dcb.Flags:=dcb.Flags and (not dcb_ParityCheck);
    dcb.Flags:=dcb.Flags or dcb_OutxCtsFlow;
    dcb.Flags:=dcb.Flags and (not dcb_OutxDsrFlow);
    dcb.Flags:=dcb.Flags and (not dcb_DtrControlMask);
    dcb.Flags:=dcb.Flags or dcb_DtrControlEnable;
    dcb.Flags:=dcb.Flags and (not dcb_DsrSensivity);
    dcb.Flags:=dcb.Flags or dcb_TXContinueOnXoff;
    dcb.Flags:=dcb.Flags and (not dcb_OutX);
    dcb.Flags:=dcb.Flags and (not dcb_InX);
    dcb.Flags:=dcb.Flags and (not dcb_ErrorChar);
    dcb.Flags:=dcb.Flags and (not dcb_NullStrip);
    dcb.Flags:=dcb.Flags and (not dcb_RtsControlMask);
    dcb.Flags:=dcb.Flags or dcb_RtsControlEnable;
    dcb.Flags:=dcb.Flags and (not dcb_AbortOnError);
     
  3. Deamon

    Deamon Гость

    Репутация:
    0
    Спасибо огромное за ответ.

    А может быть такое, что информация с порта портиться именно из-за неправельной настройки этих флагов?
     
  4. zubr

    zubr Гость

    Репутация:
    0
    Причин может быть много, в том числе и флаги, может быть неправильная синхронизация, скорость порта не соответствовать устройству, паритет и т. п.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей