реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Помогите разобратся с RS-232, проверка портов и т.п.
Капитан Хард
сообщение Nov 14 2008, 20:35
Сообщение #1





Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923



Прошу помощи разобратся.

Тут привожу функцию RS232(x) со скана книжки! а значит и ошибок много, написанная на Турбо Паскале для Windows. RS232(0) возвращает количество установленных COM-портов, RS232(1)-базовый адрес COM1, RS232(2) - базовый адрес COM2 и т.п.

Код
(*-библиотека ресурсов №A6 (определение базовых адресов COM-портов).-*)
(Universal auto detection of COM base address)
Function RS232(x:integer).integer; export;
(* $0000:$0400 содержит базовый адрес порта COM1,
$0000:$0402 содержит базовый адрес порта COM2,
$0000:$0404 содержит базовый адрес порта COM3,
$0000:$0406 содержит базовый адрес порта COM4,
$0000:$0406 содержит количество COM портов в двоичном формате.* )
var
Number_of_COM,  COM1, COM2, COM3, COM4:integer;
begin
numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*)
numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1;
  COM1:=0; COM2:=0; COM3:=0; COM4:=0;
  COM1:=memw($40:$00); (*Процедура чтения из памяти*)
  COM2:=memw($40:$02);
  COM3:=memw($40:$04);
  COM4:=memw($40:$06);
Case x of
  0: RS232:= numer_of_COM;
  1: RS232:= COM1;
  2: RS232:= COM2;
  3: RS232:= COM3;
  4: RS232:= COM4;
end;
end;



Хочу этот код использовать в Делфи в проекте "управление двигателем" чтоб сначала проверить количество COMпортов на компе и их базовые адреса. Потом задам вопросы по инициализации COM порта.

Вопросы:
1. как переделать синтаксис чтобы этот код их Турбо паскаля заработал в Делфи
2. то что (*текст*) - коментарии? я прав?
3. обьясните мне этот участок кода:
Код
numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*)
numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1;
  COM1:=0; COM2:=0; COM3:=0; COM4:=0;
  COM1:=memw($40:$00); (*Процедура чтения из памяти*)
  COM2:=memw($40:$02);
  COM3:=memw($40:$04);
  COM4:=memw($40:$06);

а именно:
3.1 что мы присваиваем переменной numer_of_COM в первой строчке? (имею в виду функцию mem($40:$11))
3.2 что мы добиваемся второй строчкой?
а именно: numer_of_COM and (8+4+2)) shr 1
почему не: numer_of_COM and 14) shr 1
3.3 COM1:=memw($40:$00); - функция memw($40:$00) из чего читает и что она делает

а теперь догадки : есть прелположение что функции memw и mem читают из ОЗУ . в инете встречал формулировку:
"Mem - это массив памяти. Т.е. с помощью указания номера элемента вы получаете доступ к определенной ячейке. существует 3 вида массива Mem:

* сам Mem - каждый компонент такого массива типа byte.
* MemW - каждый компонент типа word.
* MemL - каждый компонент типа longint."


Надеюсь на вашу помощь . help.gif
хотябы часть обьясните.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 14 2008, 21:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Капитан Хард @ Nov 14 2008, 23:35) *
Хочу...

Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Xenom0rph
сообщение Nov 14 2008, 21:26
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646



Цитата(zltigo @ Nov 15 2008, 00:09) *
Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN.

Под делфи есть компоненты для работы с ком портом, а так Win API использовать
Go to the top of the page
 
+Quote Post
Капитан Хард
сообщение Nov 14 2008, 22:02
Сообщение #4





Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923



Цитата(zltigo @ Nov 15 2008, 00:09) *
Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN.


значит данные берутся с Биоса? уже хорошо. Забыть я этот бред не могу - у меня такое д.з. правда изучаем мы паскаль...

с Win API не знаком

значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале?
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 14 2008, 22:12
Сообщение #5


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Капитан Хард @ Nov 15 2008, 01:02) *
у меня такое д.з.
Давайте дословно и полностью, ежели хотите чтобы вам подсказали с чего начать и куда двигаться. А пока - не понятно.
Go to the top of the page
 
+Quote Post
Капитан Хард
сообщение Nov 14 2008, 23:20
Сообщение #6





Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923



Дословно? давайте.

дз звучит так : научится передавать байты байты по RS232 по книжечке автора Пей Ана (Сопряжение ПК с внешними устройствами).
написать программу которая будет проверять сколько портов на компе, их адреса , их инициализация и пересылка байтов. Вот такое задание.
для передачи данных использовать "3х проводной" интерфейс.

кстати насчет программы - я её немножко переработал , нашел ошибки в синтаксисе и урезал коментарии для наглядности кода:

