Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к портам самодельного устройства 
:(
    Опции темы
Crait
Дата 1.11.2003, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Bagira, попроси своих электронщиков сделать приспособу
для тестирования ввода из порта - с кнопочками, они поймут.

И зачем все-таки работа с портами вынесена в .dll ?

По поводу величины задержек между командами ввода-вывода,
о которых говорил Baa.
В свое время, чтобы все заработало корректно на "самодельной плате",
потребовалось проставить 4-микросекундные задержки.

Да, вот еще что. Если устройство достаточно медленное
и позволяет работать в таком режиме, а в твоем случае это, кажется, так,
так вот, советую считывать данные из порта ввода более одного раза -
до совпадения считанных два последовательных раза значений.
Это нужно для подавления помех на линии.
А то некоторые компы, бывает, наводят...

Это сообщение отредактировал(а) Crait - 1.11.2003, 20:41
PM MAIL   Вверх
bagira
Дата 2.11.2003, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Привет всем!
man2002ua: что такое импортируемая переменная и как ее объявить?
Posol: где можно узнать подробнее про разделяемую память?
Crait: О том, что ассемблерные процедуры следует выносить в отдельную DLL, я прочитала в статье:
http://www.delphikingdom.com/mastering/ports1.htm





--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
Crait
Дата 3.11.2003, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



По крайней мере на Win9x не надо, все прекрасно работает и так.

Под NT же одного только переноса в .dll команд обращения к портам
увы, окажется недостаточно ;)
PM MAIL   Вверх
man2002ua
Дата 3.11.2003, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



bagira, все же приведи кусок кода в к-м идет непоср. обращение к портам.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
bagira
Дата 5.11.2003, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Привет всем!
Сегодня у меня две новости: хорошая и плохая. Начну, пожалуй, с хорошей.
Итак, загадка, связанная с обращениями к портам и с последующей передачей данных в основную программу, успешно разрешилась! Ура, товарищи!
Когда Posol и man2002ua обратили мое внимание на связь переменных в DLL и в основной программе, я чуть-чуть переработала процедуру - и вот пожалуйста! Все передается!

Вариант первоначальный - в основную программу нужное значение не передавалось.
{library}
...
procedure DataRead(var dpn:byte); stdcall;
begin
asm
mov dx,$1fb
in al,dx
...
mov byte ptr dpn,al
...
end;
end;

Вариант исправленный, введена дополнительная переменная dp, глобальная для данной процедуры.
{library}
...
var dp:byte;
...
procedure DataRead(var dpn:byte); stdcall;
begin
asm
mov dx,$1fb
in al,dx
...
mov byte ptr dp,al
...
end;
dpn:=dp;
end;

Когда процедура приняла такой вид, при обращении к процедуре в основной программе:
DataRead(dn); {dn была объявлена как byte}
- в переменную dn попадает значение, считанное из порта.

Плохая новость связана с аппаратной частью всей этой затеи. После разговора с электронщиками мне стало ясно, как я заблуждалась: думала, что всегда сначала вырабатывается тактовый байт, моя программа считывает его в порту $1FA, проводит анализ - если присутствует единица в младшем разряде, то можно начинать считывание байта данных в порту $1FB (т.е. я считала, что байт данных при этом где-то ждет и лишь после моей команды
in al,dx проходит в порт). А оказалось все гораздо хуже, о чем раньше мне не говорили. Электронщики разработали контроллер и интерфейсную плату таким образом, что как только выставлен номер установки в линию связи, та установка, чей номер совпал с выставленным, сразу отправляет всю партию данных в линию связи одновременно с тактами, одно от другого не зависит. Если моя программа не успеет в силу каких-либо причин считать очередной тактовый байт, то при этом соответствующий ему байт данных просто пропадет в никуда. Особенно, если эта штуковина работает под Windows. Вот это сейчас и происходит - часть данных приходит, часть теряется, и никаким подбором временных задержек не удается точно подстроиться под частоту следования этой последовательности байтов. Тем более, что частоту эту я не знаю - электронщики не могут мне ответить, через какие точно промежутки времени следуют байты. Как это ни печально, но похоже, что ничего сделать не удастся. Как эти данные зацепить-то? Когда работала под DOS, не было таких проблем ...
До свидания!


--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
Vit
Дата 5.11.2003, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Оставить работать под ДОС или использовать какую-либо ось реального времени QNX например...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 5.11.2003, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Слушай, а если прогу запустить с наивысшим приорететом? Неужели не помогает? И не из-под Дельфи IDE?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
remax
Дата 5.11.2003, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



1) Насчет частоты
Цитата
Тем более, что частоту эту я не знаю - электронщики не могут мне ответить, через какие точно промежутки времени следуют байты.

Самостоятельно считаешь тактовые импульсы и фиксируешь суммарное время от первого импульса до последнего. Затем, делишь число тактов-1 на время (с) =Частота (Гц). Но это тебе совершенно ненужно

2) Насчет задержек.
Цитата
никаким подбором временных задержек не удается точно подстроиться под частоту следования этой последовательности байтов

Использовать задержки в этом процессе - гиблое дело. Даже если процесс приема данных осуществляется по прерываниям (COM port, например), а в процедуре приема данных втулячены задержки (sleep, например) практически наверняка будут потери. (Проверено много раз)

