|
Помогите разобратся с RS-232, проверка портов и т.п. |
|
|
|
Nov 14 2008, 20:35
|

Группа: Новичок
Сообщений: 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." Надеюсь на вашу помощь . хотябы часть обьясните.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
Nov 14 2008, 21:26
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(zltigo @ Nov 15 2008, 00:09)  Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN. Под делфи есть компоненты для работы с ком портом, а так Win API использовать
|
|
|
|
|
Nov 14 2008, 22:02
|

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

|
Цитата(zltigo @ Nov 15 2008, 00:09)  Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN. значит данные берутся с Биоса? уже хорошо. Забыть я этот бред не могу - у меня такое д.з. правда изучаем мы паскаль... с Win API не знаком значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале?
|
|
|
|
|
Nov 14 2008, 23:20
|

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Nov 14 2008, 23:28
|
Профессионал
    
Группа: Свой
Сообщений: 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/
|
|
|
|
|
Nov 15 2008, 00:38
|

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

|
Цитата(vvs157 @ Nov 15 2008, 02:28)  Методы работы взятые из ДОС под Виндами неприменимы. а что имел в виду автор в книге говоря что прога под винду? Цитата Придется изучить то, что относится к COM. Или использовать библиотеки. с чего начать?
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 15 2008, 05:42
|

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

|
Цитата а что имел в виду автор в книге говоря что прога под винду? Винда разная бывала. Windows 3.11 к примеру. Обращение к портам напрямую из виндов не такая тривиальная задача. http://www.zealsoftstudio.com/ntport/Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться.
--------------------
On the road again (Canned Heat)
|
|
|
|
|
Nov 15 2008, 06:48
|
Группа: Новичок
Сообщений: 11
Регистрация: 12-04-08
Пользователь №: 36 705

|
компонент для работы с COM-портом: http://www.tmssoftware.com/site/async32.aspДля всех версий делфи и c++ билдера. Бесплатен. С документацией.
|
|
|
|
|
Nov 15 2008, 11:33
|

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

|
Цитата(Капитан Хард @ Nov 15 2008, 03:38)  а что имел в виду автор в книге говоря что прога под винду? Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено. Уточните задание у преподавателя. С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API.
|
|
|
|
|
Nov 15 2008, 12:56
|

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

|
Цитата(DpInRock @ Nov 15 2008, 08:42)  http://www.zealsoftstudio.com/ntport/Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться. в английском не рублю Цитата(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 недели и если я ему ничего не принесу будет полный армагеддец Цитата(SysRq @ Nov 15 2008, 14:33)  С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API. что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит. Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для : 1. проверки адресов порта 2. инициальзации порта (установки скоростей , выводов и т.п.) 3. передачи данных (вбил в ячейку - нажал на кнопку - байт полетел) как я понимаю для этого нужно скачать компонент для работы с COM-портом... но вот разобратся в его командах и синтаксисе без знания английского для меня проблемма
|
|
|
|
|
Nov 16 2008, 17:41
|

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

|
Цитата Читайте классику: Serial Communications in Win32 (частично на русском: Последовательная связь в Windows NT). я конечно не сильно крут в программировании но ... синтаксис сльно напоминает Си. Пока что пытаюсь разобратся, спасибо за ссылки... ------------------------------- итак начнем... для того чтобы работать с Ком портом надо его "включить" грубо говоря и выставить настройки. а т.к. передача информации через порт работает как передача файлов (я прав?) мы джолжны включить этот процесс... есть код файловой функции WinAPI: Код HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); чтобы работать с COM портом №1 нам надо переделать код вот так: Код HANDLE CreateFile( LPCTSTR COM1, DWORD GENERIC_READ|GENERIC_WRITE, DWORD 0, LPSECURITY_ATTRIBUTES NULL, DWORD OPEN_EXESTING, DWORD FILE_FLAG_OVERLAPPED, HANDLE NULL ); но как я понимаю это все под делфи не катит? для делфи надо использовать: Код hPort := CreateFile(‘COM1’, GENERIC_READ or GENERIC_WRITE, 0, nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED, 0);
if hPort = INVALID_HANDLE_VALUE then raise Exception.Create('Error opening port'); а это закрывает порт? а как это будет на Делфи? Код BOOL CloseHandle( HANDLE hObject ) З.Ы. кстати... чтоб разобратся во всем я начал вот тут тему писать... http://nstalker.forum24.ru/?1-3-0-00000001-000-0-0
Сообщение отредактировал Капитан Хард - Nov 16 2008, 18:34
|
|
|
|
|
Nov 17 2008, 08:36
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(zltigo @ Nov 15 2008, 10:15)  Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, Истины ради - прямого доступа все равно нет, VDM это все виртуализует и сводит к вызовам Win32 API (причем на пользовательском уровне, без обращений в ядро) Цитата но это не отменяет дебильность задания. С этим согласен на все 100%
|
|
|
|
|
Nov 17 2008, 09:08
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(Капитан Хард @ Nov 15 2008, 15:56)  в английском не рублю спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту? пользуюсь XP и NT меня не волнует ... как и другие операционки. картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит. Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для : 1. проверки адресов порта 2. инициальзации порта (установки скоростей , выводов и т.п.) 3. передачи данных (вбил в ячейку - нажал на кнопку - байт полетел) как я понимаю для этого нужно скачать компонент для работы с COM-портом... но вот разобратся в его командах и синтаксисе без знания английского для меня проблемма Ну, а ты что хотел, что бы тут за тебя программу написали, разбирайся, тем для изучения тебе много подкинули, прогугли по этой теме (по тем же самым win api), навярняка есть куча полезных статей в нете и на русском языке, приложи сам чуток усилий  Вот примеры с одной книги по AVR, там из проги на Дельфи команды МК посылаются, может поможет чем : http://www.sendspace.com/file/l9xa12[quote name='Капитан Хард' date='Nov 15 2008, 15:56' post='501275'] в английском не рублю спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту? пользуюсь XP и NT меня не волнует ... как и другие операционки. картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит. [b]Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для : 1. проверки адресов порта 2. инициальзации порта (установки скоростей , выводов и т.п.) 3. передачи данных (вбил в ячейк
|
|
|
|
|
Nov 17 2008, 10:47
|

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

