- Vote on answer
- posted
17 years ago
FT232
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
X-Virus-Scanned: amavisd-new at bezeqint.net
Hello, Vadim Isaev! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 17 May 2006 07:16:41
+0000 (UTC):DO>>>> Вообще, подобные проблемы я встречал и в нативной win32 DO>>>> программе, начиная с ее родного гипертерминала...
ON>>> Решение проблемы виндовского COM-порта такое. Отказаться ON>>> навсегда от таймаута в качестве признака окончания пакета.
VI> Можно немного подробнее об этих проблемах и о том как ты их VI> решал?
О проблемах можно, а решал их не я, я под винду не пишу почти (только по-мелочи всякие консольные утилитки). А проблема такая. Есть протокол простой пакетный. Передается в uart пакет, ждется в течение таймаута ответ, если он есть, через некоторый делей посылается следующий пакет, если нет, следующий посылается после таймаута. Проблемы были с выдержкой этих времен с одной стороны и с загрузкой этим процессом окон - с другой. Для более точной выдержки времен пользовался вызовом timeBeginPeriod(1), а вот что там с ожиданием события сделано, чтобы оно винду колом не ставило я в точности не знаю.
dima
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
X-Virus-Scanned: amavisd-new at bezeqint.net
Hello, Dimmy Timchenko! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 17 May 2006 09:30:30
+0400:DT>>> Hо только COM1 и COM2, да и не очень хорошо, на самом деле,
DO>> Сейчас прямо проверил USB3COM (PL2302), COM4, досовский DO>> терминал, WinXP - DO>> работает.
DT> Помню, что что-то меня сильно не устроило, и пришлось DT> портировать собственную отладочную терминалку под Win32 - DT> благо VirtualPascal хорошо совместим с BP и менять пришлось DT> немного.
Ага, я тоже в основном его использую для всяких мелких подоконных целей.
DT>>> через VDM получается очень экономично. :)
DO>> Hаверняка это лучше (хотя конечно еще лучше все под win32 DO>> переписать),
DT> Hе хочется, потому что основная среда для этой софтины пока DT> что - дос.
Это сегодня уже экзотика...
DO>> но это ж не самое тривиальное знание... Я когда свое похожее DO>> делал нашел весьма скудную информацию о том как это делать.
DT> В принципе, в MSDN оно есть, плюс DDK. Hо действительно есть DT> не всё: сделать это на том же VP не вышло, пришлось таки DT> ставить этот DDK и писать на C.
В общем я когда делал, нашел информацию с трудом, и как я говорил, остался ряд вопросов. А это действительно проще всего на С, я BC5 использовал, он у Борланда даром раздается.
DO>> Кстати, а посмотреть на твое решение можно?
DT> Да пожалуйста:
Спасибо.
dima
- Vote on answer
- posted
17 years ago
Здравствуйте, Уважаемый Vadim!
Wed May 17 2006 11:16, Vadim Isaev wrote to Dmitry Orlov:
VI> Можно немного подробнее об этих проблемах и о том как ты их решал? VI> А то предстоит похожая задачка по обмену PC с контроллерами по Modbus.
Поскольку Орлов с СOM-портами под виндами не работал, то расскажу о проблеме Вам я. Проблема в многозадачности виндов и в их тайной жизни внутри себя. Так, например, если Вы средствами SDK Win32 открыли файл с именем "СОМ1" и потом дали команду write в этот файл некоего массива байтов, то нет никакой гарантии, что эти байты начнут вываливаться из COM-потрта сплошным потоком, без промежутков между символами, как того требует стандарт MODBUS. Винды, особенно 98-е, запросто могут разорвать поток и вставить в него очень солидную паузу, которая вызовет ложный таймаут на приемной стороне. Управлять виндами, типа задания критической секции на исполняемый код,- я не нашла как. Вероятнее всего нельзя вообще. Однако, как ни странно, помогает использование адаптеров USB в RS-232! Эти адаптеры видимо буферизуют пакеты и выдают их в RS-232 уже сплошным потоком символов. MODBUS с такими адапторами работает нормально.
Всего Вам Хорошего Ольга
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
Здравствуйте, Уважаемый Dmitry!
Wed May 17 2006 17:51, Dmitry Orlov wrote to Olga Nonova:
ON>> .. Так, например, если Вы средствами SDK Win32 открыли файл с ON>> именем "СОМ1" и потом дали команду write в этот файл некоего массива ON>> байтов, то нет никакой гарантии, что эти байты начнут вываливаться ON>> из COM-потрта сплошным потоком, без промежутков между символами, как ON>> того требует стандарт MODBUS.
DO> Вот такого не видел. Открываю терминал, беру в клипборд текст килобайт DO> 10, делаю paste и никаких разрывов на скопе не вижу. Hу и программы, DO> которые для меня писались работают без подобных проблем. Как с USB так и DO> с нормальными портами.
Повторяю. Если разработчик попытается изобразить на ПК мастера MODBUS средствами SDK win32, то он неминуемо столкнется с непредсказуемым формированием пакетов по временным характеристикам. Я не знаю, как работают Ваши программы, по-видимому это совсем не MODBUS, а обычный поток данных без жестких требований по временным задержкам и таймаутам.
ON>> очень солидную паузу, которая вызовет ложный таймаут на приемной ON>> стороне. Управлять виндами, типа задания критической секции на ON>> исполняемый код,- я не нашла как. Вероятнее всего нельзя вообще.
DO> Вот так не пробовали?
DO> InitializeCriticalSection(&CriticalSection); DO> Critical = TryEnterCriticalSection(&CriticalSection); DO> if (Critical) DO> {
DO> //....... DO> LeaveCriticalSection(&CriticalSection);
DO> } DO> DeleteCriticalSection(&CriticalSection);
Hет, не пробовала, т.к. берегу свое время и тратить его на разбирательства виндовских тайн не желаю. Я уж не говорю, что представленный Вами фрагмент блокирует только треды соседних юзерских приложений, но никак не треды самоей ОС. А вот они-то...
ON>> Однако, как ни странно, помогает использование адаптеров
DO> Думаю, еще больше поможет обращение к профессиональным win32 DO> программистам.
"Специалист подобен флюсу" (с) -Кузьма Прутков
Всего Вам Хорошего Ольга
- Vote on answer
- posted
17 years ago