Код
Function RS232(x:integer):integer; export;
var
  number_of_COM, COM1, COM2, COM3, COM4:integer;
begin
number_of_COM:=mem($40:$11);
number_of_COM:=(number_of_COM and (8+4+2)) shr 1;
COM1:=0; COM2:=0; COM3:=0; COM4:=0;
COM1:=memw($40:$00);
COM2:=memw($40:$02);
COM3:=memw($40:$04);
COM4:=memw($40:$06);
  Case x of 0:
  0: RS232:= number_of_COM;
  1: RS232:= COM1;
  2: RS232:= COM2;
  3: RS232:= COM3;
  4: RS232:= COM4;
  end;
end;


Сообщение отредактировал Капитан Хард - Nov 14 2008, 23:22
Go to the top of the page
 
+Quote Post
vvs157
сообщение Nov 14 2008, 23:28
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(Капитан Хард @ Nov 15 2008, 01:02) *
с Win API не знаком
Придется изучить то, что относится к COM. Или использовать библиотеки. Методы работы взятые из ДОС под Виндами неприменимы. Про BIOS касательно последовательного порта под Win забудьте.
Цитата(Капитан Хард @ Nov 15 2008, 01:02) *
значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале?
Взять например http://sourceforge.net/projects/tpapro/
Go to the top of the page
 
+Quote Post
Капитан Хард
сообщение Nov 15 2008, 00:38
Сообщение #8





Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923



Цитата(vvs157 @ Nov 15 2008, 02:28) *
Методы работы взятые из ДОС под Виндами неприменимы.


а что имел в виду автор в книге говоря что прога под винду?



Цитата
Придется изучить то, что относится к COM. Или использовать библиотеки.

с чего начать?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 15 2008, 05:42
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
а что имел в виду автор в книге говоря что прога под винду?

Винда разная бывала. Windows 3.11 к примеру.
Обращение к портам напрямую из виндов не такая тривиальная задача.

http://www.zealsoftstudio.com/ntport/

Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
shuks
сообщение Nov 15 2008, 06:48
Сообщение #10





Группа: Новичок
Сообщений: 11
Регистрация: 12-04-08
Пользователь №: 36 705



компонент для работы с COM-портом:
http://www.tmssoftware.com/site/async32.asp
Для всех версий делфи и c++ билдера. Бесплатен. С документацией.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 15 2008, 07:15
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(DpInRock @ Nov 15 2008, 08:42) *
Обращение к портам напрямую из виндов не такая тривиальная задача.

Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, но это не отменяет дебильность задания.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 15 2008, 11:33
Сообщение #12


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Капитан Хард @ Nov 15 2008, 03:38) *
а что имел в виду автор в книге говоря что прога под винду?
Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено.

Уточните задание у преподавателя.
С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 15 2008, 12:16
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Турбо Паскаля для NT я не встречал. И если нужно работать именно с ним, то без ntport не обйтись.

И вообще, эта дллка очень полезная в хозяйстве вещь. Вот вдруг ни с того, ни с сего понадобилось бы ногой ЛПТ порта подрыгать по-быстрому?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 15 2008, 12:40
Сообщение #14


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(SysRq @ Nov 15 2008, 17:33) *
Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено.


ntvdm достаточно хорошо виртуализует доступ к последовательным портам. Так что всё должно работать.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Капитан Хард
сообщение Nov 15 2008, 12:56
Сообщение #15





Группа: Новичок
Сообщений: 14
Регистрация: 13-10-08
Пользователь №: 40 923



Цитата(DpInRock @ Nov 15 2008, 08:42) *
http://www.zealsoftstudio.com/ntport/
Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться.

в английском не рублю wacko.gif

Цитата(shuks @ Nov 15 2008, 09:48) *
компонент для работы с COM-портом


спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту?

Цитата(zltigo @ Nov 15 2008, 10:15) *
Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, но это не отменяет дебильность задания.


пользуюсь XP и NT меня не волнует ... как и другие операционки.

Цитата(SysRq @ Nov 15 2008, 14:33) *
Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено.

картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец twak.gif

Цитата(SysRq @ Nov 15 2008, 14:33) *
С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API.


что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит.


Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для :
1. проверки адресов порта
2. инициальзации порта (установки скоростей , выводов и т.п.)
3. передачи данных (вбил в ячейку - нажал на кнопку - байт полетел)


как я понимаю для этого нужно скачать компонент для работы с COM-портом... но вот разобратся в его командах и синтаксисе без знания английского для меня проблемма
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 17:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01615 секунд с 7
ELECTRONIX ©2004-2016