Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  04:32[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83691

07-11-2019 12:13
Добрый день. При попытке обмена по эмулированому COM порту получаю ошибку "WriteFile function failed (Error: 433)".
Не могу найти, что это за ошибка. Подскажите, пожалуйста, кто в курсе.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

26-02-2020 04:15 | Комментарий к предыдущим ответам
Вас задело? Извините. Просто устаю повторять, что СОМ-порт всего навсего СДВИГОВЫЙ РЕГИСТР. Причем тактовые импульсы на сдвиг подаются через ключ. ВСЕ АБСОЛЮТНО настройки работы железа прописываются в железо, которое (если указано) выставляет прерывания и не более того. Начиная с 32-х разрядов, API позволяет полностью контролировать работу СОМ-порта, добиваясь максимально того, на что он способен.
Программа-эмулятор, которая просто плюется в порт с заданным темпом и скоростью не взирая ни на что, и при этом переполняет свой буфер, НАПИСАНА НЕВЕРНО. Предполагаю, что методом тупого таймера. А должна использовать евент TX_EMPTY и отдельный поток обработки всех эвентов (из числа Вами же разрешенных). Обрабатывая этот эвент, Вы ОДНОЗНАЧНО НИКОГДА не забьете свой буфер передачи.
Что касается "15 лет ..." - то это очень даже повод, и даже больше того - обязанность не поучать, а объяснять, что Вы не первый и не последний, кто наступает на грабли. При том при сем, что железо за последние 25 лет точно не менялось, а с приходом 32-х разрядов не менялись и драйвера.
Если же Вы работаете с USB/COM, то по личному опыту из трех брендов конца прошлого века пришлось выкинуть два под конкретную задачу. Устойчиво работал только один. Но опять же... Задача была работать в темпе около 57600 и скорости 115200. Согласитесь, что мало железа, которое бы требовало таких скоростей.

13-02-2020 02:02
To Василий. Видите ли какое дело... С чего это вы в своих сообщениях вы используете такой поучительный тон?  нормальные программы все-таки не плюются как верблюд, а все-таки "общаются". Да? А вот программа, которая эмулирует поведение аппаратуры передающей телеметрию (аппаратуре не нужна, при этом, обратная связь), она как нормальная или нет? Настройки НЕ ждать DSR или CTS. Иногда возникает переполнение если программа "приемник" не принимает данные. При чем именно не всегда так, и не для всех эмуляторов. Драйвера то люди пишут, что там у них не так в драйвере смысла разбираться нет, просто такой факт имеет место быть. Если кто-тоза лет 15-ть активного программирования ПО с подобным железом НИ РАЗУ такой ошибки не получал это не повод тут других поучать.

18-12-2019 11:31 | Комментарий к предыдущим ответам
Видите ли какое дело... Как только Вы настройками порта указываете драйверу "наплевать на состояние приемника" (в переводе на нормальный язык программиста железа - не взирая на состояние модемных линий), то в драйвере никак не может переполнится буфер, если Вы конечно не будете тупо копипастить код откуда только можно. Допускаю единственную возможность некоего переполнения буфера, если при установленном размере буфера в 1 кб, Вы попытаетесь записать в порт 1 мб. Но это не будет переполнением буфера - API порта возвратив Вам фэлс, как бы скажет ... я думаю расшифровывать не нужно. При открытии же порта на приемной стороне и полном отсутствии желания читать принятое, не смотря на эвенты - буфер просто будет перезаписываться (правда помню такое только под 16-ти разрядными Виндами - там API был скуден до невозможности).
Все мои рассуждения касаются случаев, когда код автору понятен, не смотря на копи-паст, автор понимает механизм работы компонента обслуживающего порт...
Случаи кода типа

WriteFile(...);
while not ReadFile(...) do
  Sleep(1000);


оставляю без рассмотрения.

17-12-2019 23:42 | Комментарий к предыдущим ответам
To Василий.
Александр Малыгин высказал предположение о переполнении буфера в драйвере. Из вашего же первого комментария у задающего вопрос может сложится такое впечатление, что буфер никак не может переполнится, хотя бы потому, что за лет 15-ть активного программирования ПО с подобным железом НИ РАЗУ такой ошибки не получал.
Это конечно прекрасно, но смысл моего комментария был в том, что я лично с такой проблемой сталкивался (и это пока не важно как там настроены DSR и CTS), так что задающему вопрос все же я думаю полезно не сбрасывать эту версию со счетов и потом уже разбираться с DSR и CTS при необходимости. Что же касается моей программы, то я, естественно не настраиваю сом порт непосредственно, в том смысле что вызываю  CreateFile(). Я использую компонент, у которого кстати в есть настраиваемое свойство FlowControl в котором соответствующие флаги OutCtsFlow и OutDsrFlow равны false, при этом сообщение о переполнении буфера для некоторых устройств может возникать.

18-11-2019 23:08 | Комментарий к предыдущим ответам
Прочитайте http://delphikingdom.com/asp/viewitem.asp?catalogid=1126 - тут есть ответы на все косяки.

18-11-2019 23:06 | Комментарий к предыдущим ответам
2 W0lt
Это каким образом на Вашем компе может переполняться буфер, если "железяка" не читает отправленное Вашей программой? Да очень просто. Ваша программа НИ ХРЕНА не отправляет ничего, это делает драйвер порта. Ваша программа настроила его так, чтобы он ждал DSR или CTS, которые просто некому выставить - "железяка" отсутствует физически, или у нее даже нет концов DTR или RTS. Ясен пень, что буфер переполнится. Можете еще открыть буфер в 1 кБ, а "плюнуть" пакет в 1 мБ. Правда тут варианты. Не знаю как работает драйвер порта в виндах старше 7-ки.

17-11-2019 00:24
Проблема переполнения буфера совершенно точно может возникать, если со второй стороны данные не читаются. По своей работе имею немалый опыт работы с разными устройствами. Например такая проблема бывает с USB to RS-232 устройствами. В сообщении об ошибке правда так и пишут что то типа "outpt buffer is full".В чистых эмуляторах, кстати не сталкивался, наоборот в том эмуляторе, что использую сейчас когда создаю bridge COM2-COM3 (например) для обмена двух программ по COM, как раз можно не парится если принимающая не запущена, при использовании же USB to RS-232 обязательно проблема возникнет, поэтому для отладки как раз и использую эмулятор. Но что там у автора за эмулятор, мы же не знаем, вполне возможно, у него буфер и переполняется.

16-11-2019 08:11 | Комментарий к предыдущим ответам
Я пользовался сом0сом... Простенький сниффер на втором порту и СОМ1 (например) с реальной железкой. Фирменную программу вешаешь на первый порт, и дело в шляпе... Но мне даже в голову не приходило, не застартовав сниффер запускать фирменную программу. Опять же нормальные программы все-таки не плюются как верблюд, а все-таки "общаются".

15-11-2019 14:09 | Комментарий к предыдущим ответам
Василий, я по фразе автора "При попытке обмена по эмулированому COM порту" понял, что речь идёт о полной эмуляции компорта, т.е. когда за драйвером вообще никакого устройства нет. Как например, драйвер com0com.
Компорт, созданный таким драйвером, можно открыть, а спаренный с ним другой такой компорт - не открывать, и тогда со стороны первого возможно переполнение буфера, если программа плюётся в компорт.

Возможно, моя догадка неверна, но автор не соизволил объясниться.

15-11-2019 11:50 | Комментарий к предыдущим ответам
И причем тут другая сторона? Разве автор что-то сказал про модемные концы? Если в настройках ничего нет про DTR и RTS - вряд ли драйвер при передаче интересуется состоянием DSR CTS, поэтому он "плюется как верблюд" и ему глубоко ... на другую сторону. Типа как UDP - "у нас ушло, а у вас проблемы".
Без кода настройки порта и кода записи/чтения трудно что-то сказать... хотя бы потому, что за лет 15-ть активного программирования ПО с подобным железом НИ РАЗУ такой ошибки не получал.

08-11-2019 15:26
Возможно, с той стороны порт никем не открыт или не читается, и поэтому буфер переполнился в драйвере.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Раз дощечка, два дощечка будет лесенка. Раз словечко, два словечко, будет ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования