На главную Наши проекты:
Журнал   ·   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
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> COM-порт+модем , Порядок работы
    Цитата Prince @
    Как организовать аппаратный контроль данных?

    Ты работаешь с Сом портом через TDCВ???Если да, то в DCB.Flags проверь биты установки режима HandShake для fDTRControl,FDsrSensitivity,fRTSControl.И обязательно должен быть включен fOutCTSFlow. Какие биты я не помню,но в нете по Flags полно инфы. Да кстати по поводу снятия трубки на другом конце. Года 2 назад я эту проблему решил путем подключения дополнительного девайса на МК51 к компу. Если интересно, могу поподробнее.
      Что такое TDCВ? Я пример приводил, как я с портом работаю.
        Аппаратный контроль данных - работа с линиями RTS/CTS. Они включаются модемом или компом, когда их буфер приема заполнен полностью.
        Есть еще DTR/DSR. Они устанавливаются когда приемный буфер заполнен на 3/4. (тоно насчет доли не уверен)

        Добавлено
        Это нужно в первую очередь для модема, иначе он может не успеть обработать твои данные и освободить буфер.

        Добавлено
        Цитата medved_68 @
        Года 2 назад я эту проблему решил путем подключения дополнительного девайса на МК51 к компу. Если интересно, могу поподробнее.

        Интересно. Особенно схематика подключения к линии.
          Prince
          Цитата Prince @
          Что такое TDCВ? Я пример приводил, как я с портом работаю.

          Ты с портом работаешь через WriteFile, readFile. Это я понял. Но как ты его настраиваешь перед работой, после того как открыл CreateFile???? Откуда он у тебя знает с какой скоростью работать, какие таймауты и т.д. Поэтому я и спрашиваю:
          Цитата medved_68 @
          Ты работаешь с Сом портом через TDCВ???

          Цитата Prince @
          Что такое TDCВ?

          Обволакивающий класс для структуры DCВ, в которой должны быть прописаны настройки компорта при его открытии. После открытия порта выполняется команда SetCommState (Handle,lpDCB)(за синтаксис не ручаюсь),которая настроит порт согласно тем данным, которые ты занес в структуру DCВ, а если в дельфях то TDCВ.Flags. И после этого только можно с ним работать. :yes: Может у тебя все в норме в проге и просто порт не настроен, судя по твоему последнему письму??? <_<
          Testudo
          Цитата Testudo @
          Интересно. Особенно схематика подключения к линии.

          Сегодня пороюсь в архивах.Там только был небольшой нюанс - вероятность определения 50-70%, а на блокированных линиях вообще грустно где то 10-20%, но у нас сейчас почти их не осталось, хотя кто его знает. Помню только, что сама линия заводилась на устройство через обычный диодный мост на КЦ407. Тогда меня порадовало одно-отсутствие ложных срабатываний, типа когда никто трубку не снял, а датчик сработал. И еще не сделал в свое время усреднение в зависимости от АТС к кому подключаешься, там несильно, но были различия во времени ответа станции. Но шел путем АОНа на ВМ80 + АОНа на Z80 это я точно помню.
            Цитата
            Аппаратный контроль данных - работа с линиями RTS/CTS. Они включаются модемом или компом, когда их буфер приема заполнен полностью.
            Есть еще DTR/DSR. Они устанавливаются когда приемный буфер заполнен на 3/4. (тоно насчет доли не уверен)

            А как именно с ними работать?
            Вот я отправляю какой-то буфер командой writefile. Как узнать, какой размер данных можно отправить за раз?
            И когда можно отправлять новую порцию данных?

            Добавлено
            Цитата
            После открытия порта выполняется команда SetCommState (Handle,lpDCB)(за синтаксис не ручаюсь),которая настроит порт согласно тем данным, которые ты занес в структуру DCВ, а если в дельфях то TDCВ.Flags. И после этого только можно с ним работать. Может у тебя все в норме в проге и просто порт не настроен, судя по твоему последнему письму???

            А, понял. Да, через DCB. Ну я посмотрел вначале настройки через GetCommState, а что именно и как нужно настроить для передачи голосовых данных, не знаю. Работает - и работает. Хотя вот уже знаю, что должен быть включён аппаратный контроль данных. Буду пробовать.
              Цитата Prince @
              А как именно с ними работать?
              Вот я отправляю какой-то буфер командой writefile. Как узнать, какой размер данных можно отправить за раз?
              И когда можно отправлять новую порцию данных?

              ты можешь отправить сразу хоть все данные только при работе в синхроне writefile тебе не вернет управление пока все не отправит. А если в этот момент случится авария на линии то все зависнет, причем наглухо. Я же тебе говорю: "переходи на асинхрон". Тогда структура Overlap тебе вернет количество реально переданных в линию байт, даже если случится внезапный Break. А момент когда можно отправить очередную порцию отслеживается наблюдением за событием EV_TXEMPTY (из буфера передачи послан последний символ). В это же время и произойдет установка события Overlap.Event, привязанного к записи.
                Если в синхроне, то отправлять данные модему желательно по одному байту, при этом проверяя сигнал CTS. Если он установлен - писать можно. Если нет - нужно подождать.
                  Testudo
                  Цитата Testudo @
                  Если в синхроне, то отправлять данные модему желательно по одному байту, при этом проверяя сигнал CTS

                  Почему???
                  Если настроен аппаратный контроль, то драйвер сам будет приостанавливать передачу по сбросу CTS и ждать пока пока модем его выставит.
                    Другими словами, нужно просто включить аппаратный контроль и забыть про этот самый контроль? Драйвер всё сделает сам? А мне остаётся только написать команду writefile и ждать, пока она не выполнится?
                    Цитата
                    ты можешь отправить сразу хоть все данные только при работе в синхроне writefile тебе не вернет управление пока все не отправит. А если в этот момент случится авария на линии то все зависнет, причем наглухо.

                    А можно ли избежать зависания, выставив таймауты?
                      Цитата medved_68 @
                      Если настроен аппаратный контроль, то драйвер сам будет приостанавливать передачу по сбросу CTS и ждать пока пока модем его выставит.
                      За модем не отвечаю.
                      Я же сказал, что работал с самодельными устройствами. У них делал все как положено, но аппаратный контроль ничего не проперал.
                        Цитата Prince @
                        Другими словами, нужно просто включить аппаратный контроль и забыть про этот самый контроль? Драйвер всё сделает сам? А мне остаётся только написать команду writefile и ждать, пока она не выполнится?

                        Да,если ты правильно настроишь TDCB.Flags. Надо ожидать завершения writefile и анализировать сколько байт передано, хотя она все равно не вернет управление пока все заявленное не передаст,если не выставлен таймаут по времени записи. Но его надо устанавливать при каждой операции, если передаешь блоки разной длинны, или на время передачи самого длинного блока, тогда нужен анализ, сколько байт передано, если меньше чем нужно, то повторить writefile с передачей того что не допередал.
                        Цитата Prince @
                        А можно ли избежать зависания, выставив таймауты?

                        Именно для этого они и придуманы!!!!
                        Testudo
                        Цитата Testudo @
                        Я же сказал, что работал с самодельными устройствами. У них делал все как положено, но аппаратный контроль ничего не проперал.

                        Значит неправильно настроил порт на аппаратный контроль. По умолчанию плевать он хотел на все управляющие сигналы. :D :lool:
                        А по самопалу могу сказать, что я по прерыванию от порта на микроконтроллере сразу выставляю CTS, затем считываю байт из регистра приемника, обрабатываю его, и только потом снимаю CTS. Т.е. делаю как ты говорил, но только со стороны самопала, со стороны компа это все уже продумали за меня.
                          Цитата medved_68 @
                          Значит неправильно настроил порт на аппаратный контроль. По умолчанию плевать он хотел на все управляющие сигналы.
                          А по самопалу могу сказать, что я по прерыванию от порта на микроконтроллере сразу выставляю CTS, затем считываю байт из регистра приемника, обрабатываю его, и только потом снимаю CTS. Т.е. делаю как ты говорил, но только со стороны самопала, со стороны компа это все уже продумали за меня.
                          И плохо, что думать не хочешь.
                            Testudo
                            Цитата Testudo @
                            И плохо, что думать не хочешь.

                            Изобретать велосипед конечно полезно, но зачем??? :wacko:
                              Цитата
                              Да,если ты правильно настроишь TDCB.Flags

                              А как правильно настроить?
                                ExpandedWrap disabled
                                  А как правильно настроить?

                                Просто обнули DCB.Flags и хлопни нужные маски Or. Файл в аттаче. :rolleyes:
                                Прикреплённый файлПрикреплённый файлflags_дсв.doc (22 Кбайт, скачиваний: 218)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0467 ]   [ 15 queries used ]   [ Generated: 19.07.25, 07:44 GMT ]