|
Цитата Ну, а ты что хотел, что бы тут за тебя программу написали, разбирайся, тем для изучения тебе много подкинули, прогугли по этой теме (по тем же самым win api), навярняка есть куча полезных статей в нете и на русском языке, приложи сам чуток усилий Я уже далеко не чуток усилий приложил... и гуглил ... и в магазины за книжками бегал... по данной теме пусто! . Ну или я такой тупой. А то что за меня программу писали... не... это не пойдет... я сам хоть тыщу прог напишу (тем более этого требуют). Просто я обычно читаю книги а там все по полкам разложено... если что непонятно в даташит лезу... а тут  ну просто темень какаято... вы же профи!!!... вам ничего не стоит написать пару правильных строчек для примера. А потом я уже по командам буду разбиратся если что непонятно... а то в одном одно написано ... в другом другое... иногда понятно как это все работает но непонятно как это реализуется на практике . а потом перекинте всю инфу в отдельный FAQ и будет всем начинающим прогерам счастье!!! Xenom0rph за програмки Респект и уважуха!!! Огромнейшее спасибо!!! через пару часиков сяду разбиратся.
Сообщение отредактировал Капитан Хард - Nov 17 2008, 10:50
|
|
|
|
|
Nov 17 2008, 11:31
|

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

|
Цитата(Xenom0rph @ Nov 17 2008, 14:13)  в этой ветке проскачила тема про COM порты, и там один человек выложил примеры, по ним разобрался за пару часов и почему я этого не смог найти  ... как всегда "в танке"
Сообщение отредактировал Капитан Хард - Nov 17 2008, 11:32
|
|
|
|
|
Nov 17 2008, 11:57
|

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

|
Цитата(MrYuran @ Nov 17 2008, 14:46)  Вот , приличная статейка, сам по ней начинал. негрузит
|
|
|
|
|
Nov 17 2008, 11:59
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(Капитан Хард @ Nov 17 2008, 14:31)  и почему я этого не смог найти  ... как всегда "в танке" да сейчас и я уже не смог найти, но вот, что мне помогло: http://www.sendspace.com/file/bcvili
|
|
|
|
|
Nov 17 2008, 22:19
|

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

|
скачал Программа конечно прикольная но я это должен сделать сам. а вот примеров на делфи я в этой программе не нашел.
|
|
|
|
|
Nov 18 2008, 06:12
|

Любитель Кошек
    
Группа: Свой
Сообщений: 1 593
Регистрация: 8-06-06
Пользователь №: 17 873

|
Цитата(Капитан Хард @ Nov 18 2008, 01:19)  скачал Программа конечно прикольная но я это должен сделать сам. а вот примеров на делфи я в этой программе не нашел. Если ставили по умолчанию, то примеры лежат: c:\Program Files\PCommLite\Example\DELPHI\ и что бы посмотреть что получается, их надо откомпилировать. А екзешники - это для работы с платами MOXA и Вам они вряд ли понадобятся. Сама их библиотека работает как часы, на моем опыте тикает не менее 8 лет. Кстати в руководстве описано как это использовать.
--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|