3) Насчет "очереди" байтов
Цитата
я считала, что байт данных при этом где-то ждет и лишь после моей команды
Само по себе такое не бывает ни в Досе ни Виндовс.

4) Насчет повышения надежности
Цитата
Как эти данные зацепить-то? Когда работала под DOS, не было таких проблем ...
Причина очевидна - Windows- псевдо многозадачная система. Если паралельно работают несколько процессов то происходит постоянное переключение между ними. В Dos была активна только ваша программа.
Есть как минимум два варианта, оба связаны с повышением приоритета считывающей процедуры:
ВАРИАНТ 1. Стандартный. Повысить приоритет всего приложения.
ВАРИАНТ 2. Экзотический. Процедуру обмена с железом сделать под DOS и запустить в сеансе MS DOS. Предусмотреть в ней соответствующий буфер. А Win программа будет общаться через Dos программу. Смысл всей этой сложности в том, что Dos программы при запуске из под Win9x имеют приоритет на уровне драйверов ядра. Получить такой приоритет для пользовательской Winпрограммы практически невозможно.


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Vit
Дата 5.11.2003, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата(remax @ 5.11.2003, 13:35)
Получить такой приоритет для пользовательской Winпрограммы практически невозможно.

А если написать свой VxD или сервис?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
remax
Дата 5.11.2003, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Цитата(Vit @ 5.11.2003, 19:39)
Цитата(remax @ 5.11.2003, )
Получить такой приоритет для пользовательской Winпрограммы практически невозможно.

А если написать свой VxD или сервис?

Теоретически, это так. Но практически Bagire как новичку в программировании под Win это значительно более сложный путь. Хотя в промышленных компьютерах (которые управляют различной автоматикой) идут по этому пути + обрезают сам Windows по самое нехочу - чтобы лишние (ненужные) процессы не путались под ногами.

Но на самом деле, меня не оставляют смутные сомнения, что проблема даже не в приоритете. Не знаю на сколько именно замедляет работу связка Prog->DLL->Prog, особенно если много раз подряд, но в одном модуле это точно будет быстрее. Кроме того, возможно необходимо вообще оптимизировать процедуру приема. Но есть и другие соображения.

Прикидки следующие:
Если контролер старый, то он во первых на шине ISA во вторых, скорее всего, на советских микросхемах 155, 555 или 1533 серии. А это значит, что максимальная такстовая частота работы устройства в прыжке 10МГц. С учетом разных факторов и личного опыта думаю, что Реальная пропускная способность не больше 1 Мб. А скорее всего еще меньше. Компьютер на котором установлен Win9x должен иметь частоту не менее 100 МГц (иначе, это не работа, а порнография). Имеем не менее 100 кратного превышения! Устройство должно успевать опрашиваться на все 100%.

Выводы:
1) Либо программа не оптимальная (делает много лишних телодвижений)
2) Либо в Win установлено много чего лишнего (Ребятки, управляющий компьютер не должен одновременно быть и офисным и серверным и ...).
3) Ресурсы компьютера недостаточны для Win - плохое быстродействие или мало ОЗУ (регулярный своп на диск).

Это сообщение отредактировал(а) remax - 5.11.2003, 23:26


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
man2002ua
Дата 6.11.2003, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



bagira а можешь показать код чтения портов под дос? Может и выплывет что-то еще smile.gif
если много, то сюда> [email protected]


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
bagira
Дата 9.11.2003, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Здравствуйте! Это снова я...
1. Vit, оставить программу под DOS никак нельзя - хитрый пользователь (а работает вся эта ерунда на заводе в другом городе), позвонил и сказал, что под DOS работать неудобно, и возжелал программу под Windows. Начальник ответил, что это - запросто - он же не понимает... После этого мне уже нельзя было отступать... И еще, я к сожалению, не понимаю, как сделать наивысший приоритет. Что это, вообще, такое? И как пишут VxD? В знании Delphi у меня огромные пробелы - только в октябре начала изучать...
2. Remax, можно узнать подробнее про вариант №2 - экзотический? Это, наверное, очень удачный вариант, но можно ли сделать так, чтобы пользователь не заметил момент обращения к MS DOS?
3. Man2002ua, код отправлю позднее.


--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
Vit
Дата 10.11.2003, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата(bagira @ 9.11.2003, 11:51)
И еще, я к сожалению, не понимаю, как сделать наивысший приоритет.

Приоретет - это сколько процессорного времени выделяется конкретному потоку. Посмотри например функцию CreateProcess...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
bagira
Дата 13.11.2003, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2858
Регистрация: 25.10.2003
Где: в тайге Уральских гор

Репутация: нет
Всего: 123



Vit, почему-то в Help я не нашла CreateProcess...


--------------------
Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил...
Ф.Х. Дагларджа (Турция)
http://zveriolginovour.ru/
https://vmeste.yandex.ru/zveriolginovour 
PM MAIL WWW ICQ   Вверх
Vit
Дата 13.11.2003, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Известные грабли. Кликни по иконке help правой кнопкой мыши, далее в меню выбрали Customize, засладка Commands, раздел Help, находишь иконку "Windows API" и вытаскиваешь её на панель инструментов. Вот там и описаны почти все функции WinAPI


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.