На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> COM-порт , Com-порт cp2102
    А и вот еще что, хорошо бы перед GetCommState обнулить dcb, как это в дельфи тебе виднее

    Добавлено
    Цитата Igor_Muhin @
    Portmon на CP2102 вообще ничего не показывает.


    И терминал при этом отрабатывает?

    Добавлено
    В CreateFile последний параметр в nil поставь

    Добавлено
    Если активности нет, по идеи ты сюда должен свалить
    eReady.Text := 'Ошибка' ;

    потому как порт не открылся
      Вместо FILE_ATTRIBUTE_READONLY 0 ничего не дает.

      dcb.DCBlength = sizeof(DCB); ничего не дает.

      Portmon активности никакой не показывает.

      Зато после всех манипуляций и порты на других микросхемах стали вести себя так же.

      Добавлено
      Ну, да:
      ExpandedWrap disabled
        if (Com_Port_Handle = INVALID_HANDLE_VALUE) then
          begin
           eReady.Text := 'Ошибка' ;
           exit ;
           end ;

      Но ошибки, получается нет, т. е. Handle правильный.
      Сообщение отредактировано: Krid -
        Хорошо, верни в CreateFile как было, а со структурой dcb
        сначала ее обнуляешь, потом присваиваешь длину, потом вызов getCommState и нули?

        Добавлено
        Если в терминале работает, ну не знаю. Можно посмотреть в сторону таймаутов

        ExpandedWrap disabled
          COMMTIMEOUTS CommTimeOuts;
          CommTimeOuts.ReadIntervalTimeout := 0xFFFFFFFF;
          CommTimeOuts.ReadTotalTimeoutMultiplier := 0;
          CommTimeOuts.ReadTotalTimeoutConstant := TIMEOUT;
          CommTimeOuts.WriteTotalTimeoutMultiplier := 0;
          CommTimeOuts.WriteTotalTimeoutConstant := TIMEOUT;
           
          SetCommTimeouts(m_Handle, &CommTimeOuts)
        Сообщение отредактировано: Krid -
          Таймауты пока отключены. Вернулся назад, выполняю только процедуру открытия порта CreateFile и процедуру закрытия. Для CP2102 Portmon никакой активности вообще не показывает, для других микросхем и портов минимальная активность в три строчки имеется. Только что-то этот Portmon систему портит, порты как бы остаются после их изъятия, некоторые становятся неправильным оборудованием, вплоть до жесткий диск стал несистемным. Возможно, все-таки где-то на уровне CreateFile что-то идет не так.

          Добавлено
          Когда в CreateFile задаю имя порта как Pchar('\\.\'+ Port_Name) вместо Pchar(Port_Name), то Portmon активность для CP2102 показывает, GetCommState и SetCommState вроде бы тоже работают, т. е. вроде бы пока процесс пошел. А что такое здесь это '\\.\' и что оно дает?

          Добавлено
          Получается что вместо COM10 надо записать \\.\COM10?
            Igor_Muhin, ter_nk_

            M
            Используем тег [code] для добавления текста программы в пост! Устное предупреждение! Читаем правила!
            Сообщение отредактировано: Krid -
              В общем, когда задаю в CreateFile имя порта как Pchar('\\.\'+ Port_Name) вместо Pchar(Port_Name), где Port_Name = 'COM10' (получается программно), то порт на CP2102 (действительно COM10 по диспетчеру устройств) устанавливается нормально и даже уже удается иногда прочитать правильные числа с прибора. Зачем нужна добавка '\\.\', пока не понял. Только Portmon при использовании для контроля портит дело, приходится перезагружать компьютер.
                Цитата Igor_Muhin @
                В общем, когда задаю в CreateFile имя порта как Pchar('\\.\'+ Port_Name) вместо Pchar(Port_Name), где Port_Name = 'COM10' (получается программно), то порт на CP2102 (действительно COM10 по диспетчеру устройств) устанавливается нормально и даже уже удается иногда прочитать правильные числа с прибора. Зачем нужна добавка '\\.\', пока не понял. Только Portmon при использовании для контроля портит дело, приходится перезагружать компьютер.


                Там где порт больше девятого надо '\\.\' ставить. При открытии файла где длина пути больше 255 тоже надо добавлять "абсолютный" путь.
                  Понятно, спасибо. А корректно этот префикс к именам первых портов (COM1-COM9) тоже добавлять для простоты? Я пока ко всем добавляю, вроде бы работает.
                    Цитата Igor_Muhin @
                    Понятно, спасибо. А корректно этот префикс к именам первых портов (COM1-COM9) тоже добавлять для простоты? Я пока ко всем добавляю, вроде бы работает.


                    Не обязательно добавлять. Я кстати не знал, что выше 9 надо добавлять, в дотнетовском проекте когда делал, у меня было до фига ком-портов и все работало.
                      > корректно этот префикс к именам первых портов (COM1-COM9) тоже добавлять для простоты?
                      Да, корректно. (Это UNC-нотация)
                        Igor_Muhin после CreateFile() и настройки порта CP2102 обязательно поставь задержку перед передачей данных. Сталкивался с некоторым такими девайсами (завит от настроения производителя) которые не воспринимали начальную посылку данных.
                          та же проблема. 1 в 1.
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0351 ]   [ 17 queries used ]   [ Generated: 28.03.24, 15:35 GMT ]